diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java index e3c913cc43..038b47a690 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java @@ -13,6 +13,7 @@ import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.Pair; @@ -64,6 +65,10 @@ public class ContactRepository { String phone = cursor.getString(cursor.getColumnIndexOrThrow(RecipientDatabase.PHONE)); String email = cursor.getString(cursor.getColumnIndexOrThrow(RecipientDatabase.EMAIL)); + if (phone != null) { + phone = PhoneNumberFormatter.prettyPrint(phone); + } + return Util.getFirstNonEmpty(phone, email); })); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index f8cfa22f27..6829684fcb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -104,6 +104,7 @@ import org.thoughtcrime.securesms.mms.OutgoingMediaMessage; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.permissions.Permissions; +import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.profiles.UnknownSenderView; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.reactions.ReactionsBottomSheetDialogFragment; @@ -433,7 +434,7 @@ public class ConversationFragment extends LoggingFragment { } else if (isSelf) { conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation)); } else { - String subtitle = recipient.getE164().orNull(); + String subtitle = recipient.getE164().transform(PhoneNumberFormatter::prettyPrint).orNull(); if (subtitle == null || subtitle.equals(title)) { conversationBanner.hideSubtitle(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java index d3929c3392..f3d26d3d00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java @@ -11,6 +11,7 @@ import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonenumber; import com.google.i18n.phonenumbers.ShortNumberInfo; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -46,7 +47,6 @@ public class PhoneNumberFormatter { private final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); private final Pattern ALPHA_PATTERN = Pattern.compile("[a-zA-Z]"); - public static @NonNull PhoneNumberFormatter get(Context context) { String localNumber = TextSecurePreferences.getLocalNumber(context); @@ -81,6 +81,25 @@ public class PhoneNumberFormatter { this.localCountryCode = localCountryCode; } + public static @NonNull String prettyPrint(@NonNull String e164) { + return get(ApplicationDependencies.getApplication()).prettyPrintFormat(e164); + } + + public @NonNull String prettyPrintFormat(@NonNull String e164) { + try { + Phonenumber.PhoneNumber parsedNumber = phoneNumberUtil.parse(e164, localCountryCode); + + if (localNumber.isPresent() && localNumber.get().countryCode == parsedNumber.getCountryCode()) { + return phoneNumberUtil.format(parsedNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL); + } else { + return phoneNumberUtil.format(parsedNumber, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL); + } + } catch (NumberParseException e) { + Log.w(TAG, "Failed to format number."); + return e164; + } + } + public String format(@Nullable String number) { if (number == null) return "Unknown"; if (GroupId.isEncodedGroup(number)) return number; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 1cd3d5bc2d..add06ca6bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -418,7 +418,7 @@ public class Recipient { public @NonNull String getDisplayName(@NonNull Context context) { String name = Util.getFirstNonEmpty(getName(context), getProfileName().toString(), - e164, + PhoneNumberFormatter.prettyPrint(e164), email, context.getString(R.string.Recipient_unknown)); @@ -428,7 +428,7 @@ public class Recipient { public @NonNull String getDisplayNameOrUsername(@NonNull Context context) { String name = Util.getFirstNonEmpty(getName(context), getProfileName().toString(), - e164, + PhoneNumberFormatter.prettyPrint(e164), email, username, context.getString(R.string.Recipient_unknown)); @@ -439,7 +439,7 @@ public class Recipient { public @NonNull String getMentionDisplayName(@NonNull Context context) { String name = Util.getFirstNonEmpty(isSelf ? getProfileName().toString() : getName(context), isSelf ? getName(context) : getProfileName().toString(), - e164, + PhoneNumberFormatter.prettyPrint(e164), email, context.getString(R.string.Recipient_unknown)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java index 2d7e2ddfcc..31489d3322 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java @@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto80dp; import org.thoughtcrime.securesms.groups.GroupId; +import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientExporter; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -157,7 +158,7 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF } String usernameNumberString = recipient.hasAUserSetDisplayName(requireContext()) && !recipient.isSelf() - ? recipient.getSmsAddress().or("").trim() + ? recipient.getSmsAddress().transform(PhoneNumberFormatter::prettyPrint).or("").trim() : ""; usernameNumber.setText(usernameNumberString); usernameNumber.setVisibility(TextUtils.isEmpty(usernameNumberString) ? View.GONE : View.VISIBLE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java index 19c4da278a..ca501b6ef6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java @@ -29,6 +29,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry; import org.thoughtcrime.securesms.groups.ui.addtogroup.AddToGroupsActivity; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.notifications.NotificationChannels; +import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; @@ -124,7 +125,7 @@ public final class ManageRecipientViewModel extends ViewModel { private static @NonNull String getDisplaySubtitle(@NonNull Recipient recipient, @NonNull Context context) { if (!recipient.isSelf() && recipient.hasAUserSetDisplayName(context)) { - return recipient.getSmsAddress().or("").trim(); + return recipient.getSmsAddress().transform(PhoneNumberFormatter::prettyPrint).or("").trim(); } else { return ""; }