Merge "Calculates visibility in queryIntent* methods" into rvc-dev

This commit is contained in:
Patrick Baumann
2020-02-28 13:14:05 +00:00
committed by Android (Google) Code Review

View File

@@ -6833,12 +6833,16 @@ public class PackageManagerService extends IPackageManager.Stub
final boolean isTargetHiddenFromInstantApp =
!isTargetVisibleToInstantApp
|| (matchExplicitlyVisibleOnly && !isTargetExplicitlyVisibleToInstantApp);
final boolean blockResolution =
final boolean blockInstantResolution =
!isTargetSameInstantApp
&& ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp)
|| (matchVisibleToInstantAppOnly && isCallerInstantApp
&& isTargetHiddenFromInstantApp));
if (!blockResolution) {
final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp
&& !resolveForStart && shouldFilterApplicationLocked(
getPackageSettingInternal(ai.applicationInfo.packageName,
Process.SYSTEM_UID), filterCallingUid, userId);
if (!blockInstantResolution && !blockNormalResolution) {
final ResolveInfo ri = new ResolveInfo();
ri.activityInfo = ai;
list.add(ri);
@@ -7222,9 +7226,17 @@ public class PackageManagerService extends IPackageManager.Stub
resolveInfos.set(i, installerInfo);
continue;
}
// caller is a full app, don't need to apply any other filtering
// caller is a full app
if (ephemeralPkgName == null) {
continue;
SettingBase callingSetting =
mSettings.getSettingLPr(UserHandle.getAppId(filterCallingUid));
PackageSetting resolvedSetting =
getPackageSettingInternal(info.activityInfo.packageName, 0);
if (resolveForStart
|| !mAppsFilter.shouldFilterApplication(
filterCallingUid, callingSetting, resolvedSetting, userId)) {
continue;
}
} else if (ephemeralPkgName.equals(info.activityInfo.packageName)) {
// caller is same app; don't need to apply any other filtering
continue;
@@ -7914,12 +7926,17 @@ public class PackageManagerService extends IPackageManager.Stub
& ApplicationInfo.PRIVATE_FLAG_INSTANT) != 0;
final boolean isTargetHiddenFromInstantApp =
(si.flags & ServiceInfo.FLAG_VISIBLE_TO_INSTANT_APP) == 0;
final boolean blockResolution =
final boolean blockInstantResolution =
!isTargetSameInstantApp
&& ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp)
|| (matchVisibleToInstantAppOnly && isCallerInstantApp
&& isTargetHiddenFromInstantApp));
if (!blockResolution) {
final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp
&& shouldFilterApplicationLocked(
getPackageSettingInternal(si.applicationInfo.packageName,
Process.SYSTEM_UID), callingUid, userId);
if (!blockInstantResolution && !blockNormalResolution) {
final ResolveInfo ri = new ResolveInfo();
ri.serviceInfo = si;
list.add(ri);
@@ -7938,8 +7955,7 @@ public class PackageManagerService extends IPackageManager.Stub
return Collections.emptyList();
}
return applyPostServiceResolutionFilter(
resolveInfos,
instantAppPkgName);
resolveInfos, instantAppPkgName, userId, callingUid);
}
final AndroidPackage pkg = mPackages.get(pkgName);
if (pkg != null) {
@@ -7950,20 +7966,26 @@ public class PackageManagerService extends IPackageManager.Stub
return Collections.emptyList();
}
return applyPostServiceResolutionFilter(
resolveInfos,
instantAppPkgName);
resolveInfos, instantAppPkgName, userId, callingUid);
}
return Collections.emptyList();
}
}
private List<ResolveInfo> applyPostServiceResolutionFilter(List<ResolveInfo> resolveInfos,
String instantAppPkgName) {
if (instantAppPkgName == null) {
return resolveInfos;
}
String instantAppPkgName, @UserIdInt int userId, int filterCallingUid) {
for (int i = resolveInfos.size() - 1; i >= 0; i--) {
final ResolveInfo info = resolveInfos.get(i);
if (instantAppPkgName == null) {
SettingBase callingSetting =
mSettings.getSettingLPr(UserHandle.getAppId(filterCallingUid));
PackageSetting resolvedSetting =
getPackageSettingInternal(info.serviceInfo.packageName, 0);
if (!mAppsFilter.shouldFilterApplication(
filterCallingUid, callingSetting, resolvedSetting, userId)) {
continue;
}
}
final boolean isEphemeralApp = info.serviceInfo.applicationInfo.isInstantApp();
// allow services that are defined in the provided package
if (isEphemeralApp && instantAppPkgName.equals(info.serviceInfo.packageName)) {
@@ -8046,7 +8068,11 @@ public class PackageManagerService extends IPackageManager.Stub
&& ((!matchInstantApp && !isCallerInstantApp && isTargetInstantApp)
|| (matchVisibleToInstantAppOnly && isCallerInstantApp
&& isTargetHiddenFromInstantApp));
if (!blockResolution) {
final boolean blockNormalResolution = !isTargetInstantApp && !isCallerInstantApp
&& shouldFilterApplicationLocked(
getPackageSettingInternal(pi.applicationInfo.packageName,
Process.SYSTEM_UID), callingUid, userId);
if (!blockResolution && !blockNormalResolution) {
final ResolveInfo ri = new ResolveInfo();
ri.providerInfo = pi;
list.add(ri);
@@ -8065,8 +8091,7 @@ public class PackageManagerService extends IPackageManager.Stub
return Collections.emptyList();
}
return applyPostContentProviderResolutionFilter(
resolveInfos,
instantAppPkgName);
resolveInfos, instantAppPkgName, userId, callingUid);
}
final AndroidPackage pkg = mPackages.get(pkgName);
if (pkg != null) {
@@ -8077,20 +8102,29 @@ public class PackageManagerService extends IPackageManager.Stub
return Collections.emptyList();
}
return applyPostContentProviderResolutionFilter(
resolveInfos,
instantAppPkgName);
resolveInfos, instantAppPkgName, userId, callingUid);
}
return Collections.emptyList();
}
}
private List<ResolveInfo> applyPostContentProviderResolutionFilter(
List<ResolveInfo> resolveInfos, String instantAppPkgName) {
if (instantAppPkgName == null) {
return resolveInfos;
}
List<ResolveInfo> resolveInfos, String instantAppPkgName,
@UserIdInt int userId, int callingUid) {
for (int i = resolveInfos.size() - 1; i >= 0; i--) {
final ResolveInfo info = resolveInfos.get(i);
if (instantAppPkgName == null) {
SettingBase callingSetting =
mSettings.getSettingLPr(UserHandle.getAppId(callingUid));
PackageSetting resolvedSetting =
getPackageSettingInternal(info.providerInfo.packageName, 0);
if (!mAppsFilter.shouldFilterApplication(
callingUid, callingSetting, resolvedSetting, userId)) {
continue;
}
}
final boolean isEphemeralApp = info.providerInfo.applicationInfo.isInstantApp();
// allow providers that are defined in the provided package
if (isEphemeralApp && instantAppPkgName.equals(info.providerInfo.packageName)) {