MediaSessionCompatApi21.java revision 85d539daa11f9f7bd61ecb8ebb4d43536c02a736
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.support.v4.media.session; 18 19import android.app.PendingIntent; 20import android.content.Context; 21import android.content.Intent; 22import android.media.AudioAttributes; 23import android.media.MediaMetadata; 24import android.media.Rating; 25import android.media.VolumeProvider; 26import android.media.session.MediaSession; 27import android.media.session.PlaybackState; 28import android.os.Bundle; 29import android.os.Handler; 30import android.os.Parcelable; 31import android.os.ResultReceiver; 32 33class MediaSessionCompatApi21 { 34 public static Object createSession(Context context, String tag) { 35 return new MediaSession(context, tag); 36 } 37 38 public static Object verifySession(Object mediaSession) { 39 if (mediaSession instanceof MediaSession) { 40 return mediaSession; 41 } 42 throw new IllegalArgumentException("mediaSession is not a valid MediaSession object"); 43 } 44 45 public static Object createCallback(Callback callback) { 46 return new CallbackProxy<Callback>(callback); 47 } 48 49 public static void setCallback(Object sessionObj, Object callbackObj, Handler handler) { 50 ((MediaSession) sessionObj).setCallback((MediaSession.Callback) callbackObj, handler); 51 } 52 53 public static void setFlags(Object sessionObj, int flags) { 54 ((MediaSession)sessionObj).setFlags(flags); 55 } 56 57 public static void setPlaybackToLocal(Object sessionObj, int stream) { 58 // TODO update APIs to use support version of AudioAttributes 59 AudioAttributes.Builder bob = new AudioAttributes.Builder(); 60 bob.setLegacyStreamType(stream); 61 ((MediaSession) sessionObj).setPlaybackToLocal(bob.build()); 62 } 63 64 public static void setPlaybackToRemote(Object sessionObj, Object volumeProviderObj) { 65 ((MediaSession)sessionObj).setPlaybackToRemote((VolumeProvider)volumeProviderObj); 66 } 67 68 public static void setActive(Object sessionObj, boolean active) { 69 ((MediaSession)sessionObj).setActive(active); 70 } 71 72 public static boolean isActive(Object sessionObj) { 73 return ((MediaSession)sessionObj).isActive(); 74 } 75 76 public static void sendSessionEvent(Object sessionObj, String event, Bundle extras) { 77 ((MediaSession)sessionObj).sendSessionEvent(event, extras); 78 } 79 80 public static void release(Object sessionObj) { 81 ((MediaSession)sessionObj).release(); 82 } 83 84 public static Parcelable getSessionToken(Object sessionObj) { 85 return ((MediaSession)sessionObj).getSessionToken(); 86 } 87 88 public static void setPlaybackState(Object sessionObj, Object stateObj) { 89 ((MediaSession)sessionObj).setPlaybackState((PlaybackState)stateObj); 90 } 91 92 public static void setMetadata(Object sessionObj, Object metadataObj) { 93 ((MediaSession)sessionObj).setMetadata((MediaMetadata)metadataObj); 94 } 95 96 public static void setSessionActivity(Object sessionObj, PendingIntent pi) { 97 ((MediaSession) sessionObj).setSessionActivity(pi); 98 } 99 100 public static interface Callback { 101 public void onCommand(String command, Bundle extras, ResultReceiver cb); 102 public boolean onMediaButtonEvent(Intent mediaButtonIntent); 103 public void onPlay(); 104 public void onPause(); 105 public void onSkipToNext(); 106 public void onSkipToPrevious(); 107 public void onFastForward(); 108 public void onRewind(); 109 public void onStop(); 110 public void onSeekTo(long pos); 111 public void onSetRating(Object ratingObj); 112 } 113 114 static class CallbackProxy<T extends Callback> extends MediaSession.Callback { 115 protected final T mCallback; 116 117 public CallbackProxy(T callback) { 118 mCallback = callback; 119 } 120 121 @Override 122 public void onCommand(String command, Bundle args, ResultReceiver cb) { 123 mCallback.onCommand(command, args, cb); 124 } 125 126 @Override 127 public boolean onMediaButtonEvent(Intent mediaButtonIntent) { 128 return mCallback.onMediaButtonEvent(mediaButtonIntent); 129 } 130 131 @Override 132 public void onPlay() { 133 mCallback.onPlay(); 134 } 135 136 @Override 137 public void onPause() { 138 mCallback.onPause(); 139 } 140 141 @Override 142 public void onSkipToNext() { 143 mCallback.onSkipToNext(); 144 } 145 146 @Override 147 public void onSkipToPrevious() { 148 mCallback.onSkipToPrevious(); 149 } 150 151 @Override 152 public void onFastForward() { 153 mCallback.onFastForward(); 154 } 155 156 @Override 157 public void onRewind() { 158 mCallback.onRewind(); 159 } 160 161 @Override 162 public void onStop() { 163 mCallback.onStop(); 164 } 165 166 @Override 167 public void onSeekTo(long pos) { 168 mCallback.onSeekTo(pos); 169 } 170 171 @Override 172 public void onSetRating(Rating rating) { 173 mCallback.onSetRating(rating); 174 } 175 } 176} 177