diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java index b7d3c17a5..0ba14e5ec 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplication.java @@ -1,7 +1,10 @@ package org.briarproject.briar.android; +import android.app.Activity; import android.content.SharedPreferences; +import org.briarproject.briar.android.navdrawer.NavDrawerActivity; + import java.util.Collection; import java.util.logging.LogRecord; @@ -11,6 +14,8 @@ import java.util.logging.LogRecord; */ public interface BriarApplication { + Class ENTRY_ACTIVITY = NavDrawerActivity.class; + Collection getRecentLogRecords(); AndroidComponent getApplicationComponent(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java index 6d502b4b9..030d87c5d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java @@ -47,7 +47,7 @@ import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS; -import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; +import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY; import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_CHANNEL_ID; import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_NOTIFICATION_ID; import static org.briarproject.briar.api.android.AndroidNotificationManager.ONGOING_CHANNEL_ID; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java index dd3746623..481d00d45 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java @@ -74,7 +74,7 @@ public class StartupFailureActivity extends BaseActivity implements @Override public void runOnDbThread(@NonNull Runnable runnable) { - throw new AssertionError("Deprecated and should not be used"); + throw new UnsupportedOperationException(); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/account/SetupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/account/SetupActivity.java index dfa340597..8d8a6ef4e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/account/SetupActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/account/SetupActivity.java @@ -19,7 +19,7 @@ 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 android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME; -import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; +import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY; @MethodsNotNullByDefault @ParametersNotNullByDefault diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java index f87df6442..0f13d0900 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java @@ -91,8 +91,6 @@ import dagger.Component; dependencies = AndroidComponent.class) public interface ActivityComponent { - Class ENTRY_ACTIVITY = NavDrawerActivity.class; - Activity activity(); void inject(SplashScreenActivity activity); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseFragment.java index 1a33b77f8..f92080554 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseFragment.java @@ -26,7 +26,7 @@ import static org.briarproject.briar.android.login.StartupViewModel.State.MIGRAT @ParametersNotNullByDefault public class OpenDatabaseFragment extends BaseFragment { - final static String TAG = PasswordFragment.class.getName(); + final static String TAG = OpenDatabaseFragment.class.getName(); @Inject ViewModelProvider.Factory viewModelFactory; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/StartupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/StartupActivity.java index 6b29c74a7..bf76d82ba 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/StartupActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/StartupActivity.java @@ -23,6 +23,7 @@ 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 android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME; import static org.briarproject.briar.android.login.StartupViewModel.State.SIGNED_IN; import static org.briarproject.briar.android.login.StartupViewModel.State.SIGNED_OUT; import static org.briarproject.briar.android.login.StartupViewModel.State.STARTED; @@ -59,10 +60,12 @@ public class StartupActivity extends BaseActivity implements // because if it exists, we assume the database also exists // and when clearing app data, the folder does not get deleted. viewModel.deleteAccount(); - onAccountDeleted(true); + onAccountDeleted(); return; } - viewModel.getAccountDeleted().observe(this, this::onAccountDeleted); + viewModel.getAccountDeleted().observe(this, deleted -> { + if (deleted != null && deleted) onAccountDeleted(); + }); viewModel.getState().observe(this, this::onStateChanged); } @@ -86,7 +89,10 @@ public class StartupActivity extends BaseActivity implements } else if (state == SIGNED_IN) { startService(new Intent(this, BriarService.class)); } else if (state == STARTING) { - // only show OpenDatabaseFragment if not already visible + // Only show OpenDatabaseFragment if not already visible. + // This can happen because several LifecycleManager states are + // mapped to STARTING, so this can get called several times + // as the app's lifecycle advances. FragmentManager fm = getSupportFragmentManager(); Fragment f = fm.findFragmentByTag(OpenDatabaseFragment.TAG); if (f == null || !f.isVisible()) { @@ -100,21 +106,19 @@ public class StartupActivity extends BaseActivity implements } } - private void onAccountDeleted(boolean accountDeleted) { - if (accountDeleted) { - setResult(RESULT_CANCELED); - finish(); - Intent i = new Intent(this, SetupActivity.class); - i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | - FLAG_ACTIVITY_CLEAR_TASK); - startActivity(i); - } + private void onAccountDeleted() { + setResult(RESULT_CANCELED); + finish(); + Intent i = new Intent(this, SetupActivity.class); + i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | + FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_TASK_ON_HOME); + startActivity(i); } @Override public void runOnDbThread(Runnable runnable) { // we don't need this and shouldn't be forced to implement it - throw new AssertionError(); + throw new UnsupportedOperationException(); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java index 85bb7b2b1..6f5dcacc4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java @@ -52,6 +52,7 @@ import javax.inject.Inject; import static android.app.Activity.RESULT_OK; 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 android.media.RingtoneManager.ACTION_RINGTONE_PICKER; import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI; @@ -79,7 +80,7 @@ import static org.briarproject.bramble.util.LogUtils.logDuration; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.now; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; -import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; +import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_RINGTONE; import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_SIGN_OUT; import static org.briarproject.briar.android.util.UiUtils.hasScreenLock; @@ -576,7 +577,7 @@ public class SettingsFragment extends PreferenceFragmentCompat (dialogInterface, i) -> { language.setValue(newValue); Intent intent = new Intent(getContext(), ENTRY_ACTIVITY); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.setFlags(FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(INTENT_SIGN_OUT, true); requireActivity().startActivity(intent); requireActivity().finish(); 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 b3030e52e..4e8998fea 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 @@ -26,7 +26,7 @@ import static android.support.v7.preference.PreferenceManager.setDefaultValues; import static java.lang.System.currentTimeMillis; import static java.util.logging.Logger.getLogger; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; -import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; +import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY; @MethodsNotNullByDefault @ParametersNotNullByDefault diff --git a/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java index 7e7eb8024..ad96f9999 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java @@ -16,7 +16,7 @@ import org.briarproject.briar.api.test.TestDataCreator; import javax.inject.Inject; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; -import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; +import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY; public class TestDataActivity extends BriarActivity {