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 0702a70def1c1fdbe7bc2afb60031bec76c506cf..fe156a6540ebfafd4a7e31559cd55b2ab1c7dca6 100644 |
--- a/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java |
+++ b/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java |
@@ -36,6 +36,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"; |
@@ -249,6 +256,8 @@ public class DisplayAndroid { |
@SuppressWarnings("deprecation") |
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) |
/* package */ void updateFromDisplay(Display display) { |
+ float oldDensity = mDisplayMetrics.density; |
+ |
display.getSize(mSize); |
display.getMetrics(mDisplayMetrics); |
@@ -273,6 +282,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() { |