From 6ce8516b939713b1f0c0e9790e981924ed03b7df Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 3 Jul 2018 17:16:50 -0700 Subject: [PATCH] Make contact photos optional when sharing contacts. Previously, if you had a contact photo for a user, we'd always send it Now you can choose whether or not it is sent. --- res/layout/item_editable_contact.xml | 8 +-- res/layout/item_selectable_contact_field.xml | 9 +++ .../securesms/contactshare/Contact.java | 16 ++++- .../contactshare/ContactFieldAdapter.java | 64 +++++++++++++++---- .../contactshare/ContactShareEditAdapter.java | 29 +++------ .../ContactShareEditViewModel.java | 2 +- .../SharedContactDetailsActivity.java | 4 +- 7 files changed, 87 insertions(+), 45 deletions(-) diff --git a/res/layout/item_editable_contact.xml b/res/layout/item_editable_contact.xml index 27e1eca4d8..08bf496a04 100644 --- a/res/layout/item_editable_contact.xml +++ b/res/layout/item_editable_contact.xml @@ -12,16 +12,12 @@ android:orientation="horizontal" android:gravity="center_vertical"> - - + + { - private final Locale locale; - private final boolean selectable; - private final List fields; + private final Locale locale; + private final boolean selectable; + private final List fields; + private final GlideRequests glideRequests; - public ContactFieldAdapter(@NonNull Locale locale, boolean selectable) { - this.locale = locale; - this.selectable = selectable; - this.fields = new ArrayList<>(); + public ContactFieldAdapter(@NonNull Locale locale, @NonNull GlideRequests glideRequests, boolean selectable) { + this.locale = locale; + this.glideRequests = glideRequests; + this.selectable = selectable; + this.fields = new ArrayList<>(); } @Override @@ -40,7 +45,7 @@ class ContactFieldAdapter extends RecyclerView.Adapter phoneNumbers, - @NonNull List emails, - @NonNull List postalAddresses) + void setFields(@NonNull Context context, + @Nullable Avatar avatar, + @NonNull List phoneNumbers, + @NonNull List emails, + @NonNull List postalAddresses) { fields.clear(); + if (avatar != null) { + fields.add(new Field(avatar)); + } + fields.addAll(Stream.of(phoneNumbers).map(phone -> new Field(context, phone, locale)).toList()); fields.addAll(Stream.of(emails).map(email -> new Field(context, email)).toList()); fields.addAll(Stream.of(postalAddresses).map(address -> new Field(context, address)).toList()); @@ -72,6 +82,7 @@ class ContactFieldAdapter extends RecyclerView.Adapter eventListener.onNameEditClicked(position, contact.getName())); - fieldAdapter.setFields(context, contact.getPhoneNumbers(), contact.getEmails(), contact.getPostalAddresses()); + fieldAdapter.setFields(context, contact.getAvatar(), contact.getPhoneNumbers(), contact.getEmails(), contact.getPostalAddresses()); } } diff --git a/src/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java b/src/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java index a4ed055211..2e76612e94 100644 --- a/src/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java +++ b/src/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java @@ -51,7 +51,7 @@ class ContactShareEditViewModel extends ViewModel { trimSelectables(contact.getPhoneNumbers()), trimSelectables(contact.getEmails()), trimSelectables(contact.getPostalAddresses()), - contact.getAvatar()); + contact.getAvatar() != null && contact.getAvatar().isSelected() ? contact.getAvatar() : null); trimmedContacts.add(trimmed); } diff --git a/src/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java b/src/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java index b036054fa8..9b9eea863d 100644 --- a/src/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java +++ b/src/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java @@ -135,7 +135,7 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActionBarAct messageButtonView = findViewById(R.id.contact_details_message_button); callButtonView = findViewById(R.id.contact_details_call_button); - contactFieldAdapter = new ContactFieldAdapter(dynamicLanguage.getCurrentLocale(), false); + contactFieldAdapter = new ContactFieldAdapter(dynamicLanguage.getCurrentLocale(), glideRequests, false); RecyclerView list = findViewById(R.id.contact_details_fields); list.setLayoutManager(new LinearLayoutManager(this)); @@ -171,7 +171,7 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActionBarAct }.execute(); }); - contactFieldAdapter.setFields(this, contact.getPhoneNumbers(), contact.getEmails(), contact.getPostalAddresses()); + contactFieldAdapter.setFields(this, null, contact.getPhoneNumbers(), contact.getEmails(), contact.getPostalAddresses()); } else { nameView.setText(""); numberView.setText("");