2021-07-09 03:14:21 +02:00
|
|
|
package org.thoughtcrime.securesms.home
|
2019-12-17 14:27:59 +01:00
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.database.Cursor
|
|
|
|
import android.view.ViewGroup
|
2021-10-04 09:51:19 +02:00
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
2019-12-17 14:27:59 +01:00
|
|
|
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter
|
|
|
|
import org.thoughtcrime.securesms.database.model.ThreadRecord
|
2021-10-04 09:51:19 +02:00
|
|
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
2019-12-19 11:15:58 +01:00
|
|
|
import org.thoughtcrime.securesms.mms.GlideRequests
|
2019-12-17 14:27:59 +01:00
|
|
|
|
2021-07-29 00:56:34 +02:00
|
|
|
class HomeAdapter(context: Context, cursor: Cursor?) : CursorRecyclerViewAdapter<HomeAdapter.ViewHolder>(context, cursor) {
|
2021-10-04 09:51:19 +02:00
|
|
|
private val threadDatabase = DatabaseComponent.get(context).threadDatabase()
|
2019-12-19 11:15:58 +01:00
|
|
|
lateinit var glide: GlideRequests
|
|
|
|
var typingThreadIDs = setOf<Long>()
|
|
|
|
set(value) { field = value; notifyDataSetChanged() }
|
2019-12-17 14:27:59 +01:00
|
|
|
var conversationClickListener: ConversationClickListener? = null
|
|
|
|
|
|
|
|
class ViewHolder(val view: ConversationView) : RecyclerView.ViewHolder(view)
|
|
|
|
|
|
|
|
override fun onCreateItemViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
2019-12-17 16:24:42 +01:00
|
|
|
val view = ConversationView(context)
|
2019-12-17 14:27:59 +01:00
|
|
|
view.setOnClickListener { conversationClickListener?.onConversationClick(view) }
|
|
|
|
view.setOnLongClickListener {
|
|
|
|
conversationClickListener?.onLongConversationClick(view)
|
|
|
|
true
|
|
|
|
}
|
|
|
|
return ViewHolder(view)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onBindItemViewHolder(viewHolder: ViewHolder, cursor: Cursor) {
|
2019-12-19 11:15:58 +01:00
|
|
|
val thread = getThread(cursor)!!
|
|
|
|
val isTyping = typingThreadIDs.contains(thread.threadId)
|
|
|
|
viewHolder.view.bind(thread, isTyping, glide)
|
2019-12-17 14:27:59 +01:00
|
|
|
}
|
|
|
|
|
2021-02-04 06:57:24 +01:00
|
|
|
override fun onItemViewRecycled(holder: ViewHolder?) {
|
|
|
|
super.onItemViewRecycled(holder)
|
|
|
|
holder?.view?.recycle()
|
|
|
|
}
|
|
|
|
|
2019-12-17 14:27:59 +01:00
|
|
|
private fun getThread(cursor: Cursor): ThreadRecord? {
|
2019-12-18 11:36:09 +01:00
|
|
|
return threadDatabase.readerFor(cursor).current
|
2019-12-17 14:27:59 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
interface ConversationClickListener {
|
|
|
|
fun onConversationClick(view: ConversationView)
|
|
|
|
fun onLongConversationClick(view: ConversationView)
|
|
|
|
}
|