Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e85167c authored by Nate Myren's avatar Nate Myren
Browse files

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
parent 4aebcb6a
Loading
Loading
Loading
Loading
+20 −18
Original line number Diff line number Diff line
@@ -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,21 +416,23 @@ public class PermissionUsageHelper {
                }

                proxyUids.add(currentUsage.uid);
                // 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, and it's not the same as the main
                    // app, add it
                    if (!proxyLabelList.contains(appLabel)
                            && !currentUsage.packageName.equals(start.packageName)) {
                        // If we don't already have the app label add it
                        if (!proxyLabelList.contains(appLabel)) {
                            proxyLabelList.add(appLabel);
                        }
                    } catch (PackageManager.NameNotFoundException e) {
                        // Ignore
                    }
                }
                iterNum++;
            }
            usagesAndLabels.put(start,