From 299ad072228232b8bf312f5eda06907dd4c6ad69 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 16 May 2019 12:54:42 -0300 Subject: [PATCH] [android] Allow pending contacts to be removed at any time --- .../remote/PendingContactListActivity.java | 29 ++++++++++++++++++- .../add/remote/PendingContactViewHolder.java | 5 ---- .../res/layout/list_item_pending_contact.xml | 9 ++---- briar-android/src/main/res/values/strings.xml | 2 ++ 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java index c731a70f9..a3627d7f0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactListActivity.java @@ -2,12 +2,15 @@ package org.briarproject.briar.android.contact.add.remote; import android.arch.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProviders; +import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.v7.app.ActionBar; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.view.MenuItem; import org.briarproject.bramble.api.contact.PendingContact; +import org.briarproject.bramble.api.contact.PendingContactId; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; @@ -20,6 +23,8 @@ import java.util.Collection; import javax.annotation.Nullable; import javax.inject.Inject; +import static org.briarproject.bramble.api.contact.PendingContactState.FAILED; + @MethodsNotNullByDefault @ParametersNotNullByDefault public class PendingContactListActivity extends BriarActivity @@ -86,7 +91,29 @@ public class PendingContactListActivity extends BriarActivity @Override public void onFailedPendingContactRemoved(PendingContact pendingContact) { - viewModel.removePendingContact(pendingContact.getId()); + // no need to show warning dialog for failed pending contacts + if (pendingContact.getState() == FAILED) { + removePendingContact(pendingContact.getId()); + return; + } + // show warning dialog + OnClickListener removeListener = (dialog, which) -> + removePendingContact(pendingContact.getId()); + AlertDialog.Builder builder = new AlertDialog.Builder( + PendingContactListActivity.this, R.style.BriarDialogTheme); + builder.setTitle( + getString(R.string.dialog_title_remove_pending_contact)); + builder.setMessage( + getString(R.string.dialog_message_remove_pending_contact)); + builder.setNegativeButton(R.string.groups_remove, removeListener); + builder.setPositiveButton(R.string.cancel, null); + // re-enable remove button when dialog is dismissed/canceled + builder.setOnDismissListener(dialog -> adapter.notifyDataSetChanged()); + builder.show(); + } + + private void removePendingContact(PendingContactId id) { + viewModel.removePendingContact(id); } private void onPendingContactsChanged(Collection contacts) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactViewHolder.java index ac3b2a917..7b23327e5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/PendingContactViewHolder.java @@ -11,8 +11,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.view.TextAvatarView; -import static android.view.View.GONE; -import static android.view.View.VISIBLE; import static org.briarproject.briar.android.util.UiUtils.formatDate; @NotNullByDefault @@ -47,7 +45,6 @@ class PendingContactViewHolder extends ViewHolder { int color = ContextCompat .getColor(status.getContext(), R.color.briar_green); - int buttonVisibility = GONE; switch (item.getState()) { case WAITING_FOR_CONNECTION: color = ContextCompat @@ -64,13 +61,11 @@ class PendingContactViewHolder extends ViewHolder { color = ContextCompat .getColor(status.getContext(), R.color.briar_red); status.setText(R.string.adding_contact_failed); - buttonVisibility = VISIBLE; break; default: throw new IllegalStateException(); } status.setTextColor(color); - removeButton.setVisibility(buttonVisibility); removeButton.setEnabled(true); } diff --git a/briar-android/src/main/res/layout/list_item_pending_contact.xml b/briar-android/src/main/res/layout/list_item_pending_contact.xml index f1591273e..82866dd6c 100644 --- a/briar-android/src/main/res/layout/list_item_pending_contact.xml +++ b/briar-android/src/main/res/layout/list_item_pending_contact.xml @@ -24,6 +24,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="@dimen/margin_large" android:layout_marginLeft="@dimen/margin_large" + android:layout_marginRight="@dimen/margin_large" android:layout_marginStart="@dimen/margin_large" android:layout_marginTop="@dimen/margin_large" android:textColor="?android:attr/textColorPrimary" @@ -43,12 +44,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" - android:layout_marginEnd="16dp" - android:layout_marginRight="16dp" android:layout_marginTop="8dp" android:text="@string/adding_contact_failed" app:layout_constrainedWidth="true" - app:layout_constraintEnd_toStartOf="@+id/time" + app:layout_constraintEnd_toStartOf="@+id/removeButton" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/name" app:layout_constraintTop_toBottomOf="@+id/name" @@ -73,12 +72,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/groups_remove" - android:visibility="gone" app:layout_constraintEnd_toEndOf="@+id/time" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/status" - tools:visibility="visible"/> + app:layout_constraintTop_toBottomOf="@+id/time"/> Connecting… Adding contact… Adding contact has failed + Confirm Removal + This contact is still being added. If you remove it now, it will not be added. Enter your contact\'s link, not your own Please enter a nickname Invalid link