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