From d58b4fd6a6405df0e44170decf31f074d8885253 Mon Sep 17 00:00:00 2001 From: tianyifeng Date: Wed, 23 Nov 2022 17:40:16 +0000 Subject: [PATCH] Handle the bitmap loading result with applicationHandler Before this change, the bitmap loading result with mainHandler, in which we set the metadata to `MediaSessionCompat`. However, the `MediaSessionCompat` is not thread safe, all calls should be made from the same thread. In the other calls to `MediaSessionCompat`, we ensure that they are on the application thread (which may be or may not be main thread), so we should do the same for `setMetadata` when bitmap arrives. Also removes a comment in `DefaultMediaNotificationProvider` as bitmap request caching is already moved to CacheBitmapLoader. PiperOrigin-RevId: 490524209 (cherry picked from commit 80927260fd46413b7d1efafed72360b10049af2a) --- .../media3/session/DefaultMediaNotificationProvider.java | 2 -- .../androidx/media3/session/MediaSessionLegacyStub.java | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java b/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java index 008ba329eb..45de1f5a94 100644 --- a/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java +++ b/libraries/session/src/main/java/androidx/media3/session/DefaultMediaNotificationProvider.java @@ -244,8 +244,6 @@ public class DefaultMediaNotificationProvider implements MediaNotification.Provi private final String channelId; @StringRes private final int channelNameResourceId; private final NotificationManager notificationManager; - // Cache the last bitmap load request to avoid reloading the bitmap again, particularly useful - // when showing a notification for the same item (e.g. when switching from playing to paused). private final Handler mainHandler; private @MonotonicNonNull OnBitmapLoadedFutureCallback pendingOnBitmapLoadedFutureCallback; diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java index 516dcf10d6..a80301d509 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -118,7 +118,6 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; private final MediaPlayPauseKeyHandler mediaPlayPauseKeyHandler; private final MediaSessionCompat sessionCompat; @Nullable private VolumeProviderCompat volumeProviderCompat; - private final Handler mainHandler; private volatile long connectionTimeoutMs; @Nullable private FutureCallback pendingBitmapLoadCallback; @@ -162,7 +161,6 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; @Initialized MediaSessionLegacyStub thisRef = this; sessionCompat.setCallback(thisRef, handler); - mainHandler = new Handler(Looper.getMainLooper()); } /** Starts to receive commands. */ @@ -1205,7 +1203,9 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; } }; Futures.addCallback( - bitmapFuture, pendingBitmapLoadCallback, /* executor= */ mainHandler::post); + bitmapFuture, + pendingBitmapLoadCallback, + /* executor= */ sessionImpl.getApplicationHandler()::post); } } setMetadata(