diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java
index 39b4d7fa0..ecdf5291f 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java
@@ -103,22 +103,32 @@ class MailboxManagerImpl implements MailboxManager {
MailboxProperties props = db.transactionWithNullableResult(true,
mailboxSettingsManager::getOwnMailboxProperties);
success = api.checkStatus(props);
- } catch (DbException | IOException | MailboxApi.ApiException e) {
+ } catch (DbException e) {
+ logException(LOG, WARNING, e);
+ // we don't treat this is a failure to record
+ return false;
+ } catch (IOException | MailboxApi.ApiException e) {
+ // we record this as a failure
success = false;
logException(LOG, WARNING, e);
}
- if (success) {
- try {
- // we are only recording successful connections here
- // as those update the UI and failures might be false negatives
- db.transaction(false, txn ->
- mailboxSettingsManager.recordSuccessfulConnection(txn,
- clock.currentTimeMillis()));
- } catch (DbException e) {
- logException(LOG, WARNING, e);
- }
+ try {
+ recordCheckResult(success);
+ } catch (DbException e) {
+ logException(LOG, WARNING, e);
}
return success;
}
+ private void recordCheckResult(boolean success) throws DbException {
+ long now = clock.currentTimeMillis();
+ db.transaction(false, txn -> {
+ if (success) {
+ mailboxSettingsManager.recordSuccessfulConnection(txn, now);
+ } else {
+ mailboxSettingsManager.recordFailedConnectionAttempt(txn, now);
+ }
+ });
+ }
+
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxStatusFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxStatusFragment.java
index 45f3456db..921081964 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxStatusFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxStatusFragment.java
@@ -100,7 +100,7 @@ public class MailboxStatusFragment extends Fragment {
.observe(getViewLifecycleOwner(), this::onMailboxStateChanged);
// TODO
- // * detect problems and show them #2175
+ // * Implement UI for warning user when mailbox is unreachable #2175
// * add "Unlink" button confirmation dialog and functionality #2173
Button unlinkButton = v.findViewById(R.id.unlinkButton);
unlinkButton.setOnClickListener(view -> Toast.makeText(requireContext(),
diff --git a/briar-android/src/main/res/layout/fragment_mailbox_status.xml b/briar-android/src/main/res/layout/fragment_mailbox_status.xml
index 58096f487..098c71d7c 100644
--- a/briar-android/src/main/res/layout/fragment_mailbox_status.xml
+++ b/briar-android/src/main/res/layout/fragment_mailbox_status.xml
@@ -19,22 +19,23 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.25"
app:layout_constraintVertical_chainStyle="packed"
- app:srcCompat="@drawable/ic_check_circle_outline"
- app:tint="@color/briar_brand_green"
- tools:ignore="ContentDescription" />
+ tools:ignore="ContentDescription"
+ tools:srcCompat="@drawable/ic_help_outline_white"
+ tools:tint="@color/briar_orange_500" />
+ app:layout_constraintTop_toBottomOf="@+id/imageView"
+ tools:text="@string/mailbox_status_problem_title" />