Loading core/java/android/view/ScaleGestureDetector.java +11 −4 Original line number Diff line number Diff line Loading @@ -137,6 +137,7 @@ public class ScaleGestureDetector { private long mPrevTime; private boolean mInProgress; private int mSpanSlop; private int mMinSpan; /** * Consistency verifier for debugging purposes. Loading @@ -149,6 +150,8 @@ public class ScaleGestureDetector { mContext = context; mListener = listener; mSpanSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2; mMinSpan = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.config_minScalingSpan); } /** Loading Loading @@ -209,8 +212,12 @@ public class ScaleGestureDetector { float devSumX = 0, devSumY = 0; for (int i = 0; i < count; i++) { if (skipIndex == i) continue; devSumX += Math.abs(event.getX(i) - focusX); devSumY += Math.abs(event.getY(i) - focusY); // touchMajor/Minor are axes of an ellipse; average them together and // convert the resulting 'diameter' into a radius. final float touchSize = (event.getTouchMajor(i) + event.getTouchMinor(i)) / 4; devSumX += Math.abs(event.getX(i) - focusX) + touchSize; devSumY += Math.abs(event.getY(i) - focusY) + touchSize; } final float devX = devSumX / div; final float devY = devSumY / div; Loading @@ -228,7 +235,7 @@ public class ScaleGestureDetector { final boolean wasInProgress = mInProgress; mFocusX = focusX; mFocusY = focusY; if (mInProgress && (span == 0 || configChanged)) { if (mInProgress && (span < mMinSpan || configChanged)) { mListener.onScaleEnd(this); mInProgress = false; mInitialSpan = span; Loading @@ -238,7 +245,7 @@ public class ScaleGestureDetector { mPrevSpanY = mCurrSpanY = spanY; mInitialSpan = mPrevSpan = mCurrSpan = span; } if (!mInProgress && span != 0 && if (!mInProgress && span > mMinSpan && (wasInProgress || Math.abs(span - mInitialSpan) > mSpanSlop)) { mPrevSpanX = mCurrSpanX = spanX; mPrevSpanY = mCurrSpanY = spanY; Loading core/res/res/values/config.xml +6 −0 Original line number Diff line number Diff line Loading @@ -925,4 +925,10 @@ <!-- Maximum number of supported users --> <integer name="config_multiuserMaximumUsers">1</integer> <!-- Minimum span needed to begin a touch scaling gesture. This also takes into account the size of any active touch points. Devices with screens that deviate too far from their assigned density bucket should consider tuning this value in a device-specific overlay. --> <dimen name="config_minScalingSpan">25mm</dimen> </resources> core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1112,6 +1112,8 @@ <java-symbol type="layout" name="media_route_list_item_collapse_group" /> <java-symbol type="string" name="bluetooth_a2dp_audio_route_name" /> <java-symbol type="dimen" name="config_minScalingSpan" /> <!-- From android.policy --> <java-symbol type="anim" name="app_starting_exit" /> <java-symbol type="anim" name="lock_screen_behind_enter" /> Loading Loading
core/java/android/view/ScaleGestureDetector.java +11 −4 Original line number Diff line number Diff line Loading @@ -137,6 +137,7 @@ public class ScaleGestureDetector { private long mPrevTime; private boolean mInProgress; private int mSpanSlop; private int mMinSpan; /** * Consistency verifier for debugging purposes. Loading @@ -149,6 +150,8 @@ public class ScaleGestureDetector { mContext = context; mListener = listener; mSpanSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2; mMinSpan = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.config_minScalingSpan); } /** Loading Loading @@ -209,8 +212,12 @@ public class ScaleGestureDetector { float devSumX = 0, devSumY = 0; for (int i = 0; i < count; i++) { if (skipIndex == i) continue; devSumX += Math.abs(event.getX(i) - focusX); devSumY += Math.abs(event.getY(i) - focusY); // touchMajor/Minor are axes of an ellipse; average them together and // convert the resulting 'diameter' into a radius. final float touchSize = (event.getTouchMajor(i) + event.getTouchMinor(i)) / 4; devSumX += Math.abs(event.getX(i) - focusX) + touchSize; devSumY += Math.abs(event.getY(i) - focusY) + touchSize; } final float devX = devSumX / div; final float devY = devSumY / div; Loading @@ -228,7 +235,7 @@ public class ScaleGestureDetector { final boolean wasInProgress = mInProgress; mFocusX = focusX; mFocusY = focusY; if (mInProgress && (span == 0 || configChanged)) { if (mInProgress && (span < mMinSpan || configChanged)) { mListener.onScaleEnd(this); mInProgress = false; mInitialSpan = span; Loading @@ -238,7 +245,7 @@ public class ScaleGestureDetector { mPrevSpanY = mCurrSpanY = spanY; mInitialSpan = mPrevSpan = mCurrSpan = span; } if (!mInProgress && span != 0 && if (!mInProgress && span > mMinSpan && (wasInProgress || Math.abs(span - mInitialSpan) > mSpanSlop)) { mPrevSpanX = mCurrSpanX = spanX; mPrevSpanY = mCurrSpanY = spanY; Loading
core/res/res/values/config.xml +6 −0 Original line number Diff line number Diff line Loading @@ -925,4 +925,10 @@ <!-- Maximum number of supported users --> <integer name="config_multiuserMaximumUsers">1</integer> <!-- Minimum span needed to begin a touch scaling gesture. This also takes into account the size of any active touch points. Devices with screens that deviate too far from their assigned density bucket should consider tuning this value in a device-specific overlay. --> <dimen name="config_minScalingSpan">25mm</dimen> </resources>
core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1112,6 +1112,8 @@ <java-symbol type="layout" name="media_route_list_item_collapse_group" /> <java-symbol type="string" name="bluetooth_a2dp_audio_route_name" /> <java-symbol type="dimen" name="config_minScalingSpan" /> <!-- From android.policy --> <java-symbol type="anim" name="app_starting_exit" /> <java-symbol type="anim" name="lock_screen_behind_enter" /> Loading