diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index 60406998d..9ae493acd 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -54,8 +54,8 @@ import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.core.ChatMessage import org.linphone.core.tools.Log +import org.linphone.databinding.ChatBubbleLongPressMenuBinding import org.linphone.databinding.ChatConversationFragmentBinding -import org.linphone.databinding.ChatConversationLongPressMenuBinding import org.linphone.ui.main.chat.adapter.ChatMessageBottomSheetAdapter import org.linphone.ui.main.chat.adapter.ConversationEventAdapter import org.linphone.ui.main.chat.model.ChatMessageDeliveryModel @@ -278,9 +278,9 @@ class ConversationFragment : GenericFragment() { val dialog = Dialog(requireContext(), R.style.Theme_LinphoneDialog) dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - val layout: ChatConversationLongPressMenuBinding = DataBindingUtil.inflate( + val layout: ChatBubbleLongPressMenuBinding = DataBindingUtil.inflate( LayoutInflater.from(context), - R.layout.chat_conversation_long_press_menu, + R.layout.chat_bubble_long_press_menu, null, false ) @@ -304,7 +304,8 @@ class ConversationFragment : GenericFragment() { } layout.setPickEmojiClickListener { - layout.emojiPicker.visibility = View.VISIBLE + val emojiSheetBehavior = BottomSheetBehavior.from(layout.emojiPickerBottomSheet.root) + emojiSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED } layout.model = chatMessageModel diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt index 4c0f5299c..dd8151e3d 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ChatMessageModel.kt @@ -111,10 +111,19 @@ class ChatMessageModel @WorkerThread constructor( var reactionsList = "" val allReactions = chatMessage.reactions + var sameReactionTwiceOrMore = false if (allReactions.isNotEmpty()) { for (reaction in allReactions) { val body = reaction.body - reactionsList += body + if (!reactionsList.contains(body)) { + reactionsList += body + } else { + sameReactionTwiceOrMore = true + } + } + + if (sameReactionTwiceOrMore) { + reactionsList += allReactions.size.toString() } } diff --git a/app/src/main/res/drawable/shape_chat_bubble_reactions_incoming_background.xml b/app/src/main/res/drawable/shape_chat_bubble_reactions_incoming_background.xml new file mode 100644 index 000000000..1389886ba --- /dev/null +++ b/app/src/main/res/drawable/shape_chat_bubble_reactions_incoming_background.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_chat_bubble_reactions_outgoing_background.xml b/app/src/main/res/drawable/shape_chat_bubble_reactions_outgoing_background.xml new file mode 100644 index 000000000..7ad1af3dc --- /dev/null +++ b/app/src/main/res/drawable/shape_chat_bubble_reactions_outgoing_background.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/chat_bubble_emoji_picker_bottom_sheet.xml b/app/src/main/res/layout/chat_bubble_emoji_picker_bottom_sheet.xml new file mode 100644 index 000000000..415c57568 --- /dev/null +++ b/app/src/main/res/layout/chat_bubble_emoji_picker_bottom_sheet.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/chat_bubble_incoming.xml b/app/src/main/res/layout/chat_bubble_incoming.xml index d4bfc2020..d70d0f78d 100644 --- a/app/src/main/res/layout/chat_bubble_incoming.xml +++ b/app/src/main/res/layout/chat_bubble_incoming.xml @@ -136,17 +136,20 @@ android:onClick="@{showReactionInfoClickListener}" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:padding="2dp" - android:layout_marginTop="-10dp" - android:layout_marginStart="5dp" - android:layout_marginEnd="5dp" + android:layout_marginTop="-5dp" + android:layout_marginStart="-35dp" android:layout_marginBottom="5dp" android:orientation="horizontal" + android:background="@drawable/shape_chat_bubble_reactions_incoming_background" android:text="@{model.reactions, default=@string/emoji_love}" - android:textSize="20sp" + android:textSize="15sp" android:textColor="@color/gray_main2_600" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:paddingTop="12dp" + android:paddingBottom="12dp" android:visibility="@{model.reactions.length() > 0 ? View.VISIBLE : View.GONE, default=gone}" - app:layout_constraintStart_toStartOf="@id/background" + app:layout_constraintStart_toEndOf="@id/background" app:layout_constraintTop_toBottomOf="@id/background" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout/chat_bubble_long_press_menu.xml b/app/src/main/res/layout/chat_bubble_long_press_menu.xml new file mode 100644 index 000000000..61e5194d5 --- /dev/null +++ b/app/src/main/res/layout/chat_bubble_long_press_menu.xml @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/chat_bubble_outgoing.xml b/app/src/main/res/layout/chat_bubble_outgoing.xml index 65d36d466..c25591430 100644 --- a/app/src/main/res/layout/chat_bubble_outgoing.xml +++ b/app/src/main/res/layout/chat_bubble_outgoing.xml @@ -99,17 +99,21 @@ android:onClick="@{showReactionInfoClickListener}" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:padding="2dp" android:layout_marginTop="-10dp" android:layout_marginStart="5dp" android:layout_marginEnd="5dp" android:layout_marginBottom="5dp" android:orientation="horizontal" + android:background="@drawable/shape_chat_bubble_reactions_outgoing_background" android:text="@{model.reactions, default=@string/emoji_love}" android:textSize="20sp" android:textColor="@color/gray_main2_600" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:paddingTop="12dp" + android:paddingBottom="12dp" android:visibility="@{model.reactions.length() > 0 ? View.VISIBLE : View.GONE, default=gone}" - app:layout_constraintStart_toStartOf="@id/background" + app:layout_constraintEnd_toEndOf="@id/background" app:layout_constraintTop_toBottomOf="@id/background" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout/chat_conversation_long_press_menu.xml b/app/src/main/res/layout/chat_conversation_long_press_menu.xml deleted file mode 100644 index cd100df1b..000000000 --- a/app/src/main/res/layout/chat_conversation_long_press_menu.xml +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index 9dc1c5dc4..a9411a06c 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -66,4 +66,5 @@ 30sp 290dp + 425dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 11240f41d..07525e52c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -365,12 +365,12 @@ Give admin rights Remove admin rights - Read (%s) - Received (%s) - Sent (%s) - Error (%s) - Reactions (%s) - %s (%s) + Read %s + Received %s + Sent %s + Error %s + Reactions %s + %s %s No meeting for the moment… New meeting