This repository was archived by the owner on Jun 7, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 544
Expand file tree
/
Copy pathViewHolder.kt
More file actions
101 lines (92 loc) · 4.81 KB
/
Copy pathViewHolder.kt
File metadata and controls
101 lines (92 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package chat.rocket.android.members.adapter
import android.view.ContextThemeWrapper
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.R
import chat.rocket.android.members.ui.GroupMemberBottomSheet
import chat.rocket.android.members.uimodel.MemberUiModel
import chat.rocket.android.util.extensions.content
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.toList
import kotlinx.android.synthetic.main.avatar.view.*
import kotlinx.android.synthetic.main.item_member.view.*
class ViewHolder(
itemView: View,
private val listener: ActionsListener,
private val isOwner: Boolean,
private val isMod: Boolean
) : RecyclerView.ViewHolder(itemView), MenuItem.OnMenuItemClickListener {
var data: MemberUiModel? = null
var index: Int = 0
fun bind(memberUiModel: MemberUiModel, position: Int, listener: (MemberUiModel) -> Unit) = with(itemView) {
data = memberUiModel
index = position
image_avatar.setImageURI(memberUiModel.avatarUri)
text_member.content = memberUiModel.displayName
text_member.setCompoundDrawablesRelativeWithIntrinsicBounds(DrawableHelper.getUserStatusDrawable(memberUiModel.status, context), null, null, null)
text_member_owner.setText(R.string.owner)
text_member_leader.setText(R.string.leader)
text_member_moderator.setText(R.string.moderator)
text_member_owner.isVisible =memberUiModel.roles?.contains("owner") == true
text_member_leader.isVisible = memberUiModel.roles?.contains("leader") == true
text_member_moderator.isVisible = memberUiModel.roles?.contains("moderator") == true
setOnClickListener { listener(memberUiModel) }
setupActionMenu(itemView)
}
interface ActionsListener {
fun isActionsEnabled(): Boolean
fun onActionSelected(item: MenuItem, member: MemberUiModel, index: Int)
}
internal fun setupActionMenu(view: View) {
view.setOnLongClickListener{
data?.let {
var menuItems = view.context.inflate(R.menu.group_member_actions).toList()
if (!isOwner && !isMod)
menuItems = menuItems.filter { it.itemId == R.id.action_member_mute }
else if (!isOwner && isMod)
menuItems = menuItems.filter { it.itemId == R.id.action_member_mute || it.itemId == R.id.action_member_remove}
menuItems.find { it.itemId == R.id.action_member_set_owner }?.apply {
if (it.roles?.contains("owner") == true) setTitle(R.string.action_remove_owner)
}
menuItems.find { it.itemId == R.id.action_member_set_leader }?.apply {
if (it.roles?.contains("leader") == true) setTitle(R.string.action_remove_leader)
}
menuItems.find { it.itemId == R.id.action_member_set_moderator }?.apply {
if (it.roles?.contains("moderator") == true) setTitle(R.string.action_remove_moderator)
}
menuItems.find { it.itemId == R.id.action_member_mute }?.apply {
if (it.muted) {
setTitle(R.string.action_unmute_user)
setIcon(R.drawable.ic_mic_on_24dp)
}
}
// TODO: Check why ignore is not working
// menuItems.find { it.itemId == R.id.action_member_ignore }?.apply {
// if (it.roles.contains("owner")) title = "Remove Owner"
// }
view.context?.let {
if (it is ContextThemeWrapper && it.baseContext is AppCompatActivity) {
with(it.baseContext as AppCompatActivity) {
if (this.lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
val actionsBottomSheet = GroupMemberBottomSheet()
actionsBottomSheet.addItems(menuItems, this@ViewHolder)
actionsBottomSheet.show(supportFragmentManager, null)
}
}
}
}
}
true
}
}
override fun onMenuItemClick(item: MenuItem): Boolean {
data?.let {
listener.onActionSelected(item, it, index)
}
return true
}
}