MediaControllerCompatApi21.java revision 8ea3b7e9bae080d5ab65a150e952c87db70cc3a3
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.MediaMetadata; 2024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.Rating; 2124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.session.MediaController; 228ea3b7e9bae080d5ab65a150e952c87db70cc3a3Jeff Brownimport android.media.session.MediaSession; 2324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.session.PlaybackState; 2424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Bundle; 2524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Handler; 2624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.ResultReceiver; 2724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.view.KeyEvent; 2824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 2924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownclass MediaControllerCompatApi21 { 3024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static Object fromToken(Object sessionToken) { 318ea3b7e9bae080d5ab65a150e952c87db70cc3a3Jeff Brown return MediaController.fromToken((MediaSession.Token)sessionToken); 3224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 3324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 3424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static Object createCallback(Callback callback) { 3524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return new CallbackProxy<Callback>(callback); 3624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 3724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 3824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void addCallback(Object controllerObj, Object callbackObj, Handler handler) { 3924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController)controllerObj).addCallback( 4024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown (MediaController.Callback)callbackObj, handler); 4124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 4224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 4324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void removeCallback(Object controllerObj, Object callbackObj) { 4424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController)controllerObj).removeCallback((MediaController.Callback)callbackObj); 4524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 4624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 4724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static Object getTransportControls(Object controllerObj) { 4824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController)controllerObj).getTransportControls(); 4924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 5024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 5124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static Object getPlaybackState(Object controllerObj) { 5224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController)controllerObj).getPlaybackState(); 5324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 5424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 5524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static Object getMetadata(Object controllerObj) { 5624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController)controllerObj).getMetadata(); 5724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 5824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 5924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static int getRatingType(Object controllerObj) { 6024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController)controllerObj).getRatingType(); 6124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 6224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 6324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static Object getVolumeInfo(Object controllerObj) { 6424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController)controllerObj).getVolumeInfo(); 6524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 6624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 6724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static boolean dispatchMediaButtonEvent(Object controllerObj, KeyEvent event) { 6824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController)controllerObj).dispatchMediaButtonEvent(event); 6924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 7024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 7124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void sendControlCommand(Object controllerObj, 7224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown String command, Bundle params, ResultReceiver cb) { 7324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController)controllerObj).sendControlCommand(command, params, cb); 7424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 7524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 7624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static class TransportControls { 7724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void play(Object controlsObj) { 7824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).play(); 7924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 8024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 8124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void pause(Object controlsObj) { 8224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).pause(); 8324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 8424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 8524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void stop(Object controlsObj) { 8624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).stop(); 8724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 8824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 8924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void seekTo(Object controlsObj, long pos) { 9024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).seekTo(pos); 9124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 9224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 9324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void fastForward(Object controlsObj) { 9424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).fastForward(); 9524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 9624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 9724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void rewind(Object controlsObj) { 9824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).rewind(); 9924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 10024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 10124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void skipToNext(Object controlsObj) { 10224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).skipToNext(); 10324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 10424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 10524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void skipToPrevious(Object controlsObj) { 10624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).skipToPrevious(); 10724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 10824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 10924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static void setRating(Object controlsObj, Object ratingObj) { 11024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown ((MediaController.TransportControls)controlsObj).setRating((Rating)ratingObj); 11124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 11224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 11324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 11424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static class VolumeInfo { 11524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static int getVolumeType(Object volumeInfoObj) { 11624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController.VolumeInfo)volumeInfoObj).getVolumeType(); 11724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 11824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 11924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static int getAudioStream(Object volumeInfoObj) { 12024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController.VolumeInfo)volumeInfoObj).getAudioStream(); 12124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 12224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 12324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static int getVolumeControl(Object volumeInfoObj) { 12424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController.VolumeInfo)volumeInfoObj).getVolumeControl(); 12524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 12624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 12724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static int getMaxVolume(Object volumeInfoObj) { 12824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController.VolumeInfo)volumeInfoObj).getMaxVolume(); 12924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 13024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 13124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static int getCurrentVolume(Object volumeInfoObj) { 13224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown return ((MediaController.VolumeInfo)volumeInfoObj).getCurrentVolume(); 13324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 13424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 13524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 13624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public static interface Callback { 13724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void onSessionEvent(String event, Bundle extras); 13824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void onPlaybackStateChanged(Object stateObj); 13924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void onMetadataChanged(Object metadataObj); 14024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 14124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 14224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown static class CallbackProxy<T extends Callback> extends MediaController.Callback { 14324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown protected final T mCallback; 14424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 14524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public CallbackProxy(T callback) { 14624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mCallback = callback; 14724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 14824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 14924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 15024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void onSessionEvent(String event, Bundle extras) { 15124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mCallback.onSessionEvent(event, extras); 15224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 15324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 15424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 15524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void onPlaybackStateChanged(PlaybackState state) { 15624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mCallback.onPlaybackStateChanged(state); 15724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 15824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown 15924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown @Override 16024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown public void onMetadataChanged(MediaMetadata metadata) { 16124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown mCallback.onMetadataChanged(metadata); 16224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 16324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown } 16424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown} 165