From b74f04495e299a859d16e09e65ed5f58b49e9bf6 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Tue, 17 Sep 2024 16:48:15 -0700 Subject: [PATCH] Update verified icon. --- .../database/model/MessageRecord.java | 4 ++-- .../groups/ui/GroupMemberListAdapter.java | 2 +- .../profiles/manage/EditAboutFragment.java | 22 ++++++++++++++++++- .../securesms/recipients/Recipient.kt | 5 ++++- .../recipients/ui/about/AboutSheet.kt | 4 ++-- .../main/res/drawable/ic_safety_number_16.xml | 12 ++++++++++ .../res/layout/conversation_title_view.xml | 2 +- .../main/res/layout/edit_about_fragment.xml | 11 ++++++++++ app/src/main/res/values/strings.xml | 2 ++ .../java/org/signal/core/util/StringUtil.java | 3 ++- 10 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 app/src/main/res/drawable/ic_safety_number_16.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java index 6df9cd1fa5..e2c8a30622 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -226,8 +226,8 @@ public abstract class MessageRecord extends DisplayRecord { } else if (isIdentityUpdate()) { return fromRecipient(getFromRecipient(), r -> context.getString(R.string.MessageRecord_your_safety_number_with_s_has_changed, r.getDisplayName(context)), R.drawable.ic_update_safety_number_16); } else if (isIdentityVerified()) { - if (isOutgoing()) return fromRecipient(getToRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified, r.getDisplayName(context)), R.drawable.ic_update_verified_16); - else return fromRecipient(getFromRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified_from_another_device, r.getDisplayName(context)), R.drawable.ic_update_verified_16); + if (isOutgoing()) return fromRecipient(getToRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified, r.getDisplayName(context)), R.drawable.ic_safety_number_16); + else return fromRecipient(getFromRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_verified_from_another_device, r.getDisplayName(context)), R.drawable.ic_safety_number_16); } else if (isIdentityDefault()) { if (isOutgoing()) return fromRecipient(getToRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified, r.getDisplayName(context)), R.drawable.ic_update_info_16); else return fromRecipient(getFromRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified_from_another_device, r.getDisplayName(context)), R.drawable.ic_update_info_16); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java index fc7a0e3328..6373ca1855 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java @@ -438,7 +438,7 @@ final class GroupMemberListAdapter extends RecyclerView.Adapter { + checkValidText(editable.toString()); trimFieldToMaxByteLength(editable); presentCount(editable.toString()); })); @@ -126,6 +131,21 @@ public class EditAboutFragment extends Fragment implements EditProfileActivity.E ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(bodyView); } + private void checkValidText(String text) { + boolean isInvalid = false; + for (Character emoji : StringUtil.FILTERED_EMOJIS) { + if (text.contains(Character.toString(emoji))) { + isInvalid = true; + break; + } + } + + int colorRes = isInvalid ? R.color.signal_colorError : R.color.signal_colorPrimary; + bodyView.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), colorRes))); + errorView.setVisibility(isInvalid ? View.VISIBLE : View.GONE); + saveButton.setEnabled(!isInvalid); + } + @Override public void onSaveInstanceState(@NonNull Bundle outState) { outState.putString(KEY_SELECTED_EMOJI, selectedEmoji); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt index b6bc37f98d..d7965a6214 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt @@ -367,8 +367,11 @@ class Recipient( /** The badge to feature on a recipient's avatar, if any. */ val featuredBadge: Badge? = badges.firstOrNull() + /** A string filtering out banned emojis from the about text */ + val filteredAbout: String? by lazy { about?.filterNot { StringUtil.FILTERED_EMOJIS.contains(it) } } + /** A string combining the about emoji + text for displaying various places. */ - val combinedAboutAndEmoji: String? by lazy { listOf(aboutEmoji, about).filter { it.isNotNullOrBlank() }.joinToString(separator = " ").nullIfBlank() } + val combinedAboutAndEmoji: String? by lazy { listOf(aboutEmoji, filteredAbout).filter { it.isNotNullOrBlank() }.joinToString(separator = " ").nullIfBlank() } /** Whether or not we should blur the recipient's avatar when showing it in the chat list and other locations. */ val shouldBlurAvatar: Boolean 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 ee0494f507..9aaf2863a0 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 @@ -96,7 +96,7 @@ class AboutSheet : ComposeBottomSheetDialogFragment() { displayName = recipient.get().getDisplayName(requireContext()), shortName = recipient.get().getShortDisplayName(requireContext()), profileName = recipient.get().profileName.toString(), - about = recipient.get().about, + about = recipient.get().filteredAbout, verified = verified, hasAvatar = recipient.get().profileAvatarFileDetails.hasFile(), recipientForAvatar = recipient.get(), @@ -220,7 +220,7 @@ private fun Content( if (!model.isSelf && model.verified) { AboutRow( - startIcon = painterResource(id = R.drawable.check), + startIcon = painterResource(id = R.drawable.symbol_safety_number_24), text = stringResource(id = R.string.AboutSheet__verified), modifier = Modifier.align(alignment = Alignment.Start), onClick = onClickSignalConnections diff --git a/app/src/main/res/drawable/ic_safety_number_16.xml b/app/src/main/res/drawable/ic_safety_number_16.xml new file mode 100644 index 0000000000..e713a9d52b --- /dev/null +++ b/app/src/main/res/drawable/ic_safety_number_16.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/conversation_title_view.xml b/app/src/main/res/layout/conversation_title_view.xml index bb1071eba1..283be2ee9f 100644 --- a/app/src/main/res/layout/conversation_title_view.xml +++ b/app/src/main/res/layout/conversation_title_view.xml @@ -85,7 +85,7 @@ android:layout_marginEnd="3dp" android:tint="@color/signal_inverse_transparent_80" android:visibility="gone" - app:srcCompat="@drawable/ic_check_24" + app:srcCompat="@drawable/symbol_safety_number_24" tools:visibility="visible" /> + + Free to chat Taking a break Working on something new + + One or more characters is invalid. Edit group diff --git a/core-util/src/main/java/org/signal/core/util/StringUtil.java b/core-util/src/main/java/org/signal/core/util/StringUtil.java index 15923430ff..f1719c4dc4 100644 --- a/core-util/src/main/java/org/signal/core/util/StringUtil.java +++ b/core-util/src/main/java/org/signal/core/util/StringUtil.java @@ -1,6 +1,5 @@ package org.signal.core.util; -import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -11,6 +10,7 @@ import androidx.core.text.BidiFormatter; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.Set; import java.util.regex.Pattern; @@ -22,6 +22,7 @@ public final class StringUtil { '\u200B', // zero-width space '\u2800'); // braille blank + public static final List FILTERED_EMOJIS = List.of('\u2713', '\u2714', '\u2611', '\u221A', '\u26C9', '\u26CA', '\u26DB'); private static final Pattern ALL_ASCII_PATTERN = Pattern.compile("^[\\x00-\\x7F]*$");