From 765340c34b14cf72b060ccfa966318afca82fc7a Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Wed, 5 Feb 2014 16:20:07 +0000 Subject: [PATCH] Clear all activities when showing startup failure notification. --- .../src/org/briarproject/android/BriarService.java | 12 ++++++++++++ .../org/briarproject/android/HomeScreenActivity.java | 10 ++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java index f84ab42477..d4829e2c7f 100644 --- a/briar-android/src/org/briarproject/android/BriarService.java +++ b/briar-android/src/org/briarproject/android/BriarService.java @@ -7,6 +7,7 @@ import static java.util.logging.Level.INFO; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import javax.inject.Inject; @@ -37,6 +38,7 @@ public class BriarService extends RoboService { private static final Logger LOG = Logger.getLogger(BriarService.class.getName()); + private final AtomicBoolean created = new AtomicBoolean(false); private final Binder binder = new BriarBinder(); @Inject private DatabaseConfig databaseConfig; @@ -52,6 +54,11 @@ public class BriarService extends RoboService { public void onCreate() { super.onCreate(); if(LOG.isLoggable(INFO)) LOG.info("Created"); + if(created.getAndSet(true)) { + if(LOG.isLoggable(INFO)) LOG.info("Already created"); + stopSelf(); + return; + } if(databaseConfig.getEncryptionKey() == null) { if(LOG.isLoggable(INFO)) LOG.info("No database key"); stopSelf(); @@ -92,6 +99,11 @@ public class BriarService extends RoboService { Object o = getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager nm = (NotificationManager) o; nm.notify(FAILURE_NOTIFICATION_ID, b.build()); + // Bring HomeScreenActivity to the front to clear all other activities + Intent i = new Intent(this, HomeScreenActivity.class); + i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); + i.putExtra("briar.STARTUP_FAILED", true); + startActivity(i); } @Override diff --git a/briar-android/src/org/briarproject/android/HomeScreenActivity.java b/briar-android/src/org/briarproject/android/HomeScreenActivity.java index 6caeaf890a..21828df67c 100644 --- a/briar-android/src/org/briarproject/android/HomeScreenActivity.java +++ b/briar-android/src/org/briarproject/android/HomeScreenActivity.java @@ -53,8 +53,14 @@ public class HomeScreenActivity extends BriarActivity { @Override public void onCreate(Bundle state) { super.onCreate(state); - long handle = getIntent().getLongExtra("briar.LOCAL_AUTHOR_HANDLE", -1); - if(handle == -1) { + Intent i = getIntent(); + boolean failed = i.getBooleanExtra("briar.STARTUP_FAILED", false); + long handle = i.getLongExtra("briar.LOCAL_AUTHOR_HANDLE", -1); + if(failed) { + finish(); + if(LOG.isLoggable(INFO)) LOG.info("Exiting"); + System.exit(0); + } else if(handle == -1) { // The activity has been launched before showButtons(); } else { -- GitLab