From 04ae3e11945d1dc27b99bf39df9e73e1b2dbf94a Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 2 Aug 2018 10:42:52 +0200 Subject: [PATCH 01/22] Change filesharing management --- src/android/org/linphone/LinphoneUtils.java | 97 ++++--------------- .../activities/LinphoneLauncherActivity.java | 12 +-- 2 files changed, 20 insertions(+), 89 deletions(-) diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java index ab6057a1e..30b4e656c 100644 --- a/src/android/org/linphone/LinphoneUtils.java +++ b/src/android/org/linphone/LinphoneUtils.java @@ -22,9 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; -import android.content.ContentUris; import android.content.Context; -import android.content.CursorLoader; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; @@ -37,7 +35,6 @@ import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.ParcelFileDescriptor; -import android.provider.DocumentsContract; import android.provider.MediaStore; import android.telephony.TelephonyManager; import android.text.Spanned; @@ -599,84 +596,30 @@ public final class LinphoneUtils { } - /************************************************************************************************ - * Picasa/Photos management workaround * - ************************************************************************************************/ - public static String getFilePath(final Context context, final Uri uri) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) { - // ExternalStorageProvider - if ("com.android.externalstorage.documents".equals(uri.getAuthority())) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - if (split.length >= 1) return Environment.getExternalStorageDirectory() + "/" + split[1]; + String result = null; + Cursor returnCursor = + context.getContentResolver().query(uri, null, null, null, null); + String type = getTypeFromUri(uri, context); - // TODO handle non-primary volumes - }// Docs storage - else if ("com.google.android.apps.docs.storage".equals(uri.getAuthority())) { - //Google doc not supported right now + returnCursor.moveToFirst(); + try { + File localFile = createFile(context, null, type); + InputStream remoteFile = context.getContentResolver().openInputStream(uri); + + if(copyToFile(remoteFile, localFile)) { + result = localFile.getAbsolutePath(); } - // DownloadsProvider - else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) { - final String id = DocumentsContract.getDocumentId(uri); - try { - final Uri contentUri = ContentUris.withAppendedId( - Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); - - return getDataColumn(context, contentUri, null, null); - } catch (NumberFormatException nfe) { - if (id.startsWith("raw:")) { - return id.substring(4); - } - } - } - // MediaProvider - else if ("com.android.providers.media.documents".equals(uri.getAuthority())) { - final String docId = DocumentsContract.getDocumentId(uri); - final String[] split = docId.split(":"); - final String type = split[0]; - - Uri contentUri = null; - if ("image".equals(type)) { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; - } else if ("video".equals(type)) { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; - } else if ("audio".equals(type)) { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; - } - - final String selection = "_id=?"; - final String[] selectionArgs = new String[] { - split[1] - }; - - return getDataColumn(context, contentUri, selection, selectionArgs); - } - } else if ("content".equalsIgnoreCase(uri.getScheme())) { - String type = getTypeFromUri(uri, context); - String result = getDataColumn(context, uri, null, null); // - if (TextUtils.isEmpty(result)) - if (uri.getAuthority().contains("com.google.android") || uri.getAuthority().contains("com.android")) { - try { - File localFile = createFile(context, null, type); - FileInputStream remoteFile = getSourceStream(context, uri); - if(copyToFile(remoteFile, localFile)) - result = localFile.getAbsolutePath(); - remoteFile.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return result; - } else if ("file".equalsIgnoreCase(uri.getScheme())) { // File - return uri.getPath(); + remoteFile.close(); + } catch (IOException e) { + e.printStackTrace(); } - return null; + + return result; } - - private static String getTypeFromUri(Uri uri, Context context){ + private static String getTypeFromUri(Uri uri, Context context) { ContentResolver cR = context.getContentResolver(); MimeTypeMap mime = MimeTypeMap.getSingleton(); String type = mime.getExtensionFromMimeType(cR.getType(uri)); @@ -719,7 +662,6 @@ public final class LinphoneUtils { imageFileName = getStartDate()+"."+type; // make random filename if you want. final File root; - imageFileName = imageFileName; root = context.getExternalCacheDir(); if (root != null && !root.exists()) @@ -780,8 +722,7 @@ public final class LinphoneUtils { public static String getRealPathFromURI(Context context, Uri contentUri) { String[] proj = {MediaStore.Images.Media.DATA}; - CursorLoader loader = new CursorLoader(context, contentUri, proj, null, null, null); - Cursor cursor = loader.loadInBackground(); + Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null); if (cursor != null && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); String result = cursor.getString(column_index); @@ -844,7 +785,7 @@ public final class LinphoneUtils { public static Spanned getTextWithHttpLinks(String text) { if (text == null) return null; - + if (text.contains("<")) { text = text.replace("<", "<"); } diff --git a/src/android/org/linphone/activities/LinphoneLauncherActivity.java b/src/android/org/linphone/activities/LinphoneLauncherActivity.java index 1dfc4b657..777c97989 100644 --- a/src/android/org/linphone/activities/LinphoneLauncherActivity.java +++ b/src/android/org/linphone/activities/LinphoneLauncherActivity.java @@ -141,17 +141,7 @@ public class LinphoneLauncherActivity extends Activity { newIntent.putExtra("fileShared", stringFileShared); } }else { - if(((String) intent.getStringExtra(Intent.EXTRA_STREAM)) != null){ - stringUriFileShared = intent.getStringExtra(Intent.EXTRA_STREAM); - }else { - fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); - stringUriFileShared = LinphoneUtils.getRealPathFromURI(getBaseContext(), fileUri); - if(stringUriFileShared == null) - if(fileUri.getPath().contains("/0/1/mediakey:/local") || fileUri.getPath().contains("/ORIGINAL/NONE/")) { - stringUriFileShared = LinphoneUtils.getFilePath(getBaseContext(), fileUri); - }else - stringUriFileShared = fileUri.getPath(); - } + stringUriFileShared = LinphoneUtils.getFilePath(getBaseContext(), fileUri); newIntent.putExtra("fileShared", stringUriFileShared); } }else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { From 28f2e2ed5199554a0c9ce368a71b8fe6946548ad Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 2 Aug 2018 10:49:39 +0200 Subject: [PATCH 02/22] Fix last commit (missing affectation) --- .../org/linphone/activities/LinphoneLauncherActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/android/org/linphone/activities/LinphoneLauncherActivity.java b/src/android/org/linphone/activities/LinphoneLauncherActivity.java index 777c97989..8af4410de 100644 --- a/src/android/org/linphone/activities/LinphoneLauncherActivity.java +++ b/src/android/org/linphone/activities/LinphoneLauncherActivity.java @@ -141,6 +141,7 @@ public class LinphoneLauncherActivity extends Activity { newIntent.putExtra("fileShared", stringFileShared); } }else { + fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); stringUriFileShared = LinphoneUtils.getFilePath(getBaseContext(), fileUri); newIntent.putExtra("fileShared", stringUriFileShared); } From 14337f21a495d257010bdb36a1f310169a076cb8 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 2 Aug 2018 10:52:02 +0200 Subject: [PATCH 03/22] Prevent crash --- src/android/org/linphone/LinphoneUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java index 30b4e656c..48ee97111 100644 --- a/src/android/org/linphone/LinphoneUtils.java +++ b/src/android/org/linphone/LinphoneUtils.java @@ -597,6 +597,7 @@ public final class LinphoneUtils { public static String getFilePath(final Context context, final Uri uri) { + if (uri == null) return null; String result = null; Cursor returnCursor = context.getContentResolver().query(uri, null, null, null, null); From 97db2028153060a7000f514dfc7bb98ef46f39db Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 2 Aug 2018 10:54:25 +0200 Subject: [PATCH 04/22] Update linphone submodule. --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index d0232344c..064b3c30e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit d0232344c705a482feb5ca272abcb044303ef284 +Subproject commit 064b3c30e15de98ac7f03b1d0a323bf565c40498 From 40e5c6872ffcc9082e1a6fceedb220212ccb3ec9 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 2 Aug 2018 13:41:09 +0200 Subject: [PATCH 05/22] Refactor filesharing management --- src/android/org/linphone/LinphoneUtils.java | 119 ++++-------------- .../activities/LinphoneLauncherActivity.java | 11 +- 2 files changed, 30 insertions(+), 100 deletions(-) diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java index 48ee97111..13c49a37a 100644 --- a/src/android/org/linphone/LinphoneUtils.java +++ b/src/android/org/linphone/LinphoneUtils.java @@ -36,6 +36,7 @@ import android.os.Handler; import android.os.Looper; import android.os.ParcelFileDescriptor; import android.provider.MediaStore; +import android.provider.OpenableColumns; import android.telephony.TelephonyManager; import android.text.Spanned; import android.text.TextUtils; @@ -598,14 +599,12 @@ public final class LinphoneUtils { public static String getFilePath(final Context context, final Uri uri) { if (uri == null) return null; - String result = null; - Cursor returnCursor = - context.getContentResolver().query(uri, null, null, null, null); - String type = getTypeFromUri(uri, context); - returnCursor.moveToFirst(); + String result = null; + String name = getNameFromUri(uri, context); + try { - File localFile = createFile(context, null, type); + File localFile = createFile(context, name); InputStream remoteFile = context.getContentResolver().openInputStream(uri); if(copyToFile(remoteFile, localFile)) { @@ -620,11 +619,20 @@ public final class LinphoneUtils { return result; } - private static String getTypeFromUri(Uri uri, Context context) { - ContentResolver cR = context.getContentResolver(); - MimeTypeMap mime = MimeTypeMap.getSingleton(); - String type = mime.getExtensionFromMimeType(cR.getType(uri)); - return type; + private static String getNameFromUri(Uri uri, Context context) { + String name = null; + if (uri.getScheme().equals("content")) { + Cursor returnCursor = context.getContentResolver().query(uri, null, null, null, null); + if (returnCursor != null) { + returnCursor.moveToFirst(); + int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + name = returnCursor.getString(nameIndex); + returnCursor.close(); + } + } else if (uri.getScheme().equals("file")) { + name = uri.getLastPathSegment(); + } + return name; } /** @@ -658,67 +666,20 @@ public final class LinphoneUtils { } } - public static File createFile(Context context, String imageFileName, String type) throws IOException { - if (TextUtils.isEmpty(imageFileName)) - imageFileName = getStartDate()+"."+type; // make random filename if you want. + public static File createFile(Context context, String fileName) throws IOException { + if (TextUtils.isEmpty(fileName)) + fileName = getStartDate(); + + if (!fileName.contains(".")) { + fileName = fileName + ".unknown"; + } final File root; root = context.getExternalCacheDir(); if (root != null && !root.exists()) root.mkdirs(); - return new File(root, imageFileName); - } - - - public static FileInputStream getSourceStream(Context context, Uri u) throws FileNotFoundException { - FileInputStream out = null; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - ParcelFileDescriptor parcelFileDescriptor = - context.getContentResolver().openFileDescriptor(u, "r"); - FileDescriptor fileDescriptor = null; - if (parcelFileDescriptor != null) { - fileDescriptor = parcelFileDescriptor.getFileDescriptor(); - out = new FileInputStream(fileDescriptor); - } - } else { - out = (FileInputStream) context.getContentResolver().openInputStream(u); - } - return out; - } - - /** - * Get the value of the data column for this Uri. This is useful for - * MediaStore Uris, and other file-based ContentProviders. - * - * @param context The context. - * @param uri The Uri to query. - * @param selection (Optional) Filter used in the query. - * @param selectionArgs (Optional) Selection arguments used in the query. - * @return The value of the _data column, which is typically a file path. - */ - static String getDataColumn(Context context, Uri uri, String selection, - String[] selectionArgs) { - - Cursor cursor = null; - final String column = "_data"; - final String[] projection = { - column - }; - - try { - cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, - null); - if (cursor != null && cursor.moveToFirst()) { - final int column_index = cursor.getColumnIndexOrThrow(column); - return cursor.getString(column_index); - } - } finally { - if (cursor != null) - cursor.close(); - } - - return null; + return new File(root, fileName); } public static String getRealPathFromURI(Context context, Uri contentUri) { @@ -733,32 +694,6 @@ public final class LinphoneUtils { return null; } - public static String processContactUri(Context context, Uri contactUri){ - ContentResolver cr = context.getContentResolver(); - InputStream stream = null; - if(cr !=null) { - try { - stream = cr.openInputStream(contactUri); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - if(stream != null) { - StringBuffer fileContent = new StringBuffer(""); - int ch; - try { - while ((ch = stream.read()) != -1) - fileContent.append((char) ch); - } catch (IOException e) { - e.printStackTrace(); - } - String data = new String(fileContent); - return data; - } - return null; - } - return null; - } - public static String getContactNameFromVcard(String vcard){ if(vcard != null) { String contactName = vcard.substring(vcard.indexOf("FN:") + 3); diff --git a/src/android/org/linphone/activities/LinphoneLauncherActivity.java b/src/android/org/linphone/activities/LinphoneLauncherActivity.java index 8af4410de..88d8e2ec1 100644 --- a/src/android/org/linphone/activities/LinphoneLauncherActivity.java +++ b/src/android/org/linphone/activities/LinphoneLauncherActivity.java @@ -132,14 +132,9 @@ public class LinphoneLauncherActivity extends Activity { String type = intent.getType(); newIntent.setData(intent.getData()); if (Intent.ACTION_SEND.equals(action) && type != null) { - if (type.contains("text/")){ - if(("text/plain").equals(type) && (String)intent.getStringExtra(Intent.EXTRA_TEXT)!= null) { - stringFileShared = intent.getStringExtra(Intent.EXTRA_TEXT); - newIntent.putExtra("msgShared", stringFileShared); - } else if(((Uri) intent.getExtras().get(Intent.EXTRA_STREAM)) != null){ - stringFileShared = (LinphoneUtils.createCvsFromString(LinphoneUtils.processContactUri(getApplicationContext(), (Uri)intent.getExtras().get(Intent.EXTRA_STREAM)))).toString(); - newIntent.putExtra("fileShared", stringFileShared); - } + if(("text/plain").equals(type) && (String)intent.getStringExtra(Intent.EXTRA_TEXT)!= null) { + stringFileShared = intent.getStringExtra(Intent.EXTRA_TEXT); + newIntent.putExtra("msgShared", stringFileShared); }else { fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); stringUriFileShared = LinphoneUtils.getFilePath(getBaseContext(), fileUri); From b8dc62cb3c5096d68246ec9accc6fecdb3a25f28 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 2 Aug 2018 13:41:25 +0200 Subject: [PATCH 06/22] Update ram memory used for gradle --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a1e7a7cb6..878417ffc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,4 @@ RELEASE_STORE_PASSWORD= RELEASE_KEY_ALIAS= RELEASE_KEY_PASSWORD= #source:https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory -org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 From d98387923556c4ded2655a6b6cad36f8de502c0f Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 2 Aug 2018 13:47:43 +0200 Subject: [PATCH 07/22] Improve error log during file sharing --- src/android/org/linphone/LinphoneUtils.java | 2 +- .../org/linphone/activities/LinphoneLauncherActivity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java index 13c49a37a..fa576a7e4 100644 --- a/src/android/org/linphone/LinphoneUtils.java +++ b/src/android/org/linphone/LinphoneUtils.java @@ -613,7 +613,7 @@ public final class LinphoneUtils { remoteFile.close(); } catch (IOException e) { - e.printStackTrace(); + Log.e("Enable to get sharing file", e); } return result; diff --git a/src/android/org/linphone/activities/LinphoneLauncherActivity.java b/src/android/org/linphone/activities/LinphoneLauncherActivity.java index 88d8e2ec1..0eb500607 100644 --- a/src/android/org/linphone/activities/LinphoneLauncherActivity.java +++ b/src/android/org/linphone/activities/LinphoneLauncherActivity.java @@ -135,7 +135,7 @@ public class LinphoneLauncherActivity extends Activity { if(("text/plain").equals(type) && (String)intent.getStringExtra(Intent.EXTRA_TEXT)!= null) { stringFileShared = intent.getStringExtra(Intent.EXTRA_TEXT); newIntent.putExtra("msgShared", stringFileShared); - }else { + } else { fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); stringUriFileShared = LinphoneUtils.getFilePath(getBaseContext(), fileUri); newIntent.putExtra("fileShared", stringUriFileShared); From 69817fc61036308ab055b377d9a709213dd12c19 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 6 Aug 2018 10:46:28 +0200 Subject: [PATCH 08/22] Disabled reduced spaces between same sender chat messages --- res/values/non_localizable_custom.xml | 1 + src/android/org/linphone/chat/ChatEventsAdapter.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml index d2a5c766a..dd0645646 100644 --- a/res/values/non_localizable_custom.xml +++ b/res/values/non_localizable_custom.xml @@ -80,6 +80,7 @@ false linphone-android-photo-temp linphone-android-photo-%s + false false diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java index d9f2f4ca6..b7d97aceb 100644 --- a/src/android/org/linphone/chat/ChatEventsAdapter.java +++ b/src/android/org/linphone/chat/ChatEventsAdapter.java @@ -207,7 +207,7 @@ public class ChatEventsAdapter extends ListSelectionAdapter { holder.bubbleLayout.setVisibility(View.VISIBLE); final ChatMessage message = event.getChatMessage(); - if (i > 0) { + if (i > 0 && mContext.getResources().getBoolean(R.bool.lower_space_between_chat_bubbles_if_same_person)) { EventLog previousEvent = (EventLog)getItem(i-1); if (previousEvent.getType() == EventLog.Type.ConferenceChatMessage) { ChatMessage previousMessage = previousEvent.getChatMessage(); From bf6c70545c1b9d4f4b216c760985efbb5788a880 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 14 Aug 2018 16:46:42 +0200 Subject: [PATCH 09/22] Update belle-sip and linphone for bugfixes. Update README.md to set minimum NDK and cmake version requirements. --- README.md | 4 ++-- submodules/belle-sip | 2 +- submodules/linphone | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index df4f16c35..afd28c46f 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Linphone is a free VoIP and video softphone based on the SIP protocol. 1. Download the Android sdk (API 28.0.0 at max) with platform-tools and tools updated to latest revision, then add both 'tools' and 'platform-tools' folders in your path and the android-sdk folder to ANDROID_HOME environment variable. -2. Download the Android ndk (version 16) from google and add it to your path (no symlink !!!) and ANDROID_NDK environment variable. +2. Download the Android NDK 17 from google and add it to your path (no symlink !!!) and ANDROID_NDK environment variable. -3. Install _yasm_, _nasm_ (For OpenH224 support only), _python_, _pkg_config_ and _cmake(>=3.10)_. +3. Install _yasm_, _nasm_ (For OpenH224 support only), _python_, _pkg_config_ and _cmake(>=3.12)_. * On 64 bits linux systems you'll need the _ia32-libs_ package. * With the latest Debian (multiarch), you need this: * `dpkg --add-architecture i386` diff --git a/submodules/belle-sip b/submodules/belle-sip index 11f4c9c61..914558009 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit 11f4c9c61feece2d46909ae62e91ac1bace64c2c +Subproject commit 914558009a3013e53745344c359d3621c5e9d4e6 diff --git a/submodules/linphone b/submodules/linphone index 064b3c30e..5b637d23e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 064b3c30e15de98ac7f03b1d0a323bf565c40498 +Subproject commit 5b637d23ec2bd3b3fc52289d8d39c4c318595b78 From b0caccfb544f443a046b5d110f7f60db6d192cfb Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 16 Aug 2018 10:37:25 +0200 Subject: [PATCH 10/22] Update bcmatroska2 and cmake-builder submodules. --- submodules/bcmatroska2 | 2 +- submodules/cmake-builder | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/bcmatroska2 b/submodules/bcmatroska2 index ca4a89930..e8a69bdc3 160000 --- a/submodules/bcmatroska2 +++ b/submodules/bcmatroska2 @@ -1 +1 @@ -Subproject commit ca4a89930dd8db94a60ae4a1dbf44a3710497429 +Subproject commit e8a69bdc3f8828cfd83b0938955132918364b175 diff --git a/submodules/cmake-builder b/submodules/cmake-builder index f58510c8c..25e2442d5 160000 --- a/submodules/cmake-builder +++ b/submodules/cmake-builder @@ -1 +1 @@ -Subproject commit f58510c8ce6cd89dadff2b29574d03b05c6efcc9 +Subproject commit 25e2442d536dee89222dbeaa04ceac8f9cc41bfc From 5f63ca63b0ffb480f1bd4b3b667a89c7ecfc54fd Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 16 Aug 2018 14:53:24 +0200 Subject: [PATCH 11/22] Update cmake-builder submodule. --- submodules/cmake-builder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/cmake-builder b/submodules/cmake-builder index 25e2442d5..81f2fa301 160000 --- a/submodules/cmake-builder +++ b/submodules/cmake-builder @@ -1 +1 @@ -Subproject commit 25e2442d536dee89222dbeaa04ceac8f9cc41bfc +Subproject commit 81f2fa301e392a33e63fb6ac6ded9b9d48832605 From d81f8e1f6f6681a0fa02b138f3651098ff3240c3 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 17 Aug 2018 13:27:43 +0200 Subject: [PATCH 12/22] Update ortp and ms2 for bugfixes --- submodules/mediastreamer2 | 2 +- submodules/oRTP | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2 index 52d316934..4c3e15efe 160000 --- a/submodules/mediastreamer2 +++ b/submodules/mediastreamer2 @@ -1 +1 @@ -Subproject commit 52d3169349b55b27090ecb81f88d10ebb65fa469 +Subproject commit 4c3e15efe23f771f5f62b67c91868000697ab078 diff --git a/submodules/oRTP b/submodules/oRTP index a88be02b9..17be28e9d 160000 --- a/submodules/oRTP +++ b/submodules/oRTP @@ -1 +1 @@ -Subproject commit a88be02b93e2274ae3fcf80e1e0032adc43c0448 +Subproject commit 17be28e9d0b8e50b89ff9fba75990a51f03f111e From 5a3491a4bbc9f558bd0871ec7bb1c49a2c508c7e Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Tue, 21 Aug 2018 09:29:27 +0200 Subject: [PATCH 13/22] Add time to all notification --- .../org/linphone/compatibility/ApiTwentyOnePlus.java | 5 +++++ .../org/linphone/compatibility/ApiTwentySixPlus.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java b/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java index 8215d4e0d..7197dbbba 100644 --- a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java @@ -59,6 +59,7 @@ public class ApiTwentyOnePlus { .setVisibility(Notification.VISIBILITY_PRIVATE) .setPriority(Notification.PRIORITY_HIGH) .setNumber(msgCount) + .setWhen(System.currentTimeMillis()) .build(); return notif; @@ -100,6 +101,7 @@ public class ApiTwentyOnePlus { .setLights(ContextCompat.getColor(context, R.color.notification_color_led), context.getResources().getInteger(R.integer.notification_ms_on), context.getResources().getInteger(R.integer.notification_ms_off)) + .setWhen(System.currentTimeMillis()) .setPriority(priority) .build(); } else { @@ -114,6 +116,7 @@ public class ApiTwentyOnePlus { context.getResources().getInteger(R.integer.notification_ms_on), context.getResources().getInteger(R.integer.notification_ms_off)) .setPriority(priority) + .setWhen(System.currentTimeMillis()) .build(); } @@ -139,6 +142,7 @@ public class ApiTwentyOnePlus { context.getResources().getInteger(R.integer.notification_ms_on), context.getResources().getInteger(R.integer.notification_ms_off)) .setPriority(Notification.PRIORITY_HIGH) + .setWhen(System.currentTimeMillis()) .build(); return notif; @@ -158,6 +162,7 @@ public class ApiTwentyOnePlus { .setLights(ContextCompat.getColor(context, R.color.notification_color_led), context.getResources().getInteger(R.integer.notification_ms_on), context.getResources().getInteger(R.integer.notification_ms_off)) + .setWhen(System.currentTimeMillis()) .setPriority(Notification.PRIORITY_HIGH) .build(); diff --git a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java index 0ed80b882..6c88ce9cd 100644 --- a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java @@ -87,6 +87,7 @@ public class ApiTwentySixPlus { .setVisibility(Notification.VISIBILITY_PRIVATE) .setPriority(Notification.PRIORITY_HIGH) .setNumber(msgCount) + .setWhen(System.currentTimeMillis()) .build(); return notif; @@ -106,6 +107,7 @@ public class ApiTwentySixPlus { .setCategory(Notification.CATEGORY_CALL) .setVisibility(Notification.VISIBILITY_PUBLIC) .setPriority(Notification.PRIORITY_HIGH) + .setWhen(System.currentTimeMillis()) .build(); return notif; @@ -124,6 +126,7 @@ public class ApiTwentySixPlus { .setCategory(Notification.CATEGORY_SERVICE) .setVisibility(Notification.VISIBILITY_SECRET) .setPriority(priority) + .setWhen(System.currentTimeMillis()) .build(); } else { notif = new Notification.Builder(context, context.getString(R.string.notification_service_channel_id)) @@ -134,6 +137,7 @@ public class ApiTwentySixPlus { .setCategory(Notification.CATEGORY_SERVICE) .setVisibility(Notification.VISIBILITY_SECRET) .setPriority(priority) + .setWhen(System.currentTimeMillis()) .build(); } @@ -156,6 +160,7 @@ public class ApiTwentySixPlus { .setCategory(Notification.CATEGORY_MESSAGE) .setVisibility(Notification.VISIBILITY_PRIVATE) .setPriority(Notification.PRIORITY_HIGH) + .setWhen(System.currentTimeMillis()) .build(); return notif; @@ -173,6 +178,7 @@ public class ApiTwentySixPlus { .setCategory(Notification.CATEGORY_MESSAGE) .setVisibility(Notification.VISIBILITY_PRIVATE) .setPriority(Notification.PRIORITY_HIGH) + .setWhen(System.currentTimeMillis()) .build(); return notif; From d2190fd9982b3459e0251b0266530e907771c003 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Tue, 21 Aug 2018 10:48:26 +0200 Subject: [PATCH 14/22] Enable creation time in notification --- .../org/linphone/compatibility/ApiTwentyOnePlus.java | 6 ++++++ .../org/linphone/compatibility/ApiTwentySixPlus.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java b/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java index 7197dbbba..d633daa18 100644 --- a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java @@ -60,6 +60,7 @@ public class ApiTwentyOnePlus { .setPriority(Notification.PRIORITY_HIGH) .setNumber(msgCount) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); return notif; @@ -81,6 +82,7 @@ public class ApiTwentyOnePlus { .setLights(ContextCompat.getColor(context, R.color.notification_color_led), context.getResources().getInteger(R.integer.notification_ms_on), context.getResources().getInteger(R.integer.notification_ms_off)) + .setShowWhen(true) .build(); return notif; @@ -103,6 +105,7 @@ public class ApiTwentyOnePlus { context.getResources().getInteger(R.integer.notification_ms_off)) .setWhen(System.currentTimeMillis()) .setPriority(priority) + .setShowWhen(true) .build(); } else { notif = new Notification.Builder(context) @@ -117,6 +120,7 @@ public class ApiTwentyOnePlus { context.getResources().getInteger(R.integer.notification_ms_off)) .setPriority(priority) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); } @@ -143,6 +147,7 @@ public class ApiTwentyOnePlus { context.getResources().getInteger(R.integer.notification_ms_off)) .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); return notif; @@ -164,6 +169,7 @@ public class ApiTwentyOnePlus { context.getResources().getInteger(R.integer.notification_ms_off)) .setWhen(System.currentTimeMillis()) .setPriority(Notification.PRIORITY_HIGH) + .setShowWhen(true) .build(); return notif; diff --git a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java index 6c88ce9cd..182295a75 100644 --- a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java @@ -88,6 +88,7 @@ public class ApiTwentySixPlus { .setPriority(Notification.PRIORITY_HIGH) .setNumber(msgCount) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); return notif; @@ -108,6 +109,7 @@ public class ApiTwentySixPlus { .setVisibility(Notification.VISIBILITY_PUBLIC) .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); return notif; @@ -127,6 +129,7 @@ public class ApiTwentySixPlus { .setVisibility(Notification.VISIBILITY_SECRET) .setPriority(priority) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); } else { notif = new Notification.Builder(context, context.getString(R.string.notification_service_channel_id)) @@ -138,6 +141,7 @@ public class ApiTwentySixPlus { .setVisibility(Notification.VISIBILITY_SECRET) .setPriority(priority) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); } @@ -161,6 +165,7 @@ public class ApiTwentySixPlus { .setVisibility(Notification.VISIBILITY_PRIVATE) .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); return notif; @@ -179,6 +184,7 @@ public class ApiTwentySixPlus { .setVisibility(Notification.VISIBILITY_PRIVATE) .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) + .setShowWhen(true) .build(); return notif; From ee541ac0363daa356df97cc9f50d8ef2513ff306 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Tue, 21 Aug 2018 11:16:31 +0200 Subject: [PATCH 15/22] Add color to notification --- .../org/linphone/compatibility/ApiTwentySixPlus.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java index 182295a75..f40c1b892 100644 --- a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java @@ -89,6 +89,8 @@ public class ApiTwentySixPlus { .setNumber(msgCount) .setWhen(System.currentTimeMillis()) .setShowWhen(true) + .setColorized(true) + .setColor(context.getColor(R.color.notification_color_led)) .build(); return notif; @@ -110,6 +112,8 @@ public class ApiTwentySixPlus { .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) .setShowWhen(true) + .setColorized(true) + .setColor(context.getColor(R.color.notification_color_led)) .build(); return notif; @@ -130,6 +134,8 @@ public class ApiTwentySixPlus { .setPriority(priority) .setWhen(System.currentTimeMillis()) .setShowWhen(true) + .setColorized(true) + .setColor(context.getColor(R.color.notification_color_led)) .build(); } else { notif = new Notification.Builder(context, context.getString(R.string.notification_service_channel_id)) @@ -142,6 +148,8 @@ public class ApiTwentySixPlus { .setPriority(priority) .setWhen(System.currentTimeMillis()) .setShowWhen(true) + .setColorized(true) + .setColor(context.getColor(R.color.notification_color_led)) .build(); } @@ -166,6 +174,8 @@ public class ApiTwentySixPlus { .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) .setShowWhen(true) + .setColorized(true) + .setColor(context.getColor(R.color.notification_color_led)) .build(); return notif; @@ -185,6 +195,8 @@ public class ApiTwentySixPlus { .setPriority(Notification.PRIORITY_HIGH) .setWhen(System.currentTimeMillis()) .setShowWhen(true) + .setColorized(true) + .setColor(context.getColor(R.color.notification_color_led)) .build(); return notif; From 2718f7d27d45871c13c9a852f58c8aa23f778d03 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 24 Aug 2018 15:52:00 +0200 Subject: [PATCH 16/22] Updated submodules --- submodules/bctoolbox | 2 +- submodules/belle-sip | 2 +- submodules/linphone | 2 +- submodules/mediastreamer2 | 2 +- submodules/oRTP | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/submodules/bctoolbox b/submodules/bctoolbox index ed53ae3c9..88ed003be 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit ed53ae3c9da4fb15c13454153383014b3257939a +Subproject commit 88ed003beb9a33d9d80bbac8c53287039e1e30b0 diff --git a/submodules/belle-sip b/submodules/belle-sip index 914558009..41666379a 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit 914558009a3013e53745344c359d3621c5e9d4e6 +Subproject commit 41666379abcdd4f14fcf08732e21b2d7b81cf729 diff --git a/submodules/linphone b/submodules/linphone index 5b637d23e..c3d90f262 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 5b637d23ec2bd3b3fc52289d8d39c4c318595b78 +Subproject commit c3d90f262d4ff6ecca88fcba4ea204b448391dff diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2 index 4c3e15efe..1d6722bbb 160000 --- a/submodules/mediastreamer2 +++ b/submodules/mediastreamer2 @@ -1 +1 @@ -Subproject commit 4c3e15efe23f771f5f62b67c91868000697ab078 +Subproject commit 1d6722bbb6b7d5609c148ab782869bb49b21f26b diff --git a/submodules/oRTP b/submodules/oRTP index 17be28e9d..c9dde282b 160000 --- a/submodules/oRTP +++ b/submodules/oRTP @@ -1 +1 @@ -Subproject commit 17be28e9d0b8e50b89ff9fba75990a51f03f111e +Subproject commit c9dde282bf48af9a8844f0686a09a1d0347e6856 From 346c5716b8695b05f8faf3b49dc952a3a5662700 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 24 Aug 2018 15:54:20 +0200 Subject: [PATCH 17/22] Updated linphone for java wrapper fixes --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index c3d90f262..d5006fc6e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit c3d90f262d4ff6ecca88fcba4ea204b448391dff +Subproject commit d5006fc6ea570cfd5efac51d86e2bd442ac1d055 From e9cbc91c74724641a12124cbf6f55315f4e376d2 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 27 Aug 2018 10:39:58 +0200 Subject: [PATCH 18/22] Update ms2 submodule. --- submodules/mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2 index 1d6722bbb..cba92b4b1 160000 --- a/submodules/mediastreamer2 +++ b/submodules/mediastreamer2 @@ -1 +1 @@ -Subproject commit 1d6722bbb6b7d5609c148ab782869bb49b21f26b +Subproject commit cba92b4b1ddb04889e01825564d704d62af8ee58 From a484b55fe20702526c9fc92b5bc691ad3922f9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Mon, 27 Aug 2018 10:52:50 +0200 Subject: [PATCH 19/22] Update ms2 (Fixes for MediaCodec based decoders). --- submodules/mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2 index cba92b4b1..94892b662 160000 --- a/submodules/mediastreamer2 +++ b/submodules/mediastreamer2 @@ -1 +1 @@ -Subproject commit cba92b4b1ddb04889e01825564d704d62af8ee58 +Subproject commit 94892b662ef2009f27eaa4c164a0595b32d7f5c8 From a3558f70bebc5a67457adfd8751ba2c1cdf85748 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 27 Aug 2018 11:14:28 +0200 Subject: [PATCH 20/22] Using new callback for presence notification --- src/android/org/linphone/LinphoneManager.java | 8 ++-- .../linphone/contacts/ContactsManager.java | 45 ++++++++++++++++--- submodules/linphone | 2 +- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java index 4046e3ecb..acc843bbd 100644 --- a/src/android/org/linphone/LinphoneManager.java +++ b/src/android/org/linphone/LinphoneManager.java @@ -1012,9 +1012,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou private Vibrator mVibrator; public void onNewSubscriptionRequested(Core lc, Friend lf, String url) {} - public void onNotifyPresenceReceived(Core lc, Friend lf) { - ContactsManager.getInstance().refreshSipContact(lf); - } + public void onNotifyPresenceReceived(Core lc, Friend lf) {} @Override public void onEcCalibrationAudioInit(Core lc) { @@ -1659,12 +1657,12 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou @Override public void onFriendListCreated(Core lc, FriendList list) { - // TODO Auto-generated method stub + list.setListener(ContactsManager.getInstance()); } @Override public void onFriendListRemoved(Core lc, FriendList list) { - // TODO Auto-generated method stub + list.setListener(null); } @Override diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/src/android/org/linphone/contacts/ContactsManager.java index dd493f25b..c86ad3e05 100644 --- a/src/android/org/linphone/contacts/ContactsManager.java +++ b/src/android/org/linphone/contacts/ContactsManager.java @@ -45,6 +45,7 @@ import org.linphone.core.Core; import org.linphone.core.Factory; import org.linphone.core.Friend; import org.linphone.core.FriendList; +import org.linphone.core.FriendListListener; import org.linphone.core.MagicSearch; import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; @@ -59,7 +60,7 @@ import java.util.Locale; import java.util.Set; import java.util.concurrent.TimeUnit; -public class ContactsManager extends ContentObserver { +public class ContactsManager extends ContentObserver implements FriendListListener { private static ContactsManager instance; private List contacts, sipContacts; @@ -93,6 +94,12 @@ public class ContactsManager extends ContentObserver { } public void destroy() { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc != null) { + for (FriendList list : lc.getFriendsLists()) { + list.setListener(null); + } + } defaultAvatar.recycle(); instance = null; } @@ -293,10 +300,6 @@ public class ContactsManager extends ContentObserver { LinphoneContact contact = (LinphoneContact)lf.getUserData(); if (contact != null && !sipContacts.contains(contact)) { sipContacts.add(contact); - Collections.sort(sipContacts); - for (ContactsUpdatedListener listener : contactsUpdatedListeners) { - listener.onContactsUpdated(); - } } } @@ -590,4 +593,36 @@ public class ContactsManager extends ContentObserver { Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, select, new String[]{ ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE }, null); return c; } + + @Override + public void onContactCreated(FriendList list, Friend lf) { + + } + + @Override + public void onContactDeleted(FriendList list, Friend lf) { + + } + + @Override + public void onContactUpdated(FriendList list, Friend newFriend, Friend oldFriend) { + + } + + @Override + public void onSyncStatusChanged(FriendList list, FriendList.SyncStatus status, String msg) { + + } + + @Override + public void onPresenceReceived(FriendList list, Friend[] friends) { + for (Friend lf : friends) { + ContactsManager.getInstance().refreshSipContact(lf); + } + + Collections.sort(sipContacts); + for (ContactsUpdatedListener listener : contactsUpdatedListeners) { + listener.onContactsUpdated(); + } + } } diff --git a/submodules/linphone b/submodules/linphone index d5006fc6e..bf8735e40 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit d5006fc6ea570cfd5efac51d86e2bd442ac1d055 +Subproject commit bf8735e40194cc04e1fae2f1d555cca361719137 From fb09741ee91d0542f5e3130a6f0f1bfc1be5c271 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 29 Aug 2018 11:57:12 +0200 Subject: [PATCH 21/22] Updated submodules --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index bf8735e40..494baf59e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit bf8735e40194cc04e1fae2f1d555cca361719137 +Subproject commit 494baf59e48e38f92e959ee1aac763d2caca39ce From 07383beea4b560601e9edc8f43213fc79d811200 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 30 Aug 2018 14:50:08 +0200 Subject: [PATCH 22/22] Do not re-fetch contacts when going into contacts list --- src/android/org/linphone/contacts/ContactsListFragment.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/android/org/linphone/contacts/ContactsListFragment.java b/src/android/org/linphone/contacts/ContactsListFragment.java index 1ff11e1e4..b663efb28 100644 --- a/src/android/org/linphone/contacts/ContactsListFragment.java +++ b/src/android/org/linphone/contacts/ContactsListFragment.java @@ -148,7 +148,6 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O contactsFetchInProgress = (ProgressBar) view.findViewById(R.id.contactsFetchInProgress); contactsFetchInProgress.setVisibility(View.VISIBLE); - ContactsManager.getInstance().fetchContactsAsync(); return view; } @@ -394,8 +393,8 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O @Override public void onResume() { - ContactsManager.addContactsListener(this); super.onResume(); + ContactsManager.addContactsListener(this); if (editConsumed) { editOnClick = false;