diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
index 6640877e7..ed72e1849 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
@@ -46,6 +46,7 @@ import org.briarproject.briar.android.logging.CachingLogHandler;
import org.briarproject.briar.android.login.SignInReminderReceiver;
import org.briarproject.briar.android.mailbox.ErrorFragment;
import org.briarproject.briar.android.mailbox.MailboxScanFragment;
+import org.briarproject.briar.android.mailbox.MailboxStatusFragment;
import org.briarproject.briar.android.mailbox.OfflineFragment;
import org.briarproject.briar.android.mailbox.SetupDownloadFragment;
import org.briarproject.briar.android.removabledrive.ChooserFragment;
@@ -251,4 +252,6 @@ public interface AndroidComponent
void inject(OfflineFragment offlineFragment);
void inject(ErrorFragment errorFragment);
+
+ void inject(MailboxStatusFragment mailboxStatusFragment);
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxActivity.java
index 76ca2be4a..d163a3768 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxActivity.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxActivity.java
@@ -3,10 +3,8 @@ package org.briarproject.briar.android.mailbox;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.ProgressBar;
-import android.widget.Toast;
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
-import org.briarproject.bramble.api.mailbox.MailboxStatus;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
@@ -23,7 +21,6 @@ import androidx.lifecycle.ViewModelProvider;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
-import static android.widget.Toast.LENGTH_LONG;
import static org.briarproject.briar.android.util.UiUtils.showFragment;
@MethodsNotNullByDefault
@@ -66,7 +63,7 @@ public class MailboxActivity extends BriarActivity {
} else if (state instanceof MailboxState.OfflineWhenPairing) {
onOffline();
} else if (state instanceof MailboxState.IsPaired) {
- onIsPaired(((MailboxState.IsPaired) state).mailboxStatus);
+ onIsPaired();
} else {
throw new AssertionError("Unknown state: " + state);
}
@@ -167,10 +164,10 @@ public class MailboxActivity extends BriarActivity {
OfflineFragment.TAG);
}
- private void onIsPaired(MailboxStatus mailboxStatus) {
+ private void onIsPaired() {
progressBar.setVisibility(INVISIBLE);
- // TODO
- Toast.makeText(this, "NOT IMPLEMENTED", LENGTH_LONG).show();
+ showFragment(getSupportFragmentManager(), new MailboxStatusFragment(),
+ MailboxStatusFragment.TAG, false);
}
private void repopulateBackStack() {
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
new file mode 100644
index 000000000..9b0573a18
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxStatusFragment.java
@@ -0,0 +1,85 @@
+package org.briarproject.briar.android.mailbox;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+
+import javax.inject.Inject;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.ViewModelProvider;
+
+import static java.util.Objects.requireNonNull;
+import static org.briarproject.briar.android.AppModule.getAndroidComponent;
+import static org.briarproject.briar.android.util.UiUtils.formatDate;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+public class MailboxStatusFragment extends Fragment {
+
+ static final String TAG = MailboxStatusFragment.class.getName();
+
+ @Inject
+ ViewModelProvider.Factory viewModelFactory;
+
+ private MailboxViewModel viewModel;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ FragmentActivity activity = requireActivity();
+ getAndroidComponent(activity).inject(this);
+ viewModel = new ViewModelProvider(activity, viewModelFactory)
+ .get(MailboxViewModel.class);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_mailbox_status,
+ container, false);
+ }
+
+ @Override
+ public void onViewCreated(View v, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(v, savedInstanceState);
+ MailboxState.IsPaired state =
+ (MailboxState.IsPaired) viewModel.getState().getLastValue();
+ requireNonNull(state); // TODO check assumption
+ TextView statusInfoView = v.findViewById(R.id.statusInfoView);
+ long lastSuccess = state.mailboxStatus.getTimeOfLastSuccess();
+ String lastConnectionText;
+ if (lastSuccess < 0) {
+ lastConnectionText = getString(R.string.pref_lock_timeout_never);
+ } else {
+ lastConnectionText = formatDate(requireContext(), lastSuccess);
+ }
+ String statusInfoText = getString(
+ R.string.mailbox_status_connected_info, lastConnectionText);
+ statusInfoView.setText(statusInfoText);
+ // TODO
+ // * react to status changes
+ // * detect problems and show them
+ // * update connection time periodically like conversation timestamps
+ // * add "Check connection" button
+ // * add "Unlink" button with confirmation dialog
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ requireActivity().setTitle(R.string.mailbox_status_title);
+ }
+
+}
diff --git a/briar-android/src/main/res/layout/fragment_mailbox_status.xml b/briar-android/src/main/res/layout/fragment_mailbox_status.xml
new file mode 100644
index 000000000..608edd3ba
--- /dev/null
+++ b/briar-android/src/main/res/layout/fragment_mailbox_status.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 633188bc3..df5962743 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -614,7 +614,7 @@
Mailbox
- Mailbox Setup
+ Mailbox setup
A Mailbox enables your contacts to send you messages while you are offline. The Mailbox will receive your messages and store them until you come online.\n
\nYou can install the Briar Mailbox app on a spare device. Keep it connected to power and Wi-Fi so it\'s always online.
First, install the Mailbox app on another device by searching for \"Briar Mailbox\" on Google Play or wherever you downloaded Briar.\n
@@ -637,6 +637,10 @@
Offline
Ensure that this device is online and connections to the internet are allowed.\n\nAfterwards, wait for the globe icon in connection settings to turn green.
Check connection settings
+ Mailbox status
+ Mailbox is running
+
+ Last connection: %s
Disappearing messages