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 d0c951da7c477f2ad72424b826e488c551975a40..02cad9896e5a30e7b24ad2a6ffe2f4721a0fd116 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 |
| @@ -81,6 +81,7 @@ import org.chromium.content_public.browser.GestureStateListener; |
| import org.chromium.content_public.browser.WebContents; |
| import org.chromium.content_public.browser.WebContentsObserver; |
| import org.chromium.device.gamepad.GamepadList; |
| +import org.chromium.ui.base.DIPScaleListener; |
| import org.chromium.ui.base.DeviceFormFactor; |
| import org.chromium.ui.base.ViewAndroidDelegate; |
| import org.chromium.ui.base.WindowAndroid; |
| @@ -101,9 +102,9 @@ import java.util.Map; |
| * being tied to the view system. |
| */ |
| @JNINamespace("content") |
| -public class ContentViewCore implements AccessibilityStateChangeListener, ScreenOrientationObserver, |
| - SystemCaptioningBridge.SystemCaptioningBridgeListener, |
| - WindowAndroidProvider { |
| +public class ContentViewCore |
| + implements AccessibilityStateChangeListener, ScreenOrientationObserver, DIPScaleListener, |
| + SystemCaptioningBridge.SystemCaptioningBridgeListener, WindowAndroidProvider { |
| private static final String TAG = "cr_ContentViewCore"; |
| // Used to avoid enabling zooming in / out if resulting zooming will |
| @@ -659,7 +660,7 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| setContainerViewInternals(internalDispatcher); |
| mRenderCoordinates.reset(); |
| - mRenderCoordinates.setDeviceScaleFactor(getDisplayContext(windowAndroid)); |
| + onDIPScaleChanged(windowAndroid.getDIPScale()); |
| initPopupZoomer(mContext); |
| mImeAdapter = createImeAdapter(); |
| @@ -674,6 +675,11 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| * @param windowAndroid The new {@link WindowAndroid} for this {@link ContentViewCore}. |
| */ |
| public void updateWindowAndroid(WindowAndroid windowAndroid) { |
| + if (windowAndroid == null) { |
|
boliu
2016/09/14 04:35:32
this check seems wrong
Tima Vaisburd
2016/09/15 00:05:03
Thank you, I see now. Removed this check.
|
| + WindowAndroid oldWindowAndroid = getWindowAndroid(); |
| + if (oldWindowAndroid != null) oldWindowAndroid.removeDIPScaleListener(this); |
| + } |
| + |
| long windowNativePointer = windowAndroid == null ? 0 : windowAndroid.getNativePointer(); |
| nativeUpdateWindowAndroid(mNativeContentViewCore, windowNativePointer); |
| @@ -682,11 +688,11 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| mSelectPopup = null; |
| mPastePopupMenu = null; |
| - mRenderCoordinates.setDeviceScaleFactor(getDisplayContext(windowAndroid)); |
| - |
| for (WindowAndroidChangedObserver observer : mWindowAndroidChangedObservers) { |
| observer.onWindowAndroidChanged(windowAndroid); |
| } |
| + |
| + if (windowAndroid != null) windowAndroid.addDIPScaleListener(this); |
|
boliu
2016/09/14 04:35:32
do this above the observer call
Tima Vaisburd
2016/09/15 00:05:03
Done.
|
| } |
| /** |
| @@ -1361,6 +1367,11 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| mAccessibilityManager.addAccessibilityStateChangeListener(this); |
| mSystemCaptioningBridge.addListener(this); |
| mImeAdapter.onViewAttachedToWindow(); |
| + |
| + WindowAndroid windowAndroid = getWindowAndroid(); |
| + if (windowAndroid != null) { |
| + windowAndroid.addDIPScaleListener(this); |
| + } |
| } |
| /** |
| @@ -1386,6 +1397,11 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| @SuppressWarnings("javadoc") |
| @SuppressLint("MissingSuperCall") |
| public void onDetachedFromWindow() { |
| + WindowAndroid windowAndroid = getWindowAndroid(); |
| + if (windowAndroid != null) { |
| + windowAndroid.removeDIPScaleListener(this); |
| + } |
| + |
| mImeAdapter.onViewDetachedFromWindow(); |
| mZoomControlsDelegate.dismissZoomPicker(); |
| @@ -3246,6 +3262,23 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| sendOrientationChangeEvent(orientation); |
| } |
| + // DIPScaleObserver method implementation. |
| + @Override |
| + public void onDIPScaleChanged(float dipScale) { |
| + if (mNativeContentViewCore == 0) return; |
| + nativeSetDIPScale(mNativeContentViewCore, dipScale); |
| + |
| + mRenderCoordinates.setDeviceScaleFactor(dipScale); |
| + |
| + // The wheel scroll factor might depend on device scale factor. |
| + mRenderCoordinates.setWheelScrollFactor(getDisplayContext(getWindowAndroid())); |
| + |
| + // Force re-layout. |
| + if (mViewportWidthPix > 0 && mViewportHeightPix > 0) { |
| + nativeWasResized(mNativeContentViewCore); |
|
boliu
2016/09/14 04:35:32
why? if that's needed, then it should just be hand
Tima Vaisburd
2016/09/15 00:05:03
I thought we need to force the new layout without
|
| + } |
| + } |
| + |
| /** |
| * Set whether the ContentViewCore requires the WebContents to be fullscreen in order to lock |
| * the screen orientation. |
| @@ -3310,6 +3343,8 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
| private native void nativeSetFocus(long nativeContentViewCoreImpl, boolean focused); |
| + private native void nativeSetDIPScale(long nativeContentViewCoreImpl, float dipScale); |
| + |
| private native void nativeSendOrientationChangeEvent( |
| long nativeContentViewCoreImpl, int orientation); |