diff options
-rw-r--r-- | content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java b/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java index 6acf8dc..2929932 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java +++ b/content/public/android/java/src/org/chromium/content/browser/ActivityContentVideoViewClient.java @@ -5,6 +5,7 @@ package org.chromium.content.browser; import android.app.Activity; +import android.os.Build; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -24,24 +25,22 @@ public class ActivityContentVideoViewClient implements ContentVideoViewClient { @Override public boolean onShowCustomView(View view) { - mActivity.getWindow().setFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - - mActivity.getWindow().addContentView(view, - new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - Gravity.CENTER)); + FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView(); + decor.addView(view, 0, + new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + Gravity.CENTER)); + setSystemUiVisibility(decor, true); mView = view; return true; } @Override public void onDestroyContentVideoView() { - mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView(); decor.removeView(mView); + setSystemUiVisibility(decor, false); mView = null; } @@ -49,4 +48,35 @@ public class ActivityContentVideoViewClient implements ContentVideoViewClient { public View getVideoLoadingProgressView() { return null; } + + /** + * Returns the system ui visibility after entering or exiting fullscreen. + * @param view The decor view belongs to the activity window + * @param enterFullscreen True if video is going fullscreen, or false otherwise. + */ + private void setSystemUiVisibility(View view, boolean enterFullscreen) { + if (enterFullscreen) { + mActivity.getWindow().setFlags( + WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return; + } + + int systemUiVisibility = view.getSystemUiVisibility(); + int flags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + if (enterFullscreen) { + systemUiVisibility |= flags; + } else { + systemUiVisibility &= ~flags; + } + view.setSystemUiVisibility(systemUiVisibility); + } } |