From 4ab6eeac26a7298f58be6b1a5b403e3cbef53a8b Mon Sep 17 00:00:00 2001 From: Marcel Stommel Date: Tue, 20 Jan 2026 13:56:21 +0100 Subject: [PATCH 1/3] Change now playing artwork request handler --- .../Primitives/Metadata.macios.cs | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs b/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs index 3ce3c627a1..d61e83cefd 100644 --- a/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs +++ b/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs @@ -1,4 +1,5 @@ using AVFoundation; +using CoreGraphics; using CoreMedia; using Foundation; using MediaPlayer; @@ -76,6 +77,8 @@ public void SetMetadata(AVPlayerItem? playerItem, IMediaElement? mediaElement) Metadata.ClearNowPlaying(); return; } + + var proxy = new RequestHandlerProxy(mediaElement.MetadataArtworkUrl); NowPlayingInfo.Title = mediaElement.MetadataTitle; NowPlayingInfo.Artist = mediaElement.MetadataArtist; @@ -83,25 +86,28 @@ public void SetMetadata(AVPlayerItem? playerItem, IMediaElement? mediaElement) NowPlayingInfo.IsLiveStream = false; NowPlayingInfo.PlaybackRate = mediaElement.Speed; NowPlayingInfo.ElapsedPlaybackTime = playerItem?.CurrentTime.Seconds ?? 0; - NowPlayingInfo.Artwork = new(boundsSize: new(320, 240), requestHandler: _ => GetImage(mediaElement.MetadataArtworkUrl)); + NowPlayingInfo.Artwork = new(new(320, 240), proxy.RequestHandler); MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = NowPlayingInfo; } - static UIImage GetImage(string imageUri) - { - try - { - if (imageUri.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase)) - { - return UIImage.LoadFromData(NSData.FromUrl(new NSUrl(imageUri))) ?? defaultUIImage; - } - return defaultUIImage; - } - catch - { - return defaultUIImage; - } - } + sealed class RequestHandlerProxy(string metadataArtworkUrl) + { + public UIImage RequestHandler(CGSize size) + { + try + { + if (metadataArtworkUrl.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase)) + { + return UIImage.LoadFromData(NSData.FromUrl(new NSUrl(metadataArtworkUrl))) ?? defaultUIImage; + } + return defaultUIImage; + } + catch + { + return defaultUIImage; + } + } + } MPRemoteCommandHandlerStatus SeekCommand(MPRemoteCommandEvent? commandEvent) { From a813e7613d73ee25bcdbfbe1513dd9d48831dc9f Mon Sep 17 00:00:00 2001 From: Marcel Stommel <45386201+MarcelStommel@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:18:49 +0100 Subject: [PATCH 2/3] Fix indentation based on review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../Primitives/Metadata.macios.cs | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs b/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs index d61e83cefd..fa5b8c45ab 100644 --- a/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs +++ b/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs @@ -91,23 +91,23 @@ public void SetMetadata(AVPlayerItem? playerItem, IMediaElement? mediaElement) } sealed class RequestHandlerProxy(string metadataArtworkUrl) - { - public UIImage RequestHandler(CGSize size) - { - try - { - if (metadataArtworkUrl.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase)) - { - return UIImage.LoadFromData(NSData.FromUrl(new NSUrl(metadataArtworkUrl))) ?? defaultUIImage; - } - return defaultUIImage; - } - catch - { - return defaultUIImage; - } - } - } + { + public UIImage RequestHandler(CGSize size) + { + try + { + if (metadataArtworkUrl.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase)) + { + return UIImage.LoadFromData(NSData.FromUrl(new NSUrl(metadataArtworkUrl))) ?? defaultUIImage; + } + return defaultUIImage; + } + catch + { + return defaultUIImage; + } + } + } MPRemoteCommandHandlerStatus SeekCommand(MPRemoteCommandEvent? commandEvent) { From 6db1b75f07c78321b0cf50b0a2dc4e31439e7d17 Mon Sep 17 00:00:00 2001 From: Marcel Stommel Date: Tue, 20 Jan 2026 16:25:00 +0100 Subject: [PATCH 3/3] Extract url into a captured variable instead of using a class --- .../Primitives/Metadata.macios.cs | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs b/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs index fa5b8c45ab..4d96128186 100644 --- a/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs +++ b/src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs @@ -1,5 +1,4 @@ using AVFoundation; -using CoreGraphics; using CoreMedia; using Foundation; using MediaPlayer; @@ -77,8 +76,8 @@ public void SetMetadata(AVPlayerItem? playerItem, IMediaElement? mediaElement) Metadata.ClearNowPlaying(); return; } - - var proxy = new RequestHandlerProxy(mediaElement.MetadataArtworkUrl); + + var url = mediaElement.MetadataArtworkUrl; NowPlayingInfo.Title = mediaElement.MetadataTitle; NowPlayingInfo.Artist = mediaElement.MetadataArtist; @@ -86,26 +85,23 @@ public void SetMetadata(AVPlayerItem? playerItem, IMediaElement? mediaElement) NowPlayingInfo.IsLiveStream = false; NowPlayingInfo.PlaybackRate = mediaElement.Speed; NowPlayingInfo.ElapsedPlaybackTime = playerItem?.CurrentTime.Seconds ?? 0; - NowPlayingInfo.Artwork = new(new(320, 240), proxy.RequestHandler); + NowPlayingInfo.Artwork = new(boundsSize: new(320, 240), requestHandler: _ => GetImage(url)); MPNowPlayingInfoCenter.DefaultCenter.NowPlaying = NowPlayingInfo; } - sealed class RequestHandlerProxy(string metadataArtworkUrl) + static UIImage GetImage(string imageUri) { - public UIImage RequestHandler(CGSize size) + try { - try - { - if (metadataArtworkUrl.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase)) - { - return UIImage.LoadFromData(NSData.FromUrl(new NSUrl(metadataArtworkUrl))) ?? defaultUIImage; - } - return defaultUIImage; - } - catch + if (imageUri.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase)) { - return defaultUIImage; + return UIImage.LoadFromData(NSData.FromUrl(new NSUrl(imageUri))) ?? defaultUIImage; } + return defaultUIImage; + } + catch + { + return defaultUIImage; } }