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

Commit 11c32c6b authored by Pradeep Sawlani's avatar Pradeep Sawlani
Browse files

Reapply "Use compat framework to gate system managed media servic..."

This reverts commit 68394167.

Test: atest cts/tests/app/src/android/app/cts/ActivityManagerNotifyMediaFGSTypeTest.java
      atest cts/hostsidetests/appcompat/compatchanges/src/com/android/cts/appcompat/CompatChangesValidConfigTest.java
Flag: com.android.media.flags.enable_notifying_activity_manager_with_media_session_status_change
BUG: 399006472,281762171
Change-Id: I92fd3bbfe113f5bed5895f6177d8799741106f74
parent f9680506
Loading
Loading
Loading
Loading
+42 −17
Original line number Diff line number Diff line
@@ -387,6 +387,15 @@ public final class ActiveServices {
    @Overridable
    public static final long FGS_SAW_RESTRICTIONS = 319471980L;

    /**
     * Allows system to manage foreground state of service with type
     * <li>{@link android.content.pm.ServiceInfo#FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK}</li>
     */
    @ChangeId
    @EnabledSince(targetSdkVersion = VERSION_CODES.VANILLA_ICE_CREAM)
    @Overridable
    public static final long MEDIA_FGS_STATE_TRANSITION = 281762171L;

    final ActivityManagerService mAm;

    // Maximum number of services that we allow to start in the background
@@ -9341,16 +9350,20 @@ public final class ActiveServices {
                        == ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE
                        && sr.foregroundId == notificationId) {
                    // check if service is explicitly requested by app to not be in foreground.
                    if (sr.systemRequestedFgToBg) {
                    if (sr.systemRequestedFgToBg && CompatChanges.isChangeEnabled(
                            MEDIA_FGS_STATE_TRANSITION, sr.appInfo.uid)) {
                        if (DEBUG_FOREGROUND_SERVICE) {
                            Slog.d(TAG,
                                    "System initiated service transition to foreground "
                                            + "for package "
                                            + packageName);
                        }
                        setServiceForegroundInnerLocked(sr, sr.foregroundId,
                                sr.foregroundNoti, /* flags */ 0,
                                ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK,
                                /* callingUidStart */ 0, /* systemRequestedTransition */ true);
                    } else {
                        if (DEBUG_FOREGROUND_SERVICE) {
                            Slog.d(TAG,
                                    "Ignoring system initiated foreground service transition for "
                                            + "package "
@@ -9360,6 +9373,7 @@ public final class ActiveServices {
                }
            }
        }
    }

    /**
     * Handles notifications from MediaSessionService about inactive media foreground services.
@@ -9388,14 +9402,25 @@ public final class ActiveServices {
                if (sr.foregroundServiceType
                        == ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
                        && sr.foregroundId == notificationId) {
                    if (CompatChanges.isChangeEnabled(MEDIA_FGS_STATE_TRANSITION, sr.appInfo.uid)) {
                        if (DEBUG_FOREGROUND_SERVICE) {
                            Slog.d(TAG,
                            "System initiated transition of foreground service(type:media) to bg "
                                    "System initiated transition of foreground service"
                                            + "(type:media) to"
                                            + " bg "
                                            + "for package "
                                            + packageName);
                        }
                        setServiceForegroundInnerLocked(sr, /* id */ 0,
                                /* notification */ null, /* flags */ 0,
                                /* foregroundServiceType */ 0, /* callingUidStart */ 0,
                                /* systemRequestedTransition */ true);
                    } else {
                        if (DEBUG_FOREGROUND_SERVICE) {
                            Slog.d(TAG, "Ignoring system initiated transition of foreground"
                                    + " service(type:media)to bg for package " + packageName);
                        }
                    }
                }
            }
        }