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/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,