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
Branches main
No related tags found
No related merge requests found
package de.kuschku.quasseldroid_ng.persistence package de.kuschku.quasseldroid_ng.persistence
import android.arch.paging.LivePagedListProvider
import android.arch.persistence.room.* import android.arch.persistence.room.*
import android.content.Context import android.content.Context
import android.support.annotation.IntRange import android.support.annotation.IntRange
...@@ -13,7 +14,7 @@ abstract class QuasselDatabase : RoomDatabase() { ...@@ -13,7 +14,7 @@ abstract class QuasselDatabase : RoomDatabase() {
abstract fun message(): MessageDao abstract fun message(): MessageDao
@Entity(tableName = "message") @Entity(tableName = "message")
open class DatabaseMessage( data class DatabaseMessage(
@PrimaryKey var messageId: Int, @PrimaryKey var messageId: Int,
var time: Instant, var time: Instant,
var type: Int, var type: Int,
...@@ -46,6 +47,9 @@ abstract class QuasselDatabase : RoomDatabase() { ...@@ -46,6 +47,9 @@ abstract class QuasselDatabase : RoomDatabase() {
@Query("SELECT * FROM message WHERE bufferId = :bufferId") @Query("SELECT * FROM message WHERE bufferId = :bufferId")
fun findByBufferId(bufferId: Int): List<DatabaseMessage> 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") @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId DESC LIMIT 1")
fun findLastByBufferId(bufferId: Int): DatabaseMessage fun findLastByBufferId(bufferId: Int): DatabaseMessage
......
...@@ -10,6 +10,7 @@ import android.view.ViewGroup ...@@ -10,6 +10,7 @@ import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import butterknife.BindView import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
import de.kuschku.libquassel.protocol.BufferId
import de.kuschku.libquassel.protocol.NetworkId import de.kuschku.libquassel.protocol.NetworkId
import de.kuschku.libquassel.quassel.syncables.BufferViewConfig import de.kuschku.libquassel.quassel.syncables.BufferViewConfig
import de.kuschku.libquassel.quassel.syncables.BufferViewManager import de.kuschku.libquassel.quassel.syncables.BufferViewManager
...@@ -37,6 +38,8 @@ class BufferViewConfigFragment : ServiceBoundFragment() { ...@@ -37,6 +38,8 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
@BindView(R.id.chatList) @BindView(R.id.chatList)
lateinit var chatList: RecyclerView lateinit var chatList: RecyclerView
var currentBuffer: MutableLiveData<BufferId>? = null
private val sessionManager: LiveData<SessionManager?> private val sessionManager: LiveData<SessionManager?>
= backend.map(Backend::sessionManager) = backend.map(Backend::sessionManager)
private val bufferViewManager: LiveData<BufferViewManager?> 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