diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index d327308c32..c453b4634b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -629,7 +629,7 @@ public class ConversationFragment extends LoggingFragment { this.recipient = Recipient.live(conversationViewModel.getArgs().getRecipientId()); this.threadId = conversationViewModel.getArgs().getThreadId(); - this.markReadHelper = new MarkReadHelper(threadId, requireContext()); + this.markReadHelper = new MarkReadHelper(threadId, requireContext(), getViewLifecycleOwner()); conversationViewModel.onConversationDataAvailable(recipient.getId(), threadId, startingPosition); messageCountsViewModel.setThreadId(threadId); @@ -806,7 +806,7 @@ public class ConversationFragment extends LoggingFragment { snapToTopDataObserver.requestScrollPosition(0); conversationViewModel.onConversationDataAvailable(recipient.getId(), threadId, -1); messageCountsViewModel.setThreadId(threadId); - markReadHelper = new MarkReadHelper(threadId, requireContext()); + markReadHelper = new MarkReadHelper(threadId, requireContext(), getViewLifecycleOwner()); initializeListAdapter(); initializeTypingObserver(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java index a4ad509696..49b6b76e91 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java @@ -3,6 +3,8 @@ package org.thoughtcrime.securesms.conversation; import android.content.Context; import androidx.annotation.NonNull; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleOwner; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; @@ -23,18 +25,20 @@ class MarkReadHelper { private static final long DEBOUNCE_TIMEOUT = 100; private static final Executor EXECUTOR = new SerialMonoLifoExecutor(SignalExecutors.BOUNDED); - private final long threadId; - private final Context context; - private final Debouncer debouncer = new Debouncer(DEBOUNCE_TIMEOUT); - private long latestTimestamp; + private final long threadId; + private final Context context; + private final LifecycleOwner lifecycleOwner; + private final Debouncer debouncer = new Debouncer(DEBOUNCE_TIMEOUT); + private long latestTimestamp; - MarkReadHelper(long threadId, @NonNull Context context) { - this.threadId = threadId; - this.context = context.getApplicationContext(); + MarkReadHelper(long threadId, @NonNull Context context, @NonNull LifecycleOwner lifecycleOwner) { + this.threadId = threadId; + this.context = context.getApplicationContext(); + this.lifecycleOwner = lifecycleOwner; } public void onViewsRevealed(long timestamp) { - if (timestamp <= latestTimestamp) { + if (timestamp <= latestTimestamp || lifecycleOwner.getLifecycle().getCurrentState() != Lifecycle.State.RESUMED) { return; }