Skip to content
Snippets Groups Projects
Commit 06f66153 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

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
parent 0ff8810b
No related branches found
No related tags found
No related merge requests found
...@@ -496,6 +496,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha ...@@ -496,6 +496,10 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
} else if (isShiftLocked() && !shiftKeyState.isIgnoring() && !withSliding) { } else if (isShiftLocked() && !shiftKeyState.isIgnoring() && !withSliding) {
// Shift has been pressed without chording while caps lock state. // Shift has been pressed without chording while caps lock state.
toggleCapsLock(); 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() } else if (isShiftedOrShiftLocked() && shiftKeyState.isPressingOnShifted()
&& !withSliding) { && !withSliding) {
// Shift has been pressed without chording while shifted state. // Shift has been pressed without chording while shifted state.
......
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,6 @@
package com.android.inputmethod.keyboard; 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.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Resources; import android.content.res.Resources;
...@@ -45,11 +41,16 @@ import android.view.Gravity; ...@@ -45,11 +41,16 @@ import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.PopupWindow; import android.widget.PopupWindow;
import android.widget.TextView; 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.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.WeakHashMap; import java.util.WeakHashMap;
...@@ -193,6 +194,7 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { ...@@ -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_REPEAT_KEY = 3;
private static final int MSG_LONGPRESS_KEY = 4; private static final int MSG_LONGPRESS_KEY = 4;
private static final int MSG_LONGPRESS_SHIFT_KEY = 5; private static final int MSG_LONGPRESS_SHIFT_KEY = 5;
private static final int MSG_IGNORE_DOUBLE_TAP = 6;
private boolean mInKeyRepeat; private boolean mInKeyRepeat;
...@@ -284,6 +286,16 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { ...@@ -284,6 +286,16 @@ public class KeyboardView extends View implements PointerTracker.UIProxy {
public void cancelKeyTimers() { public void cancelKeyTimers() {
cancelKeyRepeatTimer(); cancelKeyRepeatTimer();
cancelLongPressTimers(); 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() { public void cancelAllMessages() {
...@@ -453,7 +465,12 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { ...@@ -453,7 +465,12 @@ public class KeyboardView extends View implements PointerTracker.UIProxy {
final PointerTracker tracker = getPointerTracker(id); final PointerTracker tracker = getPointerTracker(id);
// If the second down event is also on shift key. // If the second down event is also on shift key.
if (tracker.isOnShiftKey((int)secondDown.getX(), (int)secondDown.getY())) { if (tracker.isOnShiftKey((int)secondDown.getX(), (int)secondDown.getY())) {
onDoubleTapShiftKey(tracker); // 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; return true;
} }
// Otherwise these events should not be handled as double tap. // Otherwise these events should not be handled as double tap.
...@@ -472,6 +489,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { ...@@ -472,6 +489,11 @@ public class KeyboardView extends View implements PointerTracker.UIProxy {
mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval); mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval);
} }
public void startIgnoringDoubleTap() {
if (ENABLE_CAPSLOCK_BY_DOUBLETAP)
mHandler.startIgnoringDoubleTap();
}
public void setOnKeyboardActionListener(KeyboardActionListener listener) { public void setOnKeyboardActionListener(KeyboardActionListener listener) {
mKeyboardActionListener = listener; mKeyboardActionListener = listener;
for (PointerTracker tracker : mPointerTrackers) { for (PointerTracker tracker : mPointerTrackers) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment