Fix IllegalStateException raied by monkey
Bug: 13082467 Change-Id: I9290974821d22067e7ddd60dce441b11ca533a0f
This commit is contained in:
parent
f2a6f2db3e
commit
9fd7447d6c
4 changed files with 36 additions and 33 deletions
|
@ -16,8 +16,6 @@
|
|||
|
||||
package com.android.inputmethod.keyboard;
|
||||
|
||||
import com.android.inputmethod.latin.Constants;
|
||||
|
||||
/**
|
||||
* This class handles key detection.
|
||||
*/
|
||||
|
@ -41,13 +39,15 @@ public class KeyDetector {
|
|||
* @param keyHysteresisDistanceForSlidingModifier the same parameter for sliding input that
|
||||
* starts from a modifier key such as shift and symbols key.
|
||||
*/
|
||||
public KeyDetector(float keyHysteresisDistance, float keyHysteresisDistanceForSlidingModifier) {
|
||||
public KeyDetector(final float keyHysteresisDistance,
|
||||
final float keyHysteresisDistanceForSlidingModifier) {
|
||||
mKeyHysteresisDistanceSquared = (int)(keyHysteresisDistance * keyHysteresisDistance);
|
||||
mKeyHysteresisDistanceForSlidingModifierSquared = (int)(
|
||||
keyHysteresisDistanceForSlidingModifier * keyHysteresisDistanceForSlidingModifier);
|
||||
}
|
||||
|
||||
public void setKeyboard(Keyboard keyboard, float correctionX, float correctionY) {
|
||||
public void setKeyboard(final Keyboard keyboard, final float correctionX,
|
||||
final float correctionY) {
|
||||
if (keyboard == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
@ -56,24 +56,21 @@ public class KeyDetector {
|
|||
mKeyboard = keyboard;
|
||||
}
|
||||
|
||||
public int getKeyHysteresisDistanceSquared(boolean isSlidingFromModifier) {
|
||||
public int getKeyHysteresisDistanceSquared(final boolean isSlidingFromModifier) {
|
||||
return isSlidingFromModifier
|
||||
? mKeyHysteresisDistanceForSlidingModifierSquared : mKeyHysteresisDistanceSquared;
|
||||
}
|
||||
|
||||
public int getTouchX(int x) {
|
||||
public int getTouchX(final int x) {
|
||||
return x + mCorrectionX;
|
||||
}
|
||||
|
||||
// TODO: Remove vertical correction.
|
||||
public int getTouchY(int y) {
|
||||
public int getTouchY(final int y) {
|
||||
return y + mCorrectionY;
|
||||
}
|
||||
|
||||
public Keyboard getKeyboard() {
|
||||
if (mKeyboard == null) {
|
||||
throw new IllegalStateException("keyboard isn't set");
|
||||
}
|
||||
return mKeyboard;
|
||||
}
|
||||
|
||||
|
@ -88,7 +85,7 @@ public class KeyDetector {
|
|||
* @param y The y-coordinate of a touch point
|
||||
* @return the key that the touch point hits.
|
||||
*/
|
||||
public Key detectHitKey(int x, int y) {
|
||||
public Key detectHitKey(final int x, final int y) {
|
||||
final int touchX = getTouchX(x);
|
||||
final int touchY = getTouchY(y);
|
||||
|
||||
|
@ -113,20 +110,4 @@ public class KeyDetector {
|
|||
}
|
||||
return primaryKey;
|
||||
}
|
||||
|
||||
public static String printableCode(Key key) {
|
||||
return key != null ? Constants.printableCode(key.getCode()) : "none";
|
||||
}
|
||||
|
||||
public static String printableCodes(int[] codes) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
boolean addDelimiter = false;
|
||||
for (final int code : codes) {
|
||||
if (code == Constants.NOT_A_CODE) break;
|
||||
if (addDelimiter) sb.append(", ");
|
||||
sb.append(Constants.printableCode(code));
|
||||
addDelimiter = true;
|
||||
}
|
||||
return "[" + sb + "]";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,13 +33,17 @@ public final class MoreKeysDetector extends KeyDetector {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Key detectHitKey(int x, int y) {
|
||||
public Key detectHitKey(final int x, final int y) {
|
||||
final Keyboard keyboard = getKeyboard();
|
||||
if (keyboard == null) {
|
||||
return null;
|
||||
}
|
||||
final int touchX = getTouchX(x);
|
||||
final int touchY = getTouchY(y);
|
||||
|
||||
Key nearestKey = null;
|
||||
int nearestDist = (y < 0) ? mSlideAllowanceSquareTop : mSlideAllowanceSquare;
|
||||
for (final Key key : getKeyboard().getKeys()) {
|
||||
for (final Key key : keyboard.getKeys()) {
|
||||
final int dist = key.squaredDistanceToEdge(touchX, touchY);
|
||||
if (dist < nearestDist) {
|
||||
nearestKey = key;
|
||||
|
|
|
@ -257,12 +257,15 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
|
|||
}
|
||||
|
||||
public static void setKeyDetector(final KeyDetector keyDetector) {
|
||||
final Keyboard keyboard = keyDetector.getKeyboard();
|
||||
if (keyboard == null) {
|
||||
return;
|
||||
}
|
||||
final int trackersSize = sTrackers.size();
|
||||
for (int i = 0; i < trackersSize; ++i) {
|
||||
final PointerTracker tracker = sTrackers.get(i);
|
||||
tracker.setKeyDetectorInner(keyDetector);
|
||||
}
|
||||
final Keyboard keyboard = keyDetector.getKeyboard();
|
||||
sGestureEnabler.setPasswordMode(keyboard.mId.passwordInput());
|
||||
}
|
||||
|
||||
|
@ -301,7 +304,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
|
|||
final boolean ignoreModifierKey = mIsInDraggingFinger && key.isModifier();
|
||||
if (DEBUG_LISTENER) {
|
||||
Log.d(TAG, String.format("[%d] onPress : %s%s%s%s", mPointerId,
|
||||
KeyDetector.printableCode(key),
|
||||
(key == null ? "none" : Constants.printableCode(key.getCode())),
|
||||
ignoreModifierKey ? " ignoreModifier" : "",
|
||||
key.isEnabled() ? "" : " disabled",
|
||||
repeatCount > 0 ? " repeatCount=" + repeatCount : ""));
|
||||
|
@ -402,11 +405,14 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
|
|||
|
||||
private void setKeyDetectorInner(final KeyDetector keyDetector) {
|
||||
final Keyboard keyboard = keyDetector.getKeyboard();
|
||||
if (keyboard == null) {
|
||||
return;
|
||||
}
|
||||
if (keyDetector == mKeyDetector && keyboard == mKeyboard) {
|
||||
return;
|
||||
}
|
||||
mKeyDetector = keyDetector;
|
||||
mKeyboard = keyDetector.getKeyboard();
|
||||
mKeyboard = keyboard;
|
||||
// Mark that keyboard layout has been changed.
|
||||
mKeyboardLayoutHasBeenChanged = true;
|
||||
final int keyWidth = mKeyboard.mMostCommonKeyWidth;
|
||||
|
@ -1235,7 +1241,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
|
|||
private void printTouchEvent(final String title, final int x, final int y,
|
||||
final long eventTime) {
|
||||
final Key key = mKeyDetector.detectHitKey(x, y);
|
||||
final String code = KeyDetector.printableCode(key);
|
||||
final String code = (key == null ? "none" : Constants.printableCode(key.getCode()));
|
||||
Log.d(TAG, String.format("[%d]%s%s %4d %4d %5d %s", mPointerId,
|
||||
(mIsTrackingForActionDisabled ? "-" : " "), title, x, y, eventTime, code));
|
||||
}
|
||||
|
|
|
@ -252,6 +252,18 @@ public final class Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static String printableCodes(final int[] codes) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
boolean addDelimiter = false;
|
||||
for (final int code : codes) {
|
||||
if (code == NOT_A_CODE) break;
|
||||
if (addDelimiter) sb.append(", ");
|
||||
sb.append(printableCode(code));
|
||||
addDelimiter = true;
|
||||
}
|
||||
return "[" + sb + "]";
|
||||
}
|
||||
|
||||
public static final int MAX_INT_BIT_COUNT = 32;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue