OSDN Git Service

Hide notification listeners setting if no listeners.
authorJohn Spurlock <jspurlock@google.com>
Wed, 15 May 2013 13:38:10 +0000 (09:38 -0400)
committerJohn Spurlock <jspurlock@google.com>
Wed, 15 May 2013 14:13:34 +0000 (10:13 -0400)
Hide the new notification listeners management setting when
no listeners using this API are available.

Bug: 8454150
Change-Id: Iae9f975e7b5a3cdf55ff7d0c6aea7e84166d53b3

src/com/android/settings/NotificationAccessSettings.java
src/com/android/settings/SecuritySettings.java

index c8cf7ac..07d4353 100644 (file)
@@ -195,13 +195,26 @@ public class NotificationAccessSettings extends ListFragment {
     }
 
     void updateList() {
-        mList.clear();
-
         loadEnabledListeners();
 
+        getListeners(mList, mPM);
+        mList.sort(new PackageItemInfo.DisplayNameComparator(mPM));
+
+        getListView().setAdapter(mList);
+    }
+
+    static int getListenersCount(PackageManager pm) {
+        return getListeners(null, pm);
+    }
+
+    private static int getListeners(ArrayAdapter<ServiceInfo> adapter, PackageManager pm) {
+        int listeners = 0;
+        if (adapter != null) {
+            adapter.clear();
+        }
         final int user = ActivityManager.getCurrentUser();
 
-        List<ResolveInfo> installedServices = mPM.queryIntentServicesAsUser(
+        List<ResolveInfo> installedServices = pm.queryIntentServicesAsUser(
                 new Intent(NotificationListenerService.SERVICE_INTERFACE),
                 PackageManager.GET_SERVICES | PackageManager.GET_META_DATA,
                 user);
@@ -218,13 +231,12 @@ public class NotificationAccessSettings extends ListFragment {
                         + android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE);
                 continue;
             }
-
-            mList.add(info);
+            if (adapter != null) {
+                adapter.add(info);
+            }
+            listeners++;
         }
-
-        mList.sort(new PackageItemInfo.DisplayNameComparator(mPM));
-
-        getListView().setAdapter(mList);
+        return listeners;
     }
 
     boolean isListenerEnabled(ServiceInfo info) {
index 535d881..948aded 100644 (file)
@@ -82,6 +82,7 @@ public class SecuritySettings extends SettingsPreferenceFragment
     private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access";
     private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
 
+    private PackageManager mPM;
     DevicePolicyManager mDPM;
 
     private ChooseLockSettingsHelper mChooseLockSettingsHelper;
@@ -111,6 +112,7 @@ public class SecuritySettings extends SettingsPreferenceFragment
 
         mLockPatternUtils = new LockPatternUtils(getActivity());
 
+        mPM = getActivity().getPackageManager();
         mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
 
         mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity());
@@ -281,15 +283,24 @@ public class SecuritySettings extends SettingsPreferenceFragment
             }
         }
 
-        final int n = getNumEnabledNotificationListeners();
         mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS);
-        if (n == 0) {
-            mNotificationAccess.setSummary(getResources().getString(
-                    R.string.manage_notification_access_summary_zero));
-        } else {
-            mNotificationAccess.setSummary(String.format(getResources().getQuantityString(
-                    R.plurals.manage_notification_access_summary_nonzero,
-                    n, n)));
+        if (mNotificationAccess != null) {
+            final int total = NotificationAccessSettings.getListenersCount(mPM);
+            if (total == 0) {
+                if (deviceAdminCategory != null) {
+                    deviceAdminCategory.removePreference(mNotificationAccess);
+                }
+            } else {
+                final int n = getNumEnabledNotificationListeners();
+                if (n == 0) {
+                    mNotificationAccess.setSummary(getResources().getString(
+                            R.string.manage_notification_access_summary_zero));
+                } else {
+                    mNotificationAccess.setSummary(String.format(getResources().getQuantityString(
+                            R.plurals.manage_notification_access_summary_nonzero,
+                            n, n)));
+                }
+            }
         }
 
         return root;