-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChatAdapter.kt
101 lines (79 loc) · 3.38 KB
/
ChatAdapter.kt
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
100
101
package kr.ac.konkuk.koogle.Adapter
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import de.hdodenhof.circleimageview.CircleImageView
import kr.ac.konkuk.koogle.DBKeys.Companion.LEFT_CHAT
import kr.ac.konkuk.koogle.DBKeys.Companion.RIGHT_CHAT
import kr.ac.konkuk.koogle.Model.ChatModel
import kr.ac.konkuk.koogle.R
import kr.ac.konkuk.koogle.databinding.ItemCardBinding
import kr.ac.konkuk.koogle.databinding.ItemLeftChatBinding
import kr.ac.konkuk.koogle.databinding.ItemRightChatBinding
import java.text.SimpleDateFormat
import java.util.*
class ChatAdapter(val context: Context, private val chatList: MutableList<ChatModel>) :
RecyclerView.Adapter<ChatAdapter.BaseViewHolder<*>>() {
abstract class BaseViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) {
abstract fun bind(item: T)
}
inner class LeftViewHolder(private val binding: ItemLeftChatBinding) : BaseViewHolder<ChatModel>(binding.root) {
@SuppressLint("SimpleDateFormat")
val format = SimpleDateFormat("a HH:mm", Locale.KOREA)
override fun bind(chatModel: ChatModel) {
val time = Date(chatModel.chatCreatedAt)
binding.writerNameTextView.text = chatModel.writerName
binding.contentTextView.text = chatModel.chatContent
binding.timeTextView.text = format.format(time).toString()
if (chatModel.writerProfileImageUrl.isNotEmpty()) {
Glide.with(binding.writerProfileImage)
.load(chatModel.writerProfileImageUrl)
.into(binding.writerProfileImage)
}
}
}
inner class RightViewHolder(private val binding: ItemRightChatBinding) : BaseViewHolder<ChatModel>(binding.root) {
@SuppressLint("SimpleDateFormat")
val format = SimpleDateFormat("a HH:mm", Locale.KOREA)
override fun bind(chatModel: ChatModel) {
val time = Date(chatModel.chatCreatedAt)
binding.contentTextView.text = chatModel.chatContent
binding.timeTextView.text = format.format(time).toString()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
//context 는 parent 에 있다
return when (viewType) {
LEFT_CHAT -> {
LeftViewHolder(ItemLeftChatBinding.inflate(LayoutInflater.from(parent.context),parent,false))
}
RIGHT_CHAT -> {
RightViewHolder(ItemRightChatBinding.inflate(LayoutInflater.from(parent.context),parent,false))
}
else -> throw IllegalArgumentException("Invalid view type")
}
}
override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
val element = chatList[position]
when (holder) {
is LeftViewHolder -> {
holder.bind(element)
}
is RightViewHolder -> {
holder.bind(element)
}
else -> throw IllegalArgumentException()
}
}
override fun getItemViewType(position: Int): Int {
return chatList[position].viewType
}
override fun getItemCount(): Int {
return chatList.size
}
}