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 ba16b8b3b..45f3456db 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 @@ -1,6 +1,7 @@ package org.briarproject.briar.android.mailbox; import android.content.Context; +import android.content.res.ColorStateList; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -8,6 +9,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; @@ -19,6 +21,8 @@ import org.briarproject.briar.R; import javax.inject.Inject; +import androidx.annotation.ColorRes; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.annotation.UiThread; import androidx.fragment.app.Fragment; @@ -27,6 +31,8 @@ import androidx.lifecycle.ViewModelProvider; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static androidx.core.content.ContextCompat.getColor; +import static androidx.core.widget.ImageViewCompat.setImageTintList; import static androidx.transition.TransitionManager.beginDelayedTransition; import static org.briarproject.briar.android.AppModule.getAndroidComponent; import static org.briarproject.briar.android.util.UiUtils.MIN_DATE_RESOLUTION; @@ -38,6 +44,7 @@ import static org.briarproject.briar.android.util.UiUtils.observeOnce; public class MailboxStatusFragment extends Fragment { static final String TAG = MailboxStatusFragment.class.getName(); + private static final int NUM_FAILURES = 4; @Inject ViewModelProvider.Factory viewModelFactory; @@ -47,6 +54,8 @@ public class MailboxStatusFragment extends Fragment { @Nullable // UiThread private Runnable refresher = null; + private ImageView imageView; + private TextView statusTitleView; private TextView statusInfoView; @Override @@ -84,6 +93,8 @@ public class MailboxStatusFragment extends Fragment { }); }); + imageView = v.findViewById(R.id.imageView); + statusTitleView = v.findViewById(R.id.statusTitleView); statusInfoView = v.findViewById(R.id.statusInfoView); viewModel.getStatus() .observe(getViewLifecycleOwner(), this::onMailboxStateChanged); @@ -112,6 +123,27 @@ public class MailboxStatusFragment extends Fragment { } private void onMailboxStateChanged(MailboxStatus status) { + @ColorRes int tintRes; + @DrawableRes int iconRes; + String title; + if (status.getAttemptsSinceSuccess() == 0) { + iconRes = R.drawable.ic_check_circle_outline; + title = getString(R.string.mailbox_status_connected_title); + tintRes = R.color.briar_brand_green; + } else if (status.getAttemptsSinceSuccess() < NUM_FAILURES) { + iconRes = R.drawable.ic_help_outline_white; + title = getString(R.string.mailbox_status_problem_title); + tintRes = R.color.briar_orange_500; + } else { + tintRes = R.color.briar_red_500; + title = getString(R.string.mailbox_status_failure_title); + iconRes = R.drawable.alerts_and_states_error; + } + imageView.setImageResource(iconRes); + int color = getColor(requireContext(), tintRes); + setImageTintList(imageView, ColorStateList.valueOf(color)); + statusTitleView.setText(title); + long lastSuccess = status.getTimeOfLastSuccess(); String lastConnectionText; if (lastSuccess < 0) { @@ -120,8 +152,9 @@ public class MailboxStatusFragment extends Fragment { } else { lastConnectionText = formatDate(requireContext(), lastSuccess); } - String statusInfoText = getString( - R.string.mailbox_status_connected_info, lastConnectionText); + String statusInfoText = + getString(R.string.mailbox_status_connected_info, + lastConnectionText); statusInfoView.setText(statusInfoText); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxViewModel.java index a9d2e4a1f..267e21fdf 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxViewModel.java @@ -198,6 +198,13 @@ class MailboxViewModel extends DbViewModel LOG.info("Got result from connection check: " + success); } liveData.postValue(success); + if (!success) { // force failure screen + MailboxStatus lastStatus = status.getValue(); + long lastSuccess = lastStatus == null ? + -1 : lastStatus.getTimeOfLastSuccess(); + long now = System.currentTimeMillis(); + status.postValue(new MailboxStatus(now, lastSuccess, 999)); + } }); return liveData; } diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 93a83fa79..eb97d2ba0 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -643,6 +643,8 @@ Check connection settings Mailbox status Mailbox is running + We are having trouble connecting to the mailbox + Mailbox is unavailable Check Connection Last connection: %s