Merge "Exempt callingUid that has START_ACTIVITIES_FROM_BACKGROUND permission." into rvc-dev am: 44a56296cb

Change-Id: Ic2b7959bf87116ec4827df8d17a8c411982f87d3
This commit is contained in:
Automerger Merge Worker
2020-02-26 12:38:14 +00:00

View File

@@ -16,6 +16,7 @@
package com.android.server.am;
import static android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST;
@@ -692,8 +693,8 @@ public final class ActiveServices {
if (!r.mAllowWhileInUsePermissionInFgs) {
r.mAllowWhileInUsePermissionInFgs =
shouldAllowWhileInUsePermissionInFgsLocked(callingPackage, callingUid,
service, r, allowBackgroundActivityStarts);
shouldAllowWhileInUsePermissionInFgsLocked(callingPackage, callingPid,
callingUid, service, r, allowBackgroundActivityStarts);
}
return cmp;
@@ -2077,9 +2078,9 @@ public final class ActiveServices {
}
if (!s.mAllowWhileInUsePermissionInFgs) {
final int callingUid = Binder.getCallingUid();
s.mAllowWhileInUsePermissionInFgs =
shouldAllowWhileInUsePermissionInFgsLocked(callingPackage, callingUid,
shouldAllowWhileInUsePermissionInFgsLocked(callingPackage,
Binder.getCallingPid(), Binder.getCallingUid(),
service, s, false);
}
@@ -4839,7 +4840,8 @@ public final class ActiveServices {
* @return true if allow, false otherwise.
*/
private boolean shouldAllowWhileInUsePermissionInFgsLocked(String callingPackage,
int callingUid, Intent intent, ServiceRecord r, boolean allowBackgroundActivityStarts) {
int callingPid, int callingUid, Intent intent, ServiceRecord r,
boolean allowBackgroundActivityStarts) {
// Is the background FGS start restriction turned on?
if (!mAm.mConstants.mFlagBackgroundFgsStartRestrictionEnabled) {
return true;
@@ -4849,13 +4851,6 @@ public final class ActiveServices {
return true;
}
// Is the service in a whitelist?
final boolean hasAllowBackgroundActivityStartsToken = r.app != null
? r.app.mAllowBackgroundActivityStartsTokens.contains(r) : false;
if (hasAllowBackgroundActivityStartsToken) {
return true;
}
boolean isCallerSystem = false;
final int callingAppId = UserHandle.getAppId(callingUid);
switch (callingAppId) {
@@ -4874,6 +4869,11 @@ public final class ActiveServices {
return true;
}
if (mAm.checkPermission(START_ACTIVITIES_FROM_BACKGROUND, callingPid, callingUid)
== PERMISSION_GRANTED) {
return true;
}
// Is the calling UID at PROCESS_STATE_TOP or above?
final boolean isCallingUidTopApp = appIsTopLocked(callingUid);
if (isCallingUidTopApp) {