From 60f71648f3cd2dab133ce1fa27b38dc20c77a5bd Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 19 Mar 2019 11:11:18 -0300 Subject: [PATCH 1/2] [android] Don't start NavDrawerActivity directly from foreground notification It might be that the lifecycle didn't start, so we need to show the OpenDatabaseActivity first. --- .../android/AndroidNotificationManagerImpl.java | 3 +-- .../android/login/OpenDatabaseActivity.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index 49d9428d1..556ecc4ca 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -261,8 +261,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, b.setContentText(appContext.getText(text)); b.setWhen(0); // Don't show the time b.setOngoing(true); - Intent i = new Intent(appContext, NavDrawerActivity.class); - i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); + Intent i = new Intent(appContext, SplashScreenActivity.class); b.setContentIntent(PendingIntent.getActivity(appContext, 0, i, 0)); if (SDK_INT >= 21) { b.setCategory(CATEGORY_SERVICE); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java index 55aa3a8e7..2065080bb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java @@ -16,10 +16,14 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; +import org.briarproject.briar.android.logout.HideUiActivity; import org.briarproject.briar.android.navdrawer.NavDrawerActivity; import javax.inject.Inject; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.COMPACTING_DATABASE; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.MIGRATING_DATABASE; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STARTING_SERVICES; @@ -69,6 +73,14 @@ public class OpenDatabaseActivity extends BriarActivity eventBus.removeListener(this); } + @Override + public void onBackPressed() { + Intent i = new Intent(this, HideUiActivity.class); + i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK); + startActivity(i); + supportFinishAfterTransition(); + } + @Override public void eventOccurred(Event e) { if (e instanceof LifecycleEvent) { @@ -97,7 +109,9 @@ public class OpenDatabaseActivity extends BriarActivity } private void finishAndStartApp() { - startActivity(new Intent(this, NavDrawerActivity.class)); + Intent i = new Intent(this, NavDrawerActivity.class); + i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); supportFinishAfterTransition(); } From ed842f781af951d81ac7ad3f2d1c3fa6eb63eb21 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 22 Mar 2019 13:36:54 +0000 Subject: [PATCH 2/2] Don't create extra activity instances from splash screen. --- .../android/login/OpenDatabaseActivity.java | 16 +--------- .../android/splash/SplashScreenActivity.java | 30 +++++++++++++------ 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java index 2065080bb..55aa3a8e7 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java @@ -16,14 +16,10 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; -import org.briarproject.briar.android.logout.HideUiActivity; import org.briarproject.briar.android.navdrawer.NavDrawerActivity; import javax.inject.Inject; -import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; -import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; -import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.COMPACTING_DATABASE; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.MIGRATING_DATABASE; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STARTING_SERVICES; @@ -73,14 +69,6 @@ public class OpenDatabaseActivity extends BriarActivity eventBus.removeListener(this); } - @Override - public void onBackPressed() { - Intent i = new Intent(this, HideUiActivity.class); - i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK); - startActivity(i); - supportFinishAfterTransition(); - } - @Override public void eventOccurred(Event e) { if (e instanceof LifecycleEvent) { @@ -109,9 +97,7 @@ public class OpenDatabaseActivity extends BriarActivity } private void finishAndStartApp() { - Intent i = new Intent(this, NavDrawerActivity.class); - i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); - startActivity(i); + startActivity(new Intent(this, NavDrawerActivity.class)); supportFinishAfterTransition(); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java index cf890f89e..5b80d3cc3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android.splash; +import android.app.Activity; import android.content.Intent; import android.os.Build; import android.os.Bundle; @@ -8,6 +9,8 @@ import android.support.v7.preference.PreferenceManager; import android.transition.Fade; import org.briarproject.bramble.api.account.AccountManager; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; @@ -19,10 +22,15 @@ import org.briarproject.briar.api.android.LockManager; import java.util.logging.Logger; +import javax.annotation.Nullable; import javax.inject.Inject; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class SplashScreenActivity extends BaseActivity { private static final Logger LOG = @@ -36,7 +44,7 @@ public class SplashScreenActivity extends BaseActivity { protected AndroidExecutor androidExecutor; @Override - public void onCreate(Bundle state) { + public void onCreate(@Nullable Bundle state) { super.onCreate(state); if (Build.VERSION.SDK_INT >= 21) { @@ -48,16 +56,14 @@ public class SplashScreenActivity extends BaseActivity { setContentView(R.layout.splash); if (accountManager.hasDatabaseKey()) { - Intent i; if (lockManager.isLocked()) { // The database needs to be opened for the app to be locked. // Start main activity right away. It will open UnlockActivity. // Otherwise, we would end up with two screen unlock inputs. - i = new Intent(this, NavDrawerActivity.class); + startNextActivity(NavDrawerActivity.class); } else { - i = new Intent(this, OpenDatabaseActivity.class); + startNextActivity(OpenDatabaseActivity.class); } - startActivity(i); finish(); } else { new Handler().postDelayed(() -> { @@ -72,22 +78,28 @@ public class SplashScreenActivity extends BaseActivity { component.inject(this); } - protected void startNextActivity() { + private void startNextActivity() { if (System.currentTimeMillis() >= EXPIRY_DATE) { LOG.info("Expired"); - startActivity(new Intent(this, ExpiredActivity.class)); + startNextActivity(ExpiredActivity.class); } else { if (accountManager.accountExists()) { LOG.info("Account exists"); - startActivity(new Intent(this, OpenDatabaseActivity.class)); + startNextActivity(OpenDatabaseActivity.class); } else { LOG.info("Account does not exist"); accountManager.deleteAccount(); - startActivity(new Intent(this, SetupActivity.class)); + startNextActivity(SetupActivity.class); } } } + private void startNextActivity(Class activityClass) { + Intent i = new Intent(this, activityClass); + i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + private void setPreferencesDefaults() { androidExecutor.runOnBackgroundThread(() -> PreferenceManager.setDefaultValues(SplashScreenActivity.this,