open dialog when clicked on reactions (WIP)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2022-04-01 22:32:04 +02:00
parent 382f17ca55
commit d845422097
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
6 changed files with 112 additions and 5 deletions

View File

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

View File

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

View File

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

View File

@ -110,6 +110,7 @@ import com.nextcloud.talk.adapters.messages.MagicUnreadNoticeMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingLocationMessageViewHolder import com.nextcloud.talk.adapters.messages.OutcomingLocationMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingPreviewMessageViewHolder import com.nextcloud.talk.adapters.messages.OutcomingPreviewMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingVoiceMessageViewHolder 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.TalkMessagesListAdapter
import com.nextcloud.talk.adapters.messages.VoiceMessageInterface import com.nextcloud.talk.adapters.messages.VoiceMessageInterface
import com.nextcloud.talk.api.NcApi 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.bottom.sheet.ProfileBottomSheet
import com.nextcloud.talk.ui.dialog.AttachmentDialog import com.nextcloud.talk.ui.dialog.AttachmentDialog
import com.nextcloud.talk.ui.dialog.MessageActionsDialog 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.MessageSwipeActions
import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
@ -203,7 +205,8 @@ class ChatController(args: Bundle) :
MessagesListAdapter.Formatter<Date>, MessagesListAdapter.Formatter<Date>,
MessagesListAdapter.OnMessageViewLongClickListener<IMessage>, MessagesListAdapter.OnMessageViewLongClickListener<IMessage>,
ContentChecker<ChatMessage>, ContentChecker<ChatMessage>,
VoiceMessageInterface { VoiceMessageInterface,
ReactionsInterface {
private val binding: ControllerChatBinding by viewBinding(ControllerChatBinding::bind) 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") @SuppressLint("LongLogTag")
private fun downloadFileToCache(message: ChatMessage) { private fun downloadFileToCache(message: ChatMessage) {
message.isDownloadingVoiceMessage = true message.isDownloadingVoiceMessage = true

View File

@ -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)
}
}

View File

@ -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>