diff options
10 files changed, 313 insertions, 150 deletions
diff --git a/api/current.txt b/api/current.txt index 2be6183f7923..0ec22fa83ba8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5088,26 +5088,26 @@ package android.app { field public static final int FLAG_NO_CLEAR = 32; // 0x20 field public static final int FLAG_ONGOING_EVENT = 2; // 0x2 field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8 - field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1 + field public static final deprecated int FLAG_SHOW_LIGHTS = 1; // 0x1 field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; - field public static final int PRIORITY_DEFAULT = 0; // 0x0 - field public static final int PRIORITY_HIGH = 1; // 0x1 - field public static final int PRIORITY_LOW = -1; // 0xffffffff - field public static final int PRIORITY_MAX = 2; // 0x2 - field public static final int PRIORITY_MIN = -2; // 0xfffffffe + field public static final deprecated int PRIORITY_DEFAULT = 0; // 0x0 + field public static final deprecated int PRIORITY_HIGH = 1; // 0x1 + field public static final deprecated int PRIORITY_LOW = -1; // 0xffffffff + field public static final deprecated int PRIORITY_MAX = 2; // 0x2 + field public static final deprecated int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff field public android.app.Notification.Action[] actions; - field public android.media.AudioAttributes audioAttributes; + field public deprecated android.media.AudioAttributes audioAttributes; field public deprecated int audioStreamType; field public deprecated android.widget.RemoteViews bigContentView; field public java.lang.String category; field public int color; field public android.app.PendingIntent contentIntent; field public deprecated android.widget.RemoteViews contentView; - field public int defaults; + field public deprecated int defaults; field public android.app.PendingIntent deleteIntent; field public android.os.Bundle extras; field public int flags; @@ -5116,16 +5116,16 @@ package android.app { field public deprecated int icon; field public int iconLevel; field public deprecated android.graphics.Bitmap largeIcon; - field public int ledARGB; - field public int ledOffMS; - field public int ledOnMS; + field public deprecated int ledARGB; + field public deprecated int ledOffMS; + field public deprecated int ledOnMS; field public deprecated int number; - field public int priority; + field public deprecated int priority; field public android.app.Notification publicVersion; - field public android.net.Uri sound; + field public deprecated android.net.Uri sound; field public java.lang.CharSequence tickerText; field public deprecated android.widget.RemoteViews tickerView; - field public long[] vibrate; + field public deprecated long[] vibrate; field public int visibility; field public long when; } @@ -5229,7 +5229,7 @@ package android.app { method public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews); method public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews); method public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews); - method public android.app.Notification.Builder setDefaults(int); + method public deprecated android.app.Notification.Builder setDefaults(int); method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent); method public android.app.Notification.Builder setExtras(android.os.Bundle); method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean); @@ -5237,12 +5237,12 @@ package android.app { method public android.app.Notification.Builder setGroupSummary(boolean); method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap); method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon); - method public android.app.Notification.Builder setLights(int, int, int); + method public deprecated android.app.Notification.Builder setLights(int, int, int); method public android.app.Notification.Builder setLocalOnly(boolean); method public deprecated android.app.Notification.Builder setNumber(int); method public android.app.Notification.Builder setOngoing(boolean); method public android.app.Notification.Builder setOnlyAlertOnce(boolean); - method public android.app.Notification.Builder setPriority(int); + method public deprecated android.app.Notification.Builder setPriority(int); method public android.app.Notification.Builder setProgress(int, int, boolean); method public android.app.Notification.Builder setPublicVersion(android.app.Notification); method public android.app.Notification.Builder setRemoteInputHistory(java.lang.CharSequence[]); @@ -5251,16 +5251,16 @@ package android.app { method public android.app.Notification.Builder setSmallIcon(int, int); method public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon); method public android.app.Notification.Builder setSortKey(java.lang.String); - method public android.app.Notification.Builder setSound(android.net.Uri); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri); method public deprecated android.app.Notification.Builder setSound(android.net.Uri, int); - method public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); method public android.app.Notification.Builder setStyle(android.app.Notification.Style); method public android.app.Notification.Builder setSubText(java.lang.CharSequence); method public android.app.Notification.Builder setTicker(java.lang.CharSequence); method public deprecated android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews); method public android.app.Notification.Builder setTimeout(long); method public android.app.Notification.Builder setUsesChronometer(boolean); - method public android.app.Notification.Builder setVibrate(long[]); + method public deprecated android.app.Notification.Builder setVibrate(long[]); method public android.app.Notification.Builder setVisibility(int); method public android.app.Notification.Builder setWhen(long); } diff --git a/api/system-current.txt b/api/system-current.txt index bc08f70536f2..c23de1c9c540 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5251,26 +5251,26 @@ package android.app { field public static final int FLAG_NO_CLEAR = 32; // 0x20 field public static final int FLAG_ONGOING_EVENT = 2; // 0x2 field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8 - field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1 + field public static final deprecated int FLAG_SHOW_LIGHTS = 1; // 0x1 field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; - field public static final int PRIORITY_DEFAULT = 0; // 0x0 - field public static final int PRIORITY_HIGH = 1; // 0x1 - field public static final int PRIORITY_LOW = -1; // 0xffffffff - field public static final int PRIORITY_MAX = 2; // 0x2 - field public static final int PRIORITY_MIN = -2; // 0xfffffffe + field public static final deprecated int PRIORITY_DEFAULT = 0; // 0x0 + field public static final deprecated int PRIORITY_HIGH = 1; // 0x1 + field public static final deprecated int PRIORITY_LOW = -1; // 0xffffffff + field public static final deprecated int PRIORITY_MAX = 2; // 0x2 + field public static final deprecated int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff field public android.app.Notification.Action[] actions; - field public android.media.AudioAttributes audioAttributes; + field public deprecated android.media.AudioAttributes audioAttributes; field public deprecated int audioStreamType; field public deprecated android.widget.RemoteViews bigContentView; field public java.lang.String category; field public int color; field public android.app.PendingIntent contentIntent; field public deprecated android.widget.RemoteViews contentView; - field public int defaults; + field public deprecated int defaults; field public android.app.PendingIntent deleteIntent; field public android.os.Bundle extras; field public int flags; @@ -5279,16 +5279,16 @@ package android.app { field public deprecated int icon; field public int iconLevel; field public deprecated android.graphics.Bitmap largeIcon; - field public int ledARGB; - field public int ledOffMS; - field public int ledOnMS; + field public deprecated int ledARGB; + field public deprecated int ledOffMS; + field public deprecated int ledOnMS; field public deprecated int number; - field public int priority; + field public deprecated int priority; field public android.app.Notification publicVersion; - field public android.net.Uri sound; + field public deprecated android.net.Uri sound; field public java.lang.CharSequence tickerText; field public deprecated android.widget.RemoteViews tickerView; - field public long[] vibrate; + field public deprecated long[] vibrate; field public int visibility; field public long when; } @@ -5392,7 +5392,7 @@ package android.app { method public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews); method public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews); method public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews); - method public android.app.Notification.Builder setDefaults(int); + method public deprecated android.app.Notification.Builder setDefaults(int); method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent); method public android.app.Notification.Builder setExtras(android.os.Bundle); method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean); @@ -5400,12 +5400,12 @@ package android.app { method public android.app.Notification.Builder setGroupSummary(boolean); method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap); method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon); - method public android.app.Notification.Builder setLights(int, int, int); + method public deprecated android.app.Notification.Builder setLights(int, int, int); method public android.app.Notification.Builder setLocalOnly(boolean); method public deprecated android.app.Notification.Builder setNumber(int); method public android.app.Notification.Builder setOngoing(boolean); method public android.app.Notification.Builder setOnlyAlertOnce(boolean); - method public android.app.Notification.Builder setPriority(int); + method public deprecated android.app.Notification.Builder setPriority(int); method public android.app.Notification.Builder setProgress(int, int, boolean); method public android.app.Notification.Builder setPublicVersion(android.app.Notification); method public android.app.Notification.Builder setRemoteInputHistory(java.lang.CharSequence[]); @@ -5414,16 +5414,16 @@ package android.app { method public android.app.Notification.Builder setSmallIcon(int, int); method public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon); method public android.app.Notification.Builder setSortKey(java.lang.String); - method public android.app.Notification.Builder setSound(android.net.Uri); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri); method public deprecated android.app.Notification.Builder setSound(android.net.Uri, int); - method public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); method public android.app.Notification.Builder setStyle(android.app.Notification.Style); method public android.app.Notification.Builder setSubText(java.lang.CharSequence); method public android.app.Notification.Builder setTicker(java.lang.CharSequence); method public deprecated android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews); method public android.app.Notification.Builder setTimeout(long); method public android.app.Notification.Builder setUsesChronometer(boolean); - method public android.app.Notification.Builder setVibrate(long[]); + method public deprecated android.app.Notification.Builder setVibrate(long[]); method public android.app.Notification.Builder setVisibility(int); method public android.app.Notification.Builder setWhen(long); } diff --git a/api/test-current.txt b/api/test-current.txt index 37505f5928af..d56a44d4c64d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -5098,26 +5098,26 @@ package android.app { field public static final int FLAG_NO_CLEAR = 32; // 0x20 field public static final int FLAG_ONGOING_EVENT = 2; // 0x2 field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8 - field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1 + field public static final deprecated int FLAG_SHOW_LIGHTS = 1; // 0x1 field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; - field public static final int PRIORITY_DEFAULT = 0; // 0x0 - field public static final int PRIORITY_HIGH = 1; // 0x1 - field public static final int PRIORITY_LOW = -1; // 0xffffffff - field public static final int PRIORITY_MAX = 2; // 0x2 - field public static final int PRIORITY_MIN = -2; // 0xfffffffe + field public static final deprecated int PRIORITY_DEFAULT = 0; // 0x0 + field public static final deprecated int PRIORITY_HIGH = 1; // 0x1 + field public static final deprecated int PRIORITY_LOW = -1; // 0xffffffff + field public static final deprecated int PRIORITY_MAX = 2; // 0x2 + field public static final deprecated int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff field public android.app.Notification.Action[] actions; - field public android.media.AudioAttributes audioAttributes; + field public deprecated android.media.AudioAttributes audioAttributes; field public deprecated int audioStreamType; field public deprecated android.widget.RemoteViews bigContentView; field public java.lang.String category; field public int color; field public android.app.PendingIntent contentIntent; field public deprecated android.widget.RemoteViews contentView; - field public int defaults; + field public deprecated int defaults; field public android.app.PendingIntent deleteIntent; field public android.os.Bundle extras; field public int flags; @@ -5126,16 +5126,16 @@ package android.app { field public deprecated int icon; field public int iconLevel; field public deprecated android.graphics.Bitmap largeIcon; - field public int ledARGB; - field public int ledOffMS; - field public int ledOnMS; + field public deprecated int ledARGB; + field public deprecated int ledOffMS; + field public deprecated int ledOnMS; field public deprecated int number; - field public int priority; + field public deprecated int priority; field public android.app.Notification publicVersion; - field public android.net.Uri sound; + field public deprecated android.net.Uri sound; field public java.lang.CharSequence tickerText; field public deprecated android.widget.RemoteViews tickerView; - field public long[] vibrate; + field public deprecated long[] vibrate; field public int visibility; field public long when; } @@ -5239,7 +5239,7 @@ package android.app { method public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews); method public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews); method public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews); - method public android.app.Notification.Builder setDefaults(int); + method public deprecated android.app.Notification.Builder setDefaults(int); method public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent); method public android.app.Notification.Builder setExtras(android.os.Bundle); method public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean); @@ -5247,12 +5247,12 @@ package android.app { method public android.app.Notification.Builder setGroupSummary(boolean); method public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap); method public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon); - method public android.app.Notification.Builder setLights(int, int, int); + method public deprecated android.app.Notification.Builder setLights(int, int, int); method public android.app.Notification.Builder setLocalOnly(boolean); method public deprecated android.app.Notification.Builder setNumber(int); method public android.app.Notification.Builder setOngoing(boolean); method public android.app.Notification.Builder setOnlyAlertOnce(boolean); - method public android.app.Notification.Builder setPriority(int); + method public deprecated android.app.Notification.Builder setPriority(int); method public android.app.Notification.Builder setProgress(int, int, boolean); method public android.app.Notification.Builder setPublicVersion(android.app.Notification); method public android.app.Notification.Builder setRemoteInputHistory(java.lang.CharSequence[]); @@ -5261,16 +5261,16 @@ package android.app { method public android.app.Notification.Builder setSmallIcon(int, int); method public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon); method public android.app.Notification.Builder setSortKey(java.lang.String); - method public android.app.Notification.Builder setSound(android.net.Uri); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri); method public deprecated android.app.Notification.Builder setSound(android.net.Uri, int); - method public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); + method public deprecated android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes); method public android.app.Notification.Builder setStyle(android.app.Notification.Style); method public android.app.Notification.Builder setSubText(java.lang.CharSequence); method public android.app.Notification.Builder setTicker(java.lang.CharSequence); method public deprecated android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews); method public android.app.Notification.Builder setTimeout(long); method public android.app.Notification.Builder setUsesChronometer(boolean); - method public android.app.Notification.Builder setVibrate(long[]); + method public deprecated android.app.Notification.Builder setVibrate(long[]); method public android.app.Notification.Builder setVisibility(int); method public android.app.Notification.Builder setWhen(long); } diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index dc9506c9d3fc..b7eda25cee4d 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -338,7 +338,9 @@ public class Notification implements Parcelable * <p> * To play the default notification sound, see {@link #defaults}. * </p> + * @deprecated use {@link NotificationChannel#getSound()}. */ + @Deprecated public Uri sound; /** @@ -346,7 +348,7 @@ public class Notification implements Parcelable * the default stream type for notifications be used. Currently the * default stream type is {@link AudioManager#STREAM_NOTIFICATION}. * - * @deprecated Use {@link #audioAttributes} instead. + * @deprecated Use {@link NotificationChannel#getAudioAttributes()} instead. */ @Deprecated public static final int STREAM_DEFAULT = -1; @@ -371,7 +373,10 @@ public class Notification implements Parcelable /** * The {@link AudioAttributes audio attributes} to use when playing the sound. + * + * @deprecated use {@link NotificationChannel#getAudioAttributes()} instead. */ + @Deprecated public AudioAttributes audioAttributes = AUDIO_ATTRIBUTES_DEFAULT; /** @@ -381,12 +386,10 @@ public class Notification implements Parcelable * To vibrate the default pattern, see {@link #defaults}. * </p> * - * <p> - * A notification that vibrates is more likely to be presented as a heads-up notification. - * </p> - * * @see android.os.Vibrator#vibrate(long[],int) + * @deprecated use {@link NotificationChannel#getVibrationPattern()}. */ + @Deprecated public long[] vibrate; /** @@ -394,8 +397,10 @@ public class Notification implements Parcelable * * @see #FLAG_SHOW_LIGHTS * @see #flags + * @deprecated use {@link NotificationChannel#shouldShowLights()}. */ @ColorInt + @Deprecated public int ledARGB; /** @@ -404,7 +409,9 @@ public class Notification implements Parcelable * * @see #FLAG_SHOW_LIGHTS * @see #flags + * @deprecated use {@link NotificationChannel#shouldShowLights()}. */ + @Deprecated public int ledOnMS; /** @@ -413,7 +420,10 @@ public class Notification implements Parcelable * * @see #FLAG_SHOW_LIGHTS * @see #flags + * + * @deprecated use {@link NotificationChannel#shouldShowLights()}. */ + @Deprecated public int ledOffMS; /** @@ -423,7 +433,12 @@ public class Notification implements Parcelable * {@link #DEFAULT_VIBRATE}, {@link #DEFAULT_LIGHTS}. For all default * values, use {@link #DEFAULT_ALL}. * </p> + * + * @deprecated use {@link NotificationChannel#getSound()} and + * {@link NotificationChannel#shouldShowLights()} and + * {@link NotificationChannel#shouldVibrate()}. */ + @Deprecated public int defaults; /** @@ -443,7 +458,9 @@ public class Notification implements Parcelable * <p> * The alpha channel must be set for forward compatibility. * + * @deprecated use {@link NotificationChannel#shouldShowLights()}. */ + @Deprecated public static final int FLAG_SHOW_LIGHTS = 0x00000001; /** @@ -532,33 +549,48 @@ public class Notification implements Parcelable /** * Default notification {@link #priority}. If your application does not prioritize its own * notifications, use this value for all notifications. + * + * @deprecated use {@link NotificationManager#IMPORTANCE_DEFAULT} instead. */ + @Deprecated public static final int PRIORITY_DEFAULT = 0; /** * Lower {@link #priority}, for items that are less important. The UI may choose to show these * items smaller, or at a different position in the list, compared with your app's * {@link #PRIORITY_DEFAULT} items. + * + * @deprecated use {@link NotificationManager#IMPORTANCE_LOW} instead. */ + @Deprecated public static final int PRIORITY_LOW = -1; /** * Lowest {@link #priority}; these items might not be shown to the user except under special * circumstances, such as detailed notification logs. + * + * @deprecated use {@link NotificationManager#IMPORTANCE_MIN} instead. */ + @Deprecated public static final int PRIORITY_MIN = -2; /** * Higher {@link #priority}, for more important notifications or alerts. The UI may choose to * show these items larger, or at a different position in notification lists, compared with * your app's {@link #PRIORITY_DEFAULT} items. + * + * @deprecated use {@link NotificationManager#IMPORTANCE_HIGH} instead. */ + @Deprecated public static final int PRIORITY_HIGH = 1; /** * Highest {@link #priority}, for your application's most important items that require the * user's prompt attention or input. + * + * @deprecated use {@link NotificationManager#IMPORTANCE_HIGH} instead. */ + @Deprecated public static final int PRIORITY_MAX = 2; /** @@ -575,8 +607,10 @@ public class Notification implements Parcelable * as a heads-up notification. * </p> * + * @deprecated use {@link NotificationChannel#getImportance()} instead. */ @Priority + @Deprecated public int priority; /** @@ -2956,8 +2990,9 @@ public class Notification implements Parcelable * It will be played using the {@link #AUDIO_ATTRIBUTES_DEFAULT default audio attributes} * for notifications. * - * @see Notification#sound + * @deprecated use {@link NotificationChannel#setSound(Uri, AudioAttributes)} instead. */ + @Deprecated public Builder setSound(Uri sound) { mN.sound = sound; mN.audioAttributes = AUDIO_ATTRIBUTES_DEFAULT; @@ -2969,8 +3004,7 @@ public class Notification implements Parcelable * * See {@link android.media.AudioManager} for the <code>STREAM_</code> constants. * - * @deprecated use {@link #setSound(Uri, AudioAttributes)} instead. - * @see Notification#sound + * @deprecated use {@link NotificationChannel#setSound(Uri, AudioAttributes)}. */ @Deprecated public Builder setSound(Uri sound, int streamType) { @@ -2984,8 +3018,10 @@ public class Notification implements Parcelable * Set the sound to play, along with specific {@link AudioAttributes audio attributes} to * use during playback. * + * @deprecated use {@link NotificationChannel#setSound(Uri, AudioAttributes)} instead. * @see Notification#sound */ + @Deprecated public Builder setSound(Uri sound, AudioAttributes audioAttributes) { mN.sound = sound; mN.audioAttributes = audioAttributes; @@ -3002,8 +3038,10 @@ public class Notification implements Parcelable * A notification that vibrates is more likely to be presented as a heads-up notification. * </p> * + * @deprecated use {@link NotificationChannel#setVibrationPattern(long[])} instead. * @see Notification#vibrate */ + @Deprecated public Builder setVibrate(long[] pattern) { mN.vibrate = pattern; return this; @@ -3016,11 +3054,12 @@ public class Notification implements Parcelable * Not all devices will honor all (or even any) of these values. * - + * @deprecated use {@link NotificationChannel#setLights(boolean)} instead. * @see Notification#ledARGB * @see Notification#ledOnMS * @see Notification#ledOffMS */ + @Deprecated public Builder setLights(@ColorInt int argb, int onMs, int offMs) { mN.ledARGB = argb; mN.ledOnMS = onMs; @@ -3108,7 +3147,12 @@ public class Notification implements Parcelable * {@link #DEFAULT_SOUND}, {@link #DEFAULT_VIBRATE}, {@link #DEFAULT_LIGHTS}. * <p> * For all default values, use {@link #DEFAULT_ALL}. + * + * @deprecated use {@link NotificationChannel#enableVibration(boolean)} and + * {@link NotificationChannel#setLights(boolean)} and + * {@link NotificationChannel#setSound(Uri, AudioAttributes)} instead. */ + @Deprecated public Builder setDefaults(int defaults) { mN.defaults = defaults; return this; @@ -3118,7 +3162,9 @@ public class Notification implements Parcelable * Set the priority of this notification. * * @see Notification#priority + * @deprecated use {@link NotificationChannel#setImportance(int)} instead. */ + @Deprecated public Builder setPriority(@Priority int pri) { mN.priority = pri; return this; diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java index 58ff4968b0a5..afcbcdf43344 100644 --- a/core/java/android/app/NotificationChannel.java +++ b/core/java/android/app/NotificationChannel.java @@ -347,12 +347,15 @@ public final class NotificationChannel implements Parcelable { } /** - * Sets whether notification posted to this channel should vibrate. + * Sets the vibration pattern for notifications posted to this channel. If the provided + * pattern is valid (non-null, non-empty), will {@link #enableVibration(boolean)} enable + * vibration} as well. Otherwise, vibration will be disabled. * * Only modifiable before the channel is submitted to * {@link NotificationManager#notify(String, int, Notification)}. */ public void setVibrationPattern(long[] vibrationPattern) { + this.mVibrationEnabled = vibrationPattern != null && vibrationPattern.length > 0; this.mVibration = vibrationPattern; } diff --git a/core/java/android/service/notification/StatusBarNotification.java b/core/java/android/service/notification/StatusBarNotification.java index 85baf4edaeca..85bccf746305 100644 --- a/core/java/android/service/notification/StatusBarNotification.java +++ b/core/java/android/service/notification/StatusBarNotification.java @@ -130,7 +130,7 @@ public class StatusBarNotification implements Parcelable { } return user.getIdentifier() + "|" + pkg + "|" + (group == null - ? "p:" + notification.priority + ? "c:" + notification.getChannel() : "g:" + group); } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index e55720395c8b..18ac76a32893 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -261,10 +261,6 @@ public class NotificationManagerService extends SystemService { private Light mNotificationLight; Light mAttentionLight; - private int mDefaultNotificationColor; - private int mDefaultNotificationLedOn; - - private int mDefaultNotificationLedOff; private long[] mFallbackVibrationPattern; private boolean mUseAttentionLight; @@ -1119,13 +1115,6 @@ public class NotificationManagerService extends SystemService { mNotificationLight = lightsManager.getLight(LightsManager.LIGHT_ID_NOTIFICATIONS); mAttentionLight = lightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION); - mDefaultNotificationColor = resources.getColor( - R.color.config_defaultNotificationColor); - mDefaultNotificationLedOn = resources.getInteger( - R.integer.config_defaultNotificationLedOn); - mDefaultNotificationLedOff = resources.getInteger( - R.integer.config_defaultNotificationLedOff); - mFallbackVibrationPattern = getLongArray(resources, R.array.config_notificationFallbackVibePattern, VIBRATE_PATTERN_MAXLEN, @@ -3068,10 +3057,6 @@ public class NotificationManagerService extends SystemService { } } - // Sanitize inputs - notification.priority = clamp(notification.priority, Notification.PRIORITY_MIN, - Notification.PRIORITY_MAX); - // setup local book-keeping final NotificationRecord r = new NotificationRecord(getContext(), n, channel); mHandler.post(new EnqueueNotificationRunnable(userId, r)); @@ -3429,7 +3414,7 @@ public class NotificationManagerService extends SystemService { // light // release the light boolean wasShowLights = mLights.remove(key); - if (shouldShowLights(record) && aboveThreshold + if (record.getLight() != null && aboveThreshold && ((record.getSuppressedVisualEffects() & NotificationListenerService.SUPPRESSED_EFFECT_SCREEN_OFF) == 0)) { mLights.add(key); @@ -3456,11 +3441,6 @@ public class NotificationManagerService extends SystemService { } } - private boolean shouldShowLights(final NotificationRecord record) { - return record.getChannel().shouldShowLights() - || (record.getNotification().flags & Notification.FLAG_SHOW_LIGHTS) != 0; - } - private boolean playSound(final NotificationRecord record, Uri soundUri) { boolean looping = (record.getNotification().flags & Notification.FLAG_INSISTENT) != 0; // do not play notifications if there is a user of exclusive audio focus @@ -4237,20 +4217,11 @@ public class NotificationManagerService extends SystemService { if (ledNotification == null || mInCall || mScreenOn) { mNotificationLight.turnOff(); } else { - final Notification ledno = ledNotification.sbn.getNotification(); - int ledARGB = ledno.ledARGB; - int ledOnMS = ledno.ledOnMS; - int ledOffMS = ledno.ledOffMS; - if ((ledno.defaults & Notification.DEFAULT_LIGHTS) != 0 - || (ledno.flags & Notification.FLAG_SHOW_LIGHTS) == 0) { - ledARGB = mDefaultNotificationColor; - ledOnMS = mDefaultNotificationLedOn; - ledOffMS = mDefaultNotificationLedOff; - } - if (mNotificationPulseEnabled) { + NotificationRecord.Light light = ledNotification.getLight(); + if (light != null && mNotificationPulseEnabled) { // pulse repeatedly - mNotificationLight.setFlashing(ledARGB, Light.LIGHT_FLASH_TIMED, - ledOnMS, ledOffMS); + mNotificationLight.setFlashing(light.color, Light.LIGHT_FLASH_TIMED, + light.onMs, light.offMs); } } } diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index ed2da68c491b..d26aa9e00d12 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -122,6 +122,7 @@ public final class NotificationRecord { private ArrayList<SnoozeCriterion> mSnoozeCriteria; private boolean mShowBadge; private LogMaker mLogMaker; + private Light mLight; @VisibleForTesting public NotificationRecord(Context context, StatusBarNotification sbn, @@ -140,6 +141,7 @@ public final class NotificationRecord { mVibration = calculateVibration(); mAttributes = calculateAttributes(); mImportance = calculateImportance(); + mLight = calculateLights(); } private boolean isPreChannelsNotification() { @@ -175,6 +177,34 @@ public final class NotificationRecord { return sound; } + private Light calculateLights() { + int defaultLightColor = mContext.getResources().getColor( + com.android.internal.R.color.config_defaultNotificationColor); + int defaultLightOn = mContext.getResources().getInteger( + com.android.internal.R.integer.config_defaultNotificationLedOn); + int defaultLightOff = mContext.getResources().getInteger( + com.android.internal.R.integer.config_defaultNotificationLedOff); + + Light light = getChannel().shouldShowLights() ? new Light(defaultLightColor, + defaultLightOn, defaultLightOff) : null; + if (mPreChannelsNotification + && (getChannel().getUserLockedFields() + & NotificationChannel.USER_LOCKED_LIGHTS) == 0) { + final Notification notification = sbn.getNotification(); + if ((notification.flags & Notification.FLAG_SHOW_LIGHTS) != 0) { + light = new Light(notification.ledARGB, notification.ledOnMS, + notification.ledOffMS); + if ((notification.defaults & Notification.DEFAULT_LIGHTS) != 0) { + light = new Light(defaultLightColor, defaultLightOn, + defaultLightOff); + } + } else { + light = null; + } + } + return light; + } + private long[] calculateVibration() { long[] vibration; final long[] defaultVibration = NotificationManagerService.getLongArray( @@ -239,6 +269,8 @@ public final class NotificationRecord { n.priority = Notification.PRIORITY_MAX; } + n.priority = NotificationManagerService.clamp(n.priority, Notification.PRIORITY_MIN, + Notification.PRIORITY_MAX); switch (n.priority) { case Notification.PRIORITY_MIN: requestedImportance = IMPORTANCE_MIN; @@ -322,15 +354,7 @@ public final class NotificationRecord { pw.println(prefix + " deleteIntent=" + notification.deleteIntent); pw.println(prefix + " tickerText=" + notification.tickerText); pw.println(prefix + " contentView=" + notification.contentView); - pw.println(prefix + String.format(" defaults=0x%08x flags=0x%08x", - notification.defaults, notification.flags)); - pw.println(prefix + " sound=" + notification.sound); - pw.println(prefix + " audioStreamType=" + notification.audioStreamType); - pw.println(prefix + " audioAttributes=" + notification.audioAttributes); pw.println(prefix + String.format(" color=0x%08x", notification.color)); - pw.println(prefix + " vibrate=" + Arrays.toString(notification.vibrate)); - pw.println(prefix + String.format(" led=0x%08x onMs=%d offMs=%d", - notification.ledARGB, notification.ledOnMS, notification.ledOffMS)); pw.println(prefix + " timeout=" + TimeUtils.formatForLogging(notification.getTimeout())); if (notification.actions != null && notification.actions.length > 0) { pw.println(prefix + " actions={"); @@ -398,12 +422,22 @@ public final class NotificationRecord { pw.println(prefix + " mVisibleSinceMs=" + mVisibleSinceMs); pw.println(prefix + " mUpdateTimeMs=" + mUpdateTimeMs); pw.println(prefix + " mSuppressedVisualEffects= " + mSuppressedVisualEffects); - pw.println(prefix + " notificationChannel= " + notification.getChannel()); + if (mPreChannelsNotification) { + pw.println(prefix + String.format(" defaults=0x%08x flags=0x%08x", + notification.defaults, notification.flags)); + pw.println(prefix + " n.sound=" + notification.sound); + pw.println(prefix + " n.audioStreamType=" + notification.audioStreamType); + pw.println(prefix + " n.audioAttributes=" + notification.audioAttributes); + pw.println(prefix + String.format(" led=0x%08x onMs=%d offMs=%d", + notification.ledARGB, notification.ledOnMS, notification.ledOffMS)); + pw.println(prefix + " vibrate=" + Arrays.toString(notification.vibrate)); + } pw.println(prefix + " mSound= " + mSound); pw.println(prefix + " mVibration= " + mVibration); pw.println(prefix + " mAttributes= " + mAttributes); + pw.println(prefix + " mLight= " + mLight); pw.println(prefix + " mShowBadge=" + mShowBadge); - pw.println(prefix + " channel=" + getChannel()); + pw.println(prefix + " effectiveNotificationChannel=" + getChannel()); if (getPeopleOverride() != null) { pw.println(prefix + " overridePeople= " + TextUtils.join(",", getPeopleOverride())); } @@ -682,6 +716,10 @@ public final class NotificationRecord { return mShowBadge; } + public Light getLight() { + return mLight; + } + public Uri getSound() { return mSound; } @@ -730,4 +768,47 @@ public final class NotificationRecord { public LogMaker getLogMaker() { return getLogMaker(System.currentTimeMillis()); } + + @VisibleForTesting + static final class Light { + public final int color; + public final int onMs; + public final int offMs; + + public Light(int color, int onMs, int offMs) { + this.color = color; + this.onMs = onMs; + this.offMs = offMs; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Light light = (Light) o; + + if (color != light.color) return false; + if (onMs != light.onMs) return false; + return offMs == light.offMs; + + } + + @Override + public int hashCode() { + int result = color; + result = 31 * result + onMs; + result = 31 * result + offMs; + return result; + } + + @Override + public String toString() { + return "Light{" + + "color=" + color + + ", onMs=" + onMs + + ", offMs=" + offMs + + '}'; + } + } } diff --git a/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java index d91e8dfe1887..9202cce3b062 100644 --- a/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java +++ b/services/tests/notification/src/com/android/server/notification/BuzzBeepBlinkTest.java @@ -333,17 +333,6 @@ public class BuzzBeepBlinkTest { } @Test - public void testLightsFromChannel() throws Exception { - NotificationRecord r = getQuietNotification(); - r.setImportance(NotificationManager.IMPORTANCE_DEFAULT, "for testing"); - r.getChannel().setLights(true); - - mService.buzzBeepBlinkLocked(r); - - verifyLights(); - } - - @Test public void testBeepInsistently() throws Exception { NotificationRecord r = getInsistentBeepyNotification(); @@ -353,16 +342,6 @@ public class BuzzBeepBlinkTest { } @Test - public void testChannelNoOverwriteCustomLights() throws Exception { - NotificationRecord r = getCustomLightsNotification(); - r.getChannel().setLights(true); - - mService.buzzBeepBlinkLocked(r); - - verifyCustomLights(); - } - - @Test public void testNoInterruptionForMin() throws Exception { NotificationRecord r = getBeepyNotification(); r.setImportance(NotificationManager.IMPORTANCE_MIN, "foo"); @@ -562,7 +541,7 @@ public class BuzzBeepBlinkTest { } @Test - public void testVibratTwice() throws Exception { + public void testVibrateTwice() throws Exception { NotificationRecord r = getBuzzyNotification(); // set up internal state diff --git a/services/tests/notification/src/com/android/server/notification/NotificationRecordTest.java b/services/tests/notification/src/com/android/server/notification/NotificationRecordTest.java index 2ab1f30fa74b..0ec368f44f81 100644 --- a/services/tests/notification/src/com/android/server/notification/NotificationRecordTest.java +++ b/services/tests/notification/src/com/android/server/notification/NotificationRecordTest.java @@ -16,7 +16,9 @@ package com.android.server.notification; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.mockito.Matchers.anyInt; @@ -76,7 +78,6 @@ public class NotificationRecordTest { final ApplicationInfo legacy = new ApplicationInfo(); final ApplicationInfo upgrade = new ApplicationInfo(); - private static final long[] CUSTOM_VIBRATION = new long[] { 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, 300, 400, @@ -87,6 +88,8 @@ public class NotificationRecordTest { .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) .build(); + private static final NotificationRecord.Light CUSTOM_LIGHT = + new NotificationRecord.Light(1, 2, 3); @Before public void setUp() { @@ -105,7 +108,7 @@ public class NotificationRecordTest { } private StatusBarNotification getNotification(boolean preO, boolean noisy, boolean defaultSound, - boolean buzzy, boolean defaultVibration) { + boolean buzzy, boolean defaultVibration, boolean lights, boolean defaultLights) { when(mMockContext.getApplicationInfo()).thenReturn(preO ? legacy : upgrade); final Builder builder = new Builder(mMockContext) .setContentTitle("foo") @@ -129,6 +132,17 @@ public class NotificationRecordTest { channel.setVibrationPattern(CUSTOM_CHANNEL_VIBRATION); } } + if (lights) { + if (defaultLights) { + defaults |= Notification.DEFAULT_LIGHTS; + } else { + builder.setLights(CUSTOM_LIGHT.color, CUSTOM_LIGHT.onMs, CUSTOM_LIGHT.offMs); + } + channel.setLights(true); + } else { + channel.setLights(false); + } + builder.setDefaults(defaults); if (!preO) { builder.setChannel(channelId); @@ -154,7 +168,8 @@ public class NotificationRecordTest { defaultChannel.setSound(null, null); // pre upgrade, default sound. StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, - true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, record.getSound()); @@ -166,7 +181,8 @@ public class NotificationRecordTest { defaultChannel.setSound(null, null); // pre upgrade, custom sound. StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, - false /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + false /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertEquals(CUSTOM_SOUND, record.getSound()); @@ -179,7 +195,8 @@ public class NotificationRecordTest { defaultChannel.lockFields(NotificationChannel.USER_LOCKED_SOUND); // pre upgrade, default sound. StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, - true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertEquals(CUSTOM_SOUND, record.getSound()); @@ -191,7 +208,8 @@ public class NotificationRecordTest { channel.setSound(CUSTOM_SOUND, CUSTOM_ATTRIBUTES); // post upgrade, default sound. StatusBarNotification sbn = getNotification(false /*preO */, true /* noisy */, - true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); assertEquals(CUSTOM_SOUND, record.getSound()); @@ -203,7 +221,8 @@ public class NotificationRecordTest { defaultChannel.enableVibration(false); // pre upgrade, default vibration. StatusBarNotification sbn = getNotification(true /*preO */, false /* noisy */, - false /* defaultSound */, true /* buzzy */, true /* defaultBuzz */); + false /* defaultSound */, true /* buzzy */, true /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertNotNull(record.getVibration()); @@ -214,7 +233,8 @@ public class NotificationRecordTest { defaultChannel.enableVibration(false); // pre upgrade, custom vibration. StatusBarNotification sbn = getNotification(true /*preO */, false /* noisy */, - false /* defaultSound */, true /* buzzy */, false /* defaultBuzz */); + false /* defaultSound */, true /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertEquals(CUSTOM_VIBRATION, record.getVibration()); @@ -226,7 +246,8 @@ public class NotificationRecordTest { defaultChannel.lockFields(NotificationChannel.USER_LOCKED_VIBRATION); // pre upgrade, custom vibration. StatusBarNotification sbn = getNotification(true /*preO */, false /* noisy */, - false /* defaultSound */, true /* buzzy */, false /* defaultBuzz */); + false /* defaultSound */, true /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertTrue(!Objects.equals(CUSTOM_VIBRATION, record.getVibration())); @@ -237,7 +258,8 @@ public class NotificationRecordTest { channel.enableVibration(true); // post upgrade, custom vibration. StatusBarNotification sbn = getNotification(false /*preO */, false /* noisy */, - false /* defaultSound */, true /* buzzy */, false /* defaultBuzz */); + false /* defaultSound */, true /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); assertEquals(CUSTOM_CHANNEL_VIBRATION, record.getVibration()); @@ -246,7 +268,8 @@ public class NotificationRecordTest { @Test public void testImportance_preUpgrade() throws Exception { StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, - true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertEquals(NotificationManager.IMPORTANCE_HIGH, record.getImportance()); } @@ -256,7 +279,8 @@ public class NotificationRecordTest { defaultChannel.setImportance(NotificationManager.IMPORTANCE_LOW); defaultChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE); StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, - true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); assertEquals(NotificationManager.IMPORTANCE_LOW, record.getImportance()); @@ -265,8 +289,67 @@ public class NotificationRecordTest { @Test public void testImportance_upgrade() throws Exception { StatusBarNotification sbn = getNotification(false /*preO */, true /* noisy */, - true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */); + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); assertEquals(NotificationManager.IMPORTANCE_DEFAULT, record.getImportance()); } + + @Test + public void testLights_preUpgrade_noLight() throws Exception { + StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); + assertNull(record.getLight()); + } + + + @Test + public void testLights_preUpgrade() throws Exception { + StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + true /* lights */, false /*defaultLights */); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); + assertEquals(CUSTOM_LIGHT, record.getLight()); + } + + @Test + public void testLights_locked_preUpgrade() throws Exception { + defaultChannel.setLights(true); + defaultChannel.lockFields(NotificationChannel.USER_LOCKED_LIGHTS); + StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + true /* lights */, false /*defaultLights */); + + NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); + assertFalse(CUSTOM_LIGHT.equals(record.getLight())); + } + + @Test + public void testLights_upgrade() throws Exception { + int defaultLightColor = mMockContext.getResources().getColor( + com.android.internal.R.color.config_defaultNotificationColor); + int defaultLightOn = mMockContext.getResources().getInteger( + com.android.internal.R.integer.config_defaultNotificationLedOn); + int defaultLightOff = mMockContext.getResources().getInteger( + com.android.internal.R.integer.config_defaultNotificationLedOff); + + NotificationRecord.Light expected = new NotificationRecord.Light( + defaultLightColor, defaultLightOn, defaultLightOff); + StatusBarNotification sbn = getNotification(false /*preO */, true /* noisy */, + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + true /* lights */, false /*defaultLights */); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); + assertEquals(expected, record.getLight()); + } + + @Test + public void testLights_upgrade_noLight() throws Exception { + StatusBarNotification sbn = getNotification(false /*preO */, true /* noisy */, + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /*defaultLights */); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, defaultChannel); + assertNull(record.getLight()); + } } |