175e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney/*
275e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * Copyright (C) 2014 The Android Open Source Project
375e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney *
475e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * Licensed under the Apache License, Version 2.0 (the "License");
575e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * you may not use this file except in compliance with the License.
675e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * You may obtain a copy of the License at
775e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney *
875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney *      http://www.apache.org/licenses/LICENSE-2.0
975e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney *
1075e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * Unless required by applicable law or agreed to in writing, software
1175e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * distributed under the License is distributed on an "AS IS" BASIS,
1275e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1375e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * See the License for the specific language governing permissions and
1475e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney * limitations under the License.
1575e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney */
1675e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney
1775e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinneypackage android.support.v4.app;
1875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney
1975e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinneyimport android.app.Notification;
2043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazenimport android.app.PendingIntent;
2143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazenimport android.content.Context;
2243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazenimport android.graphics.Bitmap;
2343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazenimport android.os.Bundle;
2473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Songimport android.os.Parcelable;
2543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazenimport android.widget.RemoteViews;
2643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen
2743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazenimport java.util.ArrayList;
2875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney
2975e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinneyclass NotificationCompatApi21 {
3075e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney
311f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_CALL = Notification.CATEGORY_CALL;
321f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_MESSAGE = Notification.CATEGORY_MESSAGE;
331f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_EMAIL = Notification.CATEGORY_EMAIL;
341f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_EVENT = Notification.CATEGORY_EVENT;
351f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_PROMO = Notification.CATEGORY_PROMO;
361f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_ALARM = Notification.CATEGORY_ALARM;
371f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_PROGRESS = Notification.CATEGORY_PROGRESS;
381f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_SOCIAL = Notification.CATEGORY_SOCIAL;
391f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_ERROR = Notification.CATEGORY_ERROR;
401f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_TRANSPORT = Notification.CATEGORY_TRANSPORT;
411f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_SYSTEM = Notification.CATEGORY_SYSTEM;
421f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_SERVICE = Notification.CATEGORY_SERVICE;
431f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_RECOMMENDATION = Notification.CATEGORY_RECOMMENDATION;
441f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney    public static final String CATEGORY_STATUS = Notification.CATEGORY_STATUS;
451f94e518424cbf818607f63e353f2a597ed1dd37Bryan Mawhinney
4673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_AUTHOR = "author";
4773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_TEXT = "text";
4873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_MESSAGES = "messages";
4973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_REMOTE_INPUT = "remote_input";
5073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_ON_REPLY = "on_reply";
5173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_ON_READ = "on_read";
5273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_PARTICIPANTS = "participants";
5373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static final String KEY_TIMESTAMP = "timestamp";
5473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
5543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen    public static class Builder implements NotificationBuilderWithBuilderAccessor,
5643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen            NotificationBuilderWithActions {
5743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        private Notification.Builder b;
58300828fd69bd2bfcefaf54795d03492938efd971Alex Hills        private Bundle mExtras;
59c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds        private RemoteViews mContentView;
60c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds        private RemoteViews mBigContentView;
61c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds        private RemoteViews mHeadsUpContentView;
6243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen
6343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        public Builder(Context context, Notification n,
6443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                CharSequence contentTitle, CharSequence contentText, CharSequence contentInfo,
6543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                RemoteViews tickerView, int number,
6643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                PendingIntent contentIntent, PendingIntent fullScreenIntent, Bitmap largeIcon,
6748d8878e34b0d9983166418378125b63faac9aabGriff Hazen                int progressMax, int progress, boolean progressIndeterminate, boolean showWhen,
6843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                boolean useChronometer, int priority, CharSequence subText, boolean localOnly,
6943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                String category, ArrayList<String> people, Bundle extras, int color,
7043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                int visibility, Notification publicVersion, String groupKey, boolean groupSummary,
71c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds                String sortKey, RemoteViews contentView, RemoteViews bigContentView,
72c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds                RemoteViews headsUpContentView) {
7343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen            b = new Notification.Builder(context)
7443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setWhen(n.when)
7548d8878e34b0d9983166418378125b63faac9aabGriff Hazen                    .setShowWhen(showWhen)
7643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setSmallIcon(n.icon, n.iconLevel)
7743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setContent(n.contentView)
7843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setTicker(n.tickerText, tickerView)
7943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setSound(n.sound, n.audioStreamType)
8043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setVibrate(n.vibrate)
8143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setLights(n.ledARGB, n.ledOnMS, n.ledOffMS)
8243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setOngoing((n.flags & Notification.FLAG_ONGOING_EVENT) != 0)
8343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setOnlyAlertOnce((n.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0)
8443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setAutoCancel((n.flags & Notification.FLAG_AUTO_CANCEL) != 0)
8543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setDefaults(n.defaults)
8643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setContentTitle(contentTitle)
8743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setContentText(contentText)
8843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setSubText(subText)
8943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setContentInfo(contentInfo)
9043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setContentIntent(contentIntent)
9143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setDeleteIntent(n.deleteIntent)
9243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setFullScreenIntent(fullScreenIntent,
9343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                            (n.flags & Notification.FLAG_HIGH_PRIORITY) != 0)
9443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setLargeIcon(largeIcon)
9543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setNumber(number)
9643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setUsesChronometer(useChronometer)
9743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setPriority(priority)
9843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setProgress(progressMax, progress, progressIndeterminate)
9943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setLocalOnly(localOnly)
10043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setGroup(groupKey)
10143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setGroupSummary(groupSummary)
10243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setSortKey(sortKey)
10343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setCategory(category)
10443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setColor(color)
10543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setVisibility(visibility)
10643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                    .setPublicVersion(publicVersion);
107300828fd69bd2bfcefaf54795d03492938efd971Alex Hills            mExtras = new Bundle();
108300828fd69bd2bfcefaf54795d03492938efd971Alex Hills            if (extras != null) {
109300828fd69bd2bfcefaf54795d03492938efd971Alex Hills                mExtras.putAll(extras);
110300828fd69bd2bfcefaf54795d03492938efd971Alex Hills            }
11143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen            for (String person: people) {
11243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen                b.addPerson(person);
11343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen            }
114c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds            mContentView = contentView;
115c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds            mBigContentView = bigContentView;
116c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds            mHeadsUpContentView = headsUpContentView;
11743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        }
11843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen
11943c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        @Override
12043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        public void addAction(NotificationCompatBase.Action action) {
12143c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen            NotificationCompatApi20.addAction(b, action);
12243c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        }
12343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen
12443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        @Override
12543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        public Notification.Builder getBuilder() {
12643c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen            return b;
12743c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        }
12843c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen
12910d7d250bc41b21059a90095e8b693c9e7bc3bc3Jorim Jaggi        @Override
13043c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        public Notification build() {
131300828fd69bd2bfcefaf54795d03492938efd971Alex Hills            b.setExtras(mExtras);
132c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds            Notification notification = b.build();
1333cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds            if (mContentView != null) {
1343cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds                notification.contentView = mContentView;
1353cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds            }
1363cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds            if (mBigContentView != null) {
1373cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds                notification.bigContentView = mBigContentView;
1383cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds            }
1393cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds            if (mHeadsUpContentView != null) {
1403cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds                notification.headsUpContentView = mHeadsUpContentView;
1413cf7cec91e0b038f9251273626a2237c802ecf67Julia Reynolds            }
142c66cf89198b97dc7e62370e32010bfe4a98ce11eJulia Reynolds            return notification;
14343c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen        }
14443c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen    }
14543c5718722bab1f836b7c94f2ec0bc19e653037cGriff Hazen
14675e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney    public static String getCategory(Notification notif) {
14775e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney        return notif.category;
14875e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney    }
14973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
15073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    static Bundle getBundleForUnreadConversation(NotificationCompatBase.UnreadConversation uc) {
15173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        if (uc == null) {
15273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            return null;
15373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
15473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        Bundle b = new Bundle();
15573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        String author = null;
15673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        if (uc.getParticipants() != null && uc.getParticipants().length > 1) {
15773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            author = uc.getParticipants()[0];
15873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
15973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        Parcelable[] messages = new Parcelable[uc.getMessages().length];
16073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        for (int i = 0; i < messages.length; i++) {
16173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            Bundle m = new Bundle();
16273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            m.putString(KEY_TEXT, uc.getMessages()[i]);
16373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            m.putString(KEY_AUTHOR, author);
16473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            messages[i] = m;
16573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
16673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        b.putParcelableArray(KEY_MESSAGES, messages);
16773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        RemoteInputCompatBase.RemoteInput remoteInput = uc.getRemoteInput();
16873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        if (remoteInput != null) {
16973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            b.putParcelable(KEY_REMOTE_INPUT, fromCompatRemoteInput(remoteInput));
17073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
17173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        b.putParcelable(KEY_ON_REPLY, uc.getReplyPendingIntent());
17273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        b.putParcelable(KEY_ON_READ, uc.getReadPendingIntent());
17373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        b.putStringArray(KEY_PARTICIPANTS, uc.getParticipants());
17473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        b.putLong(KEY_TIMESTAMP, uc.getLatestTimestamp());
17573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        return b;
17673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    }
17773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
17873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    static NotificationCompatBase.UnreadConversation getUnreadConversationFromBundle(
17973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            Bundle b, NotificationCompatBase.UnreadConversation.Factory factory,
18073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            RemoteInputCompatBase.RemoteInput.Factory remoteInputFactory) {
18173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        if (b == null) {
18273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            return null;
18373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
18473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        Parcelable[] parcelableMessages = b.getParcelableArray(KEY_MESSAGES);
18573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        String[] messages = null;
18673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        if (parcelableMessages != null) {
18773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            String[] tmp = new String[parcelableMessages.length];
18873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            boolean success = true;
18973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            for (int i = 0; i < tmp.length; i++) {
19073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                if (!(parcelableMessages[i] instanceof Bundle)) {
19173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                    success = false;
19273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                    break;
19373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                }
19473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                tmp[i] = ((Bundle) parcelableMessages[i]).getString(KEY_TEXT);
19573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                if (tmp[i] == null) {
19673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                    success = false;
19773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                    break;
19873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                }
19973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            }
20073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            if (success) {
20173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                messages = tmp;
20273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            } else {
20373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                return null;
20473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            }
20573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
20673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
20773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        PendingIntent onRead = b.getParcelable(KEY_ON_READ);
20873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        PendingIntent onReply = b.getParcelable(KEY_ON_REPLY);
20973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
21073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        android.app.RemoteInput remoteInput = b.getParcelable(KEY_REMOTE_INPUT);
21173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
21273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        String[] participants = b.getStringArray(KEY_PARTICIPANTS);
21373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        if (participants == null || participants.length != 1) {
21473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            return null;
21573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        }
21673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
21773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
21873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        return factory.build(
21973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                messages,
22073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                remoteInput != null ? toCompatRemoteInput(remoteInput, remoteInputFactory) : null,
22173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                onReply,
22273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                onRead,
22373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                participants, b.getLong(KEY_TIMESTAMP));
22473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    }
22573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
22673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static android.app.RemoteInput fromCompatRemoteInput(
22773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            RemoteInputCompatBase.RemoteInput src) {
22873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        return new android.app.RemoteInput.Builder(src.getResultKey())
22973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                .setLabel(src.getLabel())
23073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                .setChoices(src.getChoices())
23173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                .setAllowFreeFormInput(src.getAllowFreeFormInput())
23273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                .addExtras(src.getExtras())
23373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                .build();
23473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    }
23573342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song
23673342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    private static RemoteInputCompatBase.RemoteInput toCompatRemoteInput(
23773342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            android.app.RemoteInput remoteInput,
23873342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song            RemoteInputCompatBase.RemoteInput.Factory factory) {
23973342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song        return factory.build(remoteInput.getResultKey(),
24073342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                remoteInput.getLabel(),
24173342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                remoteInput.getChoices(),
24273342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                remoteInput.getAllowFreeFormInput(),
24373342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song                remoteInput.getExtras());
24473342e6c85cc814b7117fb3a642c230021d6b7e9Zhen Yu Song    }
24575e2071f16bae2b22d1618026d10337daad862cfBryan Mawhinney}
246