diff --git a/core/java/android/gesture/GestureLibrary.java b/core/java/android/gesture/GestureLibrary.java index 1cf192ec34461..9020d2bafc056 100644 --- a/core/java/android/gesture/GestureLibrary.java +++ b/core/java/android/gesture/GestureLibrary.java @@ -136,7 +136,7 @@ public class GestureLibrary { * @return a list of predictions of possible entries for a given gesture */ public ArrayList recognize(Gesture gesture) { - Instance instance = Instance.createInstance(mSequenceType, gesture, null); + Instance instance = Instance.createInstance(mSequenceType, mOrientationStyle, gesture, null); return mClassifier.classify(mSequenceType, instance.vector); } @@ -156,7 +156,7 @@ public class GestureLibrary { mNamedGestures.put(entryName, gestures); } gestures.add(gesture); - mClassifier.addInstance(Instance.createInstance(mSequenceType, gesture, entryName)); + mClassifier.addInstance(Instance.createInstance(mSequenceType, mOrientationStyle, gesture, entryName)); mChanged = true; } @@ -337,10 +337,14 @@ public class GestureLibrary { for (int j = 0; j < gestureCount; j++) { final Gesture gesture = Gesture.deserialize(in); gestures.add(gesture); - classifier.addInstance(Instance.createInstance(mSequenceType, gesture, name)); + classifier.addInstance(Instance.createInstance(mSequenceType, mOrientationStyle, gesture, name)); } namedGestures.put(name, gestures); } } + + Learner getLearner() { + return mClassifier; + } } diff --git a/core/java/android/gesture/GestureStroke.java b/core/java/android/gesture/GestureStroke.java index 0d7bc2d049d4e..90faaed6430f4 100644 --- a/core/java/android/gesture/GestureStroke.java +++ b/core/java/android/gesture/GestureStroke.java @@ -17,7 +17,6 @@ package android.gesture; import android.graphics.Canvas; -import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; @@ -147,10 +146,12 @@ public class GestureStroke { final float[] pts = GestureUtilities.temporalSampling(this, numSample); final RectF rect = boundingBox; - final Matrix matrix = new Matrix(); - matrix.setTranslate(-rect.left, -rect.top); - matrix.postScale(width / rect.width(), height / rect.height()); - matrix.mapPoints(pts); + GestureUtilities.translate(pts, -rect.left, -rect.top); + + float sx = width / rect.width(); + float sy = height / rect.height(); + float scale = sx > sy ? sy : sx; + GestureUtilities.scale(pts, scale, scale); float mX = 0; float mY = 0; diff --git a/core/java/android/gesture/GestureUtilities.java b/core/java/android/gesture/GestureUtilities.java index 4a3144c2f0b74..3e8a3c836712c 100755 --- a/core/java/android/gesture/GestureUtilities.java +++ b/core/java/android/gesture/GestureUtilities.java @@ -17,7 +17,6 @@ package android.gesture; import android.graphics.RectF; -import android.graphics.Matrix; import android.util.Log; import java.util.ArrayList; @@ -380,22 +379,17 @@ final class GestureUtilities { } static OrientedBoundingBox computeOrientedBoundingBox(float[] points, float[] centroid) { - Matrix tr = new Matrix(); - tr.setTranslate(-centroid[0], -centroid[1]); - tr.mapPoints(points); + translate(points, -centroid[0], -centroid[1]); double[][] array = computeCoVariance(points); double[] targetVector = computeOrientation(array); float angle; if (targetVector[0] == 0 && targetVector[1] == 0) { - angle = -90; + angle = (float) -Math.PI/2; } else { // -PI classify(int gestureType, float[] vector) { + ArrayList classify(int sequenceType, float[] vector) { ArrayList predictions = new ArrayList(); ArrayList instances = getInstances(); int count = instances.size(); @@ -43,7 +38,7 @@ class InstanceLearner extends Learner { continue; } double distance; - if (gestureType == GestureLibrary.SEQUENCE_SENSITIVE) { + if (sequenceType == GestureLibrary.SEQUENCE_SENSITIVE) { distance = GestureUtilities.cosineDistance(sample.vector, vector); } else { distance = GestureUtilities.squaredEuclideanDistance(sample.vector, vector);