Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/talk-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hibbe <dev@mhibbe.de>2022-04-07 13:41:35 +0300
committerMarcel Hibbe <dev@mhibbe.de>2022-04-08 10:21:13 +0300
commit36b786616a49b7abc5ba2c9bc2305400c4c8b84b (patch)
tree852f0a10861da7b117f9c4900a63563b816b09db /app/src/main
parentf17e892acdc1c345a01b4d65be28325da586d1ee (diff)
support reactions for TextMessages (in+out) and VoiceMessages (in+out)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt11
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt49
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt12
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt11
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt58
-rw-r--r--app/src/main/java/com/nextcloud/talk/adapters/messages/TalkMessagesListAdapter.java12
-rw-r--r--app/src/main/res/layout/item_custom_incoming_text_message.xml20
-rw-r--r--app/src/main/res/layout/item_custom_incoming_voice_message.xml4
-rw-r--r--app/src/main/res/layout/item_custom_outcoming_text_message.xml4
-rw-r--r--app/src/main/res/layout/item_custom_outcoming_voice_message.xml4
-rw-r--r--app/src/main/res/layout/reactions_inside_message.xml18
11 files changed, 136 insertions, 67 deletions
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt
index 81cd661e2..9e7451306 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt
@@ -74,6 +74,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message
lateinit var message: ChatMessage
lateinit var voiceMessageInterface: VoiceMessageInterface
+ lateinit var reactionsInterface: ReactionsInterface
@SuppressLint("SetTextI18n")
override fun onBind(message: ChatMessage) {
@@ -140,6 +141,12 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message
}
}
})
+
+ Reaction().showReactions(message, binding.reactions, context!!)
+
+ binding.reactions.reactionsEmojiWrapper.setOnClickListener {
+ reactionsInterface.onClickReactions(message)
+ }
}
private fun updateDownloadState(message: ChatMessage) {
@@ -306,6 +313,10 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : Message
this.voiceMessageInterface = voiceMessageInterface
}
+ fun assignReactionInterface(reactionsInterface: ReactionsInterface) {
+ this.reactionsInterface = reactionsInterface
+ }
+
companion object {
private const val TAG = "VoiceInMessageView"
private const val SEEKBAR_START: Int = 0
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt
index 78ebd096b..d97940bd2 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.kt
@@ -36,9 +36,6 @@ import android.text.SpannableString
import android.text.TextUtils
import android.util.TypedValue
import android.view.View
-import android.view.ViewGroup
-import android.widget.RelativeLayout
-import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.ViewCompat
@@ -57,7 +54,6 @@ import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.TextMatchers
import com.nextcloud.talk.utils.preferences.AppPreferences
import com.stfalcon.chatkit.messages.MessageHolders
-import com.vanniktech.emoji.EmojiTextView
import java.util.HashMap
import javax.inject.Inject
@@ -126,44 +122,10 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message
itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.isReplyable)
- binding.reactionsEmojiWrapper.removeAllViews()
- if (message.reactions != null && message.reactions.isNotEmpty()) {
+ Reaction().showReactions(message, binding.reactions, context!!)
- var remainingEmojisToDisplay = MAX_EMOJIS_TO_DISPLAY
- val showInfoAboutMoreEmojis = message.reactions.size > MAX_EMOJIS_TO_DISPLAY
- for ((emoji, amount) in message.reactions) {
- val reactionEmoji = EmojiTextView(context)
- reactionEmoji.text = emoji
-
- val reactionAmount = TextView(context)
- reactionAmount.text = amount.toString()
-
- val params = RelativeLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT
- )
- params.setMargins(
- DisplayUtils.convertDpToPixel(EMOJI_START_MARGIN, context).toInt(),
- 0,
- DisplayUtils.convertDpToPixel(EMOJI_END_MARGIN, context).toInt(),
- 0
- )
- reactionAmount.layoutParams = params
-
- binding.reactionsEmojiWrapper.addView(reactionEmoji)
- binding.reactionsEmojiWrapper.addView(reactionAmount)
-
- remainingEmojisToDisplay--
- if (remainingEmojisToDisplay == 0 && showInfoAboutMoreEmojis) {
- val infoAboutMoreEmojis = TextView(context)
- infoAboutMoreEmojis.text = "..."
- binding.reactionsEmojiWrapper.addView(infoAboutMoreEmojis)
- break
- }
- }
- binding.reactionsEmojiWrapper.setOnClickListener {
- reactionsInterface.onClickReactions(message)
- }
+ binding.reactions.reactionsEmojiWrapper.setOnClickListener {
+ reactionsInterface.onClickReactions(message)
}
}
@@ -306,14 +268,11 @@ class MagicIncomingTextMessageViewHolder(itemView: View, payload: Any) : Message
return messageStringInternal
}
- fun assignAdapter(reactionsInterface: ReactionsInterface) {
+ fun assignReactionInterface(reactionsInterface: ReactionsInterface) {
this.reactionsInterface = reactionsInterface
}
companion object {
const val TEXT_SIZE_MULTIPLIER = 2.5
- const val MAX_EMOJIS_TO_DISPLAY = 4
- const val EMOJI_START_MARGIN: Float = 2F
- const val EMOJI_END_MARGIN: Float = 8F
}
}
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt
index b14c7e251..54951e598 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.kt
@@ -61,6 +61,8 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage
@Inject
var context: Context? = null
+ lateinit var reactionsInterface: ReactionsInterface
+
override fun onBind(message: ChatMessage) {
super.onBind(message)
sharedApplication!!.componentApplication.inject(this)
@@ -118,6 +120,12 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage
binding.checkMark.setContentDescription(readStatusContentDescriptionString)
itemView.setTag(MessageSwipeCallback.REPLYABLE_VIEW_TAG, message.isReplyable)
+
+ Reaction().showReactions(message, binding.reactions, context!!)
+
+ binding.reactions.reactionsEmojiWrapper.setOnClickListener {
+ reactionsInterface.onClickReactions(message)
+ }
}
private fun processParentMessage(message: ChatMessage) {
@@ -204,6 +212,10 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage
return messageString1
}
+ fun assignReactionInterface(reactionsInterface: ReactionsInterface) {
+ this.reactionsInterface = reactionsInterface
+ }
+
companion object {
const val TEXT_SIZE_MULTIPLIER = 2.5
}
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt
index 5cef4fecb..9a3df837f 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt
@@ -69,6 +69,7 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders
lateinit var handler: Handler
lateinit var voiceMessageInterface: VoiceMessageInterface
+ lateinit var reactionsInterface: ReactionsInterface
@SuppressLint("SetTextI18n")
override fun onBind(message: ChatMessage) {
@@ -129,6 +130,12 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders
}
binding.checkMark.setContentDescription(readStatusContentDescriptionString)
+
+ Reaction().showReactions(message, binding.reactions, context!!)
+
+ binding.reactions.reactionsEmojiWrapper.setOnClickListener {
+ reactionsInterface.onClickReactions(message)
+ }
}
private fun handleResetVoiceMessageState(message: ChatMessage) {
@@ -279,6 +286,10 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : MessageHolders
this.voiceMessageInterface = voiceMessageInterface
}
+ fun assignReactionInterface(reactionsInterface: ReactionsInterface) {
+ this.reactionsInterface = reactionsInterface
+ }
+
companion object {
private const val TAG = "VoiceOutMessageView"
private const val SEEKBAR_START: Int = 0
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt
new file mode 100644
index 000000000..d2a896684
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/Reaction.kt
@@ -0,0 +1,58 @@
+package com.nextcloud.talk.adapters.messages
+
+import android.content.Context
+import android.view.ViewGroup
+import android.widget.RelativeLayout
+import android.widget.TextView
+import com.nextcloud.talk.databinding.ReactionsInsideMessageBinding
+import com.nextcloud.talk.models.json.chat.ChatMessage
+import com.nextcloud.talk.utils.DisplayUtils
+import com.vanniktech.emoji.EmojiTextView
+
+class Reaction {
+ fun showReactions(message: ChatMessage, binding: ReactionsInsideMessageBinding, context: Context) {
+ binding.reactionsEmojiWrapper.removeAllViews()
+ if (message.reactions != null && message.reactions.isNotEmpty()) {
+
+ var remainingEmojisToDisplay = MAX_EMOJIS_TO_DISPLAY
+ val showInfoAboutMoreEmojis = message.reactions.size > MAX_EMOJIS_TO_DISPLAY
+ for ((emoji, amount) in message.reactions) {
+ val reactionEmoji = EmojiTextView(context)
+ reactionEmoji.text = emoji
+
+ val reactionAmount = TextView(context)
+ reactionAmount.text = amount.toString()
+
+ val params = RelativeLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ params.setMargins(
+ DisplayUtils.convertDpToPixel(EMOJI_START_MARGIN, context).toInt(),
+ 0,
+ DisplayUtils.convertDpToPixel(EMOJI_END_MARGIN, context).toInt(),
+ 0
+ )
+ reactionAmount.layoutParams = params
+
+ binding.reactionsEmojiWrapper.addView(reactionEmoji)
+ binding.reactionsEmojiWrapper.addView(reactionAmount)
+
+ remainingEmojisToDisplay--
+ if (remainingEmojisToDisplay == 0 && showInfoAboutMoreEmojis) {
+ val infoAboutMoreEmojis = TextView(context)
+ infoAboutMoreEmojis.text = EMOJI_MORE
+ binding.reactionsEmojiWrapper.addView(infoAboutMoreEmojis)
+ break
+ }
+ }
+ }
+ }
+
+ companion object {
+ const val MAX_EMOJIS_TO_DISPLAY = 4
+ const val EMOJI_START_MARGIN: Float = 2F
+ const val EMOJI_END_MARGIN: Float = 8F
+ const val EMOJI_MORE = "..."
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/TalkMessagesListAdapter.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/TalkMessagesListAdapter.java
index 71a914eee..30c3fe51a 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/messages/TalkMessagesListAdapter.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/TalkMessagesListAdapter.java
@@ -49,14 +49,16 @@ public class TalkMessagesListAdapter<M extends IMessage> extends MessagesListAda
public void onBindViewHolder(ViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
- if (holder instanceof IncomingVoiceMessageViewHolder) {
+ if (holder instanceof MagicIncomingTextMessageViewHolder) {
+ ((MagicIncomingTextMessageViewHolder) holder).assignReactionInterface(chatController);
+ } else if (holder instanceof MagicOutcomingTextMessageViewHolder) {
+ ((MagicOutcomingTextMessageViewHolder) holder).assignReactionInterface(chatController);
+ } else if (holder instanceof IncomingVoiceMessageViewHolder) {
((IncomingVoiceMessageViewHolder) holder).assignAdapter(chatController);
+ ((IncomingVoiceMessageViewHolder) holder).assignReactionInterface(chatController);
} else if (holder instanceof OutcomingVoiceMessageViewHolder) {
((OutcomingVoiceMessageViewHolder) holder).assignAdapter(chatController);
- }
-
- if (holder instanceof MagicIncomingTextMessageViewHolder) {
- ((MagicIncomingTextMessageViewHolder) holder).assignAdapter(chatController);
+ ((OutcomingVoiceMessageViewHolder) holder).assignReactionInterface(chatController);
}
}
}
diff --git a/app/src/main/res/layout/item_custom_incoming_text_message.xml b/app/src/main/res/layout/item_custom_incoming_text_message.xml
index 5757999cf..c3cf411e1 100644
--- a/app/src/main/res/layout/item_custom_incoming_text_message.xml
+++ b/app/src/main/res/layout/item_custom_incoming_text_message.xml
@@ -86,23 +86,9 @@
android:textIsSelectable="false"
app:layout_alignSelf="center" />
-
- <LinearLayout
- android:id="@+id/reactions_emoji_wrapper"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_wrapBefore="true"
- android:orientation="horizontal"
- android:layout_marginTop="5dp">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- tools:text="emojis">
- </TextView>
- </LinearLayout>
+ <include
+ android:id="@+id/reactions"
+ layout="@layout/reactions_inside_message" />
</com.google.android.flexbox.FlexboxLayout>
-
-
-
</RelativeLayout>
diff --git a/app/src/main/res/layout/item_custom_incoming_voice_message.xml b/app/src/main/res/layout/item_custom_incoming_voice_message.xml
index 60598050b..3002c1eba 100644
--- a/app/src/main/res/layout/item_custom_incoming_voice_message.xml
+++ b/app/src/main/res/layout/item_custom_incoming_voice_message.xml
@@ -108,5 +108,9 @@
app:layout_alignSelf="center"
tools:text="12:38"/>
+ <include
+ android:id="@+id/reactions"
+ layout="@layout/reactions_inside_message" />
+
</com.google.android.flexbox.FlexboxLayout>
</RelativeLayout>
diff --git a/app/src/main/res/layout/item_custom_outcoming_text_message.xml b/app/src/main/res/layout/item_custom_outcoming_text_message.xml
index ab8cf1ec1..31ebd5342 100644
--- a/app/src/main/res/layout/item_custom_outcoming_text_message.xml
+++ b/app/src/main/res/layout/item_custom_outcoming_text_message.xml
@@ -76,5 +76,9 @@
android:contentDescription="@null"
app:layout_alignSelf="center" />
+ <include
+ android:id="@+id/reactions"
+ layout="@layout/reactions_inside_message" />
+
</com.google.android.flexbox.FlexboxLayout>
</RelativeLayout>
diff --git a/app/src/main/res/layout/item_custom_outcoming_voice_message.xml b/app/src/main/res/layout/item_custom_outcoming_voice_message.xml
index bc412aa13..555b6ff53 100644
--- a/app/src/main/res/layout/item_custom_outcoming_voice_message.xml
+++ b/app/src/main/res/layout/item_custom_outcoming_voice_message.xml
@@ -104,5 +104,9 @@
app:layout_alignSelf="center"
android:contentDescription="@null" />
+ <include
+ android:id="@+id/reactions"
+ layout="@layout/reactions_inside_message" />
+
</com.google.android.flexbox.FlexboxLayout>
</RelativeLayout>
diff --git a/app/src/main/res/layout/reactions_inside_message.xml b/app/src/main/res/layout/reactions_inside_message.xml
new file mode 100644
index 000000000..c63039fe7
--- /dev/null
+++ b/app/src/main/res/layout/reactions_inside_message.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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:id="@+id/reactions_emoji_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="5dp"
+ app:layout_alignSelf="flex_start"
+ app:layout_flexGrow="1"
+ app:layout_wrapBefore="true">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ tools:text="emojis">
+ </TextView>
+</LinearLayout> \ No newline at end of file