Commit 7b2c8343 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Fix overlay width for multi-window mode

The reported bug uncovered an issue about non-full-width overlay panel
having a wrong, full width when toggling (or resizing while in)
multi-window mode. The new panel width calculated from the new size
should have been used, but the raw, full width value was passed to
resizing logic of the content layer. This is a new corner case where
non-full-width overlay panel is preserved across size change.

This CL fixes it to ensure that the right values from
|OverlayPanelBase.getContentView{Width|Height}Px()| are used.
Also did a cleanup removing some dup'ed codes and combined WebContents/
native backing size updates as they are always done together.


Bug: 855386
Change-Id: I0a982dd21a083bbec7b9e0d5838a866ebcce31cb
Reviewed-on: https://chromium-review.googlesource.com/1127918Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#574019}
parent e7452466
...@@ -814,32 +814,28 @@ public class OverlayPanel extends OverlayPanelAnimation implements ActivityState ...@@ -814,32 +814,28 @@ public class OverlayPanel extends OverlayPanelAnimation implements ActivityState
int orientation) { int orientation) {
// Filter events that don't change the viewport width or height. // Filter events that don't change the viewport width or height.
if (height != mViewportHeight || width != mViewportWidth) { if (height != mViewportHeight || width != mViewportWidth) {
// We only care if the orientation is changing or we're shifting in/out of multi-window. // We only care if the orientation is changing or we're shifting in/out of multi-window.
// In either case the screen's viewport width or height will certainly change. // In either case the screen's viewport width or height will certainly change.
mViewportWidth = width; mViewportWidth = width;
mViewportHeight = height; mViewportHeight = height;
resizePanelContentView(width, height);
onLayoutChanged(width, height, visibleViewportOffsetY); onLayoutChanged(width, height, visibleViewportOffsetY);
resizePanelContentView();
} }
} }
/** /**
* Resize the panel's ContentView. Apply adjusted bar size to the height. * Resize the panel's ContentView. Apply adjusted bar size to the height.
* @param width The new width in dp.
* @param height The new height in dp.
*/ */
protected void resizePanelContentView(float width, float height) { protected void resizePanelContentView() {
if (!isShowing()) return; if (!isShowing()) return;
OverlayPanelContent panelContent = getOverlayPanelContent(); OverlayPanelContent panelContent = getOverlayPanelContent();
int widthPx = (int) (width / mPxToDp);
int heightPx = (int) (height / mPxToDp);
// Device could have been rotated before panel webcontent creation. Update content size. // Device could have been rotated before panel webcontent creation. Update content size.
panelContent.setContentViewSize(widthPx, heightPx, isFullWidthSizePanel()); panelContent.setContentViewSize(
getContentViewWidthPx(), getContentViewHeightPx(), isFullWidthSizePanel());
if (isFullWidthSizePanel()) heightPx = (int) ((height - getBarHeight()) / mPxToDp); panelContent.resizePanelContentView();
panelContent.onSizeChanged(widthPx, heightPx);
panelContent.onPhysicalBackingSizeChanged(widthPx, heightPx);
} }
@Override @Override
......
...@@ -365,9 +365,7 @@ public class OverlayPanelContent { ...@@ -365,9 +365,7 @@ public class OverlayPanelContent {
mNativeOverlayPanelContentPtr, mInterceptNavigationDelegate, mWebContents); mNativeOverlayPanelContentPtr, mInterceptNavigationDelegate, mWebContents);
mContentDelegate.onContentViewCreated(); mContentDelegate.onContentViewCreated();
int viewHeight = mContentViewHeight - (mSubtractBarHeight ? mBarHeightPx : 0); resizePanelContentView();
onPhysicalBackingSizeChanged(mContentViewWidth, viewHeight);
mWebContents.setSize(mContentViewWidth, viewHeight);
mActivity.getCompositorViewHolder().addView(mContainerView, 1); mActivity.getCompositorViewHolder().addView(mContainerView, 1);
} }
...@@ -502,17 +500,13 @@ public class OverlayPanelContent { ...@@ -502,17 +500,13 @@ public class OverlayPanelContent {
return mContainerView; return mContainerView;
} }
void onSizeChanged(int width, int height) { void resizePanelContentView() {
if (getWebContents() == null) return;
getWebContents().setSize(width, height);
}
void onPhysicalBackingSizeChanged(int width, int height) {
WebContents webContents = getWebContents(); WebContents webContents = getWebContents();
if (webContents != null) { if (webContents == null) return;
nativeOnPhysicalBackingSizeChanged( int viewHeight = mContentViewHeight - (mSubtractBarHeight ? mBarHeightPx : 0);
mNativeOverlayPanelContentPtr, webContents, width, height); nativeOnPhysicalBackingSizeChanged(
} mNativeOverlayPanelContentPtr, webContents, mContentViewWidth, viewHeight);
mWebContents.setSize(mContentViewWidth, viewHeight);
} }
/** /**
......
...@@ -162,7 +162,7 @@ public class OverlayPanelEventFilterTest { ...@@ -162,7 +162,7 @@ public class OverlayPanelEventFilterTest {
} }
@Override @Override
protected void resizePanelContentView(float width, float height) {} protected void resizePanelContentView() {}
@Override @Override
protected void animatePanelTo(float height, long duration) { protected void animatePanelTo(float height, long duration) {
......
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