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