Apply restriction at startForegroundService() call.
Apply FGS background startForeground() restriction at Context.startForegroundService() call (the startServiceLocked() method with fgRequired flag), this is earlier than later apply restriction at Service.startForeground() call so the service will not start at all if Context.startForegroundService() and mAllowStartForeground is false. Bug: 157473819 Test: atest atest cts/tests/app/src/android/app/cts/ActivityManagerFgsBgStartTest.java Change-Id: Id5c69d697e845376f49b5071e09fdb971d0a4255
This commit is contained in:
@@ -494,6 +494,13 @@ public final class ActiveServices {
|
||||
|
||||
ServiceRecord r = res.record;
|
||||
|
||||
if (allowBackgroundActivityStarts) {
|
||||
r.allowBgActivityStartsOnServiceStart();
|
||||
}
|
||||
|
||||
setFgsRestrictionLocked(callingPackage, callingPid, callingUid, service, r,
|
||||
allowBackgroundActivityStarts);
|
||||
|
||||
if (!mAm.mUserController.exists(r.userId)) {
|
||||
Slog.w(TAG, "Trying to start service with non-existent user! " + r.userId);
|
||||
return null;
|
||||
@@ -516,6 +523,21 @@ public final class ActiveServices {
|
||||
forcedStandby = true;
|
||||
}
|
||||
|
||||
if (fgRequired) {
|
||||
if (!r.mAllowStartForeground) {
|
||||
if (!r.mLoggedInfoAllowStartForeground) {
|
||||
Slog.wtf(TAG, "Background started FGS " + r.mInfoAllowStartForeground);
|
||||
r.mLoggedInfoAllowStartForeground = true;
|
||||
}
|
||||
if (mAm.mConstants.mFlagFgsStartRestrictionEnabled) {
|
||||
Slog.w(TAG, "startForegroundService() not allowed due to "
|
||||
+ " mAllowStartForeground false: service "
|
||||
+ r.shortInstanceName);
|
||||
forcedStandby = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If this is a direct-to-foreground start, make sure it is allowed as per the app op.
|
||||
boolean forceSilentAbort = false;
|
||||
if (fgRequired) {
|
||||
@@ -688,14 +710,7 @@ public final class ActiveServices {
|
||||
"Not potential delay (user " + r.userId + " not started): " + r);
|
||||
}
|
||||
}
|
||||
|
||||
if (allowBackgroundActivityStarts) {
|
||||
r.allowBgActivityStartsOnServiceStart();
|
||||
}
|
||||
ComponentName cmp = startServiceInnerLocked(smap, service, r, callerFg, addToStarting);
|
||||
|
||||
setFgsRestrictionLocked(callingPackage, callingPid,
|
||||
callingUid, service, r, allowBackgroundActivityStarts);
|
||||
return cmp;
|
||||
}
|
||||
|
||||
@@ -1422,8 +1437,8 @@ public final class ActiveServices {
|
||||
if (mAm.mConstants.mFlagFgsStartRestrictionEnabled) {
|
||||
Slog.w(TAG,
|
||||
"Service.startForeground() not allowed due to "
|
||||
+ " mAllowStartForeground false: service "
|
||||
+ r.shortInstanceName);
|
||||
+ "mAllowStartForeground false: service "
|
||||
+ r.shortInstanceName);
|
||||
updateServiceForegroundLocked(r.app, true);
|
||||
ignoreForeground = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user