From d58f145726a7ef76e4b35dcb528d91549e457e4e Mon Sep 17 00:00:00 2001 From: Sungsoo Lim Date: Thu, 25 Jan 2018 14:12:35 +0900 Subject: [PATCH] VideoView2: MediaRouter integration with MediaSession Bug: 72526814 Test: build Change-Id: Iace25522b433152022bdd3458b6791a89618464b --- core/java/android/widget/VideoView2.java | 23 +++++++++++++++++-- .../media/update/VideoView2Provider.java | 3 +++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/VideoView2.java b/core/java/android/widget/VideoView2.java index 3f941309ec2ea..b83d124e4c9ce 100644 --- a/core/java/android/widget/VideoView2.java +++ b/core/java/android/widget/VideoView2.java @@ -24,6 +24,7 @@ import android.media.AudioAttributes; import android.media.AudioManager; import android.media.MediaPlayerInterface; import android.media.session.MediaController; +import android.media.session.MediaSession; import android.media.session.PlaybackState; import android.media.update.ApiLoader; import android.media.update.VideoView2Provider; @@ -257,15 +258,33 @@ public class VideoView2 extends FrameLayout { * * @param routeCategories the list of media control categories in * {@link android.support.v7.media.MediaControlIntent} - * @param player the player to handle the selected route. If null, a default - * route player will be used. + * @param player the player to handle playback of the selected route. + * If null, a default route player will be used. * @throws IllegalStateException if MediaControlView2 is not set. + * @hide */ public void setRouteAttributes(@NonNull List routeCategories, @Nullable MediaPlayerInterface player) { mProvider.setRouteAttributes_impl(routeCategories, player); } + /** + * Sets a remote player for handling playback of the selected route from MediaControlView2. + * If this is not called, MediaCotrolView2 will not show the route button. + * + * @param routeCategories the list of media control categories in + * {@link android.support.v7.media.MediaControlIntent} + * @param sessionPlayer the player to handle playback of the selected route. + * If null, a default route player will be used. + * @throws IllegalStateException if MediaControlView2 is not set. + * @hide + */ + // TODO: Use MediaPlayerBase once MediaSession2 APIs are ready. + public void setRouteAttributes(@NonNull List routeCategories, + @Nullable MediaSession.Callback sessionPlayer) { + mProvider.setRouteAttributes_impl(routeCategories, sessionPlayer); + } + /** * Sets video path. * diff --git a/media/java/android/media/update/VideoView2Provider.java b/media/java/android/media/update/VideoView2Provider.java index 322a4f6304d82..13f48bc291297 100644 --- a/media/java/android/media/update/VideoView2Provider.java +++ b/media/java/android/media/update/VideoView2Provider.java @@ -20,6 +20,7 @@ import android.media.AudioAttributes; import android.media.MediaPlayerInterface; import android.media.session.MediaController; import android.media.session.PlaybackState; +import android.media.session.MediaSession; import android.net.Uri; import android.widget.MediaControlView2; import android.widget.VideoView2; @@ -53,6 +54,8 @@ public interface VideoView2Provider extends ViewProvider { void setAudioFocusRequest_impl(int focusGain); void setAudioAttributes_impl(AudioAttributes attributes); void setRouteAttributes_impl(List routeCategories, MediaPlayerInterface player); + // TODO: remove setRouteAttributes_impl with MediaSession.Callback once MediaSession2 is ready. + void setRouteAttributes_impl(List routeCategories, MediaSession.Callback sessionPlayer); void setVideoPath_impl(String path); void setVideoUri_impl(Uri uri); void setVideoUri_impl(Uri uri, Map headers);