Disallow sliding key input
This feature is configurable by R.bool.config_sliding_key_input_enabled. Bug: 3294076 Change-Id: I0225a6ce19d9b911c9d9543a106ab57ee0b7de75
This commit is contained in:
parent
c59009648c
commit
67a4ecacc7
3 changed files with 29 additions and 6 deletions
|
@ -23,6 +23,7 @@
|
||||||
<bool name="config_enable_show_subtype_settings">false</bool>
|
<bool name="config_enable_show_subtype_settings">false</bool>
|
||||||
<bool name="config_enable_show_voice_key_option">false</bool>
|
<bool name="config_enable_show_voice_key_option">false</bool>
|
||||||
<bool name="config_candidate_highlight_font_color_enabled">false</bool>
|
<bool name="config_candidate_highlight_font_color_enabled">false</bool>
|
||||||
|
<bool name="config_sliding_key_input_enabled">false</bool>
|
||||||
<!-- Whether or not Popup on key press is enabled by default -->
|
<!-- Whether or not Popup on key press is enabled by default -->
|
||||||
<bool name="config_default_popup_preview">false</bool>
|
<bool name="config_default_popup_preview">false</bool>
|
||||||
<string name="config_text_size_of_language_on_spacebar">medium</string>
|
<string name="config_text_size_of_language_on_spacebar">medium</string>
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
<bool name="config_enable_show_subtype_settings">true</bool>
|
<bool name="config_enable_show_subtype_settings">true</bool>
|
||||||
<bool name="config_enable_show_voice_key_option">true</bool>
|
<bool name="config_enable_show_voice_key_option">true</bool>
|
||||||
<bool name="config_candidate_highlight_font_color_enabled">true</bool>
|
<bool name="config_candidate_highlight_font_color_enabled">true</bool>
|
||||||
|
<bool name="config_sliding_key_input_enabled">true</bool>
|
||||||
<!-- Whether or not Popup on key press is enabled by default -->
|
<!-- Whether or not Popup on key press is enabled by default -->
|
||||||
<bool name="config_default_popup_preview">true</bool>
|
<bool name="config_default_popup_preview">true</bool>
|
||||||
<integer name="config_delay_before_preview">0</integer>
|
<integer name="config_delay_before_preview">0</integer>
|
||||||
|
|
|
@ -51,6 +51,7 @@ public class PointerTracker {
|
||||||
private final KeyDetector mKeyDetector;
|
private final KeyDetector mKeyDetector;
|
||||||
private KeyboardActionListener mListener;
|
private KeyboardActionListener mListener;
|
||||||
private final boolean mHasDistinctMultitouch;
|
private final boolean mHasDistinctMultitouch;
|
||||||
|
private final boolean mConfigSlidingKeyInputEnabled;
|
||||||
|
|
||||||
private Keyboard mKeyboard;
|
private Keyboard mKeyboard;
|
||||||
private Key[] mKeys;
|
private Key[] mKeys;
|
||||||
|
@ -64,6 +65,9 @@ public class PointerTracker {
|
||||||
// true if this pointer is repeatable key
|
// true if this pointer is repeatable key
|
||||||
private boolean mIsRepeatableKey;
|
private boolean mIsRepeatableKey;
|
||||||
|
|
||||||
|
// true if sliding key is allowed.
|
||||||
|
private boolean mIsAllowedSlidingKeyInput;
|
||||||
|
|
||||||
// For multi-tap
|
// For multi-tap
|
||||||
private int mLastSentIndex;
|
private int mLastSentIndex;
|
||||||
private int mTapCount;
|
private int mTapCount;
|
||||||
|
@ -173,6 +177,7 @@ public class PointerTracker {
|
||||||
mKeyDetector = keyDetector;
|
mKeyDetector = keyDetector;
|
||||||
mKeyState = new KeyState(keyDetector);
|
mKeyState = new KeyState(keyDetector);
|
||||||
mHasDistinctMultitouch = proxy.hasDistinctMultitouch();
|
mHasDistinctMultitouch = proxy.hasDistinctMultitouch();
|
||||||
|
mConfigSlidingKeyInputEnabled = res.getBoolean(R.bool.config_sliding_key_input_enabled);
|
||||||
mDelayBeforeKeyRepeatStart = res.getInteger(R.integer.config_delay_before_key_repeat_start);
|
mDelayBeforeKeyRepeatStart = res.getInteger(R.integer.config_delay_before_key_repeat_start);
|
||||||
mLongPressKeyTimeout = res.getInteger(R.integer.config_long_press_key_timeout);
|
mLongPressKeyTimeout = res.getInteger(R.integer.config_long_press_key_timeout);
|
||||||
mLongPressShiftKeyTimeout = res.getInteger(R.integer.config_long_press_shift_key_timeout);
|
mLongPressShiftKeyTimeout = res.getInteger(R.integer.config_long_press_shift_key_timeout);
|
||||||
|
@ -277,6 +282,10 @@ public class PointerTracker {
|
||||||
if (DEBUG)
|
if (DEBUG)
|
||||||
debugLog("onDownEvent:", x, y);
|
debugLog("onDownEvent:", x, y);
|
||||||
int keyIndex = mKeyState.onDownKey(x, y, eventTime);
|
int keyIndex = mKeyState.onDownKey(x, y, eventTime);
|
||||||
|
// Sliding key is allowed when 1) enabled by configuration, 2) this pointer starts sliding
|
||||||
|
// form modifier key, or 3) this pointer is on mini-keyboard.
|
||||||
|
mIsAllowedSlidingKeyInput = mConfigSlidingKeyInputEnabled || isModifierInternal(keyIndex)
|
||||||
|
|| mKeyDetector instanceof MiniKeyboardKeyDetector;
|
||||||
mKeyAlreadyProcessed = false;
|
mKeyAlreadyProcessed = false;
|
||||||
mIsRepeatableKey = false;
|
mIsRepeatableKey = false;
|
||||||
checkMultiTap(eventTime, keyIndex);
|
checkMultiTap(eventTime, keyIndex);
|
||||||
|
@ -304,7 +313,7 @@ public class PointerTracker {
|
||||||
debugLog("onMoveEvent:", x, y);
|
debugLog("onMoveEvent:", x, y);
|
||||||
if (mKeyAlreadyProcessed)
|
if (mKeyAlreadyProcessed)
|
||||||
return;
|
return;
|
||||||
KeyState keyState = mKeyState;
|
final KeyState keyState = mKeyState;
|
||||||
final int keyIndex = keyState.onMoveKey(x, y);
|
final int keyIndex = keyState.onMoveKey(x, y);
|
||||||
final Key oldKey = getKey(keyState.getKeyIndex());
|
final Key oldKey = getKey(keyState.getKeyIndex());
|
||||||
if (isValidKeyIndex(keyIndex)) {
|
if (isValidKeyIndex(keyIndex)) {
|
||||||
|
@ -314,16 +323,28 @@ public class PointerTracker {
|
||||||
} else if (!isMinorMoveBounce(x, y, keyIndex)) {
|
} else if (!isMinorMoveBounce(x, y, keyIndex)) {
|
||||||
if (mListener != null)
|
if (mListener != null)
|
||||||
mListener.onRelease(oldKey.mCodes[0]);
|
mListener.onRelease(oldKey.mCodes[0]);
|
||||||
resetMultiTap();
|
if (mIsAllowedSlidingKeyInput) {
|
||||||
keyState.onMoveToNewKey(keyIndex, x, y);
|
resetMultiTap();
|
||||||
startLongPressTimer(keyIndex);
|
keyState.onMoveToNewKey(keyIndex, x, y);
|
||||||
|
startLongPressTimer(keyIndex);
|
||||||
|
} else {
|
||||||
|
setAlreadyProcessed();
|
||||||
|
showKeyPreviewAndUpdateKeyGraphics(NOT_A_KEY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (oldKey != null) {
|
if (oldKey != null) {
|
||||||
if (mListener != null)
|
if (mListener != null)
|
||||||
mListener.onRelease(oldKey.mCodes[0]);
|
mListener.onRelease(oldKey.mCodes[0]);
|
||||||
keyState.onMoveToNewKey(keyIndex, x ,y);
|
if (mIsAllowedSlidingKeyInput) {
|
||||||
mHandler.cancelLongPressTimers();
|
keyState.onMoveToNewKey(keyIndex, x ,y);
|
||||||
|
mHandler.cancelLongPressTimers();
|
||||||
|
} else {
|
||||||
|
setAlreadyProcessed();
|
||||||
|
showKeyPreviewAndUpdateKeyGraphics(NOT_A_KEY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
} else if (!isMinorMoveBounce(x, y, keyIndex)) {
|
} else if (!isMinorMoveBounce(x, y, keyIndex)) {
|
||||||
resetMultiTap();
|
resetMultiTap();
|
||||||
keyState.onMoveToNewKey(keyIndex, x ,y);
|
keyState.onMoveToNewKey(keyIndex, x ,y);
|
||||||
|
|
Loading…
Reference in a new issue