From 3117bdb91904fbec3d4e959d8d9d745471f5f372 Mon Sep 17 00:00:00 2001 From: Jis G Jacob Date: Sat, 16 May 2026 08:38:56 +0530 Subject: [PATCH] Atoll: pause Spotify Canvas in dynamic island when audio pauses Subscribe DynamicIslandArtworkLoopController to MusicManager.isPlaying so the looping AVQueuePlayer pauses and resumes with playback state. Signed-off-by: Jis G Jacob --- .../components/Notch/NotchHomeView.swift | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/DynamicIsland/components/Notch/NotchHomeView.swift b/DynamicIsland/components/Notch/NotchHomeView.swift index cea0a9c..da388b2 100644 --- a/DynamicIsland/components/Notch/NotchHomeView.swift +++ b/DynamicIsland/components/Notch/NotchHomeView.swift @@ -29,6 +29,7 @@ import AVFoundation private final class DynamicIslandArtworkLoopController { let player: AVQueuePlayer private var looper: AVPlayerLooper? + private var playbackStateCancellable: AnyCancellable? init(url: URL) { let item = AVPlayerItem(url: url) @@ -36,12 +37,28 @@ private final class DynamicIslandArtworkLoopController { player.isMuted = true player.actionAtItemEnd = .none looper = AVPlayerLooper(player: player, templateItem: item) - player.play() + + if MusicManager.shared.isPlaying { + player.play() + } + + playbackStateCancellable = MusicManager.shared.$isPlaying + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] isPlaying in + guard let self else { return } + if isPlaying { + self.player.play() + } else { + self.player.pause() + } + } } deinit { player.pause() looper = nil + playbackStateCancellable = nil } }