Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7153d97 authored by Santiago Seifert's avatar Santiago Seifert
Browse files

Dedup MediaSessionService foreground service handling code

Bug: 295518668
Test: atest CtsAppTestCases
Change-Id: Ied4b632bbb9cc38f06e5b8f05cc29d99f612a9c6
parent d649dcaf
Loading
Loading
Loading
Loading
+16 −45
Original line number Diff line number Diff line
@@ -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;
            if (playbackState != null) {
                setForegroundServiceAllowance(
                        record, playbackState.shouldAllowServiceToRunInForeground());
            }
        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);
        }
    }

@@ -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,