MediaSessionCompatApi21.java revision 85d539daa11f9f7bd61ecb8ebb4d43536c02a736
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
1985d539daa11f9f7bd61ecb8ebb4d43536c02a736RoboErikimport android.app.PendingIntent;
2024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.content.Context;
2124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.content.Intent;
221435afe32073dee10e721dfb6122ce6a194a6412RoboErikimport android.media.AudioAttributes;
2324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.MediaMetadata;
2424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.Rating;
2524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.VolumeProvider;
2624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.session.MediaSession;
2724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.media.session.PlaybackState;
2824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Bundle;
2924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Handler;
3024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.Parcelable;
3124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownimport android.os.ResultReceiver;
3224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
3324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brownclass MediaSessionCompatApi21 {
3424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static Object createSession(Context context, String tag) {
35f87e8513ce55303168acd9c698acd5bbd33b9badRoboErik        return new MediaSession(context, tag);
3624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
3724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
38bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik    public static Object verifySession(Object mediaSession) {
39bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik        if (mediaSession instanceof MediaSession) {
40bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik            return mediaSession;
41bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik        }
42bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik        throw new IllegalArgumentException("mediaSession is not a valid MediaSession object");
43bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik    }
44bbcdf78e350d58ecd6baa75e282d4908d3129fe2RoboErik
4524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static Object createCallback(Callback callback) {
4624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return new CallbackProxy<Callback>(callback);
4724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
4824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
498af0092e2d7409e79779af396d63ca4146f1fb21RoboErik    public static void setCallback(Object sessionObj, Object callbackObj, Handler handler) {
508af0092e2d7409e79779af396d63ca4146f1fb21RoboErik        ((MediaSession) sessionObj).setCallback((MediaSession.Callback) callbackObj, handler);
5124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
5224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
5324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void setFlags(Object sessionObj, int flags) {
5424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).setFlags(flags);
5524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
5624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
5724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void setPlaybackToLocal(Object sessionObj, int stream) {
581435afe32073dee10e721dfb6122ce6a194a6412RoboErik        // TODO update APIs to use support version of AudioAttributes
591435afe32073dee10e721dfb6122ce6a194a6412RoboErik        AudioAttributes.Builder bob = new AudioAttributes.Builder();
601435afe32073dee10e721dfb6122ce6a194a6412RoboErik        bob.setLegacyStreamType(stream);
611435afe32073dee10e721dfb6122ce6a194a6412RoboErik        ((MediaSession) sessionObj).setPlaybackToLocal(bob.build());
6224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
6324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
6424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void setPlaybackToRemote(Object sessionObj, Object volumeProviderObj) {
6524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).setPlaybackToRemote((VolumeProvider)volumeProviderObj);
6624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
6724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
6824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void setActive(Object sessionObj, boolean active) {
6924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).setActive(active);
7024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
7124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
7224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static boolean isActive(Object sessionObj) {
7324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((MediaSession)sessionObj).isActive();
7424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
7524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
7624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void sendSessionEvent(Object sessionObj, String event, Bundle extras) {
7724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).sendSessionEvent(event, extras);
7824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
7924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
8024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void release(Object sessionObj) {
8124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).release();
8224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
8324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
8424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static Parcelable getSessionToken(Object sessionObj) {
8524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        return ((MediaSession)sessionObj).getSessionToken();
8624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
8724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
8824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void setPlaybackState(Object sessionObj, Object stateObj) {
8924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).setPlaybackState((PlaybackState)stateObj);
9024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
9124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
9224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static void setMetadata(Object sessionObj, Object metadataObj) {
9324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        ((MediaSession)sessionObj).setMetadata((MediaMetadata)metadataObj);
9424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
9524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
9685d539daa11f9f7bd61ecb8ebb4d43536c02a736RoboErik    public static void setSessionActivity(Object sessionObj, PendingIntent pi) {
9785d539daa11f9f7bd61ecb8ebb4d43536c02a736RoboErik        ((MediaSession) sessionObj).setSessionActivity(pi);
9885d539daa11f9f7bd61ecb8ebb4d43536c02a736RoboErik    }
9985d539daa11f9f7bd61ecb8ebb4d43536c02a736RoboErik
10024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    public static interface Callback {
101b530c89bba371d2d575f10480b2e90914b0d3f3fGabriel Peal        public void onCommand(String command, Bundle extras, ResultReceiver cb);
1028af0092e2d7409e79779af396d63ca4146f1fb21RoboErik        public boolean onMediaButtonEvent(Intent mediaButtonIntent);
10324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onPlay();
10424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onPause();
10524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSkipToNext();
10624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSkipToPrevious();
10724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onFastForward();
10824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onRewind();
10924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onStop();
11024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSeekTo(long pos);
11124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSetRating(Object ratingObj);
11224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
11324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
11424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    static class CallbackProxy<T extends Callback> extends MediaSession.Callback {
11524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        protected final T mCallback;
11624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
11724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public CallbackProxy(T callback) {
11824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback = callback;
11924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
12024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
12124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
122b530c89bba371d2d575f10480b2e90914b0d3f3fGabriel Peal        public void onCommand(String command, Bundle args, ResultReceiver cb) {
123b530c89bba371d2d575f10480b2e90914b0d3f3fGabriel Peal            mCallback.onCommand(command, args, cb);
12424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
12524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
1268af0092e2d7409e79779af396d63ca4146f1fb21RoboErik        @Override
1278af0092e2d7409e79779af396d63ca4146f1fb21RoboErik        public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
1288af0092e2d7409e79779af396d63ca4146f1fb21RoboErik            return mCallback.onMediaButtonEvent(mediaButtonIntent);
12924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
13024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
13124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
13224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onPlay() {
13324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onPlay();
13424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
13524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
13624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
13724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onPause() {
13824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onPause();
13924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
14024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
14124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
14224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSkipToNext() {
14324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onSkipToNext();
14424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
14524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
14624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
14724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSkipToPrevious() {
14824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onSkipToPrevious();
14924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
15024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
15124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
15224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onFastForward() {
15324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onFastForward();
15424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
15524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
15624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
15724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onRewind() {
15824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onRewind();
15924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
16024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
16124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
16224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onStop() {
16324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onStop();
16424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
16524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
16624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
16724fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSeekTo(long pos) {
16824fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onSeekTo(pos);
16924fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
17024fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown
17124fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        @Override
17224fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        public void onSetRating(Rating rating) {
17324fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown            mCallback.onSetRating(rating);
17424fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown        }
17524fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown    }
17624fa6c0dd42df057729e1a258388183f94da7f82Jeff Brown}
177