Fixed crashes

This commit is contained in:
Sylvain Berfini 2019-05-13 11:36:43 +02:00
parent cd1606643a
commit 1b4dd6240b
15 changed files with 54 additions and 7 deletions

View file

@ -401,8 +401,11 @@ public class LinphoneManager implements SensorEventListener {
} }
public synchronized void destroy() { public synchronized void destroy() {
mExited = true;
destroyManager(); 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() { public void restartCore() {

View file

@ -256,15 +256,18 @@ public final class LinphoneService extends Service {
core = null; // To allow the gc calls below to free the Core core = null; // To allow the gc calls below to free the Core
} }
mLinphoneManager.destroy();
sInstance = null;
// Make sure our notification is gone. // Make sure our notification is gone.
if (mNotificationManager != null) { if (mNotificationManager != null) {
mNotificationManager.destroy(); mNotificationManager.destroy();
} }
mContactsManager.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()) { if (LinphonePreferences.instance().useJavaLogger()) {
Factory.instance().getLoggingService().removeListener(mJavaLoggingService); Factory.instance().getLoggingService().removeListener(mJavaLoggingService);
} }

View file

@ -48,6 +48,9 @@ public class AccountConnectionAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_account_connection); setContentView(R.layout.assistant_account_connection);

View file

@ -31,7 +31,7 @@ import org.linphone.LinphoneManager;
import org.linphone.LinphoneService; import org.linphone.LinphoneService;
import org.linphone.R; import org.linphone.R;
import org.linphone.activities.DialerActivity; import org.linphone.activities.DialerActivity;
import org.linphone.activities.ThemeableActivity; import org.linphone.activities.LinphoneGenericActivity;
import org.linphone.core.AccountCreator; import org.linphone.core.AccountCreator;
import org.linphone.core.Core; import org.linphone.core.Core;
import org.linphone.core.DialPlan; import org.linphone.core.DialPlan;
@ -40,7 +40,7 @@ import org.linphone.core.ProxyConfig;
import org.linphone.core.tools.Log; import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences; import org.linphone.settings.LinphonePreferences;
public abstract class AssistantActivity extends ThemeableActivity public abstract class AssistantActivity extends LinphoneGenericActivity
implements CountryPicker.CountryPickedListener { implements CountryPicker.CountryPickedListener {
static AccountCreator mAccountCreator; static AccountCreator mAccountCreator;
@ -52,6 +52,9 @@ public abstract class AssistantActivity extends ThemeableActivity
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
if (mAccountCreator == null) { if (mAccountCreator == null) {
String url = LinphonePreferences.instance().getXmlrpcUrl(); String url = LinphonePreferences.instance().getXmlrpcUrl();

View file

@ -44,6 +44,9 @@ public class EmailAccountCreationAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_email_account_creation); setContentView(R.layout.assistant_email_account_creation);

View file

@ -37,6 +37,9 @@ public class EmailAccountValidationAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_email_account_validation); setContentView(R.layout.assistant_email_account_validation);

View file

@ -43,6 +43,9 @@ public class GenericConnectionAssistantActivity extends AssistantActivity implem
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_generic_connection); setContentView(R.layout.assistant_generic_connection);

View file

@ -33,6 +33,9 @@ public class MenuAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_menu); setContentView(R.layout.assistant_menu);

View file

@ -44,6 +44,9 @@ public class OpenH264DownloadAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_openh264_codec_download); setContentView(R.layout.assistant_openh264_codec_download);
mHelper = Factory.instance().createOpenH264DownloadHelper(this); mHelper = Factory.instance().createOpenH264DownloadHelper(this);

View file

@ -43,6 +43,9 @@ public class PhoneAccountCreationAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_phone_account_creation); setContentView(R.layout.assistant_phone_account_creation);

View file

@ -49,6 +49,9 @@ public class PhoneAccountLinkingAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_phone_account_linking); setContentView(R.layout.assistant_phone_account_linking);

View file

@ -46,6 +46,9 @@ public class PhoneAccountValidationAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_phone_account_validation); setContentView(R.layout.assistant_phone_account_validation);

View file

@ -38,6 +38,9 @@ public class QrCodeConfigurationAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_qr_code_remote_configuration); setContentView(R.layout.assistant_qr_code_remote_configuration);

View file

@ -55,6 +55,9 @@ public class RemoteConfigurationAssistantActivity extends AssistantActivity {
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (mAbortCreation) {
return;
}
setContentView(R.layout.assistant_remote_configuration); setContentView(R.layout.assistant_remote_configuration);

View file

@ -48,7 +48,12 @@ public class DeviceOrientationEventListener extends OrientationEventListener {
return; return;
} }
mAlwaysChangingPhoneAngle = degrees; 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; int rotation = (360 - degrees) % 360;
Core core = LinphoneManager.getCore(); Core core = LinphoneManager.getCore();