replace emoji selection with tab layout

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-04-07 00:01:20 +02:00 committed by Marcel Hibbe
parent 2f16c1c646
commit 500d651d69
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
3 changed files with 82 additions and 46 deletions

View File

@ -29,27 +29,26 @@ 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.Gravity
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.annotation.NonNull import androidx.annotation.NonNull
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import autodagger.AutoInjector 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.OnTabSelectedListener
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
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.databinding.DialogMessageReactionsBinding import com.nextcloud.talk.databinding.DialogMessageReactionsBinding
import com.nextcloud.talk.databinding.ItemReactionsTabBinding
import com.nextcloud.talk.models.database.UserEntity 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.ReactionsOverall import com.nextcloud.talk.models.json.reactions.ReactionsOverall
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.vanniktech.emoji.EmojiTextView
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
@ -57,7 +56,7 @@ import io.reactivex.schedulers.Schedulers
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class ShowReactionsDialog( class ShowReactionsDialog(
private val activity: Activity, activity: Activity,
private val currentConversation: Conversation?, private val currentConversation: Conversation?,
private val chatMessage: ChatMessage, private val chatMessage: ChatMessage,
private val userEntity: UserEntity?, private val userEntity: UserEntity?,
@ -89,31 +88,34 @@ class ShowReactionsDialog(
firstEmoji = emoji firstEmoji = emoji
} }
val emojiView = EmojiTextView(activity) val tab: TabLayout.Tab = binding.emojiReactionsTabs.newTab() // Create a new Tab names "First Tab"
emojiView.setEmojiSize(DisplayUtils.convertDpToPixel(EMOJI_SIZE, context).toInt())
emojiView.text = emoji
val params = LinearLayout.LayoutParams( val itemBinding = ItemReactionsTabBinding.inflate(layoutInflater)
ViewGroup.LayoutParams.WRAP_CONTENT, itemBinding.reactionTab.tag = emoji
ViewGroup.LayoutParams.WRAP_CONTENT itemBinding.reactionIcon.text = emoji
) itemBinding.reactionCount.text = amount.toString()
params.setMargins( tab.customView = itemBinding.root
DisplayUtils.convertDpToPixel(EMOJI_MARGIN, context).toInt(),
0,
DisplayUtils.convertDpToPixel(EMOJI_MARGIN, context).toInt(),
0
)
params.gravity = Gravity.CENTER
emojiView.layoutParams = params
binding.emojiReactionsWrapper.addView(emojiView) binding.emojiReactionsTabs.addTab(tab)
emojiView.setOnClickListener {
updateParticipantsForEmoji(chatMessage, emoji)
// emojiView.setBackgroundColor(context.resources.getColor(R.color.colorPrimary))
}
} }
updateParticipantsForEmoji(chatMessage, firstEmoji) updateParticipantsForEmoji(chatMessage, firstEmoji)
binding.emojiReactionsTabs.getTabAt(0)?.select()
binding.emojiReactionsTabs.addOnTabSelectedListener(object : OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
// called when a tab is reselected
updateParticipantsForEmoji(chatMessage, tab.customView?.tag as String?)
}
override fun onTabUnselected(tab: TabLayout.Tab) {
// called when a tab is reselected
}
override fun onTabReselected(tab: TabLayout.Tab) {
// called when a tab is reselected
}
})
} }
adapter?.notifyDataSetChanged() adapter?.notifyDataSetChanged()
} }
@ -162,9 +164,7 @@ class ShowReactionsDialog(
} }
override fun onClick(reactionItem: ReactionItem) { override fun onClick(reactionItem: ReactionItem) {
Log.d(TAG, "onClick(reactionItem: ReactionItem): " + reactionItem.reaction) if (reactionItem.reactionVoter.actorId?.equals(userEntity?.userId) == true) {
if (reactionItem.reactionVoter.actorId.equals(userEntity!!.userId)){
deleteReaction(chatMessage, reactionItem.reaction!!) deleteReaction(chatMessage, reactionItem.reaction!!)
} }
@ -205,7 +205,5 @@ class ShowReactionsDialog(
companion object { companion object {
const val TAG = "ShowReactionsDialog" const val TAG = "ShowReactionsDialog"
const val EMOJI_MARGIN: Float = 8F
const val EMOJI_SIZE: Float = 30F
} }
} }

View File

@ -21,11 +21,11 @@
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <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" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical">
android:paddingBottom="@dimen/standard_half_padding">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/reactions_list" android:id="@+id/reactions_list"
@ -33,18 +33,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:listitem="@layout/reaction_item" /> tools:listitem="@layout/reaction_item" />
<HorizontalScrollView <com.google.android.material.tabs.TabLayout
android:layout_width="match_parent" android:id="@+id/emoji_reactions_tabs"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_gravity="center"> android:layout_height="@dimen/min_size_clickable_area"
app:tabGravity="fill"
<LinearLayout app:tabMode="scrollable" />
android:id="@+id/emoji_reactions_wrapper"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="center"
android:orientation="horizontal"></LinearLayout>
</HorizontalScrollView>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,45 @@
<?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:tools="http://schemas.android.com/tools"
android:id="@+id/reaction_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.emoji.widget.EmojiTextView
android:id="@+id/reaction_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:textColor="@color/textColorMaxContrast"
android:textIsSelectable="false"
android:textSize="14sp"
tools:text="@string/default_emoji" />
<TextView
android:id="@+id/reaction_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textStyle="bold"
tools:text="1" />
</LinearLayout>