From d5df227b3ae4d87ec4876cc19ecca814c91c5fd7 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 14 Feb 2025 07:37:52 -0800 Subject: [PATCH] Post initial media button preferences update Controller and browsers are typically obtained with Futures.addCallback(future, getMainExecutor()), which triggers the onSuccess callback with a message post. We currently send the initial media button preferences inline, causing the callback in MediaController.Listener.onMediaButtonPreferencesChanged to arrive before the FutureCallback.onSuccess callback. In the test controller app, which causes crashed when connecting to existing sessions for example. We can make this more robust by also posting the initial update of the media button preferences. PiperOrigin-RevId: 726923498 --- .../session/MediaControllerImplLegacy.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java index c46e680021..56df0396f9 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplLegacy.java @@ -1647,16 +1647,20 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization; if (!oldControllerInfo.mediaButtonPreferences.equals( newControllerInfo.mediaButtonPreferences)) { getInstance() - .notifyControllerListener( - listener -> { - ignoreFuture( - listener.onSetCustomLayout( - getInstance(), newControllerInfo.mediaButtonPreferences)); - listener.onCustomLayoutChanged( - getInstance(), newControllerInfo.mediaButtonPreferences); - listener.onMediaButtonPreferencesChanged( - getInstance(), newControllerInfo.mediaButtonPreferences); - }); + .applicationHandler + .post( + () -> + getInstance() + .notifyControllerListener( + listener -> { + ignoreFuture( + listener.onSetCustomLayout( + getInstance(), newControllerInfo.mediaButtonPreferences)); + listener.onCustomLayoutChanged( + getInstance(), newControllerInfo.mediaButtonPreferences); + listener.onMediaButtonPreferencesChanged( + getInstance(), newControllerInfo.mediaButtonPreferences); + })); } return; }