From e30c4e0bb1522f45b3bb37b54c35ee1f6a21dd4b Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Tue, 11 Sep 2012 19:15:00 +0900 Subject: [PATCH] Stabilize gesture recognition algorithm that looks for the nearest key. It relies on the order of the key array. Change-Id: I58fa71a7b330e59cd774fc208e5b6bc1a3decd2e --- java/src/com/android/inputmethod/keyboard/Key.java | 13 ++++++++++--- .../keyboard/internal/KeyboardParams.java | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 03c216474..cb120a33e 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -52,7 +52,7 @@ import java.util.Locale; /** * Class for describing the position and characteristics of a single key in the keyboard. */ -public class Key { +public class Key implements Comparable { private static final String TAG = Key.class.getSimpleName(); /** @@ -410,7 +410,7 @@ public class Key { }); } - private boolean equals(final Key o) { + private boolean equalsInternal(final Key o) { if (this == o) return true; return o.mX == mX && o.mY == mY @@ -427,6 +427,13 @@ public class Key { && o.mLabelFlags == mLabelFlags; } + @Override + public int compareTo(Key o) { + if (equalsInternal(o)) return 0; + if (mHashCode > o.mHashCode) return 1; + return -1; + } + @Override public int hashCode() { return mHashCode; @@ -434,7 +441,7 @@ public class Key { @Override public boolean equals(final Object o) { - return o instanceof Key && equals((Key)o); + return o instanceof Key && equalsInternal((Key)o); } @Override diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java index ab5d31d42..e6fe50e02 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java @@ -24,7 +24,7 @@ import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.latin.CollectionUtils; import java.util.ArrayList; -import java.util.HashSet; +import java.util.TreeSet; public class KeyboardParams { public KeyboardId mId; @@ -58,7 +58,7 @@ public class KeyboardParams { public int GRID_WIDTH; public int GRID_HEIGHT; - public final HashSet mKeys = CollectionUtils.newHashSet(); + public final TreeSet mKeys = CollectionUtils.newTreeSet(); // ordered set public final ArrayList mShiftKeys = CollectionUtils.newArrayList(); public final ArrayList mAltCodeKeysWhileTyping = CollectionUtils.newArrayList(); public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();