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