mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 05:09:53 +01:00
Show different mailbox status in UI
and show failure status after unsuccessful attempt
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user