NotificationCompat.java revision 89e6774cdb200acc2dd5f4c9022a7e1aeeb05bce
1c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell/* 2c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Copyright (C) 2012 The Android Open Source Project 3c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 4c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * you may not use this file except in compliance with the License. 6c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * You may obtain a copy of the License at 7c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 8c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * http://www.apache.org/licenses/LICENSE-2.0 9c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 10c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Unless required by applicable law or agreed to in writing, software 11c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * See the License for the specific language governing permissions and 14c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * limitations under the License. 15c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 16c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 17c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellpackage android.support.v4.app; 18c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 19c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.app.Notification; 20c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.app.PendingIntent; 21c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.content.Context; 22c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.graphics.Bitmap; 2369a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandlerimport android.graphics.Color; 24c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.media.AudioManager; 25c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.net.Uri; 26c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.os.Build; 27b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazenimport android.os.Bundle; 282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazenimport android.os.Parcelable; 292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazenimport android.support.v4.view.GravityCompat; 302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazenimport android.view.Gravity; 31c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.widget.RemoteViews; 32300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 33f021758934b35e3b842c6799344531d7ea2969daChris Wrenimport java.util.ArrayList; 342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazenimport java.util.Collections; 352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazenimport java.util.List; 36c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 37080df8ffb0920eccb300baa39180eb956a000a53Chris Wren/** 38080df8ffb0920eccb300baa39180eb956a000a53Chris Wren * Helper for accessing features in {@link android.app.Notification} 39080df8ffb0920eccb300baa39180eb956a000a53Chris Wren * introduced after API level 4 in a backwards compatible fashion. 40080df8ffb0920eccb300baa39180eb956a000a53Chris Wren */ 41c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellpublic class NotificationCompat { 42c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 43c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 44c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Use all default values (where applicable). 45c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 46c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int DEFAULT_ALL = ~0; 47c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 48c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 49c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Use the default notification sound. This will ignore any sound set using 50c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setSound} 51c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * 52e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * <p> 53e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * A notification that is noisy is more likely to be presented as a heads-up notification, 54e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * on some platforms. 55e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * </p> 56e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * 57c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * @see Builder#setDefaults 58c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 59c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int DEFAULT_SOUND = 1; 60c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 61c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 62c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Use the default notification vibrate. This will ignore any vibrate set using 63c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setVibrate}. Using phone vibration requires the 64c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link android.Manifest.permission#VIBRATE VIBRATE} permission. 65c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * 66e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * <p> 67e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * A notification that vibrates is more likely to be presented as a heads-up notification, 68e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * on some platforms. 69e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * </p> 70e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * 71c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * @see Builder#setDefaults 72c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 73c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int DEFAULT_VIBRATE = 2; 74c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 75c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 76c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Use the default notification lights. This will ignore the 77c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link #FLAG_SHOW_LIGHTS} bit, and values set with {@link Builder#setLights}. 78c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * 79c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * @see Builder#setDefaults 80c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 81c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int DEFAULT_LIGHTS = 4; 82c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 83c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 84c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Use this constant as the value for audioStreamType to request that 85c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * the default stream type for notifications be used. Currently the 86c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * default stream type is {@link AudioManager#STREAM_NOTIFICATION}. 87c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 88c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int STREAM_DEFAULT = -1; 89c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 90c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 91c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field when LEDs should be turned on 92c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * for this notification. 93c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 94c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_SHOW_LIGHTS = 0x00000001; 95c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 96c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 97c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field if this notification is in 98c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * reference to something that is ongoing, like a phone call. It should 99c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * not be set if this notification is in reference to something that 100c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * happened at a particular point in time, like a missed phone call. 101c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 102c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_ONGOING_EVENT = 0x00000002; 103c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 104c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 105c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field if 106c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * the audio will be repeated until the notification is 107c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * cancelled or the notification window is opened. 108c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 109c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_INSISTENT = 0x00000004; 110c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 111c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 112c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field if the notification's sound, 113c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * vibrate and ticker should only be played if the notification is not already showing. 114c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 115c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_ONLY_ALERT_ONCE = 0x00000008; 116c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 117c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 118c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field if the notification should be canceled when 119c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * it is clicked by the user. 120c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 121c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_AUTO_CANCEL = 0x00000010; 122c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 123c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 124c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field if the notification should not be canceled 125c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * when the user clicks the Clear all button. 126c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 127c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_NO_CLEAR = 0x00000020; 128c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 129c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 130c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Bit set in the Notification flags field if this notification represents a currently 131c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * running service. This will normally be set for you by 132c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link android.app.Service#startForeground}. 133c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 134c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final int FLAG_FOREGROUND_SERVICE = 0x00000040; 135c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 136c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 137f021758934b35e3b842c6799344531d7ea2969daChris Wren * Obsolete flag indicating high-priority notifications; use the priority field instead. 138884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 139f021758934b35e3b842c6799344531d7ea2969daChris Wren * @deprecated Use {@link NotificationCompat.Builder#setPriority(int)} with a positive value. 140c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 141ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final int FLAG_HIGH_PRIORITY = 0x00000080; 142ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 143ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 144ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Bit set in the Notification flags field if this notification is relevant to the current 145ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * device only and it is not recommended that it bridge to other devices. 146ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 147ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final int FLAG_LOCAL_ONLY = 0x00000100; 148ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 149ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 150ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Bit set in the Notification flags field if this notification is the group summary for a 151ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * group of notifications. Grouped notifications may display in a cluster or stack on devices 152ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * which support such rendering. Requires a group key also be set using 153ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link Builder#setGroup}. 154ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 155ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final int FLAG_GROUP_SUMMARY = 0x00000200; 156c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 157f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 158f021758934b35e3b842c6799344531d7ea2969daChris Wren * Default notification priority for {@link NotificationCompat.Builder#setPriority(int)}. 159f021758934b35e3b842c6799344531d7ea2969daChris Wren * If your application does not prioritize its own notifications, 160f021758934b35e3b842c6799344531d7ea2969daChris Wren * use this value for all notifications. 161f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 162f021758934b35e3b842c6799344531d7ea2969daChris Wren public static final int PRIORITY_DEFAULT = 0; 163f021758934b35e3b842c6799344531d7ea2969daChris Wren 164f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 165f021758934b35e3b842c6799344531d7ea2969daChris Wren * Lower notification priority for {@link NotificationCompat.Builder#setPriority(int)}, 166f021758934b35e3b842c6799344531d7ea2969daChris Wren * for items that are less important. The UI may choose to show 167f021758934b35e3b842c6799344531d7ea2969daChris Wren * these items smaller, or at a different position in the list, 168f021758934b35e3b842c6799344531d7ea2969daChris Wren * compared with your app's {@link #PRIORITY_DEFAULT} items. 169f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 170f021758934b35e3b842c6799344531d7ea2969daChris Wren public static final int PRIORITY_LOW = -1; 171f021758934b35e3b842c6799344531d7ea2969daChris Wren 172f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 173f021758934b35e3b842c6799344531d7ea2969daChris Wren * Lowest notification priority for {@link NotificationCompat.Builder#setPriority(int)}; 174f021758934b35e3b842c6799344531d7ea2969daChris Wren * these items might not be shown to the user except under 175f021758934b35e3b842c6799344531d7ea2969daChris Wren * special circumstances, such as detailed notification logs. 176f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 177f021758934b35e3b842c6799344531d7ea2969daChris Wren public static final int PRIORITY_MIN = -2; 178f021758934b35e3b842c6799344531d7ea2969daChris Wren 179f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 180f021758934b35e3b842c6799344531d7ea2969daChris Wren * Higher notification priority for {@link NotificationCompat.Builder#setPriority(int)}, 181f021758934b35e3b842c6799344531d7ea2969daChris Wren * for more important notifications or alerts. The UI may choose 182f021758934b35e3b842c6799344531d7ea2969daChris Wren * to show these items larger, or at a different position in 183f021758934b35e3b842c6799344531d7ea2969daChris Wren * notification lists, compared with your app's {@link #PRIORITY_DEFAULT} items. 184f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 185f021758934b35e3b842c6799344531d7ea2969daChris Wren public static final int PRIORITY_HIGH = 1; 186f021758934b35e3b842c6799344531d7ea2969daChris Wren 187f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 188f021758934b35e3b842c6799344531d7ea2969daChris Wren * Highest notification priority for {@link NotificationCompat.Builder#setPriority(int)}, 189f021758934b35e3b842c6799344531d7ea2969daChris Wren * for your application's most important items that require the user's 190f021758934b35e3b842c6799344531d7ea2969daChris Wren * prompt attention or input. 191f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 192f021758934b35e3b842c6799344531d7ea2969daChris Wren public static final int PRIORITY_MAX = 2; 193f021758934b35e3b842c6799344531d7ea2969daChris Wren 194c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 195c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is the title of the notification, 196c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * as supplied to {@link Builder#setContentTitle(CharSequence)}. 197c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 198c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_TITLE = "android.title"; 199c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 200c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 201c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is the title of the notification when shown in expanded form, 202c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * e.g. as supplied to {@link BigTextStyle#setBigContentTitle(CharSequence)}. 203c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 204c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_TITLE_BIG = EXTRA_TITLE + ".big"; 205c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 206c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 207c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is the main text payload, as supplied to 208c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setContentText(CharSequence)}. 209c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 210c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_TEXT = "android.text"; 211c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 212c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 213c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is a third line of text, as supplied to 214c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setSubText(CharSequence)}. 215c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 216c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_SUB_TEXT = "android.subText"; 217c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 218c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 219c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is a small piece of additional text as supplied to 220c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setContentInfo(CharSequence)}. 221c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 222c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_INFO_TEXT = "android.infoText"; 223c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 224c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 225c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is a line of summary information intended to be shown 226c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * alongside expanded notifications, as supplied to (e.g.) 227c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link BigTextStyle#setSummaryText(CharSequence)}. 228c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 229c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_SUMMARY_TEXT = "android.summaryText"; 230c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 231c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 23248d8878e34b0d9983166418378125b63faac9aabGriff Hazen * Notification extras key: this is the longer text shown in the big form of a 23348d8878e34b0d9983166418378125b63faac9aabGriff Hazen * {@link BigTextStyle} notification, as supplied to 23448d8878e34b0d9983166418378125b63faac9aabGriff Hazen * {@link BigTextStyle#bigText(CharSequence)}. 23548d8878e34b0d9983166418378125b63faac9aabGriff Hazen */ 23648d8878e34b0d9983166418378125b63faac9aabGriff Hazen public static final String EXTRA_BIG_TEXT = "android.bigText"; 23748d8878e34b0d9983166418378125b63faac9aabGriff Hazen 23848d8878e34b0d9983166418378125b63faac9aabGriff Hazen /** 239c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is the resource ID of the notification's main small icon, as 240c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * supplied to {@link Builder#setSmallIcon(int)}. 241c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 242c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_SMALL_ICON = "android.icon"; 243c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 244c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 245c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is a bitmap to be used instead of the small icon when showing the 246c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * notification payload, as 247c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * supplied to {@link Builder#setLargeIcon(android.graphics.Bitmap)}. 248c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 249c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_LARGE_ICON = "android.largeIcon"; 250c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 251c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 252c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is a bitmap to be used instead of the one from 253c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setLargeIcon(android.graphics.Bitmap)} when the notification is 254c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * shown in its expanded form, as supplied to 255c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link BigPictureStyle#bigLargeIcon(android.graphics.Bitmap)}. 256c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 257c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_LARGE_ICON_BIG = EXTRA_LARGE_ICON + ".big"; 258c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 259c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 260c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is the progress value supplied to 261c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setProgress(int, int, boolean)}. 262c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 263c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_PROGRESS = "android.progress"; 264c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 265c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 266c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is the maximum value supplied to 267c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setProgress(int, int, boolean)}. 268c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 269c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_PROGRESS_MAX = "android.progressMax"; 270c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 271c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 272c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: whether the progress bar is indeterminate, supplied to 273c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * {@link Builder#setProgress(int, int, boolean)}. 274c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 275c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate"; 276c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 277c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 278c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: whether the when field set using {@link Builder#setWhen} should 279c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * be shown as a count-up timer (specifically a {@link android.widget.Chronometer}) instead 280c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * of a timestamp, as supplied to {@link Builder#setUsesChronometer(boolean)}. 281c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 282c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer"; 283c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 284c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 28548d8878e34b0d9983166418378125b63faac9aabGriff Hazen * Notification extras key: whether the when field set using {@link Builder#setWhen} should 28648d8878e34b0d9983166418378125b63faac9aabGriff Hazen * be shown, as supplied to {@link Builder#setShowWhen(boolean)}. 28748d8878e34b0d9983166418378125b63faac9aabGriff Hazen */ 28848d8878e34b0d9983166418378125b63faac9aabGriff Hazen public static final String EXTRA_SHOW_WHEN = "android.showWhen"; 28948d8878e34b0d9983166418378125b63faac9aabGriff Hazen 29048d8878e34b0d9983166418378125b63faac9aabGriff Hazen /** 291c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: this is a bitmap to be shown in {@link BigPictureStyle} expanded 292c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * notifications, supplied to {@link BigPictureStyle#bigPicture(android.graphics.Bitmap)}. 293c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 294c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_PICTURE = "android.picture"; 295c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 296c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 297c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * Notification extras key: An array of CharSequences to show in {@link InboxStyle} expanded 298c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen * notifications, each of which was supplied to {@link InboxStyle#addLine(CharSequence)}. 299c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 300c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_TEXT_LINES = "android.textLines"; 301c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 302c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen /** 30341484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * Notification extras key: A string representing the name of the specific 30441484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * {@link android.app.Notification.Style} used to create this notification. 30541484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer */ 30641484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer public static final String EXTRA_TEMPLATE = "android.template"; 30741484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer 30841484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer /** 30989e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * Notification extras key: A String array containing the people that this 31089e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * notification relates to, each of which was supplied to 31189e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * {@link Builder#addPerson(String)}. 312c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen */ 313c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen public static final String EXTRA_PEOPLE = "android.people"; 314c4e68f1b0c0cb95f499812383ccb282643777226Griff Hazen 31569a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler /** 31641484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * Notification extras key: A 31741484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * {@link android.content.ContentUris content URI} pointing to an image that can be displayed 31841484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * in the background when the notification is selected. The URI must point to an image stream 31941484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * suitable for passing into 32041484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * {@link android.graphics.BitmapFactory#decodeStream(java.io.InputStream) 32141484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * BitmapFactory.decodeStream}; all other content types will be ignored. The content provider 32241484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * URI used for this purpose must require no permissions to read the image data. 32341484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer */ 32441484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri"; 32541484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer 32641484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer /** 32741484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * Notification key: A 32841484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * {@link android.media.session.MediaSession.Token} associated with a 32941484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer * {@link android.app.Notification.MediaStyle} notification. 33041484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer */ 33141484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer public static final String EXTRA_MEDIA_SESSION = "android.mediaSession"; 33241484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer 33341484f326c4dd126e84b26828ba340a8ae9406e8Christoph Studer /** 334b2216c3ffda4d63d3f0c9f6b16afc8c912c4296eBryan Mawhinney * Notification extras key: the indices of actions to be shown in the compact view, 335b2216c3ffda4d63d3f0c9f6b16afc8c912c4296eBryan Mawhinney * as supplied to (e.g.) {@link Notification.MediaStyle#setShowActionsInCompactView(int...)}. 336569c49e672218d3a9d391a16e4c1b50507d5eccfBryan Mawhinney */ 337569c49e672218d3a9d391a16e4c1b50507d5eccfBryan Mawhinney public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions"; 338569c49e672218d3a9d391a16e4c1b50507d5eccfBryan Mawhinney 339569c49e672218d3a9d391a16e4c1b50507d5eccfBryan Mawhinney /** 34069a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * Value of {@link Notification#color} equal to 0 (also known as 34169a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * {@link android.graphics.Color#TRANSPARENT Color.TRANSPARENT}), 34269a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * telling the system not to decorate this notification with any special color but instead use 34369a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * default colors when presenting this notification. 34469a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler */ 34569a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler public static final int COLOR_DEFAULT = Color.TRANSPARENT; 34669a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler 347df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler /** 348df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * Notification visibility: Show this notification in its entirety on all lockscreens. 349df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * 350df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * {@see android.app.Notification#visibility} 351df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler */ 352df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler public static final int VISIBILITY_PUBLIC = 1; 353df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler 354df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler /** 355df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * Notification visibility: Show this notification on all lockscreens, but conceal sensitive or 356df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * private information on secure lockscreens. 357df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * 358df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * {@see android.app.Notification#visibility} 359df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler */ 360df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler public static final int VISIBILITY_PRIVATE = 0; 361df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler 362df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler /** 363df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * Notification visibility: Do not reveal any part of this notification on a secure lockscreen. 364df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * 365df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * {@see android.app.Notification#visibility} 366df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler */ 367df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler public static final int VISIBILITY_SECRET = -1; 368df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler 3691f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 3701f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: incoming call (voice or video) or similar synchronous communication request. 3711f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 3721f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_CALL = NotificationCompatApi21.CATEGORY_CALL; 3731f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 3741f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 3751f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: incoming direct message (SMS, instant message, etc.). 3761f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 3771f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_MESSAGE = NotificationCompatApi21.CATEGORY_MESSAGE; 3781f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 3791f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 3801f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: asynchronous bulk message (email). 3811f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 3821f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_EMAIL = NotificationCompatApi21.CATEGORY_EMAIL; 3831f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 3841f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 3851f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: calendar event. 3861f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 3871f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_EVENT = NotificationCompatApi21.CATEGORY_EVENT; 3881f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 3891f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 3901f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: promotion or advertisement. 3911f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 3921f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_PROMO = NotificationCompatApi21.CATEGORY_PROMO; 3931f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 3941f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 3951f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: alarm or timer. 3961f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 3971f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_ALARM = NotificationCompatApi21.CATEGORY_ALARM; 3981f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 3991f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4001f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: progress of a long-running background operation. 4011f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4021f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_PROGRESS = NotificationCompatApi21.CATEGORY_PROGRESS; 4031f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4041f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4051f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: social network or sharing update. 4061f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4071f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_SOCIAL = NotificationCompatApi21.CATEGORY_SOCIAL; 4081f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4091f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4101f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: error in background operation or authentication status. 4111f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4121f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_ERROR = NotificationCompatApi21.CATEGORY_ERROR; 4131f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4141f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4151f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: media transport control for playback. 4161f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4171f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_TRANSPORT = NotificationCompatApi21.CATEGORY_TRANSPORT; 4181f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4191f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4201f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: system or device status update. Reserved for system use. 4211f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4221f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_SYSTEM = NotificationCompatApi21.CATEGORY_SYSTEM; 4231f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4241f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4251f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: indication of running background service. 4261f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4271f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_SERVICE = NotificationCompatApi21.CATEGORY_SERVICE; 4281f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4291f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4301f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: a specific, timely recommendation for a single thing. 4311f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * For example, a news app might want to recommend a news story it believes the user will 4321f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * want to read next. 4331f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4341f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_RECOMMENDATION = 4351f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney NotificationCompatApi21.CATEGORY_RECOMMENDATION; 4361f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 4371f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney /** 4381f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney * Notification category: ongoing information about device or contextual status. 4391f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney */ 4401f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney public static final String CATEGORY_STATUS = NotificationCompatApi21.CATEGORY_STATUS; 4411f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney 442c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell private static final NotificationCompatImpl IMPL; 443c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 444c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell interface NotificationCompatImpl { 445f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build(Builder b); 446b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public Bundle getExtras(Notification n); 447300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public int getActionCount(Notification n); 448300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Action getAction(Notification n, int actionIndex); 4492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Action[] getActionsFromParcelableArrayList(ArrayList<Parcelable> parcelables); 4502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public ArrayList<Parcelable> getParcelableArrayListForActions(Action[] actions); 45175e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney public String getCategory(Notification n); 452b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public boolean getLocalOnly(Notification n); 453ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getGroup(Notification n); 454ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public boolean isGroupSummary(Notification n); 455ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getSortKey(Notification n); 456c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 457c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 458c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell static class NotificationCompatImplBase implements NotificationCompatImpl { 459b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 460f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build(Builder b) { 461fe3b5bac4901a4bb8cf51c09fe4910b02388818aGriff Hazen Notification result = b.mNotification; 462c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell result.setLatestEventInfo(b.mContext, b.mContentTitle, 463c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell b.mContentText, b.mContentIntent); 464f021758934b35e3b842c6799344531d7ea2969daChris Wren // translate high priority requests into legacy flag 465f021758934b35e3b842c6799344531d7ea2969daChris Wren if (b.mPriority > PRIORITY_DEFAULT) { 466884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin result.flags |= FLAG_HIGH_PRIORITY; 467f021758934b35e3b842c6799344531d7ea2969daChris Wren } 468c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return result; 469c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 470b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 471b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 472b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public Bundle getExtras(Notification n) { 473b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return null; 474b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 475b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 476b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 477300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public int getActionCount(Notification n) { 478300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return 0; 479300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 480300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 481300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 482300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Action getAction(Notification n, int actionIndex) { 483300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return null; 484300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 485300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 486300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 4872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Action[] getActionsFromParcelableArrayList( 4882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen ArrayList<Parcelable> parcelables) { 4892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return null; 4902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 4912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 4922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 4932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public ArrayList<Parcelable> getParcelableArrayListForActions(Action[] actions) { 4942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return null; 4952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 4962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 4972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 49875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney public String getCategory(Notification n) { 49975e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney return null; 50075e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney } 50175e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney 50275e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney @Override 503b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public boolean getLocalOnly(Notification n) { 504b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return false; 505b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 506ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 507ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 508ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getGroup(Notification n) { 509ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 510ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 511ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 512ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 513ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public boolean isGroupSummary(Notification n) { 514ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return false; 515ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 516ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 517ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 518ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getSortKey(Notification n) { 519ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 520ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 521c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 522c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 52329e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren static class NotificationCompatImplGingerbread extends NotificationCompatImplBase { 524b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 52529e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren public Notification build(Builder b) { 526fe3b5bac4901a4bb8cf51c09fe4910b02388818aGriff Hazen Notification result = b.mNotification; 52729e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren result.setLatestEventInfo(b.mContext, b.mContentTitle, 52829e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren b.mContentText, b.mContentIntent); 52929e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren result = NotificationCompatGingerbread.add(result, b.mContext, 53029e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren b.mContentTitle, b.mContentText, b.mContentIntent, b.mFullScreenIntent); 53129e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren // translate high priority requests into legacy flag 53229e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren if (b.mPriority > PRIORITY_DEFAULT) { 53329e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren result.flags |= FLAG_HIGH_PRIORITY; 53429e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren } 53529e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren return result; 53629e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren } 53729e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren } 53829e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren 539b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen static class NotificationCompatImplHoneycomb extends NotificationCompatImplBase { 540b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 541f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build(Builder b) { 542c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return NotificationCompatHoneycomb.add(b.mContext, b.mNotification, 543c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell b.mContentTitle, b.mContentText, b.mContentInfo, b.mTickerView, 544c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon); 545c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 546c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 547c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 548b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen static class NotificationCompatImplIceCreamSandwich extends NotificationCompatImplBase { 549b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 550f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build(Builder b) { 551f021758934b35e3b842c6799344531d7ea2969daChris Wren return NotificationCompatIceCreamSandwich.add(b.mContext, b.mNotification, 552f021758934b35e3b842c6799344531d7ea2969daChris Wren b.mContentTitle, b.mContentText, b.mContentInfo, b.mTickerView, 553f021758934b35e3b842c6799344531d7ea2969daChris Wren b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon, 554f021758934b35e3b842c6799344531d7ea2969daChris Wren b.mProgressMax, b.mProgress, b.mProgressIndeterminate); 555f021758934b35e3b842c6799344531d7ea2969daChris Wren } 556f021758934b35e3b842c6799344531d7ea2969daChris Wren } 557f021758934b35e3b842c6799344531d7ea2969daChris Wren 558b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen static class NotificationCompatImplJellybean extends NotificationCompatImplBase { 559b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 560f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build(Builder b) { 561b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen NotificationCompatJellybean.Builder builder = new NotificationCompatJellybean.Builder( 562f021758934b35e3b842c6799344531d7ea2969daChris Wren b.mContext, b.mNotification, b.mContentTitle, b.mContentText, b.mContentInfo, 563f021758934b35e3b842c6799344531d7ea2969daChris Wren b.mTickerView, b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon, 564f021758934b35e3b842c6799344531d7ea2969daChris Wren b.mProgressMax, b.mProgress, b.mProgressIndeterminate, 565ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen b.mUseChronometer, b.mPriority, b.mSubText, b.mLocalOnly, b.mExtras, 566ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen b.mGroupKey, b.mGroupSummary, b.mSortKey); 567b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen addActionsToBuilder(builder, b.mActions); 568b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen addStyleToBuilderJellybean(builder, b.mStyle); 569b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return builder.build(); 570b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 571b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 572b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 573b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public Bundle getExtras(Notification n) { 574b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return NotificationCompatJellybean.getExtras(n); 575b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 576b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 577b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 578300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public int getActionCount(Notification n) { 579300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return NotificationCompatJellybean.getActionCount(n); 580300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 581300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 582300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 583300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Action getAction(Notification n, int actionIndex) { 584ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return (Action) NotificationCompatJellybean.getAction(n, actionIndex, Action.FACTORY, 585ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInput.FACTORY); 586300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 587300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 588300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 5892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Action[] getActionsFromParcelableArrayList( 5902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen ArrayList<Parcelable> parcelables) { 5912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (Action[]) NotificationCompatJellybean.getActionsFromParcelableArrayList( 5922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen parcelables, Action.FACTORY, RemoteInput.FACTORY); 5932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 5942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 5952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 5962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public ArrayList<Parcelable> getParcelableArrayListForActions( 5972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Action[] actions) { 5982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return NotificationCompatJellybean.getParcelableArrayListForActions(actions); 5992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 6002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 6012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 60247702147608084fec16a50640da54b412c737b9cGriff Hazen public boolean getLocalOnly(Notification n) { 60347702147608084fec16a50640da54b412c737b9cGriff Hazen return NotificationCompatJellybean.getLocalOnly(n); 60447702147608084fec16a50640da54b412c737b9cGriff Hazen } 605ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 606ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 607ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getGroup(Notification n) { 608ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatJellybean.getGroup(n); 609ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 610ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 611ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 612ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public boolean isGroupSummary(Notification n) { 613ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatJellybean.isGroupSummary(n); 614ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 615ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 616ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 617ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getSortKey(Notification n) { 618ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatJellybean.getSortKey(n); 619ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 62047702147608084fec16a50640da54b412c737b9cGriff Hazen } 62147702147608084fec16a50640da54b412c737b9cGriff Hazen 622ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen static class NotificationCompatImplKitKat extends NotificationCompatImplJellybean { 62347702147608084fec16a50640da54b412c737b9cGriff Hazen @Override 62447702147608084fec16a50640da54b412c737b9cGriff Hazen public Notification build(Builder b) { 62547702147608084fec16a50640da54b412c737b9cGriff Hazen NotificationCompatKitKat.Builder builder = new NotificationCompatKitKat.Builder( 62647702147608084fec16a50640da54b412c737b9cGriff Hazen b.mContext, b.mNotification, b.mContentTitle, b.mContentText, b.mContentInfo, 62747702147608084fec16a50640da54b412c737b9cGriff Hazen b.mTickerView, b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon, 62848d8878e34b0d9983166418378125b63faac9aabGriff Hazen b.mProgressMax, b.mProgress, b.mProgressIndeterminate, b.mShowWhen, 62948d8878e34b0d9983166418378125b63faac9aabGriff Hazen b.mUseChronometer, b.mPriority, b.mSubText, b.mLocalOnly, 63048d8878e34b0d9983166418378125b63faac9aabGriff Hazen b.mPeople, b.mExtras, b.mGroupKey, b.mGroupSummary, b.mSortKey); 63147702147608084fec16a50640da54b412c737b9cGriff Hazen addActionsToBuilder(builder, b.mActions); 63247702147608084fec16a50640da54b412c737b9cGriff Hazen addStyleToBuilderJellybean(builder, b.mStyle); 63347702147608084fec16a50640da54b412c737b9cGriff Hazen return builder.build(); 63447702147608084fec16a50640da54b412c737b9cGriff Hazen } 63547702147608084fec16a50640da54b412c737b9cGriff Hazen 63647702147608084fec16a50640da54b412c737b9cGriff Hazen @Override 63747702147608084fec16a50640da54b412c737b9cGriff Hazen public Bundle getExtras(Notification n) { 63847702147608084fec16a50640da54b412c737b9cGriff Hazen return NotificationCompatKitKat.getExtras(n); 63947702147608084fec16a50640da54b412c737b9cGriff Hazen } 64047702147608084fec16a50640da54b412c737b9cGriff Hazen 64147702147608084fec16a50640da54b412c737b9cGriff Hazen @Override 642300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public int getActionCount(Notification n) { 643300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return NotificationCompatKitKat.getActionCount(n); 644300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 645300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 646300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 647300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Action getAction(Notification n, int actionIndex) { 648ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return (Action) NotificationCompatKitKat.getAction(n, actionIndex, Action.FACTORY, 649ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInput.FACTORY); 650300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 651300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 652300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 65347702147608084fec16a50640da54b412c737b9cGriff Hazen public boolean getLocalOnly(Notification n) { 65447702147608084fec16a50640da54b412c737b9cGriff Hazen return NotificationCompatKitKat.getLocalOnly(n); 655b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 656ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 657ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 658ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getGroup(Notification n) { 659ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatKitKat.getGroup(n); 660ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 661ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 662ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 663ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public boolean isGroupSummary(Notification n) { 664ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatKitKat.isGroupSummary(n); 665ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 666ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 667ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 668ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getSortKey(Notification n) { 669ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatKitKat.getSortKey(n); 670ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 671b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 672b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 673ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen static class NotificationCompatImplApi20 extends NotificationCompatImplKitKat { 674b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 675b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public Notification build(Builder b) { 676b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen NotificationCompatApi20.Builder builder = new NotificationCompatApi20.Builder( 677b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen b.mContext, b.mNotification, b.mContentTitle, b.mContentText, b.mContentInfo, 678b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen b.mTickerView, b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon, 67948d8878e34b0d9983166418378125b63faac9aabGriff Hazen b.mProgressMax, b.mProgress, b.mProgressIndeterminate, b.mShowWhen, 68043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen b.mUseChronometer, b.mPriority, b.mSubText, b.mLocalOnly, b.mPeople, b.mExtras, 681ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen b.mGroupKey, b.mGroupSummary, b.mSortKey); 682b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen addActionsToBuilder(builder, b.mActions); 683b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen addStyleToBuilderJellybean(builder, b.mStyle); 684b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return builder.build(); 685b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 686b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 687b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 688ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Action getAction(Notification n, int actionIndex) { 689ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return (Action) NotificationCompatApi20.getAction(n, actionIndex, Action.FACTORY, 690ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInput.FACTORY); 691b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 692b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 693b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen @Override 6942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Action[] getActionsFromParcelableArrayList( 6952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen ArrayList<Parcelable> parcelables) { 6962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (Action[]) NotificationCompatApi20.getActionsFromParcelableArrayList( 6972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen parcelables, Action.FACTORY, RemoteInput.FACTORY); 6982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 6992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 7002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 7012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public ArrayList<Parcelable> getParcelableArrayListForActions( 7022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Action[] actions) { 7032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return NotificationCompatApi20.getParcelableArrayListForActions(actions); 7042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 7052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 7062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 707ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public boolean getLocalOnly(Notification n) { 708ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatApi20.getLocalOnly(n); 709300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 710300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 711300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 712ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getGroup(Notification n) { 713ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatApi20.getGroup(n); 714300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 715300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 716300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen @Override 717ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public boolean isGroupSummary(Notification n) { 718ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatApi20.isGroupSummary(n); 719ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 720ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 721ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 722ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public String getSortKey(Notification n) { 723ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatApi20.getSortKey(n); 724b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 725b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 726b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 72743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen static class NotificationCompatImplApi21 extends NotificationCompatImplApi20 { 72843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen @Override 72943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen public Notification build(Builder b) { 73043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen NotificationCompatApi21.Builder builder = new NotificationCompatApi21.Builder( 73143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen b.mContext, b.mNotification, b.mContentTitle, b.mContentText, b.mContentInfo, 73243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen b.mTickerView, b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon, 73348d8878e34b0d9983166418378125b63faac9aabGriff Hazen b.mProgressMax, b.mProgress, b.mProgressIndeterminate, b.mShowWhen, 73443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen b.mUseChronometer, b.mPriority, b.mSubText, b.mLocalOnly, b.mCategory, 73543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen b.mPeople, b.mExtras, b.mColor, b.mVisibility, b.mPublicVersion, 73643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen b.mGroupKey, b.mGroupSummary, b.mSortKey); 73743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen addActionsToBuilder(builder, b.mActions); 73843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen addStyleToBuilderJellybean(builder, b.mStyle); 73943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen return builder.build(); 74043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen } 74143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen 74243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen @Override 74343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen public String getCategory(Notification notif) { 74443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen return NotificationCompatApi21.getCategory(notif); 74543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen } 74643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen } 74743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen 748b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen private static void addActionsToBuilder(NotificationBuilderWithActions builder, 749b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen ArrayList<Action> actions) { 750b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen for (Action action : actions) { 751ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen builder.addAction(action); 752b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 753b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 754b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 755b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen private static void addStyleToBuilderJellybean(NotificationBuilderWithBuilderAccessor builder, 756b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen Style style) { 757b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen if (style != null) { 758b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen if (style instanceof BigTextStyle) { 759b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen BigTextStyle bigTextStyle = (BigTextStyle) style; 760b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen NotificationCompatJellybean.addBigTextStyle(builder, 761b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigTextStyle.mBigContentTitle, 762b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigTextStyle.mSummaryTextSet, 763b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigTextStyle.mSummaryText, 764b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigTextStyle.mBigText); 765b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } else if (style instanceof InboxStyle) { 766b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen InboxStyle inboxStyle = (InboxStyle) style; 767b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen NotificationCompatJellybean.addInboxStyle(builder, 768b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen inboxStyle.mBigContentTitle, 769b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen inboxStyle.mSummaryTextSet, 770b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen inboxStyle.mSummaryText, 771b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen inboxStyle.mTexts); 772b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } else if (style instanceof BigPictureStyle) { 773b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen BigPictureStyle bigPictureStyle = (BigPictureStyle) style; 774b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen NotificationCompatJellybean.addBigPictureStyle(builder, 775b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigPictureStyle.mBigContentTitle, 776b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigPictureStyle.mSummaryTextSet, 777b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigPictureStyle.mSummaryText, 778b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigPictureStyle.mPicture, 779b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigPictureStyle.mBigLargeIcon, 780b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen bigPictureStyle.mBigLargeIconSet); 781f021758934b35e3b842c6799344531d7ea2969daChris Wren } 782f021758934b35e3b842c6799344531d7ea2969daChris Wren } 783f021758934b35e3b842c6799344531d7ea2969daChris Wren } 784f021758934b35e3b842c6799344531d7ea2969daChris Wren 785c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell static { 786a52784195525cdb1f2bb4d8dde1b8b314f480957Chet Haase if (Build.VERSION.SDK_INT >= 21) { 78775e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney IMPL = new NotificationCompatImplApi21(); 78875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney } else if (Build.VERSION.SDK_INT >= 20) { 789334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren IMPL = new NotificationCompatImplApi20(); 790334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren } else if (Build.VERSION.SDK_INT >= 19) { 79147702147608084fec16a50640da54b412c737b9cGriff Hazen IMPL = new NotificationCompatImplKitKat(); 79247702147608084fec16a50640da54b412c737b9cGriff Hazen } else if (Build.VERSION.SDK_INT >= 16) { 793f021758934b35e3b842c6799344531d7ea2969daChris Wren IMPL = new NotificationCompatImplJellybean(); 794080df8ffb0920eccb300baa39180eb956a000a53Chris Wren } else if (Build.VERSION.SDK_INT >= 14) { 795f021758934b35e3b842c6799344531d7ea2969daChris Wren IMPL = new NotificationCompatImplIceCreamSandwich(); 796f021758934b35e3b842c6799344531d7ea2969daChris Wren } else if (Build.VERSION.SDK_INT >= 11) { 797c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell IMPL = new NotificationCompatImplHoneycomb(); 79829e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren } else if (Build.VERSION.SDK_INT >= 9) { 79929e9b1ca3b576f8d73465f725e0cc623f0d97ffdChris Wren IMPL = new NotificationCompatImplGingerbread(); 800c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } else { 801c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell IMPL = new NotificationCompatImplBase(); 802c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 803c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 804c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 805c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 806884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * Builder class for {@link NotificationCompat} objects. Allows easier control over 807c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * all the flags, as well as help constructing the typical notification layouts. 808884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <p> 809884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * On platform versions that don't offer expanded notifications, methods that depend on 810884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * expanded notifications have no effect. 811884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * </p> 812884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <p> 813884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * For example, action buttons won't appear on platforms prior to Android 4.1. Action 814884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * buttons depend on expanded notifications, which are only available in Android 4.1 815884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * and later. 816884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <p> 817884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * For this reason, you should always ensure that UI controls in a notification are also 818884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * available in an {@link android.app.Activity} in your app, and you should always start that 819884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * {@link android.app.Activity} when users click the notification. To do this, use the 820884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * {@link NotificationCompat.Builder#setContentIntent setContentIntent()} 821884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * method. 822884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * </p> 823884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 824c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 825c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public static class Builder { 82624c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer /** 82724c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer * Maximum length of CharSequences accepted by Builder and friends. 82824c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer * 82924c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer * <p> 83024c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer * Avoids spamming the system with overly large strings such as full e-mails. 83124c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer */ 83224c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer private static final int MAX_CHARSEQUENCE_LENGTH = 5 * 1024; 83324c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer 834c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Context mContext; 835c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 836c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell CharSequence mContentTitle; 837c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell CharSequence mContentText; 838c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell PendingIntent mContentIntent; 839c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell PendingIntent mFullScreenIntent; 840c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell RemoteViews mTickerView; 841c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Bitmap mLargeIcon; 842c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell CharSequence mContentInfo; 843c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell int mNumber; 844f021758934b35e3b842c6799344531d7ea2969daChris Wren int mPriority; 8454c7c4787069fe222c2f74bbaa078debe389ae383Christoph Studer boolean mShowWhen = true; 846f021758934b35e3b842c6799344531d7ea2969daChris Wren boolean mUseChronometer; 847f021758934b35e3b842c6799344531d7ea2969daChris Wren Style mStyle; 848f021758934b35e3b842c6799344531d7ea2969daChris Wren CharSequence mSubText; 849f021758934b35e3b842c6799344531d7ea2969daChris Wren int mProgressMax; 850f021758934b35e3b842c6799344531d7ea2969daChris Wren int mProgress; 851f021758934b35e3b842c6799344531d7ea2969daChris Wren boolean mProgressIndeterminate; 852ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen String mGroupKey; 853ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen boolean mGroupSummary; 854ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen String mSortKey; 855f021758934b35e3b842c6799344531d7ea2969daChris Wren ArrayList<Action> mActions = new ArrayList<Action>(); 856b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen boolean mLocalOnly = false; 857d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock String mCategory; 858ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen Bundle mExtras; 85969a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler int mColor = COLOR_DEFAULT; 860df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler int mVisibility = VISIBILITY_PRIVATE; 861df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler Notification mPublicVersion; 862c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 863c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Notification mNotification = new Notification(); 864334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren public ArrayList<String> mPeople; 865c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 866c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 867c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Constructor. 868c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 869c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Automatically sets the when field to {@link System#currentTimeMillis() 870c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * System.currentTimeMillis()} and the audio stream to the 871c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * {@link Notification#STREAM_DEFAULT}. 872c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 873c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param context A {@link Context} that will be used to construct the 874c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * RemoteViews. The Context will not be held past the lifetime of this 875c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Builder object. 876c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 877c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder(Context context) { 878c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContext = context; 879c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 880c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell // Set defaults to match the defaults of a Notification 881c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.when = System.currentTimeMillis(); 882c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.audioStreamType = Notification.STREAM_DEFAULT; 883f021758934b35e3b842c6799344531d7ea2969daChris Wren mPriority = PRIORITY_DEFAULT; 884334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren mPeople = new ArrayList<String>(); 885c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 886c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 887c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 888c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the time that the event occurred. Notifications in the panel are 889c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * sorted by this time. 890c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 891c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setWhen(long when) { 892c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.when = when; 893c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 894c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 895c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 896c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 89748d8878e34b0d9983166418378125b63faac9aabGriff Hazen * Control whether the timestamp set with {@link #setWhen(long) setWhen} is shown 89848d8878e34b0d9983166418378125b63faac9aabGriff Hazen * in the content view. 89948d8878e34b0d9983166418378125b63faac9aabGriff Hazen */ 90048d8878e34b0d9983166418378125b63faac9aabGriff Hazen public Builder setShowWhen(boolean show) { 90148d8878e34b0d9983166418378125b63faac9aabGriff Hazen mShowWhen = show; 90248d8878e34b0d9983166418378125b63faac9aabGriff Hazen return this; 90348d8878e34b0d9983166418378125b63faac9aabGriff Hazen } 90448d8878e34b0d9983166418378125b63faac9aabGriff Hazen 90548d8878e34b0d9983166418378125b63faac9aabGriff Hazen /** 906f021758934b35e3b842c6799344531d7ea2969daChris Wren * Show the {@link Notification#when} field as a stopwatch. 907884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 908884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * Instead of presenting <code>when</code> as a timestamp, the notification will show an 909f021758934b35e3b842c6799344531d7ea2969daChris Wren * automatically updating display of the minutes and seconds since <code>when</code>. 910f021758934b35e3b842c6799344531d7ea2969daChris Wren * 911f021758934b35e3b842c6799344531d7ea2969daChris Wren * Useful when showing an elapsed time (like an ongoing phone call). 912f021758934b35e3b842c6799344531d7ea2969daChris Wren * 913f021758934b35e3b842c6799344531d7ea2969daChris Wren * @see android.widget.Chronometer 914f021758934b35e3b842c6799344531d7ea2969daChris Wren * @see Notification#when 915f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 916f021758934b35e3b842c6799344531d7ea2969daChris Wren public Builder setUsesChronometer(boolean b) { 917f021758934b35e3b842c6799344531d7ea2969daChris Wren mUseChronometer = b; 918f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 919f021758934b35e3b842c6799344531d7ea2969daChris Wren } 920f021758934b35e3b842c6799344531d7ea2969daChris Wren 921f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 922c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the small icon to use in the notification layouts. Different classes of devices 923c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * may return different sizes. See the UX guidelines for more information on how to 924c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * design these icons. 925c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 926c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param icon A resource ID in the application's package of the drawble to use. 927c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 928c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSmallIcon(int icon) { 929c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.icon = icon; 930c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 931c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 932c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 933c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 934c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * A variant of {@link #setSmallIcon(int) setSmallIcon(int)} that takes an additional 935c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * level parameter for when the icon is a {@link android.graphics.drawable.LevelListDrawable 936c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * LevelListDrawable}. 937c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 938c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param icon A resource ID in the application's package of the drawble to use. 939c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param level The level to use for the icon. 940c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 941c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see android.graphics.drawable.LevelListDrawable 942c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 943c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSmallIcon(int icon, int level) { 944c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.icon = icon; 945c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.iconLevel = level; 946c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 947c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 948c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 949c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 950c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the title (first row) of the notification, in a standard notification. 951c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 952c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentTitle(CharSequence title) { 95324c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mContentTitle = limitCharSequenceLength(title); 954c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 955c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 956c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 957c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 958c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the text (second row) of the notification, in a standard notification. 959c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 960c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentText(CharSequence text) { 96124c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mContentText = limitCharSequenceLength(text); 962c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 963c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 964c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 965c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 966884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * Set the third line of text in the platform notification template. 967f021758934b35e3b842c6799344531d7ea2969daChris Wren * Don't use if you're also using {@link #setProgress(int, int, boolean)}; 968f021758934b35e3b842c6799344531d7ea2969daChris Wren * they occupy the same location in the standard template. 969884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 970884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * If the platform does not provide large-format notifications, this method has no effect. 971884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * The third line of text only appears in expanded view. 972884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 973f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 974f021758934b35e3b842c6799344531d7ea2969daChris Wren public Builder setSubText(CharSequence text) { 97524c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mSubText = limitCharSequenceLength(text); 976f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 977f021758934b35e3b842c6799344531d7ea2969daChris Wren } 978f021758934b35e3b842c6799344531d7ea2969daChris Wren 979f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 980c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the large number at the right-hand side of the notification. This is 981c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * equivalent to setContentInfo, although it might show the number in a different 982c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * font size for readability. 983c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 984c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setNumber(int number) { 985c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNumber = number; 986c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 987c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 988c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 989c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 990c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the large text at the right-hand side of the notification. 991c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 992c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentInfo(CharSequence info) { 99324c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mContentInfo = limitCharSequenceLength(info); 994c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 995c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 996c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 997c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 998c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the progress this notification represents, which may be 999f021758934b35e3b842c6799344531d7ea2969daChris Wren * represented as a {@link android.widget.ProgressBar}. 1000c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1001c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setProgress(int max, int progress, boolean indeterminate) { 1002c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mProgressMax = max; 1003c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mProgress = progress; 1004c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mProgressIndeterminate = indeterminate; 1005c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1006f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1007c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1008c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1009c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Supply a custom RemoteViews to use instead of the standard one. 1010c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1011c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContent(RemoteViews views) { 1012c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.contentView = views; 1013c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1014c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1015c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1016c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1017c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Supply a {@link PendingIntent} to send when the notification is clicked. 1018c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * If you do not supply an intent, you can now add PendingIntents to individual 1019c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * views to be launched when clicked by calling {@link RemoteViews#setOnClickPendingIntent 1020c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * RemoteViews.setOnClickPendingIntent(int,PendingIntent)}. Be sure to 1021c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * read {@link Notification#contentIntent Notification.contentIntent} for 1022c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * how to correctly use this. 1023c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1024c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentIntent(PendingIntent intent) { 1025c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContentIntent = intent; 1026c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1027c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1028c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1029c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1030c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Supply a {@link PendingIntent} to send when the notification is cleared by the user 1031c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * directly from the notification panel. For example, this intent is sent when the user 1032c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * clicks the "Clear all" button, or the individual "X" buttons on notifications. This 1033ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * intent is not sent when the application calls 1034ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link android.app.NotificationManager#cancel NotificationManager.cancel(int)}. 1035c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1036c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setDeleteIntent(PendingIntent intent) { 1037c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.deleteIntent = intent; 1038c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1039c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1040c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1041c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1042c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * An intent to launch instead of posting the notification to the status bar. 1043c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Only for use with extremely high-priority notifications demanding the user's 1044c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <strong>immediate</strong> attention, such as an incoming phone call or 1045c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * alarm clock that the user has explicitly set to a particular time. 1046c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * If this facility is used for something else, please give the user an option 1047c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * to turn it off and use a normal notification, as this can be extremely 1048c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * disruptive. 1049c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 1050e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * <p> 1051e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * On some platforms, the system UI may choose to display a heads-up notification, 1052e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * instead of launching this intent, while the user is using the device. 1053e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * </p> 1054e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * 1055c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param intent The pending intent to launch. 1056c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param highPriority Passing true will cause this notification to be sent 1057c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * even if other notifications are suppressed. 1058c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1059c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) { 1060c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mFullScreenIntent = intent; 1061c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(FLAG_HIGH_PRIORITY, highPriority); 1062c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1063c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1064c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1065c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1066c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the text that is displayed in the status bar when the notification first 1067c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * arrives. 1068c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1069c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setTicker(CharSequence tickerText) { 107024c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mNotification.tickerText = limitCharSequenceLength(tickerText); 1071c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1072c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1073c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1074c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1075c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the text that is displayed in the status bar when the notification first 1076c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * arrives, and also a RemoteViews object that may be displayed instead on some 1077c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * devices. 1078c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1079c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setTicker(CharSequence tickerText, RemoteViews views) { 108024c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mNotification.tickerText = limitCharSequenceLength(tickerText); 1081c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mTickerView = views; 1082c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1083c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1084c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1085c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1086c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the large icon that is shown in the ticker and notification. 1087c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1088c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setLargeIcon(Bitmap icon) { 1089c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mLargeIcon = icon; 1090c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1091c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1092c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1093c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1094c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the sound to play. It will play on the default stream. 1095e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * 1096e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * <p> 1097e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * On some platforms, a notification that is noisy is more likely to be presented 1098e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * as a heads-up notification. 1099e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * </p> 1100c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1101c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSound(Uri sound) { 1102c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.sound = sound; 1103c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.audioStreamType = Notification.STREAM_DEFAULT; 1104c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1105c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1106c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1107c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1108c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the sound to play. It will play on the stream you supply. 1109c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 1110e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * <p> 1111e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * On some platforms, a notification that is noisy is more likely to be presented 1112e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * as a heads-up notification. 1113e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * </p> 1114e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * 1115fe3b5bac4901a4bb8cf51c09fe4910b02388818aGriff Hazen * @see Notification#STREAM_DEFAULT 1116c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see AudioManager for the <code>STREAM_</code> constants. 1117c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1118c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSound(Uri sound, int streamType) { 1119c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.sound = sound; 1120c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.audioStreamType = streamType; 1121c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1122c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1123c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1124c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1125c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the vibration pattern to use. 1126c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 1127e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * <p> 1128e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * On some platforms, a notification that vibrates is more likely to be presented 1129e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * as a heads-up notification. 1130e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * </p> 1131e616137cc03e4b4be450cbaa4a9c29f2b77d991aChris Wren * 1132c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see android.os.Vibrator for a discussion of the <code>pattern</code> 1133c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * parameter. 1134c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1135c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setVibrate(long[] pattern) { 1136c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.vibrate = pattern; 1137c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1138c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1139c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1140c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1141c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the argb value that you would like the LED on the device to blnk, as well as the 1142c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * rate. The rate is specified in terms of the number of milliseconds to be on 1143c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * and then the number of milliseconds to be off. 1144c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1145c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setLights(int argb, int onMs, int offMs) { 1146c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.ledARGB = argb; 1147c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.ledOnMS = onMs; 1148c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.ledOffMS = offMs; 1149c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell boolean showLights = mNotification.ledOnMS != 0 && mNotification.ledOffMS != 0; 1150c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags = (mNotification.flags & ~Notification.FLAG_SHOW_LIGHTS) | 1151c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell (showLights ? Notification.FLAG_SHOW_LIGHTS : 0); 1152c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1153c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1154c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1155c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1156c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set whether this is an ongoing notification. 1157c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 1158c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p>Ongoing notifications differ from regular notifications in the following ways: 1159c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <ul> 1160c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <li>Ongoing notifications are sorted above the regular notifications in the 1161c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * notification panel.</li> 1162c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <li>Ongoing notifications do not have an 'X' close button, and are not affected 1163c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * by the "Clear all" button. 1164c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * </ul> 1165c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1166c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setOngoing(boolean ongoing) { 1167c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(Notification.FLAG_ONGOING_EVENT, ongoing); 1168c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1169c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1170c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1171c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1172c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set this flag if you would only like the sound, vibrate 1173c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * and ticker to be played if the notification is not already showing. 1174c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1175c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setOnlyAlertOnce(boolean onlyAlertOnce) { 1176c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(Notification.FLAG_ONLY_ALERT_ONCE, onlyAlertOnce); 1177c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1178c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1179c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1180c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1181c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Setting this flag will make it so the notification is automatically 1182c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * canceled when the user clicks it in the panel. The PendingIntent 1183c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * set with {@link #setDeleteIntent} will be broadcast when the notification 1184c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * is canceled. 1185c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1186c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setAutoCancel(boolean autoCancel) { 1187c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(Notification.FLAG_AUTO_CANCEL, autoCancel); 1188c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1189c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1190c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1191c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1192b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * Set whether or not this notification is only relevant to the current device. 1193b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * 1194b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * <p>Some notifications can be bridged to other devices for remote display. 1195b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * This hint can be set to recommend this notification not be bridged. 1196b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen */ 1197b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public Builder setLocalOnly(boolean b) { 1198b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen mLocalOnly = b; 1199b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return this; 1200b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 1201b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 1202b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen /** 1203d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock * Set the notification category. 1204d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock * 1205d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock * <p>Must be one of the predefined notification categories (see the <code>CATEGORY_*</code> 1206d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock * constants in {@link Notification}) that best describes this notification. 1207d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock * May be used by the system for ranking and filtering. 1208d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock */ 1209d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock public Builder setCategory(String category) { 1210d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock mCategory = category; 1211d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock return this; 1212d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock } 1213d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock 1214d3f7b5bb2422645d85b0e0131ff1c323f38bfed0John Spurlock /** 1215c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the default notification options that will be used. 1216c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p> 1217c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * The value should be one or more of the following fields combined with 1218c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * bitwise-or: 1219c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * {@link Notification#DEFAULT_SOUND}, {@link Notification#DEFAULT_VIBRATE}, 1220c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * {@link Notification#DEFAULT_LIGHTS}. 1221c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p> 1222c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * For all default values, use {@link Notification#DEFAULT_ALL}. 1223c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1224c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setDefaults(int defaults) { 1225c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.defaults = defaults; 1226c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell if ((defaults & Notification.DEFAULT_LIGHTS) != 0) { 1227c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags |= Notification.FLAG_SHOW_LIGHTS; 1228c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1229c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 1230c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1231c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1232c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell private void setFlag(int mask, boolean value) { 1233c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell if (value) { 1234c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags |= mask; 1235c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } else { 1236c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags &= ~mask; 1237c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1238c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 1239c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 1240c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 1241f021758934b35e3b842c6799344531d7ea2969daChris Wren * Set the relative priority for this notification. 1242884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 1243f021758934b35e3b842c6799344531d7ea2969daChris Wren * Priority is an indication of how much of the user's 1244f021758934b35e3b842c6799344531d7ea2969daChris Wren * valuable attention should be consumed by this 1245f021758934b35e3b842c6799344531d7ea2969daChris Wren * notification. Low-priority notifications may be hidden from 1246f021758934b35e3b842c6799344531d7ea2969daChris Wren * the user in certain situations, while the user might be 1247884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * interrupted for a higher-priority notification. 1248884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * The system sets a notification's priority based on various factors including the 1249884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * setPriority value. The effect may differ slightly on different platforms. 12507c94c9ad26555427345c6c540bf761bf73389016Andrew Solovay * 12517c94c9ad26555427345c6c540bf761bf73389016Andrew Solovay * @param pri Relative priority for this notification. Must be one of 12527c94c9ad26555427345c6c540bf761bf73389016Andrew Solovay * the priority constants defined by {@link NotificationCompat}. 12537c94c9ad26555427345c6c540bf761bf73389016Andrew Solovay * Acceptable values range from {@link 12547c94c9ad26555427345c6c540bf761bf73389016Andrew Solovay * NotificationCompat#PRIORITY_MIN} (-2) to {@link 12557c94c9ad26555427345c6c540bf761bf73389016Andrew Solovay * NotificationCompat#PRIORITY_MAX} (2). 1256f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1257f021758934b35e3b842c6799344531d7ea2969daChris Wren public Builder setPriority(int pri) { 1258f021758934b35e3b842c6799344531d7ea2969daChris Wren mPriority = pri; 1259f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1260f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1261f021758934b35e3b842c6799344531d7ea2969daChris Wren 1262f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1263334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren * Add a person that is relevant to this notification. 1264334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren * 126589e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * <P> 126689e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * Depending on user preferences, this annotation may allow the notification to pass 126789e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * through interruption filters, and to appear more prominently in the user interface. 126889e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * </P> 126989e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * 127089e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * <P> 127189e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * The person should be specified by the {@code String} representation of a 127289e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}. 127389e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * </P> 127489e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * 127589e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * <P>The system will also attempt to resolve {@code mailto:} and {@code tel:} schema 127689e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * URIs. The path part of these URIs must exist in the contacts database, in the 127789e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * appropriate column, or the reference will be discarded as invalid. Telephone schema 127889e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * URIs will be resolved by {@link android.provider.ContactsContract.PhoneLookup}. 127989e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * </P> 128089e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * 128189e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren * @param uri A URI for the person. 1282334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren * @see Notification#EXTRA_PEOPLE 1283334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren */ 128489e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren public Builder addPerson(String uri) { 128589e6774cdb200acc2dd5f4c9022a7e1aeeb05bceChris Wren mPeople.add(uri); 1286334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren return this; 1287334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren } 1288334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren 1289334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren /** 1290ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Set this notification to be part of a group of notifications sharing the same key. 1291ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Grouped notifications may display in a cluster or stack on devices which 1292ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * support such rendering. 1293ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * 1294ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * <p>To make this notification the summary for its group, also call 1295ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link #setGroupSummary}. A sort order can be specified for group members by using 1296ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link #setSortKey}. 1297ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @param groupKey The group key of the group. 1298ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @return this object for method chaining 1299ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 1300ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Builder setGroup(String groupKey) { 1301ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mGroupKey = groupKey; 1302ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return this; 1303ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1304ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1305ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1306ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Set this notification to be the group summary for a group of notifications. 1307ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Grouped notifications may display in a cluster or stack on devices which 1308ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * support such rendering. Requires a group key also be set using {@link #setGroup}. 1309ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @param isGroupSummary Whether this notification should be a group summary. 1310ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @return this object for method chaining 1311ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 1312ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Builder setGroupSummary(boolean isGroupSummary) { 1313ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mGroupSummary = isGroupSummary; 1314ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return this; 1315ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1316ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1317ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1318ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Set a sort key that orders this notification among other notifications from the 1319ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * same package. This can be useful if an external sort was already applied and an app 1320ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * would like to preserve this. Notifications will be sorted lexicographically using this 1321ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * value, although providing different priorities in addition to providing sort key may 1322ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * cause this value to be ignored. 1323ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * 1324ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * <p>This sort key can also be used to order members of a notification group. See 1325ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link Builder#setGroup}. 1326ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * 1327ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @see String#compareTo(String) 1328ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 1329ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Builder setSortKey(String sortKey) { 1330ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mSortKey = sortKey; 1331ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return this; 1332ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1333ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1334ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1335ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * Merge additional metadata into this notification. 1336ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1337ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * <p>Values within the Bundle will replace existing extras values in this Builder. 1338ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1339ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * @see Notification#extras 1340ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen */ 1341300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Builder addExtras(Bundle extras) { 1342300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen if (extras != null) { 1343300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen if (mExtras == null) { 1344300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mExtras = new Bundle(extras); 1345300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } else { 1346300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mExtras.putAll(extras); 1347300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1348ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen } 1349ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen return this; 1350ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen } 1351ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen 1352ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen /** 1353ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * Set metadata for this notification. 1354ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1355ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * <p>A reference to the Bundle is held for the lifetime of this Builder, and the Bundle's 1356ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * current contents are copied into the Notification each time {@link #build()} is 1357ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * called. 1358ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1359ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * <p>Replaces any existing extras values with those from the provided Bundle. 1360ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * Use {@link #addExtras} to merge in metadata instead. 1361ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1362ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * @see Notification#extras 1363ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen */ 1364300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Builder setExtras(Bundle extras) { 1365300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mExtras = extras; 1366ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen return this; 1367ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen } 1368ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen 1369ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen /** 1370ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * Get the current metadata Bundle used by this notification Builder. 1371ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1372ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * <p>The returned Bundle is shared with this Builder. 1373ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1374ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * <p>The current contents of this Bundle are copied into the Notification each time 1375ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * {@link #build()} is called. 1376ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * 1377ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen * @see Notification#extras 1378ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen */ 1379ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen public Bundle getExtras() { 1380ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen if (mExtras == null) { 1381ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen mExtras = new Bundle(); 1382ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen } 1383ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen return mExtras; 1384ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen } 1385ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen 1386ab78e9b2a147c8de7b5cf231b97aad9d8c4f106cGriff Hazen /** 1387f021758934b35e3b842c6799344531d7ea2969daChris Wren * Add an action to this notification. Actions are typically displayed by 1388f021758934b35e3b842c6799344531d7ea2969daChris Wren * the system as a button adjacent to the notification content. 1389884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1390884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * Action buttons won't appear on platforms prior to Android 4.1. Action 1391884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * buttons depend on expanded notifications, which are only available in Android 4.1 1392884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * and later. To ensure that an action button's functionality is always available, first 1393884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * implement the functionality in the {@link android.app.Activity} that starts when a user 1394884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * clicks the notification (see {@link #setContentIntent setContentIntent()}), and then 1395884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * enhance the notification by implementing the same functionality with 1396884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * {@link #addAction addAction()}. 1397f021758934b35e3b842c6799344531d7ea2969daChris Wren * 1398f021758934b35e3b842c6799344531d7ea2969daChris Wren * @param icon Resource ID of a drawable that represents the action. 1399f021758934b35e3b842c6799344531d7ea2969daChris Wren * @param title Text describing the action. 1400884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * @param intent {@link android.app.PendingIntent} to be fired when the action is invoked. 1401f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1402f021758934b35e3b842c6799344531d7ea2969daChris Wren public Builder addAction(int icon, CharSequence title, PendingIntent intent) { 1403f021758934b35e3b842c6799344531d7ea2969daChris Wren mActions.add(new Action(icon, title, intent)); 1404f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1405f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1406f021758934b35e3b842c6799344531d7ea2969daChris Wren 1407f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1408300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Add an action to this notification. Actions are typically displayed by 1409300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * the system as a button adjacent to the notification content. 1410300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * <br> 1411300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Action buttons won't appear on platforms prior to Android 4.1. Action 1412300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * buttons depend on expanded notifications, which are only available in Android 4.1 1413300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * and later. To ensure that an action button's functionality is always available, first 1414300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * implement the functionality in the {@link android.app.Activity} that starts when a user 1415300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * clicks the notification (see {@link #setContentIntent setContentIntent()}), and then 1416300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * enhance the notification by implementing the same functionality with 1417300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * {@link #addAction addAction()}. 1418300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * 1419300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param action The action to add. 1420300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1421300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Builder addAction(Action action) { 1422300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mActions.add(action); 1423300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return this; 1424300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1425300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1426300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1427f021758934b35e3b842c6799344531d7ea2969daChris Wren * Add a rich notification style to be applied at build time. 1428884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1429884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * If the platform does not provide rich notification styles, this method has no effect. The 1430884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * user will always see the normal notification style. 1431f021758934b35e3b842c6799344531d7ea2969daChris Wren * 1432f021758934b35e3b842c6799344531d7ea2969daChris Wren * @param style Object responsible for modifying the notification style. 1433f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1434f021758934b35e3b842c6799344531d7ea2969daChris Wren public Builder setStyle(Style style) { 1435f021758934b35e3b842c6799344531d7ea2969daChris Wren if (mStyle != style) { 1436f021758934b35e3b842c6799344531d7ea2969daChris Wren mStyle = style; 1437f021758934b35e3b842c6799344531d7ea2969daChris Wren if (mStyle != null) { 1438f021758934b35e3b842c6799344531d7ea2969daChris Wren mStyle.setBuilder(this); 1439f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1440f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1441f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1442f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1443f021758934b35e3b842c6799344531d7ea2969daChris Wren 1444f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 144569a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * Sets {@link Notification#color}. 144669a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * 144769a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * @param argb The accent color to use 144869a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * 144969a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler * @return The same Builder. 145069a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler */ 145169a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler public Builder setColor(int argb) { 145269a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler mColor = argb; 145369a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler return this; 145469a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler } 145569a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler 145669a58d36f6ed8ec4d076534556aba2f93d00254eDan Sandler /** 1457df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * Sets {@link Notification#visibility}. 1458df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * 1459df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * @param visibility One of {@link Notification#VISIBILITY_PRIVATE} (the default), 1460df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * {@link Notification#VISIBILITY_PUBLIC}, or 1461df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * {@link Notification#VISIBILITY_SECRET}. 1462df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler */ 1463df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler public Builder setVisibility(int visibility) { 1464df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler mVisibility = visibility; 1465df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler return this; 1466df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler } 1467df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler 1468df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler /** 1469df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * Supply a replacement Notification whose contents should be shown in insecure contexts 1470df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * (i.e. atop the secure lockscreen). See {@link Notification#visibility} and 1471df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * {@link #VISIBILITY_PUBLIC}. 1472df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * 1473df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * @param n A replacement notification, presumably with some or all info redacted. 1474df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler * @return The same Builder. 1475df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler */ 1476df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler public Builder setPublicVersion(Notification n) { 1477df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler mPublicVersion = n; 1478df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler return this; 1479df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler } 1480df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler 1481df2eaed1544ecba7a4a258061e58aa93692d4a6aDan Sandler /** 1482ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Apply an extender to this notification builder. Extenders may be used to add 1483ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * metadata or change options on this builder. 1484ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 14852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Builder extend(Extender extender) { 14862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen extender.extend(this); 1487ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return this; 1488ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1489ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1490ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1491f021758934b35e3b842c6799344531d7ea2969daChris Wren * @deprecated Use {@link #build()} instead. 1492f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1493f021758934b35e3b842c6799344531d7ea2969daChris Wren @Deprecated 1494f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification getNotification() { 1495fe3b5bac4901a4bb8cf51c09fe4910b02388818aGriff Hazen return IMPL.build(this); 1496f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1497f021758934b35e3b842c6799344531d7ea2969daChris Wren 1498f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1499c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Combine all of the options that have been set and return a new {@link Notification} 1500c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * object. 1501c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 1502f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build() { 1503fe3b5bac4901a4bb8cf51c09fe4910b02388818aGriff Hazen return IMPL.build(this); 1504f021758934b35e3b842c6799344531d7ea2969daChris Wren } 150524c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer 150624c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer protected static CharSequence limitCharSequenceLength(CharSequence cs) { 150724c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer if (cs == null) return cs; 150824c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer if (cs.length() > MAX_CHARSEQUENCE_LENGTH) { 150924c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer cs = cs.subSequence(0, MAX_CHARSEQUENCE_LENGTH); 151024c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer } 151124c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer return cs; 151224c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer } 1513f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1514f021758934b35e3b842c6799344531d7ea2969daChris Wren 1515f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1516f021758934b35e3b842c6799344531d7ea2969daChris Wren * An object that can apply a rich notification style to a {@link Notification.Builder} 1517f021758934b35e3b842c6799344531d7ea2969daChris Wren * object. 1518884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1519884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * If the platform does not provide rich notification styles, methods in this class have no 1520884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * effect. 1521f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1522fe3b5bac4901a4bb8cf51c09fe4910b02388818aGriff Hazen public static abstract class Style { 1523f021758934b35e3b842c6799344531d7ea2969daChris Wren Builder mBuilder; 1524f021758934b35e3b842c6799344531d7ea2969daChris Wren CharSequence mBigContentTitle; 1525f021758934b35e3b842c6799344531d7ea2969daChris Wren CharSequence mSummaryText; 1526f021758934b35e3b842c6799344531d7ea2969daChris Wren boolean mSummaryTextSet = false; 1527f021758934b35e3b842c6799344531d7ea2969daChris Wren 1528f021758934b35e3b842c6799344531d7ea2969daChris Wren public void setBuilder(Builder builder) { 1529f021758934b35e3b842c6799344531d7ea2969daChris Wren if (mBuilder != builder) { 1530f021758934b35e3b842c6799344531d7ea2969daChris Wren mBuilder = builder; 1531f021758934b35e3b842c6799344531d7ea2969daChris Wren if (mBuilder != null) { 1532f021758934b35e3b842c6799344531d7ea2969daChris Wren mBuilder.setStyle(this); 1533f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1534f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1535f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1536f021758934b35e3b842c6799344531d7ea2969daChris Wren 1537f021758934b35e3b842c6799344531d7ea2969daChris Wren public Notification build() { 1538f021758934b35e3b842c6799344531d7ea2969daChris Wren Notification notification = null; 1539f021758934b35e3b842c6799344531d7ea2969daChris Wren if (mBuilder != null) { 1540f021758934b35e3b842c6799344531d7ea2969daChris Wren notification = mBuilder.build(); 1541884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin } 1542f021758934b35e3b842c6799344531d7ea2969daChris Wren return notification; 1543f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1544f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1545f021758934b35e3b842c6799344531d7ea2969daChris Wren 1546f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1547f021758934b35e3b842c6799344531d7ea2969daChris Wren * Helper class for generating large-format notifications that include a large image attachment. 1548884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1549884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * If the platform does not provide large-format notifications, this method has no effect. The 1550884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * user will always see the normal notification view. 1551884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1552f021758934b35e3b842c6799344531d7ea2969daChris Wren * This class is a "rebuilder": It attaches to a Builder object and modifies its behavior, like so: 1553f021758934b35e3b842c6799344531d7ea2969daChris Wren * <pre class="prettyprint"> 155477b88e3651ede1a5d45fb4c19f34b2f78d67f33fRobert Ly * Notification notif = new Notification.Builder(mContext) 1555f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentTitle("New photo from " + sender.toString()) 1556f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentText(subject) 1557f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setSmallIcon(R.drawable.new_post) 1558f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setLargeIcon(aBitmap) 1559f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setStyle(new Notification.BigPictureStyle() 1560f021758934b35e3b842c6799344531d7ea2969daChris Wren * .bigPicture(aBigBitmap)) 1561f021758934b35e3b842c6799344531d7ea2969daChris Wren * .build(); 1562f021758934b35e3b842c6799344531d7ea2969daChris Wren * </pre> 1563884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 1564f021758934b35e3b842c6799344531d7ea2969daChris Wren * @see Notification#bigContentView 1565f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1566f021758934b35e3b842c6799344531d7ea2969daChris Wren public static class BigPictureStyle extends Style { 1567f021758934b35e3b842c6799344531d7ea2969daChris Wren Bitmap mPicture; 156849714d665f839c4804a17eea129092f8b472926dRoman Nurik Bitmap mBigLargeIcon; 156949714d665f839c4804a17eea129092f8b472926dRoman Nurik boolean mBigLargeIconSet; 1570f021758934b35e3b842c6799344531d7ea2969daChris Wren 1571f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigPictureStyle() { 1572f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1573f021758934b35e3b842c6799344531d7ea2969daChris Wren 1574f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigPictureStyle(Builder builder) { 1575f021758934b35e3b842c6799344531d7ea2969daChris Wren setBuilder(builder); 1576f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1577f021758934b35e3b842c6799344531d7ea2969daChris Wren 1578f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1579f021758934b35e3b842c6799344531d7ea2969daChris Wren * Overrides ContentTitle in the big form of the template. 1580f021758934b35e3b842c6799344531d7ea2969daChris Wren * This defaults to the value passed to setContentTitle(). 1581f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1582f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigPictureStyle setBigContentTitle(CharSequence title) { 158324c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mBigContentTitle = Builder.limitCharSequenceLength(title); 1584f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1585f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1586f021758934b35e3b842c6799344531d7ea2969daChris Wren 1587f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1588f021758934b35e3b842c6799344531d7ea2969daChris Wren * Set the first line of text after the detail section in the big form of the template. 1589f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1590f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigPictureStyle setSummaryText(CharSequence cs) { 159124c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mSummaryText = Builder.limitCharSequenceLength(cs); 1592f021758934b35e3b842c6799344531d7ea2969daChris Wren mSummaryTextSet = true; 1593f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1594f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1595f021758934b35e3b842c6799344531d7ea2969daChris Wren 1596b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren /** 1597b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren * Provide the bitmap to be used as the payload for the BigPicture notification. 1598b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren */ 1599f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigPictureStyle bigPicture(Bitmap b) { 1600f021758934b35e3b842c6799344531d7ea2969daChris Wren mPicture = b; 1601f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1602f021758934b35e3b842c6799344531d7ea2969daChris Wren } 160349714d665f839c4804a17eea129092f8b472926dRoman Nurik 160449714d665f839c4804a17eea129092f8b472926dRoman Nurik /** 160549714d665f839c4804a17eea129092f8b472926dRoman Nurik * Override the large icon when the big notification is shown. 160649714d665f839c4804a17eea129092f8b472926dRoman Nurik */ 160749714d665f839c4804a17eea129092f8b472926dRoman Nurik public BigPictureStyle bigLargeIcon(Bitmap b) { 160849714d665f839c4804a17eea129092f8b472926dRoman Nurik mBigLargeIcon = b; 160949714d665f839c4804a17eea129092f8b472926dRoman Nurik mBigLargeIconSet = true; 161049714d665f839c4804a17eea129092f8b472926dRoman Nurik return this; 161149714d665f839c4804a17eea129092f8b472926dRoman Nurik } 1612f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1613f021758934b35e3b842c6799344531d7ea2969daChris Wren 1614f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1615f021758934b35e3b842c6799344531d7ea2969daChris Wren * Helper class for generating large-format notifications that include a lot of text. 1616884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 1617884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1618884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * If the platform does not provide large-format notifications, this method has no effect. The 1619884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * user will always see the normal notification view. 1620884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1621f021758934b35e3b842c6799344531d7ea2969daChris Wren * This class is a "rebuilder": It attaches to a Builder object and modifies its behavior, like so: 1622f021758934b35e3b842c6799344531d7ea2969daChris Wren * <pre class="prettyprint"> 162377b88e3651ede1a5d45fb4c19f34b2f78d67f33fRobert Ly * Notification notif = new Notification.Builder(mContext) 1624f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentTitle("New mail from " + sender.toString()) 1625f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentText(subject) 1626f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setSmallIcon(R.drawable.new_mail) 1627f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setLargeIcon(aBitmap) 1628f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setStyle(new Notification.BigTextStyle() 1629f021758934b35e3b842c6799344531d7ea2969daChris Wren * .bigText(aVeryLongString)) 1630f021758934b35e3b842c6799344531d7ea2969daChris Wren * .build(); 1631f021758934b35e3b842c6799344531d7ea2969daChris Wren * </pre> 1632884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 1633f021758934b35e3b842c6799344531d7ea2969daChris Wren * @see Notification#bigContentView 1634f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1635f021758934b35e3b842c6799344531d7ea2969daChris Wren public static class BigTextStyle extends Style { 1636f021758934b35e3b842c6799344531d7ea2969daChris Wren CharSequence mBigText; 1637f021758934b35e3b842c6799344531d7ea2969daChris Wren 1638f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigTextStyle() { 1639f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1640f021758934b35e3b842c6799344531d7ea2969daChris Wren 1641f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigTextStyle(Builder builder) { 1642f021758934b35e3b842c6799344531d7ea2969daChris Wren setBuilder(builder); 1643f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1644f021758934b35e3b842c6799344531d7ea2969daChris Wren 1645f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1646f021758934b35e3b842c6799344531d7ea2969daChris Wren * Overrides ContentTitle in the big form of the template. 1647f021758934b35e3b842c6799344531d7ea2969daChris Wren * This defaults to the value passed to setContentTitle(). 1648f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1649f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigTextStyle setBigContentTitle(CharSequence title) { 165024c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mBigContentTitle = Builder.limitCharSequenceLength(title); 1651f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1652f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1653f021758934b35e3b842c6799344531d7ea2969daChris Wren 1654f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1655f021758934b35e3b842c6799344531d7ea2969daChris Wren * Set the first line of text after the detail section in the big form of the template. 1656f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1657f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigTextStyle setSummaryText(CharSequence cs) { 165824c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mSummaryText = Builder.limitCharSequenceLength(cs); 1659f021758934b35e3b842c6799344531d7ea2969daChris Wren mSummaryTextSet = true; 1660f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1661f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1662f021758934b35e3b842c6799344531d7ea2969daChris Wren 1663b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren /** 1664b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren * Provide the longer text to be displayed in the big form of the 1665b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren * template in place of the content text. 1666b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren */ 1667f021758934b35e3b842c6799344531d7ea2969daChris Wren public BigTextStyle bigText(CharSequence cs) { 166824c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mBigText = Builder.limitCharSequenceLength(cs); 1669f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1670f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1671f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1672f021758934b35e3b842c6799344531d7ea2969daChris Wren 1673f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1674f021758934b35e3b842c6799344531d7ea2969daChris Wren * Helper class for generating large-format notifications that include a list of (up to 5) strings. 1675884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 1676884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1677884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * If the platform does not provide large-format notifications, this method has no effect. The 1678884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * user will always see the normal notification view. 1679884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * <br> 1680f021758934b35e3b842c6799344531d7ea2969daChris Wren * This class is a "rebuilder": It attaches to a Builder object and modifies its behavior, like so: 1681f021758934b35e3b842c6799344531d7ea2969daChris Wren * <pre class="prettyprint"> 1682f021758934b35e3b842c6799344531d7ea2969daChris Wren * Notification noti = new Notification.Builder() 1683f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentTitle("5 New mails from " + sender.toString()) 1684f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentText(subject) 1685f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setSmallIcon(R.drawable.new_mail) 1686f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setLargeIcon(aBitmap) 1687f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setStyle(new Notification.InboxStyle() 1688f021758934b35e3b842c6799344531d7ea2969daChris Wren * .addLine(str1) 1689f021758934b35e3b842c6799344531d7ea2969daChris Wren * .addLine(str2) 1690f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setContentTitle("") 1691f021758934b35e3b842c6799344531d7ea2969daChris Wren * .setSummaryText("+3 more")) 1692f021758934b35e3b842c6799344531d7ea2969daChris Wren * .build(); 1693f021758934b35e3b842c6799344531d7ea2969daChris Wren * </pre> 1694884c97b0015a71381bc2a534438b2a0e7e7abd6aJoe Malin * 1695f021758934b35e3b842c6799344531d7ea2969daChris Wren * @see Notification#bigContentView 1696f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1697f021758934b35e3b842c6799344531d7ea2969daChris Wren public static class InboxStyle extends Style { 1698f021758934b35e3b842c6799344531d7ea2969daChris Wren ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(); 1699f021758934b35e3b842c6799344531d7ea2969daChris Wren 1700f021758934b35e3b842c6799344531d7ea2969daChris Wren public InboxStyle() { 1701f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1702f021758934b35e3b842c6799344531d7ea2969daChris Wren 1703f021758934b35e3b842c6799344531d7ea2969daChris Wren public InboxStyle(Builder builder) { 1704f021758934b35e3b842c6799344531d7ea2969daChris Wren setBuilder(builder); 1705f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1706f021758934b35e3b842c6799344531d7ea2969daChris Wren 1707f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1708f021758934b35e3b842c6799344531d7ea2969daChris Wren * Overrides ContentTitle in the big form of the template. 1709f021758934b35e3b842c6799344531d7ea2969daChris Wren * This defaults to the value passed to setContentTitle(). 1710f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1711f021758934b35e3b842c6799344531d7ea2969daChris Wren public InboxStyle setBigContentTitle(CharSequence title) { 171224c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mBigContentTitle = Builder.limitCharSequenceLength(title); 1713f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1714f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1715f021758934b35e3b842c6799344531d7ea2969daChris Wren 1716f021758934b35e3b842c6799344531d7ea2969daChris Wren /** 1717f021758934b35e3b842c6799344531d7ea2969daChris Wren * Set the first line of text after the detail section in the big form of the template. 1718f021758934b35e3b842c6799344531d7ea2969daChris Wren */ 1719f021758934b35e3b842c6799344531d7ea2969daChris Wren public InboxStyle setSummaryText(CharSequence cs) { 172024c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mSummaryText = Builder.limitCharSequenceLength(cs); 1721f021758934b35e3b842c6799344531d7ea2969daChris Wren mSummaryTextSet = true; 1722f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1723f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1724f021758934b35e3b842c6799344531d7ea2969daChris Wren 1725b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren /** 1726b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren * Append a line to the digest section of the Inbox notification. 1727b41a213761ff07de2fcfdaf16790fdcca1a1ee1bChris Wren */ 1728f021758934b35e3b842c6799344531d7ea2969daChris Wren public InboxStyle addLine(CharSequence cs) { 172924c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mTexts.add(Builder.limitCharSequenceLength(cs)); 1730f021758934b35e3b842c6799344531d7ea2969daChris Wren return this; 1731f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1732f021758934b35e3b842c6799344531d7ea2969daChris Wren } 1733f021758934b35e3b842c6799344531d7ea2969daChris Wren 1734300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1735300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Structure to encapsulate a named action that can be shown as part of this notification. 1736300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * It must include an icon, a label, and a {@link PendingIntent} to be fired when the action is 1737300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * selected by the user. Action buttons won't appear on platforms prior to Android 4.1. 1738300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * <p> 1739300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Apps should use {@link NotificationCompat.Builder#addAction(int, CharSequence, PendingIntent)} 1740300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * or {@link NotificationCompat.Builder#addAction(NotificationCompat.Action)} 1741300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * to attach actions. 1742300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1743ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static class Action extends NotificationCompatBase.Action { 1744300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private final Bundle mExtras; 17452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private final RemoteInput[] mRemoteInputs; 1746300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1747300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1748300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Small icon representing the action. 1749300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1750f021758934b35e3b842c6799344531d7ea2969daChris Wren public int icon; 1751300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1752300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Title of the action. 1753300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1754f021758934b35e3b842c6799344531d7ea2969daChris Wren public CharSequence title; 1755300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1756300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Intent to send when the user invokes this action. May be null, in which case the action 1757300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * may be rendered in a disabled presentation. 1758300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1759f021758934b35e3b842c6799344531d7ea2969daChris Wren public PendingIntent actionIntent; 1760f021758934b35e3b842c6799344531d7ea2969daChris Wren 1761300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Action(int icon, CharSequence title, PendingIntent intent) { 1762ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen this(icon, title, intent, new Bundle(), null); 1763300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1764300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1765ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private Action(int icon, CharSequence title, PendingIntent intent, Bundle extras, 1766ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInput[] remoteInputs) { 1767300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen this.icon = icon; 176824c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer this.title = NotificationCompat.Builder.limitCharSequenceLength(title); 1769300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen this.actionIntent = intent; 1770300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen this.mExtras = extras != null ? extras : new Bundle(); 1771ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen this.mRemoteInputs = remoteInputs; 1772ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1773ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1774ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 1775ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen protected int getIcon() { 1776ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return icon; 1777ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1778ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1779ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 1780ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen protected CharSequence getTitle() { 1781ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return title; 1782ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1783ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1784ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 1785ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen protected PendingIntent getActionIntent() { 1786ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return actionIntent; 1787300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1788300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1789300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1790300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Get additional metadata carried around with this Action. 1791300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1792300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Bundle getExtras() { 1793300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return mExtras; 1794300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1795300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1796300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1797ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Get the list of inputs to be collected from the user when this action is sent. 1798ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * May return null if no remote inputs were added. 1799ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 1800ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public RemoteInput[] getRemoteInputs() { 1801ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return mRemoteInputs; 1802ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1803ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1804ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1805300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Builder class for {@link Action} objects. 1806300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1807ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final class Builder { 1808300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private final int mIcon; 1809300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private final CharSequence mTitle; 1810300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private final PendingIntent mIntent; 1811300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private final Bundle mExtras; 1812ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private ArrayList<RemoteInput> mRemoteInputs; 1813300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1814300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1815300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Construct a new builder for {@link Action} object. 1816300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param icon icon to show for this action 1817300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param title the title of the action 1818300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param intent the {@link PendingIntent} to fire when users trigger this action 1819300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1820300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Builder(int icon, CharSequence title, PendingIntent intent) { 1821300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen this(icon, title, intent, new Bundle()); 1822300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1823300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1824300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1825300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Construct a new builder for {@link Action} object using the fields from an 1826300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * {@link Action}. 1827300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param action the action to read fields from. 1828300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1829300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Builder(Action action) { 1830300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen this(action.icon, action.title, action.actionIntent, new Bundle(action.mExtras)); 1831300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1832300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1833300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private Builder(int icon, CharSequence title, PendingIntent intent, Bundle extras) { 1834300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mIcon = icon; 183524c306a957c2c0de030d87269bb28b19d7bd7100Christoph Studer mTitle = NotificationCompat.Builder.limitCharSequenceLength(title); 1836300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mIntent = intent; 1837300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mExtras = extras; 1838300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1839300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1840300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1841300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Merge additional metadata into this builder. 1842300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * 1843300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * <p>Values within the Bundle will replace existing extras values in this Builder. 1844300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * 1845300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @see NotificationCompat.Action#getExtras 1846300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1847300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Builder addExtras(Bundle extras) { 1848300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen if (extras != null) { 1849300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mExtras.putAll(extras); 1850300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1851300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return this; 1852300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1853300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1854300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1855300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Get the metadata Bundle used by this Builder. 1856300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * 1857300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * <p>The returned Bundle is shared with this Builder. 1858300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1859300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Bundle getExtras() { 1860300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return mExtras; 1861300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1862300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 1863300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 1864ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Add an input to be collected from the user when this action is sent. 1865ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Response values can be retrieved from the fired intent by using the 1866ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link RemoteInput#getResultsFromIntent} function. 1867ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @param remoteInput a {@link RemoteInput} to add to the action 1868ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @return this object for method chaining 1869ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 1870ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Builder addRemoteInput(RemoteInput remoteInput) { 1871ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (mRemoteInputs == null) { 1872ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mRemoteInputs = new ArrayList<RemoteInput>(); 1873ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1874ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mRemoteInputs.add(remoteInput); 1875ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return this; 1876ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1877ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1878ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1879ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Apply an extender to this action builder. Extenders may be used to add 1880ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * metadata or change options on this builder. 1881ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 18822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Builder extend(Extender extender) { 18832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen extender.extend(this); 1884ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return this; 1885ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 1886ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 1887ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 1888300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Combine all of the options that have been set and return a new {@link Action} 1889300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * object. 1890300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @return the built action 1891300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 1892300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public Action build() { 1893ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInput[] remoteInputs = mRemoteInputs != null 1894ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen ? mRemoteInputs.toArray(new RemoteInput[mRemoteInputs.size()]) : null; 1895ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return new Action(mIcon, mTitle, mIntent, mExtras, remoteInputs); 1896300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1897300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 1898300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 18992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Extender interface for use with {@link Builder#extend}. Extenders may be used to add 19022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * metadata or change options on an action builder. 19032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public interface Extender { 19052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Apply this extender to a notification action builder. 19072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param builder the builder to be modified. 19082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return the build object for chaining. 19092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Builder extend(Builder builder); 19112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19142bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Wearable extender for notification actions. To add extensions to an action, 19152bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * create a new {@link NotificationCompat.Action.WearableExtender} object using 19162bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * the {@code WearableExtender()} constructor and apply it to a 19172bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link NotificationCompat.Action.Builder} using 19182bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link NotificationCompat.Action.Builder#extend}. 19192bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 19202bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <pre class="prettyprint"> 19212bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * NotificationCompat.Action action = new NotificationCompat.Action.Builder( 19222bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * R.drawable.archive_all, "Archive all", actionIntent) 192333176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * .extend(new NotificationCompat.Action.WearableExtender() 19242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .setAvailableOffline(false)) 192533176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * .build();</pre> 19262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final class WearableExtender implements Extender { 19282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** Notification action extra which contains wearable extensions */ 19292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String EXTRA_WEARABLE_EXTENSIONS = "android.wearable.EXTENSIONS"; 19302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_FLAGS = "flags"; 19322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen // Flags bitwise-ored to mFlags 19342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int FLAG_AVAILABLE_OFFLINE = 0x1; 19352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen // Default value for flags integer 19372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int DEFAULT_FLAGS = FLAG_AVAILABLE_OFFLINE; 19382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mFlags = DEFAULT_FLAGS; 19402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Create a {@link NotificationCompat.Action.WearableExtender} with default 19432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * options. 19442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender() { 19462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Create a {@link NotificationCompat.Action.WearableExtender} by reading 19502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * wearable options present in an existing notification action. 19512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param action the notification action to inspect. 19522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender(Action action) { 19542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Bundle wearableBundle = action.getExtras().getBundle(EXTRA_WEARABLE_EXTENSIONS); 19552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (wearableBundle != null) { 19562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mFlags = wearableBundle.getInt(KEY_FLAGS, DEFAULT_FLAGS); 19572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Apply wearable extensions to a notification action that is being built. This is 19622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * typically called by the {@link NotificationCompat.Action.Builder#extend} 19632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * method of {@link NotificationCompat.Action.Builder}. 19642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 19662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Action.Builder extend(Action.Builder builder) { 19672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Bundle wearableBundle = new Bundle(); 19682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mFlags != DEFAULT_FLAGS) { 19702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_FLAGS, mFlags); 19712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen builder.getExtras().putBundle(EXTRA_WEARABLE_EXTENSIONS, wearableBundle); 19742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return builder; 19752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 19782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender clone() { 19792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen WearableExtender that = new WearableExtender(); 19802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mFlags = this.mFlags; 19812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return that; 19822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set whether this action is available when the wearable device is not connected to 19862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * a companion device. The user can still trigger this action when the wearable device 19872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * is offline, but a visual hint will indicate that the action may not be available. 19882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Defaults to true. 19892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 19902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setAvailableOffline(boolean availableOffline) { 19912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen setFlag(FLAG_AVAILABLE_OFFLINE, availableOffline); 19922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 19932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 19942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 19952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 19962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get whether this action is available when the wearable device is not connected to 19972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * a companion device. The user can still trigger this action when the wearable device 19982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * is offline, but a visual hint will indicate that the action may not be available. 19992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Defaults to true. 20002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 20012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public boolean isAvailableOffline() { 20022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (mFlags & FLAG_AVAILABLE_OFFLINE) != 0; 20032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 20042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 20052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private void setFlag(int mask, boolean value) { 20062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (value) { 20072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mFlags |= mask; 20082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } else { 20092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mFlags &= ~mask; 20102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 20112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 20122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 20132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 2014ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** @hide */ 2015ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final Factory FACTORY = new Factory() { 2016ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 2017ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Action build(int icon, CharSequence title, 2018ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen PendingIntent actionIntent, Bundle extras, 2019ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInputCompatBase.RemoteInput[] remoteInputs) { 2020ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return new Action(icon, title, actionIntent, extras, 2021ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen (RemoteInput[]) remoteInputs); 2022ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 2023300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 2024ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen @Override 2025ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public Action[] newArray(int length) { 2026ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return new Action[length]; 2027ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 2028ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen }; 2029c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 2030b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 20312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 20322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 20332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Extender interface for use with {@link Builder#extend}. Extenders may be used to add 20342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * metadata or change options on a notification builder. 20352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 20362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public interface Extender { 20372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 20382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Apply this extender to a notification builder. 20392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param builder the builder to be modified. 20402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return the build object for chaining. 20412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 20422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Builder extend(Builder builder); 20432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 20442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 20452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 20462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Helper class to add wearable extensions to notifications. 20472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p class="note"> See 20482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <a href="{@docRoot}wear/notifications/creating.html">Creating Notifications 20492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * for Android Wear</a> for more information on how to use this class. 20502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p> 20512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * To create a notification with wearable extensions: 20522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <ol> 20532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <li>Create a {@link NotificationCompat.Builder}, setting any desired 20542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * properties. 20552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <li>Create a {@link NotificationCompat.WearableExtender}. 20562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <li>Set wearable-specific properties using the 20572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@code add} and {@code set} methods of {@link NotificationCompat.WearableExtender}. 20582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <li>Call {@link NotificationCompat.Builder#extend} to apply the extensions to a 20592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * notification. 20602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <li>Post the notification to the notification 20612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * system with the {@code NotificationManagerCompat.notify(...)} methods 20622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * and not the {@code NotificationManager.notify(...)} methods. 20632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * </ol> 20642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 20652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <pre class="prettyprint"> 20662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Notification notif = new NotificationCompat.Builder(mContext) 20672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .setContentTitle("New mail from " + sender.toString()) 20682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .setContentText(subject) 20692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .setSmallIcon(R.drawable.new_mail) 20702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .extend(new NotificationCompat.WearableExtender() 20712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .setContentIcon(R.drawable.new_mail)) 20722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * .build(); 20732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * NotificationManagerCompat.from(mContext).notify(0, notif);</pre> 20742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 20752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>Wearable extensions can be accessed on an existing notification by using the 20762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@code WearableExtender(Notification)} constructor, 20772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * and then using the {@code get} methods to access values. 20782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 20792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <pre class="prettyprint"> 20802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * NotificationCompat.WearableExtender wearableExtender = 20812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * new NotificationCompat.WearableExtender(notification); 208233176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * List<Notification> pages = wearableExtender.getPages();</pre> 20832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 20842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final class WearableExtender implements Extender { 20852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 20862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Sentinel value for an action index that is unset. 20872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 20882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final int UNSET_ACTION_INDEX = -1; 20892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 20902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 20912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Size value for use with {@link #setCustomSizePreset} to show this notification with 20922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * default sizing. 20932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>For custom display notifications created using {@link #setDisplayIntent}, 20942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * the default is {@link #SIZE_LARGE}. All other notifications size automatically based 20952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * on their content. 20962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 20972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final int SIZE_DEFAULT = 0; 20982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 20992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 21002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Size value for use with {@link #setCustomSizePreset} to show this notification 21012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * with an extra small size. 21022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>This value is only applicable for custom display notifications created using 21032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #setDisplayIntent}. 21042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 21052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final int SIZE_XSMALL = 1; 21062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 21082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Size value for use with {@link #setCustomSizePreset} to show this notification 21092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * with a small size. 21102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>This value is only applicable for custom display notifications created using 21112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #setDisplayIntent}. 21122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 21132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final int SIZE_SMALL = 2; 21142bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21152bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 21162bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Size value for use with {@link #setCustomSizePreset} to show this notification 21172bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * with a medium size. 21182bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>This value is only applicable for custom display notifications created using 21192bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #setDisplayIntent}. 21202bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 21212bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final int SIZE_MEDIUM = 3; 21222bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21232bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 21242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Size value for use with {@link #setCustomSizePreset} to show this notification 21252bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * with a large size. 21262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>This value is only applicable for custom display notifications created using 21272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #setDisplayIntent}. 21282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 21292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public static final int SIZE_LARGE = 4; 21302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 2131fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen /** 2132fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen * Size value for use with {@link #setCustomSizePreset} to show this notification 2133fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen * full screen. 2134fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen * <p>This value is only applicable for custom display notifications created using 2135fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen * {@link #setDisplayIntent}. 2136fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen */ 2137fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen public static final int SIZE_FULL_SCREEN = 5; 2138fd5d0d05e9b44fcb0a9dab91290d53b464fc0939Griff Hazen 21392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** Notification extra which contains wearable extensions */ 21402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String EXTRA_WEARABLE_EXTENSIONS = "android.wearable.EXTENSIONS"; 21412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen // Keys within EXTRA_WEARABLE_OPTIONS for wearable options. 21432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_ACTIONS = "actions"; 21442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_FLAGS = "flags"; 21452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_DISPLAY_INTENT = "displayIntent"; 21462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_PAGES = "pages"; 21472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_BACKGROUND = "background"; 21482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_CONTENT_ICON = "contentIcon"; 21492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_CONTENT_ICON_GRAVITY = "contentIconGravity"; 21502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_CONTENT_ACTION_INDEX = "contentActionIndex"; 21512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_CUSTOM_SIZE_PRESET = "customSizePreset"; 21522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_CUSTOM_CONTENT_HEIGHT = "customContentHeight"; 21532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final String KEY_GRAVITY = "gravity"; 21542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen // Flags bitwise-ored to mFlags 21562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE = 0x1; 21572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int FLAG_HINT_HIDE_ICON = 1 << 1; 21582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int FLAG_HINT_SHOW_BACKGROUND_ONLY = 1 << 2; 21592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int FLAG_START_SCROLL_BOTTOM = 1 << 3; 21602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen // Default value for flags integer 21622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int DEFAULT_FLAGS = FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE; 21632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int DEFAULT_CONTENT_ICON_GRAVITY = GravityCompat.END; 21652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static final int DEFAULT_GRAVITY = Gravity.BOTTOM; 21662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private ArrayList<Action> mActions = new ArrayList<Action>(); 21682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mFlags = DEFAULT_FLAGS; 21692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private PendingIntent mDisplayIntent; 21702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private ArrayList<Notification> mPages = new ArrayList<Notification>(); 21712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private Bitmap mBackground; 21722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mContentIcon; 21732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mContentIconGravity = DEFAULT_CONTENT_ICON_GRAVITY; 21742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mContentActionIndex = UNSET_ACTION_INDEX; 21752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mCustomSizePreset = SIZE_DEFAULT; 21762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mCustomContentHeight; 21772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private int mGravity = DEFAULT_GRAVITY; 21782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 21802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Create a {@link NotificationCompat.WearableExtender} with default 21812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * options. 21822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 21832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender() { 21842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 21852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender(Notification notif) { 21872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Bundle extras = getExtras(notif); 21882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Bundle wearableBundle = extras != null ? extras.getBundle(EXTRA_WEARABLE_EXTENSIONS) 21892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen : null; 21902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (wearableBundle != null) { 21912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Action[] actions = IMPL.getActionsFromParcelableArrayList( 21922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.getParcelableArrayList(KEY_ACTIONS)); 21932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (actions != null) { 21942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Collections.addAll(mActions, actions); 21952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 21962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 21972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mFlags = wearableBundle.getInt(KEY_FLAGS, DEFAULT_FLAGS); 21982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mDisplayIntent = wearableBundle.getParcelable(KEY_DISPLAY_INTENT); 21992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Notification[] pages = getNotificationArrayFromBundle( 22012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle, KEY_PAGES); 22022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (pages != null) { 22032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Collections.addAll(mPages, pages); 22042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mBackground = wearableBundle.getParcelable(KEY_BACKGROUND); 22072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentIcon = wearableBundle.getInt(KEY_CONTENT_ICON); 22082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentIconGravity = wearableBundle.getInt(KEY_CONTENT_ICON_GRAVITY, 22092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen DEFAULT_CONTENT_ICON_GRAVITY); 22102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentActionIndex = wearableBundle.getInt(KEY_CONTENT_ACTION_INDEX, 22112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen UNSET_ACTION_INDEX); 22122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mCustomSizePreset = wearableBundle.getInt(KEY_CUSTOM_SIZE_PRESET, 22132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen SIZE_DEFAULT); 22142bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mCustomContentHeight = wearableBundle.getInt(KEY_CUSTOM_CONTENT_HEIGHT); 22152bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mGravity = wearableBundle.getInt(KEY_GRAVITY, DEFAULT_GRAVITY); 22162bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22172bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22182bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22192bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 22202bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Apply wearable extensions to a notification that is being built. This is typically 22212bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * called by the {@link NotificationCompat.Builder#extend} method of 22222bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link NotificationCompat.Builder}. 22232bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 22242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 22252bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public NotificationCompat.Builder extend(NotificationCompat.Builder builder) { 22262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Bundle wearableBundle = new Bundle(); 22272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (!mActions.isEmpty()) { 22292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putParcelableArrayList(KEY_ACTIONS, 22302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen IMPL.getParcelableArrayListForActions(mActions.toArray( 22312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen new Action[mActions.size()]))); 22322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mFlags != DEFAULT_FLAGS) { 22342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_FLAGS, mFlags); 22352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mDisplayIntent != null) { 22372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putParcelable(KEY_DISPLAY_INTENT, mDisplayIntent); 22382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (!mPages.isEmpty()) { 22402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putParcelableArray(KEY_PAGES, mPages.toArray( 22412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen new Notification[mPages.size()])); 22422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mBackground != null) { 22442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putParcelable(KEY_BACKGROUND, mBackground); 22452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mContentIcon != 0) { 22472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_CONTENT_ICON, mContentIcon); 22482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mContentIconGravity != DEFAULT_CONTENT_ICON_GRAVITY) { 22502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_CONTENT_ICON_GRAVITY, mContentIconGravity); 22512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mContentActionIndex != UNSET_ACTION_INDEX) { 22532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_CONTENT_ACTION_INDEX, 22542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentActionIndex); 22552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mCustomSizePreset != SIZE_DEFAULT) { 22572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_CUSTOM_SIZE_PRESET, mCustomSizePreset); 22582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mCustomContentHeight != 0) { 22602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_CUSTOM_CONTENT_HEIGHT, mCustomContentHeight); 22612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (mGravity != DEFAULT_GRAVITY) { 22632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen wearableBundle.putInt(KEY_GRAVITY, mGravity); 22642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen builder.getExtras().putBundle(EXTRA_WEARABLE_EXTENSIONS, wearableBundle); 22672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return builder; 22682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen @Override 22712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender clone() { 22722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen WearableExtender that = new WearableExtender(); 22732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mActions = new ArrayList<Action>(this.mActions); 22742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mFlags = this.mFlags; 22752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mDisplayIntent = this.mDisplayIntent; 22762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mPages = new ArrayList<Notification>(this.mPages); 22772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mBackground = this.mBackground; 22782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mContentIcon = this.mContentIcon; 22792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mContentIconGravity = this.mContentIconGravity; 22802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mContentActionIndex = this.mContentActionIndex; 22812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mCustomSizePreset = this.mCustomSizePreset; 22822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mCustomContentHeight = this.mCustomContentHeight; 22832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen that.mGravity = this.mGravity; 22842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return that; 22852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 22862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 22872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 22882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Add a wearable action to this notification. 22892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 22902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>When wearable actions are added using this method, the set of actions that 22912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * show on a wearable device splits from devices that only show actions added 22922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * using {@link NotificationCompat.Builder#addAction}. This allows for customization 22932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * of which actions display on different devices. 22942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 22952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param action the action to add to this notification 22962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 22972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.Action 22982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 22992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender addAction(Action action) { 23002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mActions.add(action); 23012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 23022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Adds wearable actions to this notification. 23062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 23072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>When wearable actions are added using this method, the set of actions that 23082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * show on a wearable device splits from devices that only show actions added 23092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * using {@link NotificationCompat.Builder#addAction}. This allows for customization 23102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * of which actions display on different devices. 23112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 23122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param actions the actions to add to this notification 23132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 23142bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.Action 23152bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 23162bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender addActions(List<Action> actions) { 23172bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mActions.addAll(actions); 23182bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 23192bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23202bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23212bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23222bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Clear all wearable actions present on this builder. 23232bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining. 23242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see #addAction 23252bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 23262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender clearActions() { 23272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mActions.clear(); 23282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 23292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the wearable actions present on this notification. 23332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 23342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public List<Action> getActions() { 23352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mActions; 23362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set an intent to launch inside of an activity view when displaying 234033176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * this notification. The {@link PendingIntent} provided should be for an activity. 234133176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 234233176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <pre class="prettyprint"> 234333176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * Intent displayIntent = new Intent(context, MyDisplayActivity.class); 234433176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * PendingIntent displayPendingIntent = PendingIntent.getActivity(context, 234533176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 0, displayIntent, PendingIntent.FLAG_UPDATE_CURRENT); 234633176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * Notification notif = new NotificationCompat.Builder(context) 234733176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * .extend(new NotificationCompat.WearableExtender() 234833176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * .setDisplayIntent(displayPendingIntent) 234933176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * .setCustomSizePreset(NotificationCompat.WearableExtender.SIZE_MEDIUM)) 235033176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * .build();</pre> 235133176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 235233176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <p>The activity to launch needs to allow embedding, must be exported, and 2353bc8f49b8cd63e6c24322a013d47e805a8789685eGriff Hazen * should have an empty task affinity. It is also recommended to use the device 2354bc8f49b8cd63e6c24322a013d47e805a8789685eGriff Hazen * default light theme. 235533176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 235633176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <p>Example AndroidManifest.xml entry: 235733176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <pre class="prettyprint"> 235833176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <activity android:name="com.example.MyDisplayActivity" 235933176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * android:exported="true" 236033176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * android:allowEmbedded="true" 2361bc8f49b8cd63e6c24322a013d47e805a8789685eGriff Hazen * android:taskAffinity="" 2362bc8f49b8cd63e6c24322a013d47e805a8789685eGriff Hazen * android:theme="@android:style/Theme.DeviceDefault.Light" /></pre> 23632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 23642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param intent the {@link PendingIntent} for an activity 23652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 23662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.WearableExtender#getDisplayIntent 23672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 23682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setDisplayIntent(PendingIntent intent) { 23692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mDisplayIntent = intent; 23702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 23712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the intent to launch inside of an activity view when displaying this 23752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * notification. This {@code PendingIntent} should be for an activity. 23762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 23772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public PendingIntent getDisplayIntent() { 23782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mDisplayIntent; 23792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Add an additional page of content to display with this notification. The current 23832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * notification forms the first page, and pages added using this function form 23842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * subsequent pages. This field can be used to separate a notification into multiple 23852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * sections. 23862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 23872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param page the notification to add as another page 23882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 23892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.WearableExtender#getPages 23902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 23912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender addPage(Notification page) { 23922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mPages.add(page); 23932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 23942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 23952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 23962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 23972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Add additional pages of content to display with this notification. The current 23982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * notification forms the first page, and pages added using this function form 23992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * subsequent pages. This field can be used to separate a notification into multiple 24002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * sections. 24012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 24022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param pages a list of notifications 24032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 24042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.WearableExtender#getPages 24052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender addPages(List<Notification> pages) { 24072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mPages.addAll(pages); 24082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 24092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Clear all additional pages present on this builder. 24132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining. 24142bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see #addPage 24152bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24162bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender clearPages() { 24172bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mPages.clear(); 24182bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 24192bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24202bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24212bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24222bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the array of additional pages of content for displaying this notification. The 24232bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * current notification forms the first page, and elements within this array form 24242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * subsequent pages. This field can be used to separate a notification into multiple 24252bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * sections. 24262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return the pages for this notification 24272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public List<Notification> getPages() { 24292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mPages; 24302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set a background image to be displayed behind the notification content. 24342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Contrary to the {@link NotificationCompat.BigPictureStyle}, this background 24352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * will work with any notification style. 24362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 24372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param background the background bitmap 24382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 24392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.WearableExtender#getBackground 24402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setBackground(Bitmap background) { 24422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mBackground = background; 24432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 24442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get a background image to be displayed behind the notification content. 24482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Contrary to the {@link NotificationCompat.BigPictureStyle}, this background 24492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * will work with any notification style. 24502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 24512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return the background image 24522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see NotificationCompat.WearableExtender#setBackground 24532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public Bitmap getBackground() { 24552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mBackground; 24562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set an icon that goes with the content of this notification. 24602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setContentIcon(int icon) { 24622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentIcon = icon; 24632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 24642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get an icon that goes with the content of this notification. 24682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public int getContentIcon() { 24702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mContentIcon; 24712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set the gravity that the content icon should have within the notification display. 24752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Supported values include {@link android.view.Gravity#START} and 24762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link android.view.Gravity#END}. The default value is {@link android.view.Gravity#END}. 24772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see #setContentIcon 24782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setContentIconGravity(int contentIconGravity) { 24802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentIconGravity = contentIconGravity; 24812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 24822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the gravity that the content icon should have within the notification display. 24862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Supported values include {@link android.view.Gravity#START} and 24872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link android.view.Gravity#END}. The default value is {@link android.view.Gravity#END}. 24882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @see #getContentIcon 24892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 24902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public int getContentIconGravity() { 24912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mContentIconGravity; 24922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 24932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 24942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 24952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set an action from this notification's actions to be clickable with the content of 249633176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * this notification. This action will no longer display separately from the 249733176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * notification's content. 249833176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 249933176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <p>For notifications with multiple pages, child pages can also have content actions 250033176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * set, although the list of available actions comes from the main notification and not 250133176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * from the child page's notification. 250233176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 250333176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * @param actionIndex The index of the action to hoist onto the current notification page. 250433176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * If wearable actions were added to the main notification, this index 250533176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * will apply to that list, otherwise it will apply to the regular 250633176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * actions list. 25072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setContentAction(int actionIndex) { 25092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mContentActionIndex = actionIndex; 25102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 25112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 251433176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * Get the index of the notification action, if any, that was specified as being clickable 251533176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * with the content of this notification. This action will no longer display separately 251633176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * from the notification's content. 251733176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 251833176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <p>For notifications with multiple pages, child pages can also have content actions 251933176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * set, although the list of available actions comes from the main notification and not 252033176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * from the child page's notification. 252133176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * 252233176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * <p>If wearable specific actions were added to the main notification, this index will 252333176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * apply to that list, otherwise it will apply to the regular actions list. 25242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * 252533176ed929ad69d9b700fb4da97948e61d0e7c93Griff Hazen * @return the action index or {@link #UNSET_ACTION_INDEX} if no action was selected. 25262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public int getContentAction() { 25282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mContentActionIndex; 25292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 25322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set the gravity that this notification should have within the available viewport space. 25332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Supported values include {@link android.view.Gravity#TOP}, 25342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link android.view.Gravity#CENTER_VERTICAL} and {@link android.view.Gravity#BOTTOM}. 25352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * The default value is {@link android.view.Gravity#BOTTOM}. 25362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setGravity(int gravity) { 25382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mGravity = gravity; 25392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 25402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 25432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the gravity that this notification should have within the available viewport space. 25442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Supported values include {@link android.view.Gravity#TOP}, 25452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link android.view.Gravity#CENTER_VERTICAL} and {@link android.view.Gravity#BOTTOM}. 25462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * The default value is {@link android.view.Gravity#BOTTOM}. 25472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public int getGravity() { 25492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mGravity; 25502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 25532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set the custom size preset for the display of this notification out of the available 25542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * presets found in {@link NotificationCompat.WearableExtender}, e.g. 25552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #SIZE_LARGE}. 25562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>Some custom size presets are only applicable for custom display notifications created 25572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * using {@link NotificationCompat.WearableExtender#setDisplayIntent}. Check the 25582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * documentation for the preset in question. See also 25592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #setCustomContentHeight} and {@link #getCustomSizePreset}. 25602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setCustomSizePreset(int sizePreset) { 25622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mCustomSizePreset = sizePreset; 25632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 25642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 25672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the custom size preset for the display of this notification out of the available 25682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * presets found in {@link NotificationCompat.WearableExtender}, e.g. 25692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #SIZE_LARGE}. 25702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>Some custom size presets are only applicable for custom display notifications created 25712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * using {@link #setDisplayIntent}. Check the documentation for the preset in question. 25722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * See also {@link #setCustomContentHeight} and {@link #setCustomSizePreset}. 25732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public int getCustomSizePreset() { 25752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mCustomSizePreset; 25762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 25792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set the custom height in pixels for the display of this notification's content. 25802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>This option is only available for custom display notifications created 25812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * using {@link NotificationCompat.WearableExtender#setDisplayIntent}. See also 25822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link NotificationCompat.WearableExtender#setCustomSizePreset} and 25832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #getCustomContentHeight}. 25842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setCustomContentHeight(int height) { 25862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mCustomContentHeight = height; 25872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 25882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 25902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 25912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get the custom height in pixels for the display of this notification's content. 25922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * <p>This option is only available for custom display notifications created 25932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * using {@link #setDisplayIntent}. See also {@link #setCustomSizePreset} and 25942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * {@link #setCustomContentHeight}. 25952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 25962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public int getCustomContentHeight() { 25972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return mCustomContentHeight; 25982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 25992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set whether the scrolling position for the contents of this notification should start 26022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * at the bottom of the contents instead of the top when the contents are too long to 26032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * display within the screen. Default is false (start scroll at the top). 26042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setStartScrollBottom(boolean startScrollBottom) { 26062bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen setFlag(FLAG_START_SCROLL_BOTTOM, startScrollBottom); 26072bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 26082bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26092bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26102bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26112bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get whether the scrolling position for the contents of this notification should start 26122bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * at the bottom of the contents instead of the top when the contents are too long to 26132bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * display within the screen. Default is false (start scroll at the top). 26142bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26152bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public boolean getStartScrollBottom() { 26162bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (mFlags & FLAG_START_SCROLL_BOTTOM) != 0; 26172bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26182bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26192bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26202bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set whether the content intent is available when the wearable device is not connected 26212bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * to a companion device. The user can still trigger this intent when the wearable device 26222bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * is offline, but a visual hint will indicate that the content intent may not be available. 26232bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Defaults to true. 26242bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26252bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setContentIntentAvailableOffline( 26262bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen boolean contentIntentAvailableOffline) { 26272bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen setFlag(FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE, contentIntentAvailableOffline); 26282bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 26292bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26302bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26312bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26322bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get whether the content intent is available when the wearable device is not connected 26332bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * to a companion device. The user can still trigger this intent when the wearable device 26342bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * is offline, but a visual hint will indicate that the content intent may not be available. 26352bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Defaults to true. 26362bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public boolean getContentIntentAvailableOffline() { 26382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (mFlags & FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE) != 0; 26392bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26402bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26412bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26422bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set a hint that this notification's icon should not be displayed. 26432bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @param hintHideIcon {@code true} to hide the icon, {@code false} otherwise. 26442bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return this object for method chaining 26452bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26462bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setHintHideIcon(boolean hintHideIcon) { 26472bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen setFlag(FLAG_HINT_HIDE_ICON, hintHideIcon); 26482bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 26492bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26502bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get a hint that this notification's icon should not be displayed. 26532bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * @return {@code true} if this icon should not be displayed, false otherwise. 26542bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * The default value is {@code false} if this was never set. 26552bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public boolean getHintHideIcon() { 26572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (mFlags & FLAG_HINT_HIDE_ICON) != 0; 26582bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26592bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26602bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26612bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Set a visual hint that only the background image of this notification should be 26622bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * displayed, and other semantic content should be hidden. This hint is only applicable 26632bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * to sub-pages added using {@link #addPage}. 26642bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26652bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public WearableExtender setHintShowBackgroundOnly(boolean hintShowBackgroundOnly) { 26662bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen setFlag(FLAG_HINT_SHOW_BACKGROUND_ONLY, hintShowBackgroundOnly); 26672bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return this; 26682bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26692bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26702bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26712bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get a visual hint that only the background image of this notification should be 26722bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * displayed, and other semantic content should be hidden. This hint is only applicable 26732bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * to sub-pages added using {@link NotificationCompat.WearableExtender#addPage}. 26742bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26752bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen public boolean getHintShowBackgroundOnly() { 26762bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (mFlags & FLAG_HINT_SHOW_BACKGROUND_ONLY) != 0; 26772bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26782bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26792bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private void setFlag(int mask, boolean value) { 26802bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (value) { 26812bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mFlags |= mask; 26822bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } else { 26832bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen mFlags &= ~mask; 26842bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26852bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26862bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 26882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen /** 26892bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Get an array of Notification objects from a parcelable array bundle field. 26902bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * Update the bundle to have a typed array so fetches in the future don't need 26912bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen * to do an array copy. 26922bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen */ 26932bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen private static Notification[] getNotificationArrayFromBundle(Bundle bundle, String key) { 26942bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Parcelable[] array = bundle.getParcelableArray(key); 26952bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen if (array instanceof Notification[] || array == null) { 26962bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return (Notification[]) array; 26972bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 26982bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen Notification[] typedArray = new Notification[array.length]; 26992bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen for (int i = 0; i < array.length; i++) { 27002bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen typedArray[i] = (Notification) array[i]; 27012bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 27022bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen bundle.putParcelableArray(key, typedArray); 27032bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen return typedArray; 27042bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen } 27052bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen 2706b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen /** 2707b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * Gets the {@link Notification#extras} field from a notification in a backwards 2708b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * compatible manner. Extras field was supported from JellyBean (Api level 16) 2709b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * forwards. This function will return null on older api levels. 2710b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen */ 2711b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public static Bundle getExtras(Notification notif) { 2712b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return IMPL.getExtras(notif); 2713b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 2714b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen 2715b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen /** 2716300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Get the number of actions in this notification in a backwards compatible 2717300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * manner. Actions were supported from JellyBean (Api level 16) forwards. 2718300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 2719300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public static int getActionCount(Notification notif) { 2720300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return IMPL.getActionCount(notif); 2721300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 2722300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 2723300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 2724300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * Get an action on this notification in a backwards compatible 2725300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * manner. Actions were supported from JellyBean (Api level 16) forwards. 2726300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param notif The notification to inspect. 2727300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen * @param actionIndex The index of the action to retrieve. 2728300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen */ 2729300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public static Action getAction(Notification notif, int actionIndex) { 2730300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return IMPL.getAction(notif, actionIndex); 2731300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 2732300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 2733300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen /** 273475e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * Get the category of this notification in a backwards compatible 273575e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * manner. 273675e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * @param notif The notification to inspect. 273775e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney */ 273875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney public static String getCategory(Notification notif) { 273975e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney return IMPL.getCategory(notif); 274075e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney } 274175e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney 274275e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney /** 2743b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * Get whether or not this notification is only relevant to the current device. 2744b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * 2745b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * <p>Some notifications can be bridged to other devices for remote display. 2746b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen * If this hint is set, it is recommend that this notification not be bridged. 2747b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen */ 2748b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen public static boolean getLocalOnly(Notification notif) { 2749b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen return IMPL.getLocalOnly(notif); 2750b56de0d1a113c71a2808303009ab4d9708ed6e84Griff Hazen } 2751ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 2752ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 2753ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Get the key used to group this notification into a cluster or stack 2754ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * with other notifications on devices which support such rendering. 2755ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 2756ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static String getGroup(Notification notif) { 2757ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return IMPL.getGroup(notif); 2758ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 2759ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 2760ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 2761ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Get whether this notification to be the group summary for a group of notifications. 2762ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Grouped notifications may display in a cluster or stack on devices which 2763ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * support such rendering. Requires a group key also be set using {@link Builder#setGroup}. 2764ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @return Whether this notification is a group summary. 2765ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 2766ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static boolean isGroupSummary(Notification notif) { 2767ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return IMPL.isGroupSummary(notif); 2768ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 2769ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 2770ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** 2771ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Get a sort key that orders this notification among other notifications from the 2772ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * same package. This can be useful if an external sort was already applied and an app 2773ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * would like to preserve this. Notifications will be sorted lexicographically using this 2774ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * value, although providing different priorities in addition to providing sort key may 2775ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * cause this value to be ignored. 2776ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * 2777ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * <p>This sort key can also be used to order members of a notification group. See 2778ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * {@link Builder#setGroup}. 2779ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * 2780ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * @see String#compareTo(String) 2781ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */ 2782ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static String getSortKey(Notification notif) { 2783ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return IMPL.getSortKey(notif); 2784ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 2785c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell} 2786