From e3c12802781fd6d2da7320e0a4d0419cf72540df Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 16 Oct 2023 09:35:05 +0200 Subject: [PATCH] No longer move chat message position in long press dialog to match position in list + disabled emojis & reply action if chat room is read only --- app/build.gradle | 2 +- .../chat/adapter/ConversationEventAdapter.kt | 7 +-- .../chat/fragment/ConversationFragment.kt | 26 ++--------- .../ui/main/chat/model/ChatMessageModel.kt | 2 + .../chat_conversation_long_press_menu.xml | 43 ++++++++++++------- 5 files changed, 35 insertions(+), 45 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8c888265f..50a6a4ca0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -102,7 +102,7 @@ dependencies { // https://github.com/tommybuonomo/dotsindicator/blob/master/LICENSE Apache v2.0 implementation("com.tbuonomo:dotsindicator:5.0") - implementation platform('com.google.firebase:firebase-bom:32.2.3') + implementation platform('com.google.firebase:firebase-bom:32.3.1') implementation 'com.google.firebase:firebase-messaging' //noinspection GradleDynamicVersion diff --git a/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt b/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt index b4bd4e32d..1032e5a7e 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/adapter/ConversationEventAdapter.kt @@ -45,7 +45,7 @@ class ConversationEventAdapter( const val EVENT = 3 } - val chatMessageLongPressEvent = MutableLiveData>>() + val chatMessageLongPressEvent = MutableLiveData>() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { @@ -112,10 +112,7 @@ class ConversationEventAdapter( model = message setOnLongClickListener { - val screen = IntArray(2) - root.getLocationOnScreen(screen) - - chatMessageLongPressEvent.value = Event(Pair(message, screen[1])) + chatMessageLongPressEvent.value = Event(message) true } 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 9c126f4aa..dd17d0b08 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 @@ -23,7 +23,6 @@ import android.app.Dialog import android.content.ClipData import android.content.ClipboardManager import android.content.Context -import android.graphics.Rect import android.graphics.RenderEffect import android.graphics.Shader import android.graphics.drawable.ColorDrawable @@ -35,7 +34,6 @@ import android.view.ViewGroup import android.view.Window import android.view.WindowManager import androidx.annotation.UiThread -import androidx.constraintlayout.widget.ConstraintSet import androidx.core.view.doOnPreDraw import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider @@ -43,8 +41,6 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.bottomsheet.BottomSheetBehavior -import kotlin.math.max -import kotlin.math.min import org.linphone.R import org.linphone.core.tools.Log import org.linphone.databinding.ChatConversationFragmentBinding @@ -135,8 +131,8 @@ class ConversationFragment : GenericFragment() { binding.eventsList.layoutManager = layoutManager adapter.chatMessageLongPressEvent.observe(viewLifecycleOwner) { - it.consume { pair -> - showChatMessageLongPressMenu(pair.first, pair.second) + it.consume { model -> + showChatMessageLongPressMenu(model) } } @@ -174,7 +170,7 @@ class ConversationFragment : GenericFragment() { } } - private fun showChatMessageLongPressMenu(chatMessageModel: ChatMessageModel, yPosition: Int) { + private fun showChatMessageLongPressMenu(chatMessageModel: ChatMessageModel) { // TODO: handle backward compat for blurring val blurEffect = RenderEffect.createBlurEffect(16F, 16F, Shader.TileMode.MIRROR) binding.root.setRenderEffect(blurEffect) @@ -216,22 +212,6 @@ class ConversationFragment : GenericFragment() { dialog.dismiss() } - val screenY = yPosition - AppUtils.getDimension( - R.dimen.chat_bubble_long_press_menu_bubble_offset - ) - val rect = Rect() - binding.root.getGlobalVisibleRect(rect) - val height = rect.height() - val percent = ((screenY * 100) / height) - // To prevent bubble from being behind the bottom actions or the emojis to be out of the screen - val guideline = min(max(0.1f, (percent / 100)), 0.4f) // value must be between 0 and 1 - - val constraintLayout = layout.constraintLayout - val set = ConstraintSet() - set.clone(constraintLayout) - set.setGuidelinePercent(R.id.guideline, guideline) - set.applyTo(constraintLayout) - dialog.setContentView(layout.root) dialog.setOnDismissListener { binding.root.setRenderEffect(null) 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 08a038887..e295ab11b 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 @@ -55,6 +55,8 @@ class ChatMessageModel @WorkerThread constructor( val time = TimestampUtils.toString(chatMessage.time) + val chatRoomIsReadOnly = chatMessage.chatRoom.isReadOnly + val dismissLongPressMenuEvent: MutableLiveData> by lazy { MutableLiveData>() } 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 index 224f8ce47..8608a65dd 100644 --- a/app/src/main/res/layout/chat_conversation_long_press_menu.xml +++ b/app/src/main/res/layout/chat_conversation_long_press_menu.xml @@ -4,9 +4,15 @@ + + @@ -23,12 +29,12 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + app:constraint_referenced_ids="thumbs_up, love, laughing, surprised, tear, plus, emojis_background" + android:visibility="@{model.chatRoomIsReadOnly ? View.GONE : View.VISIBLE}" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@id/bubble"/> @@ -149,11 +157,13 @@ app:layout_constraintBottom_toBottomOf="parent" />