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