diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java index 292325ae885c9606bc408998b1f3d7f4d1361642..6335b6b728d9782724a530111858bb30a1e84ad1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BriarActivity.java @@ -62,11 +62,10 @@ public abstract class BriarActivity extends BaseActivity { @Override protected void onActivityResult(int request, int result, Intent data) { super.onActivityResult(request, result, data); - if (request == REQUEST_PASSWORD && result == RESULT_OK) { - // PasswordActivity finishes when password was entered correctly. - // When back button is pressed there, it will bring itself back, - // so that we never arrive here with a result that is not OK. - briarController.startAndBindService(); + if (request == REQUEST_PASSWORD) { + // The result can be RESULT_CANCELED if there's no account + if (result == RESULT_OK) briarController.startAndBindService(); + else finish(); } else if (request == REQUEST_UNLOCK && result != RESULT_OK) { // We arrive here, if the user presses 'back' // in the Keyguard unlock screen, because UnlockActivity finishes. @@ -81,13 +80,16 @@ public abstract class BriarActivity extends BaseActivity { @Override public void onResume() { super.onResume(); - if (!briarController.accountSignedIn()) { + if (!briarController.accountSignedIn() && !isFinishing()) { + // Also check that the activity isn't finishing already. + // This is possible if we finished in onActivityResult(). + // Launching another PasswordActivity would cause a loop. Intent i = new Intent(this, PasswordActivity.class); startActivityForResult(i, REQUEST_PASSWORD); } else if (lockManager.isLocked() && !isFinishing()) { // Also check that the activity isn't finishing already. - // This is possible if finishing in onActivityResult(). - // Failure to do this check would cause an UnlockActivity loop. + // This is possible if we finished in onActivityResult(). + // Lauching another UnlockActivity would cause a loop. Intent i = new Intent(this, UnlockActivity.class); startActivityForResult(i, REQUEST_UNLOCK); } else if (SDK_INT >= 23) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java index 629d0fc97d30d391a13df175396030ac272bfcc2..09dafb060eb6c9021fbd88c0350e5e3818998bfb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java @@ -23,8 +23,6 @@ import org.briarproject.briar.api.android.AndroidNotificationManager; import javax.inject.Inject; -import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; -import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; @@ -54,8 +52,8 @@ public class PasswordActivity extends BaseActivity { overridePendingTransition(R.anim.fade_in, R.anim.fade_out); if (!accountManager.accountExists()) { - // TODO: Finish instead of deleting account? - deleteAccount(); + setResult(RESULT_CANCELED); + finish(); return; } @@ -114,10 +112,9 @@ public class PasswordActivity extends BaseActivity { private void deleteAccount() { accountManager.deleteAccount(); + startActivity(new Intent(this, SetupActivity.class)); setResult(RESULT_CANCELED); - Intent i = new Intent(this, SetupActivity.class); - i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK); - startActivity(i); + finish(); } public void onSignInClick(View v) {