Skip to content

Commit bb35824

Browse files
marcbaechingertonihei
authored andcommitted
Make setSessionActivity accept null
Issue: #2109 PiperOrigin-RevId: 728160580 (cherry picked from commit 2b8700b)
1 parent bc87250 commit bb35824

File tree

16 files changed

+102
-46
lines changed

16 files changed

+102
-46
lines changed

RELEASENOTES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ This release includes the following changes since the
3535
to stop the foreground service before `stopSelf()` when overriding
3636
`onTaskRemoved`, use `MediaSessionService.pauseAllPlayersAndStopSelf()`
3737
instead.
38+
* Make `MediaSession.setSessionActivity(PendingIntent)` accept null
39+
([#2109](https://github.com/androidx/media/issues/2109)).
3840
* Keep notification visible when playback enters an error or stopped
3941
state. The notification is only removed if the playlist is cleared or
4042
the player is released.

libraries/session/src/main/aidl/androidx/media3/session/IMediaController.aidl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ oneway interface IMediaController {
4848
int seq, in Bundle sessionCommandsBundle, in Bundle playerCommandsBundle) = 3009;
4949
void onRenderedFirstFrame(int seq) = 3010;
5050
void onExtrasChanged(int seq, in Bundle extras) = 3011;
51-
void onSessionActivityChanged(int seq, in PendingIntent pendingIntent) = 3013;
51+
void onSessionActivityChanged(int seq, in @nullable PendingIntent pendingIntent) = 3013;
5252
void onError(int seq, in Bundle sessionError) = 3014;
5353
void onSetMediaButtonPreferences(int seq, in List<Bundle> commandButtonList) = 3015;
5454
// Next Id for MediaController: 3016

libraries/session/src/main/java/androidx/media3/session/MediaController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ default void onExtrasChanged(MediaController controller, Bundle extras) {}
493493
*/
494494
@UnstableApi
495495
default void onSessionActivityChanged(
496-
MediaController controller, PendingIntent sessionActivity) {}
496+
MediaController controller, @Nullable PendingIntent sessionActivity) {}
497497

498498
/**
499499
* Called when an non-fatal error {@linkplain

libraries/session/src/main/java/androidx/media3/session/MediaControllerImplBase.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import java.util.ArrayList;
9494
import java.util.Collections;
9595
import java.util.List;
96+
import java.util.Objects;
9697
import java.util.concurrent.CancellationException;
9798
import java.util.concurrent.ExecutionException;
9899
import java.util.concurrent.TimeoutException;
@@ -3079,8 +3080,8 @@ public void onExtrasChanged(Bundle extras) {
30793080
});
30803081
}
30813082

3082-
public void onSetSessionActivity(int seq, PendingIntent sessionActivity) {
3083-
if (!isConnected()) {
3083+
public void onSetSessionActivity(int seq, @Nullable PendingIntent sessionActivity) {
3084+
if (!isConnected() || Objects.equals(this.sessionActivity, sessionActivity)) {
30843085
return;
30853086
}
30863087
this.sessionActivity = sessionActivity;

libraries/session/src/main/java/androidx/media3/session/MediaControllerStub.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,6 @@ public void onCustomCommand(int seq, @Nullable Bundle commandBundle, @Nullable B
214214
@Override
215215
public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity)
216216
throws RemoteException {
217-
if (sessionActivity == null) {
218-
Log.w(TAG, "Ignoring null session activity intent");
219-
return;
220-
}
221217
dispatchControllerTaskOnHandler(
222218
controller -> controller.onSetSessionActivity(seq, sessionActivity));
223219
}

libraries/session/src/main/java/androidx/media3/session/MediaSession.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -789,13 +789,16 @@ public final PendingIntent getSessionActivity() {
789789
* Updates the session activity that was set when {@linkplain
790790
* Builder#setSessionActivity(PendingIntent) building the session}.
791791
*
792-
* @param activityPendingIntent The pending intent to start the session activity.
792+
* <p>Note: When a controller is connected to the session that has a version smaller than 1.6.0,
793+
* then setting the session activity to null has no effect on the controller side.
794+
*
795+
* @param activityPendingIntent The pending intent to start the session activity or null.
793796
* @throws IllegalArgumentException if the {@link PendingIntent} passed into this method is
794797
* {@linkplain PendingIntent#getActivity(Context, int, Intent, int) not an activity}.
795798
*/
796799
@UnstableApi
797-
public final void setSessionActivity(PendingIntent activityPendingIntent) {
798-
if (Util.SDK_INT >= 31) {
800+
public final void setSessionActivity(@Nullable PendingIntent activityPendingIntent) {
801+
if (Util.SDK_INT >= 31 && activityPendingIntent != null) {
799802
checkArgument(Api31.isActivity(activityPendingIntent));
800803
}
801804
impl.setSessionActivity(activityPendingIntent);
@@ -818,8 +821,8 @@ public final void setSessionActivity(PendingIntent activityPendingIntent) {
818821
*/
819822
@UnstableApi
820823
public final void setSessionActivity(
821-
ControllerInfo controller, PendingIntent activityPendingIntent) {
822-
if (Util.SDK_INT >= 31) {
824+
ControllerInfo controller, @Nullable PendingIntent activityPendingIntent) {
825+
if (Util.SDK_INT >= 31 && activityPendingIntent != null) {
823826
checkArgument(Api31.isActivity(activityPendingIntent));
824827
}
825828
impl.setSessionActivity(controller, activityPendingIntent);
@@ -2088,7 +2091,7 @@ default void setCustomLayout(int seq, List<CommandButton> layout) throws RemoteE
20882091
default void setMediaButtonPreferences(int seq, List<CommandButton> mediaButtonPreferences)
20892092
throws RemoteException {}
20902093

2091-
default void onSessionActivityChanged(int seq, PendingIntent sessionActivity)
2094+
default void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity)
20922095
throws RemoteException {}
20932096

20942097
default void onSessionExtrasChanged(int seq, Bundle sessionExtras) throws RemoteException {}

libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595
import java.util.Objects;
9696
import java.util.concurrent.ExecutionException;
9797
import org.checkerframework.checker.initialization.qual.Initialized;
98-
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
9998

10099
/* package */ class MediaSessionImpl {
101100

@@ -136,7 +135,7 @@
136135

137136
private PlayerInfo playerInfo;
138137
private PlayerWrapper playerWrapper;
139-
private @MonotonicNonNull PendingIntent sessionActivity;
138+
@Nullable private PendingIntent sessionActivity;
140139
@Nullable private PlayerListener playerListener;
141140
@Nullable private MediaSession.Listener mediaSessionListener;
142141
@Nullable private ControllerInfo controllerForCurrentRequest;
@@ -850,7 +849,7 @@ protected PendingIntent getSessionActivity() {
850849
}
851850

852851
@UnstableApi
853-
protected void setSessionActivity(PendingIntent sessionActivity) {
852+
protected void setSessionActivity(@Nullable PendingIntent sessionActivity) {
854853
this.sessionActivity = sessionActivity;
855854
ImmutableList<ControllerInfo> connectedControllers =
856855
sessionStub.getConnectedControllersManager().getConnectedControllers();
@@ -860,7 +859,8 @@ protected void setSessionActivity(PendingIntent sessionActivity) {
860859
}
861860

862861
@UnstableApi
863-
protected void setSessionActivity(ControllerInfo controller, PendingIntent sessionActivity) {
862+
protected void setSessionActivity(
863+
ControllerInfo controller, @Nullable PendingIntent sessionActivity) {
864864
if (controller.getControllerVersion() >= 3
865865
&& sessionStub.getConnectedControllersManager().isConnected(controller)) {
866866
dispatchRemoteControllerTaskWithoutReturn(

libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,7 @@ public void onSessionExtrasChanged(int seq, Bundle sessionExtras) {
11371137
}
11381138

11391139
@Override
1140-
public void onSessionActivityChanged(int seq, PendingIntent sessionActivity) {
1140+
public void onSessionActivityChanged(int seq, @Nullable PendingIntent sessionActivity) {
11411141
sessionCompat.setSessionActivity(sessionActivity);
11421142
}
11431143

libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2098,9 +2098,10 @@ public void setMediaButtonPreferences(
20982098
}
20992099
}
21002100

2101+
@SuppressWarnings("nullness:argument") // sessionActivity can be null.
21012102
@Override
2102-
public void onSessionActivityChanged(int sequenceNumber, PendingIntent sessionActivity)
2103-
throws RemoteException {
2103+
public void onSessionActivityChanged(
2104+
int sequenceNumber, @Nullable PendingIntent sessionActivity) throws RemoteException {
21042105
iController.onSessionActivityChanged(sequenceNumber, sessionActivity);
21052106
}
21062107

libraries/session/src/main/java/androidx/media3/session/legacy/MediaSessionCompat.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ public void setRegistrationCallback(@Nullable RegistrationCallback callback, Han
550550
*
551551
* @param pi The intent to launch to show UI for this Session.
552552
*/
553-
public void setSessionActivity(PendingIntent pi) {
553+
public void setSessionActivity(@Nullable PendingIntent pi) {
554554
mImpl.setSessionActivity(pi);
555555
}
556556

@@ -2219,7 +2219,7 @@ interface MediaSessionImpl {
22192219

22202220
void setMetadata(@Nullable MediaMetadataCompat metadata);
22212221

2222-
void setSessionActivity(PendingIntent pi);
2222+
void setSessionActivity(@Nullable PendingIntent pi);
22232223

22242224
void setMediaButtonReceiver(@Nullable PendingIntent mbr);
22252225

@@ -2700,7 +2700,7 @@ RemoteControlClient.MetadataEditor buildRccMetadata(@Nullable Bundle metadata) {
27002700
}
27012701

27022702
@Override
2703-
public void setSessionActivity(PendingIntent pi) {
2703+
public void setSessionActivity(@Nullable PendingIntent pi) {
27042704
synchronized (mLock) {
27052705
mSessionActivity = pi;
27062706
}
@@ -4053,7 +4053,7 @@ public void setMetadata(@Nullable MediaMetadataCompat metadata) {
40534053
}
40544054

40554055
@Override
4056-
public void setSessionActivity(PendingIntent pi) {
4056+
public void setSessionActivity(@Nullable PendingIntent pi) {
40574057
mSessionFwk.setSessionActivity(pi);
40584058
}
40594059

0 commit comments

Comments
 (0)