Show different mailbox status in UI

and show failure status after unsuccessful attempt
This commit is contained in:
Torsten Grote
2022-04-12 10:01:43 -03:00
parent 29b16c4d74
commit dae00c7e4e
3 changed files with 44 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
package org.briarproject.briar.android.mailbox; package org.briarproject.briar.android.mailbox;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
@@ -8,6 +9,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@@ -19,6 +21,8 @@ import org.briarproject.briar.R;
import javax.inject.Inject; import javax.inject.Inject;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.UiThread; import androidx.annotation.UiThread;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
@@ -27,6 +31,8 @@ import androidx.lifecycle.ViewModelProvider;
import static android.view.View.INVISIBLE; import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE; 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 androidx.transition.TransitionManager.beginDelayedTransition;
import static org.briarproject.briar.android.AppModule.getAndroidComponent; import static org.briarproject.briar.android.AppModule.getAndroidComponent;
import static org.briarproject.briar.android.util.UiUtils.MIN_DATE_RESOLUTION; 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 { public class MailboxStatusFragment extends Fragment {
static final String TAG = MailboxStatusFragment.class.getName(); static final String TAG = MailboxStatusFragment.class.getName();
private static final int NUM_FAILURES = 4;
@Inject @Inject
ViewModelProvider.Factory viewModelFactory; ViewModelProvider.Factory viewModelFactory;
@@ -47,6 +54,8 @@ public class MailboxStatusFragment extends Fragment {
@Nullable // UiThread @Nullable // UiThread
private Runnable refresher = null; private Runnable refresher = null;
private ImageView imageView;
private TextView statusTitleView;
private TextView statusInfoView; private TextView statusInfoView;
@Override @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); statusInfoView = v.findViewById(R.id.statusInfoView);
viewModel.getStatus() viewModel.getStatus()
.observe(getViewLifecycleOwner(), this::onMailboxStateChanged); .observe(getViewLifecycleOwner(), this::onMailboxStateChanged);
@@ -112,6 +123,27 @@ public class MailboxStatusFragment extends Fragment {
} }
private void onMailboxStateChanged(MailboxStatus status) { 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(); long lastSuccess = status.getTimeOfLastSuccess();
String lastConnectionText; String lastConnectionText;
if (lastSuccess < 0) { if (lastSuccess < 0) {
@@ -120,8 +152,9 @@ public class MailboxStatusFragment extends Fragment {
} else { } else {
lastConnectionText = formatDate(requireContext(), lastSuccess); lastConnectionText = formatDate(requireContext(), lastSuccess);
} }
String statusInfoText = getString( String statusInfoText =
R.string.mailbox_status_connected_info, lastConnectionText); getString(R.string.mailbox_status_connected_info,
lastConnectionText);
statusInfoView.setText(statusInfoText); statusInfoView.setText(statusInfoText);
} }

View File

@@ -198,6 +198,13 @@ class MailboxViewModel extends DbViewModel
LOG.info("Got result from connection check: " + success); LOG.info("Got result from connection check: " + success);
} }
liveData.postValue(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; return liveData;
} }

View File

@@ -643,6 +643,8 @@
<string name="tor_offline_button_check">Check connection settings</string> <string name="tor_offline_button_check">Check connection settings</string>
<string name="mailbox_status_title">Mailbox status</string> <string name="mailbox_status_title">Mailbox status</string>
<string name="mailbox_status_connected_title">Mailbox is running</string> <string name="mailbox_status_connected_title">Mailbox is running</string>
<string name="mailbox_status_problem_title">We are having trouble connecting to the mailbox</string>
<string name="mailbox_status_failure_title">Mailbox is unavailable</string>
<string name="mailbox_status_check_button">Check Connection</string> <string name="mailbox_status_check_button">Check Connection</string>
<!-- Example for string substitution: Last connection: 3min ago--> <!-- Example for string substitution: Last connection: 3min ago-->
<string name="mailbox_status_connected_info">Last connection: %s</string> <string name="mailbox_status_connected_info">Last connection: %s</string>