Notification.java revision 3c5f92432734e1e3b9bdc515628a4c09d7759cd4
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19110988c8b70f4ab089b179b7966497d508506263Andy Stadlerimport com.android.internal.R; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 23ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onoratoimport android.graphics.Bitmap; 24098d580cc2bb6c0891c756a4e5230c6c6b0d2376Jeff Sharkeyimport android.media.AudioManager; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 262561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandlerimport android.os.Bundle; 27a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandlerimport android.os.IBinder; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 30a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandlerimport android.os.SystemClock; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 32a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandlerimport android.util.IntProperty; 3396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandlerimport android.util.Log; 348595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onoratoimport android.view.View; 351c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkeyimport android.widget.ProgressBar; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RemoteViews; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38110988c8b70f4ab089b179b7966497d508506263Andy Stadlerimport java.text.NumberFormat; 392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandlerimport java.util.ArrayList; 40561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class that represents how a persistent notification is to be presented to 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user using the {@link android.app.NotificationManager}. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <p>The {@link Notification.Builder Notification.Builder} has been added to make it 46cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * easier to construct Notifications.</p> 47cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 48558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <div class="special reference"> 49558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <h3>Developer Guides</h3> 50558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <p>For a guide to creating notifications, read the 51558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a> 52558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * developer guide.</p> 53558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * </div> 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Notification implements Parcelable 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use all default values (where applicable). 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_ALL = ~0; 612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use the default notification sound. This will ignore any given 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #sound}. 652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #defaults 682561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_SOUND = 1; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use the default notification vibrate. This will ignore any given 742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link #vibrate}. Using phone vibration requires the 75b8b3645a9799c38ad68549316ebbf7a4849f2e0cScott Main * {@link android.Manifest.permission#VIBRATE VIBRATE} permission. 762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #defaults 782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_VIBRATE = 2; 812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use the default notification lights. This will ignore the 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #FLAG_SHOW_LIGHTS} bit, and {@link #ledARGB}, {@link #ledOffMS}, or 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ledOnMS}. 862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #defaults 882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_LIGHTS = 4; 912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A timestamp related to this notification, in milliseconds since the epoch. 942561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Default value: {@link System#currentTimeMillis() Now}. 962561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Choose a timestamp that will be most relevant to the user. For most finite events, this 982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * corresponds to the time the event happened (or will happen, in the case of events that have 992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * yet to occur but about which the user is being informed). Indefinite events should be 1002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * timestamped according to when the activity began. 1012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Some examples: 1032561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1042561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <ul> 1052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of a new chat message should be stamped when the message was received.</li> 1062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an ongoing file download (with a progress bar, for example) should be stamped when the download started.</li> 1072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of a completed file download should be stamped when the download finished.</li> 1082561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an upcoming meeting should be stamped with the time the meeting will begin (that is, in the future).</li> 1092561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an ongoing stopwatch (increasing timer) should be stamped with the watch's start time. 1102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an ongoing countdown timer should be stamped with the timer's end time. 1112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * </ul> 1122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long when; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resource id of a drawable to use as the icon in the status bar. 118d952daec06018fe7064b8cafd31dfc71f9eee383Daniel Sandler * This is required; notifications with an invalid icon resource will not be shown. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int icon; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * If the icon in the status bar is to have more than one level, you can set this. Otherwise, 12446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * leave it at its default value of 0. 12546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 12646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @see android.widget.ImageView#setImageLevel 12746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @see android.graphics.drawable#setLevel 12846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato */ 12946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public int iconLevel; 13046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 13146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato /** 1322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The number of events that this notification represents. For example, in a new mail 1332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * notification, this could be the number of unread messages. 1342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The system may or may not use this field to modify the appearance of the notification. For 1362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * example, before {@link android.os.Build.VERSION_CODES#HONEYCOMB}, this number was 1372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * superimposed over the icon in the status bar. Starting with 1382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, the template used by 1392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link Notification.Builder} has displayed the number in the expanded notification view. 1402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * If the number is 0 or negative, it is never shown. 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int number; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The intent to execute when the expanded status entry is clicked. If 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is an activity, it must include the 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag, which requires 1497aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * that you take care of task management as described in the 1507aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back 1516ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * Stack</a> document. In particular, make sure to read the notification section 1526ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#HandlingNotifications">Handling 1536ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * Notifications</a> for the correct ways to launch an application from a 1546ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * notification. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent contentIntent; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The intent to execute when the notification is explicitly dismissed by the user, either with 1602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * the "Clear All" button or by swiping it away individually. 1612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * This probably shouldn't be launching an activity since several of those will be sent 1632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * at the same time. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent deleteIntent; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 168170bae7d832e0fd68e1ee9d96893b97e1dd98c52Dianne Hackborn * An intent to launch instead of posting the notification to the status bar. 169cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 170cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @see Notification.Builder#setFullScreenIntent 171e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler */ 172e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler public PendingIntent fullScreenIntent; 173e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 174e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler /** 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Text to scroll across the screen when this item is added to 176ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato * the status bar on large and smaller devices. 177ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato * 17846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @see #tickerView 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence tickerText; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * The view to show as the ticker in the status bar when the notification 18446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * is posted. 185ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato */ 18646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public RemoteViews tickerView; 187ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato 188ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato /** 189e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler * The view that will represent this notification in the expanded status bar. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RemoteViews contentView; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 193a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler /** 1944dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * A large-format version of {@link #contentView}, giving the Notification an 195f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * opportunity to show more detail. The system UI may choose to show this 196f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * instead of the normal content view at its discretion. 197f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 198f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public RemoteViews bigContentView; 199f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 200f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 20146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * The bitmap that may escape the bounds of the panel and bar. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Bitmap largeIcon; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The sound to play. 2072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2092561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * To play the default notification sound, see {@link #defaults}. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Uri sound; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use this constant as the value for audioStreamType to request that 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the default stream type for notifications be used. Currently the 217098d580cc2bb6c0891c756a4e5230c6c6b0d2376Jeff Sharkey * default stream type is {@link AudioManager#STREAM_NOTIFICATION}. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_DEFAULT = -1; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The audio stream type to use when playing the sound. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Should be one of the STREAM_ constants from 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.media.AudioManager}. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int audioStreamType = STREAM_DEFAULT; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2292561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The pattern with which to vibrate. 2302561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To vibrate the default pattern, see {@link #defaults}. 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.os.Vibrator#vibrate(long[],int) 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long[] vibrate; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The color of the led. The hardware will do its best approximation. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_SHOW_LIGHTS 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #flags 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ledARGB; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of milliseconds for the LED to be on while it's flashing. 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hardware will do its best approximation. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_SHOW_LIGHTS 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #flags 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ledOnMS; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of milliseconds for the LED to be off while it's flashing. 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hardware will do its best approximation. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_SHOW_LIGHTS 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #flags 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ledOffMS; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Specifies which values should be taken from the defaults. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To set, OR the desired from {@link #DEFAULT_SOUND}, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #DEFAULT_VIBRATE}, {@link #DEFAULT_LIGHTS}. For all default 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values, use {@link #DEFAULT_ALL}. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int defaults; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if you want the LED on for this notification. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>To turn the LED off, pass 0 in the alpha channel for colorARGB 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or 0 for both ledOnMS and ledOffMS.</li> 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>To turn the LED on, pass 1 for ledOnMS and 0 for ledOffMS.</li> 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>To flash the LED, pass the number of milliseconds that it should 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be on and off to ledOnMS and ledOffMS.</li> 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Since hardware varies, you are not guaranteed that any of the values 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you pass are honored exactly. Use the system defaults (TODO) if possible 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * because they will be set to values that work on any given hardware. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The alpha channel must be set for forward compatibility. 2912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_SHOW_LIGHTS = 0x00000001; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if this notification is in reference to something that is ongoing, 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * like a phone call. It should not be set if this notification is in 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reference to something that happened at a particular point in time, 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * like a missed phone call. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_ONGOING_EVENT = 0x00000002; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that if set, 306b8b3645a9799c38ad68549316ebbf7a4849f2e0cScott Main * the audio will be repeated until the notification is 307b8b3645a9799c38ad68549316ebbf7a4849f2e0cScott Main * cancelled or the notification window is opened. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_INSISTENT = 0x00000004; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if you want the sound and/or vibration play each time the 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * notification is sent, even if it has not been canceled before that. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_ONLY_ALERT_ONCE = 0x00000008; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if the notification should be canceled when it is clicked by the 3212561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * user. On tablets, the 3222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_AUTO_CANCEL = 0x00000010; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if the notification should not be canceled when the user clicks 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Clear all button. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_NO_CLEAR = 0x00000020; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 333d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn /** 334d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn * Bit to be bitwise-ored into the {@link #flags} field that should be 335d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn * set if this notification represents a currently running service. This 336d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn * will normally be set for you by {@link Service#startForeground}. 337d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn */ 338d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn public static final int FLAG_FOREGROUND_SERVICE = 0x00000040; 339d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn 340e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler /** 3412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Obsolete flag indicating high-priority notifications; use the priority field instead. 3422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 3432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @deprecated Use {@link #priority} with a positive value. 344e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler */ 3452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int FLAG_HIGH_PRIORITY = 0x00000080; 346e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int flags; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3502561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Default notification {@link #priority}. If your application does not prioritize its own 3512561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * notifications, use this value for all notifications. 3522561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_DEFAULT = 0; 3542561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3552561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3562561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Lower {@link #priority}, for items that are less important. The UI may choose to show these 3572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * items smaller, or at a different position in the list, compared with your app's 3582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link #PRIORITY_DEFAULT} items. 3592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_LOW = -1; 3612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Lowest {@link #priority}; these items might not be shown to the user except under special 3642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * circumstances, such as detailed notification logs. 3652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_MIN = -2; 3672561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3682561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Higher {@link #priority}, for more important notifications or alerts. The UI may choose to 3702561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * show these items larger, or at a different position in notification lists, compared with 3712561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * your app's {@link #PRIORITY_DEFAULT} items. 3722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_HIGH = 1; 3742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Highest {@link #priority}, for your application's most important items that require the 3772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * user's prompt attention or input. 3782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_MAX = 2; 3802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Relative priority for this notification. 3832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 3842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Priority is an indication of how much of the user's valuable attention should be consumed by 3852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * this notification. Low-priority notifications may be hidden from the user in certain 3862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * situations, while the user might be interrupted for a higher-priority notification. The 3872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * system will make a determination about how to interpret notification priority as described in 3882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * MUMBLE MUMBLE. 3892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public int priority; 3912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: incoming call (voice or video) or similar synchronous communication request. 3942561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_CALL = "android.call"; 3962561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: incoming direct message (SMS, instant message, etc.). 3992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_MESSAGE = "android.message"; 4012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 4032561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: asynchronous bulk message (email). 4042561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_EMAIL = "android.email"; 4062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 4082561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: calendar event. 4092561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_EVENT = "android.event"; 4112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 4132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: promotion or advertisement. 4142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_PROMO = "android.promo"; 4162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 4182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * If this notification matches of one or more special types (see the <code>KIND_*</code> 4192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * constants), add them here, best match first. 4202561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4212561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public String[] kind; 4222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4232561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 4242561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Extra key for people values (type TBD). 4252561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 4262561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @hide 4272561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4282561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String EXTRA_PEOPLE = "android.people"; 4292561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4302561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private Bundle extras; 4312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 433a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * Structure to encapsulate an "action", including title and icon, that can be attached to a Notification. 434a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @hide 435a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler */ 436a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private static class Action implements Parcelable { 437a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public int icon; 438a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public CharSequence title; 439a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public PendingIntent actionIntent; 440a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @SuppressWarnings("unused") 441a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action() { } 442a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private Action(Parcel in) { 443a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler icon = in.readInt(); 444a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 445a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (in.readInt() == 1) { 446a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler actionIntent = PendingIntent.CREATOR.createFromParcel(in); 447a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 448a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 449a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action(int icon_, CharSequence title_, PendingIntent intent_) { 450a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.icon = icon_; 451a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.title = title_; 452a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.actionIntent = intent_; 453a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 454a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @Override 455a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action clone() { 456a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return new Action( 457a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.icon, 458a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.title.toString(), 459a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.actionIntent // safe to alias 460a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler ); 461a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 462a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @Override 463a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public int describeContents() { 464a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return 0; 465a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 466a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @Override 467a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public void writeToParcel(Parcel out, int flags) { 468a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler out.writeInt(icon); 469a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler TextUtils.writeToParcel(title, out, flags); 470a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (actionIntent != null) { 471a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler out.writeInt(1); 472a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler actionIntent.writeToParcel(out, flags); 473a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } else { 474a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler out.writeInt(0); 475a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 476a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 477a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public static final Parcelable.Creator<Action> CREATOR 478a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler = new Parcelable.Creator<Action>() { 479a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action createFromParcel(Parcel in) { 480a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return new Action(in); 481a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 482a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action[] newArray(int size) { 483a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return new Action[size]; 484a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 485a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler }; 486a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 487a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 488a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private Action[] actions; 489a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 490a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler /** 4912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Constructs a Notification object with default values. 49246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * You might want to consider using {@link Builder} instead. 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification() 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.when = System.currentTimeMillis(); 4972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler this.priority = PRIORITY_DEFAULT; 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification(Context context, int icon, CharSequence tickerText, long when, 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence contentTitle, CharSequence contentText, Intent contentIntent) 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.when = when; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.icon = icon; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.tickerText = tickerText; 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLatestEventInfo(context, contentTitle, contentText, 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PendingIntent.getActivity(context, 0, contentIntent, 0)); 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructs a Notification object with the information needed to 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * have a status bar icon without the standard expanded view. 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param icon The resource id of the icon to put in the status bar. 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tickerText The text that flows by in the status bar when the notification first 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activates. 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param when The time to show in the time field. In the System.currentTimeMillis 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * timebase. 52246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 52346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @deprecated Use {@link Builder} instead. 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 52546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato @Deprecated 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification(int icon, CharSequence tickerText, long when) 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.icon = icon; 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.tickerText = tickerText; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.when = when; 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unflatten the notification from a parcel. 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification(Parcel parcel) 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int version = parcel.readInt(); 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = parcel.readLong(); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = parcel.readInt(); 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = parcel.readInt(); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentIntent = PendingIntent.CREATOR.createFromParcel(parcel); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteIntent = PendingIntent.CREATOR.createFromParcel(parcel); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tickerText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 55346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato tickerView = RemoteViews.CREATOR.createFromParcel(parcel); 554ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } 555ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato if (parcel.readInt() != 0) { 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentView = RemoteViews.CREATOR.createFromParcel(parcel); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 558561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (parcel.readInt() != 0) { 559561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato largeIcon = Bitmap.CREATOR.createFromParcel(parcel); 560561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project defaults = parcel.readInt(); 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flags = parcel.readInt(); 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sound = Uri.CREATOR.createFromParcel(parcel); 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project audioStreamType = parcel.readInt(); 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vibrate = parcel.createLongArray(); 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ledARGB = parcel.readInt(); 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ledOnMS = parcel.readInt(); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ledOffMS = parcel.readInt(); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconLevel = parcel.readInt(); 573e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 574e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler if (parcel.readInt() != 0) { 575e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler fullScreenIntent = PendingIntent.CREATOR.createFromParcel(parcel); 576e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } 5772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 5782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler priority = parcel.readInt(); 579a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 5802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler kind = parcel.createStringArray(); // may set kind to null 5812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 5822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (parcel.readInt() != 0) { 5832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler extras = parcel.readBundle(); 5842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 585a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 586a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler actions = parcel.createTypedArray(Action.CREATOR); 587a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (parcel.readInt() != 0) { 588f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler bigContentView = RemoteViews.CREATOR.createFromParcel(parcel); 589f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 592110988c8b70f4ab089b179b7966497d508506263Andy Stadler @Override 59318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public Notification clone() { 59418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato Notification that = new Notification(); 59518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 59618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.when = this.when; 59718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.icon = this.icon; 59818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.number = this.number; 59918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 60018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato // PendingIntents are global, so there's no reason (or way) to clone them. 60118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.contentIntent = this.contentIntent; 60218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.deleteIntent = this.deleteIntent; 603e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler that.fullScreenIntent = this.fullScreenIntent; 60418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 60518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (this.tickerText != null) { 60618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.tickerText = this.tickerText.toString(); 60718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 60846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (this.tickerView != null) { 60946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato that.tickerView = this.tickerView.clone(); 610ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } 61118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (this.contentView != null) { 61218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.contentView = this.contentView.clone(); 61318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 614561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (this.largeIcon != null) { 615561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato that.largeIcon = Bitmap.createBitmap(this.largeIcon); 616561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 617a8b9183a7cb4dca8d8e6507abc765c581bf67dcbJozef BABJAK that.iconLevel = this.iconLevel; 61818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.sound = this.sound; // android.net.Uri is immutable 61918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.audioStreamType = this.audioStreamType; 62018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 62118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato final long[] vibrate = this.vibrate; 62218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (vibrate != null) { 62318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato final int N = vibrate.length; 62418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato final long[] vib = that.vibrate = new long[N]; 62518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato System.arraycopy(vibrate, 0, vib, 0, N); 62618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 62718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 62818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.ledARGB = this.ledARGB; 62918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.ledOnMS = this.ledOnMS; 63018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.ledOffMS = this.ledOffMS; 63118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.defaults = this.defaults; 6322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 63318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.flags = this.flags; 63418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 6352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler that.priority = this.priority; 6362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 6372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler final String[] thiskind = this.kind; 6382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (thiskind != null) { 6392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler final int N = thiskind.length; 6402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler final String[] thatkind = that.kind = new String[N]; 6412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler System.arraycopy(thiskind, 0, thatkind, 0, N); 6422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 6432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 6442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (this.extras != null) { 6452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler that.extras = new Bundle(this.extras); 6462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 6472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 6482561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 649a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler that.actions = new Action[this.actions.length]; 650a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler for(int i=0; i<this.actions.length; i++) { 651a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler that.actions[i] = this.actions[i].clone(); 652a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 653f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (this.bigContentView != null) { 654f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler that.bigContentView = this.bigContentView.clone(); 655f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 656a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 65718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato return that; 65818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 65918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flatten this notification from a parcel. 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel parcel, int flags) 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeLong(when); 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(icon); 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(number); 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentIntent != null) { 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentIntent.writeToParcel(parcel, 0); 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (deleteIntent != null) { 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteIntent.writeToParcel(parcel, 0); 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tickerText != null) { 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(tickerText, parcel, flags); 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 69246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (tickerView != null) { 693ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato parcel.writeInt(1); 69446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato tickerView.writeToParcel(parcel, 0); 695ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } else { 696ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato parcel.writeInt(0); 697ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentView != null) { 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentView.writeToParcel(parcel, 0); 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 704561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (largeIcon != null) { 705561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato parcel.writeInt(1); 706561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato largeIcon.writeToParcel(parcel, 0); 707561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else { 708561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato parcel.writeInt(0); 709561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(defaults); 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(this.flags); 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sound != null) { 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sound.writeToParcel(parcel, 0); 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(audioStreamType); 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeLongArray(vibrate); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(ledARGB); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(ledOnMS); 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(ledOffMS); 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(iconLevel); 726e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 727e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler if (fullScreenIntent != null) { 728e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler parcel.writeInt(1); 729e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler fullScreenIntent.writeToParcel(parcel, 0); 730e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } else { 731e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler parcel.writeInt(0); 732e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } 7332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 7342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeInt(priority); 7352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 7362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeStringArray(kind); // ok for null 7372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 7382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (extras != null) { 7392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeInt(1); 7402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler extras.writeToParcel(parcel, 0); 7412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } else { 7422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeInt(0); 7432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 744a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 745a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler parcel.writeTypedArray(actions, 0); 746a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 747f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (bigContentView != null) { 748f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler parcel.writeInt(1); 749f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler bigContentView.writeToParcel(parcel, 0); 750f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } else { 751f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler parcel.writeInt(0); 752f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parcelable.Creator that instantiates Notification objects 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Notification> CREATOR 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Notification>() 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification createFromParcel(Parcel parcel) 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Notification(parcel); 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification[] newArray(int size) 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Notification[size]; 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the {@link #contentView} field to be a view with the standard "Latest Event" 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * layout. 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Uses the {@link #icon} and {@link #when} fields to set the icon and time fields 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the view.</p> 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The context for your application / activity. 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentTitle The title that goes in the expanded entry. 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentText The text that goes in the expanded entry. 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentIntent The intent to launch when the user clicks the expanded notification. 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this is an activity, it must include the 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag, which requires 7847aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * that you take care of task management as described in the 7857aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back 7867aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * Stack</a> document. 7872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 78846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @deprecated Use {@link Builder} instead. 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 79046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato @Deprecated 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLatestEventInfo(Context context, 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence contentTitle, CharSequence contentText, PendingIntent contentIntent) { 793cde8aae955f2c1074a840074a9f586f95c3f61f7Daniel Sandler // TODO: rewrite this to use Builder 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RemoteViews contentView = new RemoteViews(context.getPackageName(), 79596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler R.layout.notification_template_base); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.icon != 0) { 797561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setImageViewResource(R.id.icon, this.icon); 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentTitle != null) { 800561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.title, contentTitle); 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentText != null) { 803561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.text, contentText); 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.when != 0) { 806cde8aae955f2c1074a840074a9f586f95c3f61f7Daniel Sandler contentView.setViewVisibility(R.id.time, View.VISIBLE); 807561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setLong(R.id.time, "setTime", when); 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.contentView = contentView; 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.contentIntent = contentIntent; 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(); 8172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append("Notification(pri="); 8182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(priority); 8192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" contentView="); 820c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato if (contentView != null) { 821c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append(contentView.getPackage()); 822c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append("/0x"); 823c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append(Integer.toHexString(contentView.getLayoutId())); 824c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato } else { 825c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append("null"); 826c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato } 8272561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler // TODO(dsandler): defaults take precedence over local values, so reorder the branches below 828c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append(" vibrate="); 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.vibrate != null) { 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = this.vibrate.length-1; 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("["); 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(this.vibrate[i]); 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(','); 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8368cf97d9982aae6197e48aabf2a3ada79fb39a041Simon Schoar if (N != -1) { 8378cf97d9982aae6197e48aabf2a3ada79fb39a041Simon Schoar sb.append(this.vibrate[N]); 8388cf97d9982aae6197e48aabf2a3ada79fb39a041Simon Schoar } 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("]"); 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if ((this.defaults & DEFAULT_VIBRATE) != 0) { 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("default"); 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("null"); 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" sound="); 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.sound != null) { 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(this.sound.toString()); 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if ((this.defaults & DEFAULT_SOUND) != 0) { 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("default"); 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("null"); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" defaults=0x"); 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(Integer.toHexString(this.defaults)); 8552561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" flags=0x"); 856e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler sb.append(Integer.toHexString(this.flags)); 8572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" kind=["); 8582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (this.kind == null) { 8592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append("null"); 8602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } else { 8612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler for (int i=0; i<this.kind.length; i++) { 8622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (i>0) sb.append(","); 8632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(this.kind[i]); 8642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 865e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } 866a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append("]"); 867a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (actions != null) { 868a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(" "); 869a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(actions.length); 870a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(" action"); 871a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (actions.length > 1) sb.append("s"); 872a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 873a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(")"); 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 87646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 877cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 8782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Builder class for {@link Notification} objects. 8792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 8802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Provides a convenient way to set the various fields of a {@link Notification} and generate 8812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * content views using the platform's notification layout template. 8822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 8832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Example: 8842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 8852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <pre class="prettyprint"> 8862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification noti = new Notification.Builder() 8872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setContentTitle("New mail from " + sender.toString()) 8882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setContentText(subject) 8892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setSmallIcon(R.drawable.new_mail) 8902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setLargeIcon(aBitmap) 891fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * .build(); 8922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * </pre> 893cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 89446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public static class Builder { 89546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private Context mContext; 89646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 89746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private long mWhen; 89846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mSmallIcon; 89946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mSmallIconLevel; 9008595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato private int mNumber; 90146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mContentTitle; 90246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mContentText; 90346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mContentInfo; 904f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private CharSequence mSubText; 90546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private PendingIntent mContentIntent; 90646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews mContentView; 90746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private PendingIntent mDeleteIntent; 90846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private PendingIntent mFullScreenIntent; 90946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mTickerText; 91046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews mTickerView; 91146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private Bitmap mLargeIcon; 91246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private Uri mSound; 91346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mAudioStreamType; 91446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private long[] mVibrate; 91546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mLedArgb; 91646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mLedOnMs; 91746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mLedOffMs; 91846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mDefaults; 91946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mFlags; 9201c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey private int mProgressMax; 9211c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey private int mProgress; 9221c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey private boolean mProgressIndeterminate; 9232561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private ArrayList<String> mKindList = new ArrayList<String>(1); 9242561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private Bundle mExtras; 9252561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private int mPriority; 926a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private ArrayList<Action> mActions = new ArrayList<Action>(3); 927a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler private boolean mUseChronometer; 928fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren private Style mStyle; 92946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 930cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 9312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Constructs a new Builder with the defaults: 932cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 9332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <table> 9352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <tr><th align=right>priority</th> 9362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <td>{@link #PRIORITY_DEFAULT}</td></tr> 9372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <tr><th align=right>when</th> 9382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <td>now ({@link System#currentTimeMillis()})</td></tr> 9392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <tr><th align=right>audio stream</th> 9402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <td>{@link #STREAM_DEFAULT}</td></tr> 9412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * </table> 942cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 9432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @param context 9452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A {@link Context} that will be used by the Builder to construct the 9462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * RemoteViews. The Context will not be held past the lifetime of this Builder 9472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * object. 948cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 94946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder(Context context) { 95046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContext = context; 951110988c8b70f4ab089b179b7966497d508506263Andy Stadler 952110988c8b70f4ab089b179b7966497d508506263Andy Stadler // Set defaults to match the defaults of a Notification 95346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mWhen = System.currentTimeMillis(); 954110988c8b70f4ab089b179b7966497d508506263Andy Stadler mAudioStreamType = STREAM_DEFAULT; 9552561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mPriority = PRIORITY_DEFAULT; 95646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 95746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 958cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 9592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add a timestamp pertaining to the notification (usually the time the event occurred). 9602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 9612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#when 963cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 96446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setWhen(long when) { 96546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mWhen = when; 96646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 96746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 96846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 969cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 970a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler * Show the {@link Notification#when} field as a countdown (or count-up) timer instead of a timestamp. 971a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler * 972a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler * @see Notification#when 973a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler */ 974a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler public Builder setUsesChronometer(boolean b) { 975a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler mUseChronometer = b; 976a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler return this; 977a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler } 978a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler 979a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler /** 9802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the small icon resource, which will be used to represent the notification in the 9812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * status bar. 982cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 9832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The platform template for the expanded view will draw this icon in the left, unless a 9852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link #setLargeIcon(Bitmap) large icon} has also been specified, in which case the small 9862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * icon will be moved to the right-hand side. 9872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 9882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @param icon 9902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A resource ID in the application's package of the drawable to use. 9912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#icon 992cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 99346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setSmallIcon(int icon) { 99446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSmallIcon = icon; 99546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 99646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 99746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 998cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 999cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * A variant of {@link #setSmallIcon(int) setSmallIcon(int)} that takes an additional 1000cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * level parameter for when the icon is a {@link android.graphics.drawable.LevelListDrawable 1001cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * LevelListDrawable}. 1002cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 10032561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @param icon A resource ID in the application's package of the drawable to use. 1004cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @param level The level to use for the icon. 1005cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 10062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#icon 10072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#iconLevel 1008cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 100946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setSmallIcon(int icon, int level) { 101046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSmallIcon = icon; 101146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSmallIconLevel = level; 101246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 101346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 101446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1015cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the first line of text in the platform notification template. 1017cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 101846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentTitle(CharSequence title) { 101946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentTitle = title; 102046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 102146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 102246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1023cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10242561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the second line of text in the platform notification template. 1025cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 102646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentText(CharSequence text) { 102746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentText = text; 102846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 102946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 103046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1031cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1032f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Set the third line of text in the platform notification template. 1033f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Don't use if you're also using {@link #setProgress(int, int, boolean)}; they occupy the same location in the standard template. 1034f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 1035f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public Builder setSubText(CharSequence text) { 1036f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mSubText = text; 1037f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return this; 1038f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1039f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1040f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 1041cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set the large number at the right-hand side of the notification. This is 1042cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * equivalent to setContentInfo, although it might show the number in a different 1043cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * font size for readability. 1044cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 10458595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato public Builder setNumber(int number) { 10468595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato mNumber = number; 10478595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato return this; 10488595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato } 10498595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato 1050cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10512561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A small piece of additional information pertaining to this notification. 10522561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The platform template will draw this on the last line of the notification, at the far 10542561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * right (to the right of a smallIcon if it has been placed there). 1055cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 105646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentInfo(CharSequence info) { 105746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentInfo = info; 105846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 105946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 106046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1061cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the progress this notification represents. 10632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The platform template will represent this using a {@link ProgressBar}. 10651c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey */ 10661c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey public Builder setProgress(int max, int progress, boolean indeterminate) { 10671c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey mProgressMax = max; 10681c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey mProgress = progress; 10691c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey mProgressIndeterminate = indeterminate; 10701c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey return this; 10711c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } 10721c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey 10731c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey /** 10742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Supply a custom RemoteViews to use instead of the platform template. 10752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#contentView 1077cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 107846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContent(RemoteViews views) { 107946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentView = views; 108046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 108146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 108246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1083cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Supply a {@link PendingIntent} to be sent when the notification is clicked. 10852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * As of {@link android.os.Build.VERSION_CODES#HONEYCOMB}, if this field is unset and you 10872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * have specified a custom RemoteViews with {@link #setContent(RemoteViews)}, you can use 10882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link RemoteViews#setOnClickPendingIntent RemoteViews.setOnClickPendingIntent(int,PendingIntent)} 10892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * to assign PendingIntents to individual views in that custom layout (i.e., to create 1090f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * clickable buttons inside the notification view). 10912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#contentIntent Notification.contentIntent 1093cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 109446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentIntent(PendingIntent intent) { 109546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentIntent = intent; 109646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 109746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 109846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1099cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Supply a {@link PendingIntent} to send when the notification is cleared explicitly by the user. 11012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#deleteIntent 1103cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 110446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setDeleteIntent(PendingIntent intent) { 110546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mDeleteIntent = intent; 110646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 110746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 110846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1109cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1110cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * An intent to launch instead of posting the notification to the status bar. 1111cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Only for use with extremely high-priority notifications demanding the user's 1112cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <strong>immediate</strong> attention, such as an incoming phone call or 1113cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * alarm clock that the user has explicitly set to a particular time. 1114cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * If this facility is used for something else, please give the user an option 1115cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * to turn it off and use a normal notification, as this can be extremely 1116cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * disruptive. 1117cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 1118cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @param intent The pending intent to launch. 1119cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @param highPriority Passing true will cause this notification to be sent 1120cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * even if other notifications are suppressed. 11212561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#fullScreenIntent 1123cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 112446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) { 112546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mFullScreenIntent = intent; 112646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato setFlag(FLAG_HIGH_PRIORITY, highPriority); 112746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 112846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 112946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1130cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the "ticker" text which is displayed in the status bar when the notification first 1132cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * arrives. 11332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#tickerText 1135cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 113646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setTicker(CharSequence tickerText) { 113746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mTickerText = tickerText; 113846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 113946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 114046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1141cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1142cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set the text that is displayed in the status bar when the notification first 1143cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * arrives, and also a RemoteViews object that may be displayed instead on some 1144cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * devices. 11452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#tickerText 11472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#tickerView 1148cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 114946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setTicker(CharSequence tickerText, RemoteViews views) { 115046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mTickerText = tickerText; 115146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mTickerView = views; 115246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 115346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 115446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1155cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11562561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add a large icon to the notification (and the ticker on some devices). 11572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * In the platform template, this image will be shown on the left of the notification view 11592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * in place of the {@link #setSmallIcon(int) small icon} (which will move to the right side). 11602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#largeIcon 1162cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 116346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setLargeIcon(Bitmap icon) { 116446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLargeIcon = icon; 116546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 116646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 116746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1168cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the sound to play. 11702561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11712561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * It will be played on the {@link #STREAM_DEFAULT default stream} for notifications. 11722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#sound 1174cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 117552f80cd36f406725e85a1825741a45c69de3d898Joe Onorato public Builder setSound(Uri sound) { 117652f80cd36f406725e85a1825741a45c69de3d898Joe Onorato mSound = sound; 117752f80cd36f406725e85a1825741a45c69de3d898Joe Onorato mAudioStreamType = STREAM_DEFAULT; 117852f80cd36f406725e85a1825741a45c69de3d898Joe Onorato return this; 117952f80cd36f406725e85a1825741a45c69de3d898Joe Onorato } 118052f80cd36f406725e85a1825741a45c69de3d898Joe Onorato 1181cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the sound to play, along with a specific stream on which to play it. 1183cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 11842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * See {@link android.media.AudioManager} for the <code>STREAM_</code> constants. 11852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#sound 1187cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 118846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setSound(Uri sound, int streamType) { 118946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSound = sound; 119046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mAudioStreamType = streamType; 119146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 119246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 119346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1194cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1195cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set the vibration pattern to use. 1196cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 11972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 11982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * See {@link android.os.Vibrator#vibrate(long[], int)} for a discussion of the 11992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <code>pattern</code> parameter. 12002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#vibrate 1203cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 120446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setVibrate(long[] pattern) { 120546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mVibrate = pattern; 120646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 120746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 120846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1209cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the desired color for the indicator LED on the device, as well as the 12112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * blink duty cycle (specified in milliseconds). 12122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Not all devices will honor all (or even any) of these values. 12152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#ledARGB 12182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#ledOnMS 12192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#ledOffMS 1220cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 122146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setLights(int argb, int onMs, int offMs) { 122246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLedArgb = argb; 122346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLedOnMs = onMs; 122446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLedOffMs = offMs; 122546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 122646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 122746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1228cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12292561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set whether this is an "ongoing" notification. 1230cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 12312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Ongoing notifications cannot be dismissed by the user, so your application or service 12332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * must take care of canceling them. 12342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * They are typically used to indicate a background task that the user is actively engaged 12372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * with (e.g., playing music) or is pending in some way and therefore occupying the device 12382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * (e.g., a file download, sync operation, active network connection). 12392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#FLAG_ONGOING_EVENT 12422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Service#setForeground(boolean) 1243cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 124446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setOngoing(boolean ongoing) { 124546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato setFlag(FLAG_ONGOING_EVENT, ongoing); 124646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 124746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 124846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1249cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1250cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set this flag if you would only like the sound, vibrate 1251cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * and ticker to be played if the notification is not already showing. 12522561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#FLAG_ONLY_ALERT_ONCE 1254cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 125546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setOnlyAlertOnce(boolean onlyAlertOnce) { 125646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato setFlag(FLAG_ONLY_ALERT_ONCE, onlyAlertOnce); 125746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 125846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 125946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1260cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Make this notification automatically dismissed when the user touches it. The 12622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * PendingIntent set with {@link #setDeleteIntent} will be sent when this happens. 12632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#FLAG_AUTO_CANCEL 1265cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 126646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setAutoCancel(boolean autoCancel) { 1267281d83f61f4036503ded1a967b8b43bfbaa373d0Joe Onorato setFlag(FLAG_AUTO_CANCEL, autoCancel); 126846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 126946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 127046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1271cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set which notification properties will be inherited from system defaults. 1273cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <p> 1274cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * The value should be one or more of the following fields combined with 1275cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * bitwise-or: 1276cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * {@link #DEFAULT_SOUND}, {@link #DEFAULT_VIBRATE}, {@link #DEFAULT_LIGHTS}. 1277cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <p> 1278cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * For all default values, use {@link #DEFAULT_ALL}. 1279cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 128046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setDefaults(int defaults) { 128146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mDefaults = defaults; 128246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 128346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 128446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 12852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 12862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the priority of this notification. 12872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#priority 12892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 12902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public Builder setPriority(int pri) { 12912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mPriority = pri; 12922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler return this; 12932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 12942561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 12962561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add a kind (category) to this notification. Optional. 12972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#kind 12992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 13002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public Builder addKind(String k) { 13012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mKindList.add(k); 13022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler return this; 13032561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 13042561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 13052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 13062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add metadata to this notification. 13072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13082561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A reference to the Bundle is held for the lifetime of this Builder, and the Bundle's 1309fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * current contents are copied into the Notification each time {@link #build()} is 13102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * called. 13112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#extras 13132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @hide 13142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 13152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public Builder setExtras(Bundle bag) { 13162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mExtras = bag; 13172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler return this; 13182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 13192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 1320a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler /** 1321a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * Add an action to this notification. Actions are typically displayed by 1322a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * the system as a button adjacent to the notification content. 1323a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * 1324a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @param icon Resource ID of a drawable that represents the action. 1325a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @param title Text describing the action. 1326a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @param intent PendingIntent to be fired when the action is invoked. 1327a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler */ 1328a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Builder addAction(int icon, CharSequence title, PendingIntent intent) { 1329a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler mActions.add(new Action(icon, title, intent)); 1330a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return this; 1331a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 1332a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 1333fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1334fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Add a rich notification style to be applied at build time. 1335fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * 1336fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * @param style Object responsible for modifying the notification style. 1337fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1338fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public Builder setStyle(Style style) { 1339fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mStyle != style) { 1340fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren mStyle = style; 1341fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren mStyle.setBuilder(this); 1342fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1343fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return this; 1344fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1345fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 134646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private void setFlag(int mask, boolean value) { 134746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (value) { 134846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mFlags |= mask; 134946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } else { 135046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mFlags &= ~mask; 135146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 135246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 135346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1354f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private RemoteViews applyStandardTemplate(int resId) { 1355561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato RemoteViews contentView = new RemoteViews(mContext.getPackageName(), resId); 13561c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey boolean hasLine3 = false; 1357f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler boolean hasLine2 = false; 1358f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler int smallIconImageViewId = R.id.icon; 1359f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (mLargeIcon != null) { 1360f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setImageViewBitmap(R.id.icon, mLargeIcon); 1361f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler smallIconImageViewId = R.id.right_icon; 1362f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1363561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mSmallIcon != 0) { 1364f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setImageViewResource(smallIconImageViewId, mSmallIcon); 1365f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(smallIconImageViewId, View.VISIBLE); 13661c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } else { 1367f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(smallIconImageViewId, View.GONE); 1368561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1369561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentTitle != null) { 1370561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.title, mContentTitle); 1371561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1372561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentText != null) { 1373f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setTextViewText( 1374f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler (mSubText != null) ? R.id.text2 : R.id.text, 1375f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mContentText); 13761c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey hasLine3 = true; 1377561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1378561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentInfo != null) { 1379561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.info, mContentInfo); 13801c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey contentView.setViewVisibility(R.id.info, View.VISIBLE); 13811c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey hasLine3 = true; 1382561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else if (mNumber > 0) { 1383ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler final int tooBig = mContext.getResources().getInteger( 1384ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler R.integer.status_bar_notification_info_maxnum); 1385ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler if (mNumber > tooBig) { 1386ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler contentView.setTextViewText(R.id.info, mContext.getResources().getString( 1387ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler R.string.status_bar_notification_info_overflow)); 1388059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato } else { 1389059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato NumberFormat f = NumberFormat.getIntegerInstance(); 1390059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato contentView.setTextViewText(R.id.info, f.format(mNumber)); 1391059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato } 13921c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey contentView.setViewVisibility(R.id.info, View.VISIBLE); 13931c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey hasLine3 = true; 1394561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else { 1395561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setViewVisibility(R.id.info, View.GONE); 1396561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1397f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1398f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (mSubText != null) { 1399f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setTextViewText(R.id.text, mSubText); 1400d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.text2, 1401d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mContentText != null ? View.VISIBLE : View.GONE); 14021c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } else { 1403f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.text2, View.GONE); 1404f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (mProgressMax != 0 || mProgressIndeterminate) { 1405f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setProgressBar( 1406f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler R.id.progress, mProgressMax, mProgress, mProgressIndeterminate); 1407f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.progress, View.VISIBLE); 1408f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } else { 1409f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.progress, View.GONE); 1410f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 14111c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } 1412561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mWhen != 0) { 1413a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler if (mUseChronometer) { 1414a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setViewVisibility(R.id.chronometer, View.VISIBLE); 1415a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setLong(R.id.chronometer, "setBase", 1416a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler mWhen + (SystemClock.elapsedRealtime() - System.currentTimeMillis())); 1417a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setBoolean(R.id.chronometer, "setStarted", true); 1418a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler } else { 1419a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setViewVisibility(R.id.time, View.VISIBLE); 1420a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setLong(R.id.time, "setTime", mWhen); 1421a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler } 1422561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 14231c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey contentView.setViewVisibility(R.id.line3, hasLine3 ? View.VISIBLE : View.GONE); 1424561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato return contentView; 1425561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1426561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato 142796fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler private RemoteViews applyStandardTemplateWithActions(int layoutId) { 142896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler RemoteViews big = applyStandardTemplate(layoutId); 142996fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 143096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler int N = mActions.size(); 143196fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler if (N > 0) { 1432d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren // Log.d("Notification", "has actions: " + mContentText); 143396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler big.setViewVisibility(R.id.actions, View.VISIBLE); 143496fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler if (N>3) N=3; 143596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler for (int i=0; i<N; i++) { 143696fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler final RemoteViews button = generateActionButton(mActions.get(i)); 1437d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren //Log.d("Notification", "adding action " + i + ": " + mActions.get(i).title); 143896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler big.addView(R.id.actions, button); 143996fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 144096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 144196fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler return big; 144296fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 144396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 144446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews makeContentView() { 144546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (mContentView != null) { 144646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return mContentView; 144746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } else { 144896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler return applyStandardTemplate(R.layout.notification_template_base); // no more special large_icon flavor 144946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 145046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 145146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 145246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews makeTickerView() { 145346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (mTickerView != null) { 145446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return mTickerView; 145546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } else { 1456561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentView == null) { 1457f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return applyStandardTemplate(mLargeIcon == null 1458561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato ? R.layout.status_bar_latest_event_ticker 1459561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato : R.layout.status_bar_latest_event_ticker_large_icon); 1460561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else { 1461561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato return null; 1462561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 146346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 146446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 146546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 146696fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler private RemoteViews makeBigContentView() { 146796fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler if (mActions.size() == 0) return null; 146896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 1469b023bf85a080442117b5dae8d402bce60cd0a610Chris Wren return applyStandardTemplateWithActions(R.layout.notification_template_big_base); 147096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 147196fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 147296fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler private RemoteViews generateActionButton(Action action) { 147396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler RemoteViews button = new RemoteViews(mContext.getPackageName(), R.layout.notification_action); 147496fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setTextViewCompoundDrawables(R.id.action0, action.icon, 0, 0, 0); 147596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setTextViewText(R.id.action0, action.title); 147696fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setOnClickPendingIntent(R.id.action0, action.actionIntent); 147796fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setContentDescription(R.id.action0, action.title); 147896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler return button; 147996fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 148096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 1481cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1482fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Apply the unstyled operations and return a new {@link Notification} object. 1483cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 1484fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren private Notification buildUnstyled() { 148546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato Notification n = new Notification(); 148646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.when = mWhen; 148746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.icon = mSmallIcon; 148846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.iconLevel = mSmallIconLevel; 14898595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato n.number = mNumber; 149046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.contentView = makeContentView(); 149146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.contentIntent = mContentIntent; 149246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.deleteIntent = mDeleteIntent; 149346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.fullScreenIntent = mFullScreenIntent; 149446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.tickerText = mTickerText; 149546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.tickerView = makeTickerView(); 149646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.largeIcon = mLargeIcon; 149746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.sound = mSound; 149846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.audioStreamType = mAudioStreamType; 149946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.vibrate = mVibrate; 150046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.ledARGB = mLedArgb; 150146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.ledOnMS = mLedOnMs; 150246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.ledOffMS = mLedOffMs; 150346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.defaults = mDefaults; 150446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.flags = mFlags; 150596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler n.bigContentView = makeBigContentView(); 15068d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (mLedOnMs != 0 && mLedOffMs != 0) { 15078d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato n.flags |= FLAG_SHOW_LIGHTS; 15088d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 15098d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if ((mDefaults & DEFAULT_LIGHTS) != 0) { 15108d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato n.flags |= FLAG_SHOW_LIGHTS; 15118d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 15122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (mKindList.size() > 0) { 15132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.kind = new String[mKindList.size()]; 15142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mKindList.toArray(n.kind); 15152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } else { 15162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.kind = null; 15172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 15182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.priority = mPriority; 15192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.extras = mExtras != null ? new Bundle(mExtras) : null; 1520a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (mActions.size() > 0) { 1521a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler n.actions = new Action[mActions.size()]; 1522a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler mActions.toArray(n.actions); 1523a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 152446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return n; 152546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 1526fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1527fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1528fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * @deprecated Use {@link #build()} instead. 1529fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1530fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Deprecated 1531fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public Notification getNotification() { 1532fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return build(); 1533fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1534fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1535fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1536fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Combine all of the options that have been set and return a new {@link Notification} 1537fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * object. 1538fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1539fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public Notification build() { 1540fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mStyle != null) { 1541fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return mStyle.build(); 1542fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } else { 1543fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return buildUnstyled(); 1544fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1545fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1546fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1547fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1548fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1549fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1550fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * An object that can apply a rich notification style to a {@link Notification.Builder} 1551fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * object. 1552fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1553d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public static abstract class Style 1554d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren { 1555d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren private CharSequence mBigContentTitle; 1556d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren private CharSequence mSummaryText = null; 1557d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1558fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren protected Builder mBuilder; 1559fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1560d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1561d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1562d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1563d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1564d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected void internalSetBigContentTitle(CharSequence title) { 1565d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mBigContentTitle = title; 1566d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1567d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1568d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1569d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1570d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1571d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected void internalSetSummaryText(CharSequence cs) { 1572d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mSummaryText = cs; 1573d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1574d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1575fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public void setBuilder(Builder builder) { 1576fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mBuilder != builder) { 1577fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren mBuilder = builder; 1578fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren mBuilder.setStyle(this); 1579fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1580fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1581fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1582d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected void checkBuilder() { 1583fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mBuilder == null) { 1584fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren throw new IllegalArgumentException("Style requires a valid Builder object"); 1585fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1586fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1587d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1588d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected RemoteViews getStandardView(int layoutId) { 1589d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1590d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1591d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mBigContentTitle != null) { 1592d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mBuilder.setContentTitle(mBigContentTitle); 1593d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1594d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1595d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mBuilder.mSubText == null) { 1596d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mBuilder.setContentText(null); 1597d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1598d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1599d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(layoutId); 1600d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1601d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mBuilder.mSubText == null) { 1602d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.line3, View.GONE); 1603d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1604d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1605d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mBigContentTitle != null && mBigContentTitle.equals("")) { 1606d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.line1, View.GONE); 1607d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1608d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1609d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mSummaryText != null && !mSummaryText.equals("")) { 1610d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.overflow_title, View.VISIBLE); 1611d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setTextViewText(R.id.overflow_title, mSummaryText); 1612d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1613d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1614d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return contentView; 1615d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1616d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1617d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public abstract Notification build(); 161846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 1619f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1620f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 16214dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * Helper class for generating large-format notifications that include a large image attachment. 1622f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * 16234dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so: 1624f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * <pre class="prettyprint"> 1625f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Notification noti = new Notification.BigPictureStyle( 1626f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * new Notification.Builder() 16274dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * .setContentTitle("New photo from " + sender.toString()) 1628f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setContentText(subject) 16294dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * .setSmallIcon(R.drawable.new_post) 1630f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setLargeIcon(aBitmap)) 1631f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .bigPicture(aBigBitmap) 1632f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .build(); 1633f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * </pre> 16344dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * 16354dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * @see Notification#bigContentView 1636f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 1637fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public static class BigPictureStyle extends Style { 1638f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private Bitmap mPicture; 1639f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1640fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public BigPictureStyle() { 1641fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1642fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1643f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigPictureStyle(Builder builder) { 1644fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren setBuilder(builder); 1645f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1646f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1647d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1648d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1649d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1650d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1651d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigPictureStyle setBigContentTitle(CharSequence title) { 1652d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetBigContentTitle(title); 1653d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1654d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1655d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1656d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1657d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1658d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1659d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigPictureStyle setSummaryText(CharSequence cs) { 1660d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetSummaryText(cs); 1661d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1662d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1663d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1664f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigPictureStyle bigPicture(Bitmap b) { 1665f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mPicture = b; 1666f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return this; 1667f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1668f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1669f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private RemoteViews makeBigContentView() { 1670d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = getStandardView(R.layout.notification_template_big_picture); 1671f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1672f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setImageViewBitmap(R.id.big_picture, mPicture); 1673f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1674f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return contentView; 1675f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1676f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1677fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Override 1678f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public Notification build() { 1679d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1680fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren Notification wip = mBuilder.buildUnstyled(); 1681f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler wip.bigContentView = makeBigContentView(); 1682f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return wip; 1683f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1684f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1685f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1686f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 16874dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * Helper class for generating large-format notifications that include a lot of text. 1688f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * 16894dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so: 1690f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * <pre class="prettyprint"> 1691f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Notification noti = new Notification.BigPictureStyle( 1692f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * new Notification.Builder() 1693f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setContentTitle("New mail from " + sender.toString()) 1694f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setContentText(subject) 1695f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setSmallIcon(R.drawable.new_mail) 1696f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setLargeIcon(aBitmap)) 1697f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .bigText(aVeryLongString) 1698f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .build(); 1699f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * </pre> 17004dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * 17014dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * @see Notification#bigContentView 1702f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 1703fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public static class BigTextStyle extends Style { 1704f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private CharSequence mBigText; 1705f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1706fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public BigTextStyle() { 1707fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1708fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1709f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigTextStyle(Builder builder) { 1710fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren setBuilder(builder); 1711f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1712f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1713d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1714d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1715d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1716d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1717d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigTextStyle setBigContentTitle(CharSequence title) { 1718d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetBigContentTitle(title); 1719d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1720d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1721d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1722d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1723d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1724d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1725d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigTextStyle setSummaryText(CharSequence cs) { 1726d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetSummaryText(cs); 1727d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1728d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1729d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1730f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigTextStyle bigText(CharSequence cs) { 1731f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mBigText = cs; 1732f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return this; 1733f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1734f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1735f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private RemoteViews makeBigContentView() { 1736d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = getStandardView(R.layout.notification_template_big_text); 1737f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setTextViewText(R.id.big_text, mBigText); 1738f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.big_text, View.VISIBLE); 17393c5f92432734e1e3b9bdc515628a4c09d7759cd4Chris Wren contentView.setViewVisibility(R.id.text2, View.GONE); 1740f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1741f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return contentView; 1742f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1743f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1744fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Override 1745f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public Notification build() { 1746d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1747fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren Notification wip = mBuilder.buildUnstyled(); 1748f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler wip.bigContentView = makeBigContentView(); 1749f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return wip; 1750f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1751f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1752879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1753879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler /** 1754879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * Helper class for generating large-format notifications that include a list of (up to 5) strings. 1755879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * 1756879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so: 1757879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * <pre class="prettyprint"> 1758fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Notification noti = new Notification.InboxStyle( 1759879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * new Notification.Builder() 1760d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * .setContentTitle("5 New mails from " + sender.toString()) 1761879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .setContentText(subject) 1762879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .setSmallIcon(R.drawable.new_mail) 1763879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .setLargeIcon(aBitmap)) 1764879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .addLine(str1) 1765879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .addLine(str2) 1766d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * .setContentTitle("") 1767d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * .setSummaryText("+3 more") 1768879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .build(); 1769879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * </pre> 1770879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * 1771879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * @see Notification#bigContentView 1772879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler */ 1773fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public static class InboxStyle extends Style { 1774879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler private ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(5); 1775879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1776fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public InboxStyle() { 1777fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1778fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1779879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler public InboxStyle(Builder builder) { 1780fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren setBuilder(builder); 1781879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1782879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1783d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1784d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1785d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1786d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1787d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public InboxStyle setBigContentTitle(CharSequence title) { 1788d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetBigContentTitle(title); 1789d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1790d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1791d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1792d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1793d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1794d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1795d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public InboxStyle setSummaryText(CharSequence cs) { 1796d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetSummaryText(cs); 1797d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1798d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1799d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1800879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler public InboxStyle addLine(CharSequence cs) { 1801879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler mTexts.add(cs); 1802879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler return this; 1803879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1804879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1805879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler private RemoteViews makeBigContentView() { 1806d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = getStandardView(R.layout.notification_template_inbox); 1807d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.text2, View.GONE); 1808d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1809d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren int[] rowIds = {R.id.inbox_text0, R.id.inbox_text1, R.id.inbox_text2, R.id.inbox_text3, 1810d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren R.id.inbox_text4}; 1811879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1812879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler int i=0; 1813879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler while (i < mTexts.size() && i < rowIds.length) { 1814879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler CharSequence str = mTexts.get(i); 1815879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler if (str != null && !str.equals("")) { 1816879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler contentView.setViewVisibility(rowIds[i], View.VISIBLE); 1817879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler contentView.setTextViewText(rowIds[i], str); 1818879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1819879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler i++; 1820879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1821879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1822879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler return contentView; 1823879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1824879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1825fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Override 1826879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler public Notification build() { 1827d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1828fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren Notification wip = mBuilder.buildUnstyled(); 1829879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler wip.bigContentView = makeBigContentView(); 1830879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler return wip; 1831879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1832879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1834