Loading java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +4 −0 Original line number Diff line number Diff line Loading @@ -492,6 +492,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha } else if (isShiftLocked() && !shiftKeyState.isIgnoring() && !withSliding) { // Shift has been pressed without chording while caps lock state. toggleCapsLock(); // To be able to turn off caps lock by "double tap" on shift key, we should ignore // the second tap of the "double tap" from now for a while because we just have // already turned off caps lock above. mInputView.startIgnoringDoubleTap(); } else if (isShiftedOrShiftLocked() && shiftKeyState.isPressingOnShifted() && !withSliding) { // Shift has been pressed without chording while shifted state. Loading java/src/com/android/inputmethod/keyboard/KeyboardView.java +23 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; Loading Loading @@ -189,6 +190,7 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { private static final int MSG_REPEAT_KEY = 3; private static final int MSG_LONGPRESS_KEY = 4; private static final int MSG_LONGPRESS_SHIFT_KEY = 5; private static final int MSG_IGNORE_DOUBLE_TAP = 6; private boolean mInKeyRepeat; Loading Loading @@ -286,6 +288,16 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { public void cancelKeyTimers() { cancelKeyRepeatTimer(); cancelLongPressTimers(); removeMessages(MSG_IGNORE_DOUBLE_TAP); } public void startIgnoringDoubleTap() { sendMessageDelayed(obtainMessage(MSG_IGNORE_DOUBLE_TAP), ViewConfiguration.getDoubleTapTimeout()); } public boolean isIgnoringDoubleTap() { return hasMessages(MSG_IGNORE_DOUBLE_TAP); } public void cancelAllMessages() { Loading Loading @@ -449,6 +461,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { final PointerTracker tracker = getPointerTracker(id); // If the second down event is also on shift key. if (tracker.isOnShiftKey((int)secondDown.getX(), (int)secondDown.getY())) { // Detected a double tap on shift key. If we are in the ignoring double tap // mode, it means we have already turned off caps lock in // {@link KeyboardSwitcher#onReleaseShift} . final boolean ignoringDoubleTap = mHandler.isIgnoringDoubleTap(); if (!ignoringDoubleTap) onDoubleTapShiftKey(tracker); return true; } Loading @@ -468,6 +485,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval); } public void startIgnoringDoubleTap() { if (ENABLE_CAPSLOCK_BY_DOUBLETAP) mHandler.startIgnoringDoubleTap(); } public void setOnKeyboardActionListener(KeyboardActionListener listener) { mKeyboardActionListener = listener; for (PointerTracker tracker : mPointerTrackers) { Loading Loading
java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +4 −0 Original line number Diff line number Diff line Loading @@ -492,6 +492,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha } else if (isShiftLocked() && !shiftKeyState.isIgnoring() && !withSliding) { // Shift has been pressed without chording while caps lock state. toggleCapsLock(); // To be able to turn off caps lock by "double tap" on shift key, we should ignore // the second tap of the "double tap" from now for a while because we just have // already turned off caps lock above. mInputView.startIgnoringDoubleTap(); } else if (isShiftedOrShiftLocked() && shiftKeyState.isPressingOnShifted() && !withSliding) { // Shift has been pressed without chording while shifted state. Loading
java/src/com/android/inputmethod/keyboard/KeyboardView.java +23 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; Loading Loading @@ -189,6 +190,7 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { private static final int MSG_REPEAT_KEY = 3; private static final int MSG_LONGPRESS_KEY = 4; private static final int MSG_LONGPRESS_SHIFT_KEY = 5; private static final int MSG_IGNORE_DOUBLE_TAP = 6; private boolean mInKeyRepeat; Loading Loading @@ -286,6 +288,16 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { public void cancelKeyTimers() { cancelKeyRepeatTimer(); cancelLongPressTimers(); removeMessages(MSG_IGNORE_DOUBLE_TAP); } public void startIgnoringDoubleTap() { sendMessageDelayed(obtainMessage(MSG_IGNORE_DOUBLE_TAP), ViewConfiguration.getDoubleTapTimeout()); } public boolean isIgnoringDoubleTap() { return hasMessages(MSG_IGNORE_DOUBLE_TAP); } public void cancelAllMessages() { Loading Loading @@ -449,6 +461,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { final PointerTracker tracker = getPointerTracker(id); // If the second down event is also on shift key. if (tracker.isOnShiftKey((int)secondDown.getX(), (int)secondDown.getY())) { // Detected a double tap on shift key. If we are in the ignoring double tap // mode, it means we have already turned off caps lock in // {@link KeyboardSwitcher#onReleaseShift} . final boolean ignoringDoubleTap = mHandler.isIgnoringDoubleTap(); if (!ignoringDoubleTap) onDoubleTapShiftKey(tracker); return true; } Loading @@ -468,6 +485,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval); } public void startIgnoringDoubleTap() { if (ENABLE_CAPSLOCK_BY_DOUBLETAP) mHandler.startIgnoringDoubleTap(); } public void setOnKeyboardActionListener(KeyboardActionListener listener) { mKeyboardActionListener = listener; for (PointerTracker tracker : mPointerTrackers) { Loading