From 2a3e73316168c2f47e67cd77509a139a1cce5432 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 (cherry picked from commit d5df227b3ae4d87ec4876cc19ecca814c91c5fd7) --- .../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; }