From 6a9586bc57b162a2d68dd3e417f0fd43d8932fd0 Mon Sep 17 00:00:00 2001 From: Teng-Hui Zhu Date: Fri, 15 Jun 2012 11:22:23 -0700 Subject: [PATCH] Notify Java side to start when transition into full screen mode without a reload. When video start in inline mode, and then transition into full screen mode, the video is still playing, so we need to notify the player, such that the controller can get the state correctly. bug:6675847 Change-Id: Ib5f712ca91fe1c374dcc20de996dac6ff7b9e983 --- .../android/webkit/HTML5VideoFullScreen.java | 17 ++++++++++------- .../android/webkit/HTML5VideoViewProxy.java | 7 ++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/core/java/android/webkit/HTML5VideoFullScreen.java b/core/java/android/webkit/HTML5VideoFullScreen.java index 62bc502b79e25..33eaad6bde45e 100644 --- a/core/java/android/webkit/HTML5VideoFullScreen.java +++ b/core/java/android/webkit/HTML5VideoFullScreen.java @@ -194,13 +194,6 @@ public class HTML5VideoFullScreen extends HTML5VideoView mCanPause = mCanSeekBack = mCanSeekForward = true; } - // mMediaController status depends on the Metadata result, so put it - // after reading the MetaData - if (mMediaController != null) { - mMediaController.setEnabled(true); - mMediaController.show(); - } - if (mProgressView != null) { mProgressView.setVisibility(View.GONE); } @@ -215,6 +208,16 @@ public class HTML5VideoFullScreen extends HTML5VideoView if (getStartWhenPrepared()) { mPlayer.start(); + // Clear the flag. + setStartWhenPrepared(false); + } + + // mMediaController status depends on the Metadata result, so put it + // after reading the MetaData. + // And make sure mPlayer state is updated before showing the controller. + if (mMediaController != null) { + mMediaController.setEnabled(true); + mMediaController.show(); } } diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java index 90db308c3edf5..ab884dfbdd8cc 100644 --- a/core/java/android/webkit/HTML5VideoViewProxy.java +++ b/core/java/android/webkit/HTML5VideoViewProxy.java @@ -147,6 +147,7 @@ class HTML5VideoViewProxy extends Handler // Save the inline video info and inherit it in the full screen int savePosition = 0; boolean canSkipPrepare = false; + boolean forceStart = false; if (mHTML5VideoView != null) { // We don't allow enter full screen mode while the previous // full screen video hasn't finished yet. @@ -154,11 +155,11 @@ class HTML5VideoViewProxy extends Handler Log.w(LOGTAG, "Try to reenter the full screen mode"); return; } + int playerState = mHTML5VideoView.getCurrentState(); // If we are playing the same video, then it is better to // save the current position. if (layerId == mHTML5VideoView.getVideoLayerId()) { savePosition = mHTML5VideoView.getCurrentPosition(); - int playerState = mHTML5VideoView.getCurrentState(); canSkipPrepare = (playerState == HTML5VideoView.STATE_PREPARING || playerState == HTML5VideoView.STATE_PREPARED || playerState == HTML5VideoView.STATE_PLAYING) @@ -166,10 +167,14 @@ class HTML5VideoViewProxy extends Handler } if (!canSkipPrepare) { mHTML5VideoView.reset(); + } else { + forceStart = playerState == HTML5VideoView.STATE_PREPARING + || playerState == HTML5VideoView.STATE_PLAYING; } } mHTML5VideoView = new HTML5VideoFullScreen(proxy.getContext(), layerId, savePosition, canSkipPrepare); + mHTML5VideoView.setStartWhenPrepared(forceStart); mCurrentProxy = proxy; mHTML5VideoView.setVideoURI(url, mCurrentProxy); mHTML5VideoView.enterFullScreenVideoState(layerId, proxy, webView);