From c814f791d75f162e5f0783f2303a5764de03db4b Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 30 May 2022 12:30:44 +0000 Subject: [PATCH] Add sessionImpl to PostSessionTask In some cases it's helpful to have access to the session (e.g. to get the PlayerWrapper) from within the PostSessionTask implementations. This change forwards the existing sessionImpl instance to all these callbacks. PiperOrigin-RevId: 451857191 --- .../media3/session/MediaSessionStub.java | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java index 6336e72590..c98404ca92 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java @@ -116,12 +116,13 @@ import java.util.concurrent.ExecutionException; return connectedControllersManager; } - private static void sendSessionResult( - ControllerInfo controller, int seq, @SessionResult.Code int resultCode) { - sendSessionResult(controller, seq, new SessionResult(resultCode)); + private static void sendSessionResult( + K sessionImpl, ControllerInfo controller, int seq, @SessionResult.Code int resultCode) { + sendSessionResult(sessionImpl, controller, seq, new SessionResult(resultCode)); } - private static void sendSessionResult(ControllerInfo controller, int seq, SessionResult result) { + private static void sendSessionResult( + K sessionImpl, ControllerInfo controller, int seq, SessionResult result) { try { checkStateNotNull(controller.getControllerCb()).onSessionResult(seq, result); } catch (RemoteException e) { @@ -129,8 +130,8 @@ import java.util.concurrent.ExecutionException; } } - private static void sendSessionResultWhenReady( - ControllerInfo controller, int seq, ListenableFuture future) { + private static void sendSessionResultWhenReady( + K sessionImpl, ControllerInfo controller, int seq, ListenableFuture future) { future.addListener( () -> { SessionResult result; @@ -141,7 +142,7 @@ import java.util.concurrent.ExecutionException; } catch (ExecutionException | InterruptedException unused) { result = new SessionResult(SessionResult.RESULT_ERROR_UNKNOWN); } - sendSessionResult(controller, seq, result); + sendSessionResult(sessionImpl, controller, seq, result); }, MoreExecutors.directExecutor()); } @@ -155,8 +156,11 @@ import java.util.concurrent.ExecutionException; } } - private static void sendLibraryResultWhenReady( - ControllerInfo controller, int seq, ListenableFuture> future) { + private static void sendLibraryResultWhenReady( + K sessionImpl, + ControllerInfo controller, + int seq, + ListenableFuture> future) { future.addListener( () -> { LibraryResult result; @@ -177,7 +181,7 @@ import java.util.concurrent.ExecutionException; int seq, @Player.Command int command, SessionTask task, - PostSessionTask postTask) { + PostSessionTask postTask) { long token = Binder.clearCallingIdentity(); try { @SuppressWarnings({"unchecked", "cast.unsafe"}) @@ -213,22 +217,25 @@ import java.util.concurrent.ExecutionException; @Player.Command int command, K sessionImpl, SessionTask task, - PostSessionTask postTask) { + PostSessionTask postTask) { return () -> { if (!connectedControllersManager.isPlayerCommandAvailable(controller, command)) { sendSessionResult( - controller, seq, new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED)); + sessionImpl, + controller, + seq, + new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED)); return; } @SessionResult.Code int resultCode = sessionImpl.onPlayerCommandRequestOnHandler(controller, command); if (resultCode != SessionResult.RESULT_SUCCESS) { // Don't run rejected command. - sendSessionResult(controller, seq, new SessionResult(resultCode)); + sendSessionResult(sessionImpl, controller, seq, new SessionResult(resultCode)); return; } T result = task.run(sessionImpl, controller); - postTask.run(controller, seq, result); + postTask.run(sessionImpl, controller, seq, result); }; } @@ -237,7 +244,7 @@ import java.util.concurrent.ExecutionException; int seq, @CommandCode int commandCode, SessionTask task, - PostSessionTask postTask) { + PostSessionTask postTask) { dispatchSessionTaskWithSessionCommandInternal( caller, seq, /* sessionCommand= */ null, commandCode, task, postTask); } @@ -247,7 +254,7 @@ import java.util.concurrent.ExecutionException; int seq, @CommandCode int commandCode, SessionTask task, - PostSessionTask postTask) { + PostSessionTask postTask) { dispatchSessionTaskWithSessionCommandInternal( caller, seq, /* sessionCommand= */ null, commandCode, task, postTask); } @@ -257,7 +264,7 @@ import java.util.concurrent.ExecutionException; int seq, SessionCommand sessionCommand, SessionTask task, - PostSessionTask postTask) { + PostSessionTask postTask) { dispatchSessionTaskWithSessionCommandInternal( caller, seq, sessionCommand, COMMAND_CODE_CUSTOM, task, postTask); } @@ -268,7 +275,7 @@ import java.util.concurrent.ExecutionException; @Nullable SessionCommand sessionCommand, @CommandCode int commandCode, SessionTask task, - PostSessionTask postTask) { + PostSessionTask postTask) { long token = Binder.clearCallingIdentity(); try { @SuppressWarnings({"unchecked", "cast.unsafe"}) @@ -292,6 +299,7 @@ import java.util.concurrent.ExecutionException; if (!connectedControllersManager.isSessionCommandAvailable( controller, sessionCommand)) { sendSessionResult( + sessionImpl, controller, seq, new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED)); @@ -300,6 +308,7 @@ import java.util.concurrent.ExecutionException; } else { if (!connectedControllersManager.isSessionCommandAvailable(controller, commandCode)) { sendSessionResult( + sessionImpl, controller, seq, new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED)); @@ -307,7 +316,7 @@ import java.util.concurrent.ExecutionException; } } T result = task.run(sessionImpl, controller); - postTask.run(controller, seq, result); + postTask.run(sessionImpl, controller, seq, result); }); } finally { Binder.restoreCallingIdentity(token); @@ -1696,8 +1705,8 @@ import java.util.concurrent.ExecutionException; T run(K sessionImpl, ControllerInfo controller); } - private interface PostSessionTask { - void run(ControllerInfo controller, int seq, T result); + private interface PostSessionTask { + void run(K sessionImpl, ControllerInfo controller, int seq, T result); } /* package */ static final class Controller2Cb implements ControllerCb {