From 31b6f2da48cdb440b20998201ba4a9df68b31245 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Sun, 27 Jul 2025 16:51:56 +0545 Subject: [PATCH] fix: prevent unwanted media resume when already paused --- VoiceInk/PlaybackController.swift | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/VoiceInk/PlaybackController.swift b/VoiceInk/PlaybackController.swift index 441040d..64e03ec 100644 --- a/VoiceInk/PlaybackController.swift +++ b/VoiceInk/PlaybackController.swift @@ -8,7 +8,8 @@ import MediaRemoteAdapter class PlaybackController: ObservableObject { static let shared = PlaybackController() private var mediaController: MediaRemoteAdapter.MediaController - private var didPauseMedia = false + private var wasPlayingWhenRecordingStarted = false + private var isMediaPlaying = false @Published var isPauseMediaEnabled: Bool = UserDefaults.standard.bool(forKey: "isPauseMediaEnabled") { didSet { @@ -25,6 +26,11 @@ class PlaybackController: ObservableObject { mediaController.startListening() + // Listen for track changes to know if media is playing + mediaController.onTrackInfoReceived = { [weak self] trackInfo in + self?.isMediaPlaying = trackInfo.payload.isPlaying ?? false + } + mediaController.onListenerTerminated = { DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.mediaController.startListening() @@ -32,19 +38,21 @@ class PlaybackController: ObservableObject { } } - func pauseMedia() async -> Bool { - guard isPauseMediaEnabled else { return false } - - mediaController.pause() - didPauseMedia = true - return true + func pauseMedia() async { + guard isPauseMediaEnabled else { return } + + if isMediaPlaying { + wasPlayingWhenRecordingStarted = true + mediaController.pause() + } else { + wasPlayingWhenRecordingStarted = false + } } - + func resumeMedia() async { - guard isPauseMediaEnabled && didPauseMedia else { return } + guard isPauseMediaEnabled, wasPlayingWhenRecordingStarted else { return } mediaController.play() - didPauseMedia = false } }