VideoView2.java revision 82af545ca64bff030697a0369e0301c03e8123ec
1e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim/* 2e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * Copyright 2018 The Android Open Source Project 3e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * 4e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * Licensed under the Apache License, Version 2.0 (the "License"); 5e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * you may not use this file except in compliance with the License. 6e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * You may obtain a copy of the License at 7e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * 8e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * http://www.apache.org/licenses/LICENSE-2.0 9e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * 10e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * Unless required by applicable law or agreed to in writing, software 11e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * distributed under the License is distributed on an "AS IS" BASIS, 12e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * See the License for the specific language governing permissions and 14e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * limitations under the License. 15e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 16e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 17e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limpackage android.widget; 18e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 19e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.annotation.IntDef; 20e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.annotation.NonNull; 21e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.annotation.Nullable; 22e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.content.Context; 23e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.media.AudioAttributes; 24de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kangimport android.media.AudioManager; 25af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Limimport android.media.MediaPlayerBase; 2682af545ca64bff030697a0369e0301c03e8123ecSungsoo Limimport android.media.session.MediaController; 27e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.media.update.ApiLoader; 28e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.media.update.VideoView2Provider; 29e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.media.update.ViewProvider; 30e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.net.Uri; 31e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.util.AttributeSet; 32e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.view.KeyEvent; 33e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport android.view.MotionEvent; 34e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 35e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport java.lang.annotation.Retention; 36e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport java.lang.annotation.RetentionPolicy; 37af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Limimport java.util.List; 38e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limimport java.util.Map; 39e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 40eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang// TODO: Use @link tag to refer MediaPlayer2 in docs once MediaPlayer2.java is submitted. Same to 41eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang// MediaSession2. 42eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang// TODO: change the reference from MediaPlayer to MediaPlayer2. 43e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim/** 44eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Displays a video file. VideoView2 class is a View class which is wrapping MediaPlayer2 so that 45eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * developers can easily implement a video rendering application. 46eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 47eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <p> 48eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <em> Data sources that VideoView2 supports : </em> 49eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * VideoView2 can play video files and audio-only fiels as 50eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * well. It can load from various sources such as resources or content providers. The supported 51eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * media file formats are the same as MediaPlayer2. 52eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 53eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <p> 54eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <em> View type can be selected : </em> 55eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * VideoView2 can render videos on top of TextureView as well as 56eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * SurfaceView selectively. The default is SurfaceView and it can be changed using 57eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@link #setViewType(int)} method. Using SurfaceView is recommended in most cases for saving 58eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * battery. TextureView might be preferred for supporting various UIs such as animation and 59eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * translucency. 60eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 61eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <p> 62eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <em> Differences between {@link VideoView} class : </em> 63eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * VideoView2 covers and inherits the most of 64eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * VideoView's functionalities. The main differences are 65eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <ul> 66eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li> VideoView2 inherits FrameLayout and renders videos using SurfaceView and TextureView 67eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * selectively while VideoView inherits SurfaceView class. 68eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li> VideoView2 is integrated with MediaControlView2 and a default MediaControlView2 instance is 69eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * attached to VideoView2 by default. If a developer does not want to use the default 70eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * MediaControlView2, needs to set enableControlView attribute to false. For instance, 71eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <pre> 72eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <VideoView2 73eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * android:id="@+id/video_view" 74eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * xmlns:widget="http://schemas.android.com/apk/com.android.media.update" 75eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * widget:enableControlView="false" /> 76eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * </pre> 77eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * If a developer wants to attach a customed MediaControlView2, then set enableControlView attribute 78eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * to false and assign the customed media control widget using {@link #setMediaControlView2}. 79eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li> VideoView2 is integrated with MediaPlayer2 while VideoView is integrated with MediaPlayer. 8082af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * <li> VideoView2 is integrated with MediaSession and so it responses with media key events. 8182af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * A VideoView2 keeps a MediaSession instance internally and connects it to a corresponding 82eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * MediaControlView2 instance. 83eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * </p> 84eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * </ul> 85eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 86eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <p> 87eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <em> Audio focus and audio attributes : </em> 88eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * By default, VideoView2 requests audio focus with 89eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@link AudioManager#AUDIOFOCUS_GAIN}. Use {@link #setAudioFocusRequest(int)} to change this 90eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * behavior. The default {@link AudioAttributes} used during playback have a usage of 91eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@link AudioAttributes#USAGE_MEDIA} and a content type of 92eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@link AudioAttributes#CONTENT_TYPE_MOVIE}, use {@link #setAudioAttributes(AudioAttributes)} to 93eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * modify them. 94eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 95eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <p> 96eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Note: VideoView2 does not retain its full state when going into the background. In particular, it 97eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * does not restore the current play state, play position, selected tracks. Applications should save 98eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * and restore these on their own in {@link android.app.Activity#onSaveInstanceState} and 99eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@link android.app.Activity#onRestoreInstanceState}. 100eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 101e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * @hide 102e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 103e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Limpublic class VideoView2 extends FrameLayout { 104eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang /** @hide */ 105e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @IntDef({ 106e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim VIEW_TYPE_TEXTUREVIEW, 107e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim VIEW_TYPE_SURFACEVIEW 108e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim }) 109e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Retention(RetentionPolicy.SOURCE) 110e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public @interface ViewType {} 111eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang 112e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public static final int VIEW_TYPE_SURFACEVIEW = 1; 113e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public static final int VIEW_TYPE_TEXTUREVIEW = 2; 114e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 115e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim private final VideoView2Provider mProvider; 116e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 117e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public VideoView2(@NonNull Context context) { 118e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim this(context, null); 119e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 120e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 121e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public VideoView2(@NonNull Context context, @Nullable AttributeSet attrs) { 122e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim this(context, attrs, 0); 123e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 124e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 125e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public VideoView2(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 126e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim this(context, attrs, defStyleAttr, 0); 127e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 128e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 129e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public VideoView2( 130e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @NonNull Context context, @Nullable AttributeSet attrs, 131e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim int defStyleAttr, int defStyleRes) { 132e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim super(context, attrs, defStyleAttr, defStyleRes); 133e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 134de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang mProvider = ApiLoader.getProvider(context).createVideoView2(this, new SuperProvider(), 135de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang attrs, defStyleAttr, defStyleRes); 136e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 137e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 138e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 139e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim * @hide 140e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 141e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public VideoView2Provider getProvider() { 142e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider; 143e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 144e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 145e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 146eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Sets MediaControlView2 instance. It will replace the previously assigned MediaControlView2 147eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * instance if any. 148eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 149eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param mediaControlView a media control view2 instance. 150e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 151de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public void setMediaControlView2(MediaControlView2 mediaControlView) { 152de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang mProvider.setMediaControlView2_impl(mediaControlView); 153de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 154de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 155de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 156eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Returns MediaControlView2 instance which is currently attached to VideoView2 by default or by 157eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@link #setMediaControlView2} method. 158de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 159de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public MediaControlView2 getMediaControlView2() { 160de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang return mProvider.getMediaControlView2_impl(); 161de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 162de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 163e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 164e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 16582af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * Returns MediaController instance which is connected with MediaSession that VideoView2 is 16682af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * using. This method should be called when VideoView2 is attached to window, or it throws 16782af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * IllegalStateException, since internal MediaSession instance is not available until 16882af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * this view is attached to window. Please check {@link android.view.View#isAttachedToWindow} 16982af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * before calling this method. 17082af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * 17182af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim * @throws IllegalStateException if interal MediaSession is not created yet. 172e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 17382af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim public MediaController getMediaController() { 17482af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim return mProvider.getMediaController_impl(); 175e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 176e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 177e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 178eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Returns the audio session ID. 179e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 180e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public int getAudioSessionId() { 181e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.getAudioSessionId_impl(); 182e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 183e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 184e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 185eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Starts rendering closed caption or subtitles if there is any. The first subtitle track will 186eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * be chosen by default if there multiple subtitle tracks exist. 187e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 188e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void showSubtitle() { 189e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.showSubtitle_impl(); 190e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 191e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 192e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 193eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Stops showing closed captions or subtitles. 194e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 195e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void hideSubtitle() { 196e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.hideSubtitle_impl(); 197e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 198e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 199efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon /** 200efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon * Sets full screen mode. 201efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon */ 202efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon public void setFullScreen(boolean fullScreen) { 203efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon mProvider.setFullScreen_impl(fullScreen); 204efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon } 205efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon 206e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 207de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Sets playback speed. 208de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * 209de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * It is expressed as a multiplicative factor, where normal speed is 1.0f. If it is less than 210de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * or equal to zero, it will be just ignored and nothing will be changed. If it exceeds the 211de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * maximum speed that internal engine supports, system will determine best handling or it will 212de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * be reset to the normal speed 1.0f. 213de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * @param speed the playback speed. It should be positive. 214de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 21582af545ca64bff030697a0369e0301c03e8123ecSungsoo Lim // TODO: Support this via MediaController2. 216de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public void setSpeed(float speed) { 217de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang mProvider.setSpeed_impl(speed); 218de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 219de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 220de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 221de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Sets which type of audio focus will be requested during the playback, or configures playback 222de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * to not request audio focus. Valid values for focus requests are 223de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * {@link AudioManager#AUDIOFOCUS_GAIN}, {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT}, 224de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK}, and 225de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE}. Or use 226de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * {@link AudioManager#AUDIOFOCUS_NONE} to express that audio focus should not be 227de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * requested when playback starts. You can for instance use this when playing a silent animation 228de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * through this class, and you don't want to affect other audio applications playing in the 229de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * background. 230de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * 231de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * @param focusGain the type of audio focus gain that will be requested, or 232af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * {@link AudioManager#AUDIOFOCUS_NONE} to disable the use audio focus during 233af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * playback. 234e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 235e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setAudioFocusRequest(int focusGain) { 236e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setAudioFocusRequest_impl(focusGain); 237e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 238e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 239e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 240de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Sets the {@link AudioAttributes} to be used during the playback of the video. 241de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * 242de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * @param attributes non-null <code>AudioAttributes</code>. 243e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 244e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setAudioAttributes(@NonNull AudioAttributes attributes) { 245e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setAudioAttributes_impl(attributes); 246e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 247e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 248e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 249af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * Sets a remote player for handling playback of the selected route from MediaControlView2. 250af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * If this is not called, MediaCotrolView2 will not show the route button. 251af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * 252af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * @param routeCategories the list of media control categories in 253af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * {@link android.support.v7.media.MediaControlIntent} 254af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * @param player the player to handle the selected route. If null, a default 255af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * route player will be used. 256af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim * @throws IllegalStateException if MediaControlView2 is not set. 257af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim */ 258af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim public void setRouteAttributes(@NonNull List<String> routeCategories, 259af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim @Nullable MediaPlayerBase player) { 260af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim mProvider.setRouteAttributes_impl(routeCategories, player); 261af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim } 262af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim 263af2a1ad069f2fefc162eede7556cd91288a91e8cSungsoo Lim /** 264de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Sets video path. 265de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * 266de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * @param path the path of the video. 267e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 268e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setVideoPath(String path) { 269e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setVideoPath_impl(path); 270e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 271e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 272e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 273eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Sets video URI. 274eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 275eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param uri the URI of the video. 276e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 277e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setVideoURI(Uri uri) { 278e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setVideoURI_impl(uri); 279e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 280e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 281e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 282eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Sets video URI using specific headers. 283eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 284eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param uri the URI of the video. 285eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param headers the headers for the URI request. 286eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Note that the cross domain redirection is allowed by default, but that can be 287eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * changed with key/value pairs through the headers parameter with 288eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * "android-allow-cross-domain-redirect" as the key and "0" or "1" as the value 289eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * to disallow or allow cross domain redirection. 290e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 291e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setVideoURI(Uri uri, Map<String, String> headers) { 292e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setVideoURI_impl(uri, headers); 293e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 294e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 295e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 296eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Selects which view will be used to render video between SurfacView and TextureView. 297eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 298eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param viewType the view type to render video 299eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <ul> 300eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li>{@link #VIEW_TYPE_SURFACEVIEW} 301eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li>{@link #VIEW_TYPE_TEXTUREVIEW} 302eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * </ul> 303e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 304e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setViewType(@ViewType int viewType) { 305e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setViewType_impl(viewType); 306e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 307e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 308e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 309eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Returns view type. 310eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 311eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @return view type. See {@see setViewType}. 312e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 313e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @ViewType 314e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public int getViewType() { 315e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.getViewType_impl(); 316e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 317e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 318e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 319eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Registers a callback to be invoked when the media file is loaded and ready to go. 320eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 321eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param l the callback that will be run. 322e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 323de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public void setOnPreparedListener(OnPreparedListener l) { 324e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setOnPreparedListener_impl(l); 325e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 326e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 327e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 328eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Registers a callback to be invoked when the end of a media file has been reached during 329eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * playback. 330eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 331eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param l the callback that will be run. 332e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 333de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public void setOnCompletionListener(OnCompletionListener l) { 334e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setOnCompletionListener_impl(l); 335e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 336e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 337e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 338eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Registers a callback to be invoked when an error occurs during playback or setup. If no 339eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * listener is specified, or if the listener returned false, VideoView2 will inform the user of 340eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * any errors. 341eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 342eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param l The callback that will be run 343e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 344de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public void setOnErrorListener(OnErrorListener l) { 345e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setOnErrorListener_impl(l); 346e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 347e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 348e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 349eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Registers a callback to be invoked when an informational event occurs during playback or 350eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * setup. 351eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 352eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param l The callback that will be run 353e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 354de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public void setOnInfoListener(OnInfoListener l) { 355e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setOnInfoListener_impl(l); 356e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 357e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 358e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 359eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Registers a callback to be invoked when a view type change is done. 360eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * {@see #setViewType(int)} 361eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param l The callback that will be run 362e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 363e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setOnViewTypeChangedListener(OnViewTypeChangedListener l) { 364e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setOnViewTypeChangedListener_impl(l); 365e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 366e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 367e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 368efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon * Registers a callback to be invoked when the fullscreen mode should be changed. 369efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon */ 370efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon public void setFullScreenChangedListener(OnFullScreenChangedListener l) { 371efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon mProvider.setFullScreenChangedListener_impl(l); 372efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon } 373efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon 374efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon /** 375de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Interface definition of a callback to be invoked when the viw type has been changed. 376e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 377e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public interface OnViewTypeChangedListener { 378e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim /** 379de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Called when the view type has been changed. 380eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @see #setViewType(int) 381eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param viewType 382eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <ul> 383eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li>{@link #VIEW_TYPE_SURFACEVIEW} 384eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * <li>{@link #VIEW_TYPE_TEXTUREVIEW} 385eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * </ul> 386e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim */ 387e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim void onViewTypeChanged(@ViewType int viewType); 388e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 389e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 390de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 391eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Interface definition of a callback to be invoked when the media source is ready for playback. 392de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 393de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public interface OnPreparedListener { 394de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 395de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Called when the media file is ready for playback. 396de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 397de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang void onPrepared(); 398de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 399de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 400de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 401eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Interface definition for a callback to be invoked when playback of a media source has 402eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * completed. 403de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 404de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public interface OnCompletionListener { 405de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 406de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Called when the end of a media source is reached during playback. 407de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 408de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang void onCompletion(); 409de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 410de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 411de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 412eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Interface definition of a callback to be invoked when there has been an error during an 413eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * asynchronous operation. 414de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 415de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public interface OnErrorListener { 416eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang // TODO: Redefine error codes. 417de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 418de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Called to indicate an error. 419eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param what the type of error that has occurred 420eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @param extra an extra code, specific to the error. 421eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @return true if the method handled the error, false if it didn't. 422eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @see MediaPlayer#OnErrorListener 423de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 424de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang boolean onError(int what, int extra); 425de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 426de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 427de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 428eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * Interface definition of a callback to be invoked to communicate some info and/or warning 429eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * about the media or its playback. 430de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 431de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang public interface OnInfoListener { 432de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang /** 433de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * Called to indicate an info or a warning. 434de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * @param what the type of info or warning. 435de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang * @param extra an extra code, specific to the info. 436eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * 437eb78d511cb5b06e7c679a090fc13afd74ec15717Insun Kang * @see MediaPlayer#OnInfoListener 438de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang */ 439de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang void onInfo(int what, int extra); 440de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang } 441de16c4d3579238b49cd3a253e9905196120f9bf0Insun Kang 442efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon /** 443efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon * Interface definition of a callback to be invoked to inform the fullscreen mode is changed. 444efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon */ 445efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon public interface OnFullScreenChangedListener { 446efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon /** 447efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon * Called to indicate a fullscreen mode change. 448efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon */ 449efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon void onFullScreenChanged(boolean fullScreen); 450efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon } 451efeb45eabd6b9b2bcb8390e4140c615967c70ddaHyundo Moon 452e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 453fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang protected void onAttachedToWindow() { 454fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang mProvider.onAttachedToWindow_impl(); 455fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang } 456fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang 457fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang @Override 458fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang protected void onDetachedFromWindow() { 459fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang mProvider.onDetachedFromWindow_impl(); 460fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang } 461fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang 462fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang @Override 463e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public CharSequence getAccessibilityClassName() { 464e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.getAccessibilityClassName_impl(); 465e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 466e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 467e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 468e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean onTouchEvent(MotionEvent ev) { 469e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.onTouchEvent_impl(ev); 470e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 471e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 472e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 473e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean onTrackballEvent(MotionEvent ev) { 474e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.onTrackballEvent_impl(ev); 475e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 476e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 477e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 478e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean onKeyDown(int keyCode, KeyEvent event) { 479e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.onKeyDown_impl(keyCode, event); 480e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 481e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 482e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 483e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void onFinishInflate() { 484e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.onFinishInflate_impl(); 485e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 486e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 487e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 488e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean dispatchKeyEvent(KeyEvent event) { 489e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return mProvider.dispatchKeyEvent_impl(event); 490e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 491e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 492e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 493e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setEnabled(boolean enabled) { 494e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim mProvider.setEnabled_impl(enabled); 495e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 496e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 497e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim private class SuperProvider implements ViewProvider { 498e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 499fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang public void onAttachedToWindow_impl() { 500fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang VideoView2.super.onAttachedToWindow(); 501fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang } 502fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang 503fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang @Override 504fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang public void onDetachedFromWindow_impl() { 505fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang VideoView2.super.onDetachedFromWindow(); 506fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang } 507fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang 508fd3fdfdfedd0bf8227ce4e44c0d5e5182fe8f862Insun Kang @Override 509e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public CharSequence getAccessibilityClassName_impl() { 510e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return VideoView2.super.getAccessibilityClassName(); 511e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 512e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 513e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 514e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean onTouchEvent_impl(MotionEvent ev) { 515e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return VideoView2.super.onTouchEvent(ev); 516e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 517e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 518e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 519e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean onTrackballEvent_impl(MotionEvent ev) { 520e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return VideoView2.super.onTrackballEvent(ev); 521e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 522e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 523e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 524e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean onKeyDown_impl(int keyCode, KeyEvent event) { 525e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return VideoView2.super.onKeyDown(keyCode, event); 526e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 527e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 528e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 529e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void onFinishInflate_impl() { 530e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim VideoView2.super.onFinishInflate(); 531e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 532e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 533e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 534e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public boolean dispatchKeyEvent_impl(KeyEvent event) { 535e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim return VideoView2.super.dispatchKeyEvent(event); 536e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 537e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim 538e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim @Override 539e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim public void setEnabled_impl(boolean enabled) { 540e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim VideoView2.super.setEnabled(enabled); 541e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 542e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim } 543e3259049872ea9000b71e8f14d4237a75bc9d606Sungsoo Lim} 544