Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
| diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
| index f3bd7259805dd3b53aa13dab667da64e6df83851..31f5a3c329b7c9500628ab622e16f770b969e22a 100644 |
| --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
| +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
| @@ -502,6 +502,7 @@ public class ContentViewCore implements |
| private int mPhysicalBackingHeightPix; |
| private int mTopControlsHeightPix; |
| private boolean mTopControlsShrinkBlinkSize; |
| + private int mViewportHeightWithoutOSKPix; |
|
bokan
2015/10/08 22:38:21
This is misleading since it implies we're excludin
ymalik
2015/10/09 01:05:25
Done.
|
| // Cached copy of all positions and scales as reported by the renderer. |
| private final RenderCoordinates mRenderCoordinates; |
| @@ -1088,6 +1089,14 @@ public class ContentViewCore implements |
| } |
| /** |
| + * @return Viewport height without the OSK in physical pixels as set from onSizeChanged. |
| + */ |
| + @CalledByNative |
| + public int getViewportHeightWithoutOSKPix() { |
| + return mViewportHeightWithoutOSKPix; |
| + } |
| + |
| + /** |
| * @return Width of underlying physical surface. |
| */ |
| @CalledByNative |
| @@ -1619,13 +1628,44 @@ public class ContentViewCore implements |
| public void onSizeChanged(int wPix, int hPix, int owPix, int ohPix) { |
|
bokan
2015/10/08 22:38:21
It seems we might now always get an onSizeChanged:
|
| if (getViewportWidthPix() == wPix && getViewportHeightPix() == hPix) return; |
| + boolean displayRectChanged = false, triggeredByOSKShow = false; |
|
bokan
2015/10/08 22:38:21
Nit: Variable declarations should get their own li
ymalik
2015/10/09 01:05:25
Done.
|
| + if (!mFocusPreOSKViewportRect.isEmpty()) { |
| + Rect rect = new Rect(); |
| + getContainerView().getWindowVisibleDisplayFrame(rect); |
| + displayRectChanged = !rect.equals(mFocusPreOSKViewportRect); |
| + // Only assume the OSK triggered the onSizeChanged if width was preserved. |
| + triggeredByOSKShow = displayRectChanged |
| + && rect.width() == mFocusPreOSKViewportRect.width(); |
| + } |
| + |
| + // triggeredByOSKShow is true if we are resizing to show the OSK. In this case, |
| + // mViewportHeightWithoutOSK is what mViewportHeightPix was previously. Otherwise |
| + // we are either resizing to hide the OSK or the onSizeChanged is not triggered by OSK, |
| + // in which case the mViewportHeightWithoutOSK is hPix. |
|
bokan
2015/10/08 22:38:21
Comments should describe the "why?" not the "how".
ymalik
2015/10/09 01:05:25
Thanks. Done.
|
| + if (triggeredByOSKShow) { |
| + mViewportHeightWithoutOSKPix = mViewportHeightPix; |
| + } else { |
| + mViewportHeightWithoutOSKPix = hPix; |
| + } |
| + |
| mViewportWidthPix = wPix; |
| mViewportHeightPix = hPix; |
| if (mNativeContentViewCore != 0) { |
| nativeWasResized(mNativeContentViewCore); |
| } |
| - updateAfterSizeChanged(); |
| + mPopupZoomer.hide(false); |
| + |
| + // Execute a delayed form focus operation because the OSK was brought |
| + // up earlier. |
| + if (triggeredByOSKShow) { |
| + assert mWebContents != null; |
| + mWebContents.scrollFocusedEditableNodeIntoView(); |
| + } |
| + if (displayRectChanged) { |
| + cancelRequestToScrollFocusedEditableNodeIntoView(); |
| + } |
| + cancelRequestToScrollFocusedEditableNodeIntoView(); |
|
bokan
2015/10/08 22:38:21
Is this accidentally duplicated? It makes the abov
ymalik
2015/10/09 01:05:25
Most definitely an accident.
|
| } |
| /** |
| @@ -1647,27 +1687,8 @@ public class ContentViewCore implements |
| public void onOverdrawBottomHeightChanged(int overdrawHeightPix) { |
| } |
| - private void updateAfterSizeChanged() { |
| - mPopupZoomer.hide(false); |
| - |
| - // Execute a delayed form focus operation because the OSK was brought |
| - // up earlier. |
| - if (!mFocusPreOSKViewportRect.isEmpty()) { |
| - Rect rect = new Rect(); |
| - getContainerView().getWindowVisibleDisplayFrame(rect); |
| - if (!rect.equals(mFocusPreOSKViewportRect)) { |
| - // Only assume the OSK triggered the onSizeChanged if width was preserved. |
| - if (rect.width() == mFocusPreOSKViewportRect.width()) { |
| - assert mWebContents != null; |
| - mWebContents.scrollFocusedEditableNodeIntoView(); |
| - } |
| - cancelRequestToScrollFocusedEditableNodeIntoView(); |
| - } |
| - } |
| - } |
| - |
| private void cancelRequestToScrollFocusedEditableNodeIntoView() { |
| - // Zero-ing the rect will prevent |updateAfterSizeChanged()| from |
| + // Zero-ing the rect will prevent |onSizeChanged()| from |
| // issuing the delayed form focus event. |
| mFocusPreOSKViewportRect.setEmpty(); |
| } |