From be44ef9c0a29fa5a17e88d37cfe2a675b8b44b9c Mon Sep 17 00:00:00 2001 From: Sagar Date: Wed, 15 Jan 2025 20:34:53 +0530 Subject: [PATCH] Improve contact sharing selection restrictions. Resolves #13915 --- .../securesms/contactshare/Contact.java | 6 +++-- .../ContactShareEditViewModel.java | 1 - .../securesms/contactshare/ContactUtil.java | 2 +- .../contactshare/SharedContactRepository.java | 22 ++++++++++--------- .../res/layout/activity_contact_name_edit.xml | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java index cb0adac915..a6efba2f76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java @@ -43,7 +43,7 @@ public class Contact implements Parcelable { @JsonProperty private final Avatar avatar; - public Contact(@JsonProperty("name") @NonNull Name name, + public Contact(@JsonProperty("name") @Nullable Name name, @JsonProperty("organization") @Nullable String organization, @JsonProperty("phoneNumbers") @NonNull List phoneNumbers, @JsonProperty("emails") @NonNull List emails, @@ -77,7 +77,7 @@ public class Contact implements Parcelable { } public @NonNull Name getName() { - return name; + return name == null ? Name.EMPTY_NAME : name; } public @Nullable String getOrganization() { @@ -228,6 +228,8 @@ public class Contact implements Parcelable { dest.writeString(nickname); } + public static Name EMPTY_NAME = new Name("","","","","",""); + public static final Creator CREATOR = new Creator() { @Override public Name createFromParcel(Parcel in) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java index facd1ce4e0..66d36d86c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java @@ -65,7 +65,6 @@ class ContactShareEditViewModel extends ViewModel { void updateContactName(int contactPosition, @NonNull Name name) { if (name.isEmpty()) { - events.postValue(Event.BAD_CONTACT); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java index 9c65f87337..abcb4caabc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java @@ -70,7 +70,7 @@ public final class ContactUtil { return contact.getName().getNickname(); } - if (!TextUtils.isEmpty(contact.getName().getGivenName())) { + if (!TextUtils.isEmpty(contact.getName().getGivenName()) || !TextUtils.isEmpty(contact.getName().getFamilyName())) { return ProfileName.fromParts(contact.getName().getGivenName(), contact.getName().getFamilyName()).toString(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactRepository.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactRepository.java index 264e23e3e7..9aab132928 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactRepository.java @@ -9,11 +9,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; import org.signal.contacts.SystemContactsRepository; import org.signal.contacts.SystemContactsRepository.NameDetails; import org.signal.contacts.SystemContactsRepository.PhoneDetails; +import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; import org.thoughtcrime.securesms.contactshare.Contact.Email; import org.thoughtcrime.securesms.contactshare.Contact.Name; import org.thoughtcrime.securesms.contactshare.Contact.Phone; @@ -72,17 +72,19 @@ public class SharedContactRepository { @WorkerThread private @Nullable Contact getContactFromSystemContacts(long contactId) { - Name name = getName(contactId); - if (name == null) { - Log.w(TAG, "Couldn't find a name associated with the provided contact ID."); + List phoneNumbers = getPhoneNumbers(contactId); + List emails = getEmails(contactId); + + if (phoneNumbers.isEmpty() && emails.isEmpty()) { + Log.w(TAG, "Couldn't find a phone number or email address associated with the provided contact ID."); return null; } - List phoneNumbers = getPhoneNumbers(contactId); - AvatarInfo avatarInfo = getAvatarInfo(contactId, phoneNumbers); - Avatar avatar = avatarInfo != null ? new Avatar(avatarInfo.uri, avatarInfo.isProfile) : null; + Name name = getName(contactId); + AvatarInfo avatarInfo = getAvatarInfo(contactId, phoneNumbers); + Avatar avatar = avatarInfo != null ? new Avatar(avatarInfo.uri, avatarInfo.isProfile) : null; - return new Contact(name, null, phoneNumbers, getEmails(contactId), getPostalAddresses(contactId), avatar); + return new Contact(name, null, phoneNumbers, emails, getPostalAddresses(contactId), avatar); } @WorkerThread @@ -223,7 +225,7 @@ public class SharedContactRepository { private final boolean isProfile; private AvatarInfo(Uri uri, boolean isProfile) { - this.uri = uri; + this.uri = uri; this.isProfile = isProfile; } diff --git a/app/src/main/res/layout/activity_contact_name_edit.xml b/app/src/main/res/layout/activity_contact_name_edit.xml index 2d1014c77b..77c319124b 100644 --- a/app/src/main/res/layout/activity_contact_name_edit.xml +++ b/app/src/main/res/layout/activity_contact_name_edit.xml @@ -13,7 +13,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/signal_m3_toolbar_height" android:minHeight="@dimen/signal_m3_toolbar_height" - app:navigationIcon="@drawable/ic_x_tinted" + app:navigationIcon="@drawable/ic_check_28_tinted" app:title="@string/ContactShareEditActivity__edit_name" app:titleTextAppearance="@style/Signal.Text.TitleLarge" />