Implement new Add Members UI.

This commit is contained in:
Alex Hart
2020-06-05 12:33:41 -03:00
parent 707e238e5c
commit 4a455ff958
31 changed files with 625 additions and 58 deletions

View File

@@ -45,6 +45,7 @@ import org.thoughtcrime.securesms.util.Util;
import java.util.List;
import java.util.Locale;
import java.util.Set;
/**
* List adapter to display all contacts and their related information
@@ -67,10 +68,11 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
public static final int PAYLOAD_SELECTION_CHANGE = 1;
private final boolean multiSelect;
private final LayoutInflater li;
private final LayoutInflater layoutInflater;
private final TypedArray drawables;
private final ItemClickListener clickListener;
private final GlideRequests glideRequests;
private final Set<RecipientId> currentContacts;
private final SelectedContactSet selectedContacts = new SelectedContactSet();
@@ -102,6 +104,7 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
public abstract void bind(@NonNull GlideRequests glideRequests, @Nullable RecipientId recipientId, int type, String name, String number, String label, int color, boolean multiSelect);
public abstract void unbind(@NonNull GlideRequests glideRequests);
public abstract void setChecked(boolean checked);
public abstract void setEnabled(boolean enabled);
}
public static class ContactViewHolder extends ViewHolder {
@@ -131,6 +134,11 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
public void setChecked(boolean checked) {
getView().setChecked(checked);
}
@Override
public void setEnabled(boolean enabled) {
getView().setEnabled(enabled);
}
}
public static class DividerViewHolder extends ViewHolder {
@@ -152,6 +160,9 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
@Override
public void setChecked(boolean checked) {}
@Override
public void setEnabled(boolean enabled) {}
}
static class HeaderViewHolder extends RecyclerView.ViewHolder {
@@ -164,14 +175,16 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
@NonNull GlideRequests glideRequests,
@Nullable Cursor cursor,
@Nullable ItemClickListener clickListener,
boolean multiSelect)
boolean multiSelect,
@NonNull Set<RecipientId> currentContacts)
{
super(context, cursor);
this.li = LayoutInflater.from(context);
this.glideRequests = glideRequests;
this.drawables = context.obtainStyledAttributes(STYLE_ATTRIBUTES);
this.multiSelect = multiSelect;
this.clickListener = clickListener;
this.layoutInflater = LayoutInflater.from(context);
this.glideRequests = glideRequests;
this.drawables = context.obtainStyledAttributes(STYLE_ATTRIBUTES);
this.multiSelect = multiSelect;
this.clickListener = clickListener;
this.currentContacts = currentContacts;
}
@Override
@@ -188,9 +201,9 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
@Override
public ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_CONTACT) {
return new ContactViewHolder(li.inflate(R.layout.contact_selection_list_item, parent, false), clickListener);
return new ContactViewHolder(layoutInflater.inflate(R.layout.contact_selection_list_item, parent, false), clickListener);
} else {
return new DividerViewHolder(li.inflate(R.layout.contact_selection_list_divider, parent, false));
return new DividerViewHolder(layoutInflater.inflate(R.layout.contact_selection_list_divider, parent, false));
}
}
@@ -211,8 +224,12 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
viewHolder.unbind(glideRequests);
viewHolder.bind(glideRequests, id, contactType, name, number, labelText, color, multiSelect);
viewHolder.setEnabled(true);
if (numberType == ContactRepository.NEW_USERNAME_TYPE) {
if (currentContacts.contains(id)) {
viewHolder.setChecked(true);
viewHolder.setEnabled(false);
} else if (numberType == ContactRepository.NEW_USERNAME_TYPE) {
viewHolder.setChecked(selectedContacts.contains(SelectedContact.forUsername(id, number)));
} else {
viewHolder.setChecked(selectedContacts.contains(SelectedContact.forPhone(id, number)));
@@ -230,7 +247,12 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter<ViewH
int numberType = cursor.getInt(cursor.getColumnIndexOrThrow(ContactRepository.NUMBER_TYPE_COLUMN));
String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactRepository.NUMBER_COLUMN));
if (numberType == ContactRepository.NEW_USERNAME_TYPE) {
viewHolder.setEnabled(true);
if (currentContacts.contains(id)) {
viewHolder.setChecked(true);
viewHolder.setEnabled(false);
} else if (numberType == ContactRepository.NEW_USERNAME_TYPE) {
viewHolder.setChecked(selectedContacts.contains(SelectedContact.forUsername(id, number)));
} else {
viewHolder.setChecked(selectedContacts.contains(SelectedContact.forPhone(id, number)));

View File

@@ -98,6 +98,12 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientF
this.checkBox.setChecked(selected);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
this.checkBox.setEnabled(enabled);
}
public void unbind(GlideRequests glideRequests) {
if (recipient != null) {
recipient.removeForeverObserver(this);