Handle proxy chains including the system package

Ensure that usages with the system package are not filtered entirely.
Instead, they should not be shown on their own, and the "system" label
should not be included in proxy label chains

Bug: 172868375
Test: manual
Change-Id: If9812ce915de0ca1ac47d93d96f199a8bb768bce
This commit is contained in:
Nate Myren
2021-03-22 14:47:55 -07:00
parent 4aebcb6a74
commit 5e85167c22

View File

@@ -283,9 +283,7 @@ public class PermissionUsageHelper {
continue;
}
if (packageName.equals(SYSTEM_PKG)
|| (!shouldShowPermissionsHub()
&& !isUserSensitive(packageName, user, op))) {
if (!shouldShowPermissionsHub() && !isUserSensitive(packageName, user, op)) {
continue;
}
@@ -372,8 +370,10 @@ public class PermissionUsageHelper {
proxyLabels.put(usage, new ArrayList<>());
proxyUids.add(usage.uid);
}
if (!mostRecentUsages.containsKey(usage.uid) || usage.lastAccessTime
> mostRecentUsages.get(usage.uid).lastAccessTime) {
// If this usage is not by the system, and is more recent than the next-most recent
// for it's uid, save it.
if (!usage.packageName.equals(SYSTEM_PKG) && (!mostRecentUsages.containsKey(usage.uid)
|| usage.lastAccessTime > mostRecentUsages.get(usage.uid).lastAccessTime)) {
mostRecentUsages.put(usage.uid, usage);
}
}
@@ -416,20 +416,22 @@ public class PermissionUsageHelper {
}
proxyUids.add(currentUsage.uid);
try {
PackageManager userPkgManager =
getUserContext(currentUsage.getUser()).getPackageManager();
ApplicationInfo appInfo = userPkgManager.getApplicationInfo(
currentUsage.packageName, 0);
CharSequence appLabel = appInfo.loadLabel(userPkgManager);
// If we don't already have the app label, and it's not the same as the main
// app, add it
if (!proxyLabelList.contains(appLabel)
&& !currentUsage.packageName.equals(start.packageName)) {
proxyLabelList.add(appLabel);
// Don't add an app label for the main app, or the system app
if (!currentUsage.packageName.equals(start.packageName)
&& !currentUsage.packageName.equals(SYSTEM_PKG)) {
try {
PackageManager userPkgManager =
getUserContext(currentUsage.getUser()).getPackageManager();
ApplicationInfo appInfo = userPkgManager.getApplicationInfo(
currentUsage.packageName, 0);
CharSequence appLabel = appInfo.loadLabel(userPkgManager);
// If we don't already have the app label add it
if (!proxyLabelList.contains(appLabel)) {
proxyLabelList.add(appLabel);
}
} catch (PackageManager.NameNotFoundException e) {
// Ignore
}
} catch (PackageManager.NameNotFoundException e) {
// Ignore
}
iterNum++;
}