147702147608084fec16a50640da54b412c737b9cGriff Hazen/* 247702147608084fec16a50640da54b412c737b9cGriff Hazen * Copyright (C) 2014 The Android Open Source Project 347702147608084fec16a50640da54b412c737b9cGriff Hazen * 447702147608084fec16a50640da54b412c737b9cGriff Hazen * Licensed under the Apache License, Version 2.0 (the "License"); 547702147608084fec16a50640da54b412c737b9cGriff Hazen * you may not use this file except in compliance with the License. 647702147608084fec16a50640da54b412c737b9cGriff Hazen * You may obtain a copy of the License at 747702147608084fec16a50640da54b412c737b9cGriff Hazen * 847702147608084fec16a50640da54b412c737b9cGriff Hazen * http://www.apache.org/licenses/LICENSE-2.0 947702147608084fec16a50640da54b412c737b9cGriff Hazen * 1047702147608084fec16a50640da54b412c737b9cGriff Hazen * Unless required by applicable law or agreed to in writing, software 1147702147608084fec16a50640da54b412c737b9cGriff Hazen * distributed under the License is distributed on an "AS IS" BASIS, 1247702147608084fec16a50640da54b412c737b9cGriff Hazen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1347702147608084fec16a50640da54b412c737b9cGriff Hazen * See the License for the specific language governing permissions and 1447702147608084fec16a50640da54b412c737b9cGriff Hazen * limitations under the License. 1547702147608084fec16a50640da54b412c737b9cGriff Hazen */ 1647702147608084fec16a50640da54b412c737b9cGriff Hazen 1747702147608084fec16a50640da54b412c737b9cGriff Hazenpackage android.support.v4.app; 1847702147608084fec16a50640da54b412c737b9cGriff Hazen 1947702147608084fec16a50640da54b412c737b9cGriff Hazenimport android.app.Notification; 2047702147608084fec16a50640da54b412c737b9cGriff Hazenimport android.app.PendingIntent; 2147702147608084fec16a50640da54b412c737b9cGriff Hazenimport android.content.Context; 2247702147608084fec16a50640da54b412c737b9cGriff Hazenimport android.graphics.Bitmap; 2347702147608084fec16a50640da54b412c737b9cGriff Hazenimport android.os.Bundle; 24300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazenimport android.util.SparseArray; 2547702147608084fec16a50640da54b412c737b9cGriff Hazenimport android.widget.RemoteViews; 2647702147608084fec16a50640da54b412c737b9cGriff Hazen 27334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wrenimport java.util.ArrayList; 28300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazenimport java.util.List; 29334514fd61bd192cee3475b3ba44adb4f54a1f89Chris Wren 3047702147608084fec16a50640da54b412c737b9cGriff Hazenclass NotificationCompatKitKat { 3147702147608084fec16a50640da54b412c737b9cGriff Hazen public static class Builder implements NotificationBuilderWithBuilderAccessor, 3247702147608084fec16a50640da54b412c737b9cGriff Hazen NotificationBuilderWithActions { 3347702147608084fec16a50640da54b412c737b9cGriff Hazen private Notification.Builder b; 3447702147608084fec16a50640da54b412c737b9cGriff Hazen private Bundle mExtras; 35300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen private List<Bundle> mActionExtrasList = new ArrayList<Bundle>(); 36c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds private RemoteViews mContentView; 37c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds private RemoteViews mBigContentView; 3847702147608084fec16a50640da54b412c737b9cGriff Hazen 3947702147608084fec16a50640da54b412c737b9cGriff Hazen public Builder(Context context, Notification n, 4047702147608084fec16a50640da54b412c737b9cGriff Hazen CharSequence contentTitle, CharSequence contentText, CharSequence contentInfo, 4147702147608084fec16a50640da54b412c737b9cGriff Hazen RemoteViews tickerView, int number, 4247702147608084fec16a50640da54b412c737b9cGriff Hazen PendingIntent contentIntent, PendingIntent fullScreenIntent, Bitmap largeIcon, 4348d8878e34b0d9983166418378125b63faac9aabGriff Hazen int progressMax, int progress, boolean progressIndeterminate, boolean showWhen, 4447702147608084fec16a50640da54b412c737b9cGriff Hazen boolean useChronometer, int priority, CharSequence subText, boolean localOnly, 45cd05a19c0775e69e93e4c93b0a48ab044b531d7aGriff Hazen ArrayList<String> people, Bundle extras, String groupKey, boolean groupSummary, 46c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds String sortKey, RemoteViews contentView, RemoteViews bigContentView) { 4747702147608084fec16a50640da54b412c737b9cGriff Hazen b = new Notification.Builder(context) 4847702147608084fec16a50640da54b412c737b9cGriff Hazen .setWhen(n.when) 4948d8878e34b0d9983166418378125b63faac9aabGriff Hazen .setShowWhen(showWhen) 5047702147608084fec16a50640da54b412c737b9cGriff Hazen .setSmallIcon(n.icon, n.iconLevel) 5147702147608084fec16a50640da54b412c737b9cGriff Hazen .setContent(n.contentView) 5247702147608084fec16a50640da54b412c737b9cGriff Hazen .setTicker(n.tickerText, tickerView) 5347702147608084fec16a50640da54b412c737b9cGriff Hazen .setSound(n.sound, n.audioStreamType) 5447702147608084fec16a50640da54b412c737b9cGriff Hazen .setVibrate(n.vibrate) 5547702147608084fec16a50640da54b412c737b9cGriff Hazen .setLights(n.ledARGB, n.ledOnMS, n.ledOffMS) 5647702147608084fec16a50640da54b412c737b9cGriff Hazen .setOngoing((n.flags & Notification.FLAG_ONGOING_EVENT) != 0) 5747702147608084fec16a50640da54b412c737b9cGriff Hazen .setOnlyAlertOnce((n.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0) 5847702147608084fec16a50640da54b412c737b9cGriff Hazen .setAutoCancel((n.flags & Notification.FLAG_AUTO_CANCEL) != 0) 5947702147608084fec16a50640da54b412c737b9cGriff Hazen .setDefaults(n.defaults) 6047702147608084fec16a50640da54b412c737b9cGriff Hazen .setContentTitle(contentTitle) 6147702147608084fec16a50640da54b412c737b9cGriff Hazen .setContentText(contentText) 6247702147608084fec16a50640da54b412c737b9cGriff Hazen .setSubText(subText) 6347702147608084fec16a50640da54b412c737b9cGriff Hazen .setContentInfo(contentInfo) 6447702147608084fec16a50640da54b412c737b9cGriff Hazen .setContentIntent(contentIntent) 6547702147608084fec16a50640da54b412c737b9cGriff Hazen .setDeleteIntent(n.deleteIntent) 6647702147608084fec16a50640da54b412c737b9cGriff Hazen .setFullScreenIntent(fullScreenIntent, 6747702147608084fec16a50640da54b412c737b9cGriff Hazen (n.flags & Notification.FLAG_HIGH_PRIORITY) != 0) 6847702147608084fec16a50640da54b412c737b9cGriff Hazen .setLargeIcon(largeIcon) 6947702147608084fec16a50640da54b412c737b9cGriff Hazen .setNumber(number) 7047702147608084fec16a50640da54b412c737b9cGriff Hazen .setUsesChronometer(useChronometer) 7147702147608084fec16a50640da54b412c737b9cGriff Hazen .setPriority(priority) 7243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen .setProgress(progressMax, progress, progressIndeterminate); 73ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras = new Bundle(); 74ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (extras != null) { 75ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putAll(extras); 76ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 77ef9064724c669d8f72a8682b6e7b122008921d43Chris Wren if (people != null && !people.isEmpty()) { 78cd05a19c0775e69e93e4c93b0a48ab044b531d7aGriff Hazen mExtras.putStringArray(Notification.EXTRA_PEOPLE, 79ef9064724c669d8f72a8682b6e7b122008921d43Chris Wren people.toArray(new String[people.size()])); 80ef9064724c669d8f72a8682b6e7b122008921d43Chris Wren } 8147702147608084fec16a50640da54b412c737b9cGriff Hazen if (localOnly) { 82ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putBoolean(NotificationCompatJellybean.EXTRA_LOCAL_ONLY, true); 83ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 84ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (groupKey != null) { 85ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putString(NotificationCompatJellybean.EXTRA_GROUP_KEY, groupKey); 86ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (groupSummary) { 87ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putBoolean(NotificationCompatJellybean.EXTRA_GROUP_SUMMARY, true); 88ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } else { 89ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putBoolean(NotificationCompatJellybean.EXTRA_USE_SIDE_CHANNEL, true); 90ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 91ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 92ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (sortKey != null) { 93ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putString(NotificationCompatJellybean.EXTRA_SORT_KEY, sortKey); 9447702147608084fec16a50640da54b412c737b9cGriff Hazen } 95c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds mContentView = contentView; 96c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds mBigContentView = bigContentView; 9747702147608084fec16a50640da54b412c737b9cGriff Hazen } 9847702147608084fec16a50640da54b412c737b9cGriff Hazen 9947702147608084fec16a50640da54b412c737b9cGriff Hazen @Override 100ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public void addAction(NotificationCompatBase.Action action) { 101ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mActionExtrasList.add(NotificationCompatJellybean.writeActionAndGetExtras(b, action)); 10247702147608084fec16a50640da54b412c737b9cGriff Hazen } 10347702147608084fec16a50640da54b412c737b9cGriff Hazen 10447702147608084fec16a50640da54b412c737b9cGriff Hazen @Override 10547702147608084fec16a50640da54b412c737b9cGriff Hazen public Notification.Builder getBuilder() { 10647702147608084fec16a50640da54b412c737b9cGriff Hazen return b; 10747702147608084fec16a50640da54b412c737b9cGriff Hazen } 10847702147608084fec16a50640da54b412c737b9cGriff Hazen 10910d7d250bc41b21059a90095e8b693c9e7bc3bc3Jorim Jaggi @Override 11047702147608084fec16a50640da54b412c737b9cGriff Hazen public Notification build() { 111300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen SparseArray<Bundle> actionExtrasMap = NotificationCompatJellybean.buildActionExtrasMap( 112300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen mActionExtrasList); 113300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen if (actionExtrasMap != null) { 114300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen // Add the action extras sparse array if any action was added with extras. 115ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen mExtras.putSparseParcelableArray( 116300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen NotificationCompatJellybean.EXTRA_ACTION_EXTRAS, actionExtrasMap); 117300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 118ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen b.setExtras(mExtras); 119c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds Notification notification = b.build(); 120c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds if (mContentView != null) { 121c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds notification.contentView = mContentView; 122c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds } 123c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds if (mBigContentView != null) { 124c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds notification.bigContentView = mBigContentView; 125c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds } 126c158ac834fd71f19bbbdadc71de0d64c99b5d84aJulia Reynolds return notification; 12747702147608084fec16a50640da54b412c737b9cGriff Hazen } 12847702147608084fec16a50640da54b412c737b9cGriff Hazen } 12947702147608084fec16a50640da54b412c737b9cGriff Hazen 13047702147608084fec16a50640da54b412c737b9cGriff Hazen public static Bundle getExtras(Notification notif) { 13147702147608084fec16a50640da54b412c737b9cGriff Hazen return notif.extras; 13247702147608084fec16a50640da54b412c737b9cGriff Hazen } 13347702147608084fec16a50640da54b412c737b9cGriff Hazen 134300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen public static int getActionCount(Notification notif) { 135300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen return notif.actions != null ? notif.actions.length : 0; 136300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 137300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 138ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static NotificationCompatBase.Action getAction(Notification notif, 139ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen int actionIndex, NotificationCompatBase.Action.Factory factory, 140ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInputCompatBase.RemoteInput.Factory remoteInputFactory) { 141300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen Notification.Action action = notif.actions[actionIndex]; 142300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen Bundle actionExtras = null; 143300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen SparseArray<Bundle> actionExtrasMap = notif.extras.getSparseParcelableArray( 144300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen NotificationCompatJellybean.EXTRA_ACTION_EXTRAS); 145300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen if (actionExtrasMap != null) { 146300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen actionExtras = actionExtrasMap.get(actionIndex); 147300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 148ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return NotificationCompatJellybean.readAction(factory, remoteInputFactory, 149ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen action.icon, action.title, action.actionIntent, actionExtras); 150300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen } 151300ad7c234a0ccfc41ae7fdbdcdd57faece2a8e0Griff Hazen 15247702147608084fec16a50640da54b412c737b9cGriff Hazen public static boolean getLocalOnly(Notification notif) { 153ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return notif.extras.getBoolean(NotificationCompatJellybean.EXTRA_LOCAL_ONLY); 154ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 155ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 156ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static String getGroup(Notification notif) { 157ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return notif.extras.getString(NotificationCompatJellybean.EXTRA_GROUP_KEY); 158ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 159ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 160ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static boolean isGroupSummary(Notification notif) { 161ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return notif.extras.getBoolean(NotificationCompatJellybean.EXTRA_GROUP_SUMMARY); 162ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 163ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 164ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static String getSortKey(Notification notif) { 165ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return notif.extras.getString(NotificationCompatJellybean.EXTRA_SORT_KEY); 16647702147608084fec16a50640da54b412c737b9cGriff Hazen } 16747702147608084fec16a50640da54b412c737b9cGriff Hazen} 168