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