diff options
| author | 2023-10-23 17:03:14 +0100 | |
|---|---|---|
| committer | 2023-10-24 17:16:24 +0000 | |
| commit | 468fa75695c92666399c593fb6028622f963d88e (patch) | |
| tree | 988b3b6367f0a0f0ccb9b274e1d76ddd45825c4d | |
| parent | 667a3785c408990cd9d32755b01007026826192b (diff) | |
Fix getInstalledApplications for archived apps.
Test: PackageInstallerArchiveTest
Bug: 290776158
Change-Id: I86610eab699d993b104512cc830f71967adf2311
| -rw-r--r-- | services/core/java/com/android/server/pm/ComputerEngine.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 30017be96085..980cada46119 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -4596,6 +4596,7 @@ public class ComputerEngine implements Computer { flags = updateFlagsForApplication(flags, userId); final boolean listUninstalled = (flags & MATCH_KNOWN_PACKAGES) != 0; final boolean listApex = (flags & MATCH_APEX) != 0; + final boolean listArchivedOnly = !listUninstalled && (flags & MATCH_ARCHIVED_PACKAGES) != 0; enforceCrossUserPermission( callingUid, @@ -4607,7 +4608,7 @@ public class ComputerEngine implements Computer { ArrayList<ApplicationInfo> list; final ArrayMap<String, ? extends PackageStateInternal> packageStates = getPackageStates(); - if (listUninstalled) { + if (listUninstalled || listArchivedOnly) { list = new ArrayList<>(packageStates.size()); for (PackageStateInternal ps : packageStates.values()) { ApplicationInfo ai; @@ -4619,6 +4620,11 @@ public class ComputerEngine implements Computer { if (!listApex && ps.getPkg().isApex()) { continue; } + PackageUserStateInternal userState = ps.getUserStateOrDefault(userId); + if (listArchivedOnly && !userState.isInstalled() + && userState.getArchiveState() == null) { + continue; + } if (filterSharedLibPackage(ps, callingUid, userId, flags)) { continue; } |