diff options
author | 2010-08-26 17:49:26 +0900 | |
---|---|---|
committer | 2010-08-26 23:33:08 +0900 | |
commit | e83d7385abbd0b58899b8190d644a0cb8e9f2774 (patch) | |
tree | 4033afb518d060839a43529bcf57d197322c236c /java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | |
parent | dfbc5080a1b639fda448098ab080d632639591dc (diff) | |
download | latinime-e83d7385abbd0b58899b8190d644a0cb8e9f2774.tar.gz latinime-e83d7385abbd0b58899b8190d644a0cb8e9f2774.tar.xz latinime-e83d7385abbd0b58899b8190d644a0cb8e9f2774.zip |
Refactor getKeyIndexAndNearbyCodes into independent class
Bug: 2910379
Change-Id: Ib26a898ea108ee4292f9f91b6d7d10c1fc380fd1
Diffstat (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java | 75 |
1 files changed, 9 insertions, 66 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 346daa3e3..ee9b6bb69 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -43,7 +43,6 @@ import android.view.ViewGroup.LayoutParams; import android.widget.PopupWindow; import android.widget.TextView; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -143,7 +142,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener public static final int NOT_A_TOUCH_COORDINATE = -1; private static final boolean DEBUG = false; - private static final int NOT_A_KEY = -1; + static final int NOT_A_KEY = -1; private static final int[] KEY_DELETE = { Keyboard.KEYCODE_DELETE }; private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable }; @@ -184,7 +183,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener private static final int DEBOUNCE_TIME = 70; private int mVerticalCorrection; - private int mProximityThreshold; + private ProximityKeyDetector mProximityKeyDetector = new ProximityKeyDetector(); private boolean mPreviewCentered = false; private boolean mShowPreview = true; @@ -193,13 +192,10 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener private int mPopupPreviewY; private int mWindowY; - private boolean mProximityCorrectOn; - private Paint mPaint; private Rect mPadding; private int mCurrentKey = NOT_A_KEY; - private int mDownKey = NOT_A_KEY; private int mStartX; private int mStartY; @@ -227,9 +223,6 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener private static final int REPEAT_START_DELAY = 400; private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout(); - private static int MAX_NEARBY_KEYS = 12; - private int[] mDistances = new int[MAX_NEARBY_KEYS]; - // For multi-tap private int mLastSentIndex; private int mTapCount; @@ -625,6 +618,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener LatinImeLogger.onSetKeyboard(mKeyboard); List<Key> keys = mKeyboard.getKeys(); mKeys = keys.toArray(new Key[keys.size()]); + mProximityKeyDetector.setKeyboard(keyboard, mKeys); requestLayout(); // Hint to reallocate the buffer if the size changed mKeyboardChanged = true; @@ -719,14 +713,14 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener * @param enabled whether or not the proximity correction is enabled */ public void setProximityCorrectionEnabled(boolean enabled) { - mProximityCorrectOn = enabled; + mProximityKeyDetector.setProximityCorrectionEnabled(enabled); } /** * Returns true if proximity correction is enabled. */ public boolean isProximityCorrectionEnabled() { - return mProximityCorrectOn; + return mProximityKeyDetector.isProximityCorrectionEnabled(); } /** @@ -778,8 +772,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener dimensionSum += Math.min(key.width, key.height) + key.gap; } if (dimensionSum < 0 || length == 0) return; - mProximityThreshold = (int) (dimensionSum * 1.4f / length); - mProximityThreshold *= mProximityThreshold; // Square it + mProximityKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length)); final float hysteresisPixel = getContext().getResources() .getDimension(R.dimen.key_debounce_hysteresis_distance); @@ -920,54 +913,6 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener mDirtyRect.setEmpty(); } - private int getKeyIndexAndNearbyCodes(int x, int y, int[] allKeys) { - final Key[] keys = mKeys; - int primaryIndex = NOT_A_KEY; - int closestKey = NOT_A_KEY; - int closestKeyDist = mProximityThreshold + 1; - Arrays.fill(mDistances, Integer.MAX_VALUE); - int [] nearestKeyIndices = mKeyboard.getNearestKeys(x, y); - final int keyCount = nearestKeyIndices.length; - for (int i = 0; i < keyCount; i++) { - final Key key = keys[nearestKeyIndices[i]]; - int dist = 0; - boolean isInside = key.isInside(x,y); - if (isInside) { - primaryIndex = nearestKeyIndices[i]; - } - - if (((mProximityCorrectOn - && (dist = key.squaredDistanceFrom(x, y)) < mProximityThreshold) - || isInside) - && key.codes[0] > 32) { - // Find insertion point - final int nCodes = key.codes.length; - if (dist < closestKeyDist) { - closestKeyDist = dist; - closestKey = nearestKeyIndices[i]; - } - - if (allKeys == null) continue; - - for (int j = 0; j < mDistances.length; j++) { - if (mDistances[j] > dist) { - // Make space for nCodes codes - System.arraycopy(mDistances, j, mDistances, j + nCodes, - mDistances.length - j - nCodes); - System.arraycopy(allKeys, j, allKeys, j + nCodes, - allKeys.length - j - nCodes); - System.arraycopy(key.codes, 0, allKeys, j, nCodes); - Arrays.fill(mDistances, j, j + nCodes, dist); - break; - } - } - } - } - if (primaryIndex == NOT_A_KEY) { - primaryIndex = closestKey; - } - return primaryIndex; - } private void detectAndSendKey(int index, int x, int y, long eventTime) { if (index != NOT_A_KEY && index < mKeys.length) { @@ -978,9 +923,8 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener } else { int code = key.codes[0]; //TextEntryState.keyPressedAt(key, x, y); - int[] codes = new int[MAX_NEARBY_KEYS]; - Arrays.fill(codes, NOT_A_KEY); - getKeyIndexAndNearbyCodes(x, y, codes); + int[] codes = mProximityKeyDetector.newCodeArray(); + mProximityKeyDetector.getKeyIndexAndNearbyCodes(x, y, codes); // Multi-tap if (mInMultiTap) { if (mTapCount != -1) { @@ -1352,13 +1296,12 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener int touchY = (int) me.getY() + mVerticalCorrection - getPaddingTop(); final int action = me.getAction(); final long eventTime = me.getEventTime(); - int keyIndex = getKeyIndexAndNearbyCodes(touchX, touchY, null); + int keyIndex = mProximityKeyDetector.getKeyIndexAndNearbyCodes(touchX, touchY, null); switch (action) { case MotionEvent.ACTION_DOWN: mAbortKey = false; mCurrentKey = keyIndex; - mDownKey = keyIndex; mStartX = touchX; mStartY = touchY; mDebouncer.startMoveDebouncing(touchX, touchY); |