allow displaying older messages

This commit is contained in:
Pavel Poley
2022-06-02 16:34:04 +03:00
parent ec157ba19e
commit f3ef5dfd67
2 changed files with 13 additions and 13 deletions

View File

@@ -40,7 +40,6 @@ import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.PhoneNumber import com.simplemobiletools.commons.models.PhoneNumber
import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.models.SimpleContact
import com.simplemobiletools.commons.views.MyLinearLayoutManager
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter
@@ -367,32 +366,30 @@ class ThreadActivity : SimpleActivity() {
private fun fetchNextMessages() { private fun fetchNextMessages() {
if (messages.isEmpty() || allMessagesFetched || loadingOlderMessages) return if (messages.isEmpty() || allMessagesFetched || loadingOlderMessages) return
val date = messages.first().date val dateOfFirstItem = messages.first().date
if (oldestMessageDate == date) { if (oldestMessageDate == dateOfFirstItem) {
allMessagesFetched = true allMessagesFetched = true
return return
} }
toast("fetchNextMessages") oldestMessageDate = dateOfFirstItem
oldestMessageDate = date
loadingOlderMessages = true loadingOlderMessages = true
ensureBackgroundThread { ensureBackgroundThread {
val firstItem = messages.first()
val olderMessages = getMessages(threadId, true, oldestMessageDate) val olderMessages = getMessages(threadId, true, oldestMessageDate)
messages.addAll(0, olderMessages) messages.addAll(0, olderMessages)
threadItems = getThreadItems() threadItems = getThreadItems()
allMessagesFetched = olderMessages.size < MESSAGES_LIMIT || olderMessages.size == 0 allMessagesFetched = olderMessages.size < MESSAGES_LIMIT || olderMessages.size == 0
val lastPosition = (thread_messages_list.layoutManager as MyLinearLayoutManager).findLastVisibleItemPosition()
val adapter = thread_messages_list.adapter as ThreadAdapter
val topItemAtRefresh = adapter.messages[lastPosition]
runOnUiThread { runOnUiThread {
loadingOlderMessages = false loadingOlderMessages = false
val itemAtRefreshIndex = messages.indexOfFirst { it == topItemAtRefresh } val itemAtRefreshIndex = threadItems.indexOfFirst { it == firstItem }
adapter.updateMessages(threadItems, itemAtRefreshIndex) (thread_messages_list.adapter as ThreadAdapter).apply {
updateMessages(threadItems, itemAtRefreshIndex)
}
} }
} }
} }
@@ -1031,6 +1028,9 @@ class ThreadActivity : SimpleActivity() {
@Subscribe(threadMode = ThreadMode.ASYNC) @Subscribe(threadMode = ThreadMode.ASYNC)
fun refreshMessages(event: Events.RefreshMessages) { fun refreshMessages(event: Events.RefreshMessages) {
refreshedSinceSent = true refreshedSinceSent = true
allMessagesFetched = false
oldestMessageDate = -1
if (isActivityVisible) { if (isActivityVisible) {
notificationManager.cancel(threadId.hashCode()) notificationManager.cancel(threadId.hashCode())
} }

View File

@@ -231,7 +231,7 @@ class ThreadAdapter(
private fun isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime private fun isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime
fun updateMessages(newMessages: ArrayList<ThreadItem>, scrollPosition: Int = messages.size - 1) { fun updateMessages(newMessages: ArrayList<ThreadItem>, scrollPosition: Int = newMessages.size - 1) {
val latestMessages = newMessages.clone() as ArrayList<ThreadItem> val latestMessages = newMessages.clone() as ArrayList<ThreadItem>
val oldHashCode = messages.hashCode() val oldHashCode = messages.hashCode()
val newHashCode = latestMessages.hashCode() val newHashCode = latestMessages.hashCode()