Loading api/current.xml +66 −0 Original line number Diff line number Diff line Loading @@ -309,6 +309,17 @@ visibility="public" > </field> <field name="CHANGE_WIFI_MULTICAST_STATE" type="java.lang.String" transient="false" volatile="false" value=""android.permission.CHANGE_WIFI_MULTICAST_STATE"" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="CHANGE_WIFI_STATE" type="java.lang.String" transient="false" Loading Loading @@ -80263,6 +80274,19 @@ <parameter name="rssiB" type="int"> </parameter> </method> <method name="createMulticastLock" return="android.net.wifi.WifiManager.MulticastLock" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="tag" type="java.lang.String"> </parameter> </method> <method name="createWifiLock" return="android.net.wifi.WifiManager.WifiLock" abstract="false" Loading Loading @@ -80755,6 +80779,48 @@ > </field> </class> <class name="WifiManager.MulticastLock" extends="java.lang.Object" abstract="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <method name="acquire" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="isHeld" return="boolean" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="release" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> </class> <class name="WifiManager.WifiLock" extends="java.lang.Object" abstract="false" core/java/android/gesture/GestureLibrary.java +3 −7 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ public class GestureLibrary { * @return a list of predictions of possible entries for a given gesture */ public ArrayList<Prediction> recognize(Gesture gesture) { Instance instance = Instance.createInstance(mSequenceType, mOrientationStyle, gesture, null); Instance instance = Instance.createInstance(mSequenceType, gesture, null); return mClassifier.classify(mSequenceType, instance.vector); } Loading @@ -156,7 +156,7 @@ public class GestureLibrary { mNamedGestures.put(entryName, gestures); } gestures.add(gesture); mClassifier.addInstance(Instance.createInstance(mSequenceType, mOrientationStyle, gesture, entryName)); mClassifier.addInstance(Instance.createInstance(mSequenceType, gesture, entryName)); mChanged = true; } Loading Loading @@ -337,14 +337,10 @@ public class GestureLibrary { for (int j = 0; j < gestureCount; j++) { final Gesture gesture = Gesture.deserialize(in); gestures.add(gesture); classifier.addInstance(Instance.createInstance(mSequenceType, mOrientationStyle, gesture, name)); classifier.addInstance(Instance.createInstance(mSequenceType, gesture, name)); } namedGestures.put(name, gestures); } } Learner getLearner() { return mClassifier; } } core/java/android/gesture/GestureStroke.java +5 −6 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.gesture; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; Loading Loading @@ -146,12 +147,10 @@ public class GestureStroke { final float[] pts = GestureUtilities.temporalSampling(this, numSample); final RectF rect = boundingBox; 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); final Matrix matrix = new Matrix(); matrix.setTranslate(-rect.left, -rect.top); matrix.postScale(width / rect.width(), height / rect.height()); matrix.mapPoints(pts); float mX = 0; float mY = 0; Loading core/java/android/gesture/GestureUtilities.java +9 −35 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.gesture; import android.graphics.RectF; import android.graphics.Matrix; import android.util.Log; import java.util.ArrayList; Loading Loading @@ -379,17 +380,22 @@ final class GestureUtilities { } static OrientedBoundingBox computeOrientedBoundingBox(float[] points, float[] centroid) { translate(points, -centroid[0], -centroid[1]); Matrix tr = new Matrix(); tr.setTranslate(-centroid[0], -centroid[1]); tr.mapPoints(points); double[][] array = computeCoVariance(points); double[] targetVector = computeOrientation(array); float angle; if (targetVector[0] == 0 && targetVector[1] == 0) { angle = (float) -Math.PI/2; angle = -90; } else { // -PI<alpha<PI angle = (float) Math.atan2(targetVector[1], targetVector[0]); rotate(points, -angle); angle = (float) (180 * angle / Math.PI); Matrix trans = new Matrix(); trans.setRotate(-angle); trans.mapPoints(points); } float minx = Float.MAX_VALUE; Loading Loading @@ -440,36 +446,4 @@ final class GestureUtilities { } return targetVector; } static float[] rotate(float[] points, double angle) { double cos = Math.cos(angle); double sin = Math.sin(angle); int size = points.length; for (int i = 0; i < size; i += 2) { float x = (float) (points[i] * cos - points[i + 1] * sin); float y = (float) (points[i] * sin + points[i + 1] * cos); points[i] = x; points[i + 1] = y; } return points; } static float[] translate(float[] points, float dx, float dy) { int size = points.length; for (int i = 0; i < size; i += 2) { points[i] += dx; points[i + 1] += dy; } return points; } static float[] scale(float[] points, float sx, float sy) { int size = points.length; for (int i = 0; i < size; i += 2) { points[i] *= sx; points[i + 1] *= sy; } return points; } } core/java/android/gesture/Instance.java +17 −15 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.gesture; import android.graphics.Matrix; /** * An instance represents a sample if the label is available or a query if the Loading @@ -27,9 +28,7 @@ class Instance { private static final int PATCH_SAMPLE_SIZE = 16; private final static float[] ORIENTATIONS = { 0, (float) (Math.PI / 4), (float) (Math.PI / 2), (float) (Math.PI * 3 / 4), (float) Math.PI, -0, (float) (-Math.PI / 4), (float) (-Math.PI / 2), (float) (-Math.PI * 3 / 4), (float) -Math.PI 0, 45, 90, 135, 180, -0, -45, -90, -135, -180 }; // the feature vector Loading Loading @@ -69,11 +68,11 @@ class Instance { * @param label * @return the instance */ static Instance createInstance(int sequenceType, int orientationType, Gesture gesture, String label) { static Instance createInstance(int samplingType, Gesture gesture, String label) { float[] pts; Instance instance; if (sequenceType == GestureLibrary.SEQUENCE_SENSITIVE) { pts = temporalSampler(orientationType, gesture); if (samplingType == GestureLibrary.SEQUENCE_SENSITIVE) { pts = temporalSampler(samplingType, gesture); instance = new Instance(gesture.getID(), pts, label); instance.normalize(); } else { Loading @@ -87,14 +86,15 @@ class Instance { return GestureUtilities.spatialSampling(gesture, PATCH_SAMPLE_SIZE); } private static float[] temporalSampler(int orientationType, Gesture gesture) { private static float[] temporalSampler(int samplingType, Gesture gesture) { float[] pts = GestureUtilities.temporalSampling(gesture.getStrokes().get(0), SEQUENCE_SAMPLE_SIZE); float[] center = GestureUtilities.computeCentroid(pts); float orientation = (float) Math.atan2(pts[1] - center[1], pts[0] - center[0]); orientation *= 180 / Math.PI; float adjustment = -orientation; if (orientationType == GestureLibrary.ORIENTATION_SENSITIVE) { if (samplingType == GestureLibrary.ORIENTATION_SENSITIVE) { int count = ORIENTATIONS.length; for (int i = 0; i < count; i++) { float delta = ORIENTATIONS[i] - orientation; Loading @@ -104,8 +104,10 @@ class Instance { } } GestureUtilities.translate(pts, -center[0], -center[1]); GestureUtilities.rotate(pts, adjustment); Matrix m = new Matrix(); m.setTranslate(-center[0], -center[1]); m.postRotate(adjustment); m.mapPoints(pts); return pts; } Loading Loading
api/current.xml +66 −0 Original line number Diff line number Diff line Loading @@ -309,6 +309,17 @@ visibility="public" > </field> <field name="CHANGE_WIFI_MULTICAST_STATE" type="java.lang.String" transient="false" volatile="false" value=""android.permission.CHANGE_WIFI_MULTICAST_STATE"" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="CHANGE_WIFI_STATE" type="java.lang.String" transient="false" Loading Loading @@ -80263,6 +80274,19 @@ <parameter name="rssiB" type="int"> </parameter> </method> <method name="createMulticastLock" return="android.net.wifi.WifiManager.MulticastLock" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="tag" type="java.lang.String"> </parameter> </method> <method name="createWifiLock" return="android.net.wifi.WifiManager.WifiLock" abstract="false" Loading Loading @@ -80755,6 +80779,48 @@ > </field> </class> <class name="WifiManager.MulticastLock" extends="java.lang.Object" abstract="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <method name="acquire" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="isHeld" return="boolean" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="release" return="void" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> </class> <class name="WifiManager.WifiLock" extends="java.lang.Object" abstract="false"
core/java/android/gesture/GestureLibrary.java +3 −7 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ public class GestureLibrary { * @return a list of predictions of possible entries for a given gesture */ public ArrayList<Prediction> recognize(Gesture gesture) { Instance instance = Instance.createInstance(mSequenceType, mOrientationStyle, gesture, null); Instance instance = Instance.createInstance(mSequenceType, gesture, null); return mClassifier.classify(mSequenceType, instance.vector); } Loading @@ -156,7 +156,7 @@ public class GestureLibrary { mNamedGestures.put(entryName, gestures); } gestures.add(gesture); mClassifier.addInstance(Instance.createInstance(mSequenceType, mOrientationStyle, gesture, entryName)); mClassifier.addInstance(Instance.createInstance(mSequenceType, gesture, entryName)); mChanged = true; } Loading Loading @@ -337,14 +337,10 @@ public class GestureLibrary { for (int j = 0; j < gestureCount; j++) { final Gesture gesture = Gesture.deserialize(in); gestures.add(gesture); classifier.addInstance(Instance.createInstance(mSequenceType, mOrientationStyle, gesture, name)); classifier.addInstance(Instance.createInstance(mSequenceType, gesture, name)); } namedGestures.put(name, gestures); } } Learner getLearner() { return mClassifier; } }
core/java/android/gesture/GestureStroke.java +5 −6 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.gesture; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; Loading Loading @@ -146,12 +147,10 @@ public class GestureStroke { final float[] pts = GestureUtilities.temporalSampling(this, numSample); final RectF rect = boundingBox; 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); final Matrix matrix = new Matrix(); matrix.setTranslate(-rect.left, -rect.top); matrix.postScale(width / rect.width(), height / rect.height()); matrix.mapPoints(pts); float mX = 0; float mY = 0; Loading
core/java/android/gesture/GestureUtilities.java +9 −35 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.gesture; import android.graphics.RectF; import android.graphics.Matrix; import android.util.Log; import java.util.ArrayList; Loading Loading @@ -379,17 +380,22 @@ final class GestureUtilities { } static OrientedBoundingBox computeOrientedBoundingBox(float[] points, float[] centroid) { translate(points, -centroid[0], -centroid[1]); Matrix tr = new Matrix(); tr.setTranslate(-centroid[0], -centroid[1]); tr.mapPoints(points); double[][] array = computeCoVariance(points); double[] targetVector = computeOrientation(array); float angle; if (targetVector[0] == 0 && targetVector[1] == 0) { angle = (float) -Math.PI/2; angle = -90; } else { // -PI<alpha<PI angle = (float) Math.atan2(targetVector[1], targetVector[0]); rotate(points, -angle); angle = (float) (180 * angle / Math.PI); Matrix trans = new Matrix(); trans.setRotate(-angle); trans.mapPoints(points); } float minx = Float.MAX_VALUE; Loading Loading @@ -440,36 +446,4 @@ final class GestureUtilities { } return targetVector; } static float[] rotate(float[] points, double angle) { double cos = Math.cos(angle); double sin = Math.sin(angle); int size = points.length; for (int i = 0; i < size; i += 2) { float x = (float) (points[i] * cos - points[i + 1] * sin); float y = (float) (points[i] * sin + points[i + 1] * cos); points[i] = x; points[i + 1] = y; } return points; } static float[] translate(float[] points, float dx, float dy) { int size = points.length; for (int i = 0; i < size; i += 2) { points[i] += dx; points[i + 1] += dy; } return points; } static float[] scale(float[] points, float sx, float sy) { int size = points.length; for (int i = 0; i < size; i += 2) { points[i] *= sx; points[i + 1] *= sy; } return points; } }
core/java/android/gesture/Instance.java +17 −15 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.gesture; import android.graphics.Matrix; /** * An instance represents a sample if the label is available or a query if the Loading @@ -27,9 +28,7 @@ class Instance { private static final int PATCH_SAMPLE_SIZE = 16; private final static float[] ORIENTATIONS = { 0, (float) (Math.PI / 4), (float) (Math.PI / 2), (float) (Math.PI * 3 / 4), (float) Math.PI, -0, (float) (-Math.PI / 4), (float) (-Math.PI / 2), (float) (-Math.PI * 3 / 4), (float) -Math.PI 0, 45, 90, 135, 180, -0, -45, -90, -135, -180 }; // the feature vector Loading Loading @@ -69,11 +68,11 @@ class Instance { * @param label * @return the instance */ static Instance createInstance(int sequenceType, int orientationType, Gesture gesture, String label) { static Instance createInstance(int samplingType, Gesture gesture, String label) { float[] pts; Instance instance; if (sequenceType == GestureLibrary.SEQUENCE_SENSITIVE) { pts = temporalSampler(orientationType, gesture); if (samplingType == GestureLibrary.SEQUENCE_SENSITIVE) { pts = temporalSampler(samplingType, gesture); instance = new Instance(gesture.getID(), pts, label); instance.normalize(); } else { Loading @@ -87,14 +86,15 @@ class Instance { return GestureUtilities.spatialSampling(gesture, PATCH_SAMPLE_SIZE); } private static float[] temporalSampler(int orientationType, Gesture gesture) { private static float[] temporalSampler(int samplingType, Gesture gesture) { float[] pts = GestureUtilities.temporalSampling(gesture.getStrokes().get(0), SEQUENCE_SAMPLE_SIZE); float[] center = GestureUtilities.computeCentroid(pts); float orientation = (float) Math.atan2(pts[1] - center[1], pts[0] - center[0]); orientation *= 180 / Math.PI; float adjustment = -orientation; if (orientationType == GestureLibrary.ORIENTATION_SENSITIVE) { if (samplingType == GestureLibrary.ORIENTATION_SENSITIVE) { int count = ORIENTATIONS.length; for (int i = 0; i < count; i++) { float delta = ORIENTATIONS[i] - orientation; Loading @@ -104,8 +104,10 @@ class Instance { } } GestureUtilities.translate(pts, -center[0], -center[1]); GestureUtilities.rotate(pts, adjustment); Matrix m = new Matrix(); m.setTranslate(-center[0], -center[1]); m.postRotate(adjustment); m.mapPoints(pts); return pts; } Loading