From 29b16c4d74f878173055414cb995e1c798a607f2 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 12 Apr 2022 09:35:39 -0300 Subject: [PATCH] Re-use OfflineFragment when offline in mailbox status screen --- .../briar/android/mailbox/MailboxActivity.java | 11 +++++++---- .../briar/android/mailbox/MailboxState.java | 5 +++++ .../briar/android/mailbox/MailboxViewModel.java | 9 ++++++++- .../briar/android/mailbox/OfflineFragment.java | 11 +++++++---- .../android/mailbox/OfflineStatusFragment.java | 17 +++++++++++++++++ 5 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineStatusFragment.java 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 46ac84fcb..8c5f16b32 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 @@ -67,7 +67,7 @@ public class MailboxActivity extends BriarActivity { } else if (state instanceof MailboxState.CameraError) { onCameraError(); } else if (state instanceof MailboxState.IsPaired) { - onIsPaired(); + onIsPaired(((MailboxState.IsPaired) state).isOnline); } else { throw new AssertionError("Unknown state: " + state); } @@ -181,10 +181,13 @@ public class MailboxActivity extends BriarActivity { showFragment(getSupportFragmentManager(), f, ErrorFragment.TAG); } - private void onIsPaired() { + private void onIsPaired(boolean isOnline) { progressBar.setVisibility(INVISIBLE); - showFragment(getSupportFragmentManager(), new MailboxStatusFragment(), - MailboxStatusFragment.TAG, false); + Fragment f = isOnline ? + new MailboxStatusFragment() : new OfflineStatusFragment(); + String tag = isOnline ? + MailboxStatusFragment.TAG : OfflineStatusFragment.TAG; + showFragment(getSupportFragmentManager(), f, tag, false); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxState.java b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxState.java index e69a94209..4fcfdaf6a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxState.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/MailboxState.java @@ -28,6 +28,11 @@ class MailboxState { } static class IsPaired extends MailboxState { + final boolean isOnline; + + IsPaired(boolean isOnline) { + this.isOnline = isOnline; + } } } 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 96f5f66a4..a9d2e4a1f 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 @@ -105,7 +105,8 @@ class MailboxViewModel extends DbViewModel if (isPaired) { MailboxStatus mailboxStatus = mailboxManager.getMailboxStatus(txn); - pairingState.postEvent(new MailboxState.IsPaired()); + boolean isOnline = isTorActive(); + pairingState.postEvent(new MailboxState.IsPaired(isOnline)); status.postValue(mailboxStatus); } else { pairingState.postEvent(new NotSetup()); @@ -183,6 +184,12 @@ class MailboxViewModel extends DbViewModel return qrCodeDecoder; } + @UiThread + void checkIfOnlineWhenPaired() { + boolean isOnline = isTorActive(); + pairingState.setEvent(new MailboxState.IsPaired(isOnline)); + } + LiveData checkConnection() { MutableLiveData liveData = new MutableLiveData<>(); ioExecutor.execute(() -> { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineFragment.java index 99ae679be..3ae1f6c18 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineFragment.java @@ -33,10 +33,9 @@ public class OfflineFragment extends Fragment { @Inject ViewModelProvider.Factory viewModelFactory; - private MailboxViewModel viewModel; + protected MailboxViewModel viewModel; private NestedScrollView scrollView; - protected Button buttonView; @Override public void onAttach(Context context) { @@ -61,8 +60,8 @@ public class OfflineFragment extends Fragment { Intent i = new Intent(requireContext(), TransportsActivity.class); startActivity(i); }); - buttonView = v.findViewById(R.id.button); - buttonView.setOnClickListener(view -> viewModel.showDownloadFragment()); + Button buttonView = v.findViewById(R.id.button); + buttonView.setOnClickListener(view -> onTryAgainClicked()); return v; } @@ -74,4 +73,8 @@ public class OfflineFragment extends Fragment { scrollView.post(() -> scrollView.fullScroll(FOCUS_DOWN)); } + protected void onTryAgainClicked() { + viewModel.showDownloadFragment(); + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineStatusFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineStatusFragment.java new file mode 100644 index 000000000..ce2af02f8 --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/mailbox/OfflineStatusFragment.java @@ -0,0 +1,17 @@ +package org.briarproject.briar.android.mailbox; + +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; + +@MethodsNotNullByDefault +@ParametersNotNullByDefault +public class OfflineStatusFragment extends OfflineFragment { + + public static final String TAG = OfflineStatusFragment.class.getName(); + + @Override + protected void onTryAgainClicked() { + viewModel.checkIfOnlineWhenPaired(); + } + +}