From f4538df67939dbc72967147d2b9ca3925a8b4c91 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 7 Dec 2015 16:31:10 -0200 Subject: [PATCH] Touching startup failure notification now shows details The text of the startup failure notification is unhelpful due to lack of space. Touching the notification now launches an activity that gives details of the problem and what can be done about it. Closes #38 --- briar-android/AndroidManifest.xml | 5 +++ .../res/layout/activity_startup_failure.xml | 25 +++++++++++ briar-android/res/values/strings.xml | 3 ++ .../briarproject/android/BriarService.java | 13 +++--- .../android/StartupFailureActivity.java | 44 +++++++++++++++++++ 5 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 briar-android/res/layout/activity_startup_failure.xml create mode 100644 briar-android/src/org/briarproject/android/StartupFailureActivity.java diff --git a/briar-android/AndroidManifest.xml b/briar-android/AndroidManifest.xml index a83ed165c..f941a604a 100644 --- a/briar-android/AndroidManifest.xml +++ b/briar-android/AndroidManifest.xml @@ -219,5 +219,10 @@ android:value=".android.contact.ContactListActivity" /> + + diff --git a/briar-android/res/layout/activity_startup_failure.xml b/briar-android/res/layout/activity_startup_failure.xml new file mode 100644 index 000000000..4ae08197a --- /dev/null +++ b/briar-android/res/layout/activity_startup_failure.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index 3e0ed4508..d429004d6 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -17,6 +17,9 @@ Sign In Briar could not start You may need to reinstall Briar. + Briar Startup Failure + For some reason, your Briar database is corrupted beyond repair. Your account, your data and all your contact connections are lost. Unfortunately, you need to reinstall Briar und set up a new account. + Briar was unable to start a required plugin. Reinstalling Briar usually solves this problem. However, please note that you will then lose your account and all data associated with it since Briar is not using central servers to store your data on. This software has expired.\nPlease install a newer version. Contacts Delete contact diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java index b5e5ea4e5..65a03d3a6 100644 --- a/briar-android/src/org/briarproject/android/BriarService.java +++ b/briar-android/src/org/briarproject/android/BriarService.java @@ -102,24 +102,27 @@ public class BriarService extends RoboService implements EventListener { } else { if (LOG.isLoggable(WARNING)) LOG.warning("Startup failed: " + result); - showStartupFailureNotification(); + showStartupFailureNotification(result); stopSelf(); } } }.start(); } - private void showStartupFailureNotification() { + private void showStartupFailureNotification(StartResult result) { NotificationCompat.Builder b = new NotificationCompat.Builder(this); 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(this, DashboardActivity.class); - i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); - b.setContentIntent(PendingIntent.getActivity(this, 0, i, 0)); + Intent i = new Intent(this, StartupFailureActivity.class); + i.setFlags(FLAG_ACTIVITY_NEW_TASK); + i.putExtra("briar.START_RESULT", result); + i.putExtra("briar.FAILURE_NOTIFICATION_ID", FAILURE_NOTIFICATION_ID); + b.setContentIntent(PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)); Object o = getSystemService(NOTIFICATION_SERVICE); NotificationManager nm = (NotificationManager) o; nm.notify(FAILURE_NOTIFICATION_ID, b.build()); + // Bring the dashboard to the front to clear all other activities i = new Intent(this, DashboardActivity.class); i.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP); diff --git a/briar-android/src/org/briarproject/android/StartupFailureActivity.java b/briar-android/src/org/briarproject/android/StartupFailureActivity.java new file mode 100644 index 000000000..a93a6354d --- /dev/null +++ b/briar-android/src/org/briarproject/android/StartupFailureActivity.java @@ -0,0 +1,44 @@ +package org.briarproject.android; + +import android.app.NotificationManager; +import android.content.Intent; +import android.os.Bundle; +import android.widget.TextView; + +import org.briarproject.R; + +import roboguice.activity.RoboActivity; + +import static org.briarproject.api.lifecycle.LifecycleManager.StartResult; + +public class StartupFailureActivity extends RoboActivity { + + @Override + public void onCreate(Bundle state) { + super.onCreate(state); + + setContentView(R.layout.activity_startup_failure); + handleIntent(getIntent()); + } + + private void handleIntent(Intent i) { + StartResult result = (StartResult) i.getSerializableExtra("briar.START_RESULT"); + int notificationId = i.getIntExtra("briar.FAILURE_NOTIFICATION_ID", -1); + + // cancel notification + if (notificationId > -1) { + Object o = getSystemService(NOTIFICATION_SERVICE); + NotificationManager nm = (NotificationManager) o; + nm.cancel(notificationId); + } + + // show proper error message + TextView view = (TextView) findViewById(R.id.errorView); + if (result.equals(StartResult.DB_ERROR)) { + view.setText(getText(R.string.startup_failed_db_error)); + } else if (result.equals(StartResult.SERVICE_ERROR)) { + view.setText(getText(R.string.startup_failed_service_error)); + } + } + +}