Hide plugin views when we start playing HTML5 video

Plugins like Flash draw directly to the screen on top
of all other views - including the fullscreen HTML5 video
view. This means that if you start an HTML5 video on a page
also serving a flash clip then flash will obscure the video.

This patch hides plugin views before start the video and shows
them again when the VideoView is destroyed.

Bug: 3183521
Change-Id: I9839c47e9d64b081651b952057e9283630362b29
This commit is contained in:
Ben Murdoch
2010-11-11 15:56:16 +00:00
parent fac4a689f8
commit 1708ad53c3
2 changed files with 15 additions and 0 deletions

View File

@@ -138,6 +138,10 @@ class HTML5VideoViewProxy extends Handler
mCurrentProxy.dispatchOnEnded();
else
mCurrentProxy.dispatchOnPaused();
// Re enable plugin views.
mCurrentProxy.getWebView().getViewManager().showAll();
isVideoSelfEnded = false;
mCurrentProxy = null;
mLayout.removeView(mVideoView);
@@ -199,6 +203,9 @@ class HTML5VideoViewProxy extends Handler
mTimer = new Timer();
mVideoView.start();
client.onShowCustomView(mLayout, mCallback);
// Plugins like Flash will draw over the video so hide
// them while we're playing.
mCurrentProxy.getWebView().getViewManager().hideAll();
}
public static boolean isPlaying(HTML5VideoViewProxy proxy) {
@@ -599,6 +606,10 @@ class HTML5VideoViewProxy extends Handler
return new HTML5VideoViewProxy(webViewCore.getWebView(), nativePtr);
}
/* package */ WebView getWebView() {
return mWebView;
}
private native void nativeOnPrepared(int duration, int width, int height, int nativePointer);
private native void nativeOnEnded(int nativePointer);
private native void nativeOnPaused(int nativePointer);

View File

@@ -7845,6 +7845,10 @@ public class WebView extends AbsoluteLayout
nativeUpdateCachedTextfield(updatedText, mTextGeneration);
}
/* package */ ViewManager getViewManager() {
return mViewManager;
}
private native int nativeCacheHitFramePointer();
private native Rect nativeCacheHitNodeBounds();
private native int nativeCacheHitNodePointer();