MediaSessionCompatApi21.java revision 944a4e92d6d9619fa1a2172a4ec9dc683eb65b40
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.MediaDescription; 24import android.media.MediaMetadata; 25import android.media.Rating; 26import android.media.VolumeProvider; 27import android.media.session.MediaSession; 28import android.media.session.PlaybackState; 29import android.os.Bundle; 30import android.os.Handler; 31import android.os.Parcelable; 32import android.os.ResultReceiver; 33 34import java.util.ArrayList; 35import java.util.List; 36 37class MediaSessionCompatApi21 { 38 public static Object createSession(Context context, String tag) { 39 return new MediaSession(context, tag); 40 } 41 42 public static Object verifySession(Object mediaSession) { 43 if (mediaSession instanceof MediaSession) { 44 return mediaSession; 45 } 46 throw new IllegalArgumentException("mediaSession is not a valid MediaSession object"); 47 } 48 49 public static Object verifyToken(Object token) { 50 if (token instanceof MediaSession.Token) { 51 return token; 52 } 53 throw new IllegalArgumentException("token is not a valid MediaSession.Token object"); 54 } 55 56 public static Object createCallback(Callback callback) { 57 return new CallbackProxy<Callback>(callback); 58 } 59 60 public static void setCallback(Object sessionObj, Object callbackObj, Handler handler) { 61 ((MediaSession) sessionObj).setCallback((MediaSession.Callback) callbackObj, handler); 62 } 63 64 public static void setFlags(Object sessionObj, int flags) { 65 ((MediaSession)sessionObj).setFlags(flags); 66 } 67 68 public static void setPlaybackToLocal(Object sessionObj, int stream) { 69 // TODO update APIs to use support version of AudioAttributes 70 AudioAttributes.Builder bob = new AudioAttributes.Builder(); 71 bob.setLegacyStreamType(stream); 72 ((MediaSession) sessionObj).setPlaybackToLocal(bob.build()); 73 } 74 75 public static void setPlaybackToRemote(Object sessionObj, Object volumeProviderObj) { 76 ((MediaSession)sessionObj).setPlaybackToRemote((VolumeProvider)volumeProviderObj); 77 } 78 79 public static void setActive(Object sessionObj, boolean active) { 80 ((MediaSession)sessionObj).setActive(active); 81 } 82 83 public static boolean isActive(Object sessionObj) { 84 return ((MediaSession)sessionObj).isActive(); 85 } 86 87 public static void sendSessionEvent(Object sessionObj, String event, Bundle extras) { 88 ((MediaSession)sessionObj).sendSessionEvent(event, extras); 89 } 90 91 public static void release(Object sessionObj) { 92 ((MediaSession)sessionObj).release(); 93 } 94 95 public static Parcelable getSessionToken(Object sessionObj) { 96 return ((MediaSession)sessionObj).getSessionToken(); 97 } 98 99 public static void setPlaybackState(Object sessionObj, Object stateObj) { 100 ((MediaSession)sessionObj).setPlaybackState((PlaybackState)stateObj); 101 } 102 103 public static void setMetadata(Object sessionObj, Object metadataObj) { 104 ((MediaSession)sessionObj).setMetadata((MediaMetadata)metadataObj); 105 } 106 107 public static void setSessionActivity(Object sessionObj, PendingIntent pi) { 108 ((MediaSession) sessionObj).setSessionActivity(pi); 109 } 110 111 public static void setMediaButtonReceiver(Object sessionObj, PendingIntent pi) { 112 ((MediaSession) sessionObj).setMediaButtonReceiver(pi); 113 } 114 115 public static void setQueue(Object sessionObj, List<Object> queueObjs) { 116 if (queueObjs == null) { 117 ((MediaSession) sessionObj).setQueue(null); 118 return; 119 } 120 ArrayList<MediaSession.QueueItem> queue = new ArrayList<MediaSession.QueueItem>(); 121 for (Object itemObj : queueObjs) { 122 queue.add((MediaSession.QueueItem) itemObj); 123 } 124 ((MediaSession) sessionObj).setQueue(queue); 125 } 126 127 public static void setQueueTitle(Object sessionObj, CharSequence title) { 128 ((MediaSession) sessionObj).setQueueTitle(title); 129 } 130 131 public static void setExtras(Object sessionObj, Bundle extras) { 132 ((MediaSession) sessionObj).setExtras(extras); 133 } 134 135 public static interface Callback { 136 public void onCommand(String command, Bundle extras, ResultReceiver cb); 137 public boolean onMediaButtonEvent(Intent mediaButtonIntent); 138 public void onPlay(); 139 public void onPlayFromMediaId(String mediaId, Bundle extras); 140 public void onPlayFromSearch(String search, Bundle extras); 141 public void onSkipToQueueItem(long id); 142 public void onPause(); 143 public void onSkipToNext(); 144 public void onSkipToPrevious(); 145 public void onFastForward(); 146 public void onRewind(); 147 public void onStop(); 148 public void onSeekTo(long pos); 149 public void onSetRating(Object ratingObj); 150 public void onCustomAction(String action, Bundle extras); 151 } 152 153 static class CallbackProxy<T extends Callback> extends MediaSession.Callback { 154 protected final T mCallback; 155 156 public CallbackProxy(T callback) { 157 mCallback = callback; 158 } 159 160 @Override 161 public void onCommand(String command, Bundle args, ResultReceiver cb) { 162 mCallback.onCommand(command, args, cb); 163 } 164 165 @Override 166 public boolean onMediaButtonEvent(Intent mediaButtonIntent) { 167 return mCallback.onMediaButtonEvent(mediaButtonIntent) 168 || super.onMediaButtonEvent(mediaButtonIntent); 169 } 170 171 @Override 172 public void onPlay() { 173 mCallback.onPlay(); 174 } 175 176 @Override 177 public void onPlayFromMediaId(String mediaId, Bundle extras) { 178 mCallback.onPlayFromMediaId(mediaId, extras); 179 } 180 181 @Override 182 public void onPlayFromSearch(String search, Bundle extras) { 183 mCallback.onPlayFromSearch(search, extras); 184 } 185 186 @Override 187 public void onSkipToQueueItem(long id) { 188 mCallback.onSkipToQueueItem(id); 189 } 190 191 @Override 192 public void onPause() { 193 mCallback.onPause(); 194 } 195 196 @Override 197 public void onSkipToNext() { 198 mCallback.onSkipToNext(); 199 } 200 201 @Override 202 public void onSkipToPrevious() { 203 mCallback.onSkipToPrevious(); 204 } 205 206 @Override 207 public void onFastForward() { 208 mCallback.onFastForward(); 209 } 210 211 @Override 212 public void onRewind() { 213 mCallback.onRewind(); 214 } 215 216 @Override 217 public void onStop() { 218 mCallback.onStop(); 219 } 220 221 @Override 222 public void onSeekTo(long pos) { 223 mCallback.onSeekTo(pos); 224 } 225 226 @Override 227 public void onSetRating(Rating rating) { 228 mCallback.onSetRating(rating); 229 } 230 231 @Override 232 public void onCustomAction(String action, Bundle extras) { 233 mCallback.onCustomAction(action, extras); 234 } 235 } 236 237 static class QueueItem { 238 239 public static Object createItem(Object mediaDescription, long id) { 240 return new MediaSession.QueueItem((MediaDescription) mediaDescription, id); 241 } 242 243 public static Object getDescription(Object queueItem) { 244 return ((MediaSession.QueueItem) queueItem).getDescription(); 245 } 246 247 public static long getQueueId(Object queueItem) { 248 return ((MediaSession.QueueItem) queueItem).getQueueId(); 249 } 250 } 251} 252