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; 239f7936a30bc097c31962891945802507cb4aeb82Daniel Sandlerimport android.content.res.Resources; 24ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onoratoimport android.graphics.Bitmap; 25098d580cc2bb6c0891c756a4e5230c6c6b0d2376Jeff Sharkeyimport android.media.AudioManager; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 272561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandlerimport android.os.Bundle; 28a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandlerimport android.os.IBinder; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 31a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandlerimport android.os.SystemClock; 326d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkeyimport android.os.UserHandle; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 34a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandlerimport android.util.IntProperty; 3596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandlerimport android.util.Log; 369f7936a30bc097c31962891945802507cb4aeb82Daniel Sandlerimport android.util.Slog; 379f7936a30bc097c31962891945802507cb4aeb82Daniel Sandlerimport android.util.TypedValue; 388595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onoratoimport android.view.View; 391c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkeyimport android.widget.ProgressBar; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RemoteViews; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42110988c8b70f4ab089b179b7966497d508506263Andy Stadlerimport java.text.NumberFormat; 432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandlerimport java.util.ArrayList; 44561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class that represents how a persistent notification is to be presented to 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user using the {@link android.app.NotificationManager}. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <p>The {@link Notification.Builder Notification.Builder} has been added to make it 50cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * easier to construct Notifications.</p> 51cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 52558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <div class="special reference"> 53558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <h3>Developer Guides</h3> 54558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <p>For a guide to creating notifications, read the 55558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a> 56558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * developer guide.</p> 57558459fe85f56f29a6ed6a4d0adb4a0bd6665884Joe Fernandez * </div> 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Notification implements Parcelable 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use all default values (where applicable). 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_ALL = ~0; 652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use the default notification sound. This will ignore any given 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #sound}. 692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 702561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #defaults 722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_SOUND = 1; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use the default notification vibrate. This will ignore any given 782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link #vibrate}. Using phone vibration requires the 79b8b3645a9799c38ad68549316ebbf7a4849f2e0cScott Main * {@link android.Manifest.permission#VIBRATE VIBRATE} permission. 802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #defaults 822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_VIBRATE = 2; 852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use the default notification lights. This will ignore the 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #FLAG_SHOW_LIGHTS} bit, and {@link #ledARGB}, {@link #ledOffMS}, or 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #ledOnMS}. 902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #defaults 922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DEFAULT_LIGHTS = 4; 952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A timestamp related to this notification, in milliseconds since the epoch. 982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Default value: {@link System#currentTimeMillis() Now}. 1002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Choose a timestamp that will be most relevant to the user. For most finite events, this 1022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * corresponds to the time the event happened (or will happen, in the case of events that have 1032561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * yet to occur but about which the user is being informed). Indefinite events should be 1042561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * timestamped according to when the activity began. 1052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Some examples: 1072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1082561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <ul> 1092561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of a new chat message should be stamped when the message was received.</li> 1102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an ongoing file download (with a progress bar, for example) should be stamped when the download started.</li> 1112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of a completed file download should be stamped when the download finished.</li> 1122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an upcoming meeting should be stamped with the time the meeting will begin (that is, in the future).</li> 1132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an ongoing stopwatch (increasing timer) should be stamped with the watch's start time. 1142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <li>Notification of an ongoing countdown timer should be stamped with the timer's end time. 1152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * </ul> 1162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long when; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resource id of a drawable to use as the icon in the status bar. 122d952daec06018fe7064b8cafd31dfc71f9eee383Daniel Sandler * This is required; notifications with an invalid icon resource will not be shown. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int icon; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * If the icon in the status bar is to have more than one level, you can set this. Otherwise, 12846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * leave it at its default value of 0. 12946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 13046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @see android.widget.ImageView#setImageLevel 13146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @see android.graphics.drawable#setLevel 13246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato */ 13346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public int iconLevel; 13446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 13546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato /** 1362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The number of events that this notification represents. For example, in a new mail 1372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * notification, this could be the number of unread messages. 1382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The system may or may not use this field to modify the appearance of the notification. For 1402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * example, before {@link android.os.Build.VERSION_CODES#HONEYCOMB}, this number was 1412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * superimposed over the icon in the status bar. Starting with 1422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, the template used by 1432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link Notification.Builder} has displayed the number in the expanded notification view. 1442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * If the number is 0 or negative, it is never shown. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int number; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The intent to execute when the expanded status entry is clicked. If 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is an activity, it must include the 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag, which requires 1537aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * that you take care of task management as described in the 1547aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back 1556ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * Stack</a> document. In particular, make sure to read the notification section 1566ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#HandlingNotifications">Handling 1576ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * Notifications</a> for the correct ways to launch an application from a 1586ceca588a268ed8fef4b32df278ca7567e608510Dianne Hackborn * notification. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent contentIntent; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The intent to execute when the notification is explicitly dismissed by the user, either with 1642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * the "Clear All" button or by swiping it away individually. 1652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 1662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * This probably shouldn't be launching an activity since several of those will be sent 1672561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * at the same time. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent deleteIntent; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 172170bae7d832e0fd68e1ee9d96893b97e1dd98c52Dianne Hackborn * An intent to launch instead of posting the notification to the status bar. 173cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 174cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @see Notification.Builder#setFullScreenIntent 175e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler */ 176e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler public PendingIntent fullScreenIntent; 177e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 178e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler /** 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Text to scroll across the screen when this item is added to 180ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato * the status bar on large and smaller devices. 181ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato * 18246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @see #tickerView 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence tickerText; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * The view to show as the ticker in the status bar when the notification 18846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * is posted. 189ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato */ 19046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public RemoteViews tickerView; 191ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato 192ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato /** 193e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler * The view that will represent this notification in the expanded status bar. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RemoteViews contentView; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 197a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler /** 1984dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * A large-format version of {@link #contentView}, giving the Notification an 199f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * opportunity to show more detail. The system UI may choose to show this 200f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * instead of the normal content view at its discretion. 201f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 202f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public RemoteViews bigContentView; 203f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 204f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 20546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * The bitmap that may escape the bounds of the panel and bar. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Bitmap largeIcon; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The sound to play. 2112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * To play the default notification sound, see {@link #defaults}. 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Uri sound; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use this constant as the value for audioStreamType to request that 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the default stream type for notifications be used. Currently the 221098d580cc2bb6c0891c756a4e5230c6c6b0d2376Jeff Sharkey * default stream type is {@link AudioManager#STREAM_NOTIFICATION}. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STREAM_DEFAULT = -1; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The audio stream type to use when playing the sound. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Should be one of the STREAM_ constants from 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.media.AudioManager}. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int audioStreamType = STREAM_DEFAULT; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The pattern with which to vibrate. 2342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To vibrate the default pattern, see {@link #defaults}. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.os.Vibrator#vibrate(long[],int) 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long[] vibrate; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The color of the led. The hardware will do its best approximation. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_SHOW_LIGHTS 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #flags 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ledARGB; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of milliseconds for the LED to be on while it's flashing. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hardware will do its best approximation. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_SHOW_LIGHTS 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #flags 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ledOnMS; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of milliseconds for the LED to be off while it's flashing. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hardware will do its best approximation. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #FLAG_SHOW_LIGHTS 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #flags 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int ledOffMS; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Specifies which values should be taken from the defaults. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To set, OR the desired from {@link #DEFAULT_SOUND}, 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #DEFAULT_VIBRATE}, {@link #DEFAULT_LIGHTS}. For all default 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values, use {@link #DEFAULT_ALL}. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int defaults; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if you want the LED on for this notification. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>To turn the LED off, pass 0 in the alpha channel for colorARGB 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or 0 for both ledOnMS and ledOffMS.</li> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>To turn the LED on, pass 1 for ledOnMS and 0 for ledOffMS.</li> 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>To flash the LED, pass the number of milliseconds that it should 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be on and off to ledOnMS and ledOffMS.</li> 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Since hardware varies, you are not guaranteed that any of the values 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you pass are honored exactly. Use the system defaults (TODO) if possible 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * because they will be set to values that work on any given hardware. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The alpha channel must be set for forward compatibility. 2952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_SHOW_LIGHTS = 0x00000001; 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if this notification is in reference to something that is ongoing, 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * like a phone call. It should not be set if this notification is in 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reference to something that happened at a particular point in time, 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * like a missed phone call. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_ONGOING_EVENT = 0x00000002; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that if set, 310b8b3645a9799c38ad68549316ebbf7a4849f2e0cScott Main * the audio will be repeated until the notification is 311b8b3645a9799c38ad68549316ebbf7a4849f2e0cScott Main * cancelled or the notification window is opened. 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_INSISTENT = 0x00000004; 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if you want the sound and/or vibration play each time the 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * notification is sent, even if it has not been canceled before that. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_ONLY_ALERT_ONCE = 0x00000008; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if the notification should be canceled when it is clicked by the 3252561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * user. On tablets, the 3262561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_AUTO_CANCEL = 0x00000010; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bit to be bitwise-ored into the {@link #flags} field that should be 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set if the notification should not be canceled when the user clicks 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Clear all button. 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FLAG_NO_CLEAR = 0x00000020; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 337d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn /** 338d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn * Bit to be bitwise-ored into the {@link #flags} field that should be 339d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn * set if this notification represents a currently running service. This 340d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn * will normally be set for you by {@link Service#startForeground}. 341d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn */ 342d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn public static final int FLAG_FOREGROUND_SERVICE = 0x00000040; 343d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn 344e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler /** 3452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Obsolete flag indicating high-priority notifications; use the priority field instead. 3462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 3472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @deprecated Use {@link #priority} with a positive value. 348e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler */ 3492561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int FLAG_HIGH_PRIORITY = 0x00000080; 350e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int flags; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3542561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Default notification {@link #priority}. If your application does not prioritize its own 3552561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * notifications, use this value for all notifications. 3562561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_DEFAULT = 0; 3582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Lower {@link #priority}, for items that are less important. The UI may choose to show these 3612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * items smaller, or at a different position in the list, compared with your app's 3622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link #PRIORITY_DEFAULT} items. 3632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_LOW = -1; 3652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3672561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Lowest {@link #priority}; these items might not be shown to the user except under special 3682561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * circumstances, such as detailed notification logs. 3692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3702561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_MIN = -2; 3712561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Higher {@link #priority}, for more important notifications or alerts. The UI may choose to 3742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * show these items larger, or at a different position in notification lists, compared with 3752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * your app's {@link #PRIORITY_DEFAULT} items. 3762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_HIGH = 1; 3782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Highest {@link #priority}, for your application's most important items that require the 3812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * user's prompt attention or input. 3822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final int PRIORITY_MAX = 2; 3842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3852561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 3862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Relative priority for this notification. 3872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 3882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Priority is an indication of how much of the user's valuable attention should be consumed by 3892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * this notification. Low-priority notifications may be hidden from the user in certain 3902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * situations, while the user might be interrupted for a higher-priority notification. The 3912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * system will make a determination about how to interpret notification priority as described in 3922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * MUMBLE MUMBLE. 3932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3942561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public int priority; 3952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 3962561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 397d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @hide 3982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: incoming call (voice or video) or similar synchronous communication request. 3992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_CALL = "android.call"; 4012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 403d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @hide 4042561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: incoming direct message (SMS, instant message, etc.). 4052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_MESSAGE = "android.message"; 4072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4082561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 409d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @hide 4102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: asynchronous bulk message (email). 4112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_EMAIL = "android.email"; 4132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 415d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @hide 4162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: calendar event. 4172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_EVENT = "android.event"; 4192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4202561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 421a90513d5f4e9f9ba20fca60bcf8548e23863c395Daniel Sandler * @hide 4222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Notification type: promotion or advertisement. 4232561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4242561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String KIND_PROMO = "android.promo"; 4252561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4262561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 427d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @hide 4282561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * If this notification matches of one or more special types (see the <code>KIND_*</code> 4292561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * constants), add them here, best match first. 4302561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public String[] kind; 4322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 4342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Extra key for people values (type TBD). 4352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 4362561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @hide 4372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 4382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public static final String EXTRA_PEOPLE = "android.people"; 4392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private Bundle extras; 4412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 4422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 443a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * Structure to encapsulate an "action", including title and icon, that can be attached to a Notification. 444a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @hide 445a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler */ 446a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private static class Action implements Parcelable { 447a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public int icon; 448a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public CharSequence title; 449a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public PendingIntent actionIntent; 450a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @SuppressWarnings("unused") 451a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action() { } 452a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private Action(Parcel in) { 453a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler icon = in.readInt(); 454a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 455a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (in.readInt() == 1) { 456a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler actionIntent = PendingIntent.CREATOR.createFromParcel(in); 457a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 458a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 459a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action(int icon_, CharSequence title_, PendingIntent intent_) { 460a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.icon = icon_; 461a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.title = title_; 462a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.actionIntent = intent_; 463a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 464a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @Override 465a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action clone() { 466a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return new Action( 467a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.icon, 468a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.title.toString(), 469a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler this.actionIntent // safe to alias 470a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler ); 471a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 472a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @Override 473a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public int describeContents() { 474a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return 0; 475a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 476a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler @Override 477a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public void writeToParcel(Parcel out, int flags) { 478a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler out.writeInt(icon); 479a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler TextUtils.writeToParcel(title, out, flags); 480a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (actionIntent != null) { 481a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler out.writeInt(1); 482a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler actionIntent.writeToParcel(out, flags); 483a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } else { 484a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler out.writeInt(0); 485a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 486a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 487a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public static final Parcelable.Creator<Action> CREATOR 488a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler = new Parcelable.Creator<Action>() { 489a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action createFromParcel(Parcel in) { 490a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return new Action(in); 491a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 492a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Action[] newArray(int size) { 493a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return new Action[size]; 494a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 495a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler }; 496a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 497a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 498a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler private Action[] actions; 499a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 500a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler /** 5012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Constructs a Notification object with default values. 50246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * You might want to consider using {@link Builder} instead. 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification() 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.when = System.currentTimeMillis(); 5072561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler this.priority = PRIORITY_DEFAULT; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification(Context context, int icon, CharSequence tickerText, long when, 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence contentTitle, CharSequence contentText, Intent contentIntent) 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.when = when; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.icon = icon; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.tickerText = tickerText; 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLatestEventInfo(context, contentTitle, contentText, 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PendingIntent.getActivity(context, 0, contentIntent, 0)); 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructs a Notification object with the information needed to 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * have a status bar icon without the standard expanded view. 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param icon The resource id of the icon to put in the status bar. 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tickerText The text that flows by in the status bar when the notification first 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activates. 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param when The time to show in the time field. In the System.currentTimeMillis 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * timebase. 53246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * 53346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @deprecated Use {@link Builder} instead. 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 53546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato @Deprecated 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification(int icon, CharSequence tickerText, long when) 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.icon = icon; 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.tickerText = tickerText; 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.when = when; 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unflatten the notification from a parcel. 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification(Parcel parcel) 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int version = parcel.readInt(); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = parcel.readLong(); 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icon = parcel.readInt(); 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = parcel.readInt(); 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentIntent = PendingIntent.CREATOR.createFromParcel(parcel); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteIntent = PendingIntent.CREATOR.createFromParcel(parcel); 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tickerText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 56346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato tickerView = RemoteViews.CREATOR.createFromParcel(parcel); 564ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } 565ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato if (parcel.readInt() != 0) { 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentView = RemoteViews.CREATOR.createFromParcel(parcel); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 568561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (parcel.readInt() != 0) { 569561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato largeIcon = Bitmap.CREATOR.createFromParcel(parcel); 570561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project defaults = parcel.readInt(); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flags = parcel.readInt(); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parcel.readInt() != 0) { 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sound = Uri.CREATOR.createFromParcel(parcel); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project audioStreamType = parcel.readInt(); 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vibrate = parcel.createLongArray(); 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ledARGB = parcel.readInt(); 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ledOnMS = parcel.readInt(); 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ledOffMS = parcel.readInt(); 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconLevel = parcel.readInt(); 583e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 584e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler if (parcel.readInt() != 0) { 585e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler fullScreenIntent = PendingIntent.CREATOR.createFromParcel(parcel); 586e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } 5872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 5882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler priority = parcel.readInt(); 589a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 5902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler kind = parcel.createStringArray(); // may set kind to null 5912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 5922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (parcel.readInt() != 0) { 5932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler extras = parcel.readBundle(); 5942561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 595a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 596a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler actions = parcel.createTypedArray(Action.CREATOR); 597a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (parcel.readInt() != 0) { 598f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler bigContentView = RemoteViews.CREATOR.createFromParcel(parcel); 599f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 602110988c8b70f4ab089b179b7966497d508506263Andy Stadler @Override 60318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public Notification clone() { 60418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato Notification that = new Notification(); 60518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 60618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.when = this.when; 60718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.icon = this.icon; 60818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.number = this.number; 60918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 61018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato // PendingIntents are global, so there's no reason (or way) to clone them. 61118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.contentIntent = this.contentIntent; 61218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.deleteIntent = this.deleteIntent; 613e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler that.fullScreenIntent = this.fullScreenIntent; 61418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 61518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (this.tickerText != null) { 61618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.tickerText = this.tickerText.toString(); 61718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 61846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (this.tickerView != null) { 61946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato that.tickerView = this.tickerView.clone(); 620ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } 62118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (this.contentView != null) { 62218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.contentView = this.contentView.clone(); 62318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 624561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (this.largeIcon != null) { 625561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato that.largeIcon = Bitmap.createBitmap(this.largeIcon); 626561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 627a8b9183a7cb4dca8d8e6507abc765c581bf67dcbJozef BABJAK that.iconLevel = this.iconLevel; 62818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.sound = this.sound; // android.net.Uri is immutable 62918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.audioStreamType = this.audioStreamType; 63018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 63118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato final long[] vibrate = this.vibrate; 63218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (vibrate != null) { 63318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato final int N = vibrate.length; 63418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato final long[] vib = that.vibrate = new long[N]; 63518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato System.arraycopy(vibrate, 0, vib, 0, N); 63618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 63718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 63818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.ledARGB = this.ledARGB; 63918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.ledOnMS = this.ledOnMS; 64018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.ledOffMS = this.ledOffMS; 64118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.defaults = this.defaults; 6422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 64318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato that.flags = this.flags; 64418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 6452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler that.priority = this.priority; 6462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 6472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler final String[] thiskind = this.kind; 6482561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (thiskind != null) { 6492561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler final int N = thiskind.length; 6502561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler final String[] thatkind = that.kind = new String[N]; 6512561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler System.arraycopy(thiskind, 0, thatkind, 0, N); 6522561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 6532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 6542561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (this.extras != null) { 6552561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler that.extras = new Bundle(this.extras); 6562561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 6572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 6582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 659a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler that.actions = new Action[this.actions.length]; 660a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler for(int i=0; i<this.actions.length; i++) { 661a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler that.actions[i] = this.actions[i].clone(); 662a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 663f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (this.bigContentView != null) { 664f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler that.bigContentView = this.bigContentView.clone(); 665f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 666a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 66718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato return that; 66818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 66918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flatten this notification from a parcel. 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel parcel, int flags) 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeLong(when); 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(icon); 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(number); 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentIntent != null) { 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentIntent.writeToParcel(parcel, 0); 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (deleteIntent != null) { 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteIntent.writeToParcel(parcel, 0); 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tickerText != null) { 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(tickerText, parcel, flags); 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 70246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (tickerView != null) { 703ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato parcel.writeInt(1); 70446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato tickerView.writeToParcel(parcel, 0); 705ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } else { 706ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato parcel.writeInt(0); 707ef1e7763c2dc5b9bac69cc747efe05c81d9fd9fcJoe Onorato } 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentView != null) { 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project contentView.writeToParcel(parcel, 0); 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 714561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (largeIcon != null) { 715561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato parcel.writeInt(1); 716561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato largeIcon.writeToParcel(parcel, 0); 717561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else { 718561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato parcel.writeInt(0); 719561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(defaults); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(this.flags); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sound != null) { 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(1); 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sound.writeToParcel(parcel, 0); 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(0); 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(audioStreamType); 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeLongArray(vibrate); 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(ledARGB); 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(ledOnMS); 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(ledOffMS); 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel.writeInt(iconLevel); 736e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler 737e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler if (fullScreenIntent != null) { 738e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler parcel.writeInt(1); 739e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler fullScreenIntent.writeToParcel(parcel, 0); 740e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } else { 741e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler parcel.writeInt(0); 742e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } 7432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 7442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeInt(priority); 7452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 7462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeStringArray(kind); // ok for null 7472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 7482561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (extras != null) { 7492561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeInt(1); 7502561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler extras.writeToParcel(parcel, 0); 7512561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } else { 7522561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler parcel.writeInt(0); 7532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 754a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 755a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler parcel.writeTypedArray(actions, 0); 756a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 757f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (bigContentView != null) { 758f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler parcel.writeInt(1); 759f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler bigContentView.writeToParcel(parcel, 0); 760f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } else { 761f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler parcel.writeInt(0); 762f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parcelable.Creator that instantiates Notification objects 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Notification> CREATOR 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Notification>() 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification createFromParcel(Parcel parcel) 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Notification(parcel); 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Notification[] newArray(int size) 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Notification[size]; 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the {@link #contentView} field to be a view with the standard "Latest Event" 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * layout. 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Uses the {@link #icon} and {@link #when} fields to set the icon and time fields 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the view.</p> 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The context for your application / activity. 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentTitle The title that goes in the expanded entry. 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentText The text that goes in the expanded entry. 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param contentIntent The intent to launch when the user clicks the expanded notification. 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this is an activity, it must include the 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag, which requires 7947aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * that you take care of task management as described in the 7957aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back 7967aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * Stack</a> document. 7972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 79846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato * @deprecated Use {@link Builder} instead. 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 80046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato @Deprecated 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLatestEventInfo(Context context, 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence contentTitle, CharSequence contentText, PendingIntent contentIntent) { 803cde8aae955f2c1074a840074a9f586f95c3f61f7Daniel Sandler // TODO: rewrite this to use Builder 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RemoteViews contentView = new RemoteViews(context.getPackageName(), 80596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler R.layout.notification_template_base); 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.icon != 0) { 807561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setImageViewResource(R.id.icon, this.icon); 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler if (priority < PRIORITY_LOW) { 810e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler contentView.setInt(R.id.icon, 811e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler "setBackgroundResource", R.drawable.notification_template_icon_low_bg); 812e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler contentView.setInt(R.id.status_bar_latest_event_content, 813e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler "setBackgroundResource", R.drawable.notification_bg_low); 814e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler } 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentTitle != null) { 816561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.title, contentTitle); 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (contentText != null) { 819561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.text, contentText); 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.when != 0) { 822cde8aae955f2c1074a840074a9f586f95c3f61f7Daniel Sandler contentView.setViewVisibility(R.id.time, View.VISIBLE); 823561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setLong(R.id.time, "setTime", when); 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 825b4b2223fa188d4f680209c80ba6bbe681a300bd5Daniel Sandler if (this.number != 0) { 826b4b2223fa188d4f680209c80ba6bbe681a300bd5Daniel Sandler NumberFormat f = NumberFormat.getIntegerInstance(); 827b4b2223fa188d4f680209c80ba6bbe681a300bd5Daniel Sandler contentView.setTextViewText(R.id.info, f.format(this.number)); 828b4b2223fa188d4f680209c80ba6bbe681a300bd5Daniel Sandler } 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.contentView = contentView; 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.contentIntent = contentIntent; 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(); 8372561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append("Notification(pri="); 8382561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(priority); 8392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" contentView="); 840c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato if (contentView != null) { 841c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append(contentView.getPackage()); 842c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append("/0x"); 843c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append(Integer.toHexString(contentView.getLayoutId())); 844c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato } else { 845c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append("null"); 846c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato } 8472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler // TODO(dsandler): defaults take precedence over local values, so reorder the branches below 848c9596d6d8e9154b5f87c8e887bfabf7546b68af5Joe Onorato sb.append(" vibrate="); 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.vibrate != null) { 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = this.vibrate.length-1; 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("["); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(this.vibrate[i]); 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(','); 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8568cf97d9982aae6197e48aabf2a3ada79fb39a041Simon Schoar if (N != -1) { 8578cf97d9982aae6197e48aabf2a3ada79fb39a041Simon Schoar sb.append(this.vibrate[N]); 8588cf97d9982aae6197e48aabf2a3ada79fb39a041Simon Schoar } 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("]"); 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if ((this.defaults & DEFAULT_VIBRATE) != 0) { 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("default"); 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("null"); 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" sound="); 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.sound != null) { 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(this.sound.toString()); 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if ((this.defaults & DEFAULT_SOUND) != 0) { 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("default"); 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("null"); 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" defaults=0x"); 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(Integer.toHexString(this.defaults)); 8752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" flags=0x"); 876e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler sb.append(Integer.toHexString(this.flags)); 8772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(" kind=["); 8782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (this.kind == null) { 8792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append("null"); 8802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } else { 8812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler for (int i=0; i<this.kind.length; i++) { 8822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (i>0) sb.append(","); 8832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler sb.append(this.kind[i]); 8842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 885e46cbd379a3c19708c7f7e5d3f35e2c596de0c46Daniel Sandler } 886a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append("]"); 887a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (actions != null) { 888a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(" "); 889a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(actions.length); 890a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(" action"); 891a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (actions.length > 1) sb.append("s"); 892a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 893a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler sb.append(")"); 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 89646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 8976d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey /** {@hide} */ 8986d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey public void setUser(UserHandle user) { 899ecbd68b0de73a16ce9d0cf2baa7153e1db14b34aAmith Yamasani if (user.getIdentifier() == UserHandle.USER_ALL) { 900ecbd68b0de73a16ce9d0cf2baa7153e1db14b34aAmith Yamasani user = UserHandle.OWNER; 901ecbd68b0de73a16ce9d0cf2baa7153e1db14b34aAmith Yamasani } 9026d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey if (tickerView != null) { 9036d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey tickerView.setUser(user); 9046d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey } 9056d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey if (contentView != null) { 9066d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey contentView.setUser(user); 9076d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey } 9086d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey if (bigContentView != null) { 9096d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey bigContentView.setUser(user); 9106d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey } 9116d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey } 9126d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey 913cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 9142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Builder class for {@link Notification} objects. 9152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 9162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Provides a convenient way to set the various fields of a {@link Notification} and generate 917183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * content views using the platform's notification layout template. If your app supports 918183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * versions of Android as old as API level 4, you can instead use 919183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}, 920183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * available in the <a href="{@docRoot}tools/extras/support-library.html">Android Support 921183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * library</a>. 9222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 923183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * <p>Example: 9242561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 9252561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <pre class="prettyprint"> 926183bf116978e3c44292c9ead2bceb47e972624a1Scott Main * Notification noti = new Notification.Builder(mContext) 9272561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setContentTitle("New mail from " + sender.toString()) 9282561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setContentText(subject) 9292561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setSmallIcon(R.drawable.new_mail) 9302561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * .setLargeIcon(aBitmap) 931fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * .build(); 9322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * </pre> 933cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 93446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public static class Builder { 935602ad1c978ddbf8be2c272cd610e18a626cd8b33Daniel Sandler private static final int MAX_ACTION_BUTTONS = 3; 9368680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler 93746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private Context mContext; 93846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 93946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private long mWhen; 94046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mSmallIcon; 94146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mSmallIconLevel; 9428595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato private int mNumber; 94346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mContentTitle; 94446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mContentText; 94546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mContentInfo; 946f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private CharSequence mSubText; 94746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private PendingIntent mContentIntent; 94846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews mContentView; 94946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private PendingIntent mDeleteIntent; 95046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private PendingIntent mFullScreenIntent; 95146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private CharSequence mTickerText; 95246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews mTickerView; 95346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private Bitmap mLargeIcon; 95446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private Uri mSound; 95546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mAudioStreamType; 95646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private long[] mVibrate; 95746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mLedArgb; 95846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mLedOnMs; 95946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mLedOffMs; 96046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mDefaults; 96146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private int mFlags; 9621c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey private int mProgressMax; 9631c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey private int mProgress; 9641c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey private boolean mProgressIndeterminate; 9652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private ArrayList<String> mKindList = new ArrayList<String>(1); 9662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private Bundle mExtras; 9672561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler private int mPriority; 9688680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler private ArrayList<Action> mActions = new ArrayList<Action>(MAX_ACTION_BUTTONS); 969a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler private boolean mUseChronometer; 970fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren private Style mStyle; 9710c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler private boolean mShowWhen = true; 97246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 973cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 9742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Constructs a new Builder with the defaults: 975cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 9762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <table> 9782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <tr><th align=right>priority</th> 9792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <td>{@link #PRIORITY_DEFAULT}</td></tr> 9802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <tr><th align=right>when</th> 9812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <td>now ({@link System#currentTimeMillis()})</td></tr> 9822561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <tr><th align=right>audio stream</th> 9832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <td>{@link #STREAM_DEFAULT}</td></tr> 9842561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * </table> 985cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 9862561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 9872561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @param context 9882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A {@link Context} that will be used by the Builder to construct the 9892561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * RemoteViews. The Context will not be held past the lifetime of this Builder 9902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * object. 991cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 99246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder(Context context) { 99346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContext = context; 994110988c8b70f4ab089b179b7966497d508506263Andy Stadler 995110988c8b70f4ab089b179b7966497d508506263Andy Stadler // Set defaults to match the defaults of a Notification 99646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mWhen = System.currentTimeMillis(); 997110988c8b70f4ab089b179b7966497d508506263Andy Stadler mAudioStreamType = STREAM_DEFAULT; 9982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mPriority = PRIORITY_DEFAULT; 99946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 100046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1001cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10022561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add a timestamp pertaining to the notification (usually the time the event occurred). 10030c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler * It will be shown in the notification content view by default; use 10040c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler * {@link Builder#setShowWhen(boolean) setShowWhen} to control this. 10052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#when 1007cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 100846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setWhen(long when) { 100946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mWhen = when; 101046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 101146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 101246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1013cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10140c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler * Control whether the timestamp set with {@link Builder#setWhen(long) setWhen} is shown 10150c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler * in the content view. 10160c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler */ 10170c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler public Builder setShowWhen(boolean show) { 10180c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler mShowWhen = show; 10190c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler return this; 10200c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler } 10210c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler 10220c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler /** 1023d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * Show the {@link Notification#when} field as a stopwatch. 1024d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * 1025d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * Instead of presenting <code>when</code> as a timestamp, the notification will show an 1026d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * automatically updating display of the minutes and seconds since <code>when</code>. 1027a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler * 1028d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * Useful when showing an elapsed time (like an ongoing phone call). 1029d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * 1030d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @see android.widget.Chronometer 1031a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler * @see Notification#when 1032a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler */ 1033a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler public Builder setUsesChronometer(boolean b) { 1034a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler mUseChronometer = b; 1035a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler return this; 1036a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler } 1037a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler 1038a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler /** 10392561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the small icon resource, which will be used to represent the notification in the 10402561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * status bar. 1041cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 10422561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 10432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The platform template for the expanded view will draw this icon in the left, unless a 10442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link #setLargeIcon(Bitmap) large icon} has also been specified, in which case the small 10452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * icon will be moved to the right-hand side. 10462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 10472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 10482561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @param icon 10492561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A resource ID in the application's package of the drawable to use. 10502561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#icon 1051cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 105246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setSmallIcon(int icon) { 105346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSmallIcon = icon; 105446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 105546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 105646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1057cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1058cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * A variant of {@link #setSmallIcon(int) setSmallIcon(int)} that takes an additional 1059cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * level parameter for when the icon is a {@link android.graphics.drawable.LevelListDrawable 1060cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * LevelListDrawable}. 1061cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 10622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @param icon A resource ID in the application's package of the drawable to use. 1063cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @param level The level to use for the icon. 1064cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 10652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#icon 10662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#iconLevel 1067cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 106846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setSmallIcon(int icon, int level) { 106946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSmallIcon = icon; 107046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSmallIconLevel = level; 107146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 107246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 107346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1074cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the first line of text in the platform notification template. 1076cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 107746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentTitle(CharSequence title) { 107846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentTitle = title; 107946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 108046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 108146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1082cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 10832561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the second line of text in the platform notification template. 1084cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 108546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentText(CharSequence text) { 108646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentText = text; 108746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 108846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 108946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1090cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1091f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Set the third line of text in the platform notification template. 1092f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Don't use if you're also using {@link #setProgress(int, int, boolean)}; they occupy the same location in the standard template. 1093f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 1094f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public Builder setSubText(CharSequence text) { 1095f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mSubText = text; 1096f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return this; 1097f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1098f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1099f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 1100cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set the large number at the right-hand side of the notification. This is 1101cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * equivalent to setContentInfo, although it might show the number in a different 1102cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * font size for readability. 1103cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 11048595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato public Builder setNumber(int number) { 11058595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato mNumber = number; 11068595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato return this; 11078595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato } 11088595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato 1109cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A small piece of additional information pertaining to this notification. 11112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The platform template will draw this on the last line of the notification, at the far 11132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * right (to the right of a smallIcon if it has been placed there). 1114cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 111546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentInfo(CharSequence info) { 111646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentInfo = info; 111746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 111846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 111946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1120cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11212561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the progress this notification represents. 11222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11232561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * The platform template will represent this using a {@link ProgressBar}. 11241c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey */ 11251c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey public Builder setProgress(int max, int progress, boolean indeterminate) { 11261c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey mProgressMax = max; 11271c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey mProgress = progress; 11281c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey mProgressIndeterminate = indeterminate; 11291c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey return this; 11301c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } 11311c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey 11321c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey /** 11332561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Supply a custom RemoteViews to use instead of the platform template. 11342561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11352561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#contentView 1136cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 113746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContent(RemoteViews views) { 113846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentView = views; 113946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 114046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 114146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1142cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Supply a {@link PendingIntent} to be sent when the notification is clicked. 11442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * As of {@link android.os.Build.VERSION_CODES#HONEYCOMB}, if this field is unset and you 11462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * have specified a custom RemoteViews with {@link #setContent(RemoteViews)}, you can use 11472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * {@link RemoteViews#setOnClickPendingIntent RemoteViews.setOnClickPendingIntent(int,PendingIntent)} 11482561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * to assign PendingIntents to individual views in that custom layout (i.e., to create 1149f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * clickable buttons inside the notification view). 11502561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11512561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#contentIntent Notification.contentIntent 1152cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 115346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setContentIntent(PendingIntent intent) { 115446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mContentIntent = intent; 115546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 115646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 115746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1158cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Supply a {@link PendingIntent} to send when the notification is cleared explicitly by the user. 11602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#deleteIntent 1162cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 116346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setDeleteIntent(PendingIntent intent) { 116446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mDeleteIntent = intent; 116546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 116646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 116746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1168cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1169cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * An intent to launch instead of posting the notification to the status bar. 1170cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Only for use with extremely high-priority notifications demanding the user's 1171cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <strong>immediate</strong> attention, such as an incoming phone call or 1172cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * alarm clock that the user has explicitly set to a particular time. 1173cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * If this facility is used for something else, please give the user an option 1174cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * to turn it off and use a normal notification, as this can be extremely 1175cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * disruptive. 1176cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 1177cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @param intent The pending intent to launch. 1178cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * @param highPriority Passing true will cause this notification to be sent 1179cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * even if other notifications are suppressed. 11802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11812561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#fullScreenIntent 1182cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 118346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) { 118446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mFullScreenIntent = intent; 118546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato setFlag(FLAG_HIGH_PRIORITY, highPriority); 118646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 118746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 118846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1189cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 11902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the "ticker" text which is displayed in the status bar when the notification first 1191cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * arrives. 11922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 11932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#tickerText 1194cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 119546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setTicker(CharSequence tickerText) { 119646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mTickerText = tickerText; 119746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 119846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 119946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1200cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1201cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set the text that is displayed in the status bar when the notification first 1202cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * arrives, and also a RemoteViews object that may be displayed instead on some 1203cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * devices. 12042561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12052561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#tickerText 12062561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#tickerView 1207cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 120846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setTicker(CharSequence tickerText, RemoteViews views) { 120946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mTickerText = tickerText; 121046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mTickerView = views; 121146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 121246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 121346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1214cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add a large icon to the notification (and the ticker on some devices). 12162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12172561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * In the platform template, this image will be shown on the left of the notification view 12182561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * in place of the {@link #setSmallIcon(int) small icon} (which will move to the right side). 12192561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12202561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#largeIcon 1221cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 122246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setLargeIcon(Bitmap icon) { 122346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLargeIcon = icon; 122446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 122546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 122646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1227cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12282561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the sound to play. 12292561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12302561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * It will be played on the {@link #STREAM_DEFAULT default stream} for notifications. 12312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12322561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#sound 1233cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 123452f80cd36f406725e85a1825741a45c69de3d898Joe Onorato public Builder setSound(Uri sound) { 123552f80cd36f406725e85a1825741a45c69de3d898Joe Onorato mSound = sound; 123652f80cd36f406725e85a1825741a45c69de3d898Joe Onorato mAudioStreamType = STREAM_DEFAULT; 123752f80cd36f406725e85a1825741a45c69de3d898Joe Onorato return this; 123852f80cd36f406725e85a1825741a45c69de3d898Joe Onorato } 123952f80cd36f406725e85a1825741a45c69de3d898Joe Onorato 1240cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12412561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the sound to play, along with a specific stream on which to play it. 1242cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 12432561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * See {@link android.media.AudioManager} for the <code>STREAM_</code> constants. 12442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#sound 1246cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 124746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setSound(Uri sound, int streamType) { 124846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mSound = sound; 124946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mAudioStreamType = streamType; 125046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 125146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 125246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1253cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1254cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set the vibration pattern to use. 1255cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 12562561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * See {@link android.os.Vibrator#vibrate(long[], int)} for a discussion of the 12582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * <code>pattern</code> parameter. 12592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#vibrate 1262cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 126346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setVibrate(long[] pattern) { 126446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mVibrate = pattern; 126546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 126646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 126746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1268cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the desired color for the indicator LED on the device, as well as the 12702561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * blink duty cycle (specified in milliseconds). 12712561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Not all devices will honor all (or even any) of these values. 12742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#ledARGB 12772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#ledOnMS 12782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#ledOffMS 1279cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 128046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setLights(int argb, int onMs, int offMs) { 128146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLedArgb = argb; 128246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLedOnMs = onMs; 128346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mLedOffMs = offMs; 128446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 128546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 128646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1287cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 12882561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set whether this is an "ongoing" notification. 1289cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * 12902561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12912561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Ongoing notifications cannot be dismissed by the user, so your application or service 12922561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * must take care of canceling them. 12932561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12942561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 12952561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * They are typically used to indicate a background task that the user is actively engaged 12962561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * with (e.g., playing music) or is pending in some way and therefore occupying the device 12972561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * (e.g., a file download, sync operation, active network connection). 12982561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 12992561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 13002561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#FLAG_ONGOING_EVENT 13012561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Service#setForeground(boolean) 1302cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 130346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setOngoing(boolean ongoing) { 130446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato setFlag(FLAG_ONGOING_EVENT, ongoing); 130546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 130646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 130746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1308cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1309cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * Set this flag if you would only like the sound, vibrate 1310cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * and ticker to be played if the notification is not already showing. 13112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#FLAG_ONLY_ALERT_ONCE 1313cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 131446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setOnlyAlertOnce(boolean onlyAlertOnce) { 131546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato setFlag(FLAG_ONLY_ALERT_ONCE, onlyAlertOnce); 131646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 131746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 131846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1319cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 13202561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Make this notification automatically dismissed when the user touches it. The 13212561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * PendingIntent set with {@link #setDeleteIntent} will be sent when this happens. 13222561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13232561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#FLAG_AUTO_CANCEL 1324cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 132546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setAutoCancel(boolean autoCancel) { 1326281d83f61f4036503ded1a967b8b43bfbaa373d0Joe Onorato setFlag(FLAG_AUTO_CANCEL, autoCancel); 132746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 132846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 132946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 1330cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 13312561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set which notification properties will be inherited from system defaults. 1332cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <p> 1333cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * The value should be one or more of the following fields combined with 1334cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * bitwise-or: 1335cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * {@link #DEFAULT_SOUND}, {@link #DEFAULT_VIBRATE}, {@link #DEFAULT_LIGHTS}. 1336cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * <p> 1337cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato * For all default values, use {@link #DEFAULT_ALL}. 1338cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 133946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato public Builder setDefaults(int defaults) { 134046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mDefaults = defaults; 134146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return this; 134246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 134346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 13442561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 13452561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Set the priority of this notification. 13462561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13472561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#priority 13482561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 13492561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public Builder setPriority(int pri) { 13502561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mPriority = pri; 13512561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler return this; 13522561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 13532561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 13542561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 1355d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * @hide 1356d33b803b6bfcbc509dd7cee3ee23f819dfff296eDaniel Sandler * 13572561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add a kind (category) to this notification. Optional. 13582561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13592561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#kind 13602561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 13612561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public Builder addKind(String k) { 13622561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mKindList.add(k); 13632561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler return this; 13642561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 13652561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 13662561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler /** 13672561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * Add metadata to this notification. 13682561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13692561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * A reference to the Bundle is held for the lifetime of this Builder, and the Bundle's 1370fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * current contents are copied into the Notification each time {@link #build()} is 13712561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * called. 13722561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * 13732561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @see Notification#extras 13742561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler * @hide 13752561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 13762561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler public Builder setExtras(Bundle bag) { 13772561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mExtras = bag; 13782561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler return this; 13792561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 13802561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler 1381a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler /** 1382a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * Add an action to this notification. Actions are typically displayed by 1383a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * the system as a button adjacent to the notification content. 1384a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * 1385a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @param icon Resource ID of a drawable that represents the action. 1386a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @param title Text describing the action. 1387a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler * @param intent PendingIntent to be fired when the action is invoked. 1388a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler */ 1389a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler public Builder addAction(int icon, CharSequence title, PendingIntent intent) { 1390a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler mActions.add(new Action(icon, title, intent)); 1391a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler return this; 1392a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 1393a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler 1394fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1395fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Add a rich notification style to be applied at build time. 1396fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * 1397fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * @param style Object responsible for modifying the notification style. 1398fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1399fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public Builder setStyle(Style style) { 1400fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mStyle != style) { 1401fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren mStyle = style; 1402c08dea2aa4f66f888f01fa7ed2be46d4c4651a1eDaniel Sandler if (mStyle != null) { 1403c08dea2aa4f66f888f01fa7ed2be46d4c4651a1eDaniel Sandler mStyle.setBuilder(this); 1404c08dea2aa4f66f888f01fa7ed2be46d4c4651a1eDaniel Sandler } 1405fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1406fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return this; 1407fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1408fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 140946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private void setFlag(int mask, boolean value) { 141046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (value) { 141146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mFlags |= mask; 141246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } else { 141346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato mFlags &= ~mask; 141446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 141546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 141646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 14176387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler private RemoteViews applyStandardTemplate(int resId, boolean fitIn1U) { 1418561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato RemoteViews contentView = new RemoteViews(mContext.getPackageName(), resId); 14199f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler boolean showLine3 = false; 14209f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler boolean showLine2 = false; 1421f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler int smallIconImageViewId = R.id.icon; 1422f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (mLargeIcon != null) { 1423f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setImageViewBitmap(R.id.icon, mLargeIcon); 1424f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler smallIconImageViewId = R.id.right_icon; 1425f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1426e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler if (mPriority < PRIORITY_LOW) { 1427e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler contentView.setInt(R.id.icon, 1428e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler "setBackgroundResource", R.drawable.notification_template_icon_low_bg); 1429e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler contentView.setInt(R.id.status_bar_latest_event_content, 1430e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler "setBackgroundResource", R.drawable.notification_bg_low); 1431e95658c98e4154a2daf0ed70d15d24f8bf3153f0Daniel Sandler } 1432561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mSmallIcon != 0) { 1433f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setImageViewResource(smallIconImageViewId, mSmallIcon); 1434f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(smallIconImageViewId, View.VISIBLE); 14351c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } else { 1436f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(smallIconImageViewId, View.GONE); 1437561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1438561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentTitle != null) { 1439561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.title, mContentTitle); 1440561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1441561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentText != null) { 14429f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setTextViewText(R.id.text, mContentText); 14439f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler showLine3 = true; 1444561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1445561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentInfo != null) { 1446561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setTextViewText(R.id.info, mContentInfo); 14471c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey contentView.setViewVisibility(R.id.info, View.VISIBLE); 14489f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler showLine3 = true; 1449561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else if (mNumber > 0) { 1450ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler final int tooBig = mContext.getResources().getInteger( 1451ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler R.integer.status_bar_notification_info_maxnum); 1452ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler if (mNumber > tooBig) { 1453ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler contentView.setTextViewText(R.id.info, mContext.getResources().getString( 1454ebce0115e239919680fc5574ae4ca79e617fcce8Daniel Sandler R.string.status_bar_notification_info_overflow)); 1455059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato } else { 1456059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato NumberFormat f = NumberFormat.getIntegerInstance(); 1457059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato contentView.setTextViewText(R.id.info, f.format(mNumber)); 1458059a2f8664571098fac665747d8bb8f84c5e07edJoe Onorato } 14591c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey contentView.setViewVisibility(R.id.info, View.VISIBLE); 14609f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler showLine3 = true; 1461561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else { 1462561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato contentView.setViewVisibility(R.id.info, View.GONE); 1463561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1464f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 14659f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler // Need to show three lines? 1466f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (mSubText != null) { 1467f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setTextViewText(R.id.text, mSubText); 14689f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler if (mContentText != null) { 14699f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setTextViewText(R.id.text2, mContentText); 14709f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setViewVisibility(R.id.text2, View.VISIBLE); 14719f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler showLine2 = true; 14729f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler } else { 14739f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setViewVisibility(R.id.text2, View.GONE); 14749f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler } 14751c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } else { 1476f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.text2, View.GONE); 1477f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler if (mProgressMax != 0 || mProgressIndeterminate) { 1478f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setProgressBar( 1479f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler R.id.progress, mProgressMax, mProgress, mProgressIndeterminate); 1480f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.progress, View.VISIBLE); 14819f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler showLine2 = true; 1482f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } else { 1483f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.progress, View.GONE); 1484f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 14851c40013bb2afbd76050ac681d7880476aa7fc70dJeff Sharkey } 14869f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler if (showLine2) { 14876387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler if (fitIn1U) { 14886387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler // need to shrink all the type to make sure everything fits 14896387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler final Resources res = mContext.getResources(); 14906387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler final float subTextSize = res.getDimensionPixelSize( 14916387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler R.dimen.notification_subtext_size); 14926387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler contentView.setTextViewTextSize(R.id.text, TypedValue.COMPLEX_UNIT_PX, subTextSize); 14936387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler } 14949f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler // vertical centering 14959f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setViewPadding(R.id.line1, 0, 0, 0, 0); 14969f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler } 14979f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler 14980c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler if (mWhen != 0 && mShowWhen) { 1499a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler if (mUseChronometer) { 1500a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setViewVisibility(R.id.chronometer, View.VISIBLE); 1501a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setLong(R.id.chronometer, "setBase", 1502a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler mWhen + (SystemClock.elapsedRealtime() - System.currentTimeMillis())); 1503a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setBoolean(R.id.chronometer, "setStarted", true); 1504a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler } else { 1505a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setViewVisibility(R.id.time, View.VISIBLE); 1506a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler contentView.setLong(R.id.time, "setTime", mWhen); 1507a2985ed3099c9206a4fd9fd8eaf0e4025b82aca9Daniel Sandler } 15080c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler } else { 15090c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler contentView.setViewVisibility(R.id.time, View.GONE); 1510561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 15110c89049ebf463bde186c41fe9fad63ad27182eb2Daniel Sandler 15129f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setViewVisibility(R.id.line3, showLine3 ? View.VISIBLE : View.GONE); 15136387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler contentView.setViewVisibility(R.id.overflow_divider, showLine3 ? View.VISIBLE : View.GONE); 1514561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato return contentView; 1515561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 1516561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato 151796fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler private RemoteViews applyStandardTemplateWithActions(int layoutId) { 15186387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler RemoteViews big = applyStandardTemplate(layoutId, false); 151996fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 152096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler int N = mActions.size(); 152196fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler if (N > 0) { 1522d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren // Log.d("Notification", "has actions: " + mContentText); 152396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler big.setViewVisibility(R.id.actions, View.VISIBLE); 15246387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler big.setViewVisibility(R.id.action_divider, View.VISIBLE); 15258680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler if (N>MAX_ACTION_BUTTONS) N=MAX_ACTION_BUTTONS; 15262c22eb0a49b369767eaa4e04c1727f947cfdec13Chris Wren big.removeAllViews(R.id.actions); 152796fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler for (int i=0; i<N; i++) { 152896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler final RemoteViews button = generateActionButton(mActions.get(i)); 1529d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren //Log.d("Notification", "adding action " + i + ": " + mActions.get(i).title); 153096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler big.addView(R.id.actions, button); 153196fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 153296fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 153396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler return big; 153496fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 153596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 153646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews makeContentView() { 153746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (mContentView != null) { 153846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return mContentView; 153946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } else { 15406387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler return applyStandardTemplate(R.layout.notification_template_base, true); // no more special large_icon flavor 154146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 154246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 154346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 154446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato private RemoteViews makeTickerView() { 154546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato if (mTickerView != null) { 154646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return mTickerView; 154746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } else { 1548561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato if (mContentView == null) { 1549f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return applyStandardTemplate(mLargeIcon == null 1550561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato ? R.layout.status_bar_latest_event_ticker 15516387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler : R.layout.status_bar_latest_event_ticker_large_icon, true); 1552561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } else { 1553561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato return null; 1554561d3858bb9409b999a19f7ba93f0b12e1db835fJoe Onorato } 155546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 155646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 155746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato 155896fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler private RemoteViews makeBigContentView() { 155996fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler if (mActions.size() == 0) return null; 156096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 1561b023bf85a080442117b5dae8d402bce60cd0a610Chris Wren return applyStandardTemplateWithActions(R.layout.notification_template_big_base); 156296fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 156396fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 156496fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler private RemoteViews generateActionButton(Action action) { 15658680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler final boolean tombstone = (action.actionIntent == null); 15668680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler RemoteViews button = new RemoteViews(mContext.getPackageName(), 15678680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler tombstone ? R.layout.notification_action_tombstone 15688680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler : R.layout.notification_action); 156996fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setTextViewCompoundDrawables(R.id.action0, action.icon, 0, 0, 0); 157096fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setTextViewText(R.id.action0, action.title); 15718680bf865a08f876fc3986c50a193e3186ff6f02Daniel Sandler if (!tombstone) { 1572e551884b0972280c9aee451b489832e67395c8e2Daniel Sandler button.setOnClickPendingIntent(R.id.action0, action.actionIntent); 1573e551884b0972280c9aee451b489832e67395c8e2Daniel Sandler } 157496fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler button.setContentDescription(R.id.action0, action.title); 157596fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler return button; 157696fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler } 157796fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler 1578cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato /** 1579fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Apply the unstyled operations and return a new {@link Notification} object. 1580cb109a0eeaca12cdd954c567da4fc5f45a23213bJoe Onorato */ 1581fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren private Notification buildUnstyled() { 158246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato Notification n = new Notification(); 158346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.when = mWhen; 158446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.icon = mSmallIcon; 158546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.iconLevel = mSmallIconLevel; 15868595a3dd9a6feff70f8ddbad924d79b591d611e4Joe Onorato n.number = mNumber; 158746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.contentView = makeContentView(); 158846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.contentIntent = mContentIntent; 158946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.deleteIntent = mDeleteIntent; 159046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.fullScreenIntent = mFullScreenIntent; 159146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.tickerText = mTickerText; 159246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.tickerView = makeTickerView(); 159346439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.largeIcon = mLargeIcon; 159446439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.sound = mSound; 159546439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.audioStreamType = mAudioStreamType; 159646439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.vibrate = mVibrate; 159746439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.ledARGB = mLedArgb; 159846439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.ledOnMS = mLedOnMs; 159946439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.ledOffMS = mLedOffMs; 160046439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.defaults = mDefaults; 160146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato n.flags = mFlags; 160296fd7c1c1acc03b40b1813ef65793560c175ef80Daniel Sandler n.bigContentView = makeBigContentView(); 16038d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if (mLedOnMs != 0 && mLedOffMs != 0) { 16048d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato n.flags |= FLAG_SHOW_LIGHTS; 16058d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 16068d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato if ((mDefaults & DEFAULT_LIGHTS) != 0) { 16078d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato n.flags |= FLAG_SHOW_LIGHTS; 16088d0b655c496e9125fc8d289c4e5bc9a78297ba3dJoe Onorato } 16092561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler if (mKindList.size() > 0) { 16102561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.kind = new String[mKindList.size()]; 16112561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler mKindList.toArray(n.kind); 16122561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } else { 16132561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.kind = null; 16142561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler } 16152561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.priority = mPriority; 16162561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler n.extras = mExtras != null ? new Bundle(mExtras) : null; 1617a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler if (mActions.size() > 0) { 1618a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler n.actions = new Action[mActions.size()]; 1619a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler mActions.toArray(n.actions); 1620a0a938cd5f6eaed449678a00420916cde711de63Daniel Sandler } 162146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato return n; 162246439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 1623fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1624fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1625fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * @deprecated Use {@link #build()} instead. 1626fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1627fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Deprecated 1628fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public Notification getNotification() { 1629fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return build(); 1630fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1631fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1632fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1633fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Combine all of the options that have been set and return a new {@link Notification} 1634fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * object. 1635fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1636fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public Notification build() { 1637fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mStyle != null) { 1638fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return mStyle.build(); 1639fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } else { 1640fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren return buildUnstyled(); 1641fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1642fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1643fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1644fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1645fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1646fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren /** 1647fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * An object that can apply a rich notification style to a {@link Notification.Builder} 1648fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * object. 1649fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren */ 1650d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public static abstract class Style 1651d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren { 1652d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren private CharSequence mBigContentTitle; 1653d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren private CharSequence mSummaryText = null; 1654619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler private boolean mSummaryTextSet = false; 1655d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1656fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren protected Builder mBuilder; 1657fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1658d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1659d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1660d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1661d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1662d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected void internalSetBigContentTitle(CharSequence title) { 1663d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mBigContentTitle = title; 1664d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1665d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1666d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1667d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1668d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1669d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected void internalSetSummaryText(CharSequence cs) { 1670d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mSummaryText = cs; 1671619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler mSummaryTextSet = true; 1672d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1673d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1674fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public void setBuilder(Builder builder) { 1675fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mBuilder != builder) { 1676fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren mBuilder = builder; 1677c08dea2aa4f66f888f01fa7ed2be46d4c4651a1eDaniel Sandler if (mBuilder != null) { 1678c08dea2aa4f66f888f01fa7ed2be46d4c4651a1eDaniel Sandler mBuilder.setStyle(this); 1679c08dea2aa4f66f888f01fa7ed2be46d4c4651a1eDaniel Sandler } 1680fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1681fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1682fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1683d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected void checkBuilder() { 1684fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren if (mBuilder == null) { 1685fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren throw new IllegalArgumentException("Style requires a valid Builder object"); 1686fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1687fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1688d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1689d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren protected RemoteViews getStandardView(int layoutId) { 1690d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1691d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1692d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mBigContentTitle != null) { 1693d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren mBuilder.setContentTitle(mBigContentTitle); 1694d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1695d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1696d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(layoutId); 1697d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1698d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren if (mBigContentTitle != null && mBigContentTitle.equals("")) { 1699d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.line1, View.GONE); 170067dc9a02cfa1873f67128fba7fbdf33f8fe18a24Chris Wren } else { 170167dc9a02cfa1873f67128fba7fbdf33f8fe18a24Chris Wren contentView.setViewVisibility(R.id.line1, View.VISIBLE); 1702d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1703d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1704619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler // The last line defaults to the subtext, but can be replaced by mSummaryText 1705619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler final CharSequence overflowText = 1706619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler mSummaryTextSet ? mSummaryText 1707619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler : mBuilder.mSubText; 1708619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler if (overflowText != null) { 1709619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler contentView.setTextViewText(R.id.text, overflowText); 1710619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler contentView.setViewVisibility(R.id.overflow_divider, View.VISIBLE); 17119f7936a30bc097c31962891945802507cb4aeb82Daniel Sandler contentView.setViewVisibility(R.id.line3, View.VISIBLE); 1712916ad91c3860344250c00b6b3597db6464229c02Daniel Sandler } else { 1713916ad91c3860344250c00b6b3597db6464229c02Daniel Sandler contentView.setViewVisibility(R.id.overflow_divider, View.GONE); 1714916ad91c3860344250c00b6b3597db6464229c02Daniel Sandler contentView.setViewVisibility(R.id.line3, View.GONE); 1715d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1716d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1717d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return contentView; 1718d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1719d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1720d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public abstract Notification build(); 172146439cec0eb0da4d0f853f2d8712d0c00c98475bJoe Onorato } 1722f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1723f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 17244dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * Helper class for generating large-format notifications that include a large image attachment. 1725f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * 17264dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so: 1727f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * <pre class="prettyprint"> 1728f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * Notification noti = new Notification.BigPictureStyle( 1729f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * new Notification.Builder() 17304dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * .setContentTitle("New photo from " + sender.toString()) 1731f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setContentText(subject) 17324dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * .setSmallIcon(R.drawable.new_post) 1733f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setLargeIcon(aBitmap)) 1734f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .bigPicture(aBigBitmap) 1735f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .build(); 1736f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * </pre> 17374dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * 17384dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * @see Notification#bigContentView 1739f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 1740fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public static class BigPictureStyle extends Style { 1741f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private Bitmap mPicture; 17423745a3da759a9510554c8d2c59f09185e52ed403Chris Wren private Bitmap mBigLargeIcon; 17433745a3da759a9510554c8d2c59f09185e52ed403Chris Wren private boolean mBigLargeIconSet = false; 1744f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1745fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public BigPictureStyle() { 1746fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1747fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1748f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigPictureStyle(Builder builder) { 1749fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren setBuilder(builder); 1750f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1751f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1752d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1753d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1754d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1755d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1756d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigPictureStyle setBigContentTitle(CharSequence title) { 1757d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetBigContentTitle(title); 1758d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1759d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1760d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1761d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1762d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1763d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1764d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigPictureStyle setSummaryText(CharSequence cs) { 1765d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetSummaryText(cs); 1766d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1767d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1768d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 17690bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren /** 17700bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren * Provide the bitmap to be used as the payload for the BigPicture notification. 17710bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren */ 1772f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigPictureStyle bigPicture(Bitmap b) { 1773f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mPicture = b; 1774f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return this; 1775f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1776f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 17773745a3da759a9510554c8d2c59f09185e52ed403Chris Wren /** 17783745a3da759a9510554c8d2c59f09185e52ed403Chris Wren * Override the large icon when the big notification is shown. 17793745a3da759a9510554c8d2c59f09185e52ed403Chris Wren */ 17803745a3da759a9510554c8d2c59f09185e52ed403Chris Wren public BigPictureStyle bigLargeIcon(Bitmap b) { 17813745a3da759a9510554c8d2c59f09185e52ed403Chris Wren mBigLargeIconSet = true; 17823745a3da759a9510554c8d2c59f09185e52ed403Chris Wren mBigLargeIcon = b; 17833745a3da759a9510554c8d2c59f09185e52ed403Chris Wren return this; 17843745a3da759a9510554c8d2c59f09185e52ed403Chris Wren } 17853745a3da759a9510554c8d2c59f09185e52ed403Chris Wren 1786f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private RemoteViews makeBigContentView() { 1787d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = getStandardView(R.layout.notification_template_big_picture); 1788f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1789f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setImageViewBitmap(R.id.big_picture, mPicture); 1790f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1791f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return contentView; 1792f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1793f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1794fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Override 1795f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public Notification build() { 1796d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1797fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren Notification wip = mBuilder.buildUnstyled(); 17983745a3da759a9510554c8d2c59f09185e52ed403Chris Wren if (mBigLargeIconSet ) { 17993745a3da759a9510554c8d2c59f09185e52ed403Chris Wren mBuilder.mLargeIcon = mBigLargeIcon; 18003745a3da759a9510554c8d2c59f09185e52ed403Chris Wren } 1801f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler wip.bigContentView = makeBigContentView(); 1802f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return wip; 1803f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1804f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1805f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1806f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler /** 18074dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * Helper class for generating large-format notifications that include a lot of text. 1808f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * 18094dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so: 1810f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * <pre class="prettyprint"> 18118768278974082decc8fe7b4a6da132bd38f30d7cDaniel Sandler * Notification noti = new Notification.BigTextStyle( 1812f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * new Notification.Builder() 1813f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setContentTitle("New mail from " + sender.toString()) 1814f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setContentText(subject) 1815f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setSmallIcon(R.drawable.new_mail) 1816f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .setLargeIcon(aBitmap)) 1817f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .bigText(aVeryLongString) 1818f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * .build(); 1819f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler * </pre> 18204dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * 18214dfbe83e1a110b416badf73ddf68c83db0d415aeDaniel Sandler * @see Notification#bigContentView 1822f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler */ 1823fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public static class BigTextStyle extends Style { 1824f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private CharSequence mBigText; 1825f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1826fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public BigTextStyle() { 1827fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1828fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1829f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigTextStyle(Builder builder) { 1830fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren setBuilder(builder); 1831f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1832f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1833d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1834d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1835d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1836d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1837d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigTextStyle setBigContentTitle(CharSequence title) { 1838d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetBigContentTitle(title); 1839d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1840d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1841d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1842d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1843d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1844d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1845d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public BigTextStyle setSummaryText(CharSequence cs) { 1846d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetSummaryText(cs); 1847d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1848d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1849d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 18500bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren /** 18510bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren * Provide the longer text to be displayed in the big form of the 18520bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren * template in place of the content text. 18530bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren */ 1854f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public BigTextStyle bigText(CharSequence cs) { 1855f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler mBigText = cs; 1856f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return this; 1857f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1858f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1859f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler private RemoteViews makeBigContentView() { 1860619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler // Remove the content text so line3 only shows if you have a summary 1861619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler final boolean hadThreeLines = (mBuilder.mContentText != null && mBuilder.mSubText != null); 18626387d2f6dae27ba6e8481883325adad96d3010f4Daniel Sandler mBuilder.mContentText = null; 1863916ad91c3860344250c00b6b3597db6464229c02Daniel Sandler 1864d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = getStandardView(R.layout.notification_template_big_text); 1865619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler 1866619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler if (hadThreeLines) { 1867619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler // vertical centering 1868619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler contentView.setViewPadding(R.id.line1, 0, 0, 0, 0); 1869619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler } 1870619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler 1871f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setTextViewText(R.id.big_text, mBigText); 1872f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler contentView.setViewVisibility(R.id.big_text, View.VISIBLE); 18733c5f92432734e1e3b9bdc515628a4c09d7759cd4Chris Wren contentView.setViewVisibility(R.id.text2, View.GONE); 1874f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1875f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return contentView; 1876f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1877f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler 1878fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Override 1879f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler public Notification build() { 1880d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1881fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren Notification wip = mBuilder.buildUnstyled(); 1882f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler wip.bigContentView = makeBigContentView(); 1883f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler return wip; 1884f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1885f3b7343246bf20a8024853abe9c8eeef767d26daDaniel Sandler } 1886879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1887879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler /** 1888879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * Helper class for generating large-format notifications that include a list of (up to 5) strings. 1889879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * 1890879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so: 1891879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * <pre class="prettyprint"> 1892fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren * Notification noti = new Notification.InboxStyle( 1893879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * new Notification.Builder() 1894d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * .setContentTitle("5 New mails from " + sender.toString()) 1895879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .setContentText(subject) 1896879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .setSmallIcon(R.drawable.new_mail) 1897879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .setLargeIcon(aBitmap)) 1898879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .addLine(str1) 1899879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .addLine(str2) 1900d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * .setContentTitle("") 1901d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * .setSummaryText("+3 more") 1902879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * .build(); 1903879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * </pre> 1904879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * 1905879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler * @see Notification#bigContentView 1906879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler */ 1907fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public static class InboxStyle extends Style { 1908879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler private ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(5); 1909879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1910fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren public InboxStyle() { 1911fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren } 1912fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren 1913879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler public InboxStyle(Builder builder) { 1914fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren setBuilder(builder); 1915879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1916879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1917d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1918d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Overrides ContentTitle in the big form of the template. 1919d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * This defaults to the value passed to setContentTitle(). 1920d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1921d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public InboxStyle setBigContentTitle(CharSequence title) { 1922d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetBigContentTitle(title); 1923d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1924d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1925d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1926d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren /** 1927d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren * Set the first line of text after the detail section in the big form of the template. 1928d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren */ 1929d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren public InboxStyle setSummaryText(CharSequence cs) { 1930d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren internalSetSummaryText(cs); 1931d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren return this; 1932d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren } 1933d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 19340bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren /** 19350bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren * Append a line to the digest section of the Inbox notification. 19360bd664dab4c1af6ee2048671ed4847e0f52ea179Chris Wren */ 1937879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler public InboxStyle addLine(CharSequence cs) { 1938879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler mTexts.add(cs); 1939879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler return this; 1940879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1941879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1942879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler private RemoteViews makeBigContentView() { 1943619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler // Remove the content text so line3 disappears unless you have a summary 1944619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler mBuilder.mContentText = null; 1945d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren RemoteViews contentView = getStandardView(R.layout.notification_template_inbox); 1946619738c9e7b321d3a7f297b95955c681f5de56baDaniel Sandler 1947d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren contentView.setViewVisibility(R.id.text2, View.GONE); 1948d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren 1949d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren int[] rowIds = {R.id.inbox_text0, R.id.inbox_text1, R.id.inbox_text2, R.id.inbox_text3, 195029bb6d925bcaa562212b3fe41de249c3dfb64354Chris Wren R.id.inbox_text4, R.id.inbox_text5, R.id.inbox_text6}; 1951879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 19524ed80d581c3448f075d65efafc585b4691f8b301Chris Wren // Make sure all rows are gone in case we reuse a view. 19534ed80d581c3448f075d65efafc585b4691f8b301Chris Wren for (int rowId : rowIds) { 19544ed80d581c3448f075d65efafc585b4691f8b301Chris Wren contentView.setViewVisibility(rowId, View.GONE); 19554ed80d581c3448f075d65efafc585b4691f8b301Chris Wren } 19564ed80d581c3448f075d65efafc585b4691f8b301Chris Wren 1957683ab00a2ec2e02f8ad1296efb381aa72d364b57Chris Wren 1958879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler int i=0; 1959879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler while (i < mTexts.size() && i < rowIds.length) { 1960879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler CharSequence str = mTexts.get(i); 1961879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler if (str != null && !str.equals("")) { 1962879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler contentView.setViewVisibility(rowIds[i], View.VISIBLE); 1963879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler contentView.setTextViewText(rowIds[i], str); 1964879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1965879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler i++; 1966879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1967879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1968683ab00a2ec2e02f8ad1296efb381aa72d364b57Chris Wren contentView.setViewVisibility(R.id.inbox_end_pad, 1969683ab00a2ec2e02f8ad1296efb381aa72d364b57Chris Wren mTexts.size() > 0 ? View.VISIBLE : View.GONE); 1970683ab00a2ec2e02f8ad1296efb381aa72d364b57Chris Wren 1971683ab00a2ec2e02f8ad1296efb381aa72d364b57Chris Wren contentView.setViewVisibility(R.id.inbox_more, 1972683ab00a2ec2e02f8ad1296efb381aa72d364b57Chris Wren mTexts.size() > rowIds.length ? View.VISIBLE : View.GONE); 197329bb6d925bcaa562212b3fe41de249c3dfb64354Chris Wren 1974879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler return contentView; 1975879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1976879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler 1977fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren @Override 1978879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler public Notification build() { 1979d6297dbfe9b1c9c91907e4ba35d4b1ae7fe610d8Chris Wren checkBuilder(); 1980fbd96ba9baa212d99060c8b93b5c79cf00918bdaChris Wren Notification wip = mBuilder.buildUnstyled(); 1981879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler wip.bigContentView = makeBigContentView(); 1982879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler return wip; 1983879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 1984879c5e07c019bbcd8647e60656d0749eae0467c3Daniel Sandler } 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1986