diff options
| author | 2024-01-08 15:21:14 +0000 | |
|---|---|---|
| committer | 2024-01-08 15:21:14 +0000 | |
| commit | 4cae88a4cf0a69fb31f2b3482d943ac205f78a13 (patch) | |
| tree | d20cca1399e6605c2eb3f4db6bcd482f17446de9 | |
| parent | 5284f0b8a7a8157e1474df4c60244e96d1444c84 (diff) | |
| parent | 5287fb012599d24035c6ff87720ca15f3eac03fb (diff) | |
Merge "Allow session to be in foreground if active and in allowed state" into main
4 files changed, 15 insertions, 27 deletions
diff --git a/media/java/android/media/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java index 60497fe22dcf..7891ee6d5861 100644 --- a/media/java/android/media/session/PlaybackState.java +++ b/media/java/android/media/session/PlaybackState.java @@ -524,28 +524,6 @@ public final class PlaybackState implements Parcelable { return false; } - /** - * Returns whether the service holding the media session should run in the foreground when the - * media session has this playback state or not. - * - * @hide - */ - public boolean shouldAllowServiceToRunInForeground() { - switch (mState) { - case PlaybackState.STATE_PLAYING: - case PlaybackState.STATE_FAST_FORWARDING: - case PlaybackState.STATE_REWINDING: - case PlaybackState.STATE_BUFFERING: - case PlaybackState.STATE_CONNECTING: - case PlaybackState.STATE_SKIPPING_TO_PREVIOUS: - case PlaybackState.STATE_SKIPPING_TO_NEXT: - case PlaybackState.STATE_SKIPPING_TO_QUEUE_ITEM: - return true; - default: - return false; - } - } - public static final @android.annotation.NonNull Parcelable.Creator<PlaybackState> CREATOR = new Parcelable.Creator<PlaybackState>() { @Override diff --git a/services/core/java/com/android/server/media/MediaSession2Record.java b/services/core/java/com/android/server/media/MediaSession2Record.java index 07b333a0fda6..393e7efcce6e 100644 --- a/services/core/java/com/android/server/media/MediaSession2Record.java +++ b/services/core/java/com/android/server/media/MediaSession2Record.java @@ -198,7 +198,12 @@ public class MediaSession2Record implements MediaSessionRecordImpl { mIsConnected = true; service = mService; } - service.onSessionActiveStateChanged(MediaSession2Record.this); + + // TODO (b/318745416): Add support for FGS in MediaSession2. Passing a + // null playback state means the owning process will not be allowed to + // run in the foreground. + service.onSessionActiveStateChanged(MediaSession2Record.this, + /* playbackState= */ null); } @Override diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index cce66e28a8f9..53f780e4d19e 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -1144,7 +1144,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mIsActive = active; long token = Binder.clearCallingIdentity(); try { - mService.onSessionActiveStateChanged(MediaSessionRecord.this); + mService.onSessionActiveStateChanged(MediaSessionRecord.this, mPlaybackState); } finally { Binder.restoreCallingIdentity(token); } diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 2affdfcf5c7e..2cd3ab1ddbbb 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -260,7 +260,8 @@ public class MediaSessionService extends SystemService implements Monitor { return mGlobalPrioritySession != null && mGlobalPrioritySession.isActive(); } - void onSessionActiveStateChanged(MediaSessionRecordImpl record) { + void onSessionActiveStateChanged( + MediaSessionRecordImpl record, @Nullable PlaybackState playbackState) { synchronized (mLock) { FullUserRecord user = getFullUserRecordLocked(record.getUserId()); if (user == null) { @@ -287,7 +288,9 @@ public class MediaSessionService extends SystemService implements Monitor { user.mPriorityStack.onSessionActiveStateChanged(record); } setForegroundServiceAllowance( - record, /* allowRunningInForeground= */ record.isActive()); + record, + /* allowRunningInForeground= */ record.isActive() + && (playbackState == null || playbackState.isActive())); mHandler.postSessionsChanged(record); } } @@ -386,7 +389,9 @@ public class MediaSessionService extends SystemService implements Monitor { user.mPriorityStack.onPlaybackStateChanged(record, shouldUpdatePriority); if (playbackState != null) { setForegroundServiceAllowance( - record, playbackState.shouldAllowServiceToRunInForeground()); + record, + /* allowRunningInForeground= */ playbackState.isActive() + && record.isActive()); } } } |