Commit e7bce2b6 authored by Ted Choc's avatar Ted Choc Committed by Commit Bot

Make fullscreen compositor sizing w/ keyboard work on Android < P.

The sizing is not perfect by any stretch though.  The size is
smaller by what appears to be the status bar height.  While
this is not ideal, it is still progressing towards being
actually usable.

BUG=704070

Change-Id: Ieae588fd9a5fc43b700adba399b86fb4e888349d
Reviewed-on: https://chromium-review.googlesource.com/1169976
Commit-Queue: Ted Choc <tedchoc@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582051}
parent d51a2b7d
...@@ -104,7 +104,7 @@ public class CompositorViewHolder extends FrameLayout ...@@ -104,7 +104,7 @@ public class CompositorViewHolder extends FrameLayout
private ControlContainer mControlContainer; private ControlContainer mControlContainer;
private InsetObserverView mInsetObserverView; private InsetObserverView mInsetObserverView;
private boolean mShowingFullscreenNonVideoContent; private boolean mShowingFullscreen;
private Runnable mSystemUiFullscreenResizeRunnable; private Runnable mSystemUiFullscreenResizeRunnable;
/** The currently visible Tab. */ /** The currently visible Tab. */
...@@ -258,7 +258,7 @@ public class CompositorViewHolder extends FrameLayout ...@@ -258,7 +258,7 @@ public class CompositorViewHolder extends FrameLayout
// contents. // contents.
// //
// [1] - https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN // [1] - https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN
if (mShowingFullscreenNonVideoContent && UiUtils.isKeyboardShowing(getContext(), this)) { if (mShowingFullscreen && UiUtils.isKeyboardShowing(getContext(), this)) {
getWindowVisibleDisplayFrame(mCacheRect); getWindowVisibleDisplayFrame(mCacheRect);
// On certain devices, getWindowVisibleDisplayFrame is larger than the screen size, so // On certain devices, getWindowVisibleDisplayFrame is larger than the screen size, so
...@@ -273,36 +273,26 @@ public class CompositorViewHolder extends FrameLayout ...@@ -273,36 +273,26 @@ public class CompositorViewHolder extends FrameLayout
} }
private void handleSystemUiVisibilityChange() { private void handleSystemUiVisibilityChange() {
boolean isInFullscreen = false;
boolean layoutFullscreen = false;
View view = getContentView(); View view = getContentView();
if (view == null || !ViewCompat.isAttachedToWindow(view)) view = this; if (view == null || !ViewCompat.isAttachedToWindow(view)) view = this;
int uiVisibility = 0;
while (view != null) { while (view != null) {
int uiVisibility = view.getSystemUiVisibility(); uiVisibility |= view.getSystemUiVisibility();
layoutFullscreen |= (uiVisibility & View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) != 0;
isInFullscreen |= (uiVisibility & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
if (layoutFullscreen && isInFullscreen) break;
if (!(view.getParent() instanceof View)) break; if (!(view.getParent() instanceof View)) break;
view = (View) view.getParent(); view = (View) view.getParent();
} }
if (!isInFullscreen && !mShowingFullscreenNonVideoContent) return; // SYSTEM_UI_FLAG_FULLSCREEN is cleared when showing the soft keyboard in older version of
// Android (prior to P). The immersive mode flags are not cleared, so use those in
if (isInFullscreen && mFullscreenManager != null // combination to detect this state.
&& mFullscreenManager.getPersistentFullscreenMode()) { boolean isInFullscreen = (uiVisibility & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0
Tab tab = getCurrentTab(); || (uiVisibility & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0
WebContents webContents = tab != null ? tab.getWebContents() : null; || (uiVisibility & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0;
// When playing fullscreen video, the inset size adjustments are always temporary and boolean layoutFullscreen = (uiVisibility & View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) != 0;
// should be ignored to avoid relayout janks.
if (webContents != null && webContents.hasActiveEffectivelyFullscreenVideo()) {
isInFullscreen = false;
}
}
if (mShowingFullscreenNonVideoContent == isInFullscreen) return; if (mShowingFullscreen == isInFullscreen) return;
mShowingFullscreenNonVideoContent = isInFullscreen; mShowingFullscreen = isInFullscreen;
if (mSystemUiFullscreenResizeRunnable == null) { if (mSystemUiFullscreenResizeRunnable == null) {
mSystemUiFullscreenResizeRunnable = () -> { mSystemUiFullscreenResizeRunnable = () -> {
...@@ -376,8 +366,8 @@ public class CompositorViewHolder extends FrameLayout ...@@ -376,8 +366,8 @@ public class CompositorViewHolder extends FrameLayout
} }
@Override @Override
public void onInsetChanged(int top, int left, int bottom, int right) { public void onInsetChanged(int left, int top, int right, int bottom) {
if (mShowingFullscreenNonVideoContent) onViewportChanged(); if (mShowingFullscreen) onViewportChanged();
} }
@Override @Override
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment