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