diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml
index ffac6071b..e325e8aca 100644
--- a/briar-android/src/main/AndroidManifest.xml
+++ b/briar-android/src/main/AndroidManifest.xml
@@ -343,7 +343,13 @@
+ android:excludeFromRecents="true"
+ android:exported="false"
+ android:finishOnTaskLaunch="true"
+ android:label="@string/startup_failed_activity_title"
+ android:launchMode="singleInstance"
+ android:process=":briar_startup_failure"
+ android:windowSoftInputMode="adjustResize|stateHidden" />
{
- NotificationCompat.Builder b = new NotificationCompat.Builder(
- BriarService.this, FAILURE_CHANNEL_ID);
- b.setSmallIcon(android.R.drawable.stat_notify_error);
- b.setContentTitle(getText(
- R.string.startup_failed_notification_title));
- b.setContentText(getText(
- R.string.startup_failed_notification_text));
- Intent i = new Intent(BriarService.this,
- StartupFailureActivity.class);
- i.setFlags(FLAG_ACTIVITY_NEW_TASK);
- i.putExtra(EXTRA_START_RESULT, result);
- i.putExtra(EXTRA_NOTIFICATION_ID, FAILURE_NOTIFICATION_ID);
- b.setContentIntent(PendingIntent.getActivity(BriarService.this,
- 0, i, FLAG_UPDATE_CURRENT));
- NotificationManager nm = (NotificationManager)
- requireNonNull(getSystemService(NOTIFICATION_SERVICE));
- nm.notify(FAILURE_NOTIFICATION_ID, b.build());
- // Bring the dashboard to the front to clear the back stack
- i = new Intent(BriarService.this, ENTRY_ACTIVITY);
+ // Bring the entry activity to the front to clear the back stack
+ Intent i = new Intent(BriarService.this, ENTRY_ACTIVITY);
i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra(EXTRA_STARTUP_FAILED, true);
+ i.putExtra(EXTRA_START_RESULT, result);
startActivity(i);
});
}
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 5f1e29fa2..6cfdc2565 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
@@ -1,6 +1,5 @@
package org.briarproject.briar.android;
-import android.app.NotificationManager;
import android.content.Intent;
import android.os.Bundle;
@@ -15,9 +14,7 @@ import org.briarproject.briar.android.fragment.ErrorFragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import static java.util.Objects.requireNonNull;
import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult;
-import static org.briarproject.briar.android.BriarService.EXTRA_NOTIFICATION_ID;
import static org.briarproject.briar.android.BriarService.EXTRA_START_RESULT;
@MethodsNotNullByDefault
@@ -41,14 +38,6 @@ public class StartupFailureActivity extends BaseActivity implements
private void handleIntent(Intent i) {
StartResult result =
(StartResult) i.getSerializableExtra(EXTRA_START_RESULT);
- int notificationId = i.getIntExtra(EXTRA_NOTIFICATION_ID, -1);
-
- // cancel notification
- if (notificationId > -1) {
- Object o = getSystemService(NOTIFICATION_SERVICE);
- NotificationManager nm = (NotificationManager) requireNonNull(o);
- nm.cancel(notificationId);
- }
// show proper error message
int errorRes;
@@ -78,5 +67,4 @@ public class StartupFailureActivity extends BaseActivity implements
public void runOnDbThread(@NonNull Runnable runnable) {
throw new UnsupportedOperationException();
}
-
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
index 557d4b677..893560485 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/navdrawer/NavDrawerActivity.java
@@ -29,6 +29,7 @@ import org.briarproject.bramble.api.plugin.TorConstants;
import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.BriarApplication;
+import org.briarproject.briar.android.StartupFailureActivity;
import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity;
import org.briarproject.briar.android.blog.FeedFragment;
@@ -73,6 +74,7 @@ import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE;
import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING;
import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING;
import static org.briarproject.briar.android.BriarService.EXTRA_STARTUP_FAILED;
+import static org.briarproject.briar.android.BriarService.EXTRA_START_RESULT;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_PASSWORD;
import static org.briarproject.briar.android.navdrawer.IntentRouter.handleExternalIntent;
@@ -250,6 +252,11 @@ public class NavDrawerActivity extends BriarActivity implements
private void exitIfStartupFailed(Intent intent) {
if (intent.getBooleanExtra(EXTRA_STARTUP_FAILED, false)) {
+ // Launch StartupFailureActivity in its own process, then exit
+ Intent i = new Intent(this, StartupFailureActivity.class);
+ i.putExtra(EXTRA_START_RESULT,
+ intent.getSerializableExtra(EXTRA_START_RESULT));
+ startActivity(i);
finish();
LOG.info("Exiting");
System.exit(0);
diff --git a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
index 6a3a5cbb2..765425720 100644
--- a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
+++ b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
@@ -41,8 +41,10 @@ public interface AndroidNotificationManager {
// that will sort below the main channels such as contacts
String ONGOING_CHANNEL_OLD_ID = "zForegroundService";
String ONGOING_CHANNEL_ID = "zForegroundService2";
- String FAILURE_CHANNEL_ID = "zStartupFailure";
String REMINDER_CHANNEL_ID = "zSignInReminder";
+ // This channel is no longer used - keep the ID so we can remove the
+ // channel from existing installations
+ String FAILURE_CHANNEL_ID = "zStartupFailure";
// Actions for pending intents
String ACTION_DISMISS_REMINDER = "dismissReminder";