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

Commit 55dbdf68 authored by John Spurlock's avatar John Spurlock
Browse files

Hide notification listeners setting if no listeners.

Hide the new notification listeners management setting when
no listeners using this API are available.

Bug: 8454150
Change-Id: Iae9f975e7b5a3cdf55ff7d0c6aea7e84166d53b3
parent 00dc15d9
Loading
Loading
Loading
Loading
+21 −9
Original line number Diff line number Diff line
@@ -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);
            }

        mList.sort(new PackageItemInfo.DisplayNameComparator(mPM));

        getListView().setAdapter(mList);
            listeners++;
        }
        return listeners;
    }

    boolean isListenerEnabled(ServiceInfo info) {
+19 −8
Original line number Diff line number Diff line
@@ -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,8 +283,15 @@ public class SecuritySettings extends SettingsPreferenceFragment
            }
        }

        final int n = getNumEnabledNotificationListeners();
        mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS);
        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));
@@ -291,6 +300,8 @@ public class SecuritySettings extends SettingsPreferenceFragment
                            R.plurals.manage_notification_access_summary_nonzero,
                            n, n)));
                }
            }
        }

        return root;
    }