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

Commit a830950a authored by Santiago Seifert's avatar Santiago Seifert Committed by Android (Google) Code Review
Browse files

Merge "Dedup MediaSessionService foreground service handling code" into main

parents 95b9d937 e7153d97
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,