Hide bubble for jumbomoji.

fork-5.53.8
Cody Henthorne 2022-01-06 13:36:58 -05:00 zatwierdzone przez Alex Hart
rodzic 4e67752850
commit 3922bfacf5
7 zmienionych plików z 63 dodań i 7 usunięć

Wyświetl plik

@ -114,10 +114,9 @@ public class EmojiTextView extends AppCompatTextView {
int emojis = candidates.size(); int emojis = candidates.size();
float scale = 1.0f; float scale = 1.0f;
if (emojis <= 8) scale += 0.75f; if (emojis <= 5) scale += 0.9f;
if (emojis <= 6) scale += 0.75f; if (emojis <= 4) scale += 0.9f;
if (emojis <= 4) scale += 0.75f; if (emojis <= 2) scale += 0.9f;
if (emojis <= 2) scale += 0.75f;
isJumbomoji = scale > 1.0f; isJumbomoji = scale > 1.0f;
super.setTextSize(TypedValue.COMPLEX_UNIT_PX, originalFontSize * scale); super.setTextSize(TypedValue.COMPLEX_UNIT_PX, originalFontSize * scale);

Wyświetl plik

@ -138,12 +138,10 @@ import org.whispersystems.libsignal.util.guava.Optional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
/** /**
* A view that displays an individual conversation item within a conversation * 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); ViewUtil.updateLayoutParamsIfNonNull(groupSenderHolder, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
footer.setVisibility(VISIBLE); footer.setVisibility(VISIBLE);
} else if (hasNoBubble(messageRecord)) {
bodyBubble.setBackgroundColor(Color.TRANSPARENT);
} else if (hasThumbnail(messageRecord)) { } else if (hasThumbnail(messageRecord)) {
mediaThumbnailStub.require().setVisibility(View.VISIBLE); mediaThumbnailStub.require().setVisibility(View.VISIBLE);
if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);

Wyświetl plik

@ -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.DecryptedGroup;
import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange;
import org.thoughtcrime.securesms.R; 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.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SmsDatabase; import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; 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.DecryptedGroupV2Context;
import org.thoughtcrime.securesms.database.model.databaseprotos.GroupCallUpdateDetails; import org.thoughtcrime.securesms.database.model.databaseprotos.GroupCallUpdateDetails;
import org.thoughtcrime.securesms.database.model.databaseprotos.ProfileChangeDetails; 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.groups.GroupMigrationMembershipChange;
import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.profiles.ProfileName;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
@ -92,6 +96,8 @@ public abstract class MessageRecord extends DisplayRecord {
private final long notifiedTimestamp; private final long notifiedTimestamp;
private final long receiptTimestamp; private final long receiptTimestamp;
protected Boolean isJumboji = null;
MessageRecord(long id, String body, Recipient conversationRecipient, MessageRecord(long id, String body, Recipient conversationRecipient,
Recipient individualRecipient, int recipientDeviceId, Recipient individualRecipient, int recipientDeviceId,
long dateSent, long dateReceived, long dateServer, long threadId, 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 { public static final class InviteAddState {
private final boolean invited; private final boolean invited;

Wyświetl plik

@ -21,6 +21,8 @@ private val TAG = Log.tag(JumboEmoji::class.java)
*/ */
object JumboEmoji { object JumboEmoji {
const val MAX_JUMBOJI_COUNT = 5
private val cache: MutableMap<String, Bitmap> = SoftHashMap(16) private val cache: MutableMap<String, Bitmap> = SoftHashMap(16)
private val tasks: MutableMap<String, ListenableFutureTask<Bitmap>> = hashMapOf() private val tasks: MutableMap<String, ListenableFutureTask<Bitmap>> = hashMapOf()
private val versionToFormat: MutableMap<UUID, String?> = hashMapOf() private val versionToFormat: MutableMap<UUID, String?> = hashMapOf()

Wyświetl plik

@ -43,7 +43,7 @@ fun MessageRecord.isBorderless(context: Context): Boolean {
} }
fun MessageRecord.hasNoBubble(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 { fun MessageRecord.hasOnlyThumbnail(context: Context): Boolean {
return hasThumbnail() && return hasThumbnail() &&

Wyświetl plik

@ -138,6 +138,25 @@
app:footer_reveal_dot_color="@color/signal_icon_tint_secondary" app:footer_reveal_dot_color="@color/signal_icon_tint_secondary"
app:footer_text_color="@color/signal_text_secondary" /> app:footer_text_color="@color/signal_text_secondary" />
<org.thoughtcrime.securesms.components.ConversationItemFooter
android:id="@+id/conversation_item_sticker_footer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/message_bubble_horizontal_padding"
android:layout_marginTop="2dp"
android:layout_gravity="end"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="@dimen/message_bubble_horizontal_padding"
android:paddingTop="3dp"
android:paddingEnd="@dimen/message_bubble_horizontal_padding"
android:paddingBottom="3dp"
android:visibility="gone"
app:footer_icon_color="@color/signal_icon_tint_secondary"
app:footer_mode="incoming"
app:footer_reveal_dot_color="@color/signal_icon_tint_secondary"
app:footer_text_color="@color/signal_text_secondary" />
</org.thoughtcrime.securesms.conversation.ConversationItemBodyBubble> </org.thoughtcrime.securesms.conversation.ConversationItemBodyBubble>
<org.thoughtcrime.securesms.components.AlertView <org.thoughtcrime.securesms.components.AlertView

Wyświetl plik

@ -79,6 +79,24 @@
app:footer_reveal_dot_color="@color/conversation_item_sent_text_secondary_color" app:footer_reveal_dot_color="@color/conversation_item_sent_text_secondary_color"
app:footer_text_color="@color/conversation_item_sent_text_secondary_color" /> app:footer_text_color="@color/conversation_item_sent_text_secondary_color" />
<org.thoughtcrime.securesms.components.ConversationItemFooter
android:id="@+id/conversation_item_sticker_footer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="2dp"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="@dimen/message_bubble_horizontal_padding"
android:paddingTop="3dp"
android:paddingEnd="@dimen/message_bubble_horizontal_padding"
android:paddingBottom="3dp"
android:visibility="gone"
app:footer_icon_color="@color/signal_icon_tint_secondary"
app:footer_mode="outgoing"
app:footer_reveal_dot_color="@color/signal_icon_tint_secondary"
app:footer_text_color="@color/signal_text_secondary" />
</org.thoughtcrime.securesms.conversation.ConversationItemBodyBubble> </org.thoughtcrime.securesms.conversation.ConversationItemBodyBubble>
<org.thoughtcrime.securesms.components.AlertView <org.thoughtcrime.securesms.components.AlertView