From 10ec35bd74bc394b538c58d6cc5622898bf31883 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Fri, 4 Jun 2021 09:58:04 +1000 Subject: [PATCH] Fix conversation updating & stack messages from end --- .../conversation/v2/ConversationActivityV2.kt | 29 +++++++++++++++++-- .../conversation/v2/ConversationLoader.kt | 13 +++++++++ .../v2/messages/VisibleMessageContentView.kt | 5 ++++ .../v2/messages/VisibleMessageView.kt | 1 + 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationLoader.kt 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 4342e9cf32..bb322aab1f 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 @@ -1,6 +1,9 @@ package org.thoughtcrime.securesms.conversation.v2 +import android.database.Cursor import android.os.Bundle +import androidx.loader.app.LoaderManager +import androidx.loader.content.Loader import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.activity_conversation_v2.* import network.loki.messenger.R @@ -11,6 +14,13 @@ import org.thoughtcrime.securesms.mms.GlideApp class ConversationActivityV2 : PassphraseRequiredActionBarActivity() { private var threadID: Long = -1 + private val adapter by lazy { + val cursor = DatabaseFactory.getMmsSmsDatabase(this).getConversation(threadID) + val adapter = ConversationAdapter(this, cursor) + adapter.setHasStableIds(true) + adapter + } + private val thread by lazy { DatabaseFactory.getThreadDatabase(this).getRecipientForThreadId(threadID)!! } @@ -33,13 +43,26 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity() { } private fun setUpRecyclerView() { - val cursor = DatabaseFactory.getMmsSmsDatabase(this).getConversation(threadID) - val adapter = ConversationAdapter(this, cursor) - adapter.setHasStableIds(true) conversationRecyclerView.adapter = adapter val layoutManager = LinearLayoutManager(this) layoutManager.reverseLayout = true + layoutManager.stackFromEnd = true conversationRecyclerView.layoutManager = layoutManager + // Workaround for the fact that CursorRecyclerViewAdapter doesn't actually auto-update automatically (even though it says it will) + LoaderManager.getInstance(this).restartLoader(0, null, object : LoaderManager.LoaderCallbacks { + + override fun onCreateLoader(id: Int, bundle: Bundle?): Loader { + return ConversationLoader(threadID, this@ConversationActivityV2) + } + + override fun onLoadFinished(loader: Loader, cursor: Cursor?) { + adapter.changeCursor(cursor) + } + + override fun onLoaderReset(cursor: Loader) { + adapter.changeCursor(null) + } + }) } private fun setUpToolbar() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationLoader.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationLoader.kt new file mode 100644 index 0000000000..08b5a02641 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationLoader.kt @@ -0,0 +1,13 @@ +package org.thoughtcrime.securesms.conversation.v2 + +import android.content.Context +import android.database.Cursor +import org.thoughtcrime.securesms.database.DatabaseFactory +import org.thoughtcrime.securesms.util.AbstractCursorLoader + +class ConversationLoader(private val threadID: Long, context: Context) : AbstractCursorLoader(context) { + + override fun getCursor(): Cursor { + return DatabaseFactory.getMmsSmsDatabase(context).getConversation(threadID) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt index 17e2272044..585819c8ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt @@ -52,6 +52,7 @@ class VisibleMessageContentView : LinearLayout { background.colorFilter = filter setBackground(background) // Body + mainContainer.removeAllViews() if (message is MmsMessageRecord && message.linkPreviews.isNotEmpty()) { val linkPreviewView = LinkPreviewView(context) linkPreviewView.bind(message) @@ -75,6 +76,10 @@ class VisibleMessageContentView : LinearLayout { mainContainer.addView(bodyTextView) } } + + fun recycle() { + mainContainer.removeAllViews() + } // endregion // region Convenience diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt index 99283d04d6..bf9a7e04d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt @@ -81,6 +81,7 @@ class VisibleMessageView : LinearLayout { fun recycle() { profilePictureView.recycle() + messageContentView.recycle() } // endregion } \ No newline at end of file