From bb358241b9505056eec137bfc7700ffe9a12f872 Mon Sep 17 00:00:00 2001 From: bachinger Date: Tue, 18 Feb 2025 05:04:33 -0800 Subject: [PATCH] Make setSessionActivity accept null Issue: androidx/media#2109 PiperOrigin-RevId: 728160580 (cherry picked from commit 2b8700beaaabd51365daf9099c42bfa64a2dd4fe) --- RELEASENOTES.md | 2 + .../media3/session/IMediaController.aidl | 2 +- .../media3/session/MediaController.java | 2 +- .../session/MediaControllerImplBase.java | 5 +- .../media3/session/MediaControllerStub.java | 4 -- .../androidx/media3/session/MediaSession.java | 15 +++--- .../media3/session/MediaSessionImpl.java | 8 ++-- .../session/MediaSessionLegacyStub.java | 2 +- .../media3/session/MediaSessionStub.java | 5 +- .../session/legacy/MediaSessionCompat.java | 8 ++-- ...lerCompatCallbackWithMediaSessionTest.java | 48 ++++++++++++++++--- .../session/MediaControllerListenerTest.java | 38 ++++++++++----- .../session/MediaSessionProviderService.java | 2 +- .../media3/session/RemoteMediaSession.java | 2 +- .../session/RemoteMediaSessionCompat.java | 2 +- .../session/TestMediaBrowserListener.java | 3 +- 16 files changed, 102 insertions(+), 46 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e5344d9f08..ad5477b544 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -35,6 +35,8 @@ This release includes the following changes since the to stop the foreground service before `stopSelf()` when overriding `onTaskRemoved`, use `MediaSessionService.pauseAllPlayersAndStopSelf()` instead. + * Make `MediaSession.setSessionActivity(PendingIntent)` accept null + ([#2109](https://github.com/androidx/media/issues/2109)). * Keep notification visible when playback enters an error or stopped state. The notification is only removed if the playlist is cleared or the player is released. diff --git a/libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl b/libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl index 3bf80ae6d3..00e7e06b0d 100644 --- a/libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl +++ b/libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl @@ -48,7 +48,7 @@ oneway interface IMediaController { int seq, in Bundle sessionCommandsBundle, in Bundle playerCommandsBundle) = 3009; void onRenderedFirstFrame(int seq) = 3010; void onExtrasChanged(int seq, in Bundle extras) = 3011; - void onSessionActivityChanged(int seq, in PendingIntent pendingIntent) = 3013; + void onSessionActivityChanged(int seq, in @nullable PendingIntent pendingIntent) = 3013; void onError(int seq, in Bundle sessionError) = 3014; void onSetMediaButtonPreferences(int seq, in List commandButtonList) = 3015; // Next Id for MediaController: 3016 diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaController.java b/libraries/session/src/main/java/androidx/media3/session/MediaController.java index 8eef3ccb73..55579a3a8a 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaController.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaController.java @@ -493,7 +493,7 @@ public class MediaController implements Player { */ @UnstableApi default void onSessionActivityChanged( - MediaController controller, PendingIntent sessionActivity) {} + MediaController controller, @Nullable PendingIntent sessionActivity) {} /** * Called when an non-fatal error {@linkplain diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java index 2d255b636f..a31925066e 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java @@ -93,6 +93,7 @@ import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -3079,8 +3080,8 @@ import org.checkerframework.checker.nullness.qual.NonNull; }); } - public void onSetSessionActivity(int seq, PendingIntent sessionActivity) { - if (!isConnected()) { + public void onSetSessionActivity(int seq, @Nullable PendingIntent sessionActivity) { + if (!isConnected() || Objects.equals(this.sessionActivity, sessionActivity)) { return; } this.sessionActivity = sessionActivity; diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java index babfea061f..f06ef6019a 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java @@ -214,10 +214,6 @@ import org.checkerframework.checker.nullness.qual.NonNull; @Override public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity) throws RemoteException { - if (sessionActivity == null) { - Log.w(TAG, "Ignoring null session activity intent"); - return; - } dispatchControllerTaskOnHandler( controller -> controller.onSetSessionActivity(seq, sessionActivity)); } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java index 441a29e111..d4ac85f897 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java @@ -789,13 +789,16 @@ public class MediaSession { * Updates the session activity that was set when {@linkplain * Builder#setSessionActivity(PendingIntent) building the session}. * - * @param activityPendingIntent The pending intent to start the session activity. + *

Note: When a controller is connected to the session that has a version smaller than 1.6.0, + * then setting the session activity to null has no effect on the controller side. + * + * @param activityPendingIntent The pending intent to start the session activity or null. * @throws IllegalArgumentException if the {@link PendingIntent} passed into this method is * {@linkplain PendingIntent#getActivity(Context, int, Intent, int) not an activity}. */ @UnstableApi - public final void setSessionActivity(PendingIntent activityPendingIntent) { - if (Util.SDK_INT >= 31) { + public final void setSessionActivity(@Nullable PendingIntent activityPendingIntent) { + if (Util.SDK_INT >= 31 && activityPendingIntent != null) { checkArgument(Api31.isActivity(activityPendingIntent)); } impl.setSessionActivity(activityPendingIntent); @@ -818,8 +821,8 @@ public class MediaSession { */ @UnstableApi public final void setSessionActivity( - ControllerInfo controller, PendingIntent activityPendingIntent) { - if (Util.SDK_INT >= 31) { + ControllerInfo controller, @Nullable PendingIntent activityPendingIntent) { + if (Util.SDK_INT >= 31 && activityPendingIntent != null) { checkArgument(Api31.isActivity(activityPendingIntent)); } impl.setSessionActivity(controller, activityPendingIntent); @@ -2088,7 +2091,7 @@ public class MediaSession { default void setMediaButtonPreferences(int seq, List mediaButtonPreferences) throws RemoteException {} - default void onSessionActivityChanged(int seq, PendingIntent sessionActivity) + default void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity) throws RemoteException {} default void onSessionExtrasChanged(int seq, Bundle sessionExtras) throws RemoteException {} diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java index 5982884195..1dae1d41f3 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java @@ -95,7 +95,6 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutionException; import org.checkerframework.checker.initialization.qual.Initialized; -import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /* package */ class MediaSessionImpl { @@ -136,7 +135,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private PlayerInfo playerInfo; private PlayerWrapper playerWrapper; - private @MonotonicNonNull PendingIntent sessionActivity; + @Nullable private PendingIntent sessionActivity; @Nullable private PlayerListener playerListener; @Nullable private MediaSession.Listener mediaSessionListener; @Nullable private ControllerInfo controllerForCurrentRequest; @@ -850,7 +849,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } @UnstableApi - protected void setSessionActivity(PendingIntent sessionActivity) { + protected void setSessionActivity(@Nullable PendingIntent sessionActivity) { this.sessionActivity = sessionActivity; ImmutableList connectedControllers = sessionStub.getConnectedControllersManager().getConnectedControllers(); @@ -860,7 +859,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } @UnstableApi - protected void setSessionActivity(ControllerInfo controller, PendingIntent sessionActivity) { + protected void setSessionActivity( + ControllerInfo controller, @Nullable PendingIntent sessionActivity) { if (controller.getControllerVersion() >= 3 && sessionStub.getConnectedControllersManager().isConnected(controller)) { dispatchRemoteControllerTaskWithoutReturn( 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 e90259917c..3e17543351 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -1137,7 +1137,7 @@ import org.checkerframework.checker.initialization.qual.Initialized; } @Override - public void onSessionActivityChanged(int seq, PendingIntent sessionActivity) { + public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity) { sessionCompat.setSessionActivity(sessionActivity); } 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 b170e9d773..cfb4a2ea85 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java @@ -2098,9 +2098,10 @@ import java.util.concurrent.ExecutionException; } } + @SuppressWarnings("nullness:argument") // sessionActivity can be null. @Override - public void onSessionActivityChanged(int sequenceNumber, PendingIntent sessionActivity) - throws RemoteException { + public void onSessionActivityChanged( + int sequenceNumber, @Nullable PendingIntent sessionActivity) throws RemoteException { iController.onSessionActivityChanged(sequenceNumber, sessionActivity); } diff --git a/libraries/session/src/main/java/androidx/media3/session/legacy/MediaSessionCompat.java b/libraries/session/src/main/java/androidx/media3/session/legacy/MediaSessionCompat.java index 24e2ae569a..932060500f 100644 --- a/libraries/session/src/main/java/androidx/media3/session/legacy/MediaSessionCompat.java +++ b/libraries/session/src/main/java/androidx/media3/session/legacy/MediaSessionCompat.java @@ -550,7 +550,7 @@ public class MediaSessionCompat { * * @param pi The intent to launch to show UI for this Session. */ - public void setSessionActivity(PendingIntent pi) { + public void setSessionActivity(@Nullable PendingIntent pi) { mImpl.setSessionActivity(pi); } @@ -2219,7 +2219,7 @@ public class MediaSessionCompat { void setMetadata(@Nullable MediaMetadataCompat metadata); - void setSessionActivity(PendingIntent pi); + void setSessionActivity(@Nullable PendingIntent pi); void setMediaButtonReceiver(@Nullable PendingIntent mbr); @@ -2700,7 +2700,7 @@ public class MediaSessionCompat { } @Override - public void setSessionActivity(PendingIntent pi) { + public void setSessionActivity(@Nullable PendingIntent pi) { synchronized (mLock) { mSessionActivity = pi; } @@ -4053,7 +4053,7 @@ public class MediaSessionCompat { } @Override - public void setSessionActivity(PendingIntent pi) { + public void setSessionActivity(@Nullable PendingIntent pi) { mSessionFwk.setSessionActivity(pi); } diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java index 906b4f1206..a9b4afbd0e 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java @@ -1217,6 +1217,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { assertThat(playbackStateExtrasFromController.get()).string("key-0").isEqualTo("value-0"); } + @SuppressWarnings("deprecation") // Testing access through deprecated androidx.media library @Test public void setSessionActivity_forAllControllers_changedWhenReceivedWithSetter() throws Exception { @@ -1224,12 +1225,17 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { PendingIntent sessionActivity = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); - CountDownLatch latch = new CountDownLatch(1); + CountDownLatch playingLatch = new CountDownLatch(1); + CountDownLatch bufferingLatch = new CountDownLatch(1); MediaControllerCompat.Callback callback = new MediaControllerCompat.Callback() { @Override public void onPlaybackStateChanged(PlaybackStateCompat state) { - latch.countDown(); + if (state.getState() == PlaybackStateCompat.STATE_BUFFERING) { + bufferingLatch.countDown(); + } else if (state.getState() == PlaybackStateCompat.STATE_PLAYING) { + playingLatch.countDown(); + } } }; controllerCompat.registerCallback(callback, handler); @@ -1238,12 +1244,25 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { session.setSessionActivity(/* controllerKey= */ null, sessionActivity); // The legacy API has no change listener for the session activity. Changing the state to // trigger a callback. + session + .getMockPlayer() + .notifyPlayWhenReadyChanged( + true, + Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, + Player.PLAYBACK_SUPPRESSION_REASON_NONE); session.getMockPlayer().notifyPlaybackStateChanged(STATE_READY); - assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); + assertThat(playingLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); assertThat(controllerCompat.getSessionActivity()).isEqualTo(sessionActivity); + + session.setSessionActivity(/* controllerKey= */ null, null); + session.getMockPlayer().notifyPlaybackStateChanged(Player.STATE_BUFFERING); + + assertThat(bufferingLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); + assertThat(controllerCompat.getSessionActivity()).isNull(); } + @SuppressWarnings("deprecation") // Testing access through deprecated androidx.media library @Test public void setSessionActivity_setToNotificationController_changedWhenReceivedWithSetter() throws Exception { @@ -1251,24 +1270,41 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { PendingIntent sessionActivity = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); - CountDownLatch latch = new CountDownLatch(1); + CountDownLatch playingLatch = new CountDownLatch(1); + CountDownLatch bufferingLatch = new CountDownLatch(1); MediaControllerCompat.Callback callback = new MediaControllerCompat.Callback() { @Override public void onPlaybackStateChanged(PlaybackStateCompat state) { - latch.countDown(); + if (state.getState() == PlaybackStateCompat.STATE_BUFFERING) { + bufferingLatch.countDown(); + } else if (state.getState() == PlaybackStateCompat.STATE_PLAYING) { + playingLatch.countDown(); + } } }; controllerCompat.registerCallback(callback, handler); assertThat(controllerCompat.getSessionActivity()).isNull(); session.setSessionActivity(NOTIFICATION_CONTROLLER_KEY, sessionActivity); + session + .getMockPlayer() + .notifyPlayWhenReadyChanged( + true, + Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, + Player.PLAYBACK_SUPPRESSION_REASON_NONE); // The legacy API has no change listener for the session activity. Changing the state to // trigger a callback. session.getMockPlayer().notifyPlaybackStateChanged(STATE_READY); - assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); + assertThat(playingLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); assertThat(controllerCompat.getSessionActivity()).isEqualTo(sessionActivity); + + session.setSessionActivity(NOTIFICATION_CONTROLLER_KEY, null); + session.getMockPlayer().notifyPlaybackStateChanged(Player.STATE_BUFFERING); + + assertThat(bufferingLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); + assertThat(controllerCompat.getSessionActivity()).isNull(); } @Test diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java index af606963e8..0894c9c339 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerListenerTest.java @@ -2566,14 +2566,19 @@ public class MediaControllerListenerTest { PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); CountDownLatch latch = new CountDownLatch(1); + CountDownLatch nullLatch = new CountDownLatch(1); List receivedSessionActivities = new ArrayList<>(); MediaController.Listener listener = new MediaController.Listener() { @Override public void onSessionActivityChanged( - MediaController controller, PendingIntent sessionActivity) { - receivedSessionActivities.add(sessionActivity); - latch.countDown(); + MediaController controller, @Nullable PendingIntent sessionActivity) { + if (sessionActivity == null) { + nullLatch.countDown(); + } else { + receivedSessionActivities.add(sessionActivity); + latch.countDown(); + } } }; MediaController controller = @@ -2586,6 +2591,13 @@ public class MediaControllerListenerTest { assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); assertThat(controller.getSessionActivity()).isEqualTo(sessionActivity); assertThat(receivedSessionActivities).containsExactly(sessionActivity); + + remoteSession.setSessionActivity(/* controllerKey= */ null, sessionActivity); + remoteSession.setSessionActivity(/* controllerKey= */ null, null); + + assertThat(nullLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); + assertThat(controller.getSessionActivity()).isNull(); + assertThat(receivedSessionActivities).containsExactly(sessionActivity); } @Test @@ -2601,7 +2613,7 @@ public class MediaControllerListenerTest { new MediaController.Listener() { @Override public void onSessionActivityChanged( - MediaController controller, PendingIntent sessionActivity) { + MediaController controller, @Nullable PendingIntent sessionActivity) { receivedSessionActivities1.add(sessionActivity); latch1.countDown(); } @@ -2610,15 +2622,17 @@ public class MediaControllerListenerTest { connectionHints1.putString(KEY_CONTROLLER, "ctrl-1"); MediaController controller1 = controllerTestRule.createController(remoteSession.getToken(), connectionHints1, listener1); - List receivedSessionActivities2 = new ArrayList<>(); + AtomicInteger controller2CallbackCount = new AtomicInteger(); CountDownLatch latch2 = new CountDownLatch(1); MediaController.Listener listener2 = new MediaController.Listener() { @Override public void onSessionActivityChanged( - MediaController controller, PendingIntent sessionActivity) { - receivedSessionActivities2.add(sessionActivity); - latch2.countDown(); + MediaController controller, @Nullable PendingIntent sessionActivity) { + controller2CallbackCount.incrementAndGet(); + if (sessionActivity == null) { + latch2.countDown(); + } } }; Bundle connectionHints2 = new Bundle(); @@ -2634,14 +2648,16 @@ public class MediaControllerListenerTest { assertThat(controller1.getSessionActivity()).isEqualTo(sessionActivity); assertThat(controller2.getSessionActivity()).isNull(); assertThat(receivedSessionActivities1).containsExactly(sessionActivity); - assertThat(receivedSessionActivities2).isEmpty(); + assertThat(controller2CallbackCount.get()).isEqualTo(0); remoteSession.setSessionActivity(/* controllerKey= */ "ctrl-2", sessionActivity); + remoteSession.setSessionActivity(/* controllerKey= */ "ctrl-2", null); assertThat(latch2.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); - assertThat(controller2.getSessionActivity()).isEqualTo(sessionActivity); + assertThat(controller1.getSessionActivity()).isEqualTo(sessionActivity); + assertThat(controller2.getSessionActivity()).isNull(); assertThat(receivedSessionActivities1).containsExactly(sessionActivity); - assertThat(receivedSessionActivities2).containsExactly(sessionActivity); + assertThat(controller2CallbackCount.get()).isEqualTo(2); } @Test diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java b/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java index 18b4d13b8e..5d0aca818e 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java @@ -703,7 +703,7 @@ public class MediaSessionProviderService extends Service { @Override public void setSessionActivity( - String sessionId, @Nullable String controllerKey, PendingIntent sessionActivity) + String sessionId, @Nullable String controllerKey, @Nullable PendingIntent sessionActivity) throws RemoteException { MediaSession mediaSession = sessionMap.get(sessionId); if (mediaSession == null) { diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSession.java b/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSession.java index ede58ca05d..80d9541f8b 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSession.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSession.java @@ -218,7 +218,7 @@ public class RemoteMediaSession { binder.setSessionExtrasForController(sessionId, controllerKey, extras); } - public void setSessionActivity(String controllerKey, PendingIntent sessionActivity) + public void setSessionActivity(String controllerKey, @Nullable PendingIntent sessionActivity) throws RemoteException { binder.setSessionActivity(sessionId, controllerKey, sessionActivity); } diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSessionCompat.java b/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSessionCompat.java index e190bc39dc..776ad7dd88 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSessionCompat.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/RemoteMediaSessionCompat.java @@ -156,7 +156,7 @@ public class RemoteMediaSessionCompat { binder.setShuffleMode(sessionTag, shuffleMode); } - public void setSessionActivity(PendingIntent intent) throws RemoteException { + public void setSessionActivity(@Nullable PendingIntent intent) throws RemoteException { binder.setSessionActivity(sessionTag, intent); } diff --git a/libraries/test_session_current/src/main/java/androidx/media3/session/TestMediaBrowserListener.java b/libraries/test_session_current/src/main/java/androidx/media3/session/TestMediaBrowserListener.java index 30f95c6c94..7d88837180 100644 --- a/libraries/test_session_current/src/main/java/androidx/media3/session/TestMediaBrowserListener.java +++ b/libraries/test_session_current/src/main/java/androidx/media3/session/TestMediaBrowserListener.java @@ -79,7 +79,8 @@ public final class TestMediaBrowserListener implements MediaBrowser.Listener { } @Override - public void onSessionActivityChanged(MediaController controller, PendingIntent sessionActivity) { + public void onSessionActivityChanged( + MediaController controller, @Nullable PendingIntent sessionActivity) { delegate.onSessionActivityChanged(controller, sessionActivity); }