diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 7e8c77e13..acc5df2e5 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -125,6 +125,8 @@
+
+
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 8e2d43e4e..1f6adffbb 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -66,6 +66,7 @@
1200
350
+ 350
false
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index ed92440ef..d52039221 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -89,6 +89,7 @@
- @integer/config_long_press_key_timeout
- @integer/config_long_press_shift_key_timeout
- @integer/config_ignore_alt_code_key_timeout
+ - @integer/config_disable_gesture_while_fast_typing_timeout
- @bool/config_show_more_keys_keyboard_at_touched_point
- @integer/config_language_on_spacebar_final_alpha
- @anim/language_on_spacebar_fadeout
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 4ed0f58e1..f5c1b7a0c 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -142,12 +142,14 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
private static final int MSG_REPEAT_KEY = 1;
private static final int MSG_LONGPRESS_KEY = 2;
private static final int MSG_DOUBLE_TAP = 3;
+ private static final int MSG_DISABLE_GESTURE_EXPIRED = 4;
private final int mKeyRepeatStartTimeout;
private final int mKeyRepeatInterval;
private final int mLongPressKeyTimeout;
private final int mLongPressShiftKeyTimeout;
private final int mIgnoreAltCodeKeyTimeout;
+ private final int mDisableGestureWhileFastTypingTimeout;
public KeyTimerHandler(final MainKeyboardView outerInstance,
final TypedArray mainKeyboardViewAttr) {
@@ -163,6 +165,8 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
R.styleable.MainKeyboardView_longPressShiftKeyTimeout, 0);
mIgnoreAltCodeKeyTimeout = mainKeyboardViewAttr.getInt(
R.styleable.MainKeyboardView_ignoreAltCodeKeyTimeout, 0);
+ mDisableGestureWhileFastTypingTimeout = mainKeyboardViewAttr.getInt(
+ R.styleable.MainKeyboardView_disableGestureWhileFastTypingTimeout, 0);
}
@Override
@@ -187,6 +191,9 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
KeyboardSwitcher.getInstance().onLongPressTimeout(msg.arg1);
}
break;
+ case MSG_DISABLE_GESTURE_EXPIRED:
+ PointerTracker.clearGestureOffWhileFastTyping();
+ break;
}
}
@@ -311,6 +318,14 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
return hasMessages(MSG_TYPING_STATE_EXPIRED);
}
+ @Override
+ public void startGestureOffWhileFastTypingTimer() {
+ removeMessages(MSG_DISABLE_GESTURE_EXPIRED);
+ PointerTracker.setGestureOffWhileFastTyping();
+ sendMessageDelayed(obtainMessage(MSG_DISABLE_GESTURE_EXPIRED),
+ mDisableGestureWhileFastTypingTimeout);
+ }
+
@Override
public void startDoubleTapTimer() {
sendMessageDelayed(obtainMessage(MSG_DOUBLE_TAP),
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index d4902ec28..89b6e7bc5 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -46,6 +46,7 @@ public class PointerTracker implements PointerTrackerQueue.Element {
private static boolean sMainDictionaryAvailable = false;
private static boolean sGestureHandlingEnabledByInputField = false;
private static boolean sGestureHandlingEnabledByUser = false;
+ private static boolean sGestureOffWhileFastTyping = false;
public interface KeyEventHandler {
/**
@@ -84,6 +85,7 @@ public class PointerTracker implements PointerTrackerQueue.Element {
public interface TimerProxy {
public void startTypingStateTimer(Key typedKey);
public boolean isTypingState();
+ public void startGestureOffWhileFastTypingTimer();
public void startKeyRepeatTimer(PointerTracker tracker);
public void startLongPressTimer(PointerTracker tracker);
public void startLongPressTimer(int code);
@@ -99,6 +101,8 @@ public class PointerTracker implements PointerTrackerQueue.Element {
@Override
public boolean isTypingState() { return false; }
@Override
+ public void startGestureOffWhileFastTypingTimer() {}
+ @Override
public void startKeyRepeatTimer(PointerTracker tracker) {}
@Override
public void startLongPressTimer(PointerTracker tracker) {}
@@ -225,6 +229,7 @@ public class PointerTracker implements PointerTrackerQueue.Element {
private static void updateGestureHandlingMode() {
sShouldHandleGesture = sMainDictionaryAvailable
+ && !sGestureOffWhileFastTyping
&& sGestureHandlingEnabledByInputField
&& sGestureHandlingEnabledByUser
&& !AccessibilityUtils.getInstance().isTouchExplorationEnabled();
@@ -241,6 +246,16 @@ public class PointerTracker implements PointerTrackerQueue.Element {
updateGestureHandlingMode();
}
+ public static void setGestureOffWhileFastTyping() {
+ sGestureOffWhileFastTyping = true;
+ updateGestureHandlingMode();
+ }
+
+ public static void clearGestureOffWhileFastTyping() {
+ sGestureOffWhileFastTyping = false;
+ updateGestureHandlingMode();
+ }
+
public static PointerTracker getPointerTracker(final int id, final KeyEventHandler handler) {
final ArrayList trackers = sTrackers;
@@ -346,8 +361,10 @@ public class PointerTracker implements PointerTrackerQueue.Element {
if (key.isEnabled() || altersCode) {
if (code == Keyboard.CODE_OUTPUT_TEXT) {
mListener.onTextInput(key.getOutputText());
+ mTimerProxy.startGestureOffWhileFastTypingTimer();
} else if (code != Keyboard.CODE_UNSPECIFIED) {
mListener.onCodeInput(code, x, y);
+ mTimerProxy.startGestureOffWhileFastTypingTimer();
}
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
index 73413f698..193c3a4ba 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStroke.java
@@ -45,7 +45,7 @@ public class GestureStroke {
private int mDetectFastMoveY;
// TODO: Move some of these to resource.
- private static final float START_GESTURE_LENGTH_THRESHOLD_RATIO_TO_KEY_WIDTH = 0.75f;
+ private static final float START_GESTURE_LENGTH_THRESHOLD_RATIO_TO_KEY_WIDTH = 0.60f;
private static final int START_GESTURE_DURATION_THRESHOLD = 70; // msec
private static final int MIN_GESTURE_RECOGNITION_TIME = 100; // msec
private static final float MIN_GESTURE_SAMPLING_RATIO_TO_KEY_WIDTH = 1.0f / 6.0f;