diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index 0c4a3a52..d1be773a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -40,7 +40,6 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.PhoneNumber import com.simplemobiletools.commons.models.SimpleContact -import com.simplemobiletools.commons.views.MyLinearLayoutManager import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter @@ -367,32 +366,30 @@ class ThreadActivity : SimpleActivity() { private fun fetchNextMessages() { if (messages.isEmpty() || allMessagesFetched || loadingOlderMessages) return - val date = messages.first().date - if (oldestMessageDate == date) { + val dateOfFirstItem = messages.first().date + if (oldestMessageDate == dateOfFirstItem) { allMessagesFetched = true return } - toast("fetchNextMessages") - - oldestMessageDate = date + oldestMessageDate = dateOfFirstItem loadingOlderMessages = true ensureBackgroundThread { + val firstItem = messages.first() val olderMessages = getMessages(threadId, true, oldestMessageDate) + messages.addAll(0, olderMessages) threadItems = getThreadItems() 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 { loadingOlderMessages = false - val itemAtRefreshIndex = messages.indexOfFirst { it == topItemAtRefresh } - adapter.updateMessages(threadItems, itemAtRefreshIndex) + val itemAtRefreshIndex = threadItems.indexOfFirst { it == firstItem } + (thread_messages_list.adapter as ThreadAdapter).apply { + updateMessages(threadItems, itemAtRefreshIndex) + } } } } @@ -1031,6 +1028,9 @@ class ThreadActivity : SimpleActivity() { @Subscribe(threadMode = ThreadMode.ASYNC) fun refreshMessages(event: Events.RefreshMessages) { refreshedSinceSent = true + allMessagesFetched = false + oldestMessageDate = -1 + if (isActivityVisible) { notificationManager.cancel(threadId.hashCode()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 486a8eea..75c31e54 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -231,7 +231,7 @@ class ThreadAdapter( private fun isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime - fun updateMessages(newMessages: ArrayList, scrollPosition: Int = messages.size - 1) { + fun updateMessages(newMessages: ArrayList, scrollPosition: Int = newMessages.size - 1) { val latestMessages = newMessages.clone() as ArrayList val oldHashCode = messages.hashCode() val newHashCode = latestMessages.hashCode()