Release caps lock by double tap on shift key
This change is a back port from Master. Cherry-pick: Ie0cad06c7b1afac0f33af76128303517e9e7bddc Bug: 3319295 Change-Id: I4bc294161cb8bc4edfdcb1afc0c66b3812667bf3
This commit is contained in:
parent
0ff8810bff
commit
06f66153be
2 changed files with 31 additions and 5 deletions
|
@ -496,6 +496,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.
|
||||
|
|
|
@ -16,10 +16,6 @@
|
|||
|
||||
package com.android.inputmethod.keyboard;
|
||||
|
||||
import com.android.inputmethod.latin.LatinImeLogger;
|
||||
import com.android.inputmethod.latin.R;
|
||||
import com.android.inputmethod.latin.SubtypeSwitcher;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
|
@ -45,11 +41,16 @@ import android.view.Gravity;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.inputmethod.latin.LatinImeLogger;
|
||||
import com.android.inputmethod.latin.R;
|
||||
import com.android.inputmethod.latin.SubtypeSwitcher;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.WeakHashMap;
|
||||
|
@ -193,6 +194,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;
|
||||
|
||||
|
@ -284,6 +286,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() {
|
||||
|
@ -453,6 +465,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;
|
||||
}
|
||||
|
@ -472,6 +489,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…
Reference in a new issue