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
73 lines (65 loc) · 2.56 KB
/
ViewHolder.kt
File metadata and controls
73 lines (65 loc) · 2.56 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
package chat.rocket.android.chatrooms.adapter
import android.view.ContextThemeWrapper
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.R
import chat.rocket.android.chatroom.ui.bottomsheet.ChatRoomActionBottomSheet
import chat.rocket.android.chatrooms.adapter.model.RoomUiModel
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.toList
abstract class ViewHolder<T : ItemHolder<*>>(
itemView: View,
private val listener: ActionsListener
) : RecyclerView.ViewHolder(itemView),
MenuItem.OnMenuItemClickListener {
var data: T? = null
init {
setupActionMenu(itemView)
}
fun bind(data: T) {
this.data = data
bindViews(data)
}
abstract fun bindViews(data: T)
interface ActionsListener {
fun isActionsEnabled(): Boolean
fun onActionSelected(item: MenuItem, room: RoomUiModel)
}
internal fun setupActionMenu(view: View) {
view.setOnLongClickListener{
if (data?.data is RoomUiModel) {
data?.let { vm ->
vm.data.let {
val menuItems = view.context.inflate(R.menu.chatrooms_action).toList()
menuItems.find { it.itemId == R.id.action_favorite_room }?.apply {
setTitle(if ((it as RoomUiModel).favorite == true) R.string.action_unfavorite else R.string.action_favorite)
setIcon(if (it.favorite == true) R.drawable.ic_star_24dp else R.drawable.ic_star_border_24dp)
isChecked = (it.favorite==true)
}
menuItems.find { it.itemId == R.id.action_read }?.apply {
setTitle(if ((it as RoomUiModel).unread.isNullOrEmpty()) R.string.action_mark_unread else R.string.action_mark_read)
}
view.context?.let {
if (it is ContextThemeWrapper && it is AppCompatActivity) {
with(it) {
val actionsBottomSheet = ChatRoomActionBottomSheet()
actionsBottomSheet.addItems(menuItems, this@ViewHolder)
actionsBottomSheet.show(supportFragmentManager, null)
}
}
}
}
}
}
true
}
}
override fun onMenuItemClick(item: MenuItem): Boolean {
data?.let {
listener.onActionSelected(item, (it as RoomItemHolder).data)
}
return true
}
}