1fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang/* 2fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Copyright 2018 The Android Open Source Project 3fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 4fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * you may not use this file except in compliance with the License. 6fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * You may obtain a copy of the License at 7fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 8fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * http://www.apache.org/licenses/LICENSE-2.0 9fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 10fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Unless required by applicable law or agreed to in writing, software 11fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * distributed under the License is distributed on an "AS IS" BASIS, 12fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * See the License for the specific language governing permissions and 14fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * limitations under the License. 15fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 16fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 173aa13eacdb57fb58cf0385ab46b98c61892e2ce0Jin Seok Parkpackage androidx.media.widget; 18fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 19fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.media.MediaPlayer; 20fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.view.View; 21fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 22fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.annotation.NonNull; 23fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 2447740510281e2d2c5a535c31d52ac970d32951c6Insun Kanginterface VideoViewInterfaceWithMp1 { 25fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 26fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Assigns the view's surface to the given MediaPlayer instance. 27fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 28fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param mp MediaPlayer 29fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return true if the surface is successfully assigned, false if not. It will fail to assign 30fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * if any of MediaPlayer or surface is unavailable. 31fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 32fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang boolean assignSurfaceToMediaPlayer(MediaPlayer mp); 33fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang void setSurfaceListener(SurfaceListener l); 34fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang int getViewType(); 35fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang void setMediaPlayer(MediaPlayer mp); 36fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 37fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 38fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Takes over oldView. It means that the MediaPlayer will start rendering on this view. 39fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * The visibility of oldView will be set as {@link View.GONE}. If the view doesn't have a 40fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * MediaPlayer instance or its surface is not available, the actual execution is deferred until 41fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * a MediaPlayer instance is set by {@link #setMediaPlayer} or its surface becomes available. 42fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * {@link SurfaceListener.onSurfaceTakeOverDone} will be called when the actual execution is 43fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * done. 44fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 45fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @param oldView The view that MediaPlayer is currently rendering on. 46fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 4747740510281e2d2c5a535c31d52ac970d32951c6Insun Kang void takeOver(@NonNull VideoViewInterfaceWithMp1 oldView); 48fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 49fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 50fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Indicates if the view's surface is available. 51fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * 52fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * @return true if the surface is available. 53fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 54fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang boolean hasAvailableSurface(); 55fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang 56fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang /** 57fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * An instance of VideoViewInterface calls these surface notification methods accordingly if 58fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * a listener has been registered via {@link #setSurfaceListener(SurfaceListener)}. 59fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */ 60fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang interface SurfaceListener { 61fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang void onSurfaceCreated(View view, int width, int height); 62fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang void onSurfaceDestroyed(View view); 63fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang void onSurfaceChanged(View view, int width, int height); 6447740510281e2d2c5a535c31d52ac970d32951c6Insun Kang void onSurfaceTakeOverDone(VideoViewInterfaceWithMp1 view); 65fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang } 66fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang} 67