Make setSessionActivity accept null

Issue: androidx/media#2109
PiperOrigin-RevId: 728160580
(cherry picked from commit 2b8700beaaabd51365daf9099c42bfa64a2dd4fe)
This commit is contained in:
bachinger 2025-02-18 05:04:33 -08:00 committed by tonihei
parent bc872503b9
commit bb358241b9
16 changed files with 102 additions and 46 deletions

View File

@ -35,6 +35,8 @@ This release includes the following changes since the
to stop the foreground service before `stopSelf()` when overriding to stop the foreground service before `stopSelf()` when overriding
`onTaskRemoved`, use `MediaSessionService.pauseAllPlayersAndStopSelf()` `onTaskRemoved`, use `MediaSessionService.pauseAllPlayersAndStopSelf()`
instead. 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 * Keep notification visible when playback enters an error or stopped
state. The notification is only removed if the playlist is cleared or state. The notification is only removed if the playlist is cleared or
the player is released. the player is released.

View File

@ -48,7 +48,7 @@ oneway interface IMediaController {
int seq, in Bundle sessionCommandsBundle, in Bundle playerCommandsBundle) = 3009; int seq, in Bundle sessionCommandsBundle, in Bundle playerCommandsBundle) = 3009;
void onRenderedFirstFrame(int seq) = 3010; void onRenderedFirstFrame(int seq) = 3010;
void onExtrasChanged(int seq, in Bundle extras) = 3011; 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 onError(int seq, in Bundle sessionError) = 3014;
void onSetMediaButtonPreferences(int seq, in List<Bundle> commandButtonList) = 3015; void onSetMediaButtonPreferences(int seq, in List<Bundle> commandButtonList) = 3015;
// Next Id for MediaController: 3016 // Next Id for MediaController: 3016

View File

@ -493,7 +493,7 @@ public class MediaController implements Player {
*/ */
@UnstableApi @UnstableApi
default void onSessionActivityChanged( default void onSessionActivityChanged(
MediaController controller, PendingIntent sessionActivity) {} MediaController controller, @Nullable PendingIntent sessionActivity) {}
/** /**
* Called when an non-fatal error {@linkplain * Called when an non-fatal error {@linkplain

View File

@ -93,6 +93,7 @@ import com.google.common.util.concurrent.MoreExecutors;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.CancellationException; import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
@ -3079,8 +3080,8 @@ import org.checkerframework.checker.nullness.qual.NonNull;
}); });
} }
public void onSetSessionActivity(int seq, PendingIntent sessionActivity) { public void onSetSessionActivity(int seq, @Nullable PendingIntent sessionActivity) {
if (!isConnected()) { if (!isConnected() || Objects.equals(this.sessionActivity, sessionActivity)) {
return; return;
} }
this.sessionActivity = sessionActivity; this.sessionActivity = sessionActivity;

View File

@ -214,10 +214,6 @@ import org.checkerframework.checker.nullness.qual.NonNull;
@Override @Override
public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity) public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity)
throws RemoteException { throws RemoteException {
if (sessionActivity == null) {
Log.w(TAG, "Ignoring null session activity intent");
return;
}
dispatchControllerTaskOnHandler( dispatchControllerTaskOnHandler(
controller -> controller.onSetSessionActivity(seq, sessionActivity)); controller -> controller.onSetSessionActivity(seq, sessionActivity));
} }

View File

@ -789,13 +789,16 @@ public class MediaSession {
* Updates the session activity that was set when {@linkplain * Updates the session activity that was set when {@linkplain
* Builder#setSessionActivity(PendingIntent) building the session}. * Builder#setSessionActivity(PendingIntent) building the session}.
* *
* @param activityPendingIntent The pending intent to start the session activity. * <p>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 * @throws IllegalArgumentException if the {@link PendingIntent} passed into this method is
* {@linkplain PendingIntent#getActivity(Context, int, Intent, int) not an activity}. * {@linkplain PendingIntent#getActivity(Context, int, Intent, int) not an activity}.
*/ */
@UnstableApi @UnstableApi
public final void setSessionActivity(PendingIntent activityPendingIntent) { public final void setSessionActivity(@Nullable PendingIntent activityPendingIntent) {
if (Util.SDK_INT >= 31) { if (Util.SDK_INT >= 31 && activityPendingIntent != null) {
checkArgument(Api31.isActivity(activityPendingIntent)); checkArgument(Api31.isActivity(activityPendingIntent));
} }
impl.setSessionActivity(activityPendingIntent); impl.setSessionActivity(activityPendingIntent);
@ -818,8 +821,8 @@ public class MediaSession {
*/ */
@UnstableApi @UnstableApi
public final void setSessionActivity( public final void setSessionActivity(
ControllerInfo controller, PendingIntent activityPendingIntent) { ControllerInfo controller, @Nullable PendingIntent activityPendingIntent) {
if (Util.SDK_INT >= 31) { if (Util.SDK_INT >= 31 && activityPendingIntent != null) {
checkArgument(Api31.isActivity(activityPendingIntent)); checkArgument(Api31.isActivity(activityPendingIntent));
} }
impl.setSessionActivity(controller, activityPendingIntent); impl.setSessionActivity(controller, activityPendingIntent);
@ -2088,7 +2091,7 @@ public class MediaSession {
default void setMediaButtonPreferences(int seq, List<CommandButton> mediaButtonPreferences) default void setMediaButtonPreferences(int seq, List<CommandButton> mediaButtonPreferences)
throws RemoteException {} throws RemoteException {}
default void onSessionActivityChanged(int seq, PendingIntent sessionActivity) default void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity)
throws RemoteException {} throws RemoteException {}
default void onSessionExtrasChanged(int seq, Bundle sessionExtras) throws RemoteException {} default void onSessionExtrasChanged(int seq, Bundle sessionExtras) throws RemoteException {}

View File

@ -95,7 +95,6 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import org.checkerframework.checker.initialization.qual.Initialized; import org.checkerframework.checker.initialization.qual.Initialized;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* package */ class MediaSessionImpl { /* package */ class MediaSessionImpl {
@ -136,7 +135,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private PlayerInfo playerInfo; private PlayerInfo playerInfo;
private PlayerWrapper playerWrapper; private PlayerWrapper playerWrapper;
private @MonotonicNonNull PendingIntent sessionActivity; @Nullable private PendingIntent sessionActivity;
@Nullable private PlayerListener playerListener; @Nullable private PlayerListener playerListener;
@Nullable private MediaSession.Listener mediaSessionListener; @Nullable private MediaSession.Listener mediaSessionListener;
@Nullable private ControllerInfo controllerForCurrentRequest; @Nullable private ControllerInfo controllerForCurrentRequest;
@ -850,7 +849,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
@UnstableApi @UnstableApi
protected void setSessionActivity(PendingIntent sessionActivity) { protected void setSessionActivity(@Nullable PendingIntent sessionActivity) {
this.sessionActivity = sessionActivity; this.sessionActivity = sessionActivity;
ImmutableList<ControllerInfo> connectedControllers = ImmutableList<ControllerInfo> connectedControllers =
sessionStub.getConnectedControllersManager().getConnectedControllers(); sessionStub.getConnectedControllersManager().getConnectedControllers();
@ -860,7 +859,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
@UnstableApi @UnstableApi
protected void setSessionActivity(ControllerInfo controller, PendingIntent sessionActivity) { protected void setSessionActivity(
ControllerInfo controller, @Nullable PendingIntent sessionActivity) {
if (controller.getControllerVersion() >= 3 if (controller.getControllerVersion() >= 3
&& sessionStub.getConnectedControllersManager().isConnected(controller)) { && sessionStub.getConnectedControllersManager().isConnected(controller)) {
dispatchRemoteControllerTaskWithoutReturn( dispatchRemoteControllerTaskWithoutReturn(

View File

@ -1137,7 +1137,7 @@ import org.checkerframework.checker.initialization.qual.Initialized;
} }
@Override @Override
public void onSessionActivityChanged(int seq, PendingIntent sessionActivity) { public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity) {
sessionCompat.setSessionActivity(sessionActivity); sessionCompat.setSessionActivity(sessionActivity);
} }

View File

@ -2098,9 +2098,10 @@ import java.util.concurrent.ExecutionException;
} }
} }
@SuppressWarnings("nullness:argument") // sessionActivity can be null.
@Override @Override
public void onSessionActivityChanged(int sequenceNumber, PendingIntent sessionActivity) public void onSessionActivityChanged(
throws RemoteException { int sequenceNumber, @Nullable PendingIntent sessionActivity) throws RemoteException {
iController.onSessionActivityChanged(sequenceNumber, sessionActivity); iController.onSessionActivityChanged(sequenceNumber, sessionActivity);
} }

View File

@ -550,7 +550,7 @@ public class MediaSessionCompat {
* *
* @param pi The intent to launch to show UI for this Session. * @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); mImpl.setSessionActivity(pi);
} }
@ -2219,7 +2219,7 @@ public class MediaSessionCompat {
void setMetadata(@Nullable MediaMetadataCompat metadata); void setMetadata(@Nullable MediaMetadataCompat metadata);
void setSessionActivity(PendingIntent pi); void setSessionActivity(@Nullable PendingIntent pi);
void setMediaButtonReceiver(@Nullable PendingIntent mbr); void setMediaButtonReceiver(@Nullable PendingIntent mbr);
@ -2700,7 +2700,7 @@ public class MediaSessionCompat {
} }
@Override @Override
public void setSessionActivity(PendingIntent pi) { public void setSessionActivity(@Nullable PendingIntent pi) {
synchronized (mLock) { synchronized (mLock) {
mSessionActivity = pi; mSessionActivity = pi;
} }
@ -4053,7 +4053,7 @@ public class MediaSessionCompat {
} }
@Override @Override
public void setSessionActivity(PendingIntent pi) { public void setSessionActivity(@Nullable PendingIntent pi) {
mSessionFwk.setSessionActivity(pi); mSessionFwk.setSessionActivity(pi);
} }

View File

@ -1217,6 +1217,7 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
assertThat(playbackStateExtrasFromController.get()).string("key-0").isEqualTo("value-0"); assertThat(playbackStateExtrasFromController.get()).string("key-0").isEqualTo("value-0");
} }
@SuppressWarnings("deprecation") // Testing access through deprecated androidx.media library
@Test @Test
public void setSessionActivity_forAllControllers_changedWhenReceivedWithSetter() public void setSessionActivity_forAllControllers_changedWhenReceivedWithSetter()
throws Exception { throws Exception {
@ -1224,12 +1225,17 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
PendingIntent sessionActivity = PendingIntent sessionActivity =
PendingIntent.getActivity( PendingIntent.getActivity(
context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); 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 = MediaControllerCompat.Callback callback =
new MediaControllerCompat.Callback() { new MediaControllerCompat.Callback() {
@Override @Override
public void onPlaybackStateChanged(PlaybackStateCompat state) { 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); controllerCompat.registerCallback(callback, handler);
@ -1238,12 +1244,25 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
session.setSessionActivity(/* controllerKey= */ null, sessionActivity); session.setSessionActivity(/* controllerKey= */ null, sessionActivity);
// The legacy API has no change listener for the session activity. Changing the state to // The legacy API has no change listener for the session activity. Changing the state to
// trigger a callback. // 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); session.getMockPlayer().notifyPlaybackStateChanged(STATE_READY);
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); assertThat(playingLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
assertThat(controllerCompat.getSessionActivity()).isEqualTo(sessionActivity); 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 @Test
public void setSessionActivity_setToNotificationController_changedWhenReceivedWithSetter() public void setSessionActivity_setToNotificationController_changedWhenReceivedWithSetter()
throws Exception { throws Exception {
@ -1251,24 +1270,41 @@ public class MediaControllerCompatCallbackWithMediaSessionTest {
PendingIntent sessionActivity = PendingIntent sessionActivity =
PendingIntent.getActivity( PendingIntent.getActivity(
context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); 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 = MediaControllerCompat.Callback callback =
new MediaControllerCompat.Callback() { new MediaControllerCompat.Callback() {
@Override @Override
public void onPlaybackStateChanged(PlaybackStateCompat state) { 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); controllerCompat.registerCallback(callback, handler);
assertThat(controllerCompat.getSessionActivity()).isNull(); assertThat(controllerCompat.getSessionActivity()).isNull();
session.setSessionActivity(NOTIFICATION_CONTROLLER_KEY, sessionActivity); 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 // The legacy API has no change listener for the session activity. Changing the state to
// trigger a callback. // trigger a callback.
session.getMockPlayer().notifyPlaybackStateChanged(STATE_READY); session.getMockPlayer().notifyPlaybackStateChanged(STATE_READY);
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); assertThat(playingLatch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
assertThat(controllerCompat.getSessionActivity()).isEqualTo(sessionActivity); 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 @Test

View File

@ -2566,15 +2566,20 @@ public class MediaControllerListenerTest {
PendingIntent.getActivity( PendingIntent.getActivity(
context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); context, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
CountDownLatch latch = new CountDownLatch(1); CountDownLatch latch = new CountDownLatch(1);
CountDownLatch nullLatch = new CountDownLatch(1);
List<PendingIntent> receivedSessionActivities = new ArrayList<>(); List<PendingIntent> receivedSessionActivities = new ArrayList<>();
MediaController.Listener listener = MediaController.Listener listener =
new MediaController.Listener() { new MediaController.Listener() {
@Override @Override
public void onSessionActivityChanged( public void onSessionActivityChanged(
MediaController controller, PendingIntent sessionActivity) { MediaController controller, @Nullable PendingIntent sessionActivity) {
if (sessionActivity == null) {
nullLatch.countDown();
} else {
receivedSessionActivities.add(sessionActivity); receivedSessionActivities.add(sessionActivity);
latch.countDown(); latch.countDown();
} }
}
}; };
MediaController controller = MediaController controller =
controllerTestRule.createController( controllerTestRule.createController(
@ -2586,6 +2591,13 @@ public class MediaControllerListenerTest {
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
assertThat(controller.getSessionActivity()).isEqualTo(sessionActivity); assertThat(controller.getSessionActivity()).isEqualTo(sessionActivity);
assertThat(receivedSessionActivities).containsExactly(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 @Test
@ -2601,7 +2613,7 @@ public class MediaControllerListenerTest {
new MediaController.Listener() { new MediaController.Listener() {
@Override @Override
public void onSessionActivityChanged( public void onSessionActivityChanged(
MediaController controller, PendingIntent sessionActivity) { MediaController controller, @Nullable PendingIntent sessionActivity) {
receivedSessionActivities1.add(sessionActivity); receivedSessionActivities1.add(sessionActivity);
latch1.countDown(); latch1.countDown();
} }
@ -2610,16 +2622,18 @@ public class MediaControllerListenerTest {
connectionHints1.putString(KEY_CONTROLLER, "ctrl-1"); connectionHints1.putString(KEY_CONTROLLER, "ctrl-1");
MediaController controller1 = MediaController controller1 =
controllerTestRule.createController(remoteSession.getToken(), connectionHints1, listener1); controllerTestRule.createController(remoteSession.getToken(), connectionHints1, listener1);
List<PendingIntent> receivedSessionActivities2 = new ArrayList<>(); AtomicInteger controller2CallbackCount = new AtomicInteger();
CountDownLatch latch2 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1);
MediaController.Listener listener2 = MediaController.Listener listener2 =
new MediaController.Listener() { new MediaController.Listener() {
@Override @Override
public void onSessionActivityChanged( public void onSessionActivityChanged(
MediaController controller, PendingIntent sessionActivity) { MediaController controller, @Nullable PendingIntent sessionActivity) {
receivedSessionActivities2.add(sessionActivity); controller2CallbackCount.incrementAndGet();
if (sessionActivity == null) {
latch2.countDown(); latch2.countDown();
} }
}
}; };
Bundle connectionHints2 = new Bundle(); Bundle connectionHints2 = new Bundle();
connectionHints2.putString(KEY_CONTROLLER, "ctrl-2"); connectionHints2.putString(KEY_CONTROLLER, "ctrl-2");
@ -2634,14 +2648,16 @@ public class MediaControllerListenerTest {
assertThat(controller1.getSessionActivity()).isEqualTo(sessionActivity); assertThat(controller1.getSessionActivity()).isEqualTo(sessionActivity);
assertThat(controller2.getSessionActivity()).isNull(); assertThat(controller2.getSessionActivity()).isNull();
assertThat(receivedSessionActivities1).containsExactly(sessionActivity); assertThat(receivedSessionActivities1).containsExactly(sessionActivity);
assertThat(receivedSessionActivities2).isEmpty(); assertThat(controller2CallbackCount.get()).isEqualTo(0);
remoteSession.setSessionActivity(/* controllerKey= */ "ctrl-2", sessionActivity); remoteSession.setSessionActivity(/* controllerKey= */ "ctrl-2", sessionActivity);
remoteSession.setSessionActivity(/* controllerKey= */ "ctrl-2", null);
assertThat(latch2.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); 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(receivedSessionActivities1).containsExactly(sessionActivity);
assertThat(receivedSessionActivities2).containsExactly(sessionActivity); assertThat(controller2CallbackCount.get()).isEqualTo(2);
} }
@Test @Test

View File

@ -703,7 +703,7 @@ public class MediaSessionProviderService extends Service {
@Override @Override
public void setSessionActivity( public void setSessionActivity(
String sessionId, @Nullable String controllerKey, PendingIntent sessionActivity) String sessionId, @Nullable String controllerKey, @Nullable PendingIntent sessionActivity)
throws RemoteException { throws RemoteException {
MediaSession mediaSession = sessionMap.get(sessionId); MediaSession mediaSession = sessionMap.get(sessionId);
if (mediaSession == null) { if (mediaSession == null) {

View File

@ -218,7 +218,7 @@ public class RemoteMediaSession {
binder.setSessionExtrasForController(sessionId, controllerKey, extras); binder.setSessionExtrasForController(sessionId, controllerKey, extras);
} }
public void setSessionActivity(String controllerKey, PendingIntent sessionActivity) public void setSessionActivity(String controllerKey, @Nullable PendingIntent sessionActivity)
throws RemoteException { throws RemoteException {
binder.setSessionActivity(sessionId, controllerKey, sessionActivity); binder.setSessionActivity(sessionId, controllerKey, sessionActivity);
} }

View File

@ -156,7 +156,7 @@ public class RemoteMediaSessionCompat {
binder.setShuffleMode(sessionTag, shuffleMode); binder.setShuffleMode(sessionTag, shuffleMode);
} }
public void setSessionActivity(PendingIntent intent) throws RemoteException { public void setSessionActivity(@Nullable PendingIntent intent) throws RemoteException {
binder.setSessionActivity(sessionTag, intent); binder.setSessionActivity(sessionTag, intent);
} }

View File

@ -79,7 +79,8 @@ public final class TestMediaBrowserListener implements MediaBrowser.Listener {
} }
@Override @Override
public void onSessionActivityChanged(MediaController controller, PendingIntent sessionActivity) { public void onSessionActivityChanged(
MediaController controller, @Nullable PendingIntent sessionActivity) {
delegate.onSessionActivityChanged(controller, sessionActivity); delegate.onSessionActivityChanged(controller, sessionActivity);
} }