Index: ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java |
diff --git a/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java b/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java |
index 686946293b2db01635b583cd84e20d51ee7e7394..fa5afa79865bdf195c56c3493b6ae3c7d3e85e32 100644 |
--- a/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java |
+++ b/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java |
@@ -34,6 +34,13 @@ public class DisplayAndroid { |
* @param orientation One of Surface.ROTATION_* values. |
*/ |
void onRotationChanged(int rotation); |
+ |
+ /** |
+ * Called whenever the screen density changes. |
+ * |
+ * @param screen density, aka Density Independent Pixel scale. |
+ */ |
+ void onDIPScaleChanged(float dipScale); |
} |
private static final String TAG = "DisplayAndroid"; |
@@ -190,6 +197,8 @@ public class DisplayAndroid { |
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) |
/* package */ void updateFromDisplay(Display display) { |
+ float oldDensity = mDisplayMetrics.density; |
+ |
display.getSize(mSize); |
display.getMetrics(mDisplayMetrics); |
@@ -209,6 +218,16 @@ public class DisplayAndroid { |
o.onRotationChanged(mRotation); |
} |
} |
+ |
+ // Intentional comparison of floats: we assume that if scales differ, |
+ // they differ significantly. |
+ boolean dipScaleChanged = oldDensity != mDisplayMetrics.density; |
+ if (dipScaleChanged) { |
+ DisplayAndroidObserver[] observers = getObservers(); |
+ for (DisplayAndroidObserver o : observers) { |
+ o.onDIPScaleChanged(mDisplayMetrics.density); |
+ } |
+ } |
} |
private DisplayAndroidObserver[] getObservers() { |