1/*
2 * Copyright (c) 2016, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.car.stream;
17
18import android.app.PendingIntent;
19import android.graphics.Bitmap;
20import android.os.Bundle;
21
22/**
23 * An extension to {@link StreamCard} that holds data for media playback controls.
24 */
25public class MediaPlaybackExtension extends StreamCardExtension {
26    private static final String TITLE_KEY = "title_key";
27    private static final String SUBTITLE_KEY = "subtitle_key";
28    private static final String ALBUM_ART_ICON_KEY = "album_art_icon";
29    private static final String ACCENT_COLOR_KEY = "accent_color";
30    private static final String CAN_SKIP_TO_NEXT_KEY = "can_skip_to_next";
31    private static final String CAN_SKIP_TO_PREV_KEY = "can_skip_to_prev";
32    private static final String HAS_PAUSE_KEY = "has_pause";
33    private static final String IS_PLAYING_KEY = "is_playing";
34    private static final String APP_NAME_KEY = "app_name";
35
36    private static final String SKIP_TO_NEXT_ACTION_KEY = "skip_to_next_action";
37    private static final String SKIP_TO_PREVIOUS_ACTION_KEY = "skip_to_previous_action";
38    private static final String PLAY_ACTION_KEY = "play_action";
39    private static final String PAUSE_ACTION_KEY = "pause_action";
40    private static final String STOP_ACTION_KEY = "stop_action";
41
42    private String mTitle;
43    private String mSubTitle;
44    private Bitmap mAlbumArt;
45    private int mAppAccentColor;
46    private String mAppName;
47
48    private boolean mCanSkipToNext = false;
49    private boolean mCanSkipToPrevious = false;
50    private boolean mHasPause = false;
51    private boolean mIsPlaying = false;
52
53    private PendingIntent mPauseAction;
54    private PendingIntent mSkipToNextAction;
55    private PendingIntent mSkipToPreviousAction;
56    private PendingIntent mPlayAction;
57    private PendingIntent mStopAction;
58
59    public static final Creator<MediaPlaybackExtension> CREATOR
60            = new BundleableCreator<>(MediaPlaybackExtension.class);
61
62    public MediaPlaybackExtension() {}
63
64    public MediaPlaybackExtension(
65            String title,
66            String subtitle,
67            Bitmap albumArt,
68            int appAccentColor,
69            boolean canSkipToNext,
70            boolean canSkipToPrevious,
71            boolean hasPause,
72            boolean isPlaying,
73            String appName,
74            PendingIntent stopAction,
75            PendingIntent pauseAction,
76            PendingIntent playAction,
77            PendingIntent skipToNextAction,
78            PendingIntent skipToPreviousAction) {
79
80        mTitle = title;
81        mSubTitle = subtitle;
82        mAlbumArt = albumArt;
83        mAppAccentColor = appAccentColor;
84        mCanSkipToNext = canSkipToNext;
85        mCanSkipToPrevious = canSkipToPrevious;
86        mHasPause = hasPause;
87        mIsPlaying = isPlaying;
88        mAppName = appName;
89
90        mStopAction = stopAction;
91        mPauseAction = pauseAction;
92        mPlayAction = playAction;
93        mSkipToNextAction = skipToNextAction;
94        mSkipToPreviousAction = skipToPreviousAction;
95    }
96
97    public String getTitle() {
98        return mTitle;
99    }
100
101    public String getSubtitle() {
102        return mSubTitle;
103    }
104
105    public Bitmap getAlbumArt() {
106        return mAlbumArt;
107    }
108
109    public int getAppAccentColor() {
110        return mAppAccentColor;
111    }
112
113    public boolean canSkipToNext() {
114        return mCanSkipToNext;
115    }
116
117    public boolean canSkipToPrevious() {
118        return mCanSkipToPrevious;
119    }
120
121    public boolean hasPause() {
122        return mHasPause;
123    }
124
125    public boolean isPlaying() {
126        return mIsPlaying;
127    }
128
129    public String getAppName() {
130        return mAppName;
131    }
132
133    public PendingIntent getStopAction() {
134        return mStopAction;
135    }
136
137    public PendingIntent getPlayAction() {
138        return mPlayAction;
139    }
140
141    public PendingIntent getSkipToPreviousAction() {
142        return mSkipToPreviousAction;
143    }
144
145    public PendingIntent getSkipToNextAction() {
146        return mSkipToNextAction;
147    }
148
149    public PendingIntent getPauseAction() {
150        return mPauseAction;
151    }
152
153    @Override
154    protected void writeToBundle(Bundle bundle) {
155        bundle.putString(TITLE_KEY, mTitle);
156        bundle.putString(SUBTITLE_KEY, mSubTitle);
157        bundle.putParcelable(ALBUM_ART_ICON_KEY, mAlbumArt);
158        bundle.putBoolean(CAN_SKIP_TO_NEXT_KEY, mCanSkipToNext);
159        bundle.putBoolean(CAN_SKIP_TO_PREV_KEY, mCanSkipToPrevious);
160        bundle.putBoolean(HAS_PAUSE_KEY, mHasPause);
161        bundle.putBoolean(IS_PLAYING_KEY, mIsPlaying);
162        bundle.putInt(ACCENT_COLOR_KEY, mAppAccentColor);
163        bundle.putString(APP_NAME_KEY, mAppName);
164
165        bundle.putParcelable(STOP_ACTION_KEY, mStopAction);
166        bundle.putParcelable(PLAY_ACTION_KEY, mPlayAction);
167        bundle.putParcelable(PAUSE_ACTION_KEY, mPauseAction);
168        bundle.putParcelable(SKIP_TO_NEXT_ACTION_KEY, mSkipToNextAction);
169        bundle.putParcelable(SKIP_TO_PREVIOUS_ACTION_KEY, mSkipToPreviousAction);
170    }
171
172    @Override
173    protected void readFromBundle(Bundle bundle) {
174        mTitle = bundle.getString(TITLE_KEY);
175        mSubTitle = bundle.getString(SUBTITLE_KEY);
176        mAlbumArt = bundle.getParcelable(ALBUM_ART_ICON_KEY);
177        mCanSkipToNext = bundle.getBoolean(CAN_SKIP_TO_NEXT_KEY);
178        mCanSkipToPrevious = bundle.getBoolean(CAN_SKIP_TO_PREV_KEY);
179        mHasPause = bundle.getBoolean(HAS_PAUSE_KEY);
180        mIsPlaying = bundle.getBoolean(IS_PLAYING_KEY);
181        mAppAccentColor = bundle.getInt(ACCENT_COLOR_KEY);
182        mAppName = bundle.getString(APP_NAME_KEY);
183
184        mStopAction = bundle.getParcelable(STOP_ACTION_KEY);
185        mPlayAction = bundle.getParcelable(PLAY_ACTION_KEY);
186        mPauseAction = bundle.getParcelable(PAUSE_ACTION_KEY);
187        mSkipToNextAction = bundle.getParcelable(SKIP_TO_NEXT_ACTION_KEY);
188        mSkipToPreviousAction = bundle.getParcelable(SKIP_TO_PREVIOUS_ACTION_KEY);
189    }
190}
191