diff --git a/res/values/strings.xml b/res/values/strings.xml index 62e74527170..fd64db0e02b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6272,6 +6272,9 @@ Don\'t make sound, vibrate, or peek these notifications into view on the current screen. + + Notification assistant + Notification access diff --git a/res/xml/advanced_apps.xml b/res/xml/advanced_apps.xml index 7b1af10211b..7e2e9cdd4d9 100644 --- a/res/xml/advanced_apps.xml +++ b/res/xml/advanced_apps.xml @@ -66,6 +66,10 @@ android:title="@string/sms_application_title" settings:keywords="@string/keywords_more_default_sms_app" /> + + + + services) { + final ComponentName[] assistants = new ComponentName[services.size()]; + for (int i = 0; i < services.size(); i++) { + assistants[i] = new ComponentName(services.get(i).packageName, services.get(i).name); + } + final String assistant = + Settings.Secure.getString(mContext.getContentResolver(), mConfig.setting); + setComponentNames(assistants, assistant == null ? null + : ComponentName.unflattenFromString(assistant)); + } + + private List getServices() { + List services = new ArrayList<>(); + final int user = ActivityManager.getCurrentUser(); + + List installedServices = mPm.queryIntentServicesAsUser( + new Intent(mConfig.intentAction), + PackageManager.GET_SERVICES | PackageManager.GET_META_DATA, + user); + + for (int i = 0, count = installedServices.size(); i < count; i++) { + ResolveInfo resolveInfo = installedServices.get(i); + ServiceInfo info = resolveInfo.serviceInfo; + + if (!mConfig.permission.equals(info.permission)) { + Slog.w(mConfig.tag, "Skipping " + mConfig.noun + " service " + + info.packageName + "/" + info.name + + ": it does not require the permission " + + mConfig.permission); + continue; + } + services.add(info); + } + return services; + } + + private ManagedServiceSettings.Config getConfig() { + final ManagedServiceSettings.Config c = new ManagedServiceSettings.Config(); + c.tag = TAG; + c.setting = Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT; + c.intentAction = NotificationAssistantService.SERVICE_INTERFACE; + c.permission = android.Manifest.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE; + c.noun = "notification assistant"; + c.warningDialogTitle = R.string.notification_listener_security_warning_title; + c.warningDialogSummary = R.string.notification_listener_security_warning_summary; + c.emptyText = R.string.no_notification_listeners; + return c; + } +} \ No newline at end of file