Skip to content
Snippets Groups Projects
Commit 9b64f778 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Implement Adapter for message loading

parent b31f50c6
No related branches found
No related tags found
No related merge requests found
package de.kuschku.quasseldroid_ng.persistence
import android.arch.paging.LivePagedListProvider
import android.arch.persistence.room.*
import android.content.Context
import android.support.annotation.IntRange
......@@ -13,7 +14,7 @@ abstract class QuasselDatabase : RoomDatabase() {
abstract fun message(): MessageDao
@Entity(tableName = "message")
open class DatabaseMessage(
data class DatabaseMessage(
@PrimaryKey var messageId: Int,
var time: Instant,
var type: Int,
......@@ -46,6 +47,9 @@ abstract class QuasselDatabase : RoomDatabase() {
@Query("SELECT * FROM message WHERE bufferId = :bufferId")
fun findByBufferId(bufferId: Int): List<DatabaseMessage>
@Query("SELECT * FROM message WHERE bufferId = :bufferId AND messageId < :messageId")
fun findByBufferIdPaged(bufferId: Int): LivePagedListProvider<Int, DatabaseMessage>
@Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1")
fun findLastByBufferId(bufferId: Int): DatabaseMessage
......
......@@ -10,6 +10,7 @@ import android.view.ViewGroup
import android.widget.AdapterView
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.protocol.BufferId
import de.kuschku.libquassel.protocol.NetworkId
import de.kuschku.libquassel.quassel.syncables.BufferViewConfig
import de.kuschku.libquassel.quassel.syncables.BufferViewManager
......@@ -37,6 +38,8 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
@BindView(R.id.chatList)
lateinit var chatList: RecyclerView
var currentBuffer: MutableLiveData<BufferId>? = null
private val sessionManager: LiveData<SessionManager?>
= backend.map(Backend::sessionManager)
private val bufferViewManager: LiveData<BufferViewManager?>
......
package de.kuschku.quasseldroid_ng.ui.chat
import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.arch.lifecycle.Observer
import android.arch.paging.PagedList
import android.arch.paging.PagedListAdapter
import android.os.Bundle
import android.support.v7.recyclerview.extensions.DiffCallback
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import de.kuschku.libquassel.protocol.BufferId
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
import de.kuschku.quasseldroid_ng.util.helper.switchMap
import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
class MessageListFragment : ServiceBoundFragment() {
var currentBuffer: LiveData<BufferId?> = MutableLiveData()
private lateinit var database: QuasselDatabase
private val adapter = MessageAdapter()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
database = QuasselDatabase.Creator.init(context.applicationContext)
val data = currentBuffer.switchMap {
database.message().findByBufferIdPaged(it).create(Int.MAX_VALUE,
PagedList.Config.Builder()
.setPageSize(20)
.setEnablePlaceholders(true)
.setPrefetchDistance(20)
.build()
)
}
data.observe(this, Observer { list ->
adapter.setList(list)
})
}
class MessageAdapter : PagedListAdapter<QuasselDatabase.DatabaseMessage, MessageViewHolder>(MessageDiffCallback) {
override fun onBindViewHolder(holder: MessageViewHolder?, position: Int) {
holder?.bind(getItem(position))
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MessageViewHolder {
return MessageViewHolder(LayoutInflater.from(parent?.context).inflate(android.R.layout.simple_list_item_1, parent, false))
}
}
object MessageDiffCallback : DiffCallback<QuasselDatabase.DatabaseMessage>() {
override fun areContentsTheSame(oldItem: QuasselDatabase.DatabaseMessage, newItem: QuasselDatabase.DatabaseMessage)
= oldItem == newItem
override fun areItemsTheSame(oldItem: QuasselDatabase.DatabaseMessage, newItem: QuasselDatabase.DatabaseMessage)
= oldItem.messageId == newItem.messageId
}
class MessageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(message: QuasselDatabase.DatabaseMessage?) {
val text = (itemView as TextView)
if (message == null) {
text.text = "null"
} else {
text.text = "[${message.time}] <${message.senderPrefixes}${message.sender}> ${message.content}"
}
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment