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

Commit 2527fa30 authored by liulvping's avatar liulvping Committed by Todd Kennedy
Browse files

Skip uninstalled package for getPackagesForUid()

If a package with sharedUserId had been setInstalled
with false, then the result of getPackagesForUid()
should not include it.

https://code.google.com/p/android/issues/detail?id=212255



Change-Id: I7b984051db34ecc2d0ef9518786d51100ab9ac79
Signed-off-by: default avatarliulvping <liulvping@xiaomi.com>
parent 1d5447d7
Loading
Loading
Loading
Loading
+11 −3
Original line number Original line Diff line number Diff line
@@ -4578,6 +4578,7 @@ public class PackageManagerService extends IPackageManager.Stub {
    @Override
    @Override
    public String[] getPackagesForUid(int uid) {
    public String[] getPackagesForUid(int uid) {
        final int userId = UserHandle.getUserId(uid);
        uid = UserHandle.getAppId(uid);
        uid = UserHandle.getAppId(uid);
        // reader
        // reader
        synchronized (mPackages) {
        synchronized (mPackages) {
@@ -4585,9 +4586,16 @@ public class PackageManagerService extends IPackageManager.Stub {
            if (obj instanceof SharedUserSetting) {
            if (obj instanceof SharedUserSetting) {
                final SharedUserSetting sus = (SharedUserSetting) obj;
                final SharedUserSetting sus = (SharedUserSetting) obj;
                final int N = sus.packages.size();
                final int N = sus.packages.size();
                final String[] res = new String[N];
                String[] res = new String[N];
                for (int i = 0; i < N; i++) {
                final Iterator<PackageSetting> it = sus.packages.iterator();
                    res[i] = sus.packages.valueAt(i).name;
                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;
                return res;
            } else if (obj instanceof PackageSetting) {
            } else if (obj instanceof PackageSetting) {