Dispatch custom action in MediaSessionLegacyStub
A custom action sent by legacy controllers as for instance the System UI mini player arrive at MediaSessionCompat.Callback.onCustomAction() and need to be dispatched to the session callback as a such. PiperOrigin-RevId: 447486859
This commit is contained in:
parent
7a631f4050
commit
4c838043d3
@ -189,6 +189,16 @@ import org.checkerframework.checker.initialization.qual.Initialized;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCustomAction(String action, @Nullable Bundle extras) {
|
||||
Bundle args = extras == null ? Bundle.EMPTY : extras;
|
||||
SessionCommand command = new SessionCommand(action, args);
|
||||
dispatchSessionTaskWithSessionCommand(
|
||||
command,
|
||||
controller ->
|
||||
ignoreFuture(sessionImpl.onCustomCommandOnHandler(controller, command, args)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
|
||||
@Nullable KeyEvent keyEvent = mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
|
||||
@ -457,11 +467,6 @@ import org.checkerframework.checker.initialization.qual.Initialized;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCustomAction(String action, @Nullable Bundle extras) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSetCaptioningEnabled(boolean enabled) {
|
||||
// no-op
|
||||
|
@ -701,6 +701,58 @@ public class MediaSessionCallbackWithMediaControllerCompatTest {
|
||||
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendCustomCommand() throws Exception {
|
||||
String testCommand = "test_custom_command";
|
||||
Bundle testArgs = new Bundle();
|
||||
testArgs.putString("args", "test_custom_args");
|
||||
SessionCommand customCommand = new SessionCommand(testCommand, /* extras= */ Bundle.EMPTY);
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
SessionCallback callback =
|
||||
new SessionCallback() {
|
||||
@Override
|
||||
public MediaSession.ConnectionResult onConnect(
|
||||
MediaSession session, ControllerInfo controller) {
|
||||
if (EXPECTED_CONTROLLER_PACKAGE_NAME.equals(controller.getPackageName())) {
|
||||
MediaSession.ConnectionResult connectionResult =
|
||||
SessionCallback.super.onConnect(session, controller);
|
||||
SessionCommands.Builder builder =
|
||||
connectionResult.availableSessionCommands.buildUpon().add(customCommand);
|
||||
return MediaSession.ConnectionResult.accept(
|
||||
/* availableSessionCommands= */ builder.build(),
|
||||
connectionResult.availablePlayerCommands);
|
||||
} else {
|
||||
return MediaSession.ConnectionResult.reject();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<SessionResult> onCustomCommand(
|
||||
MediaSession session,
|
||||
ControllerInfo controller,
|
||||
SessionCommand sessionCommand,
|
||||
Bundle args) {
|
||||
if (sessionCommand.customAction.equals(testCommand)
|
||||
&& TestUtils.equals(testArgs, args)) {
|
||||
latch.countDown();
|
||||
}
|
||||
return Futures.immediateFuture(new SessionResult(RESULT_SUCCESS));
|
||||
}
|
||||
};
|
||||
session =
|
||||
new MediaSession.Builder(context, player)
|
||||
.setId("sendCommand")
|
||||
.setSessionCallback(callback)
|
||||
.build();
|
||||
controller =
|
||||
new RemoteMediaControllerCompat(
|
||||
context, session.getSessionCompat().getSessionToken(), /* waitForConnection= */ true);
|
||||
|
||||
controller.sendCustomCommand(customCommand, testArgs);
|
||||
|
||||
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void controllerCallback_sessionRejects() throws Exception {
|
||||
SessionCallback sessionCallback =
|
||||
|
@ -120,6 +120,11 @@ public class RemoteMediaControllerCompat {
|
||||
binder.sendCommand(controllerId, command, params, cb);
|
||||
}
|
||||
|
||||
public void sendCustomCommand(SessionCommand customCommand, Bundle params)
|
||||
throws RemoteException {
|
||||
binder.sendCustomActionWithName(controllerId, customCommand.customAction, params);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// MediaControllerCompat.TransportControls methods
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user