diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java index 6eccac37b..0e47d14a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiUtil.java @@ -54,6 +54,10 @@ public final class EmojiUtil { return canonical != null ? canonical : emoji; } + public static boolean isCanonicallyEqual(@NonNull String left, @NonNull String right) { + return getCanonicalRepresentation(left).equals(getCanonicalRepresentation(right)); + } + /** * Converts the provided emoji string into a single drawable, if possible. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java index 259743001..1eacc36cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java @@ -612,7 +612,7 @@ public final class ConversationReactionOverlay extends FrameLayout { view.setTranslationY(0); boolean isAtCustomIndex = i == customEmojiIndex; - boolean isNotAtCustomIndexAndOldEmojiMatches = !isAtCustomIndex && oldEmoji != null && emojis.get(i).equals(EmojiUtil.getCanonicalRepresentation(oldEmoji)); + boolean isNotAtCustomIndexAndOldEmojiMatches = !isAtCustomIndex && oldEmoji != null && EmojiUtil.isCanonicallyEqual(emojis.get(i), oldEmoji); boolean isAtCustomIndexAndOldEmojiExists = isAtCustomIndex && oldEmoji != null; if (!foundSelected && diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/edit/EditReactionsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/reactions/edit/EditReactionsViewModel.kt index abaa8f516..d77c42eb3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/edit/EditReactionsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/edit/EditReactionsViewModel.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.reactions.edit import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import org.signal.core.util.concurrent.SignalExecutors +import org.thoughtcrime.securesms.components.emoji.EmojiUtil import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.keyvalue.EmojiValues import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -26,6 +27,9 @@ class EditReactionsViewModel : ViewModel() { fun onEmojiSelected(emoji: String) { store.update { state -> if (state.selection != NO_SELECTION && state.selection in state.reactions.indices) { + if (emoji != EmojiUtil.getCanonicalRepresentation(emoji)) { + emojiValues.setPreferredVariation(emoji) + } val preferredEmoji: String = emojiValues.getPreferredVariation(emoji) val newReactions: List = state.reactions.toMutableList().apply { set(state.selection, preferredEmoji) } state.copy(reactions = newReactions) diff --git a/app/src/main/res/layout/conversation_reaction_scrubber.xml b/app/src/main/res/layout/conversation_reaction_scrubber.xml index f73431f0a..78dd84480 100644 --- a/app/src/main/res/layout/conversation_reaction_scrubber.xml +++ b/app/src/main/res/layout/conversation_reaction_scrubber.xml @@ -5,12 +5,12 @@ android:id="@+id/conversation_reaction_scrubber" android:layout_width="0dp" android:layout_height="0dp" - app:layout_constraintTop_toTopOf="@+id/status_bar_guideline" - app:layout_constraintStart_toStartOf="@+id/parent_start_guideline" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@+id/parent_end_guideline" android:elevation="1000dp" android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="@+id/parent_end_guideline" + app:layout_constraintStart_toStartOf="@+id/parent_start_guideline" + app:layout_constraintTop_toTopOf="@+id/status_bar_guideline" tools:visibility="visible">