From e404fb964f1d5c9001463703913eff90b873217b Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 24 Mar 2025 09:44:20 +1100 Subject: [PATCH] Moving db calls out of the main thread --- app/build.gradle | 4 ++-- .../conversation/v2/ConversationActivityV2.kt | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cc5bea8086..e31de5ba9c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ configurations.configureEach { exclude module: "commons-logging" } -def canonicalVersionCode = 398 -def canonicalVersionName = "1.21.2" +def canonicalVersionCode = 399 +def canonicalVersionName = "1.21.3" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index a8512df14d..e453ade6f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -641,7 +641,11 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe if (author != null && messageTimestamp >= 0) { jumpToMessage(author, messageTimestamp, firstLoad.get(), null) } else { - if (firstLoad.getAndSet(false)) scrollToFirstUnreadMessageIfNeeded(true) + if (firstLoad.getAndSet(false)) { + lifecycleScope.launch(Dispatchers.Main) { + scrollToFirstUnreadMessageIfNeeded(true) + } + } handleRecyclerViewScrolled() } } @@ -972,9 +976,13 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe } } - private fun scrollToFirstUnreadMessageIfNeeded(isFirstLoad: Boolean = false, shouldHighlight: Boolean = false): Int { - val lastSeenTimestamp = threadDb.getLastSeenAndHasSent(viewModel.threadId).first() - val lastSeenItemPosition = adapter.findLastSeenItemPosition(lastSeenTimestamp) ?: return -1 + private suspend fun scrollToFirstUnreadMessageIfNeeded(isFirstLoad: Boolean = false, shouldHighlight: Boolean = false): Int { + val lastSeenItemPosition = withContext(Dispatchers.Default) { + val lastSeenTimestamp = threadDb.getLastSeenAndHasSent(viewModel.threadId).first() + adapter.findLastSeenItemPosition(lastSeenTimestamp) + } + + if(lastSeenItemPosition == null) return -1 // If this is triggered when first opening a conversation then we want to position the top // of the first unread message in the middle of the screen