Index: ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java |
diff --git a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java |
index e8fc5b996d8de8121e26e84733b1d0dbc7f53e1d..fb87417ae8cedc746c36cc867b7c1d5302dbe663 100644 |
--- a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java |
+++ b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java |
@@ -30,10 +30,13 @@ public class ViewConfigurationHelper { |
private final Context mAppContext; |
private ViewConfiguration mViewConfiguration; |
+ private float mDensity; |
private ViewConfigurationHelper(Context context) { |
mAppContext = context.getApplicationContext(); |
mViewConfiguration = ViewConfiguration.get(mAppContext); |
+ mDensity = mAppContext.getResources().getDisplayMetrics().density; |
+ assert mDensity > 0; |
} |
private void registerListener() { |
@@ -51,18 +54,18 @@ public class ViewConfigurationHelper { |
} |
private void updateNativeViewConfigurationIfNecessary() { |
- // The ViewConfiguration will differ only if the density has changed. |
ViewConfiguration configuration = ViewConfiguration.get(mAppContext); |
- if (mViewConfiguration == configuration) return; |
+ if (mViewConfiguration == configuration) { |
+ // The density should remain the same as long as the ViewConfiguration remains the same. |
+ assert mDensity == mAppContext.getResources().getDisplayMetrics().density; |
+ return; |
+ } |
mViewConfiguration = configuration; |
- nativeUpdateSharedViewConfiguration( |
- getScaledMaximumFlingVelocity(), |
- getScaledMinimumFlingVelocity(), |
- getScaledTouchSlop(), |
- getScaledDoubleTapSlop(), |
- getScaledMinScalingSpan(), |
- getScaledMinScalingTouchMajor()); |
+ mDensity = mAppContext.getResources().getDisplayMetrics().density; |
+ assert mDensity > 0; |
+ nativeUpdateSharedViewConfiguration(getMaximumFlingVelocity(), getMinimumFlingVelocity(), |
+ getTouchSlop(), getDoubleTapSlop(), getMinScalingSpan(), getMinScalingTouchMajor()); |
} |
@CalledByNative |
@@ -86,26 +89,35 @@ public class ViewConfigurationHelper { |
} |
@CalledByNative |
- private int getScaledMaximumFlingVelocity() { |
- return mViewConfiguration.getScaledMaximumFlingVelocity(); |
+ private float getMaximumFlingVelocity() { |
+ return toDips(mViewConfiguration.getScaledMaximumFlingVelocity()); |
} |
@CalledByNative |
- private int getScaledMinimumFlingVelocity() { |
- return mViewConfiguration.getScaledMinimumFlingVelocity(); |
+ private float getMinimumFlingVelocity() { |
+ return toDips(mViewConfiguration.getScaledMinimumFlingVelocity()); |
} |
@CalledByNative |
- private int getScaledTouchSlop() { |
- return mViewConfiguration.getScaledTouchSlop(); |
+ private float getTouchSlop() { |
+ return toDips(mViewConfiguration.getScaledTouchSlop()); |
} |
@CalledByNative |
- private int getScaledDoubleTapSlop() { |
- return mViewConfiguration.getScaledDoubleTapSlop(); |
+ private float getDoubleTapSlop() { |
+ return toDips(mViewConfiguration.getScaledDoubleTapSlop()); |
} |
@CalledByNative |
+ private float getMinScalingSpan() { |
+ return toDips(getScaledMinScalingSpan()); |
+ } |
+ |
+ @CalledByNative |
+ private float getMinScalingTouchMajor() { |
+ return toDips(getScaledMinScalingTouchMajor()); |
+ } |
+ |
private int getScaledMinScalingSpan() { |
final Resources res = mAppContext.getResources(); |
int id = res.getIdentifier("config_minScalingSpan", "dimen", "android"); |
@@ -120,7 +132,6 @@ public class ViewConfigurationHelper { |
} |
} |
- @CalledByNative |
private int getScaledMinScalingTouchMajor() { |
final Resources res = mAppContext.getResources(); |
int id = res.getIdentifier("config_minScalingTouchMajor", "dimen", "android"); |
@@ -135,6 +146,13 @@ public class ViewConfigurationHelper { |
} |
} |
+ /** |
+ * @return the unscaled pixel quantity in DIPs. |
+ */ |
+ private float toDips(int pixels) { |
+ return pixels / mDensity; |
+ } |
+ |
@CalledByNative |
private static ViewConfigurationHelper createWithListener(Context context) { |
ViewConfigurationHelper viewConfigurationHelper = new ViewConfigurationHelper(context); |
@@ -142,8 +160,7 @@ public class ViewConfigurationHelper { |
return viewConfigurationHelper; |
} |
- private native void nativeUpdateSharedViewConfiguration( |
- int scaledMaximumFlingVelocity, int scaledMinimumFlingVelocity, |
- int scaledTouchSlop, int scaledDoubleTapSlop, |
- int scaledMinScalingSpan, int scaledMinScalingTouchMajor); |
+ private native void nativeUpdateSharedViewConfiguration(float maximumFlingVelocity, |
+ float minimumFlingVelocity, float touchSlop, float doubleTapSlop, float minScalingSpan, |
+ float minScalingTouchMajor); |
} |