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

Change-Id: I5746a31bdc8db6e3e3e410cb7c48afb6761941cb
This commit is contained in:
Automerger Merge Worker
2020-02-28 13:37:08 +00:00

View File

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