Forráskód Böngészése

open dialog when clicked on reactions (WIP)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 3 éve
szülő
commit
d845422097

+ 9 - 4
app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt

@@ -42,10 +42,6 @@ import android.widget.TextView
 import androidx.core.content.ContextCompat
 import androidx.core.content.res.ResourcesCompat
 import androidx.core.view.ViewCompat
-import androidx.core.view.children
-import androidx.core.view.get
-import androidx.core.view.marginEnd
-import androidx.core.view.updateLayoutParams
 import autodagger.AutoInjector
 import coil.load
 import com.amulyakhare.textdrawable.TextDrawable
@@ -79,6 +75,8 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message
     @Inject
     var appPreferences: AppPreferences? = null
 
+    lateinit var reactionsInterface: ReactionsInterface
+
     override fun onBind(message: ChatMessage) {
         super.onBind(message)
         sharedApplication!!.componentApplication.inject(this)
@@ -158,6 +156,9 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message
                     break
                 }
             }
+            binding.reactionsEmojiWrapper.setOnClickListener {
+                reactionsInterface.onClickReactions(message)
+            }
         }
     }
 
@@ -300,6 +301,10 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message
         return messageStringInternal
     }
 
+    fun assignAdapter(reactionsInterface: ReactionsInterface) {
+        this.reactionsInterface = reactionsInterface
+    }
+
     companion object {
         const val TEXT_SIZE_MULTIPLIER = 2.5
         const val MAX_EMOJIS_TO_DISPLAY = 4

+ 7 - 0
app/src/main/java/com/nextcloud/talk/adapters/messages/ReactionsInterface.kt

@@ -0,0 +1,7 @@
+package com.nextcloud.talk.adapters.messages
+
+import com.nextcloud.talk.models.json.chat.ChatMessage
+
+interface ReactionsInterface {
+    fun onClickReactions(message: ChatMessage)
+}

+ 4 - 0
app/src/main/java/com/nextcloud/talk/adapters/messages/TalkMessagesListAdapter.java

@@ -54,5 +54,9 @@ public class TalkMessagesListAdapter<M extends IMessage> extends MessagesListAda
         } else if (holder instanceof OutcomingVoiceMessageViewHolder) {
             ((OutcomingVoiceMessageViewHolder) holder).assignAdapter(chatController);
         }
+
+        if (holder instanceof MagicIncomingTextMessageViewHolder) {
+            ((MagicIncomingTextMessageViewHolder) holder).assignAdapter(chatController);
+        }
     }
 }

+ 14 - 1
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -110,6 +110,7 @@ import com.nextcloud.talk.adapters.messages.MagicUnreadNoticeMessageViewHolder
 import com.nextcloud.talk.adapters.messages.OutcomingLocationMessageViewHolder
 import com.nextcloud.talk.adapters.messages.OutcomingPreviewMessageViewHolder
 import com.nextcloud.talk.adapters.messages.OutcomingVoiceMessageViewHolder
+import com.nextcloud.talk.adapters.messages.ReactionsInterface
 import com.nextcloud.talk.adapters.messages.TalkMessagesListAdapter
 import com.nextcloud.talk.adapters.messages.VoiceMessageInterface
 import com.nextcloud.talk.api.NcApi
@@ -139,6 +140,7 @@ import com.nextcloud.talk.presenters.MentionAutocompletePresenter
 import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet
 import com.nextcloud.talk.ui.dialog.AttachmentDialog
 import com.nextcloud.talk.ui.dialog.MessageActionsDialog
+import com.nextcloud.talk.ui.dialog.ShowReactionsDialog
 import com.nextcloud.talk.ui.recyclerview.MessageSwipeActions
 import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback
 import com.nextcloud.talk.utils.ApiUtils
@@ -203,7 +205,8 @@ class ChatController(args: Bundle) :
     MessagesListAdapter.Formatter<Date>,
     MessagesListAdapter.OnMessageViewLongClickListener<IMessage>,
     ContentChecker<ChatMessage>,
-    VoiceMessageInterface {
+    VoiceMessageInterface,
+    ReactionsInterface {
 
     private val binding: ControllerChatBinding by viewBinding(ControllerChatBinding::bind)
 
@@ -919,6 +922,16 @@ class ChatController(args: Bundle) :
         }
     }
 
+    override fun onClickReactions(chatMessage: ChatMessage) {
+        Log.d(TAG, "onClickReactions" + chatMessage)
+
+        activity?.let {
+            ShowReactionsDialog(
+                activity!!
+            ).show()
+        }
+    }
+
     @SuppressLint("LongLogTag")
     private fun downloadFileToCache(message: ChatMessage) {
         message.isDownloadingVoiceMessage = true

+ 23 - 0
app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt

@@ -0,0 +1,23 @@
+package com.nextcloud.talk.ui.dialog
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.ViewGroup
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.nextcloud.talk.databinding.DialogMessageActionsBinding
+import com.nextcloud.talk.databinding.DialogMessageReactionsBinding
+
+class ShowReactionsDialog(
+    val activity: Activity
+) : BottomSheetDialog(activity) {
+
+    private lateinit var dialogMessageReactionsBinding: DialogMessageReactionsBinding
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        dialogMessageReactionsBinding = DialogMessageReactionsBinding.inflate(layoutInflater)
+        setContentView(dialogMessageReactionsBinding.root)
+        window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
+    }
+
+}

+ 55 - 0
app/src/main/res/layout/dialog_message_reactions.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Nextcloud Talk application
+  ~
+  ~ @author Andy Scherzinger
+  ~ Copyright (C) 2022 Andy Scherzinger <info@andy-scherzinger.de>
+  ~
+  ~ This program is free software: you can redistribute it and/or modify
+  ~ it under the terms of the GNU General Public License as published by
+  ~ the Free Software Foundation, either version 3 of the License, or
+  ~ at your option) any later version.
+  ~
+  ~ This program is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  ~ GNU General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU General Public License
+  ~ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/bg_bottom_sheet"
+    android:orientation="vertical"
+    android:paddingStart="@dimen/standard_padding"
+    android:paddingEnd="@dimen/standard_padding"
+    android:paddingBottom="@dimen/standard_half_padding">
+
+    <LinearLayout
+        android:id="@+id/menu_copy_message"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/bottom_sheet_item_height"
+        android:background="?android:attr/selectableItemBackground"
+        android:gravity="center_vertical"
+        android:orientation="horizontal"
+        tools:ignore="UseCompoundDrawables">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/test"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="start|center_vertical"
+            android:paddingStart="@dimen/standard_double_padding"
+            android:paddingEnd="@dimen/zero"
+            android:text="just a test"
+            android:textAlignment="viewStart"
+            android:textColor="@color/high_emphasis_text"
+            android:textSize="@dimen/bottom_sheet_text_size" />
+
+    </LinearLayout>
+
+</LinearLayout>