From 171df265abac514c87f96a2705e8315a9ca90c6d Mon Sep 17 00:00:00 2001 From: Daniel Lublin Date: Mon, 17 Jan 2022 11:04:50 +0100 Subject: [PATCH] Let our activity actually show up, by avoiding to extend BriarActivity If user needs to sign in or create an account, BriarActivity launches StartupActivity. But we want to show up before that. Implement our own signOut with BriarActivity as a template. --- .../splash/ExpiredOldAndroidActivity.java | 55 +++++++++++++++++-- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java index 025363afe..cbc463daf 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredOldAndroidActivity.java @@ -1,21 +1,38 @@ package org.briarproject.briar.android.splash; import android.content.Context; +import android.content.Intent; import android.os.Bundle; -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.system.AndroidWakeLockManager; +import org.briarproject.bramble.api.system.Wakeful; import org.briarproject.briar.R; import org.briarproject.briar.android.Localizer; import org.briarproject.briar.android.activity.ActivityComponent; -import org.briarproject.briar.android.activity.BriarActivity; +import org.briarproject.briar.android.activity.BaseActivity; +import org.briarproject.briar.android.controller.BriarController; +import org.briarproject.briar.android.logout.ExitActivity; import javax.annotation.Nullable; +import javax.inject.Inject; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; +import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; +import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static org.briarproject.briar.android.TestingConstants.PREVENT_SCREENSHOTS; -@NotNullByDefault -public class ExpiredOldAndroidActivity extends BriarActivity { +@MethodsNotNullByDefault +@ParametersNotNullByDefault +public class ExpiredOldAndroidActivity extends BaseActivity { + + @Inject + BriarController briarController; + @Inject + AndroidWakeLockManager wakeLockManager; @Override public void onCreate(@Nullable Bundle state) { @@ -25,7 +42,7 @@ public class ExpiredOldAndroidActivity extends BriarActivity { setContentView(R.layout.activity_expired_old_android); findViewById(R.id.delete_account_button).setOnClickListener(v -> - signOut(true, true)); + signOutAndDeleteAccount()); } @Override @@ -39,4 +56,32 @@ public class ExpiredOldAndroidActivity extends BriarActivity { public void injectActivity(ActivityComponent component) { component.inject(this); } + + private void signOutAndDeleteAccount() { + // Hold a wake lock to ensure we exit before the device goes to sleep + wakeLockManager.runWakefully(() -> { + if (briarController.accountSignedIn()) { + // Don't use UiResultHandler because we want the result even if + // this activity has been destroyed + briarController.signOut(result -> { + Runnable exit = this::startExitActivity; + wakeLockManager.executeWakefully(exit, + this::runOnUiThread, "SignOut"); + }, true); + } else { + briarController.deleteAccount(); + startExitActivity(); + } + }, "SignOut"); + } + + @Wakeful + private void startExitActivity() { + Intent i = new Intent(this, ExitActivity.class); + i.addFlags(FLAG_ACTIVITY_NEW_TASK + | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + | FLAG_ACTIVITY_NO_ANIMATION + | FLAG_ACTIVITY_CLEAR_TASK); + startActivity(i); + } }