diff options
-rw-r--r-- | src/com/android/settings/NotificationAccessSettings.java | 30 | ||||
-rw-r--r-- | src/com/android/settings/SecuritySettings.java | 27 |
2 files changed, 40 insertions, 17 deletions
diff --git a/src/com/android/settings/NotificationAccessSettings.java b/src/com/android/settings/NotificationAccessSettings.java index c8cf7ac..07d4353 100644 --- a/src/com/android/settings/NotificationAccessSettings.java +++ b/src/com/android/settings/NotificationAccessSettings.java @@ -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) { diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 535d881..948aded 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -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; |