diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt index cf2ff3831..a7ab5a0c3 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt @@ -135,6 +135,8 @@ class MessageModel val text = MutableLiveData() + val isTextEmoji = MutableLiveData() + val reactions = MutableLiveData() val ourReactionIndex = MutableLiveData() @@ -655,6 +657,13 @@ class MessageModel val textContent = content.utf8Text.orEmpty().trim() val spannableBuilder = SpannableStringBuilder(textContent) + val emojiOnly = AppUtils.isTextOnlyContainsEmoji(textContent) + isTextEmoji.postValue(emojiOnly) + if (emojiOnly) { + text.postValue(spannableBuilder) + return + } + // Check for search if (highlight.isNotEmpty()) { val indexStart = textContent.indexOf(highlight, 0, ignoreCase = true) diff --git a/app/src/main/java/org/linphone/utils/AndroidUtils.kt b/app/src/main/java/org/linphone/utils/AndroidUtils.kt index 6849c0a1f..a221bf214 100644 --- a/app/src/main/java/org/linphone/utils/AndroidUtils.kt +++ b/app/src/main/java/org/linphone/utils/AndroidUtils.kt @@ -154,6 +154,21 @@ class AppUtils { return initials } + @AnyThread + fun isTextOnlyContainsEmoji(text: String): Boolean { + if (text.isEmpty()) return false + + var textToCheck = text + do { + var firstSymbol = extractFirstSymbol(textToCheck) + var symbolLength = firstSymbol.length + if (symbolLength <= 1) return false + textToCheck = textToCheck.substring(symbolLength) + } while (textToCheck.isNotEmpty()) + + return true + } + @AnyThread fun getDeviceName(context: Context): String { var name = Settings.Global.getString( diff --git a/app/src/main/res/layout/chat_bubble_incoming.xml b/app/src/main/res/layout/chat_bubble_incoming.xml index 765616b4f..221818d09 100644 --- a/app/src/main/res/layout/chat_bubble_incoming.xml +++ b/app/src/main/res/layout/chat_bubble_incoming.xml @@ -230,7 +230,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{model.text, default=`Lorem ipsum dolor sit amet`}" - android:textSize="14sp" + android:textSize="@{model.isTextEmoji ? @dimen/chat_bubble_emoji_only_text_size : @dimen/chat_bubble_text_size, default=@dimen/chat_bubble_text_size}" android:textColor="?attr/color_main2_800" android:gravity="center_vertical|start" android:visibility="@{model.text.length() > 0 ? View.VISIBLE : View.GONE}"/> diff --git a/app/src/main/res/layout/chat_bubble_outgoing.xml b/app/src/main/res/layout/chat_bubble_outgoing.xml index 24bc86e16..0b93d3e54 100644 --- a/app/src/main/res/layout/chat_bubble_outgoing.xml +++ b/app/src/main/res/layout/chat_bubble_outgoing.xml @@ -202,7 +202,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{model.text, default=`Lorem ipsum dolor sit amet`}" - android:textSize="14sp" + android:textSize="@{model.isTextEmoji ? @dimen/chat_bubble_emoji_only_text_size : @dimen/chat_bubble_text_size, default=@dimen/chat_bubble_text_size}" android:textColor="?attr/color_main2_800" android:gravity="center_vertical|start" android:visibility="@{model.text.length() > 0 ? View.VISIBLE : View.GONE}"/> diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index 0c4d10b8a..2adc47c2e 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -84,6 +84,8 @@ 8dp 2dp 8dp + 14sp + 45sp 25dp 175dp 87dp