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;
2189febf83e2bd3720923474006bcdf6c91a3b88f2Aurimas Liutikas
22ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RequiresApi;
2324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
24ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lakeimport java.util.List;
25ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
268f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette@RequiresApi(21)
2724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownclass PlaybackStateCompatApi21 {
2824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static int getState(Object stateObj) {
2924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getState();
3024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
3224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static long getPosition(Object stateObj) {
3324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getPosition();
3424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
36312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik    public static long getBufferedPosition(Object stateObj) {
37312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik        return ((PlaybackState)stateObj).getBufferedPosition();
3824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
4084b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik    public static float getPlaybackSpeed(Object stateObj) {
4184b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        return ((PlaybackState)stateObj).getPlaybackSpeed();
4224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
4324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
4424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static long getActions(Object stateObj) {
4524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getActions();
4624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
4724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
4824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static CharSequence getErrorMessage(Object stateObj) {
4924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((PlaybackState)stateObj).getErrorMessage();
5024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
5124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
5224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static long getLastPositionUpdateTime(Object stateObj) {
5384b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        return ((PlaybackState)stateObj).getLastPositionUpdateTime();
5424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
5524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
56ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    public static List<Object> getCustomActions(Object stateObj) {
57ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        return (List)((PlaybackState)stateObj).getCustomActions();
58ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    }
59ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
60ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    public static long getActiveQueueItemId(Object stateObj) {
61ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        return ((PlaybackState)stateObj).getActiveQueueItemId();
62ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    }
63ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
64312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik    public static Object newInstance(int state, long position, long bufferedPosition,
65ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            float speed, long actions, CharSequence errorMessage, long updateTime,
66ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            List<Object> customActions,
67ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            long activeItemId) {
6884b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        PlaybackState.Builder stateObj = new PlaybackState.Builder();
6984b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        stateObj.setState(state, position, speed, updateTime);
70312f13dea7b4a9229dff784c6e94b0ec0c722b74RoboErik        stateObj.setBufferedPosition(bufferedPosition);
7124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        stateObj.setActions(actions);
7224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        stateObj.setErrorMessage(errorMessage);
73ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        for (Object customAction : customActions) {
74ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            stateObj.addCustomAction((PlaybackState.CustomAction) customAction);
75ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
76ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        stateObj.setActiveQueueItemId(activeItemId);
7784b0350796e4ae8a113ce1abba54f07a2605cc5cRoboErik        return stateObj.build();
7824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
79ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
80ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    static final class CustomAction {
81ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static String getAction(Object customActionObj) {
82ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getAction();
83ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
84ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
85ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static CharSequence getName(Object customActionObj) {
86ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getName();
87ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
88ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
89ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static int getIcon(Object customActionObj) {
90ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getIcon();
91ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
92ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static Bundle getExtras(Object customActionObj) {
93ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return ((PlaybackState.CustomAction)customActionObj).getExtras();
94ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
95ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake
96ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        public static Object newInstance(String action, CharSequence name,
97ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake                int icon, Bundle extras) {
98ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            PlaybackState.CustomAction.Builder customActionObj =
99ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake                    new PlaybackState.CustomAction.Builder(action, name, icon);
100ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            customActionObj.setExtras(extras);
101ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake            return customActionObj.build();
102ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake        }
1030f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton
1040f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton        private CustomAction() {
1050f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton        }
1060f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton    }
1070f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton
1080f4ca634bbc43ddff900c35f7d2a43b55d8c830dJake Wharton    private PlaybackStateCompatApi21() {
109ea79b7d36972eb3f518a7e7b59a92e7bd5faefb4Ian Lake    }
11024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown}
111