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