diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java
index bcb8800621e15..7d896809de646 100644
--- a/core/java/android/view/ScaleGestureDetector.java
+++ b/core/java/android/view/ScaleGestureDetector.java
@@ -137,6 +137,7 @@ public class ScaleGestureDetector {
private long mPrevTime;
private boolean mInProgress;
private int mSpanSlop;
+ private int mMinSpan;
/**
* Consistency verifier for debugging purposes.
@@ -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);
}
/**
@@ -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;
@@ -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;
@@ -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;
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 7895489257798..c97c2140704ae 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -925,4 +925,10 @@
1
+
+
+ 25mm
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index adeced7b95c50..d4e82b5b616aa 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1112,6 +1112,8 @@
+
+