MediaController.java revision d996f17ea97b2c592338bcfbc93056d0224da1cd
1package com.android.bluetooth.avrcp;
2
3import android.annotation.NonNull;
4import android.annotation.Nullable;
5import android.app.PendingIntent;
6import android.content.Context;
7import android.content.pm.ParceledListSlice;
8import android.media.AudioAttributes;
9import android.media.AudioManager;
10import android.media.MediaMetadata;
11import android.media.Rating;
12import android.media.VolumeProvider;
13import android.media.session.PlaybackState;
14import android.media.session.MediaSession;
15import android.media.session.MediaSession.QueueItem;
16import android.net.Uri;
17import android.os.Bundle;
18import android.os.Handler;
19import android.os.Looper;
20import android.os.Message;
21import android.os.RemoteException;
22import android.os.ResultReceiver;
23import android.text.TextUtils;
24import android.util.Log;
25import android.view.KeyEvent;
26
27import java.lang.ref.WeakReference;
28import java.util.ArrayList;
29import java.util.List;
30
31public class MediaController {
32    public android.media.session.MediaController mDelegate;
33    public android.media.session.MediaController.TransportControls mTransportDelegate;
34    public TransportControls mTransportControls;
35
36    @Nullable
37    public static MediaController wrap(@Nullable android.media.session.MediaController delegate) {
38      return (delegate != null) ? new MediaController(delegate) : null;
39    }
40
41    public MediaController(@NonNull android.media.session.MediaController delegate) {
42        mDelegate = delegate;
43        mTransportDelegate = delegate.getTransportControls();
44        mTransportControls = new TransportControls();
45    }
46
47    public android.media.session.MediaController getWrappedInstance() {
48        return mDelegate;
49    }
50
51    public @NonNull TransportControls getTransportControls() {
52        return mTransportControls;
53    }
54
55    public boolean dispatchMediaButtonEvent(@NonNull KeyEvent keyEvent) {
56        return mDelegate.dispatchMediaButtonEvent(keyEvent);
57    }
58
59    public @Nullable PlaybackState getPlaybackState() {
60        return mDelegate.getPlaybackState();
61    }
62
63    public @Nullable MediaMetadata getMetadata() {
64        return mDelegate.getMetadata();
65    }
66
67    public @Nullable List<MediaSession.QueueItem> getQueue() {
68        return mDelegate.getQueue();
69    }
70
71    public @Nullable CharSequence getQueueTitle() {
72        return mDelegate.getQueueTitle();
73    }
74
75    public @Nullable Bundle getExtras() {
76        return mDelegate.getExtras();
77    }
78
79    public int getRatingType() {
80        return mDelegate.getRatingType();
81    }
82
83    public long getFlags() {
84        return mDelegate.getFlags();
85    }
86
87    public @Nullable android.media.session.MediaController.PlaybackInfo getPlaybackInfo() {
88        return mDelegate.getPlaybackInfo();
89    }
90
91    public @Nullable PendingIntent getSessionActivity() {
92        return mDelegate.getSessionActivity();
93    }
94
95    public @NonNull MediaSession.Token getSessionToken() {
96        return mDelegate.getSessionToken();
97    }
98
99    public void setVolumeTo(int value, int flags) {
100        mDelegate.setVolumeTo(value, flags);
101    }
102
103    public void adjustVolume(int direction, int flags) {
104        mDelegate.adjustVolume(direction, flags);
105    }
106
107    public void registerCallback(@NonNull Callback callback) {
108        //TODO(apanicke): Add custom callback struct to be able to analyze and
109        // delegate callbacks
110        mDelegate.registerCallback(callback);
111    }
112
113    public void registerCallback(@NonNull Callback callback, @Nullable Handler handler) {
114        mDelegate.registerCallback(callback, handler);
115    }
116
117    public void unregisterCallback(@NonNull Callback callback) {
118        mDelegate.unregisterCallback(callback);
119    }
120
121    public void sendCommand(@NonNull String command, @Nullable Bundle args,
122            @Nullable ResultReceiver cb) {
123        mDelegate.sendCommand(command, args, cb);
124    }
125
126    public String getPackageName() {
127        return mDelegate.getPackageName();
128    }
129
130    public String getTag() {
131        return mDelegate.getTag();
132    }
133
134    public boolean controlsSameSession(MediaController other) {
135        return mDelegate.controlsSameSession(other.getWrappedInstance());
136    }
137
138    public boolean controlsSameSession(android.media.session.MediaController other) {
139        return mDelegate.controlsSameSession(other);
140    }
141
142    public static abstract class Callback extends android.media.session.MediaController.Callback { }
143
144    public class TransportControls {
145
146        public void prepare() {
147            mTransportDelegate.prepare();
148        }
149
150        public void prepareFromMediaId(String mediaId, Bundle extras) {
151            mTransportDelegate.prepareFromMediaId(mediaId, extras);
152        }
153
154        public void prepareFromSearch(String query, Bundle extras) {
155            mTransportDelegate.prepareFromSearch(query, extras);
156        }
157
158        public void prepareFromUri(Uri uri, Bundle extras) {
159            mTransportDelegate.prepareFromUri(uri, extras);
160        }
161
162        public void play() {
163            mTransportDelegate.play();
164        }
165
166        public void playFromMediaId(String mediaId, Bundle extras) {
167            mTransportDelegate.playFromMediaId(mediaId, extras);
168        }
169
170        public void playFromSearch(String query, Bundle extras) {
171            mTransportDelegate.playFromSearch(query, extras);
172        }
173
174        public void playFromUri(Uri uri, Bundle extras) {
175            mTransportDelegate.playFromUri(uri, extras);
176        }
177
178        public void skipToQueueItem(long id) {
179            mTransportDelegate.skipToQueueItem(id);
180        }
181
182        public void pause() {
183            mTransportDelegate.pause();
184        }
185
186        public void stop() {
187            mTransportDelegate.stop();
188        }
189
190        public void seekTo(long pos) {
191            mTransportDelegate.seekTo(pos);
192        }
193
194        public void fastForward() {
195            mTransportDelegate.fastForward();
196        }
197
198        public void skipToNext() {
199            mTransportDelegate.skipToNext();
200        }
201
202        public void rewind() {
203            mTransportDelegate.rewind();
204        }
205
206        public void skipToPrevious() {
207            mTransportDelegate.skipToPrevious();
208        }
209
210        public void setRating(Rating rating) {
211            mTransportDelegate.setRating(rating);
212        }
213
214        public void sendCustomAction(@NonNull PlaybackState.CustomAction customAction,
215                @Nullable Bundle args) {
216            mTransportDelegate.sendCustomAction(customAction, args);
217        }
218
219        public void sendCustomAction(@NonNull String action, @Nullable Bundle args) {
220            mTransportDelegate.sendCustomAction(action, args);
221        }
222    }
223}
224
225