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…"