Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Unified Diff: ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java

Issue 2414173002: Moved FORCE_DEVICE_SCALE_FACTOR to DisplayAndroid (Closed)
Patch Set: Added log in case of invalid input Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/android/BUILD.gn ('k') | ui/android/java/src/org/chromium/ui/display/DisplaySwitches.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c2d3dd3b32a7a7f2030b3e355c57c861fbb8bd9d..075754c76eb64468255b561e9b672d44ef45acac 100644
--- a/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java
+++ b/ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java
@@ -11,6 +11,9 @@ import android.os.Build;
import android.util.DisplayMetrics;
import android.view.Display;
+import org.chromium.base.CommandLine;
+import org.chromium.base.Log;
+
import java.util.WeakHashMap;
/**
@@ -33,6 +36,8 @@ public class DisplayAndroid {
void onRotationChanged(int rotation);
}
+ private static final String TAG = "DisplayAndroid";
+
private static final DisplayAndroidObserver[] EMPTY_OBSERVER_ARRAY =
new DisplayAndroidObserver[0];
@@ -46,6 +51,37 @@ public class DisplayAndroid {
private final DisplayMetrics mDisplayMetrics;
private int mRotation;
+ // When this object exists, a positive value means that the forced DIP scale is set and
+ // the zero means it is not. The non existing object (i.e. null reference) means that
+ // the existence and value of the forced DIP scale has not yet been determined.
+ private static Float sForcedDIPScale;
+
+ private static boolean hasForcedDIPScale() {
+ if (sForcedDIPScale == null) {
+ String forcedScaleAsString = CommandLine.getInstance().getSwitchValue(
+ DisplaySwitches.FORCE_DEVICE_SCALE_FACTOR);
+ if (forcedScaleAsString == null) {
+ sForcedDIPScale = Float.valueOf(0.0f);
+ } else {
+ boolean isInvalid = false;
+ try {
+ sForcedDIPScale = Float.valueOf(forcedScaleAsString);
+ // Negative values are discarded.
+ if (sForcedDIPScale.floatValue() <= 0.0f) isInvalid = true;
+ } catch (NumberFormatException e) {
+ // Strings that do not represent numbers are discarded.
+ isInvalid = true;
+ }
+
+ if (isInvalid) {
+ Log.w(TAG, "Ignoring invalid forced DIP scale '" + forcedScaleAsString + "'");
+ sForcedDIPScale = Float.valueOf(0.0f);
+ }
+ }
+ }
+ return sForcedDIPScale.floatValue() > 0;
+ }
+
private static DisplayAndroidManager getManager() {
return DisplayAndroidManager.getInstance();
}
@@ -98,7 +134,7 @@ public class DisplayAndroid {
/**
* @return A scaling factor for the Density Independent Pixel unit.
*/
- public double getDIPScale() {
+ public float getDIPScale() {
return mDisplayMetrics.density;
}
@@ -147,6 +183,8 @@ public class DisplayAndroid {
display.getSize(mSize);
display.getMetrics(mDisplayMetrics);
+ if (hasForcedDIPScale()) mDisplayMetrics.density = sForcedDIPScale.floatValue();
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
display.getRealSize(mPhysicalSize);
}
« no previous file with comments | « ui/android/BUILD.gn ('k') | ui/android/java/src/org/chromium/ui/display/DisplaySwitches.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698