Loading services/core/java/com/android/server/am/ActiveServices.java +29 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ import android.app.Service; import android.app.ServiceStartArgs; import android.app.admin.DevicePolicyEventLogger; import android.appwidget.AppWidgetManagerInternal; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; import android.content.ComponentName; import android.content.ComponentName.WithComponentName; import android.content.Context; Loading @@ -79,6 +81,7 @@ import android.os.Message; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.TransactionTooLargeException; Loading @@ -100,6 +103,7 @@ import android.webkit.WebViewZygote; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.procstats.ServiceState; import com.android.internal.compat.IPlatformCompat; import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BatteryStatsImpl; Loading Loading @@ -234,6 +238,16 @@ public final class ActiveServices { private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final IPlatformCompat mPlatformCompat; /** * The BG-launch FGS restriction feature is going to be allowed only for apps targetSdkVersion * is higher than R. */ @ChangeId @Disabled static final long FGS_BG_START_RESTRICTION_CHANGE_ID = 170668199L; final Runnable mLastAnrDumpClearer = new Runnable() { @Override public void run() { synchronized (mAm) { Loading Loading @@ -430,6 +444,9 @@ public final class ActiveServices { } mMaxStartingBackground = maxBg > 0 ? maxBg : ActivityManager.isLowRamDeviceStatic() ? 1 : 8; final IBinder b = ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE); mPlatformCompat = IPlatformCompat.Stub.asInterface(b); } void systemServicesReady() { Loading Loading @@ -557,7 +574,8 @@ public final class ActiveServices { r.mLoggedInfoAllowStartForeground = true; } if (r.mAllowStartForeground == FGS_FEATURE_DENIED && mAm.mConstants.mFlagFgsStartRestrictionEnabled) { && (mAm.mConstants.mFlagFgsStartRestrictionEnabled || isChangeEnabled(FGS_BG_START_RESTRICTION_CHANGE_ID, r))) { if (mAm.mConstants.mFlagFgsStartTempAllowListEnabled && mAm.isOnDeviceIdleWhitelistLocked(r.appInfo.uid, false)) { // uid is on DeviceIdleController's allowlist. Loading Loading @@ -1468,7 +1486,8 @@ public final class ActiveServices { r.mLoggedInfoAllowStartForeground = true; } if (r.mAllowStartForeground == FGS_FEATURE_DENIED && mAm.mConstants.mFlagFgsStartRestrictionEnabled) { && (mAm.mConstants.mFlagFgsStartRestrictionEnabled || isChangeEnabled(FGS_BG_START_RESTRICTION_CHANGE_ID, r))) { if (mAm.mConstants.mFlagFgsStartTempAllowListEnabled && mAm.isOnDeviceIdleWhitelistLocked(r.appInfo.uid, false)) { // uid is on DeviceIdleController's allowlist. Loading Loading @@ -5101,4 +5120,12 @@ public final class ActiveServices { context.getSystemService(NotificationManager.class).notifyAsUser(Long.toString(now), NOTE_FOREGROUND_SERVICE_BG_LAUNCH, n.build(), UserHandle.ALL); } private boolean isChangeEnabled(long changeId, ServiceRecord r) { boolean enabled = false; try { enabled = mPlatformCompat.isChangeEnabled(changeId, r.appInfo); } catch (RemoteException e) { } return enabled; } } Loading
services/core/java/com/android/server/am/ActiveServices.java +29 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ import android.app.Service; import android.app.ServiceStartArgs; import android.app.admin.DevicePolicyEventLogger; import android.appwidget.AppWidgetManagerInternal; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; import android.content.ComponentName; import android.content.ComponentName.WithComponentName; import android.content.Context; Loading @@ -79,6 +81,7 @@ import android.os.Message; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.TransactionTooLargeException; Loading @@ -100,6 +103,7 @@ import android.webkit.WebViewZygote; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.procstats.ServiceState; import com.android.internal.compat.IPlatformCompat; import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BatteryStatsImpl; Loading Loading @@ -234,6 +238,16 @@ public final class ActiveServices { private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final IPlatformCompat mPlatformCompat; /** * The BG-launch FGS restriction feature is going to be allowed only for apps targetSdkVersion * is higher than R. */ @ChangeId @Disabled static final long FGS_BG_START_RESTRICTION_CHANGE_ID = 170668199L; final Runnable mLastAnrDumpClearer = new Runnable() { @Override public void run() { synchronized (mAm) { Loading Loading @@ -430,6 +444,9 @@ public final class ActiveServices { } mMaxStartingBackground = maxBg > 0 ? maxBg : ActivityManager.isLowRamDeviceStatic() ? 1 : 8; final IBinder b = ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE); mPlatformCompat = IPlatformCompat.Stub.asInterface(b); } void systemServicesReady() { Loading Loading @@ -557,7 +574,8 @@ public final class ActiveServices { r.mLoggedInfoAllowStartForeground = true; } if (r.mAllowStartForeground == FGS_FEATURE_DENIED && mAm.mConstants.mFlagFgsStartRestrictionEnabled) { && (mAm.mConstants.mFlagFgsStartRestrictionEnabled || isChangeEnabled(FGS_BG_START_RESTRICTION_CHANGE_ID, r))) { if (mAm.mConstants.mFlagFgsStartTempAllowListEnabled && mAm.isOnDeviceIdleWhitelistLocked(r.appInfo.uid, false)) { // uid is on DeviceIdleController's allowlist. Loading Loading @@ -1468,7 +1486,8 @@ public final class ActiveServices { r.mLoggedInfoAllowStartForeground = true; } if (r.mAllowStartForeground == FGS_FEATURE_DENIED && mAm.mConstants.mFlagFgsStartRestrictionEnabled) { && (mAm.mConstants.mFlagFgsStartRestrictionEnabled || isChangeEnabled(FGS_BG_START_RESTRICTION_CHANGE_ID, r))) { if (mAm.mConstants.mFlagFgsStartTempAllowListEnabled && mAm.isOnDeviceIdleWhitelistLocked(r.appInfo.uid, false)) { // uid is on DeviceIdleController's allowlist. Loading Loading @@ -5101,4 +5120,12 @@ public final class ActiveServices { context.getSystemService(NotificationManager.class).notifyAsUser(Long.toString(now), NOTE_FOREGROUND_SERVICE_BG_LAUNCH, n.build(), UserHandle.ALL); } private boolean isChangeEnabled(long changeId, ServiceRecord r) { boolean enabled = false; try { enabled = mPlatformCompat.isChangeEnabled(changeId, r.appInfo); } catch (RemoteException e) { } return enabled; } }