aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardView.java2
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java1
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java21
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java10
-rw-r--r--java/src/com/android/inputmethod/latin/ResizableIntArray.java28
5 files changed, 40 insertions, 22 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index fb98af3e6..b05cc70b7 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -94,7 +94,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
// The maximum key label width in the proportion to the key width.
private static final float MAX_LABEL_RATIO = 0.90f;
- private final static int ALPHA_OPAQUE = 255;
+ public final static int ALPHA_OPAQUE = 255;
// Main keyboard
private Keyboard mKeyboard;
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 1eae2c1d4..36d3664de 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -80,7 +80,6 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
// Stuff to draw language name on spacebar.
private final int mLanguageOnSpacebarFinalAlpha;
private ObjectAnimator mLanguageOnSpacebarFadeoutAnimator;
- private static final int ALPHA_OPAQUE = 255;
private boolean mNeedsToDisplayLanguage;
private boolean mHasMultipleEnabledIMEsOrSubtypes;
private int mLanguageOnSpacebarAnimAlpha = ALPHA_OPAQUE;
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index ea4d93a4a..b002ae992 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -121,6 +121,8 @@ public class PointerTracker {
private static boolean sConfigGestureInputEnabledByBuildConfig;
private static final ArrayList<PointerTracker> sTrackers = new ArrayList<PointerTracker>();
+ private static final InputPointers sAggregratedPointers = new InputPointers(
+ GestureStroke.DEFAULT_CAPACITY);
private static PointerTrackerQueue sPointerTrackerQueue;
// HACK: Change gesture detection criteria depending on this variable.
// TODO: Find more comprehensive ways to detect a gesture start.
@@ -257,23 +259,19 @@ public class PointerTracker {
// TODO: To handle multi-touch gestures we may want to move this method to
// {@link PointerTrackerQueue}.
private static InputPointers getIncrementalBatchPoints() {
- // TODO: Avoid creating a new instance here?
- final InputPointers pointers = new InputPointers(GestureStroke.DEFAULT_CAPACITY);
for (final PointerTracker tracker : sTrackers) {
- tracker.mGestureStroke.appendIncrementalBatchPoints(pointers);
+ tracker.mGestureStroke.appendIncrementalBatchPoints(sAggregratedPointers);
}
- return pointers;
+ return sAggregratedPointers;
}
// TODO: To handle multi-touch gestures we may want to move this method to
// {@link PointerTrackerQueue}.
private static InputPointers getAllBatchPoints() {
- // TODO: Avoid creating a new instance here?
- final InputPointers pointers = new InputPointers(GestureStroke.DEFAULT_CAPACITY);
for (final PointerTracker tracker : sTrackers) {
- tracker.mGestureStroke.appendAllBatchPoints(pointers);
+ tracker.mGestureStroke.appendAllBatchPoints(sAggregratedPointers);
}
- return pointers;
+ return sAggregratedPointers;
}
// TODO: To handle multi-touch gestures we may want to move this method to
@@ -282,6 +280,7 @@ public class PointerTracker {
for (final PointerTracker tracker : sTrackers) {
tracker.mGestureStroke.reset();
}
+ sAggregratedPointers.reset();
}
private PointerTracker(int id, KeyEventHandler handler) {
@@ -645,6 +644,8 @@ public class PointerTracker {
if (sIsGestureEnabled && mIsAlphabetKeyboard && key != null
&& Keyboard.isLetterCode(key.mCode)) {
mIsPossibleGesture = true;
+ // TODO: pointer times should be relative to first down even in entire batch input
+ // instead of resetting to 0 for each new down event.
mGestureStroke.addPoint(x, y, 0, false);
}
}
@@ -869,7 +870,9 @@ public class PointerTracker {
}
return;
}
-
+ // This event will be recognized as a regular code input. Clear unused batch points so they
+ // are not mistakenly included in the next batch event.
+ clearBatchInputPointsOfAllPointerTrackers();
if (mKeyAlreadyProcessed)
return;
if (mCurrentKey != null && !mCurrentKey.isRepeatable()) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
index 6f392f145..16c8410df 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
@@ -27,6 +27,7 @@ public class GestureStroke {
private float mLength;
private float mAngle;
private int mIncrementalRecognitionSize;
+ private int mLastIncrementalBatchSize;
private long mLastPointTime;
private int mLastPointX;
private int mLastPointY;
@@ -73,6 +74,7 @@ public class GestureStroke {
mLength = 0;
mAngle = 0;
mIncrementalRecognitionSize = 0;
+ mLastIncrementalBatchSize = 0;
mLastPointTime = 0;
mInputPointers.reset();
}
@@ -126,11 +128,15 @@ public class GestureStroke {
}
public void appendAllBatchPoints(final InputPointers out) {
- out.append(mInputPointers, 0, mInputPointers.getPointerSize());
+ final int size = mInputPointers.getPointerSize();
+ out.append(mInputPointers, mLastIncrementalBatchSize, size - mLastIncrementalBatchSize);
+ mLastIncrementalBatchSize = size;
}
public void appendIncrementalBatchPoints(final InputPointers out) {
- out.append(mInputPointers, 0, mIncrementalRecognitionSize);
+ out.append(mInputPointers, mLastIncrementalBatchSize,
+ mIncrementalRecognitionSize - mLastIncrementalBatchSize);
+ mLastIncrementalBatchSize = mIncrementalRecognitionSize;
}
private static float getDistance(final int p1x, final int p1y,
diff --git a/java/src/com/android/inputmethod/latin/ResizableIntArray.java b/java/src/com/android/inputmethod/latin/ResizableIntArray.java
index 2079c0e99..6feae9c5a 100644
--- a/java/src/com/android/inputmethod/latin/ResizableIntArray.java
+++ b/java/src/com/android/inputmethod/latin/ResizableIntArray.java
@@ -23,11 +23,18 @@ public class ResizableIntArray {
private int[] mArray;
private int mLength;
- public ResizableIntArray(int capacity) {
+ public ResizableIntArray(final int capacity) {
reset(capacity);
}
- public void add(int index, int val) {
+ public int get(final int index) {
+ if (index < 0 || index >= mLength) {
+ throw new ArrayIndexOutOfBoundsException("length=" + mLength + "; index=" + index);
+ }
+ return mArray[index];
+ }
+
+ public void add(final int index, final int val) {
if (mLength < index + 1) {
mLength = index;
add(val);
@@ -36,14 +43,14 @@ public class ResizableIntArray {
}
}
- public void add(int val) {
+ public void add(final int val) {
final int nextLength = mLength + 1;
ensureCapacity(nextLength);
mArray[mLength] = val;
mLength = nextLength;
}
- private void ensureCapacity(int minimumCapacity) {
+ private void ensureCapacity(final int minimumCapacity) {
if (mArray.length < minimumCapacity) {
final int nextCapacity = mArray.length * 2;
// The following is the same as newLength =
@@ -60,9 +67,12 @@ public class ResizableIntArray {
return mLength;
}
- // TODO: Implement setLength(int).
+ public void setLength(final int newLength) {
+ ensureCapacity(newLength);
+ mLength = newLength;
+ }
- public void reset(int capacity) {
+ public void reset(final int capacity) {
// TODO: Implement primitive array pool.
mArray = new int[capacity];
mLength = 0;
@@ -72,20 +82,20 @@ public class ResizableIntArray {
return mArray;
}
- public void set(ResizableIntArray ip) {
+ public void set(final ResizableIntArray ip) {
// TODO: Implement primitive array pool.
mArray = ip.mArray;
mLength = ip.mLength;
}
- public void copy(ResizableIntArray ip) {
+ public void copy(final ResizableIntArray ip) {
// TODO: Avoid useless coping of values.
ensureCapacity(ip.mLength);
System.arraycopy(ip.mArray, 0, mArray, 0, ip.mLength);
mLength = ip.mLength;
}
- public void append(ResizableIntArray src, int startPos, int length) {
+ public void append(final ResizableIntArray src, final int startPos, final int length) {
final int currentLength = mLength;
final int newLength = currentLength + length;
ensureCapacity(newLength);