diff --git a/res/layout/conversation_item_received.xml b/res/layout/conversation_item_received.xml index c8f437f3e2..172aee6941 100644 --- a/res/layout/conversation_item_received.xml +++ b/res/layout/conversation_item_received.xml @@ -91,6 +91,20 @@ tools:text="+14152222222" tools:visibility="visible" /> + + + + > { if (recipient.isLocalNumber()) { recipientStrings.add(context.getString(R.string.GroupMembersDialog_me)); } else { - String name = recipient.getDisplayName(context); + String name = getRecipientName(recipient); recipientStrings.add(name); } } @@ -113,6 +114,18 @@ public class GroupMembersDialog extends AsyncTask> { return recipientStrings.toArray(new String[members.size()]); } + private String getRecipientName(Recipient recipient) { + if (FeatureFlags.PROFILE_DISPLAY) return recipient.getDisplayName(context); + + String name = recipient.toShortString(context); + + if (recipient.getName(context) == null && !TextUtils.isEmpty(recipient.getProfileName())) { + name += " ~" + recipient.getProfileName(); + } + + return name; + } + public Recipient get(int index) { return members.get(index); } diff --git a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java index 032e729159..e786d68355 100644 --- a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java @@ -139,9 +139,9 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity { private void initializeToolbar() { setSupportActionBar(this.toolbar); - getSupportActionBar().setTitle(recipient.get().getDisplayName(this)); + getSupportActionBar().setTitle(recipient.get().toShortString(this)); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - this.recipient.observe(this, recipient -> getSupportActionBar().setTitle(recipient.getDisplayName(this))); + this.recipient.observe(this, recipient -> getSupportActionBar().setTitle(recipient.toShortString(this))); } public void onEnterMultiSelect() { diff --git a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java index 5a96cc3ac1..5fe8bdc7b7 100644 --- a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -160,7 +160,7 @@ public final class MediaPreviewActivity extends PassphraseRequiredActionBarActiv } if (mediaItem.outgoing) getSupportActionBar().setTitle(getString(R.string.MediaPreviewActivity_you)); - else if (mediaItem.recipient != null) getSupportActionBar().setTitle(mediaItem.recipient.getDisplayName(this)); + else if (mediaItem.recipient != null) getSupportActionBar().setTitle(mediaItem.recipient.toShortString(this)); else getSupportActionBar().setTitle(""); getSupportActionBar().setSubtitle(relativeTimeSpan); diff --git a/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java b/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java index 92e4b9eba5..1a7a07203c 100644 --- a/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java +++ b/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java @@ -38,6 +38,8 @@ import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.RotateProfileKeyJob; import org.thoughtcrime.securesms.logging.Log; + +import android.telephony.PhoneNumberUtils; import android.util.Pair; import android.view.LayoutInflater; import android.view.MenuItem; @@ -79,6 +81,7 @@ import org.thoughtcrime.securesms.util.Dialogs; import org.thoughtcrime.securesms.util.DynamicDarkToolbarTheme; import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicTheme; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.IdentityUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -225,7 +228,7 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi else this.avatar.setScaleType(ImageView.ScaleType.CENTER_CROP); this.avatar.setBackgroundColor(recipient.getColor().toActionBarColor(this)); - this.toolbarLayout.setTitle(recipient.getDisplayName(this)); + this.toolbarLayout.setTitle(recipient.toShortString(this)); this.toolbarLayout.setContentScrimColor(recipient.getColor().toActionBarColor(this)); } @@ -420,9 +423,14 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi colorPreference.setColors(MaterialColors.CONVERSATION_PALETTE.asConversationColorArray(requireActivity())); colorPreference.setColor(recipient.getColor().toActionBarColor(requireActivity())); - aboutPreference.setTitle(recipient.getDisplayName(requireContext())); + if (FeatureFlags.PROFILE_DISPLAY) { + aboutPreference.setTitle(recipient.getDisplayName(requireContext())); + aboutPreference.setSummary(recipient.resolve().getE164().or("")); + } else { + aboutPreference.setTitle(formatRecipient(recipient)); + aboutPreference.setSummary(recipient.getCustomLabel()); + } - aboutPreference.setSummary(recipient.resolve().getE164().or("")); aboutPreference.setSecure(recipient.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED); if (recipient.isBlocked()) blockPreference.setTitle(R.string.RecipientPreferenceActivity_unblock); @@ -450,6 +458,12 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi } } + private @NonNull String formatRecipient(@NonNull Recipient recipient) { + if (recipient.getE164().isPresent()) return PhoneNumberUtils.formatNumber(recipient.requireE164()); + else if (recipient.getEmail().isPresent()) return recipient.requireEmail(); + else return ""; + } + private @NonNull String getRingtoneSummary(@NonNull Context context, @Nullable Uri ringtone) { if (ringtone == null) { return context.getString(R.string.preferences__default); diff --git a/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java b/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java index b1e918fc64..41829ea6e4 100644 --- a/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java +++ b/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java @@ -445,7 +445,7 @@ public class VerifyIdentityActivity extends PassphraseRequiredActionBarActivity } private void setRecipientText(Recipient recipient) { - description.setText(Html.fromHtml(String.format(getActivity().getString(R.string.verify_display_fragment__if_you_wish_to_verify_the_security_of_your_end_to_end_encryption_with_s), recipient.getDisplayName(getContext())))); + description.setText(Html.fromHtml(String.format(getActivity().getString(R.string.verify_display_fragment__if_you_wish_to_verify_the_security_of_your_end_to_end_encryption_with_s), recipient.toShortString(getContext())))); description.setMovementMethod(LinkMovementMethod.getInstance()); } diff --git a/src/org/thoughtcrime/securesms/WebRtcCallActivity.java b/src/org/thoughtcrime/securesms/WebRtcCallActivity.java index 8760195b27..3d43b58029 100644 --- a/src/org/thoughtcrime/securesms/WebRtcCallActivity.java +++ b/src/org/thoughtcrime/securesms/WebRtcCallActivity.java @@ -172,7 +172,7 @@ public class WebRtcCallActivity extends Activity { Permissions.with(this) .request(Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA) .ifNecessary() - .withRationaleDialog(getString(R.string.WebRtcCallActivity_to_answer_the_call_from_s_give_signal_access_to_your_microphone, event.getRecipient().getDisplayName(this)), + .withRationaleDialog(getString(R.string.WebRtcCallActivity_to_answer_the_call_from_s_give_signal_access_to_your_microphone, event.getRecipient().toShortString(this)), R.drawable.ic_mic_solid_24, R.drawable.ic_videocam_white_48dp) .withPermanentDenialDialog(getString(R.string.WebRtcCallActivity_signal_requires_microphone_and_camera_permissions_in_order_to_make_or_receive_calls)) .onAllGranted(() -> { diff --git a/src/org/thoughtcrime/securesms/components/FromTextView.java b/src/org/thoughtcrime/securesms/components/FromTextView.java index 47f31f1bd5..94e1519f68 100644 --- a/src/org/thoughtcrime/securesms/components/FromTextView.java +++ b/src/org/thoughtcrime/securesms/components/FromTextView.java @@ -19,6 +19,7 @@ import android.util.AttributeSet; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.ResUtil; import org.thoughtcrime.securesms.util.spans.CenterAlignedRelativeSizeSpan; @@ -43,7 +44,7 @@ public class FromTextView extends EmojiTextView { } public void setText(Recipient recipient, boolean read, @Nullable String suffix) { - String fromString = recipient.getDisplayName(getContext()); + String fromString = recipient.toShortString(getContext()); int typeface; @@ -62,6 +63,19 @@ public class FromTextView extends EmojiTextView { if (recipient.isLocalNumber()) { builder.append(getContext().getString(R.string.note_to_self)); + } else if (!FeatureFlags.PROFILE_DISPLAY && recipient.getName(getContext()) == null && !TextUtils.isEmpty(recipient.getProfileName())) { + SpannableString profileName = new SpannableString(" (~" + recipient.getProfileName() + ") "); + profileName.setSpan(new CenterAlignedRelativeSizeSpan(0.75f), 0, profileName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + profileName.setSpan(new TypefaceSpan("sans-serif-light"), 0, profileName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + profileName.setSpan(new ForegroundColorSpan(ResUtil.getColor(getContext(), R.attr.conversation_list_item_subject_color)), 0, profileName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + if (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL){ + builder.append(profileName); + builder.append(fromSpan); + } else { + builder.append(fromSpan); + builder.append(profileName); + } } else { builder.append(fromSpan); } diff --git a/src/org/thoughtcrime/securesms/components/QuoteView.java b/src/org/thoughtcrime/securesms/components/QuoteView.java index 63b6e2e602..13dae6b9df 100644 --- a/src/org/thoughtcrime/securesms/components/QuoteView.java +++ b/src/org/thoughtcrime/securesms/components/QuoteView.java @@ -190,7 +190,7 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver { boolean outgoing = messageType != MESSAGE_TYPE_INCOMING; authorView.setText(author.isLocalNumber() ? getContext().getString(R.string.QuoteView_you) - : author.getDisplayName(getContext())); + : author.toShortString(getContext())); // We use the raw color resource because Android 4.x was struggling with tints here quoteBarView.setImageResource(author.getColor().toQuoteBarColorResource(getContext(), outgoing)); diff --git a/src/org/thoughtcrime/securesms/components/reminder/InviteReminder.java b/src/org/thoughtcrime/securesms/components/reminder/InviteReminder.java index 37e022be2d..e19739f11b 100644 --- a/src/org/thoughtcrime/securesms/components/reminder/InviteReminder.java +++ b/src/org/thoughtcrime/securesms/components/reminder/InviteReminder.java @@ -19,7 +19,7 @@ public class InviteReminder extends Reminder { final @NonNull Recipient recipient) { super(context.getString(R.string.reminder_header_invite_title), - context.getString(R.string.reminder_header_invite_text, recipient.getDisplayName(context))); + context.getString(R.string.reminder_header_invite_text, recipient.toShortString(context))); setDismissListener(v -> SignalExecutors.BOUNDED.execute(() -> { DatabaseFactory.getRecipientDatabase(context).setSeenInviteReminder(recipient.getId(), true); diff --git a/src/org/thoughtcrime/securesms/components/webrtc/WebRtcCallScreen.java b/src/org/thoughtcrime/securesms/components/webrtc/WebRtcCallScreen.java index 8acc772428..3906ce9b11 100644 --- a/src/org/thoughtcrime/securesms/components/webrtc/WebRtcCallScreen.java +++ b/src/org/thoughtcrime/securesms/components/webrtc/WebRtcCallScreen.java @@ -45,6 +45,7 @@ import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientForeverObserver; import org.thoughtcrime.securesms.ringrtc.CameraState; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.VerifySpan; import org.thoughtcrime.securesms.util.ViewUtil; import org.webrtc.SurfaceViewRenderer; @@ -124,7 +125,7 @@ public class WebRtcCallScreen extends FrameLayout implements RecipientForeverObs } public void setUntrustedIdentity(Recipient personInfo, IdentityKey untrustedIdentity) { - String name = recipient.get().getDisplayName(getContext()); + String name = recipient.get().toShortString(getContext()); String introduction = String.format(getContext().getString(R.string.WebRtcCallScreen_new_safety_numbers), name, name); SpannableString spannableString = new SpannableString(introduction + " " + getContext().getString(R.string.WebRtcCallScreen_you_may_wish_to_verify_this_contact)); @@ -305,13 +306,23 @@ public class WebRtcCallScreen extends FrameLayout implements RecipientForeverObs .diskCacheStrategy(DiskCacheStrategy.ALL) .into(this.photo); - this.name.setText(recipient.getDisplayName(getContext())); + if (FeatureFlags.PROFILE_DISPLAY) { + this.name.setText(recipient.getDisplayName(getContext())); - if (recipient.getE164().isPresent()) { - this.phoneNumber.setText(recipient.requireE164()); - this.phoneNumber.setVisibility(View.VISIBLE); + if (recipient.getE164().isPresent()) { + this.phoneNumber.setText(recipient.requireE164()); + this.phoneNumber.setVisibility(View.VISIBLE); + } else { + this.phoneNumber.setVisibility(View.GONE); + } } else { - this.phoneNumber.setVisibility(View.GONE); + this.name.setText(recipient.getName(getContext())); + + if (recipient.getName(getContext()) == null && !TextUtils.isEmpty(recipient.getProfileName())) { + this.phoneNumber.setText(recipient.requireE164() + " (~" + recipient.getProfileName() + ")"); + } else { + this.phoneNumber.setText(recipient.requireE164()); + } } } diff --git a/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java b/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java index 19a1306236..174864d028 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java +++ b/src/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java @@ -182,7 +182,7 @@ public class ContactsCursorLoader extends CursorLoader { ThreadRecord threadRecord; while ((threadRecord = reader.getNext()) != null) { recentConversations.addRow(new Object[] { threadRecord.getRecipient().getId().serialize(), - threadRecord.getRecipient().getDisplayName(getContext()), + threadRecord.getRecipient().toShortString(getContext()), threadRecord.getRecipient().requireStringId(), ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, "", diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 04359e6381..45b51fbe6e 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -2806,7 +2806,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity String[] unverifiedNames = new String[unverifiedIdentities.size()]; for (int i=0;i r.getDisplayName(getContext())) + .map(r -> r.toShortString(getContext())) .collect(Collectors.joining(", "))); this.subtitle.setVisibility(View.VISIBLE); diff --git a/src/org/thoughtcrime/securesms/database/model/MessageRecord.java b/src/org/thoughtcrime/securesms/database/model/MessageRecord.java index 5509211c9f..025c792af9 100644 --- a/src/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/src/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -96,32 +96,32 @@ public abstract class MessageRecord extends DisplayRecord { } else if (isGroupQuit() && isOutgoing()) { return new SpannableString(context.getString(R.string.MessageRecord_left_group)); } else if (isGroupQuit()) { - return new SpannableString(context.getString(R.string.ConversationItem_group_action_left, getIndividualRecipient().getDisplayName(context))); + return new SpannableString(context.getString(R.string.ConversationItem_group_action_left, getIndividualRecipient().toShortString(context))); } else if (isIncomingCall()) { - return new SpannableString(context.getString(R.string.MessageRecord_s_called_you, getIndividualRecipient().getDisplayName(context))); + return new SpannableString(context.getString(R.string.MessageRecord_s_called_you, getIndividualRecipient().toShortString(context))); } else if (isOutgoingCall()) { return new SpannableString(context.getString(R.string.MessageRecord_you_called)); } else if (isMissedCall()) { return new SpannableString(context.getString(R.string.MessageRecord_missed_call)); } else if (isJoined()) { - return new SpannableString(context.getString(R.string.MessageRecord_s_joined_signal, getIndividualRecipient().getDisplayName(context))); + return new SpannableString(context.getString(R.string.MessageRecord_s_joined_signal, getIndividualRecipient().toShortString(context))); } else if (isExpirationTimerUpdate()) { int seconds = (int)(getExpiresIn() / 1000); if (seconds <= 0) { return isOutgoing() ? new SpannableString(context.getString(R.string.MessageRecord_you_disabled_disappearing_messages)) - : new SpannableString(context.getString(R.string.MessageRecord_s_disabled_disappearing_messages, getIndividualRecipient().getDisplayName(context))); + : new SpannableString(context.getString(R.string.MessageRecord_s_disabled_disappearing_messages, getIndividualRecipient().toShortString(context))); } String time = ExpirationUtil.getExpirationDisplayValue(context, seconds); return isOutgoing() ? new SpannableString(context.getString(R.string.MessageRecord_you_set_disappearing_message_time_to_s, time)) - : new SpannableString(context.getString(R.string.MessageRecord_s_set_disappearing_message_time_to_s, getIndividualRecipient().getDisplayName(context), time)); + : new SpannableString(context.getString(R.string.MessageRecord_s_set_disappearing_message_time_to_s, getIndividualRecipient().toShortString(context), time)); } else if (isIdentityUpdate()) { - return new SpannableString(context.getString(R.string.MessageRecord_your_safety_number_with_s_has_changed, getIndividualRecipient().getDisplayName(context))); + return new SpannableString(context.getString(R.string.MessageRecord_your_safety_number_with_s_has_changed, getIndividualRecipient().toShortString(context))); } else if (isIdentityVerified()) { - if (isOutgoing()) return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified, getIndividualRecipient().getDisplayName(context))); - else return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified_from_another_device, getIndividualRecipient().getDisplayName(context))); + if (isOutgoing()) return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified, getIndividualRecipient().toShortString(context))); + else return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified_from_another_device, getIndividualRecipient().toShortString(context))); } else if (isIdentityDefault()) { - if (isOutgoing()) return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified, getIndividualRecipient().getDisplayName(context))); - else return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified_from_another_device, getIndividualRecipient().getDisplayName(context))); + if (isOutgoing()) return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified, getIndividualRecipient().toShortString(context))); + else return new SpannableString(context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified_from_another_device, getIndividualRecipient().toShortString(context))); } return new SpannableString(getBody()); diff --git a/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java index 181051fdfe..2a79ff7f86 100644 --- a/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java +++ b/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java @@ -83,7 +83,7 @@ public class SmsMessageRecord extends MessageRecord { } else if (isEndSession() && isOutgoing()) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset)); } else if (isEndSession()) { - return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset_s, getIndividualRecipient().getDisplayName(context))); + return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset_s, getIndividualRecipient().toShortString(context))); } else if (SmsDatabase.Types.isUnsupportedMessageType(type)) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_this_message_could_not_be_processed_because_it_was_sent_from_a_newer_version)); } else if (SmsDatabase.Types.isInvalidMessageType(type)) { diff --git a/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java index 0331712fda..b586dc31de 100644 --- a/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java +++ b/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java @@ -101,7 +101,7 @@ public class ThreadRecord extends DisplayRecord { } else if (SmsDatabase.Types.isMissedCall(type)) { return emphasisAdded(context.getString(org.thoughtcrime.securesms.R.string.ThreadRecord_missed_call)); } else if (SmsDatabase.Types.isJoinedType(type)) { - return emphasisAdded(context.getString(R.string.ThreadRecord_s_is_on_signal, getRecipient().getDisplayName(context))); + return emphasisAdded(context.getString(R.string.ThreadRecord_s_is_on_signal, getRecipient().toShortString(context))); } else if (SmsDatabase.Types.isExpirationTimerUpdate(type)) { int seconds = (int)(getExpiresIn() / 1000); if (seconds <= 0) { @@ -111,7 +111,7 @@ public class ThreadRecord extends DisplayRecord { return emphasisAdded(context.getString(R.string.ThreadRecord_disappearing_message_time_updated_to_s, time)); } else if (SmsDatabase.Types.isIdentityUpdate(type)) { if (getRecipient().isGroup()) return emphasisAdded(context.getString(R.string.ThreadRecord_safety_number_changed)); - else return emphasisAdded(context.getString(R.string.ThreadRecord_your_safety_number_with_s_has_changed, getRecipient().getDisplayName(context))); + else return emphasisAdded(context.getString(R.string.ThreadRecord_your_safety_number_with_s_has_changed, getRecipient().toShortString(context))); } else if (SmsDatabase.Types.isIdentityVerified(type)) { return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_verified)); } else if (SmsDatabase.Types.isIdentityDefault(type)) { diff --git a/src/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java b/src/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java index 6353a41715..909253ad1b 100644 --- a/src/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java +++ b/src/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java @@ -39,7 +39,7 @@ public abstract class AbstractNotificationBuilder extends NotificationCompat.Bui protected CharSequence getStyledMessage(@NonNull Recipient recipient, @Nullable CharSequence message) { SpannableStringBuilder builder = new SpannableStringBuilder(); - builder.append(Util.getBoldedString(recipient.getDisplayName(context))); + builder.append(Util.getBoldedString(recipient.toShortString(context))); builder.append(": "); builder.append(message == null ? "" : message); diff --git a/src/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java b/src/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java index 5050a5b875..b2894b804a 100644 --- a/src/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java +++ b/src/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java @@ -47,7 +47,7 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu public void setMostRecentSender(Recipient recipient) { if (privacy.isDisplayContact()) { setContentText(context.getString(R.string.MessageNotifier_most_recent_from_s, - recipient.getDisplayName(context))); + recipient.toShortString(context))); } if (recipient.getNotificationChannel() != null) { @@ -67,7 +67,7 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu if (privacy.isDisplayMessage()) { messageBodies.add(getStyledMessage(sender, body)); } else if (privacy.isDisplayContact()) { - messageBodies.add(Util.getBoldedString(sender.getDisplayName(context))); + messageBodies.add(Util.getBoldedString(sender.toShortString(context))); } if (privacy.isDisplayContact() && sender.getContactUri() != null) { diff --git a/src/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java b/src/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java index 7622677c0c..e66aa0ac85 100644 --- a/src/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java +++ b/src/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java @@ -66,7 +66,7 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil setChannelId(channelId != null ? channelId : NotificationChannels.getMessagesChannel(context)); if (privacy.isDisplayContact()) { - setContentTitle(recipient.getDisplayName(context)); + setContentTitle(recipient.toShortString(context)); if (recipient.getContactUri() != null) { addPerson(recipient.getContactUri().toString()); @@ -111,7 +111,7 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); if (privacy.isDisplayContact() && threadRecipients.isGroup()) { - stringBuilder.append(Util.getBoldedString(individualRecipient.getDisplayName(context) + ": ")); + stringBuilder.append(Util.getBoldedString(individualRecipient.toShortString(context) + ": ")); } if (privacy.isDisplayMessage()) { @@ -203,7 +203,7 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); if (privacy.isDisplayContact() && threadRecipient.isGroup()) { - stringBuilder.append(Util.getBoldedString(individualRecipient.getDisplayName(context) + ": ")); + stringBuilder.append(Util.getBoldedString(individualRecipient.toShortString(context) + ": ")); } if (privacy.isDisplayMessage()) { diff --git a/src/org/thoughtcrime/securesms/preferences/BlockedContactListItem.java b/src/org/thoughtcrime/securesms/preferences/BlockedContactListItem.java index 9ff069209f..e3c9abccba 100644 --- a/src/org/thoughtcrime/securesms/preferences/BlockedContactListItem.java +++ b/src/org/thoughtcrime/securesms/preferences/BlockedContactListItem.java @@ -63,7 +63,7 @@ public class BlockedContactListItem extends RelativeLayout implements RecipientF final TextView nameView = this.nameView; contactPhotoImage.setAvatar(glideRequests, recipient, false); - nameView.setText(recipient.getDisplayName(getContext())); + nameView.setText(recipient.toShortString(getContext())); } public Recipient getRecipient() { diff --git a/src/org/thoughtcrime/securesms/profiles/UnknownSenderView.java b/src/org/thoughtcrime/securesms/profiles/UnknownSenderView.java index 6aaa831bdd..f8747669c9 100644 --- a/src/org/thoughtcrime/securesms/profiles/UnknownSenderView.java +++ b/src/org/thoughtcrime/securesms/profiles/UnknownSenderView.java @@ -40,7 +40,7 @@ public class UnknownSenderView extends FrameLayout { new AlertDialog.Builder(getContext()) .setIconAttribute(R.attr.dialog_alert_icon) - .setTitle(getContext().getString(R.string.UnknownSenderView_block_s, recipient.getDisplayName(context))) + .setTitle(getContext().getString(R.string.UnknownSenderView_block_s, recipient.toShortString(context))) .setMessage(R.string.UnknownSenderView_blocked_contacts_will_no_longer_be_able_to_send_you_messages_or_call_you) .setPositiveButton(R.string.UnknownSenderView_block, (dialog, which) -> { new AsyncTask() { @@ -66,7 +66,7 @@ public class UnknownSenderView extends FrameLayout { new AlertDialog.Builder(getContext()) .setIconAttribute(R.attr.dialog_info_icon) - .setTitle(getContext().getString(R.string.UnknownSenderView_share_profile_with_s, recipient.getDisplayName(context))) + .setTitle(getContext().getString(R.string.UnknownSenderView_share_profile_with_s, recipient.toShortString(context))) .setMessage(R.string.UnknownSenderView_the_easiest_way_to_share_your_profile_information_is_to_add_the_sender_to_your_contacts) .setPositiveButton(R.string.UnknownSenderView_share_profile, (dialog, which) -> { new AsyncTask() { diff --git a/src/org/thoughtcrime/securesms/recipients/Recipient.java b/src/org/thoughtcrime/securesms/recipients/Recipient.java index 2a2010f22c..99df239d36 100644 --- a/src/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/src/org/thoughtcrime/securesms/recipients/Recipient.java @@ -300,7 +300,7 @@ public class Recipient { List names = new LinkedList<>(); for (Recipient recipient : participants) { - names.add(recipient.getDisplayName(context)); + names.add(recipient.toShortString(context)); } return Util.join(names, ", "); @@ -309,6 +309,15 @@ public class Recipient { return this.name; } + /** + * TODO [UUID] -- Remove once UUID Feature Flag is removed + */ + @Deprecated + public @NonNull String toShortString(@NonNull Context context) { + if (FeatureFlags.PROFILE_DISPLAY) return getDisplayName(context); + else return Optional.fromNullable(getName(context)).or(getSmsAddress()).or(""); + } + public @NonNull String getDisplayName(@NonNull Context context) { return Util.getFirstNonEmpty(getName(context), getProfileName(), @@ -425,10 +434,6 @@ public class Recipient { } } - public @Nullable String getCustomLabel() { - return customLabel; - } - /** * @return A single string to represent the recipient, in order of precedence: * @@ -454,6 +459,11 @@ public class Recipient { return profileName; } + public @Nullable String getCustomLabel() { + if (FeatureFlags.PROFILE_DISPLAY) throw new AssertionError("This method should never be called if PROFILE_DISPLAY is enabled."); + return customLabel; + } + public @Nullable String getProfileAvatar() { return profileAvatar; } diff --git a/src/org/thoughtcrime/securesms/service/DirectShareService.java b/src/org/thoughtcrime/securesms/service/DirectShareService.java index 334c4e5855..054351d4d9 100644 --- a/src/org/thoughtcrime/securesms/service/DirectShareService.java +++ b/src/org/thoughtcrime/securesms/service/DirectShareService.java @@ -50,7 +50,7 @@ public class DirectShareService extends ChooserTargetService { while ((record = reader.getNext()) != null) { Recipient recipient = Recipient.resolved(record.getRecipient().getId()); - String name = recipient.getDisplayName(this); + String name = recipient.toShortString(this); Bitmap avatar; diff --git a/src/org/thoughtcrime/securesms/util/CommunicationActions.java b/src/org/thoughtcrime/securesms/util/CommunicationActions.java index cb04f5d9ce..007f4735fd 100644 --- a/src/org/thoughtcrime/securesms/util/CommunicationActions.java +++ b/src/org/thoughtcrime/securesms/util/CommunicationActions.java @@ -35,10 +35,10 @@ public class CommunicationActions { Permissions.with(activity) .request(Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA) .ifNecessary() - .withRationaleDialog(activity.getString(R.string.ConversationActivity_to_call_s_signal_needs_access_to_your_microphone_and_camera, recipient.getDisplayName(activity)), + .withRationaleDialog(activity.getString(R.string.ConversationActivity_to_call_s_signal_needs_access_to_your_microphone_and_camera, recipient.toShortString(activity)), R.drawable.ic_mic_solid_24, R.drawable.ic_videocam_white_48dp) - .withPermanentDenialDialog(activity.getString(R.string.ConversationActivity_signal_needs_the_microphone_and_camera_permissions_in_order_to_call_s, recipient.getDisplayName(activity))) + .withPermanentDenialDialog(activity.getString(R.string.ConversationActivity_signal_needs_the_microphone_and_camera_permissions_in_order_to_call_s, recipient.toShortString(activity))) .onAllGranted(() -> { Intent intent = new Intent(activity, WebRtcCallService.class); intent.setAction(WebRtcCallService.ACTION_OUTGOING_CALL); diff --git a/src/org/thoughtcrime/securesms/util/FeatureFlags.java b/src/org/thoughtcrime/securesms/util/FeatureFlags.java index fa9bbf71c8..c272ad933e 100644 --- a/src/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/src/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -13,4 +13,7 @@ public class FeatureFlags { /** Usernames. */ public static final boolean USERNAMES = false; + + /** New Profile Display */ + public static final boolean PROFILE_DISPLAY = UUIDS; } diff --git a/src/org/thoughtcrime/securesms/util/GroupUtil.java b/src/org/thoughtcrime/securesms/util/GroupUtil.java index c22f3e033a..678988a440 100644 --- a/src/org/thoughtcrime/securesms/util/GroupUtil.java +++ b/src/org/thoughtcrime/securesms/util/GroupUtil.java @@ -117,7 +117,7 @@ public class GroupUtil { public String toString(Recipient sender) { StringBuilder description = new StringBuilder(); - description.append(context.getString(R.string.MessageRecord_s_updated_group, sender.getDisplayName(context))); + description.append(context.getString(R.string.MessageRecord_s_updated_group, sender.toShortString(context))); if (groupContext == null) { return description.toString(); @@ -160,7 +160,7 @@ public class GroupUtil { String result = ""; for (int i=0;i