diff options
author | 2016-09-22 20:30:51 +0000 | |
---|---|---|
committer | 2016-09-22 20:30:51 +0000 | |
commit | 659cdfef7597a57c8167794e7bf499a348804fdb (patch) | |
tree | a6eea450983e844c09e08b0315f7477d7dca0831 | |
parent | 6f02f57f121a5a0f8854cb575025fc434e4c55a6 (diff) | |
parent | f4c8c3590a82a4f4b56c6ecb7ceb407abdbb83d8 (diff) |
Merge "Skip uninstalled package for getPackagesForUid()"
am: f4c8c3590a
Change-Id: I1e4f7913cc00635611440faabcab4faff7f35dc5
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 76d987b54e44..85cc12427cef 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4578,6 +4578,7 @@ public class PackageManagerService extends IPackageManager.Stub { @Override public String[] getPackagesForUid(int uid) { + final int userId = UserHandle.getUserId(uid); uid = UserHandle.getAppId(uid); // reader synchronized (mPackages) { @@ -4585,9 +4586,16 @@ public class PackageManagerService extends IPackageManager.Stub { if (obj instanceof SharedUserSetting) { final SharedUserSetting sus = (SharedUserSetting) obj; final int N = sus.packages.size(); - final String[] res = new String[N]; - for (int i = 0; i < N; i++) { - res[i] = sus.packages.valueAt(i).name; + String[] res = new String[N]; + final Iterator<PackageSetting> it = sus.packages.iterator(); + int i = 0; + while (it.hasNext()) { + PackageSetting ps = it.next(); + if (ps.getInstalled(userId)) { + res[i++] = ps.name; + } else { + res = ArrayUtils.removeElement(String.class, res, res[i]); + } } return res; } else if (obj instanceof PackageSetting) { |