• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package android.support.v4.media.session;
18 
19 import android.app.PendingIntent;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.media.AudioAttributes;
23 import android.media.MediaDescription;
24 import android.media.MediaMetadata;
25 import android.media.Rating;
26 import android.media.VolumeProvider;
27 import android.media.session.MediaSession;
28 import android.media.session.PlaybackState;
29 import android.os.Bundle;
30 import android.os.Handler;
31 import android.os.Parcelable;
32 import android.os.ResultReceiver;
33 
34 import java.util.ArrayList;
35 import java.util.List;
36 
37 class MediaSessionCompatApi21 {
createSession(Context context, String tag)38     public static Object createSession(Context context, String tag) {
39         return new MediaSession(context, tag);
40     }
41 
verifySession(Object mediaSession)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 
verifyToken(Object token)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 
createCallback(Callback callback)56     public static Object createCallback(Callback callback) {
57         return new CallbackProxy<Callback>(callback);
58     }
59 
setCallback(Object sessionObj, Object callbackObj, Handler handler)60     public static void setCallback(Object sessionObj, Object callbackObj, Handler handler) {
61         ((MediaSession) sessionObj).setCallback((MediaSession.Callback) callbackObj, handler);
62     }
63 
setFlags(Object sessionObj, int flags)64     public static void setFlags(Object sessionObj, int flags) {
65         ((MediaSession)sessionObj).setFlags(flags);
66     }
67 
setPlaybackToLocal(Object sessionObj, int stream)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 
setPlaybackToRemote(Object sessionObj, Object volumeProviderObj)75     public static void setPlaybackToRemote(Object sessionObj, Object volumeProviderObj) {
76         ((MediaSession)sessionObj).setPlaybackToRemote((VolumeProvider)volumeProviderObj);
77     }
78 
setActive(Object sessionObj, boolean active)79     public static void setActive(Object sessionObj, boolean active) {
80         ((MediaSession)sessionObj).setActive(active);
81     }
82 
isActive(Object sessionObj)83     public static boolean isActive(Object sessionObj) {
84         return ((MediaSession)sessionObj).isActive();
85     }
86 
sendSessionEvent(Object sessionObj, String event, Bundle extras)87     public static void sendSessionEvent(Object sessionObj, String event, Bundle extras) {
88         ((MediaSession)sessionObj).sendSessionEvent(event, extras);
89     }
90 
release(Object sessionObj)91     public static void release(Object sessionObj) {
92         ((MediaSession)sessionObj).release();
93     }
94 
getSessionToken(Object sessionObj)95     public static Parcelable getSessionToken(Object sessionObj) {
96         return ((MediaSession)sessionObj).getSessionToken();
97     }
98 
setPlaybackState(Object sessionObj, Object stateObj)99     public static void setPlaybackState(Object sessionObj, Object stateObj) {
100         ((MediaSession)sessionObj).setPlaybackState((PlaybackState)stateObj);
101     }
102 
setMetadata(Object sessionObj, Object metadataObj)103     public static void setMetadata(Object sessionObj, Object metadataObj) {
104         ((MediaSession)sessionObj).setMetadata((MediaMetadata)metadataObj);
105     }
106 
setSessionActivity(Object sessionObj, PendingIntent pi)107     public static void setSessionActivity(Object sessionObj, PendingIntent pi) {
108         ((MediaSession) sessionObj).setSessionActivity(pi);
109     }
110 
setMediaButtonReceiver(Object sessionObj, PendingIntent pi)111     public static void setMediaButtonReceiver(Object sessionObj, PendingIntent pi) {
112         ((MediaSession) sessionObj).setMediaButtonReceiver(pi);
113     }
114 
setQueue(Object sessionObj, List<Object> queueObjs)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 
setQueueTitle(Object sessionObj, CharSequence title)127     public static void setQueueTitle(Object sessionObj, CharSequence title) {
128         ((MediaSession) sessionObj).setQueueTitle(title);
129     }
130 
setExtras(Object sessionObj, Bundle extras)131     public static void setExtras(Object sessionObj, Bundle extras) {
132         ((MediaSession) sessionObj).setExtras(extras);
133     }
134 
135     interface Callback extends MediaSessionCompatApi19.Callback {
onCommand(String command, Bundle extras, ResultReceiver cb)136         public void onCommand(String command, Bundle extras, ResultReceiver cb);
onMediaButtonEvent(Intent mediaButtonIntent)137         public boolean onMediaButtonEvent(Intent mediaButtonIntent);
onPlay()138         public void onPlay();
onPlayFromMediaId(String mediaId, Bundle extras)139         public void onPlayFromMediaId(String mediaId, Bundle extras);
onPlayFromSearch(String search, Bundle extras)140         public void onPlayFromSearch(String search, Bundle extras);
onSkipToQueueItem(long id)141         public void onSkipToQueueItem(long id);
onPause()142         public void onPause();
onSkipToNext()143         public void onSkipToNext();
onSkipToPrevious()144         public void onSkipToPrevious();
onFastForward()145         public void onFastForward();
onRewind()146         public void onRewind();
onStop()147         public void onStop();
onCustomAction(String action, Bundle extras)148         public void onCustomAction(String action, Bundle extras);
149     }
150 
151     static class CallbackProxy<T extends Callback> extends MediaSession.Callback {
152         protected final T mCallback;
153 
CallbackProxy(T callback)154         public CallbackProxy(T callback) {
155             mCallback = callback;
156         }
157 
158         @Override
onCommand(String command, Bundle args, ResultReceiver cb)159         public void onCommand(String command, Bundle args, ResultReceiver cb) {
160             mCallback.onCommand(command, args, cb);
161         }
162 
163         @Override
onMediaButtonEvent(Intent mediaButtonIntent)164         public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
165             return mCallback.onMediaButtonEvent(mediaButtonIntent)
166                     || super.onMediaButtonEvent(mediaButtonIntent);
167         }
168 
169         @Override
onPlay()170         public void onPlay() {
171             mCallback.onPlay();
172         }
173 
174         @Override
onPlayFromMediaId(String mediaId, Bundle extras)175         public void onPlayFromMediaId(String mediaId, Bundle extras) {
176             mCallback.onPlayFromMediaId(mediaId, extras);
177         }
178 
179         @Override
onPlayFromSearch(String search, Bundle extras)180         public void onPlayFromSearch(String search, Bundle extras) {
181             mCallback.onPlayFromSearch(search, extras);
182         }
183 
184         @Override
onSkipToQueueItem(long id)185         public void onSkipToQueueItem(long id) {
186             mCallback.onSkipToQueueItem(id);
187         }
188 
189         @Override
onPause()190         public void onPause() {
191             mCallback.onPause();
192         }
193 
194         @Override
onSkipToNext()195         public void onSkipToNext() {
196             mCallback.onSkipToNext();
197         }
198 
199         @Override
onSkipToPrevious()200         public void onSkipToPrevious() {
201             mCallback.onSkipToPrevious();
202         }
203 
204         @Override
onFastForward()205         public void onFastForward() {
206             mCallback.onFastForward();
207         }
208 
209         @Override
onRewind()210         public void onRewind() {
211             mCallback.onRewind();
212         }
213 
214         @Override
onStop()215         public void onStop() {
216             mCallback.onStop();
217         }
218 
219         @Override
onSeekTo(long pos)220         public void onSeekTo(long pos) {
221             mCallback.onSeekTo(pos);
222         }
223 
224         @Override
onSetRating(Rating rating)225         public void onSetRating(Rating rating) {
226             mCallback.onSetRating(rating);
227         }
228 
229         @Override
onCustomAction(String action, Bundle extras)230         public void onCustomAction(String action, Bundle extras) {
231             mCallback.onCustomAction(action, extras);
232         }
233     }
234 
235     static class QueueItem {
236 
createItem(Object mediaDescription, long id)237         public static Object createItem(Object mediaDescription, long id) {
238             return new MediaSession.QueueItem((MediaDescription) mediaDescription, id);
239         }
240 
getDescription(Object queueItem)241         public static Object getDescription(Object queueItem) {
242             return ((MediaSession.QueueItem) queueItem).getDescription();
243         }
244 
getQueueId(Object queueItem)245         public static long getQueueId(Object queueItem) {
246             return ((MediaSession.QueueItem) queueItem).getQueueId();
247         }
248     }
249 }
250