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 921081964..fd678fa88 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 @@ -12,7 +12,6 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; -import android.widget.Toast; import org.briarproject.bramble.api.mailbox.MailboxStatus; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; @@ -25,6 +24,7 @@ import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.annotation.UiThread; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.ViewModelProvider; @@ -57,6 +57,8 @@ public class MailboxStatusFragment extends Fragment { private ImageView imageView; private TextView statusTitleView; private TextView statusInfoView; + private Button unlinkButton; + private ProgressBar unlinkProgress; @Override public void onAttach(Context context) { @@ -101,10 +103,9 @@ public class MailboxStatusFragment extends Fragment { // TODO // * Implement UI for warning user when mailbox is unreachable #2175 - // * add "Unlink" button confirmation dialog and functionality #2173 - Button unlinkButton = v.findViewById(R.id.unlinkButton); - unlinkButton.setOnClickListener(view -> Toast.makeText(requireContext(), - "NOT IMPLEMENTED", Toast.LENGTH_SHORT).show()); + unlinkButton = v.findViewById(R.id.unlinkButton); + unlinkProgress = v.findViewById(R.id.unlinkProgress); + unlinkButton.setOnClickListener(view -> onUnlinkButtonClicked()); } @Override @@ -167,4 +168,21 @@ public class MailboxStatusFragment extends Fragment { } } + private void onUnlinkButtonClicked() { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext(), + R.style.BriarDialogTheme); + builder.setTitle(R.string.mailbox_status_unlink_dialog_title); + builder.setMessage(R.string.mailbox_status_unlink_dialog_message); + builder.setPositiveButton(R.string.cancel, + (dialog, which) -> dialog.cancel()); + builder.setNegativeButton(R.string.mailbox_status_unlink_button, + (dialog, which) -> { + beginDelayedTransition((ViewGroup) requireView()); + unlinkButton.setVisibility(INVISIBLE); + unlinkProgress.setVisibility(VISIBLE); + viewModel.unlink(); + }); + builder.show(); + } + } 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 3a47e1393..eeacb180e 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 @@ -6,6 +6,7 @@ import com.google.zxing.Result; import org.briarproject.bramble.api.Consumer; import org.briarproject.bramble.api.db.DatabaseExecutor; +import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.TransactionManager; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventBus; @@ -220,6 +221,18 @@ class MailboxViewModel extends DbViewModel return liveData; } + @UiThread + void unlink() { + ioExecutor.execute(() -> { + try { + mailboxManager.unPair(); + pairingState.postEvent(new MailboxState.NotSetup()); + } catch (DbException e) { + handleException(e); + } + }); + } + @UiThread LiveEvent getPairingState() { return pairingState; diff --git a/briar-android/src/main/res/layout/fragment_mailbox_status.xml b/briar-android/src/main/res/layout/fragment_mailbox_status.xml index 098c71d7c..63b2e80df 100644 --- a/briar-android/src/main/res/layout/fragment_mailbox_status.xml +++ b/briar-android/src/main/res/layout/fragment_mailbox_status.xml @@ -83,4 +83,15 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> + + diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index f38a3639f..58ac7813b 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -651,6 +651,8 @@ Never Unlink + Unlink mailbox? + Unlinking a working Mailbox will result in message delivery issues, even when relinking it later again. Disappearing messages