Merge branch '1554-remove-pending-contacts' into 'master'

Allow pending contacts to be removed at any time

Closes #1554

See merge request briar/briar!1098
This commit is contained in:
akwizgran
2019-05-24 14:49:48 +00:00
4 changed files with 33 additions and 12 deletions

View File

@@ -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(

View File

@@ -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);
}

View File

@@ -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"/>
<View
android:id="@+id/divider"

View File

@@ -197,6 +197,8 @@
<string name="connecting">Connecting…</string>
<string name="adding_contact">Adding contact…</string>
<string name="adding_contact_failed">Adding contact has failed</string>
<string name="dialog_title_remove_pending_contact">Confirm Removal</string>
<string name="dialog_message_remove_pending_contact">This contact is still being added. If you remove it now, it will not be added.</string>
<string name="own_link_error">Enter your contact\'s link, not your own</string>
<string name="nickname_missing">Please enter a nickname</string>
<string name="invalid_link">Invalid link</string>