12c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer/*
22c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * Copyright (c) 2016, The Android Open Source Project
32c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *
42c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * Licensed under the Apache License, Version 2.0 (the "License");
52c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * you may not use this file except in compliance with the License.
62c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * You may obtain a copy of the License at
72c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *
82c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *     http://www.apache.org/licenses/LICENSE-2.0
92c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *
102c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * Unless required by applicable law or agreed to in writing, software
112c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * distributed under the License is distributed on an "AS IS" BASIS,
122c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * See the License for the specific language governing permissions and
142c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * limitations under the License.
152c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer */
162c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerpackage com.android.car.stream;
172c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
182c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerimport android.app.PendingIntent;
192c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerimport android.graphics.Bitmap;
202c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerimport android.os.Bundle;
212c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
222c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer/**
232c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * An extension to {@link StreamCard} that holds data for media playback controls.
242c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer */
252c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerpublic class MediaPlaybackExtension extends StreamCardExtension {
262c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String TITLE_KEY = "title_key";
272c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String SUBTITLE_KEY = "subtitle_key";
282c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String ALBUM_ART_ICON_KEY = "album_art_icon";
292c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String ACCENT_COLOR_KEY = "accent_color";
302c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String CAN_SKIP_TO_NEXT_KEY = "can_skip_to_next";
312c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String CAN_SKIP_TO_PREV_KEY = "can_skip_to_prev";
322c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String HAS_PAUSE_KEY = "has_pause";
332c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String IS_PLAYING_KEY = "is_playing";
342c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String APP_NAME_KEY = "app_name";
352c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
362c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String SKIP_TO_NEXT_ACTION_KEY = "skip_to_next_action";
372c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String SKIP_TO_PREVIOUS_ACTION_KEY = "skip_to_previous_action";
382c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String PLAY_ACTION_KEY = "play_action";
392c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String PAUSE_ACTION_KEY = "pause_action";
402c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String STOP_ACTION_KEY = "stop_action";
412c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
422c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private String mTitle;
432c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private String mSubTitle;
442c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private Bitmap mAlbumArt;
452c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private int mAppAccentColor;
462c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private String mAppName;
472c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
482c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private boolean mCanSkipToNext = false;
492c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private boolean mCanSkipToPrevious = false;
502c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private boolean mHasPause = false;
512c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private boolean mIsPlaying = false;
522c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
532c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mPauseAction;
542c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mSkipToNextAction;
552c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mSkipToPreviousAction;
562c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mPlayAction;
572c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mStopAction;
582c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
592c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public static final Creator<MediaPlaybackExtension> CREATOR
602c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            = new BundleableCreator<>(MediaPlaybackExtension.class);
612c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
622c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public MediaPlaybackExtension() {}
632c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
642c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public MediaPlaybackExtension(
652c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            String title,
662c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            String subtitle,
672c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            Bitmap albumArt,
682c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            int appAccentColor,
692c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            boolean canSkipToNext,
702c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            boolean canSkipToPrevious,
712c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            boolean hasPause,
722c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            boolean isPlaying,
732c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            String appName,
742c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent stopAction,
752c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent pauseAction,
762c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent playAction,
772c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent skipToNextAction,
782c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent skipToPreviousAction) {
792c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
802c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mTitle = title;
812c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mSubTitle = subtitle;
822c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAlbumArt = albumArt;
832c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAppAccentColor = appAccentColor;
842c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCanSkipToNext = canSkipToNext;
852c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCanSkipToPrevious = canSkipToPrevious;
862c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mHasPause = hasPause;
872c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mIsPlaying = isPlaying;
882c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAppName = appName;
892c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
902c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mStopAction = stopAction;
912c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mPauseAction = pauseAction;
922c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mPlayAction = playAction;
932c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mSkipToNextAction = skipToNextAction;
942c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mSkipToPreviousAction = skipToPreviousAction;
952c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
962c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
972c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public String getTitle() {
982c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mTitle;
992c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1002c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1012c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public String getSubtitle() {
1022c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mSubTitle;
1032c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1042c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1052c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public Bitmap getAlbumArt() {
1062c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mAlbumArt;
1072c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1082c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1092c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public int getAppAccentColor() {
1102c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mAppAccentColor;
1112c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1122c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1132c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public boolean canSkipToNext() {
1142c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mCanSkipToNext;
1152c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1162c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1172c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public boolean canSkipToPrevious() {
1182c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mCanSkipToPrevious;
1192c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1202c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1212c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public boolean hasPause() {
1222c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mHasPause;
1232c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1242c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1252c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public boolean isPlaying() {
1262c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mIsPlaying;
1272c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1282c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1292c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public String getAppName() {
1302c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mAppName;
1312c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1322c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1332c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getStopAction() {
1342c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mStopAction;
1352c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1362c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1372c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getPlayAction() {
1382c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mPlayAction;
1392c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1402c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1412c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getSkipToPreviousAction() {
1422c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mSkipToPreviousAction;
1432c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1442c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1452c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getSkipToNextAction() {
1462c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mSkipToNextAction;
1472c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1482c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1492c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getPauseAction() {
1502c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mPauseAction;
1512c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1522c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1532c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    @Override
1542c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    protected void writeToBundle(Bundle bundle) {
1552c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putString(TITLE_KEY, mTitle);
1562c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putString(SUBTITLE_KEY, mSubTitle);
1572c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(ALBUM_ART_ICON_KEY, mAlbumArt);
1582c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putBoolean(CAN_SKIP_TO_NEXT_KEY, mCanSkipToNext);
1592c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putBoolean(CAN_SKIP_TO_PREV_KEY, mCanSkipToPrevious);
1602c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putBoolean(HAS_PAUSE_KEY, mHasPause);
1612c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putBoolean(IS_PLAYING_KEY, mIsPlaying);
1622c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putInt(ACCENT_COLOR_KEY, mAppAccentColor);
1632c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putString(APP_NAME_KEY, mAppName);
1642c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1652c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(STOP_ACTION_KEY, mStopAction);
1662c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(PLAY_ACTION_KEY, mPlayAction);
1672c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(PAUSE_ACTION_KEY, mPauseAction);
1682c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(SKIP_TO_NEXT_ACTION_KEY, mSkipToNextAction);
1692c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(SKIP_TO_PREVIOUS_ACTION_KEY, mSkipToPreviousAction);
1702c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1712c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1722c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    @Override
1732c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    protected void readFromBundle(Bundle bundle) {
1742c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mTitle = bundle.getString(TITLE_KEY);
1752c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mSubTitle = bundle.getString(SUBTITLE_KEY);
1762c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAlbumArt = bundle.getParcelable(ALBUM_ART_ICON_KEY);
1772c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCanSkipToNext = bundle.getBoolean(CAN_SKIP_TO_NEXT_KEY);
1782c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCanSkipToPrevious = bundle.getBoolean(CAN_SKIP_TO_PREV_KEY);
1792c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mHasPause = bundle.getBoolean(HAS_PAUSE_KEY);
1802c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mIsPlaying = bundle.getBoolean(IS_PLAYING_KEY);
1812c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAppAccentColor = bundle.getInt(ACCENT_COLOR_KEY);
1822c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAppName = bundle.getString(APP_NAME_KEY);
1832c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1842c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mStopAction = bundle.getParcelable(STOP_ACTION_KEY);
1852c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mPlayAction = bundle.getParcelable(PLAY_ACTION_KEY);
1862c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mPauseAction = bundle.getParcelable(PAUSE_ACTION_KEY);
1872c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mSkipToNextAction = bundle.getParcelable(SKIP_TO_NEXT_ACTION_KEY);
1882c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mSkipToPreviousAction = bundle.getParcelable(SKIP_TO_PREVIOUS_ACTION_KEY);
1892c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1902c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer}
191