diff options
| author | 2017-03-01 17:51:19 +0000 | |
|---|---|---|
| committer | 2017-03-01 17:51:23 +0000 | |
| commit | 2cda00e29a9a081087a7f16333fd492b88da988a (patch) | |
| tree | 6691e5a97620ae13b3f4281d7819961d0c1e8f75 | |
| parent | 0e06ccf488bb7744709b8f3421f3a5a2f5ae69f7 (diff) | |
| parent | af759c52ce01fe6b5144957e38da956af01a217b (diff) | |
Merge "Channels for Frameworks notifications"
33 files changed, 423 insertions, 186 deletions
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 5205959361a5..d37e2099c1d7 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -447,6 +447,19 @@ public class NotificationManager } /** + * @hide + */ + public void createNotificationChannelsForPackage(String pkg, + @NonNull List<NotificationChannel> channels) { + INotificationManager service = getService(); + try { + service.createNotificationChannels(pkg, new ParceledListSlice(channels)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Returns the notification channel settings for a given channel id. */ public NotificationChannel getNotificationChannel(String channelId) { diff --git a/core/java/com/android/internal/notification/SystemNotificationChannels.java b/core/java/com/android/internal/notification/SystemNotificationChannels.java new file mode 100644 index 000000000000..c840f26a0d53 --- /dev/null +++ b/core/java/com/android/internal/notification/SystemNotificationChannels.java @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2017 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.internal.notification; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.provider.Settings; + +import com.android.internal.R; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +// Manages the NotificationChannels used by the frameworks itself. +public class SystemNotificationChannels { + public static String VIRTUAL_KEYBOARD = "VIRTUAL_KEYBOARD"; + public static String PHYSICAL_KEYBOARD = "PHYSICAL_KEYBOARD"; + public static String SECURITY = "SECURITY"; + public static String CAR_MODE = "CAR_MODE"; + public static String ACCOUNT = "ACCOUNT"; + public static String DEVELOPER = "DEVELOPER"; + public static String UPDATES = "UPDATES"; + public static String NETWORK_STATUS = "NETWORK_STATUS"; + public static String NETWORK_ALERTS = "NETWORK_ALERTS"; + public static String VPN = "VPN"; + public static String DEVICE_ADMIN = "DEVICE_ADMIN"; + public static String ALERTS = "ALERTS"; + public static String RETAIL_MODE = "RETAIL_MODE"; + public static String USB = "USB"; + + public static void createAll(Context context) { + final NotificationManager nm = context.getSystemService(NotificationManager.class); + List<NotificationChannel> channelsList = new ArrayList<NotificationChannel>(); + channelsList.add(new NotificationChannel( + VIRTUAL_KEYBOARD, + context.getString(R.string.notification_channel_virtual_keyboard), + NotificationManager.IMPORTANCE_LOW)); + + final NotificationChannel physicalKeyboardChannel = new NotificationChannel( + PHYSICAL_KEYBOARD, + context.getString(R.string.notification_channel_physical_keyboard), + NotificationManager.IMPORTANCE_DEFAULT); + physicalKeyboardChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, + Notification.AUDIO_ATTRIBUTES_DEFAULT); + channelsList.add(physicalKeyboardChannel); + + channelsList.add(new NotificationChannel( + SECURITY, + context.getString(R.string.notification_channel_security), + NotificationManager.IMPORTANCE_LOW)); + + channelsList.add(new NotificationChannel( + CAR_MODE, + context.getString(R.string.notification_channel_car_mode), + NotificationManager.IMPORTANCE_LOW)); + + channelsList.add(new NotificationChannel( + DEVELOPER, + context.getString(R.string.notification_channel_developer), + NotificationManager.IMPORTANCE_LOW)); + + channelsList.add(new NotificationChannel( + UPDATES, + context.getString(R.string.notification_channel_updates), + NotificationManager.IMPORTANCE_LOW)); + + channelsList.add(new NotificationChannel( + NETWORK_STATUS, + context.getString(R.string.notification_channel_network_status), + NotificationManager.IMPORTANCE_LOW)); + + final NotificationChannel networkAlertsChannel = new NotificationChannel( + NETWORK_ALERTS, + context.getString(R.string.notification_channel_network_alerts), + NotificationManager.IMPORTANCE_HIGH); + networkAlertsChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, + Notification.AUDIO_ATTRIBUTES_DEFAULT); + channelsList.add(networkAlertsChannel); + + channelsList.add(new NotificationChannel( + VPN, + context.getString(R.string.notification_channel_vpn), + NotificationManager.IMPORTANCE_LOW)); + + channelsList.add(new NotificationChannel( + DEVICE_ADMIN, + context.getString(R.string.notification_channel_device_admin), + NotificationManager.IMPORTANCE_LOW)); + + final NotificationChannel alertsChannel = new NotificationChannel( + ALERTS, + context.getString(R.string.notification_channel_alerts), + NotificationManager.IMPORTANCE_DEFAULT); + alertsChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI, + Notification.AUDIO_ATTRIBUTES_DEFAULT); + channelsList.add(alertsChannel); + + channelsList.add(new NotificationChannel( + RETAIL_MODE, + context.getString(R.string.notification_channel_retail_mode), + NotificationManager.IMPORTANCE_LOW)); + + channelsList.add(new NotificationChannel( + USB, + context.getString(R.string.notification_channel_usb), + NotificationManager.IMPORTANCE_MIN)); + + nm.createNotificationChannels(channelsList); + createAccountChannelForPackage(context.getPackageName(), context); + } + + public static void createAccountChannelForPackage(String pkg, Context context) { + final NotificationManager nm = context.getSystemService(NotificationManager.class); + nm.createNotificationChannelsForPackage(pkg, Arrays.asList(new NotificationChannel( + ACCOUNT, + context.getString(R.string.notification_channel_account), + NotificationManager.IMPORTANCE_LOW))); + } + + private SystemNotificationChannels() {} +} diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 9f251b00bf5d..ea0666413f88 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -587,6 +587,48 @@ <!-- Text shown in place of notification contents when the notification is hidden by policy on a secure lockscreen --> <string name="notification_hidden_by_policy_text">Contents hidden by policy</string> + <!-- Text shown when viewing channel settings for notifications related to the virtual keyboard --> + <string name="notification_channel_virtual_keyboard">Virtual keyboard</string> + + <!-- Text shown when viewing channel settings for notifications related to the hardware keyboard --> + <string name="notification_channel_physical_keyboard">Physical keyboard</string> + + <!-- Text shown when viewing channel settings for notifications related to security --> + <string name="notification_channel_security">Security</string> + + <!-- Text shown when viewing channel settings for notifications related to car mode --> + <string name="notification_channel_car_mode">Car mode</string> + + <!-- Text shown when viewing channel settings for notifications related to account status --> + <string name="notification_channel_account">Account status</string> + + <!-- Text shown when viewing channel settings for notifications related to developers --> + <string name="notification_channel_developer">Developer messages</string> + + <!-- Text shown when viewing channel settings for notifications related to system updates --> + <string name="notification_channel_updates">Updates</string> + + <!-- Text shown when viewing channel settings for notifications related to network status --> + <string name="notification_channel_network_status">Network status</string> + + <!-- Text shown when viewing channel settings for notifications related to network alerts --> + <string name="notification_channel_network_alerts">Network alerts</string> + + <!-- Text shown when viewing channel settings for notifications related to vpn status --> + <string name="notification_channel_vpn">VPN status</string> + + <!-- Text shown when viewing channel settings for notifications related to remote device administration --> + <string name="notification_channel_device_admin">Device administration</string> + + <!-- Text shown when viewing channel settings for notifications related to important alerts --> + <string name="notification_channel_alerts">Alerts</string> + + <!-- Text shown when viewing channel settings for notifications related to being in retail mode --> + <string name="notification_channel_retail_mode">Retail demo</string> + + <!-- Text shown when viewing channel settings for notifications related to a usb connection --> + <string name="notification_channel_usb">USB connection</string> + <!-- Displayed to the user to tell them that they have started up the phone in "safe mode" --> <string name="safeMode">Safe mode</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 15abf74ef38c..3ba6a274ee8a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2887,4 +2887,21 @@ <!-- Colon separated list of package names that should be granted Notification Listener access --> <java-symbol type="string" name="config_defaultListenerAccessPackages" /> + + <!-- system notification channels --> + <java-symbol type="string" name="notification_channel_virtual_keyboard" /> + <java-symbol type="string" name="notification_channel_physical_keyboard" /> + <java-symbol type="string" name="notification_channel_security" /> + <java-symbol type="string" name="notification_channel_car_mode" /> + <java-symbol type="string" name="notification_channel_account" /> + <java-symbol type="string" name="notification_channel_developer" /> + <java-symbol type="string" name="notification_channel_updates" /> + <java-symbol type="string" name="notification_channel_network_status" /> + <java-symbol type="string" name="notification_channel_network_alerts" /> + <java-symbol type="string" name="notification_channel_vpn" /> + <java-symbol type="string" name="notification_channel_device_admin" /> + <java-symbol type="string" name="notification_channel_alerts" /> + <java-symbol type="string" name="notification_channel_retail_mode" /> + <java-symbol type="string" name="notification_channel_usb" /> + </resources> diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index b95ed08eeb27..69e481fc9e1c 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -28,6 +28,7 @@ import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController; import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem; import com.android.internal.inputmethod.InputMethodUtils; import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.HandlerCaller; import com.android.internal.os.SomeArgs; import com.android.internal.os.TransferPipe; @@ -1262,13 +1263,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub Bundle extras = new Bundle(); extras.putBoolean(Notification.EXTRA_ALLOW_DURING_SETUP, true); - mImeSwitcherNotification = new Notification.Builder(mContext) - .setSmallIcon(com.android.internal.R.drawable.ic_notification_ime_default) - .setWhen(0) - .setOngoing(true) - .addExtras(extras) - .setCategory(Notification.CATEGORY_SYSTEM) - .setColor(com.android.internal.R.color.system_notification_accent_color); + mImeSwitcherNotification = + new Notification.Builder(mContext, SystemNotificationChannels.VIRTUAL_KEYBOARD) + .setSmallIcon(com.android.internal.R.drawable.ic_notification_ime_default) + .setWhen(0) + .setOngoing(true) + .addExtras(extras) + .setCategory(Notification.CATEGORY_SYSTEM) + .setColor(com.android.internal.R.color.system_notification_accent_color); Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER); mImeSwitchPendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java index f76ddc71bc01..0a9610f36abb 100644 --- a/services/core/java/com/android/server/LockSettingsService.java +++ b/services/core/java/com/android/server/LockSettingsService.java @@ -76,6 +76,7 @@ import android.util.Log; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ArrayUtils; import com.android.internal.widget.ICheckCredentialProgressCallback; import com.android.internal.widget.ILockSettings; @@ -442,21 +443,20 @@ public class LockSettingsService extends ILockSettings.Stub { // Suppress all notifications on non-FBE devices for now if (!StorageManager.isFileEncryptedNativeOrEmulated()) return; - Notification notification = new Notification.Builder(mContext) - .setSmallIcon(com.android.internal.R.drawable.ic_user_secure) - .setWhen(0) - .setOngoing(true) - .setTicker(title) - .setDefaults(0) // please be quiet - .setPriority(Notification.PRIORITY_MAX) - .setColor(mContext.getColor( - com.android.internal.R.color.system_notification_accent_color)) - .setContentTitle(title) - .setContentText(message) - .setSubText(detail) - .setVisibility(Notification.VISIBILITY_PUBLIC) - .setContentIntent(intent) - .build(); + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.SECURITY) + .setSmallIcon(com.android.internal.R.drawable.ic_user_secure) + .setWhen(0) + .setOngoing(true) + .setTicker(title) + .setColor(mContext.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .setContentTitle(title) + .setContentText(message) + .setSubText(detail) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .setContentIntent(intent) + .build(); mNotificationManager.notifyAsUser(null, FBE_ENCRYPTED_NOTIFICATION, notification, user); } diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index acacb9e0be70..5115fdecd1bf 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -58,6 +58,7 @@ import java.util.Collections; import com.android.internal.R; import com.android.internal.app.DisableCarModeActivity; +import com.android.internal.notification.SystemNotificationChannels; import com.android.server.power.ShutdownThread; import com.android.server.twilight.TwilightListener; import com.android.server.twilight.TwilightManager; @@ -739,7 +740,8 @@ final class UiModeManagerService extends SystemService { if (mCarModeEnabled) { Intent carModeOffIntent = new Intent(context, DisableCarModeActivity.class); - Notification.Builder n = new Notification.Builder(context) + Notification.Builder n = + new Notification.Builder(context, SystemNotificationChannels.CAR_MODE) .setSmallIcon(R.drawable.stat_notify_car_mode) .setDefaults(Notification.DEFAULT_LIGHTS) .setOngoing(true) diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 1b2c75d50014..dc73b6385897 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -92,6 +92,7 @@ import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.PackageMonitor; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; @@ -2780,16 +2781,17 @@ public class AccountManagerService } UserHandle user = UserHandle.of(userId); Context contextForUser = getContextForUser(user); - Notification n = new Notification.Builder(contextForUser) - .setSmallIcon(android.R.drawable.stat_sys_warning) - .setWhen(0) - .setColor(contextForUser.getColor( - com.android.internal.R.color.system_notification_accent_color)) - .setContentTitle(title) - .setContentText(subtitle) - .setContentIntent(PendingIntent.getActivityAsUser(mContext, 0, intent, - PendingIntent.FLAG_CANCEL_CURRENT, null, user)) - .build(); + Notification n = + new Notification.Builder(contextForUser, SystemNotificationChannels.ACCOUNT) + .setSmallIcon(android.R.drawable.stat_sys_warning) + .setWhen(0) + .setColor(contextForUser.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .setContentTitle(title) + .setContentText(subtitle) + .setContentIntent(PendingIntent.getActivityAsUser(mContext, 0, intent, + PendingIntent.FLAG_CANCEL_CURRENT, null, user)) + .build(); installNotification(getCredentialPermissionNotificationId( account, authTokenType, uid), n, packageName, user.getIdentifier()); } @@ -4844,7 +4846,8 @@ public class AccountManagerService final String notificationTitleFormat = contextForUser.getText(R.string.notification_title).toString(); - Notification n = new Notification.Builder(contextForUser) + Notification n = + new Notification.Builder(contextForUser, SystemNotificationChannels.ACCOUNT) .setWhen(0) .setSmallIcon(android.R.drawable.stat_sys_warning) .setColor(contextForUser.getColor( @@ -4864,6 +4867,7 @@ public class AccountManagerService private void installNotification(int notificationId, final Notification notification, String packageName, int userId) { + SystemNotificationChannels.createAccountChannelForPackage(packageName, mContext); final long token = clearCallingIdentity(); try { INotificationManager notificationManager = mInjector.getNotificationManager(); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index fb53419246f0..2f2b533a531d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -314,6 +314,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; +import com.android.internal.notification.SystemNotificationChannels; import com.google.android.collect.Lists; import com.google.android.collect.Maps; @@ -1972,7 +1973,8 @@ public class ActivityManagerService extends IActivityManager.Stub Context context = mContext.createPackageContext(process.info.packageName, 0); String text = mContext.getString(R.string.heavy_weight_notification, context.getApplicationInfo().loadLabel(context.getPackageManager())); - Notification notification = new Notification.Builder(context) + Notification notification = + new Notification.Builder(context, SystemNotificationChannels.DEVELOPER) .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) .setWhen(0) .setOngoing(true) @@ -2222,7 +2224,8 @@ public class ActivityManagerService extends IActivityManager.Stub intent.putExtra(DumpHeapActivity.KEY_DIRECT_LAUNCH, reportPackage); } int userId = UserHandle.getUserId(uid); - Notification notification = new Notification.Builder(mContext) + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.DEVELOPER) .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) .setWhen(0) .setOngoing(true) diff --git a/services/core/java/com/android/server/am/PreBootBroadcaster.java b/services/core/java/com/android/server/am/PreBootBroadcaster.java index f4f6b661c0e1..e0d3abd03988 100644 --- a/services/core/java/com/android/server/am/PreBootBroadcaster.java +++ b/services/core/java/com/android/server/am/PreBootBroadcaster.java @@ -35,6 +35,7 @@ import android.os.UserHandle; import android.util.Slog; import com.android.internal.R; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ProgressReporter; import com.android.server.UiThread; @@ -144,13 +145,13 @@ public abstract class PreBootBroadcaster extends IIntentReceiver.Stub { contentIntent = null; } - final Notification notif = new Notification.Builder(mService.mContext) + final Notification notif = + new Notification.Builder(mService.mContext, + SystemNotificationChannels.UPDATES) .setSmallIcon(R.drawable.stat_sys_adb) .setWhen(0) .setOngoing(true) .setTicker(title) - .setDefaults(0) - .setPriority(Notification.PRIORITY_MAX) .setColor(context.getColor( com.android.internal.R.color.system_notification_accent_color)) .setContentTitle(title) diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java index 82b00da5b809..dfbe59f1c8f2 100644 --- a/services/core/java/com/android/server/am/ServiceRecord.java +++ b/services/core/java/com/android/server/am/ServiceRecord.java @@ -115,7 +115,7 @@ final class ServiceRecord extends Binder { long destroyTime; // time at which destory was initiated. String stringName; // caching of toString - + private int lastStartId; // identifier of most recent start request. static class StartItem { @@ -203,7 +203,7 @@ final class ServiceRecord extends Binder { } } } - + void dump(PrintWriter pw, String prefix) { pw.print(prefix); pw.print("intent={"); pw.print(intent.getIntent().toShortString(false, true, false, true)); @@ -413,7 +413,7 @@ final class ServiceRecord extends Binder { restartDelay = 0; restartTime = 0; } - + public StartItem findDeliveredStart(int id, boolean remove) { final int N = deliveredStarts.size(); for (int i=0; i<N; i++) { @@ -423,10 +423,10 @@ final class ServiceRecord extends Binder { return si; } } - + return null; } - + public int getLastStartId() { return lastStartId; } @@ -478,7 +478,8 @@ final class ServiceRecord extends Binder { ctx = ams.mContext.createPackageContextAsUser( appInfo.packageName, 0, new UserHandle(userId)); - Notification.Builder notiBuilder = new Notification.Builder(ctx); + Notification.Builder notiBuilder = new Notification.Builder(ctx, + localForegroundNoti.getChannel()); // it's ugly, but it clearly identifies the app notiBuilder.setSmallIcon(appInfo.icon); @@ -486,9 +487,6 @@ final class ServiceRecord extends Binder { // mark as foreground notiBuilder.setFlag(Notification.FLAG_FOREGROUND_SERVICE, true); - // we are doing the app a kindness here - notiBuilder.setPriority(Notification.PRIORITY_MIN); - Intent runningIntent = new Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS); runningIntent.setData(Uri.fromParts("package", @@ -541,7 +539,7 @@ final class ServiceRecord extends Binder { }); } } - + public void cancelNotification() { // Do asynchronous communication with notification manager to // avoid deadlocks. @@ -588,7 +586,7 @@ final class ServiceRecord extends Binder { } }); } - + public void clearDeliveredStartsLocked() { for (int i=deliveredStarts.size()-1; i>=0; i--) { deliveredStarts.get(i).removeUriPermissionsLocked(); diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java index 68fe5053b585..83751a9c15df 100644 --- a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java +++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java @@ -32,6 +32,7 @@ import android.widget.Toast; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.notification.SystemNotificationChannels; import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; @@ -187,7 +188,9 @@ public class NetworkNotificationManager { return; } - Notification.Builder builder = new Notification.Builder(mContext) + final String channelId = highPriority ? SystemNotificationChannels.NETWORK_ALERTS : + SystemNotificationChannels.NETWORK_STATUS; + Notification.Builder builder = new Notification.Builder(mContext, channelId) .setWhen(System.currentTimeMillis()) .setShowWhen(notifyType == NotificationType.NETWORK_SWITCH) .setSmallIcon(icon) @@ -198,10 +201,6 @@ public class NetworkNotificationManager { .setContentTitle(title) .setContentIntent(intent) .setLocalOnly(true) - .setPriority(highPriority ? - Notification.PRIORITY_HIGH : - Notification.PRIORITY_DEFAULT) - .setDefaults(highPriority ? Notification.DEFAULT_ALL : 0) .setOnlyAlertOnce(true); if (notifyType == NotificationType.NETWORK_SWITCH) { diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 1bbbededbd86..39e3758393df 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -66,6 +66,7 @@ import android.util.Log; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.util.IndentingPrintWriter; @@ -668,7 +669,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering tethered_notification_message); if (mTetheredNotificationBuilder == null) { - mTetheredNotificationBuilder = new Notification.Builder(mContext); + mTetheredNotificationBuilder = + new Notification.Builder(mContext, SystemNotificationChannels.NETWORK_STATUS); mTetheredNotificationBuilder.setWhen(0) .setOngoing(true) .setColor(mContext.getColor( diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index b963555124ab..9fc2fc7bb31e 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -85,6 +85,7 @@ import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnInfo; import com.android.internal.net.VpnProfile; +import com.android.internal.notification.SystemNotificationChannels; import com.android.server.DeviceIdleController; import com.android.server.LocalServices; import com.android.server.net.BaseNetworkObserver; @@ -1293,17 +1294,16 @@ public class Vpn { mContext, /* request */ 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT, null, user); - final Notification.Builder builder = new Notification.Builder(mContext) - .setDefaults(0) - .setSmallIcon(R.drawable.vpn_connected) - .setContentTitle(mContext.getString(R.string.vpn_lockdown_disconnected)) - .setContentText(mContext.getString(R.string.vpn_lockdown_config)) - .setContentIntent(configIntent) - .setCategory(Notification.CATEGORY_SYSTEM) - .setPriority(Notification.PRIORITY_LOW) - .setVisibility(Notification.VISIBILITY_PUBLIC) - .setOngoing(true) - .setColor(mContext.getColor(R.color.system_notification_accent_color)); + final Notification.Builder builder = + new Notification.Builder(mContext, SystemNotificationChannels.VPN) + .setSmallIcon(R.drawable.vpn_connected) + .setContentTitle(mContext.getString(R.string.vpn_lockdown_disconnected)) + .setContentText(mContext.getString(R.string.vpn_lockdown_config)) + .setContentIntent(configIntent) + .setCategory(Notification.CATEGORY_SYSTEM) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .setOngoing(true) + .setColor(mContext.getColor(R.color.system_notification_accent_color)); notificationManager.notifyAsUser(TAG, 0, builder.build(), user); } finally { Binder.restoreCallingIdentity(token); diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index 5b539ff1976d..bbad493a913f 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -81,6 +81,7 @@ import android.util.Log; import android.util.Pair; import android.util.Slog; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ArrayUtils; import com.android.server.LocalServices; import com.android.server.job.JobSchedulerInternal; @@ -3250,7 +3251,8 @@ public class SyncManager { R.string.contentServiceTooManyDeletesNotificationDesc); Context contextForUser = getContextForUser(user); - Notification notification = new Notification.Builder(contextForUser) + Notification notification = + new Notification.Builder(contextForUser, SystemNotificationChannels.ACCOUNT) .setSmallIcon(R.drawable.stat_notify_sync_error) .setTicker(mContext.getString(R.string.contentServiceSync)) .setWhen(System.currentTimeMillis()) @@ -3460,4 +3462,4 @@ public class SyncManager { return mContext; } } -}
\ No newline at end of file +} diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 3793b911a038..297d5bd1afc9 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -23,6 +23,7 @@ import android.os.ShellCallback; import android.util.Log; import android.view.Display; import com.android.internal.inputmethod.InputMethodSubtypeHandle; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.SomeArgs; import com.android.internal.R; import com.android.internal.util.Preconditions; @@ -973,17 +974,17 @@ public class InputManagerService extends IInputManager.Stub intent, 0, null, UserHandle.CURRENT); Resources r = mContext.getResources(); - Notification notification = new Notification.Builder(mContext) - .setContentTitle(r.getString( - R.string.select_keyboard_layout_notification_title)) - .setContentText(r.getString( - R.string.select_keyboard_layout_notification_message)) - .setContentIntent(keyboardLayoutIntent) - .setSmallIcon(R.drawable.ic_settings_language) - .setPriority(Notification.PRIORITY_LOW) - .setColor(mContext.getColor( - com.android.internal.R.color.system_notification_accent_color)) - .build(); + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.PHYSICAL_KEYBOARD) + .setContentTitle(r.getString( + R.string.select_keyboard_layout_notification_title)) + .setContentText(r.getString( + R.string.select_keyboard_layout_notification_message)) + .setContentIntent(keyboardLayoutIntent) + .setSmallIcon(R.drawable.ic_settings_language) + .setColor(mContext.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .build(); mNotificationManager.notifyAsUser(null, R.string.select_keyboard_layout_notification_title, notification, UserHandle.ALL); diff --git a/services/core/java/com/android/server/net/LockdownVpnTracker.java b/services/core/java/com/android/server/net/LockdownVpnTracker.java index 4a8539aa3282..a5e7d7c7b945 100644 --- a/services/core/java/com/android/server/net/LockdownVpnTracker.java +++ b/services/core/java/com/android/server/net/LockdownVpnTracker.java @@ -47,6 +47,7 @@ import android.util.Slog; import com.android.internal.R; import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnProfile; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.Preconditions; import com.android.server.ConnectivityService; import com.android.server.EventLogTags; @@ -330,18 +331,18 @@ public class LockdownVpnTracker { } private void showNotification(int titleRes, int iconRes) { - final Notification.Builder builder = new Notification.Builder(mContext) - .setWhen(0) - .setSmallIcon(iconRes) - .setContentTitle(mContext.getString(titleRes)) - .setContentText(mContext.getString(R.string.vpn_lockdown_config)) - .setContentIntent(mConfigIntent) - .setPriority(Notification.PRIORITY_LOW) - .setOngoing(true) - .addAction(R.drawable.ic_menu_refresh, mContext.getString(R.string.reset), - mResetIntent) - .setColor(mContext.getColor( - com.android.internal.R.color.system_notification_accent_color)); + final Notification.Builder builder = + new Notification.Builder(mContext, SystemNotificationChannels.VPN) + .setWhen(0) + .setSmallIcon(iconRes) + .setContentTitle(mContext.getString(titleRes)) + .setContentText(mContext.getString(R.string.vpn_lockdown_config)) + .setContentIntent(mConfigIntent) + .setOngoing(true) + .addAction(R.drawable.ic_menu_refresh, mContext.getString(R.string.reset), + mResetIntent) + .setColor(mContext.getColor( + com.android.internal.R.color.system_notification_accent_color)); NotificationManager.from(mContext).notify(TAG, 0, builder.build()); } diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index a36319a74064..507899836ee2 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -171,6 +171,7 @@ import android.util.Xml; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.IndentingPrintWriter; @@ -1069,7 +1070,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { */ private void enqueueNotification(NetworkPolicy policy, int type, long totalBytes) { final String tag = buildNotificationTag(policy, type); - final Notification.Builder builder = new Notification.Builder(mContext); + final Notification.Builder builder = + new Notification.Builder(mContext, SystemNotificationChannels.NETWORK_STATUS); builder.setOnlyAlertOnce(true); builder.setWhen(0L); builder.setColor(mContext.getColor( @@ -1087,7 +1089,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { builder.setContentTitle(title); builder.setContentText(body); builder.setDefaults(Notification.DEFAULT_ALL); - builder.setPriority(Notification.PRIORITY_HIGH); + builder.setChannel(SystemNotificationChannels.NETWORK_ALERTS); final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template); builder.setDeleteIntent(PendingIntent.getBroadcast( diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 45ff20bd3a6d..dae5da3c6ceb 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2736,9 +2736,10 @@ public class NotificationManagerService extends SystemService { Notification.EXTRA_BUILDER_APPLICATION_INFO); final Bundle extras = new Bundle(); extras.putParcelable(Notification.EXTRA_BUILDER_APPLICATION_INFO, appInfo); + final String channelId = notificationRecord.getChannel().getId(); final Notification summaryNotification = - new Notification.Builder(getContext()).setSmallIcon( - adjustedSbn.getNotification().getSmallIcon()) + new Notification.Builder(getContext(), channelId) + .setSmallIcon(adjustedSbn.getNotification().getSmallIcon()) .setGroupSummary(true) .setGroup(GroupHelper.AUTOGROUP_KEY) .setFlag(Notification.FLAG_AUTOGROUP_SUMMARY, true) diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index a7a1683f8479..37f78b40c4ff 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -88,6 +88,7 @@ import libcore.io.IoUtils; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.content.PackageHelper; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.ImageUtils; import com.android.internal.util.IndentingPrintWriter; @@ -1103,7 +1104,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub { context.getResources().getDimensionPixelSize( android.R.dimen.notification_large_icon_height)); CharSequence packageLabel = packageInfo.applicationInfo.loadLabel(pm); - return new Notification.Builder(context) + return new Notification.Builder(context, SystemNotificationChannels.DEVICE_ADMIN) .setSmallIcon(R.drawable.ic_check_circle_24px) .setColor(context.getResources().getColor( R.color.system_notification_accent_color)) diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java index afdec9ffddc3..12836dbb4820 100644 --- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java +++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java @@ -17,6 +17,7 @@ package com.android.server.storage; import android.app.NotificationChannel; +import com.android.internal.notification.SystemNotificationChannels; import com.android.server.EventLogTags; import com.android.server.SystemService; import com.android.server.pm.InstructionSets; @@ -141,7 +142,7 @@ public class DeviceStorageMonitorService extends SystemService { */ static final String SERVICE = "devicestoragemonitor"; - private static final String NOTIFICATION_CHANNEL_ID = SERVICE; + private static final String TV_NOTIFICATION_CHANNEL_ID = "devicestoragemonitor.tv"; /** * Handler that checks the amount of disk space on the device and sends a @@ -388,14 +389,13 @@ public class DeviceStorageMonitorService extends SystemService { PackageManager packageManager = context.getPackageManager(); boolean isTv = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK); - int importance = isTv - ? NotificationManager.IMPORTANCE_HIGH // Do not change: this is TV-specific - : NotificationManager.IMPORTANCE_LOW; - notificationMgr.createNotificationChannel( - new NotificationChannel(NOTIFICATION_CHANNEL_ID, - context.getString( - com.android.internal.R.string.device_storage_monitor_notification_channel), - importance)); + if (isTv) { + notificationMgr.createNotificationChannel(new NotificationChannel( + TV_NOTIFICATION_CHANNEL_ID, + context.getString( + com.android.internal.R.string.device_storage_monitor_notification_channel), + NotificationManager.IMPORTANCE_HIGH)); + } publishBinderService(SERVICE, mRemoteService); publishLocalService(DeviceStorageMonitorInternal.class, mLocalService); @@ -495,21 +495,22 @@ public class DeviceStorageMonitorService extends SystemService { : com.android.internal.R.string.low_internal_storage_view_text_no_boot); PendingIntent intent = PendingIntent.getActivityAsUser(context, 0, lowMemIntent, 0, null, UserHandle.CURRENT); - Notification notification = new Notification.Builder(context) - .setSmallIcon(com.android.internal.R.drawable.stat_notify_disk_full) - .setTicker(title) - .setColor(context.getColor( - com.android.internal.R.color.system_notification_accent_color)) - .setContentTitle(title) - .setContentText(details) - .setContentIntent(intent) - .setStyle(new Notification.BigTextStyle() - .bigText(details)) - .setVisibility(Notification.VISIBILITY_PUBLIC) - .setCategory(Notification.CATEGORY_SYSTEM) - .setChannel(NOTIFICATION_CHANNEL_ID) - .extend(new Notification.TvExtender()) - .build(); + Notification notification = + new Notification.Builder(context, SystemNotificationChannels.ALERTS) + .setSmallIcon(com.android.internal.R.drawable.stat_notify_disk_full) + .setTicker(title) + .setColor(context.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .setContentTitle(title) + .setContentText(details) + .setContentIntent(intent) + .setStyle(new Notification.BigTextStyle() + .bigText(details)) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .setCategory(Notification.CATEGORY_SYSTEM) + .extend(new Notification.TvExtender() + .setChannel(TV_NOTIFICATION_CHANNEL_ID)) + .build(); notification.flags |= Notification.FLAG_NO_CLEAR; notificationMgr.notifyAsUser(null, LOW_MEMORY_NOTIFICATION_ID, notification, UserHandle.ALL); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 02a215e7840d..8b94ca067621 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -165,6 +165,7 @@ import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.JournaledFile; @@ -5292,13 +5293,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { private void sendWipeProfileNotification() { String contentText = mContext.getString(R.string.work_profile_deleted_description_dpm_wipe); - Notification notification = new Notification.Builder(mContext) - .setSmallIcon(android.R.drawable.stat_sys_warning) - .setContentTitle(mContext.getString(R.string.work_profile_deleted)) - .setContentText(contentText) - .setColor(mContext.getColor(R.color.system_notification_accent_color)) - .setStyle(new Notification.BigTextStyle().bigText(contentText)) - .build(); + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.DEVICE_ADMIN) + .setSmallIcon(android.R.drawable.stat_sys_warning) + .setContentTitle(mContext.getString(R.string.work_profile_deleted)) + .setContentText(contentText) + .setColor(mContext.getColor(R.color.system_notification_accent_color)) + .setStyle(new Notification.BigTextStyle().bigText(contentText)) + .build(); mInjector.getNotificationManager().notify(PROFILE_WIPED_NOTIFICATION_ID, notification); } @@ -10718,7 +10720,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { intent.setPackage("com.android.systemui"); final PendingIntent pendingIntent = PendingIntent.getBroadcastAsUser(mContext, 0, intent, 0, UserHandle.CURRENT); - Notification notification = new Notification.Builder(mContext) + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.DEVICE_ADMIN) .setSmallIcon(R.drawable.ic_qs_network_logging) .setContentTitle(mContext.getString(R.string.network_logging_notification_title)) .setContentText(mContext.getString(R.string.network_logging_notification_text)) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/MonitoringCertNotificationTask.java b/services/devicepolicy/java/com/android/server/devicepolicy/MonitoringCertNotificationTask.java index fb95f8e4d919..1933fe750e75 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/MonitoringCertNotificationTask.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/MonitoringCertNotificationTask.java @@ -34,6 +34,7 @@ import android.provider.Settings; import android.security.KeyChain.KeyChainConnection; import android.util.Log; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.R; import java.util.ArrayList; @@ -131,16 +132,16 @@ public class MonitoringCertNotificationTask extends AsyncTask<Integer, Void, Voi dialogIntent, PendingIntent.FLAG_UPDATE_CURRENT, null, UserHandle.of(parentUserId)); - final Notification noti = new Notification.Builder(userContext) - .setSmallIcon(smallIconId) - .setContentTitle(resources.getQuantityText(R.plurals.ssl_ca_cert_warning, - pendingCertificateCount)) - .setContentText(contentText) - .setContentIntent(notifyIntent) - .setPriority(Notification.PRIORITY_HIGH) - .setShowWhen(false) - .setColor(R.color.system_notification_accent_color) - .build(); + final Notification noti = + new Notification.Builder(userContext, SystemNotificationChannels.SECURITY) + .setSmallIcon(smallIconId) + .setContentTitle(resources.getQuantityText(R.plurals.ssl_ca_cert_warning, + pendingCertificateCount)) + .setContentText(contentText) + .setContentIntent(notifyIntent) + .setShowWhen(false) + .setColor(R.color.system_notification_accent_color) + .build(); mInjector.getNotificationManager().notifyAsUser( LOG_TAG, MONITORING_CERT_NOTIFICATION_ID, noti, userHandle); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java b/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java index 6d42dc9e4e5a..969c89eb4029 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportUtils.java @@ -28,6 +28,7 @@ import android.provider.Settings; import android.text.format.DateUtils; import com.android.internal.R; +import com.android.internal.notification.SystemNotificationChannels; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -62,14 +63,14 @@ class RemoteBugreportUtils { PendingIntent pendingDialogIntent = PendingIntent.getActivityAsUser(context, type, dialogIntent, 0, null, UserHandle.CURRENT); - Notification.Builder builder = new Notification.Builder(context) - .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) - .setOngoing(true) - .setLocalOnly(true) - .setPriority(Notification.PRIORITY_HIGH) - .setContentIntent(pendingDialogIntent) - .setColor(context.getColor( - com.android.internal.R.color.system_notification_accent_color)); + Notification.Builder builder = + new Notification.Builder(context, SystemNotificationChannels.DEVELOPER) + .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) + .setOngoing(true) + .setLocalOnly(true) + .setContentIntent(pendingDialogIntent) + .setColor(context.getColor( + com.android.internal.R.color.system_notification_accent_color)); if (type == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) { builder.setContentTitle(context.getString( diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index e586482af83e..1a0aff79be6e 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -53,6 +53,7 @@ import android.view.WindowManager; import com.android.internal.R; import com.android.internal.app.NightDisplayController; import com.android.internal.logging.MetricsLogger; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BinderInternal; import com.android.internal.os.SamplingProfilerIntegration; import com.android.internal.policy.EmergencyAffordanceManager; @@ -1118,6 +1119,7 @@ public final class SystemServer { traceBeginAndSlog("StartNotificationManager"); mSystemServiceManager.startService(NotificationManagerService.class); + SystemNotificationChannels.createAll(context); notification = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); networkPolicy.bindNotificationManager(notification); diff --git a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java index f943ee2c09bf..472f98455d6a 100644 --- a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java +++ b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java @@ -61,6 +61,7 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.KeyValueListParser; import android.util.Slog; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BackgroundThread; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; @@ -818,7 +819,7 @@ public class RetailDemoModeService extends SystemService { } Notification createResetNotification() { - return new Notification.Builder(getContext()) + return new Notification.Builder(getContext(), SystemNotificationChannels.RETAIL_MODE) .setContentTitle(getContext().getString(R.string.reset_retail_demo_mode_title)) .setContentText(getContext().getString(R.string.reset_retail_demo_mode_text)) .setOngoing(true) diff --git a/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java b/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java index 936531b07059..05c33a4e1cea 100644 --- a/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java +++ b/services/tests/notification/src/com/android/server/notification/GroupHelperTest.java @@ -64,7 +64,7 @@ public class GroupHelperTest { private StatusBarNotification getSbn(String pkg, int id, String tag, UserHandle user, String groupKey) { - Notification.Builder nb = new Notification.Builder(getContext()) + Notification.Builder nb = new Notification.Builder(getContext(), "test_channel_id") .setContentTitle("A") .setWhen(1205); if (groupKey != null) { diff --git a/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java b/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java index 064ab0a3adc4..176342be99fd 100644 --- a/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java +++ b/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java @@ -63,6 +63,7 @@ public class NotificationComparatorTest { private final int smsUid = 11; private final String pkg2 = "pkg2"; private final int uid2 = 1111111; + private static final String TEST_CHANNEL_ID = "test_channel_id"; private NotificationRecord mRecordMinCall; private NotificationRecord mRecordHighCall; @@ -100,7 +101,7 @@ public class NotificationComparatorTest { smsPkg = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.SMS_DEFAULT_APPLICATION); - Notification n1 = new Notification.Builder(mContext) + Notification n1 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setCategory(Notification.CATEGORY_CALL) .setFlag(Notification.FLAG_FOREGROUND_SERVICE, true) .build(); @@ -109,7 +110,7 @@ public class NotificationComparatorTest { new UserHandle(userId), "", 2000), getDefaultChannel()); mRecordMinCall.setUserImportance(NotificationManager.IMPORTANCE_MIN); - Notification n2 = new Notification.Builder(mContext) + Notification n2 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setCategory(Notification.CATEGORY_CALL) .setFlag(Notification.FLAG_FOREGROUND_SERVICE, true) .setColorized(true /* colorized */) @@ -119,7 +120,7 @@ public class NotificationComparatorTest { new UserHandle(userId), "", 1999), getDefaultChannel()); mRecordHighCall.setUserImportance(NotificationManager.IMPORTANCE_HIGH); - Notification n3 = new Notification.Builder(mContext) + Notification n3 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setStyle(new Notification.MediaStyle() .setMediaSession(new MediaSession.Token(null))) .setFlag(Notification.FLAG_FOREGROUND_SERVICE, true) @@ -129,7 +130,7 @@ public class NotificationComparatorTest { "", 1499), getDefaultChannel()); mRecordDefaultMedia.setUserImportance(NotificationManager.IMPORTANCE_DEFAULT); - Notification n4 = new Notification.Builder(mContext) + Notification n4 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setStyle(new Notification.MessagingStyle("sender!")).build(); mRecordInlineReply = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "inlinereply", uid2, uid2, n4, new UserHandle(userId), @@ -137,34 +138,34 @@ public class NotificationComparatorTest { mRecordInlineReply.setUserImportance(NotificationManager.IMPORTANCE_HIGH); mRecordInlineReply.setPackagePriority(Notification.PRIORITY_MAX); - Notification n5 = new Notification.Builder(mContext) + Notification n5 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setCategory(Notification.CATEGORY_MESSAGE).build(); mRecordSms = new NotificationRecord(mContext, new StatusBarNotification(smsPkg, smsPkg, 1, "sms", smsUid, smsUid, n5, new UserHandle(userId), "", 1299), getDefaultChannel()); mRecordSms.setUserImportance(NotificationManager.IMPORTANCE_DEFAULT); - Notification n6 = new Notification.Builder(mContext).build(); + Notification n6 = new Notification.Builder(mContext, TEST_CHANNEL_ID).build(); mRecordStarredContact = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "starred", uid2, uid2, n6, new UserHandle(userId), "", 1259), getDefaultChannel()); mRecordStarredContact.setContactAffinity(ValidateNotificationPeople.STARRED_CONTACT); mRecordStarredContact.setUserImportance(NotificationManager.IMPORTANCE_DEFAULT); - Notification n7 = new Notification.Builder(mContext).build(); + Notification n7 = new Notification.Builder(mContext, TEST_CHANNEL_ID).build(); mRecordContact = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "contact", uid2, uid2, n7, new UserHandle(userId), "", 1259), getDefaultChannel()); mRecordContact.setContactAffinity(ValidateNotificationPeople.VALID_CONTACT); mRecordContact.setUserImportance(NotificationManager.IMPORTANCE_DEFAULT); - Notification n8 = new Notification.Builder(mContext).build(); + Notification n8 = new Notification.Builder(mContext, TEST_CHANNEL_ID).build(); mRecordUrgent = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "urgent", uid2, uid2, n8, new UserHandle(userId), "", 1258), getDefaultChannel()); mRecordUrgent.setUserImportance(NotificationManager.IMPORTANCE_HIGH); - Notification n9 = new Notification.Builder(mContext) + Notification n9 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setCategory(Notification.CATEGORY_MESSAGE) .setFlag(Notification.FLAG_ONGOING_EVENT |Notification.FLAG_FOREGROUND_SERVICE, true) @@ -174,7 +175,7 @@ public class NotificationComparatorTest { "", 9258), getDefaultChannel()); mRecordCheater.setUserImportance(NotificationManager.IMPORTANCE_LOW); - Notification n10 = new Notification.Builder(mContext) + Notification n10 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setStyle(new Notification.InboxStyle().setSummaryText("message!")).build(); mRecordEmail = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "email", uid2, uid2, n10, new UserHandle(userId), diff --git a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java index 88f1a5362008..b7b3617d7ecf 100644 --- a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -129,11 +129,9 @@ public class NotificationManagerServiceTest { if (channel == null) { channel = new NotificationChannel("id", "name", NotificationManager.IMPORTANCE_DEFAULT); } - Notification.Builder nb = new Notification.Builder(mContext) + Notification.Builder nb = new Notification.Builder(mContext, channel.getId()) .setContentTitle("foo") - .setSmallIcon(android.R.drawable.sym_def_app_icon) - .setChannel(channel.getId()) - .setPriority(Notification.PRIORITY_HIGH); + .setSmallIcon(android.R.drawable.sym_def_app_icon); if (extender != null) { nb.extend(extender); } diff --git a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java index 821007213993..62126265e117 100644 --- a/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java +++ b/services/tests/notification/src/com/android/server/notification/RankingHelperTest.java @@ -93,6 +93,7 @@ public class RankingHelperTest { private final int uid = 0; private final String pkg2 = "pkg2"; private final int uid2 = 1111111; + private static final String TEST_CHANNEL_ID = "test_channel_id"; private AudioAttributes mAudioAttributes; private Context getContext() { @@ -107,7 +108,7 @@ public class RankingHelperTest { mHelper = new RankingHelper(getContext(), mPm, handler, mUsageStats, new String[]{ImportanceExtractor.class.getName()}); - mNotiGroupGSortA = new Notification.Builder(getContext()) + mNotiGroupGSortA = new Notification.Builder(getContext(), TEST_CHANNEL_ID) .setContentTitle("A") .setGroup("G") .setSortKey("A") @@ -117,7 +118,7 @@ public class RankingHelperTest { "package", "package", 1, null, 0, 0, mNotiGroupGSortA, user, null, System.currentTimeMillis()), getDefaultChannel()); - mNotiGroupGSortB = new Notification.Builder(getContext()) + mNotiGroupGSortB = new Notification.Builder(getContext(), TEST_CHANNEL_ID) .setContentTitle("B") .setGroup("G") .setSortKey("B") @@ -127,7 +128,7 @@ public class RankingHelperTest { "package", "package", 1, null, 0, 0, mNotiGroupGSortB, user, null, System.currentTimeMillis()), getDefaultChannel()); - mNotiNoGroup = new Notification.Builder(getContext()) + mNotiNoGroup = new Notification.Builder(getContext(), TEST_CHANNEL_ID) .setContentTitle("C") .setWhen(1201) .build(); @@ -135,7 +136,7 @@ public class RankingHelperTest { "package", "package", 1, null, 0, 0, mNotiNoGroup, user, null, System.currentTimeMillis()), getDefaultChannel()); - mNotiNoGroup2 = new Notification.Builder(getContext()) + mNotiNoGroup2 = new Notification.Builder(getContext(), TEST_CHANNEL_ID) .setContentTitle("D") .setWhen(1202) .build(); @@ -143,7 +144,7 @@ public class RankingHelperTest { "package", "package", 1, null, 0, 0, mNotiNoGroup2, user, null, System.currentTimeMillis()), getDefaultChannel()); - mNotiNoGroupSortA = new Notification.Builder(getContext()) + mNotiNoGroupSortA = new Notification.Builder(getContext(), TEST_CHANNEL_ID) .setContentTitle("E") .setWhen(1201) .setSortKey("A") diff --git a/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java index 66267761e151..9575d3253b28 100644 --- a/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/notification/src/com/android/server/notification/SnoozeHelperTest.java @@ -51,6 +51,8 @@ import static org.mockito.Mockito.when; @SmallTest @RunWith(AndroidJUnit4.class) public class SnoozeHelperTest { + private static final String TEST_CHANNEL_ID = "test_channel_id"; + @Mock SnoozeHelper.Callback mCallback; @Mock AlarmManager mAm; @Mock ManagedServices.UserProfiles mUserProfiles; @@ -232,20 +234,16 @@ public class SnoozeHelperTest { private NotificationRecord getNotificationRecord(String pkg, int id, String tag, UserHandle user) { - Notification n = new Notification.Builder(getContext()) + Notification n = new Notification.Builder(getContext(), TEST_CHANNEL_ID) .setContentTitle("A") .setGroup("G") .setSortKey("A") .setWhen(1205) .build(); + final NotificationChannel notificationChannel = new NotificationChannel( + TEST_CHANNEL_ID, "name", NotificationManager.IMPORTANCE_LOW); return new NotificationRecord(getContext(), new StatusBarNotification( pkg, pkg, id, tag, 0, 0, n, user, null, - System.currentTimeMillis()), getDefaultChannel()); - } - - private NotificationChannel getDefaultChannel() { - return new NotificationChannel(NotificationChannel.DEFAULT_CHANNEL_ID, "name", - NotificationManager.IMPORTANCE_LOW); + System.currentTimeMillis()), notificationChannel); } - } diff --git a/services/usb/java/com/android/server/usb/MtpNotificationManager.java b/services/usb/java/com/android/server/usb/MtpNotificationManager.java index 5c46222b2feb..db7b3853d06e 100644 --- a/services/usb/java/com/android/server/usb/MtpNotificationManager.java +++ b/services/usb/java/com/android/server/usb/MtpNotificationManager.java @@ -20,7 +20,6 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -32,6 +31,8 @@ import android.hardware.usb.UsbInterface; import android.hardware.usb.UsbManager; import android.os.UserHandle; +import com.android.internal.notification.SystemNotificationChannels; + /** * Manager for MTP storage notification. */ @@ -77,11 +78,12 @@ class MtpNotificationManager { device.getProductName()); final String description = resources.getString( com.android.internal.R.string.usb_mtp_launch_notification_description); - final Notification.Builder builder = new Notification.Builder(mContext) - .setContentTitle(title) - .setContentText(description) - .setSmallIcon(com.android.internal.R.drawable.stat_sys_data_usb) - .setCategory(Notification.CATEGORY_SYSTEM); + final Notification.Builder builder = + new Notification.Builder(mContext, SystemNotificationChannels.USB) + .setContentTitle(title) + .setContentText(description) + .setSmallIcon(com.android.internal.R.drawable.stat_sys_data_usb) + .setCategory(Notification.CATEGORY_SYSTEM); final Intent intent = new Intent(ACTION_OPEN_IN_APPS); intent.putExtra(UsbManager.EXTRA_DEVICE, device); diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java index 07b4ca12171f..b1df0af100af 100644 --- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java +++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java @@ -50,6 +50,7 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.annotations.GuardedBy; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.SomeArgs; import com.android.internal.util.IndentingPrintWriter; import com.android.server.FgThread; @@ -912,13 +913,13 @@ public class UsbDeviceManager { PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0, intent, 0, null, UserHandle.CURRENT); - Notification notification = new Notification.Builder(mContext) + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.USB) .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) .setWhen(0) .setOngoing(true) .setTicker(title) .setDefaults(0) // please be quiet - .setPriority(Notification.PRIORITY_MIN) .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)) .setContentTitle(title) @@ -951,13 +952,13 @@ public class UsbDeviceManager { PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0, intent, 0, null, UserHandle.CURRENT); - Notification notification = new Notification.Builder(mContext) + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.DEVELOPER) .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) .setWhen(0) .setOngoing(true) .setTicker(title) .setDefaults(0) // please be quiet - .setPriority(Notification.PRIORITY_DEFAULT) .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)) .setContentTitle(title) |