From 1c174b5b70ed3c65c4eee2069d072a80ffbfba7c Mon Sep 17 00:00:00 2001 From: wch423 Date: Thu, 5 Feb 2026 21:12:09 +0100 Subject: [PATCH] Stop draft audio playback when (1) the conversation exits; or (2) the message is sent --- .../org/thoughtcrime/securesms/ConversationActivity.java | 6 ++++++ .../components/audioplay/AudioPlaybackViewModel.java | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index 5b2b50756..bbaaf02fb 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -679,6 +679,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity extras.putInt(ConversationListFragment.RELOAD_LIST, 1); } + playbackViewModel.stopNonMessageAudioPlayback(); + boolean archived = getIntent().getBooleanExtra(FROM_ARCHIVED_CHATS_EXTRA, false); Intent intent = new Intent(this, (archived ? ConversationListArchiveActivity.class : ConversationListActivity.class)); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); @@ -1151,6 +1153,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity inputPanel.clearQuote(); } + // Stop draft audio playback regardless, since it is unlikely + // we will need background playback for drafts + playbackViewModel.stopNonMessageAudioPlayback(); + DcContext dcContext = DcHelper.getContext(context); Util.runOnAnyBackgroundThread(() -> { DcMsg msg = null; diff --git a/src/main/java/org/thoughtcrime/securesms/components/audioplay/AudioPlaybackViewModel.java b/src/main/java/org/thoughtcrime/securesms/components/audioplay/AudioPlaybackViewModel.java index 9d6588467..85ea31652 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/audioplay/AudioPlaybackViewModel.java +++ b/src/main/java/org/thoughtcrime/securesms/components/audioplay/AudioPlaybackViewModel.java @@ -17,6 +17,8 @@ import androidx.media3.session.MediaController; public class AudioPlaybackViewModel extends ViewModel { private static final String TAG = AudioPlaybackViewModel.class.getSimpleName(); + private static final int NON_MESSAGE_AUDIO_MSG_ID = 0; // Audios not attached to a message doesn't have message id. + private final MutableLiveData playbackState; private @Nullable MediaController mediaController; private final Handler handler; @@ -97,8 +99,12 @@ public class AudioPlaybackViewModel extends ViewModel { } } + public void stopNonMessageAudioPlayback() { + stopByIds(NON_MESSAGE_AUDIO_MSG_ID); + } + // A special method for deleting message, where we only use message Ids - public void stopByIds(int[] msgIds) { + public void stopByIds(int... msgIds) { AudioPlaybackState currentState = playbackState.getValue(); if (mediaController != null && currentState != null) {