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