Loading res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -6272,6 +6272,9 @@ <!-- [CHAR LIMIT=180] Notification importance summary --> <string name="show_silently_summary">Don\'t make sound, vibrate, or peek these notifications into view on the current screen.</string> <!-- Default Apps > Default notification assistant --> <string name="default_notification_assistant">Notification assistant</string> <!-- Sound & notification > Advanced section: Title for managing notification listeners option. [CHAR LIMIT=30] --> <string name="manage_notification_access_title">Notification access</string> Loading res/xml/advanced_apps.xml +4 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,10 @@ android:title="@string/sms_application_title" settings:keywords="@string/keywords_more_default_sms_app" /> <com.android.settings.applications.DefaultNotificationAssistantPreference android:key="default_notification_asst_app" android:title="@string/default_notification_assistant" /> </PreferenceCategory> <com.android.settings.WorkOnlyCategory Loading res/xml/app_default_settings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,11 @@ settings:keywords="@string/keywords_emergency_app" android:order="-15"/> <com.android.settings.applications.DefaultNotificationAssistantPreference android:key="default_notification_asst_app" android:title="@string/default_notification_assistant" android:order="-14"/> <Preference android:key="domain_urls" android:title="@string/domain_urls_title" Loading src/com/android/settings/AppListPreference.java +12 −5 Original line number Diff line number Diff line Loading @@ -201,14 +201,21 @@ public class AppListPreference extends CustomListPreference { try { ActivityInfo activityInfo = AppGlobals.getPackageManager().getActivityInfo( componentNames[i], 0, mUserId); if (activityInfo == null) continue; if (activityInfo != null) { applicationNames.add(activityInfo.loadLabel(pm)); validatedComponentNames.add(componentNames[i].flattenToString()); entryDrawables.add(activityInfo.loadIcon(pm)); } else { ApplicationInfo appInfo = pm.getApplicationInfoAsUser( componentNames[i].getPackageName().toString(), 0, mUserId); applicationNames.add(appInfo.loadLabel(pm)); validatedComponentNames.add(componentNames[i].flattenToString()); entryDrawables.add(appInfo.loadIcon(pm)); } if (defaultCN != null && componentNames[i].equals(defaultCN)) { selectedIndex = i; } } catch (RemoteException e) { } catch (RemoteException|NameNotFoundException e) { // Skip unknown packages. } } Loading src/com/android/settings/applications/DefaultNotificationAssistantPreference.java 0 → 100644 +111 −0 Original line number Diff line number Diff line /** * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.applications; import com.android.settings.AppListPreference; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.provider.Settings; import android.service.notification.NotificationAssistantService; import android.util.AttributeSet; import android.util.Slog; import java.util.ArrayList; import java.util.List; import com.android.settings.R; import com.android.settings.utils.ManagedServiceSettings; public class DefaultNotificationAssistantPreference extends AppListPreference { private static final String TAG = "DefaultNotiAssist"; private PackageManager mPm; private final ManagedServiceSettings.Config mConfig; private final Context mContext; public DefaultNotificationAssistantPreference(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mPm = context.getPackageManager(); mConfig = getConfig(); setShowItemNone(true); updateList(getServices()); } @Override protected boolean persistString(String value) { Settings.Secure.putString(mContext.getContentResolver(), mConfig.setting, value); setSummary(getEntry()); return true; } private void updateList(List<ServiceInfo> 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<ServiceInfo> getServices() { List<ServiceInfo> services = new ArrayList<>(); final int user = ActivityManager.getCurrentUser(); List<ResolveInfo> 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 Loading
res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -6272,6 +6272,9 @@ <!-- [CHAR LIMIT=180] Notification importance summary --> <string name="show_silently_summary">Don\'t make sound, vibrate, or peek these notifications into view on the current screen.</string> <!-- Default Apps > Default notification assistant --> <string name="default_notification_assistant">Notification assistant</string> <!-- Sound & notification > Advanced section: Title for managing notification listeners option. [CHAR LIMIT=30] --> <string name="manage_notification_access_title">Notification access</string> Loading
res/xml/advanced_apps.xml +4 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,10 @@ android:title="@string/sms_application_title" settings:keywords="@string/keywords_more_default_sms_app" /> <com.android.settings.applications.DefaultNotificationAssistantPreference android:key="default_notification_asst_app" android:title="@string/default_notification_assistant" /> </PreferenceCategory> <com.android.settings.WorkOnlyCategory Loading
res/xml/app_default_settings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,11 @@ settings:keywords="@string/keywords_emergency_app" android:order="-15"/> <com.android.settings.applications.DefaultNotificationAssistantPreference android:key="default_notification_asst_app" android:title="@string/default_notification_assistant" android:order="-14"/> <Preference android:key="domain_urls" android:title="@string/domain_urls_title" Loading
src/com/android/settings/AppListPreference.java +12 −5 Original line number Diff line number Diff line Loading @@ -201,14 +201,21 @@ public class AppListPreference extends CustomListPreference { try { ActivityInfo activityInfo = AppGlobals.getPackageManager().getActivityInfo( componentNames[i], 0, mUserId); if (activityInfo == null) continue; if (activityInfo != null) { applicationNames.add(activityInfo.loadLabel(pm)); validatedComponentNames.add(componentNames[i].flattenToString()); entryDrawables.add(activityInfo.loadIcon(pm)); } else { ApplicationInfo appInfo = pm.getApplicationInfoAsUser( componentNames[i].getPackageName().toString(), 0, mUserId); applicationNames.add(appInfo.loadLabel(pm)); validatedComponentNames.add(componentNames[i].flattenToString()); entryDrawables.add(appInfo.loadIcon(pm)); } if (defaultCN != null && componentNames[i].equals(defaultCN)) { selectedIndex = i; } } catch (RemoteException e) { } catch (RemoteException|NameNotFoundException e) { // Skip unknown packages. } } Loading
src/com/android/settings/applications/DefaultNotificationAssistantPreference.java 0 → 100644 +111 −0 Original line number Diff line number Diff line /** * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.applications; import com.android.settings.AppListPreference; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.provider.Settings; import android.service.notification.NotificationAssistantService; import android.util.AttributeSet; import android.util.Slog; import java.util.ArrayList; import java.util.List; import com.android.settings.R; import com.android.settings.utils.ManagedServiceSettings; public class DefaultNotificationAssistantPreference extends AppListPreference { private static final String TAG = "DefaultNotiAssist"; private PackageManager mPm; private final ManagedServiceSettings.Config mConfig; private final Context mContext; public DefaultNotificationAssistantPreference(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mPm = context.getPackageManager(); mConfig = getConfig(); setShowItemNone(true); updateList(getServices()); } @Override protected boolean persistString(String value) { Settings.Secure.putString(mContext.getContentResolver(), mConfig.setting, value); setSummary(getEntry()); return true; } private void updateList(List<ServiceInfo> 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<ServiceInfo> getServices() { List<ServiceInfo> services = new ArrayList<>(); final int user = ActivityManager.getCurrentUser(); List<ResolveInfo> 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