1c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell/* 2c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Copyright (C) 2012 The Android Open Source Project 3c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 4c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * you may not use this file except in compliance with the License. 6c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * You may obtain a copy of the License at 7c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 8c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * http://www.apache.org/licenses/LICENSE-2.0 9c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 10c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Unless required by applicable law or agreed to in writing, software 11c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * See the License for the specific language governing permissions and 14c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * limitations under the License. 15c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 16c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 17c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellpackage android.support.v4.app; 18c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 19c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.app.Notification; 20c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.app.NotificationManager; 21c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.app.PendingIntent; 22c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.content.Context; 23c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.graphics.Bitmap; 24c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.media.AudioManager; 25c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.net.Uri; 26c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.os.Build; 27c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellimport android.widget.RemoteViews; 28c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 29c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powellpublic class NotificationCompat { 30c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 31c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Bit to be bitwise-ored into the {@link Notification#flags} field that should be set if 32c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * this notification represents a high-priority event that may be shown to the user even 33c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * if notifications are otherwise unavailable (that is, when the status bar is hidden). 34c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * This flag is ideally used in conjunction with fullScreenIntent. 35c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 36c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p>This will only be respected on API level 9 and above.</p> 37c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 38c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public static final int FLAG_HIGH_PRIORITY = 0x00000080; 39c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 40c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell private static final NotificationCompatImpl IMPL; 41c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 42c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell interface NotificationCompatImpl { 43c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Notification getNotification(Builder b); 44c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 45c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 46c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell static class NotificationCompatImplBase implements NotificationCompatImpl { 47c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Notification getNotification(Builder b) { 48c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Notification result = (Notification) b.mNotification; 49c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell result.setLatestEventInfo(b.mContext, b.mContentTitle, 50c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell b.mContentText, b.mContentIntent); 51c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return result; 52c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 53c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 54c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 55c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell static class NotificationCompatImplHoneycomb implements NotificationCompatImpl { 56c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Notification getNotification(Builder b) { 57c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return NotificationCompatHoneycomb.add(b.mContext, b.mNotification, 58c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell b.mContentTitle, b.mContentText, b.mContentInfo, b.mTickerView, 59c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell b.mNumber, b.mContentIntent, b.mFullScreenIntent, b.mLargeIcon); 60c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 61c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 62c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 63c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell static { 64c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell if (Build.VERSION.SDK_INT >= 11) { 65c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell IMPL = new NotificationCompatImplHoneycomb(); 66c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } else { 67c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell IMPL = new NotificationCompatImplBase(); 68c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 69c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 70c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 71c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 72c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Builder class for {@link Notification} objects. Allows easier control over 73c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * all the flags, as well as help constructing the typical notification layouts. 74c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 75c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public static class Builder { 76c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Context mContext; 77c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 78c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell CharSequence mContentTitle; 79c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell CharSequence mContentText; 80c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell PendingIntent mContentIntent; 81c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell PendingIntent mFullScreenIntent; 82c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell RemoteViews mTickerView; 83c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Bitmap mLargeIcon; 84c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell CharSequence mContentInfo; 85c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell int mNumber; 86c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 87c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell Notification mNotification = new Notification(); 88c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 89c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 90c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Constructor. 91c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 92c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Automatically sets the when field to {@link System#currentTimeMillis() 93c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * System.currentTimeMillis()} and the audio stream to the 94c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * {@link Notification#STREAM_DEFAULT}. 95c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 96c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param context A {@link Context} that will be used to construct the 97c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * RemoteViews. The Context will not be held past the lifetime of this 98c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Builder object. 99c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 100c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder(Context context) { 101c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContext = context; 102c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 103c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell // Set defaults to match the defaults of a Notification 104c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.when = System.currentTimeMillis(); 105c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.audioStreamType = Notification.STREAM_DEFAULT; 106c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 107c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 108c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 109c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the time that the event occurred. Notifications in the panel are 110c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * sorted by this time. 111c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 112c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setWhen(long when) { 113c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.when = when; 114c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 115c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 116c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 117c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 118c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the small icon to use in the notification layouts. Different classes of devices 119c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * may return different sizes. See the UX guidelines for more information on how to 120c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * design these icons. 121c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 122c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param icon A resource ID in the application's package of the drawble to use. 123c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 124c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSmallIcon(int icon) { 125c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.icon = icon; 126c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 127c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 128c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 129c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 130c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * A variant of {@link #setSmallIcon(int) setSmallIcon(int)} that takes an additional 131c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * level parameter for when the icon is a {@link android.graphics.drawable.LevelListDrawable 132c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * LevelListDrawable}. 133c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 134c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param icon A resource ID in the application's package of the drawble to use. 135c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param level The level to use for the icon. 136c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 137c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see android.graphics.drawable.LevelListDrawable 138c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 139c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSmallIcon(int icon, int level) { 140c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.icon = icon; 141c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.iconLevel = level; 142c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 143c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 144c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 145c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 146c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the title (first row) of the notification, in a standard notification. 147c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 148c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentTitle(CharSequence title) { 149c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContentTitle = title; 150c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 151c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 152c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 153c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 154c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the text (second row) of the notification, in a standard notification. 155c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 156c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentText(CharSequence text) { 157c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContentText = text; 158c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 159c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 160c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 161c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 162c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the large number at the right-hand side of the notification. This is 163c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * equivalent to setContentInfo, although it might show the number in a different 164c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * font size for readability. 165c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 166c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setNumber(int number) { 167c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNumber = number; 168c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 169c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 170c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 171c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 172c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the large text at the right-hand side of the notification. 173c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 174c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentInfo(CharSequence info) { 175c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContentInfo = info; 176c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 177c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 178c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 179c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 180c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the progress this notification represents, which may be 181c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * represented as a {@link ProgressBar}. 182c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 183c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /* TODO 184c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setProgress(int max, int progress, boolean indeterminate) { 185c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mProgressMax = max; 186c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mProgress = progress; 187c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mProgressIndeterminate = indeterminate; 188c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 189c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell }*/ 190c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 191c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 192c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Supply a custom RemoteViews to use instead of the standard one. 193c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 194c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContent(RemoteViews views) { 195c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.contentView = views; 196c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 197c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 198c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 199c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 200c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Supply a {@link PendingIntent} to send when the notification is clicked. 201c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * If you do not supply an intent, you can now add PendingIntents to individual 202c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * views to be launched when clicked by calling {@link RemoteViews#setOnClickPendingIntent 203c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * RemoteViews.setOnClickPendingIntent(int,PendingIntent)}. Be sure to 204c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * read {@link Notification#contentIntent Notification.contentIntent} for 205c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * how to correctly use this. 206c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 207c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setContentIntent(PendingIntent intent) { 208c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mContentIntent = intent; 209c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 210c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 211c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 212c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 213c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Supply a {@link PendingIntent} to send when the notification is cleared by the user 214c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * directly from the notification panel. For example, this intent is sent when the user 215c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * clicks the "Clear all" button, or the individual "X" buttons on notifications. This 216c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * intent is not sent when the application calls {@link NotificationManager#cancel 217c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * NotificationManager.cancel(int)}. 218c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 219c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setDeleteIntent(PendingIntent intent) { 220c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.deleteIntent = intent; 221c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 222c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 223c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 224c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 225c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * An intent to launch instead of posting the notification to the status bar. 226c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Only for use with extremely high-priority notifications demanding the user's 227c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <strong>immediate</strong> attention, such as an incoming phone call or 228c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * alarm clock that the user has explicitly set to a particular time. 229c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * If this facility is used for something else, please give the user an option 230c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * to turn it off and use a normal notification, as this can be extremely 231c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * disruptive. 232c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 233c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param intent The pending intent to launch. 234c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @param highPriority Passing true will cause this notification to be sent 235c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * even if other notifications are suppressed. 236c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 237c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) { 238c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mFullScreenIntent = intent; 239c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(FLAG_HIGH_PRIORITY, highPriority); 240c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 241c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 242c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 243c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 244c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the text that is displayed in the status bar when the notification first 245c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * arrives. 246c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 247c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setTicker(CharSequence tickerText) { 248c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.tickerText = tickerText; 249c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 250c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 251c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 252c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 253c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the text that is displayed in the status bar when the notification first 254c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * arrives, and also a RemoteViews object that may be displayed instead on some 255c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * devices. 256c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 257c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setTicker(CharSequence tickerText, RemoteViews views) { 258c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.tickerText = tickerText; 259c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mTickerView = views; 260c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 261c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 262c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 263c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 264c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the large icon that is shown in the ticker and notification. 265c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 266c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setLargeIcon(Bitmap icon) { 267c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mLargeIcon = icon; 268c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 269c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 270c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 271c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 272c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the sound to play. It will play on the default stream. 273c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 274c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSound(Uri sound) { 275c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.sound = sound; 276c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.audioStreamType = Notification.STREAM_DEFAULT; 277c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 278c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 279c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 280c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 281c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the sound to play. It will play on the stream you supply. 282c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 283c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see #STREAM_DEFAULT 284c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see AudioManager for the <code>STREAM_</code> constants. 285c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 286c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setSound(Uri sound, int streamType) { 287c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.sound = sound; 288c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.audioStreamType = streamType; 289c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 290c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 291c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 292c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 293c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the vibration pattern to use. 294c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 295c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * @see android.os.Vibrator for a discussion of the <code>pattern</code> 296c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * parameter. 297c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 298c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setVibrate(long[] pattern) { 299c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.vibrate = pattern; 300c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 301c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 302c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 303c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 304c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the argb value that you would like the LED on the device to blnk, as well as the 305c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * rate. The rate is specified in terms of the number of milliseconds to be on 306c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * and then the number of milliseconds to be off. 307c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 308c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setLights(int argb, int onMs, int offMs) { 309c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.ledARGB = argb; 310c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.ledOnMS = onMs; 311c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.ledOffMS = offMs; 312c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell boolean showLights = mNotification.ledOnMS != 0 && mNotification.ledOffMS != 0; 313c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags = (mNotification.flags & ~Notification.FLAG_SHOW_LIGHTS) | 314c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell (showLights ? Notification.FLAG_SHOW_LIGHTS : 0); 315c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 316c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 317c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 318c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 319c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set whether this is an ongoing notification. 320c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * 321c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p>Ongoing notifications differ from regular notifications in the following ways: 322c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <ul> 323c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <li>Ongoing notifications are sorted above the regular notifications in the 324c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * notification panel.</li> 325c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <li>Ongoing notifications do not have an 'X' close button, and are not affected 326c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * by the "Clear all" button. 327c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * </ul> 328c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 329c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setOngoing(boolean ongoing) { 330c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(Notification.FLAG_ONGOING_EVENT, ongoing); 331c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 332c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 333c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 334c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 335c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set this flag if you would only like the sound, vibrate 336c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * and ticker to be played if the notification is not already showing. 337c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 338c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setOnlyAlertOnce(boolean onlyAlertOnce) { 339c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(Notification.FLAG_ONLY_ALERT_ONCE, onlyAlertOnce); 340c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 341c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 342c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 343c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 344c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Setting this flag will make it so the notification is automatically 345c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * canceled when the user clicks it in the panel. The PendingIntent 346c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * set with {@link #setDeleteIntent} will be broadcast when the notification 347c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * is canceled. 348c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 349c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setAutoCancel(boolean autoCancel) { 350c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell setFlag(Notification.FLAG_AUTO_CANCEL, autoCancel); 351c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 352c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 353c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 354c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 355c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Set the default notification options that will be used. 356c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p> 357c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * The value should be one or more of the following fields combined with 358c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * bitwise-or: 359c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * {@link Notification#DEFAULT_SOUND}, {@link Notification#DEFAULT_VIBRATE}, 360c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * {@link Notification#DEFAULT_LIGHTS}. 361c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * <p> 362c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * For all default values, use {@link Notification#DEFAULT_ALL}. 363c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 364c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Builder setDefaults(int defaults) { 365c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.defaults = defaults; 366c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell if ((defaults & Notification.DEFAULT_LIGHTS) != 0) { 367c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags |= Notification.FLAG_SHOW_LIGHTS; 368c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 369c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return this; 370c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 371c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 372c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell private void setFlag(int mask, boolean value) { 373c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell if (value) { 374c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags |= mask; 375c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } else { 376c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell mNotification.flags &= ~mask; 377c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 378c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 379c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell 380c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell /** 381c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * Combine all of the options that have been set and return a new {@link Notification} 382c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell * object. 383c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell */ 384c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell public Notification getNotification() { 385c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell return (Notification) IMPL.getNotification(this); 386c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 387c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell } 388c9cf2eb0a9b6694d0fda3dbc313844955db60820Adam Powell} 389