1 /* 2 * Copyright (C) 2017 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 com.android.media.update; 18 19 import android.app.Notification; 20 import android.content.Context; 21 import android.content.pm.ApplicationInfo; 22 import android.media.MediaBrowser2; 23 import android.media.MediaBrowser2.BrowserCallback; 24 import android.media.MediaController2; 25 import android.media.MediaController2.ControllerCallback; 26 import android.media.MediaItem2; 27 import android.media.MediaLibraryService2; 28 import android.media.MediaLibraryService2.LibraryRoot; 29 import android.media.MediaLibraryService2.MediaLibrarySession; 30 import android.media.MediaLibraryService2.MediaLibrarySession.MediaLibrarySessionCallback; 31 import android.media.MediaMetadata2; 32 import android.media.MediaPlaylistAgent; 33 import android.media.MediaSession2; 34 import android.media.SessionCommand2; 35 import android.media.SessionCommandGroup2; 36 import android.media.MediaSession2.ControllerInfo; 37 import android.media.MediaSession2.SessionCallback; 38 import android.media.MediaSessionService2; 39 import android.media.MediaSessionService2.MediaNotification; 40 import android.media.Rating2; 41 import android.media.SessionToken2; 42 import android.media.VolumeProvider2; 43 import android.media.update.MediaBrowser2Provider; 44 import android.media.update.MediaControlView2Provider; 45 import android.media.update.MediaController2Provider; 46 import android.media.update.MediaItem2Provider; 47 import android.media.update.MediaLibraryService2Provider.LibraryRootProvider; 48 import android.media.update.MediaMetadata2Provider; 49 import android.media.update.MediaPlaylistAgentProvider; 50 import android.media.update.MediaSession2Provider; 51 import android.media.update.MediaSession2Provider.BuilderBaseProvider; 52 import android.media.update.MediaSession2Provider.CommandButtonProvider.BuilderProvider; 53 import android.media.update.MediaSessionService2Provider; 54 import android.media.update.MediaSessionService2Provider.MediaNotificationProvider; 55 import android.media.update.SessionToken2Provider; 56 import android.media.update.StaticProvider; 57 import android.media.update.VideoView2Provider; 58 import android.media.update.ViewGroupProvider; 59 import android.media.update.VolumeProvider2Provider; 60 import android.os.Bundle; 61 import android.os.IInterface; 62 import android.support.annotation.Nullable; 63 import android.util.AttributeSet; 64 import android.widget.MediaControlView2; 65 import android.widget.VideoView2; 66 67 import com.android.media.IMediaController2; 68 import com.android.media.MediaBrowser2Impl; 69 import com.android.media.MediaController2Impl; 70 import com.android.media.MediaItem2Impl; 71 import com.android.media.MediaLibraryService2Impl; 72 import com.android.media.MediaLibraryService2Impl.LibraryRootImpl; 73 import com.android.media.MediaMetadata2Impl; 74 import com.android.media.MediaPlaylistAgentImpl; 75 import com.android.media.MediaSession2Impl; 76 import com.android.media.MediaSessionService2Impl; 77 import com.android.media.Rating2Impl; 78 import com.android.media.SessionToken2Impl; 79 import com.android.media.VolumeProvider2Impl; 80 import com.android.widget.MediaControlView2Impl; 81 import com.android.widget.VideoView2Impl; 82 83 import java.util.concurrent.Executor; 84 85 public final class ApiFactory implements StaticProvider { 86 private ApiFactory() { } 87 88 public static StaticProvider initialize(ApplicationInfo updatableInfo) { 89 ApiHelper.initialize(updatableInfo); 90 return new ApiFactory(); 91 } 92 93 @Override 94 public MediaController2Provider createMediaController2( 95 Context context, MediaController2 instance, SessionToken2 token, 96 Executor executor, ControllerCallback callback) { 97 return new MediaController2Impl(context, instance, token, executor, callback); 98 } 99 100 @Override 101 public MediaBrowser2Provider createMediaBrowser2(Context context, MediaBrowser2 instance, 102 SessionToken2 token, Executor executor, BrowserCallback callback) { 103 return new MediaBrowser2Impl(context, instance, token, executor, callback); 104 } 105 106 @Override 107 public MediaSession2Provider.CommandProvider createMediaSession2Command( 108 SessionCommand2 instance, int commandCode, String action, Bundle extra) { 109 if (action == null && extra == null) { 110 return new MediaSession2Impl.CommandImpl(instance, commandCode); 111 } 112 return new MediaSession2Impl.CommandImpl(instance, action, extra); 113 } 114 115 @Override 116 public SessionCommand2 fromBundle_MediaSession2Command(Bundle command) { 117 return MediaSession2Impl.CommandImpl.fromBundle_impl(command); 118 } 119 120 @Override 121 public MediaSession2Provider.CommandGroupProvider createMediaSession2CommandGroup( 122 SessionCommandGroup2 instance, SessionCommandGroup2 other) { 123 return new MediaSession2Impl.CommandGroupImpl(instance, 124 (other == null) ? null : other.getProvider()); 125 } 126 127 @Override 128 public SessionCommandGroup2 fromBundle_MediaSession2CommandGroup(Bundle commands) { 129 return MediaSession2Impl.CommandGroupImpl.fromBundle_impl(commands); 130 } 131 132 @Override 133 public MediaSession2Provider.ControllerInfoProvider createMediaSession2ControllerInfo( 134 Context context, ControllerInfo instance, int uid, int pid, String packageName, 135 IInterface callback) { 136 return new MediaSession2Impl.ControllerInfoImpl(context, 137 instance, uid, pid, packageName, (IMediaController2) callback); 138 } 139 140 @Override 141 public BuilderProvider createMediaSession2CommandButtonBuilder( 142 MediaSession2.CommandButton.Builder instance) { 143 return new MediaSession2Impl.CommandButtonImpl.BuilderImpl(instance); 144 } 145 146 public BuilderBaseProvider<MediaSession2, SessionCallback> createMediaSession2Builder( 147 Context context, MediaSession2.Builder instance) { 148 return new MediaSession2Impl.BuilderImpl(context, instance); 149 } 150 151 @Override 152 public MediaSessionService2Provider createMediaSessionService2(MediaSessionService2 instance) { 153 return new MediaSessionService2Impl(instance); 154 } 155 156 @Override 157 public MediaNotificationProvider createMediaSessionService2MediaNotification( 158 MediaNotification instance, int notificationId, Notification notification) { 159 return new MediaSessionService2Impl.MediaNotificationImpl( 160 instance, notificationId, notification); 161 } 162 163 @Override 164 public MediaSessionService2Provider createMediaLibraryService2(MediaLibraryService2 instance) { 165 return new MediaLibraryService2Impl(instance); 166 } 167 168 @Override 169 public BuilderBaseProvider<MediaLibrarySession, MediaLibrarySessionCallback> 170 createMediaLibraryService2Builder(MediaLibraryService2 service, 171 MediaLibrarySession.Builder instance, Executor callbackExecutor, 172 MediaLibrarySessionCallback callback) { 173 return new MediaLibraryService2Impl.BuilderImpl(service, instance, callbackExecutor, 174 callback); 175 } 176 177 @Override 178 public LibraryRootProvider createMediaLibraryService2LibraryRoot( 179 LibraryRoot instance, String rootId, Bundle extras) { 180 return new LibraryRootImpl(instance, rootId, extras); 181 } 182 183 @Override 184 public MediaControlView2Provider createMediaControlView2(MediaControlView2 instance, 185 ViewGroupProvider superProvider, ViewGroupProvider privateProvider, 186 @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { 187 return new MediaControlView2Impl(instance, superProvider, privateProvider); 188 } 189 190 @Override 191 public VideoView2Provider createVideoView2( 192 VideoView2 instance, ViewGroupProvider superProvider, ViewGroupProvider privateProvider, 193 @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { 194 return new VideoView2Impl(instance, superProvider, privateProvider); 195 } 196 197 @Override 198 public SessionToken2Provider createSessionToken2(Context context, SessionToken2 instance, 199 String packageName, String serviceName, int uid) { 200 return new SessionToken2Impl(context, instance, packageName, serviceName, uid); 201 } 202 203 @Override 204 public SessionToken2 fromBundle_SessionToken2(Bundle bundle) { 205 return SessionToken2Impl.fromBundle_impl(bundle); 206 } 207 208 @Override 209 public MediaItem2Provider.BuilderProvider createMediaItem2Builder(MediaItem2.Builder instance, 210 int flags) { 211 return new MediaItem2Impl.BuilderImpl(instance, flags); 212 } 213 214 @Override 215 public MediaItem2 fromBundle_MediaItem2(Bundle bundle) { 216 return MediaItem2Impl.fromBundle_impl(bundle); 217 } 218 219 @Override 220 public VolumeProvider2Provider createVolumeProvider2(VolumeProvider2 instance, int controlType, 221 int maxVolume, int currentVolume) { 222 return new VolumeProvider2Impl(instance, controlType, maxVolume, currentVolume); 223 } 224 225 @Override 226 public MediaMetadata2 fromBundle_MediaMetadata2(Bundle bundle) { 227 return MediaMetadata2Impl.fromBundle_impl(bundle); 228 } 229 230 @Override 231 public MediaMetadata2Provider.BuilderProvider createMediaMetadata2Builder( 232 MediaMetadata2.Builder instance) { 233 return new MediaMetadata2Impl.BuilderImpl(instance); 234 } 235 236 @Override 237 public MediaMetadata2Provider.BuilderProvider createMediaMetadata2Builder( 238 MediaMetadata2.Builder instance, MediaMetadata2 source) { 239 return new MediaMetadata2Impl.BuilderImpl(instance, source); 240 } 241 242 @Override 243 public Rating2 fromBundle_Rating2(Bundle bundle) { 244 return Rating2Impl.fromBundle_impl(bundle); 245 } 246 247 @Override 248 public Rating2 newUnratedRating_Rating2(int ratingStyle) { 249 return Rating2Impl.newUnratedRating_impl(ratingStyle); 250 } 251 252 @Override 253 public Rating2 newHeartRating_Rating2(boolean hasHeart) { 254 return Rating2Impl.newHeartRating_impl(hasHeart); 255 } 256 257 @Override 258 public Rating2 newThumbRating_Rating2(boolean thumbIsUp) { 259 return Rating2Impl.newThumbRating_impl(thumbIsUp); 260 } 261 262 @Override 263 public Rating2 newStarRating_Rating2(int starRatingStyle, float starRating) { 264 return Rating2Impl.newStarRating_impl(starRatingStyle, starRating); 265 } 266 267 @Override 268 public Rating2 newPercentageRating_Rating2(float percent) { 269 return Rating2Impl.newPercentageRating_impl(percent); 270 } 271 272 @Override 273 public MediaPlaylistAgentProvider createMediaPlaylistAgent(MediaPlaylistAgent instance) { 274 return new MediaPlaylistAgentImpl(instance); 275 } 276 } 277