mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
allow displaying older messages
This commit is contained in:
@@ -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())
|
||||||
}
|
}
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user