From 1b4dd6240b946ebb94c0790ab72591fd19fd504e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 13 May 2019 11:36:43 +0200 Subject: [PATCH] Fixed crashes --- app/src/main/java/org/linphone/LinphoneManager.java | 5 ++++- app/src/main/java/org/linphone/LinphoneService.java | 9 ++++++--- .../assistant/AccountConnectionAssistantActivity.java | 3 +++ .../java/org/linphone/assistant/AssistantActivity.java | 7 +++++-- .../assistant/EmailAccountCreationAssistantActivity.java | 3 +++ .../EmailAccountValidationAssistantActivity.java | 3 +++ .../assistant/GenericConnectionAssistantActivity.java | 3 +++ .../org/linphone/assistant/MenuAssistantActivity.java | 3 +++ .../assistant/OpenH264DownloadAssistantActivity.java | 3 +++ .../assistant/PhoneAccountCreationAssistantActivity.java | 3 +++ .../assistant/PhoneAccountLinkingAssistantActivity.java | 3 +++ .../PhoneAccountValidationAssistantActivity.java | 3 +++ .../assistant/QrCodeConfigurationAssistantActivity.java | 3 +++ .../assistant/RemoteConfigurationAssistantActivity.java | 3 +++ .../linphone/utils/DeviceOrientationEventListener.java | 7 ++++++- 15 files changed, 54 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 14651bb8b..5feed3044 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -401,8 +401,11 @@ public class LinphoneManager implements SensorEventListener { } public synchronized void destroy() { - mExited = true; destroyManager(); + // Wait for Manager to destroy everything before setting mExited to true + // Otherwise some objects might crash during their own destroy if they try to call + // LinphoneManager.getCore(), for example to unregister a listener + mExited = true; } public void restartCore() { diff --git a/app/src/main/java/org/linphone/LinphoneService.java b/app/src/main/java/org/linphone/LinphoneService.java index af5e5637d..cf641368c 100644 --- a/app/src/main/java/org/linphone/LinphoneService.java +++ b/app/src/main/java/org/linphone/LinphoneService.java @@ -256,15 +256,18 @@ public final class LinphoneService extends Service { core = null; // To allow the gc calls below to free the Core } - mLinphoneManager.destroy(); - sInstance = null; - // Make sure our notification is gone. if (mNotificationManager != null) { mNotificationManager.destroy(); } mContactsManager.destroy(); + // Destroy the LinphoneManager second to last to ensure any getCore() call will work + mLinphoneManager.destroy(); + + // Wait for every other object to be destroyed to make LinphoneService.instance() invalid + sInstance = null; + if (LinphonePreferences.instance().useJavaLogger()) { Factory.instance().getLoggingService().removeListener(mJavaLoggingService); } diff --git a/app/src/main/java/org/linphone/assistant/AccountConnectionAssistantActivity.java b/app/src/main/java/org/linphone/assistant/AccountConnectionAssistantActivity.java index 9d0399a94..03a30ab7b 100644 --- a/app/src/main/java/org/linphone/assistant/AccountConnectionAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/AccountConnectionAssistantActivity.java @@ -48,6 +48,9 @@ public class AccountConnectionAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_account_connection); diff --git a/app/src/main/java/org/linphone/assistant/AssistantActivity.java b/app/src/main/java/org/linphone/assistant/AssistantActivity.java index 7dfaa4ec9..15455b6d1 100644 --- a/app/src/main/java/org/linphone/assistant/AssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/AssistantActivity.java @@ -31,7 +31,7 @@ import org.linphone.LinphoneManager; import org.linphone.LinphoneService; import org.linphone.R; import org.linphone.activities.DialerActivity; -import org.linphone.activities.ThemeableActivity; +import org.linphone.activities.LinphoneGenericActivity; import org.linphone.core.AccountCreator; import org.linphone.core.Core; import org.linphone.core.DialPlan; @@ -40,7 +40,7 @@ import org.linphone.core.ProxyConfig; import org.linphone.core.tools.Log; import org.linphone.settings.LinphonePreferences; -public abstract class AssistantActivity extends ThemeableActivity +public abstract class AssistantActivity extends LinphoneGenericActivity implements CountryPicker.CountryPickedListener { static AccountCreator mAccountCreator; @@ -52,6 +52,9 @@ public abstract class AssistantActivity extends ThemeableActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } if (mAccountCreator == null) { String url = LinphonePreferences.instance().getXmlrpcUrl(); diff --git a/app/src/main/java/org/linphone/assistant/EmailAccountCreationAssistantActivity.java b/app/src/main/java/org/linphone/assistant/EmailAccountCreationAssistantActivity.java index c0f856742..f98b0e860 100644 --- a/app/src/main/java/org/linphone/assistant/EmailAccountCreationAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/EmailAccountCreationAssistantActivity.java @@ -44,6 +44,9 @@ public class EmailAccountCreationAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_email_account_creation); diff --git a/app/src/main/java/org/linphone/assistant/EmailAccountValidationAssistantActivity.java b/app/src/main/java/org/linphone/assistant/EmailAccountValidationAssistantActivity.java index c0cf6100c..06a3d2611 100644 --- a/app/src/main/java/org/linphone/assistant/EmailAccountValidationAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/EmailAccountValidationAssistantActivity.java @@ -37,6 +37,9 @@ public class EmailAccountValidationAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_email_account_validation); diff --git a/app/src/main/java/org/linphone/assistant/GenericConnectionAssistantActivity.java b/app/src/main/java/org/linphone/assistant/GenericConnectionAssistantActivity.java index c9b48239e..4f8acf1b4 100644 --- a/app/src/main/java/org/linphone/assistant/GenericConnectionAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/GenericConnectionAssistantActivity.java @@ -43,6 +43,9 @@ public class GenericConnectionAssistantActivity extends AssistantActivity implem @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_generic_connection); diff --git a/app/src/main/java/org/linphone/assistant/MenuAssistantActivity.java b/app/src/main/java/org/linphone/assistant/MenuAssistantActivity.java index 8948df6c8..c3f8c46db 100644 --- a/app/src/main/java/org/linphone/assistant/MenuAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/MenuAssistantActivity.java @@ -33,6 +33,9 @@ public class MenuAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_menu); diff --git a/app/src/main/java/org/linphone/assistant/OpenH264DownloadAssistantActivity.java b/app/src/main/java/org/linphone/assistant/OpenH264DownloadAssistantActivity.java index f29763d25..211dca497 100644 --- a/app/src/main/java/org/linphone/assistant/OpenH264DownloadAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/OpenH264DownloadAssistantActivity.java @@ -44,6 +44,9 @@ public class OpenH264DownloadAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_openh264_codec_download); mHelper = Factory.instance().createOpenH264DownloadHelper(this); diff --git a/app/src/main/java/org/linphone/assistant/PhoneAccountCreationAssistantActivity.java b/app/src/main/java/org/linphone/assistant/PhoneAccountCreationAssistantActivity.java index f71aa91b7..aca624f10 100644 --- a/app/src/main/java/org/linphone/assistant/PhoneAccountCreationAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/PhoneAccountCreationAssistantActivity.java @@ -43,6 +43,9 @@ public class PhoneAccountCreationAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_phone_account_creation); diff --git a/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java b/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java index c6b62620e..8c67a2061 100644 --- a/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/PhoneAccountLinkingAssistantActivity.java @@ -49,6 +49,9 @@ public class PhoneAccountLinkingAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_phone_account_linking); diff --git a/app/src/main/java/org/linphone/assistant/PhoneAccountValidationAssistantActivity.java b/app/src/main/java/org/linphone/assistant/PhoneAccountValidationAssistantActivity.java index 819fce942..5de0242da 100644 --- a/app/src/main/java/org/linphone/assistant/PhoneAccountValidationAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/PhoneAccountValidationAssistantActivity.java @@ -46,6 +46,9 @@ public class PhoneAccountValidationAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_phone_account_validation); diff --git a/app/src/main/java/org/linphone/assistant/QrCodeConfigurationAssistantActivity.java b/app/src/main/java/org/linphone/assistant/QrCodeConfigurationAssistantActivity.java index 8e2434604..f6cafc21b 100644 --- a/app/src/main/java/org/linphone/assistant/QrCodeConfigurationAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/QrCodeConfigurationAssistantActivity.java @@ -38,6 +38,9 @@ public class QrCodeConfigurationAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_qr_code_remote_configuration); diff --git a/app/src/main/java/org/linphone/assistant/RemoteConfigurationAssistantActivity.java b/app/src/main/java/org/linphone/assistant/RemoteConfigurationAssistantActivity.java index d201250b4..9a93749b9 100644 --- a/app/src/main/java/org/linphone/assistant/RemoteConfigurationAssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/RemoteConfigurationAssistantActivity.java @@ -55,6 +55,9 @@ public class RemoteConfigurationAssistantActivity extends AssistantActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mAbortCreation) { + return; + } setContentView(R.layout.assistant_remote_configuration); diff --git a/app/src/main/java/org/linphone/utils/DeviceOrientationEventListener.java b/app/src/main/java/org/linphone/utils/DeviceOrientationEventListener.java index a8f492f08..9ac5dcb66 100644 --- a/app/src/main/java/org/linphone/utils/DeviceOrientationEventListener.java +++ b/app/src/main/java/org/linphone/utils/DeviceOrientationEventListener.java @@ -48,7 +48,12 @@ public class DeviceOrientationEventListener extends OrientationEventListener { return; } mAlwaysChangingPhoneAngle = degrees; - Log.i("[Orientation Helper] Device orientation changed to " + degrees); + Log.i( + "[Orientation Helper] Device orientation changed to " + + degrees + + " (raw value is " + + orientation + + ")"); int rotation = (360 - degrees) % 360; Core core = LinphoneManager.getCore();