summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/ActiveServices.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index fc84e1386d1f..c1239d53058c 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -406,6 +406,8 @@ public final class ActiveServices {
// allowlisted packageName.
ArraySet<String> mAllowListWhileInUsePermissionInFgs = new ArraySet<>();
+ String mCachedDeviceProvisioningPackage;
+
// TODO: remove this after feature development is done
private static final SimpleDateFormat DATE_FORMATTER =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -480,7 +482,8 @@ public final class ActiveServices {
// (REASON_ALARM_MANAGER_ALARM_CLOCK), allow it to continue and do not stop it,
// even the app is background-restricted.
if (r.isForeground
- && r.mAllowStartForegroundAtEntering != REASON_ALARM_MANAGER_ALARM_CLOCK) {
+ && r.mAllowStartForegroundAtEntering != REASON_ALARM_MANAGER_ALARM_CLOCK
+ && !isDeviceProvisioningPackage(r.packageName)) {
toStop.add(r);
}
}
@@ -880,7 +883,8 @@ public final class ActiveServices {
boolean forcedStandby = false;
if (bgLaunch
&& appRestrictedAnyInBackground(appUid, appPackageName)
- && !isTempAllowedByAlarmClock(appUid)) {
+ && !isTempAllowedByAlarmClock(appUid)
+ && !isDeviceProvisioningPackage(appPackageName)) {
if (DEBUG_FOREGROUND_SERVICE) {
Slog.d(TAG, "Forcing bg-only service start only for " + r.shortInstanceName
+ " : bgLaunch=" + bgLaunch + " callerFg=" + callerFg);
@@ -1926,6 +1930,9 @@ public final class ActiveServices {
*/
private boolean isForegroundServiceAllowedInBackgroundRestricted(ProcessRecord app) {
final ProcessStateRecord state = app.mState;
+ if (isDeviceProvisioningPackage(app.info.packageName)) {
+ return true;
+ }
if (!state.isBackgroundRestricted()
|| state.getSetProcState() <= ActivityManager.PROCESS_STATE_BOUND_TOP) {
return true;
@@ -8404,4 +8411,13 @@ public final class ActiveServices {
}
return results;
}
+
+ private boolean isDeviceProvisioningPackage(String packageName) {
+ if (mCachedDeviceProvisioningPackage == null) {
+ mCachedDeviceProvisioningPackage = mAm.mContext.getResources().getString(
+ com.android.internal.R.string.config_deviceProvisioningPackage);
+ }
+ return mCachedDeviceProvisioningPackage != null
+ && mCachedDeviceProvisioningPackage.equals(packageName);
+ }
}