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 9340a5f1d..aea76ace9 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 @@ -85,7 +90,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( 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 15b702627..6104b75a2 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 @@ -48,7 +46,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 @@ -65,13 +62,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