143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills/* 243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * Copyright (C) 2012 The Android Open Source Project 343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * 443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * Licensed under the Apache License, Version 2.0 (the "License"); 543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * you may not use this file except in compliance with the License. 643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * You may obtain a copy of the License at 743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * 843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * http://www.apache.org/licenses/LICENSE-2.0 943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * 1043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * Unless required by applicable law or agreed to in writing, software 1143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * distributed under the License is distributed on an "AS IS" BASIS, 1243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * See the License for the specific language governing permissions and 1443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills * limitations under the License. 1543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills */ 1643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 1743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillspackage android.support.v4.app; 1843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 1943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.app.Notification; 2043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.app.PendingIntent; 21300828fd69bd2bfcefaf54795d03492938efd971Alex Hillsimport android.app.RemoteInput; 2243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.content.Context; 2343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.graphics.Bitmap; 2443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.net.Uri; 2543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.os.Bundle; 2643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport android.widget.RemoteViews; 2743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 2843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport java.util.ArrayList; 2943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsimport java.util.List; 3043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 3143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hillsclass NotificationCompatApi24 { 3243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 3343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_CALL = Notification.CATEGORY_CALL; 3443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_MESSAGE = Notification.CATEGORY_MESSAGE; 3543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_EMAIL = Notification.CATEGORY_EMAIL; 3643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_EVENT = Notification.CATEGORY_EVENT; 3743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_PROMO = Notification.CATEGORY_PROMO; 3843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_ALARM = Notification.CATEGORY_ALARM; 3943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_PROGRESS = Notification.CATEGORY_PROGRESS; 4043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_SOCIAL = Notification.CATEGORY_SOCIAL; 4143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_ERROR = Notification.CATEGORY_ERROR; 4243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_TRANSPORT = Notification.CATEGORY_TRANSPORT; 4343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_SYSTEM = Notification.CATEGORY_SYSTEM; 4443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_SERVICE = Notification.CATEGORY_SERVICE; 4543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_RECOMMENDATION = Notification.CATEGORY_RECOMMENDATION; 4643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static final String CATEGORY_STATUS = Notification.CATEGORY_STATUS; 4743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 4843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static class Builder implements NotificationBuilderWithBuilderAccessor, 4943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills NotificationBuilderWithActions { 5043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills private Notification.Builder b; 5143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 5243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public Builder(Context context, Notification n, 5343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills CharSequence contentTitle, CharSequence contentText, CharSequence contentInfo, 5443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills RemoteViews tickerView, int number, 5543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills PendingIntent contentIntent, PendingIntent fullScreenIntent, Bitmap largeIcon, 5643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills int progressMax, int progress, boolean progressIndeterminate, boolean showWhen, 5743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills boolean useChronometer, int priority, CharSequence subText, boolean localOnly, 5843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills String category, ArrayList<String> people, Bundle extras, int color, 5943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills int visibility, Notification publicVersion, String groupKey, boolean groupSummary, 60c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds String sortKey, CharSequence[] remoteInputHistory, RemoteViews contentView, 61c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds RemoteViews bigContentView, RemoteViews headsUpContentView) { 6243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills b = new Notification.Builder(context) 6343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setWhen(n.when) 6443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setShowWhen(showWhen) 6543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setSmallIcon(n.icon, n.iconLevel) 6643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setContent(n.contentView) 6743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setTicker(n.tickerText, tickerView) 6843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setSound(n.sound, n.audioStreamType) 6943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setVibrate(n.vibrate) 7043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setLights(n.ledARGB, n.ledOnMS, n.ledOffMS) 7143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setOngoing((n.flags & Notification.FLAG_ONGOING_EVENT) != 0) 7243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setOnlyAlertOnce((n.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0) 7343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setAutoCancel((n.flags & Notification.FLAG_AUTO_CANCEL) != 0) 7443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setDefaults(n.defaults) 7543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setContentTitle(contentTitle) 7643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setContentText(contentText) 7743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setSubText(subText) 7843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setContentInfo(contentInfo) 7943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setContentIntent(contentIntent) 8043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setDeleteIntent(n.deleteIntent) 8143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setFullScreenIntent(fullScreenIntent, 8243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills (n.flags & Notification.FLAG_HIGH_PRIORITY) != 0) 8343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setLargeIcon(largeIcon) 8443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setNumber(number) 8543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setUsesChronometer(useChronometer) 8643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setPriority(priority) 8743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setProgress(progressMax, progress, progressIndeterminate) 8843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setLocalOnly(localOnly) 8943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setExtras(extras) 9043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setGroup(groupKey) 9143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setGroupSummary(groupSummary) 9243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setSortKey(sortKey) 9343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setCategory(category) 9443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setColor(color) 9543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setVisibility(visibility) 96aa9f90a465c9297207f4a52153216fa305bbafd3Aurimas Liutikas .setPublicVersion(publicVersion) 973cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds .setRemoteInputHistory(remoteInputHistory); 983cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds if (contentView != null) { 993cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds b.setCustomContentView(contentView); 1003cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds } 1013cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds if (bigContentView != null) { 1023cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds b.setCustomBigContentView(bigContentView); 1033cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds } 1043cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds if (headsUpContentView != null) { 1053cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds b.setCustomHeadsUpContentView(headsUpContentView); 1063cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds } 10743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills for (String person: people) { 10843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills b.addPerson(person); 10943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 11043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 11143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 11243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills @Override 11343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public void addAction(NotificationCompatBase.Action action) { 114300828fd69bd2bfcefaf54795d03492938efd971Alex Hills Notification.Action.Builder actionBuilder = new Notification.Action.Builder( 115300828fd69bd2bfcefaf54795d03492938efd971Alex Hills action.getIcon(), action.getTitle(), action.getActionIntent()); 116300828fd69bd2bfcefaf54795d03492938efd971Alex Hills if (action.getRemoteInputs() != null) { 117300828fd69bd2bfcefaf54795d03492938efd971Alex Hills for (RemoteInput remoteInput : RemoteInputCompatApi20.fromCompat( 118300828fd69bd2bfcefaf54795d03492938efd971Alex Hills action.getRemoteInputs())) { 119300828fd69bd2bfcefaf54795d03492938efd971Alex Hills actionBuilder.addRemoteInput(remoteInput); 120300828fd69bd2bfcefaf54795d03492938efd971Alex Hills } 121300828fd69bd2bfcefaf54795d03492938efd971Alex Hills } 122b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills Bundle actionExtras; 123300828fd69bd2bfcefaf54795d03492938efd971Alex Hills if (action.getExtras() != null) { 124b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills actionExtras = new Bundle(action.getExtras()); 125b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills } else { 126b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills actionExtras = new Bundle(); 127300828fd69bd2bfcefaf54795d03492938efd971Alex Hills } 128b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills actionExtras.putBoolean(NotificationCompatJellybean.EXTRA_ALLOW_GENERATED_REPLIES, 129b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills action.getAllowGeneratedReplies()); 130b75bd093faa15b6308a29477f9cf6ce3607b3fe5Alex Hills actionBuilder.addExtras(actionExtras); 131300828fd69bd2bfcefaf54795d03492938efd971Alex Hills actionBuilder.setAllowGeneratedReplies(action.getAllowGeneratedReplies()); 132300828fd69bd2bfcefaf54795d03492938efd971Alex Hills b.addAction(actionBuilder.build()); 13343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 13443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 13543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills @Override 13643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public Notification.Builder getBuilder() { 13743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills return b; 13843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 13943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 14043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills @Override 14143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public Notification build() { 14243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills return b.build(); 14343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 14443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 14543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills 14643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills public static void addMessagingStyle(NotificationBuilderWithBuilderAccessor b, 147300828fd69bd2bfcefaf54795d03492938efd971Alex Hills CharSequence userDisplayName, CharSequence conversationTitle, List<CharSequence> texts, 148300828fd69bd2bfcefaf54795d03492938efd971Alex Hills List<Long> timestamps, List<CharSequence> senders, List<String> dataMimeTypes, 149300828fd69bd2bfcefaf54795d03492938efd971Alex Hills List<Uri> dataUris) { 15043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills Notification.MessagingStyle style = new Notification.MessagingStyle(userDisplayName) 15143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills .setConversationTitle(conversationTitle); 15243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills for (int i = 0; i < texts.size(); i++) { 15343cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills Notification.MessagingStyle.Message message = new Notification.MessagingStyle.Message( 15443cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills texts.get(i), timestamps.get(i), senders.get(i)); 15543cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills if (dataMimeTypes.get(i) != null) { 15643cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills message.setData(dataMimeTypes.get(i), dataUris.get(i)); 15743cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 15843cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills style.addMessage(message); 15943cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 16043cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills style.setBuilder(b.getBuilder()); 16143cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills } 16243cbaca7b2d9a888c0a65df5fb6da73bf288505fAlex Hills} 163