summaryrefslogtreecommitdiff
path: root/chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-c30a6232df03e1efbd9f3b226777b07e087a1122.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java')
-rw-r--r--chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java60
1 files changed, 45 insertions, 15 deletions
diff --git a/chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java b/chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
index d860d7cdef4..ce10368c02c 100644
--- a/chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
+++ b/chromium/weblayer/browser/java/org/chromium/weblayer_private/BrowserControlsContainerView.java
@@ -267,15 +267,32 @@ class BrowserControlsContainerView extends FrameLayout {
if (mView == null) return;
int width = right - left;
int height = bottom - top;
- if (height != mLastHeight || width != mLastWidth) {
- mLastWidth = width;
- mLastHeight = height;
- if (mLastWidth > 0 && mLastHeight > 0) {
- if (mViewResourceAdapter == null) {
- createAdapterAndLayer();
+ boolean heightChanged = height != mLastHeight;
+ if (!heightChanged && width == mLastWidth) return;
+
+ mLastWidth = width;
+ mLastHeight = height;
+ if (mLastWidth > 0 && mLastHeight > 0 && mViewResourceAdapter == null) {
+ createAdapterAndLayer();
+ } else if (mViewResourceAdapter != null) {
+ BrowserControlsContainerViewJni.get().setControlsSize(
+ mNativeBrowserControlsContainerView, mLastWidth, mLastHeight);
+ if (mWebContents != null) mWebContents.notifyBrowserControlsHeightChanged();
+ if (heightChanged) {
+ // When the height changes cc doesn't generate a new frame, which means this code
+ // must process the change now. If cc generated a new frame, it would likely be at
+ // the wrong size.
+ if (mControlsOffset == 0) {
+ // The controls are completely visible.
+ onOffsetsChanged(0, height);
} else {
- BrowserControlsContainerViewJni.get().setControlsSize(
- mNativeBrowserControlsContainerView, mLastWidth, mLastHeight);
+ // The controls are partially (and possibly completely) hidden. Snap to
+ // completely hidden.
+ if (mIsTop) {
+ onOffsetsChanged(-height, height);
+ } else {
+ onOffsetsChanged(height, 0);
+ }
}
}
}
@@ -333,7 +350,11 @@ class BrowserControlsContainerView extends FrameLayout {
private void finishScroll(int contentOffsetY) {
mInScroll = false;
setControlsOffset(0, contentOffsetY);
- mContentViewRenderView.postOnAnimation(() -> showControls());
+ if (BrowserControlsContainerViewJni.get().shouldDelayVisibilityChange()) {
+ mContentViewRenderView.postOnAnimation(() -> showControls());
+ } else {
+ showControls();
+ }
}
private void setControlsOffset(int controlsOffsetY, int contentOffsetY) {
@@ -350,16 +371,20 @@ class BrowserControlsContainerView extends FrameLayout {
}
if (mIsTop) {
BrowserControlsContainerViewJni.get().setTopControlsOffset(
- mNativeBrowserControlsContainerView, mControlsOffset, mContentOffset);
+ mNativeBrowserControlsContainerView, mContentOffset);
} else {
BrowserControlsContainerViewJni.get().setBottomControlsOffset(
- mNativeBrowserControlsContainerView, mControlsOffset);
+ mNativeBrowserControlsContainerView);
}
}
private void prepareForScroll() {
mInScroll = true;
- mContentViewRenderView.postOnAnimation(() -> hideControls());
+ if (BrowserControlsContainerViewJni.get().shouldDelayVisibilityChange()) {
+ mContentViewRenderView.postOnAnimation(() -> hideControls());
+ } else {
+ hideControls();
+ }
}
private void hideControls() {
@@ -371,6 +396,11 @@ class BrowserControlsContainerView extends FrameLayout {
}
@CalledByNative
+ private int getControlsOffset() {
+ return mControlsOffset;
+ }
+
+ @CalledByNative
private void didToggleFullscreenModeForTab(final boolean isFullscreen) {
// Delay hiding until after the animation. This comes from Chrome code.
if (mSystemUiFullscreenResizeRunnable != null) {
@@ -410,11 +440,11 @@ class BrowserControlsContainerView extends FrameLayout {
void deleteBrowserControlsContainerView(long nativeBrowserControlsContainerView);
void createControlsLayer(long nativeBrowserControlsContainerView, int id);
void deleteControlsLayer(long nativeBrowserControlsContainerView);
- void setTopControlsOffset(
- long nativeBrowserControlsContainerView, int controlsOffsetY, int contentOffsetY);
- void setBottomControlsOffset(long nativeBrowserControlsContainerView, int controlsOffsetY);
+ void setTopControlsOffset(long nativeBrowserControlsContainerView, int contentOffsetY);
+ void setBottomControlsOffset(long nativeBrowserControlsContainerView);
void setControlsSize(long nativeBrowserControlsContainerView, int width, int height);
void updateControlsResource(long nativeBrowserControlsContainerView);
void setWebContents(long nativeBrowserControlsContainerView, WebContents webContents);
+ boolean shouldDelayVisibilityChange();
}
}