Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9cadefd authored by Teng-Hui Zhu's avatar Teng-Hui Zhu
Browse files

DO NOT MERGE : cherry pick of change I0f9f2c65 from master

Add the loading progress UI when buffering

bug:4187252
Change-Id: Ifbf63b248ac5f0e340be4057e0dcd80d33483662
parent b25181aa
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -189,6 +189,10 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
        mPlayer.setOnPreparedListener(this);
    }

    public void setOnInfoListener(HTML5VideoViewProxy proxy) {
        mPlayer.setOnInfoListener(proxy);
    }

    // Normally called immediately after setVideoURI. But for full screen,
    // this should be after surface holder created
    public void prepareDataAndDisplayMode(HTML5VideoViewProxy proxy) {
@@ -198,7 +202,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
        setOnCompletionListener(proxy);
        setOnPreparedListener(proxy);
        setOnErrorListener(proxy);

        setOnInfoListener(proxy);
        // When there is exception, we could just bail out silently.
        // No Video will be played though. Write the stack for debug
        try {
+27 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ class HTML5VideoViewProxy extends Handler
                          implements MediaPlayer.OnPreparedListener,
                          MediaPlayer.OnCompletionListener,
                          MediaPlayer.OnErrorListener,
                          MediaPlayer.OnInfoListener,
                          SurfaceTexture.OnFrameAvailableListener {
    // Logging tag.
    private static final String LOGTAG = "HTML5VideoViewProxy";
@@ -56,6 +57,8 @@ class HTML5VideoViewProxy extends Handler
    private static final int PAUSE               = 102;
    private static final int ERROR               = 103;
    private static final int LOAD_DEFAULT_POSTER = 104;
    private static final int BUFFERING_START     = 105;
    private static final int BUFFERING_END       = 106;

    // Message Ids to be handled on the WebCore thread
    private static final int PREPARED          = 200;
@@ -92,6 +95,8 @@ class HTML5VideoViewProxy extends Handler
        // identify the exact layer on the UI thread to use the SurfaceTexture.
        private static int mBaseLayer = 0;

        // This is true only when the player is buffering and paused
        private static boolean mPlayerBuffering = false;
        // Every time webView setBaseLayer, this will be called.
        // When we found the Video layer, then we set the Surface Texture to it.
        // Otherwise, we may want to delete the Surface Texture to save memory.
@@ -106,6 +111,8 @@ class HTML5VideoViewProxy extends Handler
                int currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
                if (layer != 0 && surfTexture != null && currentVideoLayerId != -1) {
                    int playerState = mHTML5VideoView.getCurrentState();
                    if (mPlayerBuffering)
                        playerState = HTML5VideoView.STATE_NOTPREPARED;
                    boolean foundInTree = nativeSendSurfaceTexture(surfTexture,
                            layer, currentVideoLayerId, textureName,
                            playerState);
@@ -159,7 +166,7 @@ class HTML5VideoViewProxy extends Handler
                WebChromeClient client, int videoLayerId) {
            int currentVideoLayerId = -1;
            boolean backFromFullScreenMode = false;

            mPlayerBuffering = false;
            if (mHTML5VideoView != null) {
                currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
                if (mHTML5VideoView instanceof HTML5VideoFullScreen) {
@@ -224,6 +231,7 @@ class HTML5VideoViewProxy extends Handler
        }

        public static void onPrepared() {
            mPlayerBuffering = false;
            if (!mHTML5VideoView.isFullScreenMode() || mHTML5VideoView.getAutostart()) {
                mHTML5VideoView.start();
            }
@@ -342,6 +350,14 @@ class HTML5VideoViewProxy extends Handler
                }
                break;
            }
            case BUFFERING_START: {
                VideoPlayer.mPlayerBuffering = true;
                break;
            }
            case BUFFERING_END: {
                VideoPlayer.mPlayerBuffering = false;
                break;
            }
        }
    }

@@ -671,4 +687,14 @@ class HTML5VideoViewProxy extends Handler
    private native static boolean nativeSendSurfaceTexture(SurfaceTexture texture,
            int baseLayer, int videoLayerId, int textureName,
            int playerState);

    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
            sendMessage(obtainMessage(BUFFERING_START, what, extra));
        } else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
            sendMessage(obtainMessage(BUFFERING_END, what, extra));
        }
        return false;
    }
}