summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author liulvping <liulvping@xiaomi.com> 2016-09-22 20:30:51 +0000
committer android-build-merger <android-build-merger@google.com> 2016-09-22 20:30:51 +0000
commit659cdfef7597a57c8167794e7bf499a348804fdb (patch)
treea6eea450983e844c09e08b0315f7477d7dca0831
parent6f02f57f121a5a0f8854cb575025fc434e4c55a6 (diff)
parentf4c8c3590a82a4f4b56c6ecb7ceb407abdbb83d8 (diff)
Merge "Skip uninstalled package for getPackagesForUid()"
am: f4c8c3590a Change-Id: I1e4f7913cc00635611440faabcab4faff7f35dc5
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java14
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) {