OSDN Git Service

Fix managed profile bugs in manage apps list
authorJason Monk <jmonk@google.com>
Wed, 25 Mar 2015 18:47:01 +0000 (14:47 -0400)
committerJason Monk <jmonk@google.com>
Thu, 26 Mar 2015 12:35:02 +0000 (08:35 -0400)
 - Uses the same package manager flags as secondary users for managed
   profiles, so that owner apps don't show up.

 - Fixes bug in getting AppEntries that caused app info for profile
   apps to get the owner one instead (which was unbadged and very
   broken).

Bug: 19817357
Change-Id: I659ab1081c68a231330f5b16486abc5a0a5b2029

src/com/android/settings/applications/ApplicationsState.java

index 1aca69a..daa3842 100644 (file)
@@ -327,6 +327,7 @@ public class ApplicationsState {
     final PackageManager mPm;
     final IPackageManager mIpm;
     final UserManager mUm;
+    final int mOwnerRetrieveFlags;
     final int mRetrieveFlags;
     PackageIntentReceiver mPackageIntentReceiver;
 
@@ -531,14 +532,11 @@ public class ApplicationsState {
         mBackgroundHandler = new BackgroundHandler(mThread.getLooper());
 
         // Only the owner can see all apps.
-        if (UserHandle.myUserId() == 0) {
-            mRetrieveFlags = PackageManager.GET_UNINSTALLED_PACKAGES |
-                    PackageManager.GET_DISABLED_COMPONENTS |
-                    PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS;
-        } else {
-            mRetrieveFlags = PackageManager.GET_DISABLED_COMPONENTS |
-                    PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS;
-        }
+        mOwnerRetrieveFlags = PackageManager.GET_UNINSTALLED_PACKAGES |
+                PackageManager.GET_DISABLED_COMPONENTS |
+                PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS;
+        mRetrieveFlags = PackageManager.GET_DISABLED_COMPONENTS |
+                PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS;
 
         /**
          * This is a trick to prevent the foreground thread from being delayed.
@@ -742,7 +740,9 @@ public class ApplicationsState {
         for (UserHandle user : mUm.getUserProfiles()) {
             try {
                 ParceledListSlice<ApplicationInfo> list =
-                        mIpm.getInstalledApplications(mRetrieveFlags, user.getIdentifier());
+                        mIpm.getInstalledApplications(
+                                user.isOwner() ? mOwnerRetrieveFlags : mRetrieveFlags,
+                                user.getIdentifier());
                 mApplications.addAll(list.getList());
             } catch (RemoteException e) {
             }
@@ -817,7 +817,8 @@ public class ApplicationsState {
             if (entry == null) {
                 for (int i=0; i<mApplications.size(); i++) {
                     ApplicationInfo info = mApplications.get(i);
-                    if (packageName.equals(info.packageName)) {
+                    if (packageName.equals(info.packageName)
+                            && userId == UserHandle.getUserId(info.uid)) {
                         entry = getEntryLocked(info);
                         break;
                     }
@@ -889,7 +890,9 @@ public class ApplicationsState {
                     if (DEBUG_LOCKING) Log.v(TAG, "addPackage release lock: already exists");
                     return;
                 }
-                ApplicationInfo info = mIpm.getApplicationInfo(pkgName, mRetrieveFlags, userId);
+                ApplicationInfo info = mIpm.getApplicationInfo(pkgName,
+                        userId == UserHandle.USER_OWNER ? mOwnerRetrieveFlags : mRetrieveFlags,
+                                userId);
                 if (info == null) {
                     return;
                 }