1976b6a8c18550ace670e0410453741d11dafa474Ian Lake/* 2976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Copyright (C) 2015 The Android Open Source Project 3976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 4976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Licensed under the Apache License, Version 2.0 (the "License"); 5976b6a8c18550ace670e0410453741d11dafa474Ian Lake * you may not use this file except in compliance with the License. 6976b6a8c18550ace670e0410453741d11dafa474Ian Lake * You may obtain a copy of the License at 7976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 8976b6a8c18550ace670e0410453741d11dafa474Ian Lake * http://www.apache.org/licenses/LICENSE-2.0 9976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 10976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Unless required by applicable law or agreed to in writing, software 11976b6a8c18550ace670e0410453741d11dafa474Ian Lake * distributed under the License is distributed on an "AS IS" BASIS, 12976b6a8c18550ace670e0410453741d11dafa474Ian Lake * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13976b6a8c18550ace670e0410453741d11dafa474Ian Lake * See the License for the specific language governing permissions and 14976b6a8c18550ace670e0410453741d11dafa474Ian Lake * limitations under the License. 15976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 16976b6a8c18550ace670e0410453741d11dafa474Ian Lake 17976b6a8c18550ace670e0410453741d11dafa474Ian Lakepackage android.support.v7.app; 18976b6a8c18550ace670e0410453741d11dafa474Ian Lake 19976b6a8c18550ace670e0410453741d11dafa474Ian Lakeimport android.app.Notification; 20976b6a8c18550ace670e0410453741d11dafa474Ian Lakeimport android.app.PendingIntent; 21976b6a8c18550ace670e0410453741d11dafa474Ian Lakeimport android.content.Context; 22976b6a8c18550ace670e0410453741d11dafa474Ian Lakeimport android.os.Build; 23976b6a8c18550ace670e0410453741d11dafa474Ian Lakeimport android.support.v4.app.NotificationBuilderWithBuilderAccessor; 24976b6a8c18550ace670e0410453741d11dafa474Ian Lakeimport android.support.v4.media.session.MediaSessionCompat; 25976b6a8c18550ace670e0410453741d11dafa474Ian Lake 26976b6a8c18550ace670e0410453741d11dafa474Ian Lake/** 27976b6a8c18550ace670e0410453741d11dafa474Ian Lake * An extension of {@link android.support.v4.app.NotificationCompat} which supports 28976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link android.support.v7.app.NotificationCompat.MediaStyle}. You should start using this variant 29976b6a8c18550ace670e0410453741d11dafa474Ian Lake * if you need support for media styled notifications. 30976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 31976b6a8c18550ace670e0410453741d11dafa474Ian Lakepublic class NotificationCompat extends android.support.v4.app.NotificationCompat { 32976b6a8c18550ace670e0410453741d11dafa474Ian Lake 33976b6a8c18550ace670e0410453741d11dafa474Ian Lake private static void addMediaStyleToBuilderLollipop( 34976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationBuilderWithBuilderAccessor builder, android.support.v4.app.NotificationCompat.Style style) { 35976b6a8c18550ace670e0410453741d11dafa474Ian Lake if (style instanceof MediaStyle) { 36976b6a8c18550ace670e0410453741d11dafa474Ian Lake MediaStyle mediaStyle = (MediaStyle) style; 37976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationCompatImpl21.addMediaStyle(builder, 38976b6a8c18550ace670e0410453741d11dafa474Ian Lake mediaStyle.mActionsToShowInCompact, 39976b6a8c18550ace670e0410453741d11dafa474Ian Lake mediaStyle.mToken != null ? mediaStyle.mToken.getToken() : null); 40976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 41976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 42976b6a8c18550ace670e0410453741d11dafa474Ian Lake 43976b6a8c18550ace670e0410453741d11dafa474Ian Lake private static void addMediaStyleToBuilderIcs(NotificationBuilderWithBuilderAccessor builder, 44976b6a8c18550ace670e0410453741d11dafa474Ian Lake android.support.v4.app.NotificationCompat.Builder b) { 45976b6a8c18550ace670e0410453741d11dafa474Ian Lake if (b.mStyle instanceof MediaStyle) { 46976b6a8c18550ace670e0410453741d11dafa474Ian Lake MediaStyle mediaStyle = (MediaStyle) b.mStyle; 47976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationCompatImplBase.overrideContentView(builder, b.mContext, 48976b6a8c18550ace670e0410453741d11dafa474Ian Lake b.mContentTitle, 49976b6a8c18550ace670e0410453741d11dafa474Ian Lake b.mContentText, b.mContentInfo, b.mNumber, b.mLargeIcon, b.mSubText, 50976b6a8c18550ace670e0410453741d11dafa474Ian Lake b.mUseChronometer, b.mNotification.when, b.mActions, 51976b6a8c18550ace670e0410453741d11dafa474Ian Lake mediaStyle.mActionsToShowInCompact, mediaStyle.mShowCancelButton, 52976b6a8c18550ace670e0410453741d11dafa474Ian Lake mediaStyle.mCancelButtonIntent); 53976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 54976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 55976b6a8c18550ace670e0410453741d11dafa474Ian Lake 56976b6a8c18550ace670e0410453741d11dafa474Ian Lake private static void addBigMediaStyleToBuilderJellybean(Notification n, 57976b6a8c18550ace670e0410453741d11dafa474Ian Lake android.support.v4.app.NotificationCompat.Builder b) { 58976b6a8c18550ace670e0410453741d11dafa474Ian Lake if (b.mStyle instanceof MediaStyle) { 59976b6a8c18550ace670e0410453741d11dafa474Ian Lake MediaStyle mediaStyle = (MediaStyle) b.mStyle; 60976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationCompatImplBase.overrideBigContentView(n, b.mContext, 61976b6a8c18550ace670e0410453741d11dafa474Ian Lake b.mContentTitle, 62976b6a8c18550ace670e0410453741d11dafa474Ian Lake b.mContentText, b.mContentInfo, b.mNumber, b.mLargeIcon, b.mSubText, 63976b6a8c18550ace670e0410453741d11dafa474Ian Lake b.mUseChronometer, b.mNotification.when, b.mActions, 64976b6a8c18550ace670e0410453741d11dafa474Ian Lake mediaStyle.mShowCancelButton, mediaStyle.mCancelButtonIntent); 65976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 66976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 67976b6a8c18550ace670e0410453741d11dafa474Ian Lake 68976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 69976b6a8c18550ace670e0410453741d11dafa474Ian Lake * See {@link android.support.v4.app.NotificationCompat}. In addition to the builder in v4, this 70976b6a8c18550ace670e0410453741d11dafa474Ian Lake * builder also supports {@link MediaStyle}. 71976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 72976b6a8c18550ace670e0410453741d11dafa474Ian Lake public static class Builder extends android.support.v4.app.NotificationCompat.Builder { 73976b6a8c18550ace670e0410453741d11dafa474Ian Lake 74976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 75976b6a8c18550ace670e0410453741d11dafa474Ian Lake * @inheritDoc 76976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 77976b6a8c18550ace670e0410453741d11dafa474Ian Lake public Builder(Context context) { 78976b6a8c18550ace670e0410453741d11dafa474Ian Lake super(context); 79976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 80976b6a8c18550ace670e0410453741d11dafa474Ian Lake 810123b49428d4073cc4c7e04b16fe0cf658ecc7edAlan Viverette /** 820123b49428d4073cc4c7e04b16fe0cf658ecc7edAlan Viverette * @hide 830123b49428d4073cc4c7e04b16fe0cf658ecc7edAlan Viverette */ 84976b6a8c18550ace670e0410453741d11dafa474Ian Lake @Override 85976b6a8c18550ace670e0410453741d11dafa474Ian Lake protected BuilderExtender getExtender() { 86976b6a8c18550ace670e0410453741d11dafa474Ian Lake if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 87976b6a8c18550ace670e0410453741d11dafa474Ian Lake return new LollipopExtender(); 88976b6a8c18550ace670e0410453741d11dafa474Ian Lake } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 89976b6a8c18550ace670e0410453741d11dafa474Ian Lake return new JellybeanExtender(); 90976b6a8c18550ace670e0410453741d11dafa474Ian Lake } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 91976b6a8c18550ace670e0410453741d11dafa474Ian Lake return new IceCreamSandwichExtender(); 92976b6a8c18550ace670e0410453741d11dafa474Ian Lake } else { 93976b6a8c18550ace670e0410453741d11dafa474Ian Lake return super.getExtender(); 94976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 95976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 96976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 97976b6a8c18550ace670e0410453741d11dafa474Ian Lake 98976b6a8c18550ace670e0410453741d11dafa474Ian Lake private static class IceCreamSandwichExtender extends BuilderExtender { 99976b6a8c18550ace670e0410453741d11dafa474Ian Lake 100976b6a8c18550ace670e0410453741d11dafa474Ian Lake @Override 101976b6a8c18550ace670e0410453741d11dafa474Ian Lake public Notification build(android.support.v4.app.NotificationCompat.Builder b, 102976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationBuilderWithBuilderAccessor builder) { 103976b6a8c18550ace670e0410453741d11dafa474Ian Lake addMediaStyleToBuilderIcs(builder, b); 104976b6a8c18550ace670e0410453741d11dafa474Ian Lake return builder.build(); 105976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 106976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 107976b6a8c18550ace670e0410453741d11dafa474Ian Lake 108976b6a8c18550ace670e0410453741d11dafa474Ian Lake private static class JellybeanExtender extends BuilderExtender { 109976b6a8c18550ace670e0410453741d11dafa474Ian Lake 110976b6a8c18550ace670e0410453741d11dafa474Ian Lake @Override 111976b6a8c18550ace670e0410453741d11dafa474Ian Lake public Notification build(android.support.v4.app.NotificationCompat.Builder b, 112976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationBuilderWithBuilderAccessor builder) { 113976b6a8c18550ace670e0410453741d11dafa474Ian Lake addMediaStyleToBuilderIcs(builder, b); 114976b6a8c18550ace670e0410453741d11dafa474Ian Lake Notification n = builder.build(); 115976b6a8c18550ace670e0410453741d11dafa474Ian Lake addBigMediaStyleToBuilderJellybean(n, b); 116976b6a8c18550ace670e0410453741d11dafa474Ian Lake return n; 117976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 118976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 119976b6a8c18550ace670e0410453741d11dafa474Ian Lake 120976b6a8c18550ace670e0410453741d11dafa474Ian Lake private static class LollipopExtender extends BuilderExtender { 121976b6a8c18550ace670e0410453741d11dafa474Ian Lake 122976b6a8c18550ace670e0410453741d11dafa474Ian Lake @Override 123976b6a8c18550ace670e0410453741d11dafa474Ian Lake public Notification build(android.support.v4.app.NotificationCompat.Builder b, 124976b6a8c18550ace670e0410453741d11dafa474Ian Lake NotificationBuilderWithBuilderAccessor builder) { 125976b6a8c18550ace670e0410453741d11dafa474Ian Lake addMediaStyleToBuilderLollipop(builder, b.mStyle); 126976b6a8c18550ace670e0410453741d11dafa474Ian Lake return builder.build(); 127976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 128976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 129976b6a8c18550ace670e0410453741d11dafa474Ian Lake 130976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 131976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Notification style for media playback notifications. 132976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 133976b6a8c18550ace670e0410453741d11dafa474Ian Lake * In the expanded form, {@link Notification#bigContentView}, up to 5 134976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link android.support.v4.app.NotificationCompat.Action}s specified with 135976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link NotificationCompat.Builder#addAction(int, CharSequence, PendingIntent) addAction} will 136976b6a8c18550ace670e0410453741d11dafa474Ian Lake * be shown as icon-only pushbuttons, suitable for transport controls. The Bitmap given to 137976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link NotificationCompat.Builder#setLargeIcon(android.graphics.Bitmap) setLargeIcon()} will 138976b6a8c18550ace670e0410453741d11dafa474Ian Lake * be treated as album artwork. 139976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 140976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Unlike the other styles provided here, MediaStyle can also modify the standard-size 141976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link Notification#contentView}; by providing action indices to 142976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link #setShowActionsInCompactView(int...)} you can promote up to 3 actions to be displayed 143976b6a8c18550ace670e0410453741d11dafa474Ian Lake * in the standard view alongside the usual content. 144976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 145976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Notifications created with MediaStyle will have their category set to 146976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link Notification#CATEGORY_TRANSPORT CATEGORY_TRANSPORT} unless you set a different 147976b6a8c18550ace670e0410453741d11dafa474Ian Lake * category using {@link NotificationCompat.Builder#setCategory(String) setCategory()}. 148976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 149976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Finally, if you attach a {@link android.media.session.MediaSession.Token} using 150976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link android.support.v7.app.NotificationCompat.MediaStyle#setMediaSession}, the System UI 151976b6a8c18550ace670e0410453741d11dafa474Ian Lake * can identify this as a notification representing an active media session and respond 152976b6a8c18550ace670e0410453741d11dafa474Ian Lake * accordingly (by showing album artwork in the lockscreen, for example). 153976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 154976b6a8c18550ace670e0410453741d11dafa474Ian Lake * To use this style with your Notification, feed it to 155976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link NotificationCompat.Builder#setStyle} like so: 156976b6a8c18550ace670e0410453741d11dafa474Ian Lake * <pre class="prettyprint"> 157976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Notification noti = new NotificationCompat.Builder() 158976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .setSmallIcon(R.drawable.ic_stat_player) 159976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .setContentTitle("Track title") 160976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .setContentText("Artist - Album") 161976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .setLargeIcon(albumArtBitmap)) 162976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .setStyle(<b>new NotificationCompat.MediaStyle()</b> 163976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .setMediaSession(mySession)) 164976b6a8c18550ace670e0410453741d11dafa474Ian Lake * .build(); 165976b6a8c18550ace670e0410453741d11dafa474Ian Lake * </pre> 166976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 167976b6a8c18550ace670e0410453741d11dafa474Ian Lake * @see Notification#bigContentView 168976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 169976b6a8c18550ace670e0410453741d11dafa474Ian Lake public static class MediaStyle extends android.support.v4.app.NotificationCompat.Style { 170976b6a8c18550ace670e0410453741d11dafa474Ian Lake 171976b6a8c18550ace670e0410453741d11dafa474Ian Lake int[] mActionsToShowInCompact = null; 172976b6a8c18550ace670e0410453741d11dafa474Ian Lake MediaSessionCompat.Token mToken; 173976b6a8c18550ace670e0410453741d11dafa474Ian Lake boolean mShowCancelButton; 174976b6a8c18550ace670e0410453741d11dafa474Ian Lake PendingIntent mCancelButtonIntent; 175976b6a8c18550ace670e0410453741d11dafa474Ian Lake 176976b6a8c18550ace670e0410453741d11dafa474Ian Lake public MediaStyle() { 177976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 178976b6a8c18550ace670e0410453741d11dafa474Ian Lake 179976b6a8c18550ace670e0410453741d11dafa474Ian Lake public MediaStyle(android.support.v4.app.NotificationCompat.Builder builder) { 180976b6a8c18550ace670e0410453741d11dafa474Ian Lake setBuilder(builder); 181976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 182976b6a8c18550ace670e0410453741d11dafa474Ian Lake 183976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 184976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Request up to 3 actions (by index in the order of addition) to be shown in the compact 185976b6a8c18550ace670e0410453741d11dafa474Ian Lake * notification view. 186976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 187976b6a8c18550ace670e0410453741d11dafa474Ian Lake * @param actions the indices of the actions to show in the compact notification view 188976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 189976b6a8c18550ace670e0410453741d11dafa474Ian Lake public MediaStyle setShowActionsInCompactView(int...actions) { 190976b6a8c18550ace670e0410453741d11dafa474Ian Lake mActionsToShowInCompact = actions; 191976b6a8c18550ace670e0410453741d11dafa474Ian Lake return this; 192976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 193976b6a8c18550ace670e0410453741d11dafa474Ian Lake 194976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 195976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Attach a {@link MediaSessionCompat.Token} to this Notification 196976b6a8c18550ace670e0410453741d11dafa474Ian Lake * to provide additional playback information and control to the SystemUI. 197976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 198976b6a8c18550ace670e0410453741d11dafa474Ian Lake public MediaStyle setMediaSession(MediaSessionCompat.Token token) { 199976b6a8c18550ace670e0410453741d11dafa474Ian Lake mToken = token; 200976b6a8c18550ace670e0410453741d11dafa474Ian Lake return this; 201976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 202976b6a8c18550ace670e0410453741d11dafa474Ian Lake 203976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 204976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Sets whether a cancel button at the top right should be shown in the notification on 205976b6a8c18550ace670e0410453741d11dafa474Ian Lake * platforms before Lollipop. 206976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 207976b6a8c18550ace670e0410453741d11dafa474Ian Lake * <p>Prior to Lollipop, there was a bug in the framework which prevented the developer to 208976b6a8c18550ace670e0410453741d11dafa474Ian Lake * make a notification dismissable again after having used the same notification as the 209976b6a8c18550ace670e0410453741d11dafa474Ian Lake * ongoing notification for a foreground service. When the notification was posted by 210976b6a8c18550ace670e0410453741d11dafa474Ian Lake * {@link android.app.Service#startForeground}, but then the service exited foreground mode 211976b6a8c18550ace670e0410453741d11dafa474Ian Lake * via {@link android.app.Service#stopForeground}, without removing the notification, the 212976b6a8c18550ace670e0410453741d11dafa474Ian Lake * notification stayed ongoing, and thus not dismissable. 213976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 214976b6a8c18550ace670e0410453741d11dafa474Ian Lake * <p>This is a common scenario for media notifications, as this is exactly the service 215976b6a8c18550ace670e0410453741d11dafa474Ian Lake * lifecycle that happens when playing/pausing media. Thus, a workaround is provided by the 216976b6a8c18550ace670e0410453741d11dafa474Ian Lake * support library: Instead of making the notification ongoing depending on the playback 217976b6a8c18550ace670e0410453741d11dafa474Ian Lake * state, the support library provides the ability to add an explicit cancel button to the 218976b6a8c18550ace670e0410453741d11dafa474Ian Lake * notification. 219976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 220976b6a8c18550ace670e0410453741d11dafa474Ian Lake * <p>Note that the notification is enforced to be ongoing if a cancel button is shown to 221976b6a8c18550ace670e0410453741d11dafa474Ian Lake * provide a consistent user experience. 222976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 223976b6a8c18550ace670e0410453741d11dafa474Ian Lake * <p>Also note that this method is a no-op when running on Lollipop and later. 224976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 225976b6a8c18550ace670e0410453741d11dafa474Ian Lake * @param show whether to show a cancel button 226976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 227924b73bd0744363c063dc75a879414680c9cbeb4Ian Lake public MediaStyle setShowCancelButton(boolean show) { 228976b6a8c18550ace670e0410453741d11dafa474Ian Lake mShowCancelButton = show; 229924b73bd0744363c063dc75a879414680c9cbeb4Ian Lake return this; 230976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 231976b6a8c18550ace670e0410453741d11dafa474Ian Lake 232976b6a8c18550ace670e0410453741d11dafa474Ian Lake /** 233976b6a8c18550ace670e0410453741d11dafa474Ian Lake * Sets the pending intent to be sent when the cancel button is pressed. See {@link 234976b6a8c18550ace670e0410453741d11dafa474Ian Lake * #setShowCancelButton}. 235976b6a8c18550ace670e0410453741d11dafa474Ian Lake * 236976b6a8c18550ace670e0410453741d11dafa474Ian Lake * @param pendingIntent the intent to be sent when the cancel button is pressed 237976b6a8c18550ace670e0410453741d11dafa474Ian Lake */ 238924b73bd0744363c063dc75a879414680c9cbeb4Ian Lake public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) { 239976b6a8c18550ace670e0410453741d11dafa474Ian Lake mCancelButtonIntent = pendingIntent; 240924b73bd0744363c063dc75a879414680c9cbeb4Ian Lake return this; 241976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 242976b6a8c18550ace670e0410453741d11dafa474Ian Lake } 243976b6a8c18550ace670e0410453741d11dafa474Ian Lake} 244