summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Bishoy Gendy <bishoygendy@google.com> 2024-01-08 15:21:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-01-08 15:21:14 +0000
commit4cae88a4cf0a69fb31f2b3482d943ac205f78a13 (patch)
treed20cca1399e6605c2eb3f4db6bcd482f17446de9
parent5284f0b8a7a8157e1474df4c60244e96d1444c84 (diff)
parent5287fb012599d24035c6ff87720ca15f3eac03fb (diff)
Merge "Allow session to be in foreground if active and in allowed state" into main
-rw-r--r--media/java/android/media/session/PlaybackState.java22
-rw-r--r--services/core/java/com/android/server/media/MediaSession2Record.java7
-rw-r--r--services/core/java/com/android/server/media/MediaSessionRecord.java2
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java11
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());
}
}
}