124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown/*
224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Copyright (C) 2014 The Android Open Source Project
324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown *
424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * you may not use this file except in compliance with the License.
624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * You may obtain a copy of the License at
724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown *
824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown *
1024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * Unless required by applicable law or agreed to in writing, software
1124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
1224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * See the License for the specific language governing permissions and
1424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown * limitations under the License.
1524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown */
1624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
1724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownpackage android.support.v4.media.session;
1824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
1924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.session.PlaybackState;
20ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lakeimport android.os.Bundle;
2124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.SystemClock;
2224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
23ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lakeimport java.util.ArrayList;
24ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lakeimport java.util.List;
25ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
2624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownclass PlaybackStateCompatApi21 {
2724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static int getState(Object stateObj) {
2824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getState();
2924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
3124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static long getPosition(Object stateObj) {
3224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getPosition();
3324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
35312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik    public static long getBufferedPosition(Object stateObj) {
36312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik        return ((PlaybackState)stateObj).getBufferedPosition();
3724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
3984b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik    public static float getPlaybackSpeed(Object stateObj) {
4084b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        return ((PlaybackState)stateObj).getPlaybackSpeed();
4124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
4224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
4324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static long getActions(Object stateObj) {
4424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getActions();
4524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
4624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
4724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static CharSequence getErrorMessage(Object stateObj) {
4824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getErrorMessage();
4924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
5024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
5124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static long getLastPositionUpdateTime(Object stateObj) {
5284b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        return ((PlaybackState)stateObj).getLastPositionUpdateTime();
5324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
5424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
55ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    public static List<Object> getCustomActions(Object stateObj) {
56ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        return (List)((PlaybackState)stateObj).getCustomActions();
57ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    }
58ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
59ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    public static long getActiveQueueItemId(Object stateObj) {
60ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        return ((PlaybackState)stateObj).getActiveQueueItemId();
61ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    }
62ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
63312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik    public static Object newInstance(int state, long position, long bufferedPosition,
64ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            float speed, long actions, CharSequence errorMessage, long updateTime,
65ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            List<Object> customActions,
66ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            long activeItemId) {
6784b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        PlaybackState.Builder stateObj = new PlaybackState.Builder();
6884b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        stateObj.setState(state, position, speed, updateTime);
69312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik        stateObj.setBufferedPosition(bufferedPosition);
7024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        stateObj.setActions(actions);
7124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        stateObj.setErrorMessage(errorMessage);
72ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        for (Object customAction : customActions) {
73ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            stateObj.addCustomAction((PlaybackState.CustomAction) customAction);
74ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
75ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        stateObj.setActiveQueueItemId(activeItemId);
7684b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        return stateObj.build();
7724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
78ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
79ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    static final class CustomAction {
80ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static String getAction(Object customActionObj) {
81ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getAction();
82ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
83ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
84ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static CharSequence getName(Object customActionObj) {
85ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getName();
86ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
87ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
88ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static int getIcon(Object customActionObj) {
89ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getIcon();
90ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
91ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static Bundle getExtras(Object customActionObj) {
92ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getExtras();
93ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
94ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
95ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static Object newInstance(String action, CharSequence name,
96ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake                int icon, Bundle extras) {
97ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            PlaybackState.CustomAction.Builder customActionObj =
98ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake                    new PlaybackState.CustomAction.Builder(action, name, icon);
99ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            customActionObj.setExtras(extras);
100ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return customActionObj.build();
101ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
102ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    }
10324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown}
104