OSDN Git Service

Removing profile's pinned apps upon a profile removal.
authorVadim Tryshev <vadimt@google.com>
Thu, 27 Aug 2015 00:52:48 +0000 (17:52 -0700)
committerVadim Tryshev <vadimt@google.com>
Thu, 27 Aug 2015 19:03:25 +0000 (12:03 -0700)
Bug: 20024603
Change-Id: I4b17bffe202d3f4cf211b3289ee021c4ec16e91f

packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarApps.java

index 4c1aab9..adcec98 100644 (file)
@@ -87,6 +87,9 @@ class NavigationBarApps extends LinearLayout {
             if (Intent.ACTION_USER_SWITCHED.equals(action)) {
                 int currentUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
                 onUserSwitched(currentUserId);
+            } else if (Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
+                UserHandle removedProfile = intent.getParcelableExtra(Intent.EXTRA_USER);
+                onManagedProfileRemoved(removedProfile);
             }
         }
     };
@@ -205,6 +208,7 @@ class NavigationBarApps extends LinearLayout {
 
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_USER_SWITCHED);
+        filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
         mContext.registerReceiver(mBroadcastReceiver, filter);
 
         mAppPackageMonitor.register(mContext, null, UserHandle.ALL, true);
@@ -571,4 +575,17 @@ class NavigationBarApps extends LinearLayout {
         sAppsModel.setCurrentUser(currentUserId);
         recreateAppButtons();
     }
+
+    private void onManagedProfileRemoved(UserHandle removedProfile) {
+        boolean removedApps = false;
+        for(int i = sAppsModel.getAppCount() - 1; i >= 0; --i) {
+            AppInfo appInfo = sAppsModel.getApp(i);
+            if (!appInfo.getUser().equals(removedProfile)) continue;
+
+            removeViewAt(i);
+            sAppsModel.removeApp(i);
+            removedApps = true;
+        }
+        if (removedApps) sAppsModel.savePrefs();
+    }
 }