From e7153d97f4fcc7798a713dcec31c8db7424a7631 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Fri, 22 Dec 2023 11:28:49 +0000 Subject: Dedup MediaSessionService foreground service handling code Bug: 295518668 Test: atest CtsAppTestCases Change-Id: Ied4b632bbb9cc38f06e5b8f05cc29d99f612a9c6 --- .../android/server/media/MediaSessionService.java | 61 ++++++---------------- 1 file changed, 16 insertions(+), 45 deletions(-) diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index d4666bac89eb..db39b5e24bbb 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -290,31 +290,12 @@ public class MediaSessionService extends SystemService implements Monitor { } user.mPriorityStack.onSessionActiveStateChanged(record); } - notifyActivityManagerWithActiveStateChanges(record, record.isActive()); + setForegroundServiceAllowance( + record, /* allowRunningInForeground= */ record.isActive()); mHandler.postSessionsChanged(record); } } - private void notifyActivityManagerWithActiveStateChanges( - MediaSessionRecordImpl record, boolean isActive) { - if (!Flags.enableNotifyingActivityManagerWithMediaSessionStatusChange()) { - return; - } - ForegroundServiceDelegationOptions foregroundServiceDelegationOptions = - record.getForegroundServiceDelegationOptions(); - if (foregroundServiceDelegationOptions == null) { - // This record doesn't support FGS delegation. In practice, this is MediaSession2. - return; - } - if (isActive) { - mActivityManagerInternal.startForegroundServiceDelegate( - foregroundServiceDelegationOptions, /* connection= */ null); - } else { - mActivityManagerInternal.stopForegroundServiceDelegate( - foregroundServiceDelegationOptions); - } - } - // Currently only media1 can become global priority session. void setGlobalPrioritySession(MediaSessionRecord record) { synchronized (mLock) { @@ -407,27 +388,10 @@ public class MediaSessionService extends SystemService implements Monitor { return; } user.mPriorityStack.onPlaybackStateChanged(record, shouldUpdatePriority); - notifyActivityManagerWithPlaybackStateChanges(record, playbackState); - } - } - - private void notifyActivityManagerWithPlaybackStateChanges( - MediaSessionRecordImpl record, PlaybackState playbackState) { - if (!Flags.enableNotifyingActivityManagerWithMediaSessionStatusChange()) { - return; - } - ForegroundServiceDelegationOptions foregroundServiceDelegationOptions = - record.getForegroundServiceDelegationOptions(); - if (foregroundServiceDelegationOptions == null || playbackState == null) { - // This record doesn't support FGS delegation. In practice, this is MediaSession2. - return; - } - if (playbackState.shouldAllowServiceToRunInForeground()) { - mActivityManagerInternal.startForegroundServiceDelegate( - foregroundServiceDelegationOptions, /* connection= */ null); - } else { - mActivityManagerInternal.stopForegroundServiceDelegate( - foregroundServiceDelegationOptions); + if (playbackState != null) { + setForegroundServiceAllowance( + record, playbackState.shouldAllowServiceToRunInForeground()); + } } } @@ -591,11 +555,12 @@ public class MediaSessionService extends SystemService implements Monitor { } session.close(); - notifyActivityManagerWithSessionDestroyed(session); + setForegroundServiceAllowance(session, /* allowRunningInForeground= */ false); mHandler.postSessionsChanged(session); } - private void notifyActivityManagerWithSessionDestroyed(MediaSessionRecordImpl record) { + private void setForegroundServiceAllowance( + MediaSessionRecordImpl record, boolean allowRunningInForeground) { if (!Flags.enableNotifyingActivityManagerWithMediaSessionStatusChange()) { return; } @@ -605,7 +570,13 @@ public class MediaSessionService extends SystemService implements Monitor { // This record doesn't support FGS delegation. In practice, this is MediaSession2. return; } - mActivityManagerInternal.stopForegroundServiceDelegate(foregroundServiceDelegationOptions); + if (allowRunningInForeground) { + mActivityManagerInternal.startForegroundServiceDelegate( + foregroundServiceDelegationOptions, /* connection= */ null); + } else { + mActivityManagerInternal.stopForegroundServiceDelegate( + foregroundServiceDelegationOptions); + } } void tempAllowlistTargetPkgIfPossible(int targetUid, String targetPackage, -- cgit v1.2.3-59-g8ed1b