From 3922bfacf5df81fb7932befd563e209393304f6f Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 6 Jan 2022 13:36:58 -0500 Subject: [PATCH] Hide bubble for jumbomoji. --- .../components/emoji/EmojiTextView.java | 7 +++---- .../conversation/ConversationItem.java | 4 ++-- .../database/model/MessageRecord.java | 18 ++++++++++++++++++ .../securesms/emoji/JumboEmoji.kt | 2 ++ .../securesms/util/MessageRecordUtil.kt | 2 +- .../conversation_item_received_text_only.xml | 19 +++++++++++++++++++ .../conversation_item_sent_text_only.xml | 18 ++++++++++++++++++ 7 files changed, 63 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java index 6478f7d96..3ac6fe581 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java @@ -114,10 +114,9 @@ public class EmojiTextView extends AppCompatTextView { int emojis = candidates.size(); float scale = 1.0f; - if (emojis <= 8) scale += 0.75f; - if (emojis <= 6) scale += 0.75f; - if (emojis <= 4) scale += 0.75f; - if (emojis <= 2) scale += 0.75f; + if (emojis <= 5) scale += 0.9f; + if (emojis <= 4) scale += 0.9f; + if (emojis <= 2) scale += 0.9f; isJumbomoji = scale > 1.0f; super.setTextSize(TypedValue.COMPLEX_UNIT_PX, originalFontSize * scale); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 6c0b79d33..c36e2defd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -138,12 +138,10 @@ import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; /** * A view that displays an individual conversation item within a conversation @@ -1075,6 +1073,8 @@ public final class ConversationItem extends RelativeLayout implements BindableCo ViewUtil.updateLayoutParamsIfNonNull(groupSenderHolder, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); footer.setVisibility(VISIBLE); + } else if (hasNoBubble(messageRecord)) { + bodyBubble.setBackgroundColor(Color.TRANSPARENT); } else if (hasThumbnail(messageRecord)) { mediaThumbnailStub.require().setVisibility(View.VISIBLE); if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); 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 e9fe98df5..506bd6815 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 @@ -35,6 +35,8 @@ import org.signal.core.util.logging.Log; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.components.emoji.EmojiProvider; +import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser; import org.thoughtcrime.securesms.database.MmsSmsColumns; import org.thoughtcrime.securesms.database.SmsDatabase; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; @@ -42,6 +44,8 @@ import org.thoughtcrime.securesms.database.documents.NetworkFailure; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; import org.thoughtcrime.securesms.database.model.databaseprotos.GroupCallUpdateDetails; import org.thoughtcrime.securesms.database.model.databaseprotos.ProfileChangeDetails; +import org.thoughtcrime.securesms.emoji.EmojiSource; +import org.thoughtcrime.securesms.emoji.JumboEmoji; import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.recipients.Recipient; @@ -92,6 +96,8 @@ public abstract class MessageRecord extends DisplayRecord { private final long notifiedTimestamp; private final long receiptTimestamp; + protected Boolean isJumboji = null; + MessageRecord(long id, String body, Recipient conversationRecipient, Recipient individualRecipient, int recipientDeviceId, long dateSent, long dateReceived, long dateServer, long threadId, @@ -602,6 +608,18 @@ public abstract class MessageRecord extends DisplayRecord { } } + public boolean isJumbomoji(Context context) { + if (isJumboji == null) { + if (getBody().length() <= EmojiSource.getLatest().getMaxEmojiLength() * JumboEmoji.MAX_JUMBOJI_COUNT) { + EmojiParser.CandidateList candidates = EmojiProvider.getCandidates(getDisplayBody(context)); + isJumboji = candidates != null && candidates.allEmojis && candidates.size() <= JumboEmoji.MAX_JUMBOJI_COUNT; + } else { + isJumboji = false; + } + } + return isJumboji; + } + public static final class InviteAddState { private final boolean invited; diff --git a/app/src/main/java/org/thoughtcrime/securesms/emoji/JumboEmoji.kt b/app/src/main/java/org/thoughtcrime/securesms/emoji/JumboEmoji.kt index d701d173f..f22231e5f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/emoji/JumboEmoji.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/emoji/JumboEmoji.kt @@ -21,6 +21,8 @@ private val TAG = Log.tag(JumboEmoji::class.java) */ object JumboEmoji { + const val MAX_JUMBOJI_COUNT = 5 + private val cache: MutableMap = SoftHashMap(16) private val tasks: MutableMap> = hashMapOf() private val versionToFormat: MutableMap = hashMapOf() diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt index aeeb252b2..567df3032 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MessageRecordUtil.kt @@ -43,7 +43,7 @@ fun MessageRecord.isBorderless(context: Context): Boolean { } fun MessageRecord.hasNoBubble(context: Context): Boolean = - hasSticker() || isBorderless(context) + hasSticker() || isBorderless(context) || (isTextOnly(context) && isJumbomoji(context)) fun MessageRecord.hasOnlyThumbnail(context: Context): Boolean { return hasThumbnail() && diff --git a/app/src/main/res/layout/conversation_item_received_text_only.xml b/app/src/main/res/layout/conversation_item_received_text_only.xml index a7003afa4..906f50578 100644 --- a/app/src/main/res/layout/conversation_item_received_text_only.xml +++ b/app/src/main/res/layout/conversation_item_received_text_only.xml @@ -138,6 +138,25 @@ app:footer_reveal_dot_color="@color/signal_icon_tint_secondary" app:footer_text_color="@color/signal_text_secondary" /> + + + +