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