From 886bebb0884f2cdefb8dc79007fdaab2847dd3d9 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Thu, 20 Feb 2025 10:18:40 -0500 Subject: [PATCH] Update message request states for 1:1 and groups chats. --- .../v2/items/V2ConversationItemShapeTest.kt | 4 + .../test/InternalConversationTestFragment.kt | 4 + .../securesms/BindableConversationItem.java | 1 + .../ConversationSettingsFragment.kt | 36 ++++ .../securesms/components/settings/dsl.kt | 10 +- .../conversation/ConversationHeaderView.java | 77 ++++++-- .../conversation/ConversationTitleView.java | 14 +- .../conversation/v2/ConversationAdapterV2.kt | 91 +++++++--- .../conversation/v2/ConversationFragment.kt | 4 + .../conversation/v2/DisabledInputView.kt | 21 ++- .../v2/SafetyTipsBottomSheetDialog.kt | 1 + .../v2/UnverifiedProfileNameBottomSheet.kt | 165 ++++++++++++++++++ .../messagedetails/MessageDetailsFragment.kt | 4 + .../MessageRequestRepository.java | 10 +- .../messagerequests/MessageRequestState.kt | 9 + .../MessageRequestsBottomView.kt | 3 +- .../recipients/ui/about/AboutSheet.kt | 105 ++++++++--- .../thoughtcrime/securesms/util/SpanUtil.java | 24 ++- .../main/res/drawable-xxhdpi/safety_tip1.png | Bin 25316 -> 0 bytes .../main/res/drawable-xxhdpi/safety_tip2.png | Bin 11872 -> 0 bytes .../main/res/drawable-xxhdpi/safety_tip3.png | Bin 14408 -> 0 bytes .../main/res/drawable-xxhdpi/safety_tip4.png | Bin 17933 -> 0 bytes .../drawable/release_header_background.xml | 10 ++ app/src/main/res/drawable/safety_tip0.webp | Bin 0 -> 11198 bytes app/src/main/res/drawable/safety_tip1.webp | Bin 0 -> 10922 bytes app/src/main/res/drawable/safety_tip2.webp | Bin 0 -> 4786 bytes app/src/main/res/drawable/safety_tip3.webp | Bin 0 -> 7036 bytes app/src/main/res/drawable/safety_tip4.webp | Bin 0 -> 7660 bytes app/src/main/res/drawable/symbol_bell_20.xml | 10 ++ .../symbol_error_triangle_filled_16.xml | 10 ++ .../res/drawable/symbol_group_question_20.xml | 15 ++ .../res/drawable/symbol_group_question_55.xml | 30 ++++ .../main/res/drawable/symbol_official_20.xml | 24 +++ .../drawable/symbol_person_question_16.xml | 22 +++ .../drawable/symbol_person_question_24.xml | 22 +++ .../drawable/symbol_person_question_40.xml | 21 +++ .../res/layout/conversation_header_view.xml | 85 ++++++++- app/src/main/res/values/strings.xml | 56 +++++- 38 files changed, 799 insertions(+), 89 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/conversation/v2/UnverifiedProfileNameBottomSheet.kt delete mode 100644 app/src/main/res/drawable-xxhdpi/safety_tip1.png delete mode 100644 app/src/main/res/drawable-xxhdpi/safety_tip2.png delete mode 100644 app/src/main/res/drawable-xxhdpi/safety_tip3.png delete mode 100644 app/src/main/res/drawable-xxhdpi/safety_tip4.png create mode 100644 app/src/main/res/drawable/release_header_background.xml create mode 100644 app/src/main/res/drawable/safety_tip0.webp create mode 100644 app/src/main/res/drawable/safety_tip1.webp create mode 100644 app/src/main/res/drawable/safety_tip2.webp create mode 100644 app/src/main/res/drawable/safety_tip3.webp create mode 100644 app/src/main/res/drawable/safety_tip4.webp create mode 100644 app/src/main/res/drawable/symbol_bell_20.xml create mode 100644 app/src/main/res/drawable/symbol_error_triangle_filled_16.xml create mode 100644 app/src/main/res/drawable/symbol_group_question_20.xml create mode 100644 app/src/main/res/drawable/symbol_group_question_55.xml create mode 100644 app/src/main/res/drawable/symbol_official_20.xml create mode 100644 app/src/main/res/drawable/symbol_person_question_16.xml create mode 100644 app/src/main/res/drawable/symbol_person_question_24.xml create mode 100644 app/src/main/res/drawable/symbol_person_question_40.xml diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt index ec55e36f8f..7c211a6bc7 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt @@ -339,7 +339,11 @@ class V2ConversationItemShapeTest { override fun onMessageRequestAcceptOptionsClicked() = Unit override fun onItemDoubleClick(item: MultiselectPart) = Unit + override fun onPaymentTombstoneClicked() = Unit + override fun onDisplayMediaNoLongerAvailableSheet() = Unit + + override fun onShowUnverifiedProfileSheet(forGroup: Boolean) = Unit } } diff --git a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt index 25307917c8..86158fef32 100644 --- a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt +++ b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt @@ -327,5 +327,9 @@ class InternalConversationTestFragment : Fragment(R.layout.conversation_test_fra override fun onMessageRequestAcceptOptionsClicked() { Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show() } + + override fun onShowUnverifiedProfileSheet(forGroup: Boolean) { + Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show() + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java index 35010a86dc..e49dcc0ed9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java @@ -135,5 +135,6 @@ public interface BindableConversationItem extends Unbindable, GiphyMp4Playable, void onItemDoubleClick(MultiselectPart multiselectPart); void onPaymentTombstoneClicked(); void onDisplayMediaNoLongerAvailableSheet(); + void onShowUnverifiedProfileSheet(boolean forGroup); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt index 0642db83bb..75a18929e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt @@ -33,6 +33,7 @@ import org.signal.core.util.Result import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.addTo import org.signal.core.util.getParcelableArrayListExtraCompat +import org.signal.donations.InAppPaymentType import org.thoughtcrime.securesms.AvatarPreviewActivity import org.thoughtcrime.securesms.BlockUnblockDialog import org.thoughtcrime.securesms.InviteActivity @@ -52,6 +53,8 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.NO_TINT +import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity +import org.thoughtcrime.securesms.components.settings.app.subscription.donate.CheckoutFlowActivity import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.components.settings.conversation.preferences.AvatarPreference import org.thoughtcrime.securesms.components.settings.conversation.preferences.BioTextPreference @@ -492,6 +495,18 @@ class ConversationSettingsFragment : DSLSettingsFragment( dividerPref() } + if (state.recipient.isReleaseNotes) { + textPref( + icon = DSLSettingsIcon.from(R.drawable.symbol_official_20), + title = DSLSettingsText.from(R.string.ReleaseNotes__this_is_official_chat) + ) + textPref( + icon = DSLSettingsIcon.from(R.drawable.symbol_bell_20), + title = DSLSettingsText.from(R.string.ReleaseNotes__keep_up_to_date) + ) + dividerPref() + } + val summary = DSLSettingsText.from(formatDisappearingMessagesLifespan(state.disappearingMessagesLifespan)) val icon = if (state.disappearingMessagesLifespan <= 0 || state.recipient.isBlocked) { R.drawable.symbol_timer_slash_24 @@ -633,6 +648,27 @@ class ConversationSettingsFragment : DSLSettingsFragment( ) } + if (state.recipient.isReleaseNotes) { + dividerPref() + sectionHeaderPref(R.string.preferences__help) + + externalLinkPref( + icon = DSLSettingsIcon.from(R.drawable.symbol_help_24), + title = DSLSettingsText.from(R.string.HelpSettingsFragment__support_center), + linkId = R.string.support_center_url + ) + clickPref( + icon = DSLSettingsIcon.from(R.drawable.symbol_invite_24), + title = DSLSettingsText.from(R.string.HelpSettingsFragment__contact_us), + onClick = { startActivity(AppSettingsActivity.help(requireContext())) } + ) + clickPref( + icon = DSLSettingsIcon.from(R.drawable.symbol_heart_24), + title = DSLSettingsText.from(R.string.preferences__donate_to_signal), + onClick = { startActivity(CheckoutFlowActivity.createIntent(requireContext(), InAppPaymentType.ONE_TIME_DONATION)) } + ) + } + state.withRecipientSettingsState { recipientSettingsState -> if (state.recipient.badges.isNotEmpty() && !state.recipient.isSelf) { dividerPref() diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/dsl.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/dsl.kt index 8a3acd0dbb..94995ce5a7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/dsl.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/dsl.kt @@ -213,9 +213,10 @@ class DSLConfiguration { fun textPref( title: DSLSettingsText? = null, - summary: DSLSettingsText? = null + summary: DSLSettingsText? = null, + icon: DSLSettingsIcon? = null ) { - val preference = TextPreference(title, summary) + val preference = TextPreference(title, summary, icon) children.add(preference) } @@ -257,8 +258,9 @@ abstract class PreferenceModel>( class TextPreference( title: DSLSettingsText?, - summary: DSLSettingsText? -) : PreferenceModel(title = title, summary = summary) + summary: DSLSettingsText?, + icon: DSLSettingsIcon? = null +) : PreferenceModel(title = title, summary = summary, icon = icon) class LearnMoreTextPreference( override val title: DSLSettingsText?, diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java index 1c158eddb5..96bd93e17d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java @@ -5,12 +5,14 @@ import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.text.method.LinkMovementMethod; import android.util.AttributeSet; import android.view.View; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.core.view.ViewKt; @@ -92,25 +94,39 @@ public class ConversationHeaderView extends ConstraintLayout { return title.toString(); } - public void setAbout(@NonNull Recipient recipient) { - String about; - if (recipient.isReleaseNotes()) { - about = getContext().getString(R.string.ReleaseNotes__signal_release_notes_and_news); - } else { - about = recipient.getCombinedAboutAndEmoji(); - } - - binding.messageRequestAbout.setText(about); - binding.messageRequestAbout.setVisibility(TextUtils.isEmpty(about) ? GONE : VISIBLE); + public void showReleaseNoteHeader() { + binding.messageRequestInfo.setVisibility(View.GONE); + binding.releaseHeaderContainer.setVisibility(View.VISIBLE); + binding.releaseHeaderDescription1.setText(prependIcon(getContext().getString(R.string.ReleaseNotes__this_is_official_chat_period), R.drawable.symbol_official_20)); + binding.releaseHeaderDescription2.setText(prependIcon(getContext().getString(R.string.ReleaseNotes__keep_up_to_date_period), R.drawable.symbol_bell_20)); } - public void setSubtitle(@NonNull CharSequence subtitle, @DrawableRes int iconRes) { + public void setAbout(@NonNull Recipient recipient) { + String about = recipient.getCombinedAboutAndEmoji(); + binding.messageRequestAbout.setText(about); + binding.messageRequestAbout.setVisibility(TextUtils.isEmpty(about) || recipient.isReleaseNotes() ? GONE : VISIBLE); + } + + public void setSubtitle(@NonNull CharSequence subtitle, @DrawableRes int iconRes, @Nullable Runnable onClick) { if (TextUtils.isEmpty(subtitle)) { hideSubtitle(); return; } - binding.messageRequestSubtitle.setText(prependIcon(subtitle, iconRes)); + if (onClick != null) { + binding.messageRequestSubtitle.setMovementMethod(LinkMovementMethod.getInstance()); + CharSequence builder = SpanUtil.clickSubstring( + subtitle, + subtitle, + listener -> onClick.run(), + ContextCompat.getColor(getContext(), R.color.signal_colorOnSurface), + true + ); + binding.messageRequestSubtitle.setText(prependIcon(builder, iconRes)); + } else { + binding.messageRequestSubtitle.setText(prependIcon(subtitle, iconRes)); + } + binding.messageRequestSubtitle.setVisibility(View.VISIBLE); } @@ -134,6 +150,32 @@ public class ConversationHeaderView extends ConstraintLayout { binding.messageRequestButton.setVisibility(View.VISIBLE); } + public void showWarningSubtitle() { + binding.messageRequestReviewCarefully.setVisibility(View.VISIBLE); + } + + public void hideWarningSubtitle() { + binding.messageRequestReviewCarefully.setVisibility(View.GONE); + } + + public void setUnverifiedNameSubtitle(@DrawableRes int iconRes, @StringRes int clickableRes, boolean forGroup, @Nullable Runnable onClick) { + binding.messageRequestProfileNameUnverified.setVisibility(View.VISIBLE); + binding.messageRequestProfileNameUnverified.setMovementMethod(LinkMovementMethod.getInstance()); + CharSequence builder = SpanUtil.clickSubstring( + getContext(), + R.string.ConversationFragment_profile_names_not_verified, + clickableRes, + listener -> onClick.run(), + true, + R.color.signal_colorOnSurface + ); + binding.messageRequestProfileNameUnverified.setText(prependIcon(builder, iconRes, forGroup)); + } + + public void hideUnverifiedNameSubtitle() { + binding.messageRequestProfileNameUnverified.setVisibility(View.GONE); + } + public void showBackgroundBubble(boolean enabled) { if (enabled) { setBackgroundResource(R.drawable.wallpaper_bubble_background_18); @@ -176,6 +218,9 @@ public class ConversationHeaderView extends ConstraintLayout { binding.messageRequestInfoOutline.setVisibility(View.VISIBLE); binding.messageRequestDivider.setVisibility(View.INVISIBLE); } + } else if (ViewKt.isVisible(binding.releaseHeaderContainer)) { + binding.messageRequestInfoOutline.setVisibility(View.GONE); + binding.messageRequestDivider.setVisibility(View.INVISIBLE); } else { binding.messageRequestInfoOutline.setVisibility(View.GONE); binding.messageRequestDivider.setVisibility(View.GONE); @@ -183,9 +228,15 @@ public class ConversationHeaderView extends ConstraintLayout { } private @NonNull CharSequence prependIcon(@NonNull CharSequence input, @DrawableRes int iconRes) { + return prependIcon(input, iconRes, false); + } + + + private @NonNull CharSequence prependIcon(@NonNull CharSequence input, @DrawableRes int iconRes, boolean useIntrinsicWidth) { Drawable drawable = ContextCompat.getDrawable(getContext(), iconRes); Preconditions.checkNotNull(drawable); - drawable.setBounds(0, 0, (int) DimensionUnit.SP.toPixels(20), (int) DimensionUnit.SP.toPixels(20)); + int width = useIntrinsicWidth ? drawable.getIntrinsicWidth() : (int) DimensionUnit.SP.toPixels(20); + drawable.setBounds(0, 0, width, (int) DimensionUnit.SP.toPixels(20)); drawable.setColorFilter(ContextCompat.getColor(getContext(), R.color.signal_colorOnSurface), PorterDuff.Mode.SRC_ATOP); return new SpannableStringBuilder() diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java index e04a2a9698..ed9cd0a899 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java @@ -186,9 +186,10 @@ public class ConversationTitleView extends ConstraintLayout { } private void setRecipientTitle(@NonNull Recipient recipient) { - if (recipient.isGroup()) setGroupRecipientTitle(recipient); - else if (recipient.isSelf()) setSelfTitle(); - else setIndividualRecipientTitle(recipient); + if (recipient.isGroup()) setGroupRecipientTitle(recipient); + else if (recipient.isSelf()) setSelfTitle(); + else if (recipient.isReleaseNotes()) setReleaseNotesTitle(recipient); + else setIndividualRecipientTitle(recipient); } private void setGroupRecipientTitle(@NonNull Recipient recipient) { @@ -200,6 +201,13 @@ public class ConversationTitleView extends ConstraintLayout { updateSubtitleVisibility(); } + private void setReleaseNotesTitle(@NonNull Recipient recipient) { + final String displayName = recipient.getDisplayName(getContext()); + this.title.setText(displayName); + this.subtitle.setText(R.string.ReleaseNotes__official_only_chat); + updateSubtitleVisibility(); + } + private void setIndividualRecipientTitle(@NonNull Recipient recipient) { final String displayName = recipient.getDisplayName(getContext()); this.title.setText(displayName); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt index 7c015deea4..63d31e4a77 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2.kt @@ -5,13 +5,13 @@ package org.thoughtcrime.securesms.conversation.v2 +import android.content.Context import android.text.TextUtils import android.view.GestureDetector import android.view.GestureDetector.SimpleOnGestureListener import android.view.MotionEvent import android.view.View import android.view.ViewGroup -import androidx.core.text.HtmlCompat import androidx.core.view.children import androidx.fragment.app.DialogFragment import androidx.lifecycle.LifecycleOwner @@ -23,6 +23,7 @@ import org.signal.core.util.toOptional import org.thoughtcrime.securesms.BindableConversationItem import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.Unbindable +import org.thoughtcrime.securesms.components.settings.conversation.ConversationSettingsActivity import org.thoughtcrime.securesms.conversation.ConversationAdapter.ItemClickListener import org.thoughtcrime.securesms.conversation.ConversationAdapterBridge import org.thoughtcrime.securesms.conversation.ConversationHeaderView @@ -78,6 +79,7 @@ class ConversationAdapterV2( companion object { private val TAG = Log.tag(ConversationAdapterV2::class.java) + private val MIN_GROUPS_THRESHOLD = 2 } private val _selected = hashSetOf() @@ -539,41 +541,66 @@ class ConversationAdapterV2( val title: String = conversationBanner.setTitle(recipient) { displayDialogFragment(AboutSheet.create(recipient)) } + + if (recipient.isReleaseNotes) { + conversationBanner.showReleaseNoteHeader() + } + conversationBanner.setAbout(recipient) if (recipient.isGroup) { + if (!groupInfo.hasExistingContacts) { + conversationBanner.setUnverifiedNameSubtitle(R.drawable.symbol_group_question_20, R.string.ConversationFragment_group_names, true) { + clickListener.onShowUnverifiedProfileSheet(true) + } + } else { + conversationBanner.hideUnverifiedNameSubtitle() + } + if (groupInfo.pendingMemberCount > 0) { val invited = context.resources.getQuantityString(R.plurals.MessageRequestProfileView_invited, groupInfo.pendingMemberCount, groupInfo.pendingMemberCount) - conversationBanner.setSubtitle(context.resources.getQuantityString(R.plurals.MessageRequestProfileView_members_and_invited, groupInfo.fullMemberCount, groupInfo.fullMemberCount, invited), R.drawable.symbol_group_light_20) + conversationBanner.setSubtitle(context.resources.getQuantityString(R.plurals.MessageRequestProfileView_members_and_invited, groupInfo.fullMemberCount, groupInfo.fullMemberCount, invited), R.drawable.symbol_group_light_20) { goToGroupSettings(recipient) } } else if (groupInfo.fullMemberCount > 0) { - conversationBanner.setSubtitle(context.resources.getQuantityString(R.plurals.MessageRequestProfileView_members, groupInfo.fullMemberCount, groupInfo.fullMemberCount), R.drawable.symbol_group_light_20) + conversationBanner.setSubtitle(context.resources.getQuantityString(R.plurals.MessageRequestProfileView_members, groupInfo.fullMemberCount, groupInfo.fullMemberCount), R.drawable.symbol_group_light_20) { goToGroupSettings(recipient) } } else { conversationBanner.hideSubtitle() } } else if (isSelf) { - conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation), R.drawable.symbol_note_light_24) + conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation), R.drawable.symbol_note_light_24, null) } else { + if (recipient.nickname.isEmpty && !recipient.isSystemContact) { + conversationBanner.setUnverifiedNameSubtitle(R.drawable.symbol_person_question_16, R.string.ConversationFragment_profile_names, false) { + clickListener.onShowUnverifiedProfileSheet(false) + } + } else { + conversationBanner.hideUnverifiedNameSubtitle() + } + val subtitle: String? = recipient.takeIf { it.shouldShowE164 }?.e164?.map { e164: String? -> PhoneNumberFormatter.prettyPrint(e164!!) }?.orElse(null) if (subtitle == null || subtitle == title) { conversationBanner.hideSubtitle() } else { - conversationBanner.setSubtitle(subtitle, R.drawable.symbol_phone_light_20) + conversationBanner.setSubtitle(subtitle, R.drawable.symbol_phone_light_20, null) } } conversationBanner.hideButton() - if (messageRequestState?.isAccepted == false && sharedGroups.isEmpty() && !isSelf && !recipient.isGroup) { - conversationBanner.setDescription(context.getString(R.string.ConversationUpdateItem_no_groups_in_common_review_requests_carefully), R.drawable.symbol_error_circle_24) + if (messageRequestState?.isAccepted == false && !isSelf && !recipient.isGroup) { + if (sharedGroups.size < MIN_GROUPS_THRESHOLD) { + conversationBanner.showWarningSubtitle() + } conversationBanner.setButton(context.getString(R.string.ConversationFragment_safety_tips)) { clickListener.onShowSafetyTips(false) } - } else if (messageRequestState?.isAccepted == false && recipient.isGroup && !groupInfo.hasExistingContacts) { - conversationBanner.setDescription(context.getString(R.string.ConversationUpdateItem_no_contacts_in_this_group_review_requests_carefully), R.drawable.symbol_error_circle_24) + conversationBanner.setDescription(getDescription(context, sharedGroups), R.drawable.symbol_group_light_20) + } else if (messageRequestState?.isAccepted == false && recipient.isGroup) { + conversationBanner.showWarningSubtitle() conversationBanner.setButton(context.getString(R.string.ConversationFragment_safety_tips)) { clickListener.onShowSafetyTips(true) } - } else if (sharedGroups.isEmpty() || isSelf) { + } else if ((recipient.isGroup && sharedGroups.isEmpty()) || isSelf) { + conversationBanner.hideWarningSubtitle() if (TextUtils.isEmpty(groupInfo.description)) { conversationBanner.setLinkifyDescription(false) conversationBanner.hideDescription() @@ -592,23 +619,37 @@ class ConversationAdapterV2( } } } else { - val description: String = when (sharedGroups.size) { - 1 -> context.getString(R.string.MessageRequestProfileView_member_of_one_group, sharedGroups[0]) - 2 -> context.getString(R.string.MessageRequestProfileView_member_of_two_groups, sharedGroups[0], sharedGroups[1]) - 3 -> context.getString(R.string.MessageRequestProfileView_member_of_many_groups, sharedGroups[0], sharedGroups[1], sharedGroups[2]) - else -> { - val others: Int = sharedGroups.size - 2 - context.getString( - R.string.MessageRequestProfileView_member_of_many_groups, - sharedGroups[0], - sharedGroups[1], - context.resources.getQuantityString(R.plurals.MessageRequestProfileView_member_of_d_additional_groups, others, others) - ) - } - } - conversationBanner.setDescription(HtmlCompat.fromHtml(description, 0), R.drawable.symbol_group_light_20) + conversationBanner.hideWarningSubtitle() + conversationBanner.setDescription(getDescription(context, sharedGroups), R.drawable.symbol_group_light_20) } } + + private fun getDescription(context: Context, sharedGroups: List): String { + return when (sharedGroups.size) { + 0 -> context.getString(R.string.ConversationUpdateItem_no_groups_in_common_review_requests_carefully) + 1 -> context.getString(R.string.MessageRequestProfileView_member_of_one_group, sharedGroups[0]) + 2 -> context.getString(R.string.MessageRequestProfileView_member_of_two_groups, sharedGroups[0], sharedGroups[1]) + 3 -> context.getString(R.string.MessageRequestProfileView_member_of_many_groups, sharedGroups[0], sharedGroups[1], sharedGroups[2]) + else -> { + val others: Int = sharedGroups.size - 2 + context.getString( + R.string.MessageRequestProfileView_member_of_many_groups, + sharedGroups[0], + sharedGroups[1], + context.resources.getQuantityString(R.plurals.MessageRequestProfileView_member_of_d_additional_groups, others, others) + ) + } + } + } + + private fun goToGroupSettings(recipient: Recipient) { + val intent = ConversationSettingsActivity.forGroup(getContext(), recipient.requireGroupId()) + val bundle = ConversationSettingsActivity.createTransitionBundle( + getContext(), + conversationBanner.getViewById(R.id.message_request_avatar) + ) + getContext().startActivity(intent, bundle) + } } private inner class OnScrollStateChangedListener : RecyclerView.OnScrollListener() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index a850a82309..93e938a41c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -2952,6 +2952,10 @@ class ConversationFragment : ConversationDialogs.displaySafetyNumberLearnMoreDialog(this@ConversationFragment, recipient) } + override fun onShowUnverifiedProfileSheet(forGroup: Boolean) { + UnverifiedProfileNameBottomSheet.show(parentFragmentManager, forGroup) + } + override fun onJoinGroupCallClicked() { val activity = activity ?: return val recipient = viewModel.recipientSnapshot ?: return diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt index f5304be60d..2759bc17b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt @@ -15,6 +15,7 @@ import android.widget.FrameLayout import android.widget.TextView import androidx.core.content.ContextCompat import com.google.android.material.button.MaterialButton +import com.google.android.material.dialog.MaterialAlertDialogBuilder import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.messagerequests.MessageRequestState import org.thoughtcrime.securesms.messagerequests.MessageRequestsBottomView @@ -82,7 +83,25 @@ class DisabledInputView @JvmOverloads constructor( setMessageRequestData(recipient, messageRequestState) setWallpaperEnabled(recipient.hasWallpaper) - setAcceptOnClickListener { listener?.onAcceptMessageRequestClicked() } + setAcceptOnClickListener { + if (messageRequestState.isFewConnectionsIndividual) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.MessageRequestBottomView_accept_request) + .setMessage(R.string.MessageRequestBottomView_review_requests_carefully) + .setPositiveButton(R.string.MessageRequestBottomView_accept) { _, _ -> listener?.onAcceptMessageRequestClicked() } + .setNegativeButton(android.R.string.cancel, null) + .show() + } else if (messageRequestState.isGroupV2Add) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.MessageRequestBottomView_join_group) + .setMessage(R.string.MessageRequestBottomView_review_requests_carefully_groups) + .setPositiveButton(R.string.MessageRequestBottomView_join) { _, _ -> listener?.onAcceptMessageRequestClicked() } + .setNegativeButton(android.R.string.cancel, null) + .show() + } else { + listener?.onAcceptMessageRequestClicked() + } + } setDeleteOnClickListener { listener?.onDeleteClicked() } setBlockOnClickListener { listener?.onBlockClicked() } setUnblockOnClickListener { listener?.onUnblockClicked() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/SafetyTipsBottomSheetDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/SafetyTipsBottomSheetDialog.kt index c3f92041d4..7895373d58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/SafetyTipsBottomSheetDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/SafetyTipsBottomSheetDialog.kt @@ -88,6 +88,7 @@ data class SafetyTipData( ) private val tips = listOf( + SafetyTipData(heroImage = R.drawable.safety_tip0, titleText = R.string.SafetyTips_tip0_title, messageText = R.string.SafetyTips_tip0_message), SafetyTipData(heroImage = R.drawable.safety_tip1, titleText = R.string.SafetyTips_tip1_title, messageText = R.string.SafetyTips_tip1_message), SafetyTipData(heroImage = R.drawable.safety_tip2, titleText = R.string.SafetyTips_tip2_title, messageText = R.string.SafetyTips_tip2_message), SafetyTipData(heroImage = R.drawable.safety_tip3, titleText = R.string.SafetyTips_tip3_title, messageText = R.string.SafetyTips_tip3_message), diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/UnverifiedProfileNameBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/UnverifiedProfileNameBottomSheet.kt new file mode 100644 index 0000000000..1f2550316c --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/UnverifiedProfileNameBottomSheet.kt @@ -0,0 +1,165 @@ +package org.thoughtcrime.securesms.conversation.v2 + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.dp +import androidx.core.os.bundleOf +import androidx.fragment.app.FragmentManager +import org.signal.core.ui.BottomSheets +import org.signal.core.ui.Previews +import org.signal.core.ui.SignalPreview +import org.signal.core.ui.horizontalGutters +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment +import org.thoughtcrime.securesms.util.BottomSheetUtil + +/** + * Bottom sheet shown in message request state that explains that profile names are unverified + */ +class UnverifiedProfileNameBottomSheet : ComposeBottomSheetDialogFragment() { + + override val peekHeightPercentage: Float = 0.75f + + companion object { + private const val FOR_GROUP_ARG = "for_group" + + @JvmStatic + fun show(fragmentManager: FragmentManager, forGroup: Boolean) { + UnverifiedProfileNameBottomSheet() + .apply { + arguments = bundleOf( + FOR_GROUP_ARG to forGroup + ) + } + .show(fragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG) + } + } + + @Composable + override fun SheetContent() { + ProfileNameSheet( + forGroup = requireArguments().getBoolean(FOR_GROUP_ARG, false) + ) + } +} + +@Composable +private fun ProfileNameSheet(forGroup: Boolean = true) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxWidth() + .horizontalGutters() + ) { + BottomSheets.Handle() + + val (imageVector, placeholder, text) = + if (forGroup) { + Triple( + R.drawable.symbol_group_question_55, + stringResource(R.string.ConversationFragment_group_names), + stringResource(id = R.string.ProfileNameBottomSheet__group_names_on_signal, stringResource(R.string.ConversationFragment_group_names)) + ) + } else { + Triple( + R.drawable.symbol_person_question_40, + stringResource(R.string.ConversationFragment_profile_names), + stringResource(id = R.string.ProfileNameBottomSheet__profile_names_on_signal, stringResource(R.string.ConversationFragment_profile_names)) + ) + } + + Icon( + imageVector = ImageVector.vectorResource(imageVector), + contentDescription = null, + modifier = Modifier + .padding(top = 38.dp, bottom = 24.dp) + .size(height = 56.dp, width = 72.dp) + ) + + val annotatedText = remember { + buildAnnotatedString { + val start = text.indexOf(placeholder) + withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { + append(text.substring(start, start + placeholder.length)) + } + append(text.substring(start + placeholder.length)) + } + } + + Text( + text = annotatedText, + modifier = Modifier.padding(bottom = 20.dp) + ) + + if (forGroup) { + InfoRow(stringResource(R.string.ProfileNameBottomSheet__be_cautious_of_groups)) + InfoRow(stringResource(R.string.ProfileNameBottomSheet__profile_names_in_groups)) + } else { + InfoRow(stringResource(R.string.ProfileNameBottomSheet__profile_names_arent_verified)) + InfoRow(stringResource(R.string.ProfileNameBottomSheet__be_cautious_of_accounts)) + } + + InfoRow(stringResource(R.string.ProfileNameBottomSheet__dont_share_personal)) + + Spacer(Modifier.size(55.dp)) + } +} + +@Composable +fun InfoRow(text: String) { + Row( + modifier = Modifier + .height(IntrinsicSize.Min) + .fillMaxWidth() + .padding(start = 16.dp, bottom = 12.dp) + ) { + Box( + modifier = Modifier + .width(4.dp) + .padding(vertical = 5.dp) + .fillMaxHeight() + .clip(RoundedCornerShape(10.dp)) + .background(color = MaterialTheme.colorScheme.outline.copy(.4f)) + ) + + Text( + text = text, + modifier = Modifier.padding(start = 12.dp), + style = MaterialTheme.typography.bodyLarge + ) + } +} + +@SignalPreview +@Composable +private fun ProfileNameSheetPreview() { + Previews.BottomSheetPreview { + ProfileNameSheet() + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.kt index f9b0cad872..018d347630 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.kt @@ -386,6 +386,10 @@ class MessageDetailsFragment : FullScreenDialogFragment(), MessageDetailsAdapter Log.w(TAG, "Not yet implemented!", Exception()) } + override fun onShowUnverifiedProfileSheet(forGroup: Boolean) { + Log.w(TAG, "Not yet implemented!", Exception()) + } + interface Callback { fun onMessageDetailsFragmentDismissed() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 10cfc35dd6..27a9ea2474 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -47,7 +47,8 @@ import kotlin.Unit; public final class MessageRequestRepository { - private static final String TAG = Log.tag(MessageRequestRepository.class); + private static final String TAG = Log.tag(MessageRequestRepository.class); + private static final int MIN_GROUPS_THRESHOLD = 2; private final Context context; private final Executor executor; @@ -68,7 +69,7 @@ public final class MessageRequestRepository { if (groupRecord.get().isV2Group()) { List recipients = Recipient.resolvedList(groupRecord.get().getMembers()); for (Recipient recipient : recipients) { - if ((recipient.isProfileSharing() || recipient.getHasGroupsInCommon()) && !recipient.isSelf()) { + if ((recipient.isProfileSharing() || recipient.isSystemContact()) && !recipient.isSelf()) { groupHasExistingContacts = true; break; } @@ -139,8 +140,11 @@ public final class MessageRequestRepository { } else { Recipient.HiddenState hiddenState = RecipientUtil.getRecipientHiddenState(threadId); boolean reportedAsSpam = reportedAsSpam(threadId); + List sharedGroups = SignalDatabase.groups().getPushGroupNamesContainingMember(recipient.getId()); - if (hiddenState == Recipient.HiddenState.NOT_HIDDEN) { + if (hiddenState == Recipient.HiddenState.NOT_HIDDEN && sharedGroups.size() < MIN_GROUPS_THRESHOLD) { + return new MessageRequestState(MessageRequestState.State.INDIVIDUAL_FEW_CONNECTIONS, reportedAsSpam); + } else if (hiddenState == Recipient.HiddenState.NOT_HIDDEN) { return new MessageRequestState(MessageRequestState.State.INDIVIDUAL, reportedAsSpam); } else if (hiddenState == Recipient.HiddenState.HIDDEN) { return new MessageRequestState(MessageRequestState.State.NONE_HIDDEN, reportedAsSpam); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestState.kt b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestState.kt index ce620d5865..c5ddd33ad4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestState.kt @@ -19,6 +19,12 @@ data class MessageRequestState @JvmOverloads constructor(val state: State = Stat val isBlocked: Boolean get() = state == State.INDIVIDUAL_BLOCKED || state == State.BLOCKED_GROUP + val isFewConnectionsIndividual: Boolean + get() = state == State.INDIVIDUAL_FEW_CONNECTIONS + + val isGroupV2Add: Boolean + get() = state == State.GROUP_V2_ADD + /** * An enum representing the possible message request states a user can be in. */ @@ -50,6 +56,9 @@ data class MessageRequestState @JvmOverloads constructor(val state: State = Stat /** A user is blocked */ INDIVIDUAL_BLOCKED, + /** A message request and secondary confirmation is needed for an individual with less than 2 common groups */ + INDIVIDUAL_FEW_CONNECTIONS, + /** A message request is needed for an individual since they have been hidden */ INDIVIDUAL_HIDDEN } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.kt b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.kt index 96dc8f9b6c..33dbc77db3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.kt @@ -90,7 +90,8 @@ class MessageRequestsBottomView @JvmOverloads constructor(context: Context, attr accept.setText(R.string.MessageRequestBottomView_accept) } - MessageRequestState.State.INDIVIDUAL -> { + MessageRequestState.State.INDIVIDUAL, + MessageRequestState.State.INDIVIDUAL_FEW_CONNECTIONS -> { question.text = HtmlCompat.fromHtml( context.getString( R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept, diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt index ca096a7b70..51d1177bf1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt @@ -28,11 +28,11 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.res.painterResource +import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -40,6 +40,7 @@ import androidx.compose.ui.viewinterop.AndroidView import androidx.core.os.bundleOf import androidx.core.widget.TextViewCompat import org.signal.core.ui.BottomSheets +import org.signal.core.ui.SignalPreview import org.signal.core.ui.theme.SignalTheme import org.signal.core.util.getParcelableCompat import org.signal.core.util.isNotNullOrBlank @@ -48,6 +49,7 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.avatar.AvatarImage import org.thoughtcrime.securesms.components.emoji.EmojiTextView import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment +import org.thoughtcrime.securesms.conversation.v2.UnverifiedProfileNameBottomSheet import org.thoughtcrime.securesms.nicknames.ViewNoteSheet import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter import org.thoughtcrime.securesms.recipients.Recipient @@ -112,7 +114,8 @@ class AboutSheet : ComposeBottomSheetDialogFragment() { ), onClickSignalConnections = this::openSignalConnectionsSheet, onAvatarClicked = this::openProfilePhotoViewer, - onNoteClicked = this::openNoteSheet + onNoteClicked = this::openNoteSheet, + onUnverifiedProfileClicked = this::openUnverifiedProfileSheet ) } } @@ -130,6 +133,11 @@ class AboutSheet : ComposeBottomSheetDialogFragment() { dismiss() ViewNoteSheet.create(recipientId).show(parentFragmentManager, null) } + + private fun openUnverifiedProfileSheet() { + dismiss() + UnverifiedProfileNameBottomSheet.show(fragmentManager = parentFragmentManager, forGroup = false) + } } private data class AboutModel( @@ -153,7 +161,8 @@ private fun Content( model: AboutModel, onClickSignalConnections: () -> Unit, onAvatarClicked: () -> Unit, - onNoteClicked: () -> Unit + onNoteClicked: () -> Unit, + onUnverifiedProfileClicked: () -> Unit = {} ) { Box( contentAlignment = Alignment.Center, @@ -190,7 +199,7 @@ private fun Content( ) AboutRow( - startIcon = painterResource(R.drawable.symbol_person_24), + startIcon = ImageVector.vectorResource(R.drawable.symbol_person_24), text = if (!model.isSelf && model.displayName.isNotBlank() && model.profileName.isNotBlank() && model.displayName != model.profileName) { stringResource(id = R.string.AboutSheet__user_set_display_name_and_profile_name, model.displayName, model.profileName) } else { @@ -203,7 +212,7 @@ private fun Content( val textColor = LocalContentColor.current AboutRow( - startIcon = painterResource(R.drawable.symbol_edit_24), + startIcon = ImageVector.vectorResource(R.drawable.symbol_edit_24), text = { Row { AndroidView(factory = ::EmojiTextView) { @@ -219,9 +228,19 @@ private fun Content( ) } + if (!model.isSelf && !model.profileSharing && !model.systemContact) { + AboutRow( + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_person_question_24), + text = stringResource(id = R.string.AboutSheet__profile_names_are_not_verified), + endIcon = ImageVector.vectorResource(id = R.drawable.symbol_chevron_right_compact_bold_16), + modifier = Modifier.align(alignment = Alignment.Start), + onClick = onUnverifiedProfileClicked + ) + } + if (!model.isSelf && model.verified) { AboutRow( - startIcon = painterResource(id = R.drawable.symbol_safety_number_24), + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_safety_number_24), text = stringResource(id = R.string.AboutSheet__verified), modifier = Modifier.align(alignment = Alignment.Start), onClick = onClickSignalConnections @@ -231,25 +250,30 @@ private fun Content( if (!model.isSelf) { if (model.profileSharing || model.systemContact) { AboutRow( - startIcon = painterResource(id = R.drawable.symbol_connections_24), + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_connections_24), text = stringResource(id = R.string.AboutSheet__signal_connection), - endIcon = painterResource(id = R.drawable.symbol_chevron_right_compact_bold_16), + endIcon = ImageVector.vectorResource(id = R.drawable.symbol_chevron_right_compact_bold_16), modifier = Modifier.align(alignment = Alignment.Start), onClick = onClickSignalConnections ) + } else if (model.groupsInCommon == 0) { + AboutRow( + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_chat_badge_24), + text = stringResource(id = R.string.AboutSheet__pending_message_request), + modifier = Modifier.align(alignment = Alignment.Start) + ) } else { AboutRow( - startIcon = painterResource(id = R.drawable.symbol_chat_x), + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_chat_x), text = stringResource(id = R.string.AboutSheet__no_direct_message, model.shortName), - modifier = Modifier.align(alignment = Alignment.Start), - onClick = onClickSignalConnections + modifier = Modifier.align(alignment = Alignment.Start) ) } } if (!model.isSelf && model.systemContact) { AboutRow( - startIcon = painterResource(id = R.drawable.symbol_person_circle_24), + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_person_circle_24), text = stringResource(id = R.string.AboutSheet__s_is_in_your_system_contacts, model.shortName), modifier = Modifier.fillMaxWidth() ) @@ -257,7 +281,7 @@ private fun Content( if (model.formattedE164.isNotNullOrBlank()) { AboutRow( - startIcon = painterResource(R.drawable.symbol_phone_24), + startIcon = ImageVector.vectorResource(R.drawable.symbol_phone_24), text = model.formattedE164, modifier = Modifier.fillMaxWidth() ) @@ -271,9 +295,9 @@ private fun Content( } val groupsInCommonIcon = if (!model.profileSharing && model.groupsInCommon == 0) { - painterResource(R.drawable.symbol_error_circle_24) + ImageVector.vectorResource(R.drawable.symbol_error_circle_24) } else { - painterResource(R.drawable.symbol_group_24) + ImageVector.vectorResource(R.drawable.symbol_group_24) } AboutRow( @@ -285,10 +309,10 @@ private fun Content( if (model.note.isNotBlank()) { AboutRow( - startIcon = painterResource(id = R.drawable.symbol_note_light_24), + startIcon = ImageVector.vectorResource(id = R.drawable.symbol_note_light_24), text = model.note, modifier = Modifier.fillMaxWidth(), - endIcon = painterResource(id = R.drawable.symbol_chevron_right_compact_bold_16), + endIcon = ImageVector.vectorResource(id = R.drawable.symbol_chevron_right_compact_bold_16), onClick = onNoteClicked ) } @@ -299,10 +323,10 @@ private fun Content( @Composable private fun AboutRow( - startIcon: Painter, + startIcon: ImageVector, text: String, modifier: Modifier = Modifier, - endIcon: Painter? = null, + endIcon: ImageVector? = null, onClick: (() -> Unit)? = null ) { AboutRow( @@ -324,10 +348,10 @@ private fun AboutRow( @Composable private fun AboutRow( - startIcon: Painter, + startIcon: ImageVector, text: @Composable RowScope.() -> Unit, modifier: Modifier = Modifier, - endIcon: Painter? = null, + endIcon: ImageVector? = null, onClick: (() -> Unit)? = null ) { val padHorizontal = if (onClick != null) 19.dp else 32.dp @@ -350,7 +374,7 @@ private fun AboutRow( } ) { Icon( - painter = startIcon, + imageVector = startIcon, contentDescription = null, modifier = Modifier .padding(end = 16.dp) @@ -361,7 +385,7 @@ private fun AboutRow( if (endIcon != null) { Icon( - painter = endIcon, + imageVector = endIcon, contentDescription = null, tint = MaterialTheme.colorScheme.outline ) @@ -549,6 +573,35 @@ private fun ContentPreviewNotAConnection() { } } +@SignalPreview +@Composable +private fun ContentPreviewNotAConnectionNoGroups() { + SignalTheme { + Surface { + Content( + model = AboutModel( + isSelf = false, + displayName = "Peter Parker", + shortName = "Peter", + profileName = "Peter Parker", + about = "(spoilers) dead", + verified = false, + hasAvatar = true, + recipientForAvatar = Recipient.UNKNOWN, + formattedE164 = null, + profileSharing = false, + systemContact = false, + groupsInCommon = 0, + note = "" + ), + onClickSignalConnections = {}, + onAvatarClicked = {}, + onNoteClicked = {} + ) + } + } +} + @Preview(name = "Light Theme", group = "about row", uiMode = Configuration.UI_MODE_NIGHT_NO) @Preview(name = "Dark Theme", group = "about row", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable @@ -556,9 +609,9 @@ private fun AboutRowPreview() { SignalTheme { Surface { AboutRow( - startIcon = painterResource(R.drawable.symbol_person_24), + startIcon = ImageVector.vectorResource(R.drawable.symbol_person_24), text = "Maya Johnson", - endIcon = painterResource(id = R.drawable.symbol_chevron_right_compact_bold_16) + endIcon = ImageVector.vectorResource(id = R.drawable.symbol_chevron_right_compact_bold_16) ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java index 99a7931b35..b915df0e66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java @@ -186,6 +186,10 @@ public final class SpanUtil { return spannable; } + public static Spannable clickSubstring(@NonNull Context context, @StringRes int mainString, @StringRes int clickableString, @NonNull View.OnClickListener clickListener) { + return clickSubstring(context, mainString, clickableString, clickListener, false, R.color.signal_accent_primary); + } + /** * Takes two resources: * - one resource that has a single string placeholder @@ -198,8 +202,10 @@ public final class SpanUtil { * * -> This is a clickable string. * (where "clickable" is blue and will trigger the provided click listener when clicked) + * + * Can optionally configure the color & if it's underlined. Default is blue with no underline. */ - public static Spannable clickSubstring(@NonNull Context context, @StringRes int mainString, @StringRes int clickableString, @NonNull View.OnClickListener clickListener) { + public static Spannable clickSubstring(@NonNull Context context, @StringRes int mainString, @StringRes int clickableString, @NonNull View.OnClickListener clickListener, boolean shouldUnderline, int linkColor) { String main = context.getString(mainString, SPAN_PLACE_HOLDER); String clickable = context.getString(clickableString); @@ -217,8 +223,8 @@ public final class SpanUtil { @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); - ds.setUnderlineText(false); - ds.setColor(context.getResources().getColor(R.color.signal_accent_primary)); + ds.setUnderlineText(shouldUnderline); + ds.setColor(context.getResources().getColor(linkColor)); } }, start, start + clickable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); @@ -238,13 +244,21 @@ public final class SpanUtil { public static CharSequence clickSubstring(@NonNull CharSequence fullString, @NonNull CharSequence substring, @NonNull View.OnClickListener clickListener, - @ColorInt int linkColor) + @ColorInt int linkColor) { + return clickSubstring(fullString, substring, clickListener, linkColor, false); + } + + public static CharSequence clickSubstring(@NonNull CharSequence fullString, + @NonNull CharSequence substring, + @NonNull View.OnClickListener clickListener, + @ColorInt int linkColor, + boolean shouldUnderline) { ClickableSpan clickable = new ClickableSpan() { @Override public void updateDrawState(@NonNull TextPaint ds) { super.updateDrawState(ds); - ds.setUnderlineText(false); + ds.setUnderlineText(shouldUnderline); ds.setColor(linkColor); } diff --git a/app/src/main/res/drawable-xxhdpi/safety_tip1.png b/app/src/main/res/drawable-xxhdpi/safety_tip1.png deleted file mode 100644 index adfaf2d763fc51c79f6a9f0302029c3a4a5b33e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25316 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 SXBXB00000e-4qS2H5+-1Gbm{Q#{oS5xf6_ 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 diff --git a/app/src/main/res/drawable-xxhdpi/safety_tip4.png b/app/src/main/res/drawable-xxhdpi/safety_tip4.png deleted file mode 100644 index 2a0e16c1bef416e6e74050afae0e8d9ff16f76e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17933 zcmcG#g;N~77cPt!ic4{K_ZD}5@wUj~won`vcXx-yU0Nv4V#VEdky6}saVhR_`}=0T z|KQ$CGMQwOOmgz%M9z~KEe$2?_vG&p5D>6cl;uAoARs{z5D>l4k^kkyUFXaHi%@K2 z)MXG58j>)d%~AiQ5#2s3$s*KFQXc+GV7Mp)+z=4xg#Q;16*BnD{uNl(Qv0f)x~Ik(`6 z)dj?ExBD>X`+g;y^e~08%LaGv_-bh#zI%9KufpJ{Kry$txqp1+_my)K5wShi{JEC+ zzJlm&ROGE+=xy@T+XgQrRPSw>_ic>(t(W_%1plRx^6fXzTL=4jF3xK!%4SFH>)~PH#_*Z_j;i58vNjH`XK3-*$ywC;oeT z$auR{c{>(=T`+jvus+DdSCo)g9;}{)sK1`1oX&c@?zmfWBcG(ads|X?*$;awLVv4y z|JIIEXo)^nCi9$z`Zhw)nJyNngnlsbE#WKrW*;EeL%2R#B;A1{%};-<`NztiKR^6= zorTeJV?0_5BX$Fj-)2Z1|6`6dXPQlByleXe8|WR#@X!^d>GP)Ef=Z2`qYu@jzip64 zI;!{?OLUi67HW~t^}21FnD2ZNsz@?>d%c=14~&+i{bgj@Mn}KbH?mvZuoD)wnVDPh zqqIRnielYM?%&i0x_{RAf`Ijb5S^455fvF9hwPb&{^jHAtJb&9l_d+^>DYO~+ZUQ+hPdPO&4Q`flo-~2Cn*#%O5l{NDhH7JjIP*VYGsZjfnQ)yB zPaQrq89bE#2VP#qpyFPY_G)v}{q6o_^j9!@rmMSWXOOoys9%uyd7vZ;Sxu@$_&L`i z)XJJVk2-AAmp8!Q*G!RgBq`)Cn40$V~X59Zi>eyPc6UyPFU5 z%X|)S9Q5BUsw#8s7l9h+M;v%lcWt(fSx6^eZcf>c@mG18|DJ2{xxXg6_J(r_G4sUr zD}>+B@oJTElGrG60lFP!;h{0_^M<7%|8c5TEgp$AW*FBDhiiVX%wu-W(^|`bE8xG; zRDb38Zutdb za`=(3Y7PqJO`9_Lu?;b`7{>Tb3owsar*DX^$zv)XjxVadpXCu*lJ6o{{9{4G5D;8m z6KJICHm%9Xi~?sKf;Z90HMC3$TAHP6`cSFP38%LxfB(tmZy8OZ9!)Cl=bi%k0E|3R z*kK2$sB183D&CZs>tNY>=;4FEmo^Dbs*A&|N5@YL=Dy}!EA(t;U469OWBIsNVGiTW zAMXcKloHl1V~qb%=OkC6s|B=-f1zP0$LgRCI>VvALAIe1(-eo z-Ax76qPhdvrq9?MsbX{=|I>V=T#?)`YB~KX-~>e0`MK>3ExdQNmBN7kpts#e$F<6U z-wV)0f0_Q3j{TKwQo(kTvZFd>k_5z5Yvi?GF14SRWO?PvK~XWxJAx4w_%5);zb{EO zxiewkLGNR2SEp zM(clGcgjeOwKQ|lyLXaI*d@qw{FbDtYyuDp-I*_aFJ7g`){cLMo-_yO#I(2ol3Q%! z@?O<;hacv}u}Bq4FXsytfjehM*k{|$&K~-EC4M0ey~mNP3)@%=nTDmIZew8znjMdr;=Slo82@tD1pOBM%X=mA>g8Nm; z@RNrzBUUP0xb2O;!j#CNw_><4uX5O9Rsg;#(3AEZl&3h8!BB?$Wsjv<0IoA^K}b^( z+2W7a#?RtUTEeUVlrp89ukvqTK2M>k2(*3B(sazWt}168jQC-M2eeTtOu=~wIm+bi zCs6$1oXrlC9QW@Dbt=y_UpBT_GD_SmgXfm+vFY+cR zInYVecWTBeT2%w{7!-4{%n8RPkY1GWxWX}uR?Wa|t5Gs;azsfi0bE6^`e1btPJvhe z;1@`lU(1OX%GK~+KRR>#uQX+OxNph-uu($~^+W^s^b>sl+-s(v} z=1Wv9Ct)a;#0<3(NDj;kw_q)O7Z#c)izv4*n1qWr_ZP%kDxi@MD0BfPSP?4zsie#T z4PLG*U=yM}rgMyv@IfusmH5n}k$I8yxTEf6k=(54u6APp8Ko>Pr{|=OqurFui-?P z;D@)<8f;RK9RASDyg8ta5h`p7z(^(3%bDp4=@oZUT4@BoJAo)vu?H5T=NTdFu)-oBHnE|+r!f@>KalgP-y@P zmao#V?e;C2+EXy3lOZ|{b_Z~#dxF*S@#ME+=3EK zz1OpBp7Pw+3t?u^>Y#&??-RBD93B$hW?dPc-ss$okkyIx^-Iy}fM1 zl_LDzaOU(%>4$rPNfyk)&CH>{@Ye?)-d|p8J;ZlYVPh7ctDZ<5 z-VzJS3Dw$c=5*dq*|!1nldbf;Vu-^7=DiROrucr|Ddx1XtCxX+ftRbf-j1OA<1Kg~ zZ`Kpqso;3}_dt5ZhWrD<9|47J5du7to>&dRJ|?2pSo?0rP@9MDm8)U8nGB)&0_PmT zu<=`tFP$1XXYm}T&_cgzgIYH>>$KqcXrNcaayE-k{t{qyL3)RL5TbCi_6cG=0*6LgA4}A1O21V-Gr?a>}l8S z--z--Pc;^m0-?KNau3a>QcCh#PTyxF|7j0yj<+gm#-1J6B;>*b zK+lg08#v+gEm*+TI`gswOWiv*2BB2(HDu69zcxQFSIG>fW6=E9alxH>N-5Qu0rY#l zgi!At9G9Vtx9s2ey;j$4oO_C{ne<3KY&yO@Un)xNyxH#;3h}H-kT)y&@JPHSuQ!XT z+4Zr;T(;o+F}XW*(wBs(HpdF3EEzvW$|Pp*mPy_C(m}h2XI_<59;OVzJ>tW4FE6*> zJ9=zUuu5w4y0+UXp@w4Kc56wAKzIniMBu^IFWYkaW3EQ|PJz(roo|2KUsUjm%q{g+inYy7}-(po9TU`>V8%OAaI#l0^!4199#d}hj#z80;SBZpWX^gOadt#qf84-1`GB7)=Ygm#g7n*>p+-G?@v+>{G7B8Bw6HdDi=sj$J{=Ohz0CFf2K z<%b$Can6p&A3ZrKu0YWGYI77w{N=l^qKz^e#|d3dvXofA+e5NklfyFl#|dtm}mJO;CV0yx>_RFN!GPu$$^``@vTsA$PAiU1_R-gdFr+dG_qOor>nrb75qqV=QKabNI$~=#FQ5f!g*fuX}@fy0wjwir)I= z5M|ZR6!j&LO$!BS;|DU3zMtPQ^t{&Vp7EW=>Y2yN!h&gCT}R)-@v-Mr(zuDFDRI>z zN5=Ia`z=R$JO2c1vS}jm{RS$OK~;lvU~4ES&peCYU#>f$S6%rv=e?^mGfq2*vx8(wB7!)3g5P`r$iyw1A=ff&$ zSE;3WIm?`&wfrvpnJC%N%G_T@fAJ39hpW$rN51y(L22#wJYJ3}10VNAQL~GTfM>Gt5LX;!NpVhU zqBw+2+2XD>MaInkq<_%Cnh{gGdtMZLP8*4CFpZNyFy!51!?Z7zoqfvh(BYj3@GqC1 zfe!OmdU}tx>ByNRRz#tZQ2;Jvs}OqRV9ba!1)C1H2IO@PaPUkpA*kz>hQN-eGd#2V zb}ShY?&>t15iUU5(&Q}pmvw)^C(1Q2Ai&Yc*!Y6Am5LTq8|@Ye&k$w(*VluOt*%WS z!SFEp%845(HQB3nRj-GB;Sc&rW)apKVfZPH)p<>x!x9*3jZ?VrrU|n=)7%B?H8WPP z(Ul@r3JF>$?KJYC$8}7={E1h4f9!4;u2;hb+SQ!@M#~dy)As@FmyO(cr1j~ zk?z0)CfQPIM-$wU~=oxut1oQi-2 zl9JWS;IitwqrVBqhX@`|SbWf59@toDvOWwf=t1DCIR-NZPqRa$I9HF3<(hu44s_tZ z7RV!Yq6Ern1^}!{s&SCH)*m>QAElYFXgoC>=YB={7}wR^$Sl3N%#e%cz1Qac+E9bQ zI>3*X4F4m8U(6{PDtqiwxY`3Px~2acRV=Nh^guTi4gP?Yb7Ky+iF!it4;vGHaSvG2 zPO7Rg#s`ZHlsIJEd6|*n?5r@c%0--+gYP){uPW8Nd+xm&d4P-Md?Ur2bmN1jjA^=Y zR?6TTzdMrlb(f;fKm&n^+)B_+J-RkG9uqU`j__iL9}4t?_PWwL&dz23uVAKnl6FZ7 zsz#dVSmnjjMyF^bPR*kbSJJ>YnAC!KW{&EM^d*aI+tRht(t!+En~ID)UL#Yk?W-&+ z4aSs-kpHnub(ufgkmzrwb+ge$hT;W{i3~D~;?qE9;Ct;`5Xl6k_=?w= zVPLT15mh+H;=m}gc9?_FoS0uGL~|6ipgUJhcYaczD4a=>@wc+gVNO)y<=`tmon z3|0*RFw!E%erwuJnpyk#s|drZj-HdMmt())TINh z%IMI30yN{u3x!|^k**K7U9)nTkp_782)f8&pXQ6FPb?8gsC{xt>KTQVl(UBiRmX?! za~-6!L8Y_(;`h#IS-*r`D46l?jy?+J_9S0|?FPHqjb`?cdm(=h7h>rBD)^ZmT)cByjt8&zo1)7^K|^)VVgrcjO>H0dK< z=X~2~Gwre2Sp3Uw?(P6l%V?7Z%RKJGENVQO&O<;LB}OHcs~Hw^ccm)Xnm&3zCKT`2n{kDC^R7bBwePF_pI3Pt5<;Q3rBrOF!h3*Usuziy&^` zj^(5O02_>oM@Nx1w>w>8r`@QJHS;&t@GYur+e+V#eDZEUFvNLY88;@+$Nee3XVl&l znP+@BZ#X?2$Yn0vx{eGMXniOuyAn#ccF|ltDTk^Lx;3(|X6n>{lYZ9*fBqR~7_gh5 z58r+@Z=1WN>b8lJ7heuYXna!^@RIszo8yQb8GnrXQ*RGzSe< zv1Oy&s3R#0@t3wf2jHdNZ4GnvOn&r=8Th{8uK1UPv)@#c<&7+HINzl z*@*@6lRp{W#H}<-@ruTFMVWijrF|cjQ8Z z9>!O;{fM#pr|3iIkJ5EKGzh>Rr7c@wpmIJfzD40kPMYG34aBk6N>mhn=C)NNYxwd( z6*Ln`2j}s9yzN{fB)+QOm5g#~y<9&@UPqu^kkb$-LJhy|Wlt0zs`_R4mT$Q2Ju!88JsTj;*3@ACG*nA z=1t>h-pk>K7|G%L#8Ix?tO zBLy|l{#>cbgRT+CvH*5~qD>hdROgDAOgC^saEc;fXJ<#TRJ$tMT0&~HJffm4ZR%YR zH%<)XNf;cSc2^rh9}eN?B7xC99lIw^Y`PM9rxt(Ndyc3E(AcNehtQWm?Hu^Cnt`S% z0(J@Q)Wg_N5_F*7veI)z{M;|FWf3~`(&!%ihTUMtk}V}izwuvYv|kbW^D%hb|2|Ji zYA=S>zP3Tw)>+K0rB;Wjg-G&XItjqE2j?m4*v?s7I3ou{vT{^yrBUBxB@PjxF7TAx zCN$w=2(`;o&I#)dL`M+sn40m3r%94wqlGNB6{Cw_F;N@DYqyd}r+s(_Wow^O=s!gq zi+*CnkQK>5=NkT|$CKRUqB*3(0iB-^ogC!J@FtKv$8RCY&XPSQ(S9XQjRtcVAJ~}1 zo?z}%DRL6$Vx3-&D*Ey(YVD;-3ab*OG_LHMsKFFtg9ozEPcJJX`EsM_s!phx{!=XL zY)Q(Gu^=%vbR*?sN!i>OZys@#O8sGZre=n0LsiUxbsjun;H(2^)Xs?9Rwdc^;e6u}V`DaP~L(vG26 z=a@mFUPG0;s(V`dGyb})k~`2#jBFFwYZ>klpAw^k01~%$zHZ26`9hpLK;(XydBfSGNd7Sjj2yaN;iho@dqo2aM$*0vp#%d1DUFYhCVQe;KrgEJZ7Z^@ z`1%W$F7-(@Y3;-|FbLJr5 zKlTJ+@fL%;P{PJyUYG;7bul9gDU>{lUus=MdM?B@-X#Vp(uSIwyRKT?_wOcI;yYaG znrcoS$vi}5`@EwK$Mc9lYGy~9XI5D3fBK2Y8I9%sG#_S^CA_%k{(CKS!Jt_(GPO z)CS|mSYbeL0}S(%r3}mg8OMt)Go}s4f!l-?0t5_0m?QE=&`MOLa8xYGVyJXtPZZ_( zDV^t=-{rtq((cL_Zctut;mV3%qOD2ZnBs%FiB~ja0Ab4tTwG1tft4=ePIl=NcY;Ef zT|B;o8EAV5m^vr@Kf3-fdc9*pi z7%Gk_ooJc*Q(YG@JR+ntny;1e*68I?=g0wAO=VijXbewIPR$6k!d#O*hXt^; zt`Pe!$zmCv41VX+uWv}N>0nw~eDIB?0lg6Gqx&34bqcsi?!|MKPt+Rk(~W3wCMhZj z{Lz$p+Z+ET=z5amc&bCPKtqs>ohaov`{`r6RA|6})bo$6)#?E68yd{Lm#AaaMt^R9 z6)dcu!gq?c&1#^f_`#^*!r{yQKQAm^(QV&_(PZbPikWjbi%(*h3-doe))Kc&;E|nxgRos?yFRBTi>w0l7(iI5T9>!d?9aD*IVtt z6=t@@7v%@sUZw;0M?K0MiYPf!9M~S_qL!_Vx2{W@oN0`!b~bbyFI2+F>Z=(WdG?qJ zTYBq-@T`6eC2s-It?;s@GtPRvFU!SH*4`7nU2eY;6cAT&88IH$ri?SXT1*c72{*w< zeWx(?@5Kp~?V%YFWW1#G@+v%il%*Q-@PXipL~h*ot;o@uHUr+Ml9hq{hjj76CT8g` zKcer&6fX6u-zBV6Ol=CeFNs>B?QR>flypjswHehTKAH~-BFOwq*E6y_ZVX)ZQ~k_j zPaB4qdi8r;S!u=YN8x0I#Vs$6Fh#>j%d<3(A!pcd@E(mqc6RRh$tSX5bq0|?1)(nD zk)!n%L+|6ne>!BT zp53C%03>FfqatB@T;3rcXYLrYXljQQ>op&62z@Mx)@U}(vPZTppQc*7g0|FguCFzg zCcN-8${n`cKjo>sq?mb+qOSAHVoQo#%C7qfg^)M2R<}dD==Wn&g<7j^g$?a$7Xb|@c@-;dh3tU`Y`jU=I^Ujbye`fBcL_r##y^89Kk50@L3HKQx2gp)B@}3WDfid>k z^SsFio}2YclGpR-=YPNb^{tNB@`~Z@X_9JwrK4X;A+BsVv%}1}35^{1z#O@y#r!Vr z7#6?7h3mElL`w{UwuzmyeHkgIm-9P%~pMq?`LQ#v?am9>@BL&$KJBVgd)?wz- zI-K1o*)_Og3Zd=CV%iwge75bc#|*RD+r{NVyZm8hQ)I&SNm_eWfOij8bXU;ONd)GY z83B!9k1yu7hMUz6e+J60BJ7$8q`4FA6*yxgDO*R&>TZ}bx&b)}vh$6!vy2(u^Y1yD zb2^(~1TnH$b$z%=3QmzzG7wI|6nZ~GSicM6$7-)vmekD2ePmLvOlZFs8XiHhgcmKX zp7`&rr+&}=7LUdo{{M3U;zPT->^WIS1}QD0$=nqgIpgW?%FN!Upjyi?u_Oi!u1G#KAVur37QWhI9y;b_NeAAf68@;hGXTp>7e#4N&~uV65*+xrB;-%)a;O)IN}Mq zmuVkh^>4DWtBG%PpGfqOOJm&dXYjUMWOswZ18IfrKYjc{UOrB|N(^f%IHF%rtPNVX zSidR%QD90GpNCJ99_u|@HV1tO@DHg=aj+mc|AOLDK6C8(E=;C%N zP@Q8kzYZ&p5R5#|4QH+H=o}0d_>vA#=`%8m;hBr@42+ZhDQYQt4H=*j*`V~J>FFmC zKVly9pRxaDxg}?PyHxDlBQIH#6z@EOdp1R~KBh_JYR7mRi`t*>CJ7KPd>;pI`Pk4= z_~m8kuLk}!i!AuWGoGjxbI@FT>5DR&&jt5s(`;25&h4b)%a)6mmzVHK(&Q~#*N>`# z#=TJee;Y8692yM|h=8-pwh5{?JLp8t!qOoW8CR7Wn902kuLHSBRpR~a?NOr3Eg7*WoQU~q5?&F$uLV|*6RHb2V;_7M^cL%o`U{`;RuRMibwy_GRV;eH@(r(g!Lc{h{ z+#d@THtXLVZC0NhCf}70o$a+5hG(E-$YT@Qiv7tJ$-XQ{juWJiQc3hQW^K z%$V^-e)4>a43CG79$}$fEh1U01`=8J!Lfwbu_m#0L%)|C4=#lT^ErGa@`G8yfeqcP zFCR`db{wo%vlk((mwzjL=B0?aB$OC3Vf0xi8iC@rL@9e#&ZiB;P}813$GawvyGOLq zsF6&)%7%rL=bfX=Uv<;|zThOdZbn?foI$gJQdiT|HTK6BE$+-8xbV=teN?~KJblHC zydAOJMjaLEBo0im@*iETkIPPyN~~`g?7!#!l%^r{!yb`$O=p$CS|Fd{k zXet?{$29zvhVh-h6Bu!|p3<@5Fu=DYIHwXySoLp8FRb2rID*Al7d;GAgMJPtoq&kt2EkPSj)0(^c64cUG^9lYaK%y$U z=hMsafh>Xp%e*XDmUF?2MpzWuT7@R%#T8uBwMR8uNwbi1B>t!&cPsor`nF>A^5d}4p` z{~}pyKKGa}_o84v?8;ewyeERhdysRrm`l+75Xuy5;y}T!P7#}~StlyXOk46Ht3z*% zxZXVhj-njvUexhLLn$iiB`~Ps^)afnF{~>tL{UIkV;zZ0N-0J=D^L>yJGF6Ud*+H6 z`r+L;S!j1-TehDp`YSO@2#ri;lDZPBR8sM6Q@` z9$u3;QKTU)pH7lAJeQ#?i!E(3c0o(-W>ecHJ)v33)!=|5d4=&M+;J?v!d_%-DsRs3 zTMR`cGLmKrEW~3N+|!4}r`3kz=&&XVZQ^mII7HxPJoN{`qLN;;0v60o=FjTlk6aLL zR$QC6r5loTFW(A|YvJVa8qJ89Mw6^hrg+uj$lsq^PZ?FPG7$R{6ia_>h(ueHwxZ7@ zlum2imZJ+Mc@mro>a3?_;wAgF@1Y8Gx$1Ndxdl6jTgK=2SgzyN-Car!F0T^tjI1oi z+}1ATkHgj3n=|*vp910520^l}CgUYvUH3(^pYiyUNqoig=-`>;V+hukYz%+^6#^zd zH{OYsC~0bTM?O&rNih)-5lKl&s+Y%+zh$|f;%(r&UZokXCzs0zQM=*&~Yl~m$<&ogGo0b||fhFbCNOSE3Afzmym>fiMYTvsm zG54tda|c%CR9F7g?Xe%7sO{B}Ajp?j%^l@f1dp;`A9w28Ls#r;pO`pG!B9d z0mYJMd``X;4_@JF7OWJ!W8*<)b8cNxq3G>wDE`(oy-3U3%A?`VbGy}tYHs-VBlE2L zV2$N+aD@hKAz)S#J9Xu>RT?(sQjoc%*5x3k_I|R+|Ec~HA`t0X{lvP>*{<)c31;^A z^lW>x|J!gZUmDi+blCpW29@n?-H9**adJ$tz4&+a$-odB>*lKr#RbMUC%hti>>tOG zme4R?3Q7vv)|HjtfBia3=0HFB<9r6+VC!u!O$m;7MjkTwrsY70(LDY9 z*ZGzAJY^;_=T#fhO^oY3>x(8u%#I8=qvGG!tGVu@D1#WuJl_>ZdZJv`q_HBO)#utl z6oVQXgAjQ439LEQt9M-q5#7M|sARa|v`=Fx8^nvfz~YnnVUD==<17l=}{8Td|dXACMd(JJ#k z{7$i+wf61s9d%FNqGKUWvo@Bz-A&8N9_O6B{g+#k3rQF#5Mi+onQnK~hLF~Wzwbv9 zZqU@I`!yAAv7m5azHzTEi)DCQ-Ft*&l{Ac9O6B#9^VESXr`cn#&lhRT18PG=XvLO7 z<5E1276-2-#aBJ1*KX6MDW^`pR~($)l1BAuiyB=QL%=AZE=6y{!@GdzTRhp;wDEV^4fy@iw^UIq=_PMxS$xjIL1=@)C=!fmWgyE8L}z^ynT(0)KoYJHDTQ zS&w&80z{fW=gA}6eS050C<)nBF0&k`MQ+Xwc=A+dg#D>HX)oNlU+b1F_7mvfSxZlH zp8gAdQJ~P4G|Na4SKtSsdq^^pA$j<$X3`pFh3qz}?o`Zq1b19{ATnAmG5BYD$59Tu zr)zhw_|+Qt;R`3Q$Y9ubd|nOeNhR{J&UbTqQV`>y_ew`|terXy)%X>O9#bMc<^Llb zXa6j2vL_XlKPTv>aQpsLpVlTL&d@-ijD06z{L`o@rSlLg^w)0e-s*4hTm&c!5jk9e zkFxN~6*~LXkh1B!03D)q)w=o(Eu5W;ICzIGb2bG#yv%L)t0KJMk%{hpFS@_Tey5Haa#E&U`ytXz zJu>d%{eL>JToo*62iTXBdsXk&#$C!5<}Awk-K=L131d&>5r2ecbO7sA{lqDED)1HS zA3gR6tbI0|5Sa?cZ>+YIW_PXr_QE*BE%#*;#l2Ug575)e}q}DNrEqRDYTpz z2l=8(d=OwuZMXk&tk96uo@0BZ6iNEEO$z{tWIHJqA|VSgJ5--wJa(0J`x4<2t}Ui+ zoBoxkeMW?7MhuFNIc|8rLWzEzq^B}F#mH#o@UbVC@~o|!xzWb;g!MM7{ZSH;AVu;+ zDOT1K)p{-3A@Sn$s#~o~V=G`d`z|YzsGX5!B{d_w?~}4GSGJ@L$Ar0>zCe?fHvZQI zY?pmHu=Z}LY#&wx3oSGllu0$*m@YP9&N=z?=GYUb@nb z))pIy&D)Kpxi%lSzZb~i@{Q+b&Fr*U?b@A1M+sW`@JuB`~(C<2&t@kH?nq49DaW_+AB z9}6D`^qF;IOuN>6R~@En0$ZfEqCuc6Qr7v<He&yE~eG&l~Jo z(U;3JBS}e#NkU%BvA|h)ysKiymc1}(zP{oc)S1@DTNr;iK!h4^Y^a_#6_ZmS><<~- z)9d(t=XU4Nz0?!;Mv|t--G$xhA!ueqi6&{IbN#Sonv21n?7f?=72`O9B_B#uu^O*1 zu#7l^V5DCEbQrqjz{~lb_)eP;b6jv#nZKyh=lKGC{Bl4{lk4ezPK8-pu?mZoh7fxC zwJ|S+S4atUKzx*k_hSfS5~5*rNT3TXR4(E2JpQ?!w0|wQoz}2P6fFkNKKzR{lW5s{>^&yF3!Id##p?e%v<(W?{AYpkML|pD~;W>FJ z?B#4mf@}FT6GAJ|mz8=znmKI6u9jF;cVCy)Omi!8Nx949yr!b+jDzUJ*xxFk%|Lp>%l+I8mj0m=zO zaa%^rz~9s5uy4WJF9BfvEP3}zQa`^DIUvhvCh)qwytVs`qCm#xB#Q{(IKJ^k0I{fJ zjm2M16CDRgMr@V()|?NWT^}5j%7`$5ztFZVAU-0<){{;U(*s6HD|x)Wd(Ou0>LO+$ zhUMK9DNASnlfQ1IctG3s1SIK*wXQRdT!$EvSHc;V+7dm;ydAH-x!udDL+;_DNOj)# z8TaBnf`U^qtDK6KNz|G`EMuvTZsoIG^BGlS5<91x;YJl(1%GioWL1Z;lrxR{4ng6X zl-$}P+htyDrBHnq?*B=0u)Ua`j9TKoI;c{)g;mP1#s?hmRR_L&Bp^tt6b#7#+VhEG z(Xmy@WV>2>IFToR*xIaU>nf8@6%ia&OxNTKKzx-g?u0cG`J@JXRUTpkZF(qI{d%+nJ}9zKnH(>l^?Q6doh{M|5?qkT!a{- z7mNWmO?1=ntyu4xR7>Jtk+cJkwQseJ)2BJ?!5iPe7gwfB@ax!92n+;kCW|#wb-kh~ z9UW#il>vCWYTa%(RXs;2`dBX6?D&6GXlof}b*5+>SBd|!t5Lq|t5;T6<1PQf*@`0B zuZF{(M|np_qs>uU5((_JAVj?ylnJEiF+vN|mbB3M;hs0iMHtAOKxY>eSJpPz&_oi? zFO;}hy3*3z?HB?PB9*Kpi|26{ zdYTV9*;vCJ3~BwpD_7?^F^!#Kn)3RIkAt})`0DK6ry9DkRw*9W{=BgTA4`U9mC{4A z`n>ml@KytKE8}@>@`mfV<)*7XlYg#T+l_FfC@urFhF^-w`z)27l)i`M=>>MT9+!+) zt`bw1mIE@l<-WN+cxRrAJ_FwGvf4 zN`L5fyznH%MAHsbsY3>v!-!vCC%JR-(!A-qo0Fv3;DQQnNR)D}JSnHGl-%U_^4Oa@ z0m%mPno*`_Swwcu(X1?a+&_z?{}k3RLx4^d-kUQ@R{8*QfXC^IfNNHQ_B>X=q?tCa zJ%Cu=##%j6LR8?SAYL`p7(DkIKmDsoF#lcrRpm+P=VoVA?SFl1x@&etr-rg6J|8d& zR+cevp~Zpb$FGx!6MX68RZ;|y$QUJxLEBASY7U;Efe#wt$!Ffue}Rl ze`{%QIttL>P+3j11Y!}$5sywR#10J+!gCng;R!JK_kEu_>e>V2Y3sMnFriI8At>q*d`|C z@FUlsZOZdf4RxkkF_YPxmBC6mq0yIi6JGIG+BzA>TIYVvtu|WLfZ=~M#+y>5g@py- z=5i3JGU&ZMO~B*z;nn_Bp=3~hZw=nJkA>PJE~^cULKc-*Lu!zp*IhPM&;H-{D4zVE zFyj{|%W&lg7;!NLrh!FF zXapg`x0%(xCA zXKfc4WM|dYUvJ`^pOr^gP z>(D3xb!|Ng>*3)9Xpj@sA5_i+e~r+|7Kq^yAB`3R@9vyUWj4A4QoOF$0v^zXF};Qz z-N>!_delgI2w>T4HV^&5=Jb+u<`NjdlVKhCwagpd(F`#aVbjTpZ(WLp#Nz+uNCmvy zF6?{V-MRFPzN|bwJ$V(rK0ji6cRx96&Qx=fWq2Bp^88M_QwQwD_0{)x^aC_o;Dl5e z-??(FU{0G;dNB3+m(Jl|SRnxEN3>d&hnKrn=eLKDv!u{t<@NQRCqmcPOYOy9Z}#h{ zL%7Qsx4U_4$NqiV**c1t$XZU)`rOM97Og~*IB))yTCqV0DxX}vS{KIB&)%DR^y`<7 zo^HH}M1_u1*B*&b2TP?kWr!gBP@(H`dq~yEtiIp?%7O&1<(v2rI10iGzwoE_>+{64 zB|A<3)>2DzJV6n1C3Pkh5MdbNM}?`}{euRg0_aRuAyWs)!zKR-SH;8h`^QNFGzBc7 z8_p2O`T8|2mrZxI?K%rNWaQlWTq>yR3DTX>L-+-PDj`fEL8hYnLv5d7MkcodS`E>f zB#5+LQdc)DI>~BWZ)Y&p8SsB$aPE$*zSvqT_si!7Gl?yyrC8;Ib-Fj#LNOdpp_c~e1(HD49w&%}TH0X)`~tD$~=X9QsR=%psxaMFuQF}oxg zcnw93O!<@9Yv>hf6{BG!wPLFoOg6=yDvm0P?FrboL6C8ONR7Inr?I6AKte~)V*LAfRo7GQuTGhm9yqYjHIGmREs+sDJNBj+i_1=zMpXp#nr3tT;9OlI4D0AXxS z<(sKs(k7ZXtM8bIK+HNau$l&9gzXUB6=P1LiIhKVjfm53w9k%9|Q@%5OIYxS; zt|*HCv05wiE2xh>7g!JX^;1jV;QZKd^n}eY{CV&le$pvv4pAJF^?{+GgyMJu~K|*Tr&r9tJZ={!7tM7fbrA068NOHgsS|4J4iQ_0x(58Xv`?63g?m`eR;+hsEtW@3t~I|3MwI)+G-jfeO` zPTuFY4=HSwZAo4E&p`00*IC8Od#Of;1@l(<+v%YNQk ziFxkgnnUl=iPw7sl4<-dz4fbp2KVXEREcN7=~PMszuM!V!WylRSb2D92>bZ~=&ER% zE&gAKd^@5##B9gt8FTCHYY#?HAa=%9jG7}aKmPYoNwUQ{-5K_w9&S)GN28`NXCv1r z3(2#^ptaPvU0ZVZx{IP0kx30ghvX8eP{%JfSK^SW@mHy(dh~y5Q49m%Awhrp5DN0> z-8cB-GV*LNz!J&S6Y_b1DiBNr8!Uzq5!LxaB<)XVB&XJCm#F_B+j_#FN8DoM*upa@ z2)(*9n+R?w@zT z1?@;cE5Lu3Vo^%$iKoA@{!m<6xm^axDT4W!_r(FJMhall&dsM_022$=hYVEMNBJcJ zPQr=vebksYZY@u7fvg+P&|QQK>`j3O5`Vlgr;OCNg4GX>x*r?jB4aFkI5uIYP8>j)4gd=6?8@UWUb@x< z9r-2#hotbw`$IT5z?h&bN|Jvz}!vZ~u&C%d-86 zE3z`8?0yeq7^X||DOr--LXtC6=EFW#=?O!z3@8T^-_EgY#WsG%dViJ^PF#q}fHLiX z$x*B^21nMGJT=CBBpKobnKIlv$t1JNwq@0j>z@Xb(1G`=31RtIYI&C9_#qa34-bTL zUIFwhf?T<$!^PFGDWyo}0SwjwP|ih+;b~xoK5aXU<-!Zw+F0^6Y5_8!EJulU+gXNk zfD`(ZkhLQ#OCF56%9E*kK_oNFtOM9GvfMpQO%H6@w$!KGNThFD55bkwXu1QGlYrha zN!%nOIm)sHb}q)U;1iY%BvZU#Q)V5;mx<->-%@uH>b)2Go1^ZRw(fB-f7A$^u;p|LC`U>11B?me z!9}~OK&CNeHGIJ!vksJ(<%HbuGALGl!HGQ+A9X2Jn{oyrUjml6$I(osN3xh`~CiC)b9_)KMRT_ z#;W~>jtm?tkYAj}(Zoe)5x!F}p0k6G*9@rmr(U*L6w4Hg$!zZlhM;vUzTWJHFCWcFkZqpYf?6$amr=J|@0B{qvC zk5yz68LnhHbGgX8AoRh9pxc_U9`;q_k5^+8-B|5CQM*8`fdBD2_mFJ)as&VX004md Z_yKFOL+`f@_f-G@002ovPDHLkV1gh4C<_1p diff --git a/app/src/main/res/drawable/release_header_background.xml b/app/src/main/res/drawable/release_header_background.xml new file mode 100644 index 0000000000..bcd3166348 --- /dev/null +++ b/app/src/main/res/drawable/release_header_background.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/safety_tip0.webp b/app/src/main/res/drawable/safety_tip0.webp new file mode 100644 index 0000000000000000000000000000000000000000..6179e5345f35e765e38761be83dc67dc1d4f3fcb GIT binary patch literal 11198 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 a|JXo&yjlH7NGc}gT3{%EPXMXE&Hn@Ba_h4I literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/safety_tip1.webp b/app/src/main/res/drawable/safety_tip1.webp new file mode 100644 index 0000000000000000000000000000000000000000..301548bc272dd5cb642c1e2711b77bab8f4a3ddf GIT binary patch literal 10922 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/safety_tip3.webp b/app/src/main/res/drawable/safety_tip3.webp new file mode 100644 index 0000000000000000000000000000000000000000..89a8c9a861ed79e5bbae1a8b66e053e3936eaf29 GIT binary patch literal 7036 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 + + diff --git a/app/src/main/res/drawable/symbol_error_triangle_filled_16.xml b/app/src/main/res/drawable/symbol_error_triangle_filled_16.xml new file mode 100644 index 0000000000..ca4d77af5d --- /dev/null +++ b/app/src/main/res/drawable/symbol_error_triangle_filled_16.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/symbol_group_question_20.xml b/app/src/main/res/drawable/symbol_group_question_20.xml new file mode 100644 index 0000000000..8172837129 --- /dev/null +++ b/app/src/main/res/drawable/symbol_group_question_20.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_group_question_55.xml b/app/src/main/res/drawable/symbol_group_question_55.xml new file mode 100644 index 0000000000..bf5caa74f2 --- /dev/null +++ b/app/src/main/res/drawable/symbol_group_question_55.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_official_20.xml b/app/src/main/res/drawable/symbol_official_20.xml new file mode 100644 index 0000000000..8f45695073 --- /dev/null +++ b/app/src/main/res/drawable/symbol_official_20.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_person_question_16.xml b/app/src/main/res/drawable/symbol_person_question_16.xml new file mode 100644 index 0000000000..3f7e44fe95 --- /dev/null +++ b/app/src/main/res/drawable/symbol_person_question_16.xml @@ -0,0 +1,22 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/symbol_person_question_24.xml b/app/src/main/res/drawable/symbol_person_question_24.xml new file mode 100644 index 0000000000..1bdce7d1fd --- /dev/null +++ b/app/src/main/res/drawable/symbol_person_question_24.xml @@ -0,0 +1,22 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/symbol_person_question_40.xml b/app/src/main/res/drawable/symbol_person_question_40.xml new file mode 100644 index 0000000000..8f6ffbd78f --- /dev/null +++ b/app/src/main/res/drawable/symbol_person_question_40.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/conversation_header_view.xml b/app/src/main/res/layout/conversation_header_view.xml index c82918b289..c23808ed57 100644 --- a/app/src/main/res/layout/conversation_header_view.xml +++ b/app/src/main/res/layout/conversation_header_view.xml @@ -92,9 +92,50 @@ android:layout_marginTop="16dp" android:layout_marginBottom="16dp" android:background="@color/signal_dark_colorTransparentInverse2" - app:layout_constraintBottom_toTopOf="@id/message_request_info" + app:layout_constraintBottom_toTopOf="@id/message_request_barrier" app:layout_constraintTop_toBottomOf="@id/message_request_about" /> + + + + + + + + + + + + + + @@ -136,7 +211,6 @@ android:id="@+id/message_request_description" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="15dp" android:gravity="center" android:textAppearance="@style/Signal.Text.BodyMedium" android:visibility="gone" @@ -145,7 +219,6 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/message_request_subtitle" - app:layout_goneMarginTop="0dp" tools:text="Member of NYC Rock Climbers, Dinner Party and Friends" tools:visibility="visible" /> @@ -154,7 +227,7 @@ style="@style/Widget.Signal.Button.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="16dp" android:textColor="@color/signal_colorOnSurface" app:layout_constrainedWidth="true" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 758ce90826..c277f52a90 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -670,6 +670,14 @@ Reported as spam and blocked You accepted a message request from %1$s. If this was a mistake, you can choose an action below. + + Review carefully + + %s are not verified + + Profile names + + Group names Safety Tips @@ -681,6 +689,10 @@ Previous tip Next tip + + Fake names and accounts + + Signal will never contact you for your registration code or PIN. Be cautious of requests that impersonate others. Profile names are chosen by their account holder and aren\'t verified. Crypto or money scams @@ -698,6 +710,21 @@ Be careful of businesses or government agencies contacting you. Messages involving tax agencies, couriers, and more can be spam. + + %s on Signal are chosen by their account holder. + + Profile names aren’t verified + + Be cautious of accounts that impersonate others + + Don’t share personal information with people you don’t know + + %1$s are chosen by members of the group. + + Be cautious of groups that impersonate organizations and businesses + + Profile names of members in groups are not verified + Clear filter @@ -2104,6 +2131,16 @@ Report… + + Accept request? + + Review requests carefully. Profile names are chosen by their account owner and aren’t verified. + + Join group? + + Review requests carefully. Group names are chosen by members of the group and aren’t verified. + + Join Passphrases don\'t match! @@ -2487,12 +2524,16 @@ Signal connection Verified + + Profile names are not verified + + Pending message request No direct messages with %1$s %1$s is in your phone contacts - You have no groups in common + No groups in common Review requests carefully @@ -3273,7 +3314,8 @@ Update contact Block request - No groups in common. Review requests carefully. + + No groups in common No contacts in this group. Review requests carefully. View The disappearing message time will be set to %1$s when you message them. @@ -6230,6 +6272,16 @@ Signal Release Notes & News + + This is the official and only chat from Signal. + + Keep up to date with news and release notes. + + This is the official and only chat from Signal + + Keep up to date with news and release notes + + Official and only Signal chat All activity