mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 12:49:55 +01:00
Show notification warning when own mailbox is unreachable
This commit is contained in:
@@ -18,6 +18,9 @@ import org.briarproject.bramble.api.event.Event;
|
|||||||
import org.briarproject.bramble.api.event.EventListener;
|
import org.briarproject.bramble.api.event.EventListener;
|
||||||
import org.briarproject.bramble.api.lifecycle.Service;
|
import org.briarproject.bramble.api.lifecycle.Service;
|
||||||
import org.briarproject.bramble.api.lifecycle.ServiceException;
|
import org.briarproject.bramble.api.lifecycle.ServiceException;
|
||||||
|
import org.briarproject.bramble.api.mailbox.MailboxStatus;
|
||||||
|
import org.briarproject.bramble.api.mailbox.event.MailboxProblemEvent;
|
||||||
|
import org.briarproject.bramble.api.mailbox.event.OwnMailboxConnectionStatusEvent;
|
||||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.settings.Settings;
|
import org.briarproject.bramble.api.settings.Settings;
|
||||||
@@ -32,6 +35,7 @@ import org.briarproject.briar.android.conversation.ConversationActivity;
|
|||||||
import org.briarproject.briar.android.forum.ForumActivity;
|
import org.briarproject.briar.android.forum.ForumActivity;
|
||||||
import org.briarproject.briar.android.hotspot.HotspotActivity;
|
import org.briarproject.briar.android.hotspot.HotspotActivity;
|
||||||
import org.briarproject.briar.android.login.SignInReminderReceiver;
|
import org.briarproject.briar.android.login.SignInReminderReceiver;
|
||||||
|
import org.briarproject.briar.android.mailbox.MailboxActivity;
|
||||||
import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
|
import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
|
||||||
import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
|
import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
|
||||||
import org.briarproject.briar.android.splash.SplashScreenActivity;
|
import org.briarproject.briar.android.splash.SplashScreenActivity;
|
||||||
@@ -69,10 +73,12 @@ import static android.content.Context.NOTIFICATION_SERVICE;
|
|||||||
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
|
import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
|
||||||
|
import static android.net.Uri.EMPTY;
|
||||||
import static android.os.Build.VERSION.SDK_INT;
|
import static android.os.Build.VERSION.SDK_INT;
|
||||||
import static androidx.core.app.NotificationCompat.CATEGORY_MESSAGE;
|
import static androidx.core.app.NotificationCompat.CATEGORY_MESSAGE;
|
||||||
import static androidx.core.app.NotificationCompat.CATEGORY_SERVICE;
|
import static androidx.core.app.NotificationCompat.CATEGORY_SERVICE;
|
||||||
import static androidx.core.app.NotificationCompat.CATEGORY_SOCIAL;
|
import static androidx.core.app.NotificationCompat.CATEGORY_SOCIAL;
|
||||||
|
import static androidx.core.app.NotificationCompat.PRIORITY_HIGH;
|
||||||
import static androidx.core.app.NotificationCompat.PRIORITY_LOW;
|
import static androidx.core.app.NotificationCompat.PRIORITY_LOW;
|
||||||
import static androidx.core.app.NotificationCompat.PRIORITY_MIN;
|
import static androidx.core.app.NotificationCompat.PRIORITY_MIN;
|
||||||
import static androidx.core.app.NotificationCompat.VISIBILITY_SECRET;
|
import static androidx.core.app.NotificationCompat.VISIBILITY_SECRET;
|
||||||
@@ -182,6 +188,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
|
|||||||
clearForumPostNotification();
|
clearForumPostNotification();
|
||||||
clearBlogPostNotification();
|
clearBlogPostNotification();
|
||||||
clearContactAddedNotification();
|
clearContactAddedNotification();
|
||||||
|
clearMailboxProblemNotification();
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
@@ -250,6 +257,13 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
|
|||||||
ContactAddedEvent c = (ContactAddedEvent) e;
|
ContactAddedEvent c = (ContactAddedEvent) e;
|
||||||
// Don't show notifications for contacts added in person
|
// Don't show notifications for contacts added in person
|
||||||
if (!c.isVerified()) showContactAddedNotification();
|
if (!c.isVerified()) showContactAddedNotification();
|
||||||
|
} else if (e instanceof MailboxProblemEvent) {
|
||||||
|
showMailboxProblemNotification();
|
||||||
|
} else if (e instanceof OwnMailboxConnectionStatusEvent) {
|
||||||
|
MailboxStatus s = ((OwnMailboxConnectionStatusEvent) e).getStatus();
|
||||||
|
if (s.getAttemptsSinceSuccess() == 0) {
|
||||||
|
clearMailboxProblemNotification();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -757,4 +771,45 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
|
|||||||
public void clearHotspotNotification() {
|
public void clearHotspotNotification() {
|
||||||
notificationManager.cancel(HOTSPOT_NOTIFICATION_ID);
|
notificationManager.cancel(HOTSPOT_NOTIFICATION_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showMailboxProblemNotification() {
|
||||||
|
if (SDK_INT >= 26) {
|
||||||
|
NotificationChannel channel = new NotificationChannel(
|
||||||
|
MAILBOX_PROBLEM_CHANNEL_ID, appContext.getString(
|
||||||
|
R.string.mailbox_error_notification_channel_title),
|
||||||
|
IMPORTANCE_DEFAULT);
|
||||||
|
channel.setLockscreenVisibility(VISIBILITY_SECRET);
|
||||||
|
notificationManager.createNotificationChannel(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationCompat.Builder b = new NotificationCompat.Builder(
|
||||||
|
appContext, MAILBOX_PROBLEM_CHANNEL_ID);
|
||||||
|
b.setSmallIcon(R.drawable.ic_mailbox);
|
||||||
|
b.setColor(getColor(appContext, R.color.briar_red_500));
|
||||||
|
b.setContentTitle(
|
||||||
|
appContext.getText(R.string.mailbox_error_notification_title));
|
||||||
|
b.setContentText(
|
||||||
|
appContext.getText(R.string.mailbox_error_notification_text));
|
||||||
|
b.setAutoCancel(true);
|
||||||
|
b.setNotificationSilent(); // not important enough for sound
|
||||||
|
b.setWhen(0); // Don't show the time
|
||||||
|
b.setPriority(PRIORITY_HIGH);
|
||||||
|
|
||||||
|
// Touching the notification shows the mailbox status page
|
||||||
|
Intent i = new Intent(appContext, MailboxActivity.class);
|
||||||
|
i.setData(EMPTY); // for some reason, the back navigation needs an Uri
|
||||||
|
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
TaskStackBuilder t = TaskStackBuilder.create(appContext);
|
||||||
|
t.addParentStack(MailboxActivity.class);
|
||||||
|
t.addNextIntent(i);
|
||||||
|
b.setContentIntent(t.getPendingIntent(nextRequestId++, 0));
|
||||||
|
|
||||||
|
notificationManager.notify(MAILBOX_PROBLEM_NOTIFICATION_ID, b.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearMailboxProblemNotification() {
|
||||||
|
notificationManager.cancel(MAILBOX_PROBLEM_NOTIFICATION_ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ public class MailboxStatusFragment extends Fragment {
|
|||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
requireActivity().setTitle(R.string.mailbox_status_title);
|
requireActivity().setTitle(R.string.mailbox_status_title);
|
||||||
|
viewModel.clearProblemNotification();
|
||||||
refresher = this::refreshLastConnection;
|
refresher = this::refreshLastConnection;
|
||||||
handler.postDelayed(refresher, MIN_DATE_RESOLUTION);
|
handler.postDelayed(refresher, MIN_DATE_RESOLUTION);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import org.briarproject.bramble.api.mailbox.MailboxManager;
|
|||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxStatus;
|
import org.briarproject.bramble.api.mailbox.MailboxStatus;
|
||||||
import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent;
|
import org.briarproject.bramble.api.mailbox.event.OwnMailboxConnectionStatusEvent;
|
||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.bramble.api.plugin.Plugin;
|
import org.briarproject.bramble.api.plugin.Plugin;
|
||||||
import org.briarproject.bramble.api.plugin.PluginManager;
|
import org.briarproject.bramble.api.plugin.PluginManager;
|
||||||
@@ -30,6 +30,7 @@ import org.briarproject.briar.android.qrcode.QrCodeDecoder;
|
|||||||
import org.briarproject.briar.android.viewmodel.DbViewModel;
|
import org.briarproject.briar.android.viewmodel.DbViewModel;
|
||||||
import org.briarproject.briar.android.viewmodel.LiveEvent;
|
import org.briarproject.briar.android.viewmodel.LiveEvent;
|
||||||
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
||||||
|
import org.briarproject.briar.api.android.AndroidNotificationManager;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -59,6 +60,7 @@ class MailboxViewModel extends DbViewModel
|
|||||||
private final QrCodeDecoder qrCodeDecoder;
|
private final QrCodeDecoder qrCodeDecoder;
|
||||||
private final PluginManager pluginManager;
|
private final PluginManager pluginManager;
|
||||||
private final MailboxManager mailboxManager;
|
private final MailboxManager mailboxManager;
|
||||||
|
private final AndroidNotificationManager notificationManager;
|
||||||
|
|
||||||
private final MutableLiveEvent<MailboxState> pairingState =
|
private final MutableLiveEvent<MailboxState> pairingState =
|
||||||
new MutableLiveEvent<>();
|
new MutableLiveEvent<>();
|
||||||
@@ -77,12 +79,14 @@ class MailboxViewModel extends DbViewModel
|
|||||||
EventBus eventBus,
|
EventBus eventBus,
|
||||||
@IoExecutor Executor ioExecutor,
|
@IoExecutor Executor ioExecutor,
|
||||||
PluginManager pluginManager,
|
PluginManager pluginManager,
|
||||||
MailboxManager mailboxManager) {
|
MailboxManager mailboxManager,
|
||||||
|
AndroidNotificationManager notificationManager) {
|
||||||
super(app, dbExecutor, lifecycleManager, db, androidExecutor);
|
super(app, dbExecutor, lifecycleManager, db, androidExecutor);
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
this.ioExecutor = ioExecutor;
|
this.ioExecutor = ioExecutor;
|
||||||
this.pluginManager = pluginManager;
|
this.pluginManager = pluginManager;
|
||||||
this.mailboxManager = mailboxManager;
|
this.mailboxManager = mailboxManager;
|
||||||
|
this.notificationManager = notificationManager;
|
||||||
qrCodeDecoder = new QrCodeDecoder(androidExecutor, ioExecutor, this);
|
qrCodeDecoder = new QrCodeDecoder(androidExecutor, ioExecutor, this);
|
||||||
eventBus.addListener(this);
|
eventBus.addListener(this);
|
||||||
checkIfSetup();
|
checkIfSetup();
|
||||||
@@ -251,6 +255,10 @@ class MailboxViewModel extends DbViewModel
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clearProblemNotification() {
|
||||||
|
notificationManager.clearMailboxProblemNotification();
|
||||||
|
}
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
LiveEvent<MailboxState> getPairingState() {
|
LiveEvent<MailboxState> getPairingState() {
|
||||||
return pairingState;
|
return pairingState;
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public interface AndroidNotificationManager {
|
|||||||
int BLOG_POST_NOTIFICATION_ID = 7;
|
int BLOG_POST_NOTIFICATION_ID = 7;
|
||||||
int CONTACT_ADDED_NOTIFICATION_ID = 8;
|
int CONTACT_ADDED_NOTIFICATION_ID = 8;
|
||||||
int HOTSPOT_NOTIFICATION_ID = 9;
|
int HOTSPOT_NOTIFICATION_ID = 9;
|
||||||
|
int MAILBOX_PROBLEM_NOTIFICATION_ID = 10;
|
||||||
|
|
||||||
// Channel IDs
|
// Channel IDs
|
||||||
String CONTACT_CHANNEL_ID = "contacts";
|
String CONTACT_CHANNEL_ID = "contacts";
|
||||||
@@ -44,6 +45,7 @@ public interface AndroidNotificationManager {
|
|||||||
String ONGOING_CHANNEL_ID = "zForegroundService2";
|
String ONGOING_CHANNEL_ID = "zForegroundService2";
|
||||||
String REMINDER_CHANNEL_ID = "zSignInReminder";
|
String REMINDER_CHANNEL_ID = "zSignInReminder";
|
||||||
String HOTSPOT_CHANNEL_ID = "zHotspot";
|
String HOTSPOT_CHANNEL_ID = "zHotspot";
|
||||||
|
String MAILBOX_PROBLEM_CHANNEL_ID = "zMailboxProblem";
|
||||||
|
|
||||||
// This channel is no longer used - keep the ID so we can remove the
|
// This channel is no longer used - keep the ID so we can remove the
|
||||||
// channel from existing installations
|
// channel from existing installations
|
||||||
@@ -104,4 +106,8 @@ public interface AndroidNotificationManager {
|
|||||||
void showHotspotNotification();
|
void showHotspotNotification();
|
||||||
|
|
||||||
void clearHotspotNotification();
|
void clearHotspotNotification();
|
||||||
|
|
||||||
|
void showMailboxProblemNotification();
|
||||||
|
|
||||||
|
void clearMailboxProblemNotification();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -652,6 +652,9 @@
|
|||||||
<string name="mailbox_status_unlink_no_wipe_title">Your Mailbox has been unlinked</string>
|
<string name="mailbox_status_unlink_no_wipe_title">Your Mailbox has been unlinked</string>
|
||||||
<string name="mailbox_status_unlink_no_wipe_message">Next time you have access to your Mailbox device, please open the Mailbox app and tap the \"Unlink\" button to complete the process.\n\nIf you no longer have access to your Mailbox device, don\'t worry. Your data is encrypted so it will remain secure even if you don\'t complete the process.</string>
|
<string name="mailbox_status_unlink_no_wipe_message">Next time you have access to your Mailbox device, please open the Mailbox app and tap the \"Unlink\" button to complete the process.\n\nIf you no longer have access to your Mailbox device, don\'t worry. Your data is encrypted so it will remain secure even if you don\'t complete the process.</string>
|
||||||
|
|
||||||
|
<string name="mailbox_error_notification_channel_title">Briar Mailbox problem</string>
|
||||||
|
<string name="mailbox_error_notification_title">Briar Mailbox is unavailable</string>
|
||||||
|
<string name="mailbox_error_notification_text">Tap to fix problem.</string>
|
||||||
<string name="mailbox_error_wizard_button">Fix problem</string>
|
<string name="mailbox_error_wizard_button">Fix problem</string>
|
||||||
<string name="mailbox_error_wizard_title">Mailbox troubleshooting wizard</string>
|
<string name="mailbox_error_wizard_title">Mailbox troubleshooting wizard</string>
|
||||||
<string name="mailbox_error_wizard_question1">Do you have access to your Mailbox device?</string>
|
<string name="mailbox_error_wizard_question1">Do you have access to your Mailbox device?</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user