diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 49a370985..8a5c18adb 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -1855,13 +1855,13 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou @Override public void onFriendListCreated(Core lc, FriendList list) { if (LinphoneService.isReady()) { - list.setListener(ContactsManager.getInstance()); + list.addListener(ContactsManager.getInstance()); } } @Override public void onFriendListRemoved(Core lc, FriendList list) { - list.setListener(null); + list.removeListener(ContactsManager.getInstance()); } @Override diff --git a/app/src/main/java/org/linphone/LinphoneService.java b/app/src/main/java/org/linphone/LinphoneService.java index 1169f0dda..46e983bbf 100644 --- a/app/src/main/java/org/linphone/LinphoneService.java +++ b/app/src/main/java/org/linphone/LinphoneService.java @@ -43,6 +43,9 @@ import org.linphone.core.Core; import org.linphone.core.CoreListenerStub; import org.linphone.core.Factory; import org.linphone.core.GlobalState; +import org.linphone.core.LogLevel; +import org.linphone.core.LoggingService; +import org.linphone.core.LoggingServiceListener; import org.linphone.core.ProxyConfig; import org.linphone.core.RegistrationState; import org.linphone.mediastream.Log; @@ -86,6 +89,36 @@ public final class LinphoneService extends Service { private String mIncomingReceivedActivityName; private Class mIncomingReceivedActivity = LinphoneActivity.class; + private LoggingServiceListener mJavaLoggingService = + new LoggingServiceListener() { + @Override + public void onLogMessageWritten( + LoggingService logService, String domain, LogLevel lev, String message) { + switch (lev) { + case Debug: + android.util.Log.d(domain, message); + break; + case Message: + android.util.Log.i(domain, message); + break; + case Warning: + android.util.Log.w(domain, message); + break; + case Error: + android.util.Log.e(domain, message); + break; + case Fatal: + default: + android.util.Log.wtf(domain, message); + break; + } + } + }; + + public LoggingServiceListener getJavaLoggingService() { + return mJavaLoggingService; + } + public static boolean isReady() { return sInstance != null && sInstance.mTestDelayElapsed; } @@ -270,7 +303,11 @@ public final class LinphoneService extends Service { LinphonePreferences.instance().setContext(getBaseContext()); Factory.instance().setLogCollectionPath(getFilesDir().getAbsolutePath()); boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneUtils.initLoggingService(isDebugEnabled, getString(R.string.app_name)); + LinphoneUtils.configureLoggingService(isDebugEnabled, getString(R.string.app_name)); + // LinphoneService isn't ready yet so we have to manually set up the Java logging service + if (LinphonePreferences.instance().useJavaLogger()) { + Factory.instance().getLoggingService().addListener(mJavaLoggingService); + } // Dump some debugging information to the logs Log.i(START_LINPHONE_LOGS); @@ -395,6 +432,8 @@ public final class LinphoneService extends Service { LinphoneActivity.instance().finish(); } + LinphoneUtils.configureLoggingService(false, getString(R.string.app_name)); + super.onDestroy(); } diff --git a/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java b/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java index 7feb9666b..1f8edd745 100644 --- a/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java +++ b/app/src/main/java/org/linphone/contacts/AsyncContactsLoader.java @@ -75,7 +75,7 @@ class AsyncContactsLoader extends AsyncTask mContacts, mSipContacts, mGroupChatContacts, mLimeX3dhContacts; + private List mContacts, mSipContacts; private ArrayList mContactsUpdatedListeners; private MagicSearch mMagicSearch; private final Bitmap mDefaultAvatar; @@ -83,8 +82,6 @@ public class ContactsManager extends ContentObserver implements FriendListListen mContactsUpdatedListeners = new ArrayList<>(); mContacts = new ArrayList<>(); mSipContacts = new ArrayList<>(); - mGroupChatContacts = new ArrayList<>(); - mLimeX3dhContacts = new ArrayList<>(); if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) { mMagicSearch = LinphoneManager.getLcIfManagerNotDestroyedOrNull().createMagicSearch(); @@ -114,10 +111,6 @@ public class ContactsManager extends ContentObserver implements FriendListListen fetchContactsAsync(); } - public synchronized boolean hasContacts() { - return mContacts.size() > 0; - } - public synchronized List getContacts() { return mContacts; } @@ -134,27 +127,11 @@ public class ContactsManager extends ContentObserver implements FriendListListen mSipContacts = c; } - public synchronized List getGroupChatContacts() { - return mGroupChatContacts; - } - - synchronized void clearGroupChatContacts() { - mGroupChatContacts.clear(); - } - - public synchronized List getLimeX3dhContacts() { - return mLimeX3dhContacts; - } - - synchronized void clearLimeX3dhContacts() { - mLimeX3dhContacts.clear(); - } - public void destroy() { Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { for (FriendList list : lc.getFriendsLists()) { - list.setListener(null); + list.removeListener(this); } } mDefaultAvatar.recycle(); @@ -440,19 +417,6 @@ public class ContactsManager extends ContentObserver implements FriendListListen private synchronized boolean refreshSipContact(Friend lf) { LinphoneContact contact = (LinphoneContact) lf.getUserData(); if (contact != null) { - if (lf.hasCapability(FriendCapability.GroupChat) - && !mGroupChatContacts.contains(contact)) { - mGroupChatContacts.add(contact); - Log.i("[Contacts Manager] Contact " + contact + " has group chat capability"); - - // Contact may only have LimeX3DH capability if it already has GroupChat capability - if (lf.hasCapability(FriendCapability.LimeX3Dh) - && !mLimeX3dhContacts.contains(contact)) { - mLimeX3dhContacts.add(contact); - Log.i("[Contacts Manager] Contact " + contact + " has lime x3dh capability"); - } - } - if (!mSipContacts.contains(contact)) { mSipContacts.add(contact); return true; @@ -518,8 +482,6 @@ public class ContactsManager extends ContentObserver implements FriendListListen if (updated) { Collections.sort(mSipContacts); - Collections.sort(mGroupChatContacts); - Collections.sort(mLimeX3dhContacts); } for (ContactsUpdatedListener listener : mContactsUpdatedListeners) { diff --git a/app/src/main/java/org/linphone/receivers/DozeReceiver.java b/app/src/main/java/org/linphone/receivers/DozeReceiver.java index 704ff0dd5..110eb3a46 100644 --- a/app/src/main/java/org/linphone/receivers/DozeReceiver.java +++ b/app/src/main/java/org/linphone/receivers/DozeReceiver.java @@ -41,7 +41,7 @@ public class DozeReceiver extends android.content.BroadcastReceiver { if (!LinphoneService.isReady()) return; boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneUtils.initLoggingService(isDebugEnabled, context.getString(R.string.app_name)); + LinphoneUtils.configureLoggingService(isDebugEnabled, context.getString(R.string.app_name)); Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) return; diff --git a/app/src/main/java/org/linphone/receivers/KeepAliveReceiver.java b/app/src/main/java/org/linphone/receivers/KeepAliveReceiver.java index ea69e0373..827cd0c96 100644 --- a/app/src/main/java/org/linphone/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/org/linphone/receivers/KeepAliveReceiver.java @@ -41,7 +41,8 @@ public class KeepAliveReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (LinphoneService.isReady()) { boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneUtils.initLoggingService(isDebugEnabled, context.getString(R.string.app_name)); + LinphoneUtils.configureLoggingService( + isDebugEnabled, context.getString(R.string.app_name)); Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) return; diff --git a/app/src/main/java/org/linphone/recording/Recording.java b/app/src/main/java/org/linphone/recording/Recording.java index b78ff920f..79405fae3 100644 --- a/app/src/main/java/org/linphone/recording/Recording.java +++ b/app/src/main/java/org/linphone/recording/Recording.java @@ -72,7 +72,7 @@ class Recording implements PlayerListener, Comparable { }; mPlayer = LinphoneManager.getLc().createLocalPlayer(null, null, null); - mPlayer.setListener(this); + mPlayer.addListener(this); } public String getRecordPath() { @@ -135,6 +135,7 @@ class Recording implements PlayerListener, Comparable { } public void close() { + mPlayer.removeListener(this); mPlayer.close(); } diff --git a/app/src/main/java/org/linphone/settings/LinphonePreferences.java b/app/src/main/java/org/linphone/settings/LinphonePreferences.java index 7aaf1817d..a56a66161 100644 --- a/app/src/main/java/org/linphone/settings/LinphonePreferences.java +++ b/app/src/main/java/org/linphone/settings/LinphonePreferences.java @@ -1034,12 +1034,13 @@ public class LinphonePreferences { // Advanced settings public void setDebugEnabled(boolean enabled) { getConfig().setBool("app", "debug", enabled); - LinphoneUtils.initLoggingService(enabled, mContext.getString(R.string.app_name)); + LinphoneUtils.configureLoggingService(enabled, mContext.getString(R.string.app_name)); } public void setJavaLogger(boolean enabled) { getConfig().setBool("app", "java_logger", enabled); - LinphoneUtils.initLoggingService(isDebugEnabled(), mContext.getString(R.string.app_name)); + LinphoneUtils.configureLoggingService( + isDebugEnabled(), mContext.getString(R.string.app_name)); } public boolean useJavaLogger() { diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.java b/app/src/main/java/org/linphone/utils/LinphoneUtils.java index 794c40fc9..6ce90703f 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.java +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.java @@ -52,9 +52,6 @@ import org.linphone.core.Call.State; import org.linphone.core.Core; import org.linphone.core.Factory; import org.linphone.core.LogCollectionState; -import org.linphone.core.LogLevel; -import org.linphone.core.LoggingService; -import org.linphone.core.LoggingServiceListener; import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; import org.linphone.settings.LinphonePreferences; @@ -66,7 +63,7 @@ public final class LinphoneUtils { private LinphoneUtils() {} - public static void initLoggingService(boolean isDebugEnabled, String appName) { + public static void configureLoggingService(boolean isDebugEnabled, String appName) { if (!LinphonePreferences.instance().useJavaLogger()) { Factory.instance().enableLogCollection(LogCollectionState.Enabled); Factory.instance().setDebugMode(isDebugEnabled, appName); @@ -74,36 +71,19 @@ public final class LinphoneUtils { Factory.instance().setDebugMode(isDebugEnabled, appName); Factory.instance() .enableLogCollection(LogCollectionState.EnabledWithoutPreviousLogHandler); - Factory.instance() - .getLoggingService() - .setListener( - new LoggingServiceListener() { - @Override - public void onLogMessageWritten( - LoggingService logService, - String domain, - LogLevel lev, - String message) { - switch (lev) { - case Debug: - android.util.Log.d(domain, message); - break; - case Message: - android.util.Log.i(domain, message); - break; - case Warning: - android.util.Log.w(domain, message); - break; - case Error: - android.util.Log.e(domain, message); - break; - case Fatal: - default: - android.util.Log.wtf(domain, message); - break; - } - } - }); + if (isDebugEnabled) { + if (LinphoneService.isReady()) { + Factory.instance() + .getLoggingService() + .addListener(LinphoneService.instance().getJavaLoggingService()); + } + } else { + if (LinphoneService.isReady()) { + Factory.instance() + .getLoggingService() + .removeListener(LinphoneService.instance().getJavaLoggingService()); + } + } } }