Add "all" tab for reactions

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-04-07 17:47:43 +02:00 committed by Marcel Hibbe
parent 357c67db83
commit 6bda280d15
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
3 changed files with 32 additions and 12 deletions

View File

@ -29,6 +29,7 @@ package com.nextcloud.talk.ui.dialog
import android.app.Activity import android.app.Activity
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.NonNull import androidx.annotation.NonNull
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -36,6 +37,7 @@ import autodagger.AutoInjector
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.ReactionItem import com.nextcloud.talk.adapters.ReactionItem
import com.nextcloud.talk.adapters.ReactionItemClickListener import com.nextcloud.talk.adapters.ReactionItemClickListener
import com.nextcloud.talk.adapters.ReactionsAdapter import com.nextcloud.talk.adapters.ReactionsAdapter
@ -47,12 +49,14 @@ import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.models.json.reactions.ReactionVoter
import com.nextcloud.talk.models.json.reactions.ReactionsOverall import com.nextcloud.talk.models.json.reactions.ReactionsOverall
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import java.util.HashMap
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class ShowReactionsDialog( class ShowReactionsDialog(
@ -67,6 +71,8 @@ class ShowReactionsDialog(
private var adapter: ReactionsAdapter? = null private var adapter: ReactionsAdapter? = null
private val TAG_ALL: String? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = DialogMessageReactionsBinding.inflate(layoutInflater) binding = DialogMessageReactionsBinding.inflate(layoutInflater)
@ -81,13 +87,9 @@ class ShowReactionsDialog(
private fun initEmojiReactions() { private fun initEmojiReactions() {
adapter?.list?.clear() adapter?.list?.clear()
if (chatMessage.reactions != null && chatMessage.reactions.isNotEmpty()) { if (chatMessage.reactions != null && chatMessage.reactions.isNotEmpty()) {
var reactionsTotal = 0
var firstEmoji = ""
for ((emoji, amount) in chatMessage.reactions) { for ((emoji, amount) in chatMessage.reactions) {
if (firstEmoji.isEmpty()) { reactionsTotal = reactionsTotal.plus(amount as Int)
firstEmoji = emoji
}
val tab: TabLayout.Tab = binding.emojiReactionsTabs.newTab() // Create a new Tab names "First Tab" val tab: TabLayout.Tab = binding.emojiReactionsTabs.newTab() // Create a new Tab names "First Tab"
val itemBinding = ItemReactionsTabBinding.inflate(layoutInflater) val itemBinding = ItemReactionsTabBinding.inflate(layoutInflater)
@ -98,7 +100,6 @@ class ShowReactionsDialog(
binding.emojiReactionsTabs.addTab(tab) binding.emojiReactionsTabs.addTab(tab)
} }
updateParticipantsForEmoji(chatMessage, firstEmoji)
binding.emojiReactionsTabs.getTabAt(0)?.select() binding.emojiReactionsTabs.getTabAt(0)?.select()
@ -116,6 +117,18 @@ class ShowReactionsDialog(
// called when a tab is reselected // called when a tab is reselected
} }
}) })
val tab: TabLayout.Tab = binding.emojiReactionsTabs.newTab() // Create a new Tab names "First Tab"
val itemBinding = ItemReactionsTabBinding.inflate(layoutInflater)
itemBinding.reactionTab.tag = TAG_ALL
itemBinding.reactionIcon.text = context.getString(R.string.reactions_tab_all)
itemBinding.reactionCount.text = reactionsTotal.toString()
tab.customView = itemBinding.root
binding.emojiReactionsTabs.addTab(tab, 0)
updateParticipantsForEmoji(chatMessage, TAG_ALL)
} }
adapter?.notifyDataSetChanged() adapter?.notifyDataSetChanged()
} }
@ -144,9 +157,13 @@ class ShowReactionsDialog(
override fun onNext(@NonNull reactionsOverall: ReactionsOverall) { override fun onNext(@NonNull reactionsOverall: ReactionsOverall) {
val reactionVoters: ArrayList<ReactionItem> = ArrayList() val reactionVoters: ArrayList<ReactionItem> = ArrayList()
if (reactionsOverall.ocs?.data != null) { if (reactionsOverall.ocs?.data != null) {
for (reactionVoter in reactionsOverall.ocs?.data!![emoji]!!) { val map = reactionsOverall.ocs?.data
reactionVoters.add(ReactionItem(reactionVoter, emoji)) for (key in map!!.keys) {
for (reactionVoter in reactionsOverall.ocs?.data!![key]!!) {
reactionVoters.add(ReactionItem(reactionVoter, key))
}
} }
adapter?.list?.addAll(reactionVoters) adapter?.list?.addAll(reactionVoters)
adapter?.notifyDataSetChanged() adapter?.notifyDataSetChanged()
} else { } else {

View File

@ -21,17 +21,18 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/reaction_tab" android:id="@+id/reaction_tab"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:gravity="center">
<androidx.emoji.widget.EmojiTextView <androidx.emoji.widget.EmojiTextView
android:id="@+id/reaction_icon" android:id="@+id/reaction_icon"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:textColor="@color/textColorMaxContrast"
android:textIsSelectable="false" android:textIsSelectable="false"
android:textSize="14sp" android:textSize="14sp"
android:textStyle="bold"
tools:text="@string/default_emoji" /> tools:text="@string/default_emoji" />
<TextView <TextView

View File

@ -513,4 +513,6 @@
<string name="audio_output_dialog_headline">Audio output</string> <string name="audio_output_dialog_headline">Audio output</string>
<string name="audio_output_wired_headset">Wired headset</string> <string name="audio_output_wired_headset">Wired headset</string>
<string name="reactions_tab_all">All</string>
</resources> </resources>