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