From 2a0cb2d648cf4539623abada8a6cfc7522bff808 Mon Sep 17 00:00:00 2001 From: Krishna Kumar Date: Sat, 23 May 2026 00:55:54 -0500 Subject: [PATCH] =?UTF-8?q?experiment(PodcastPlayerView):=20add=20MPMediaI?= =?UTF-8?q?temArtwork=20to=20Now=20Playing=20=E2=80=94=20waveform=20render?= =?UTF-8?q?ed=20image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marks/Views/PodcastPlayerView.swift | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Marks/Views/PodcastPlayerView.swift b/Marks/Views/PodcastPlayerView.swift index bca94d0..e66abef 100644 --- a/Marks/Views/PodcastPlayerView.swift +++ b/Marks/Views/PodcastPlayerView.swift @@ -282,12 +282,32 @@ final class PodcastPlayerViewModel { var info: [String: Any] = [:] info[MPMediaItemPropertyTitle] = currentPodcastTitle info[MPMediaItemPropertyArtist] = currentArticleTitle.isEmpty ? "Marks" : currentArticleTitle - info[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? 1.0 : 0.0 + info[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? Double(playbackSpeed) : 0.0 info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime if duration > 1 { info[MPMediaItemPropertyPlaybackDuration] = duration } + if let artwork = Self.nowPlayingArtwork { + info[MPMediaItemPropertyArtwork] = artwork + } MPNowPlayingInfoCenter.default().nowPlayingInfo = info } + private static let nowPlayingArtwork: MPMediaItemArtwork? = { + let size = CGSize(width: 300, height: 300) + let renderer = UIGraphicsImageRenderer(size: size) + let image = renderer.image { ctx in + UIColor.systemBlue.withAlphaComponent(0.15).setFill() + ctx.fill(CGRect(origin: .zero, size: size)) + let config = UIImage.SymbolConfiguration(pointSize: 140, weight: .regular) + if let symbol = UIImage(systemName: "waveform.circle.fill", withConfiguration: config) { + let tinted = symbol.withTintColor(.systemBlue, renderingMode: .alwaysOriginal) + let origin = CGPoint(x: (size.width - tinted.size.width) / 2, + y: (size.height - tinted.size.height) / 2) + tinted.draw(at: origin) + } + } + return MPMediaItemArtwork(boundsSize: size) { _ in image } + }() + private static func statusLabel(_ status: String) -> String { switch status { case "queued": return "Queued…"