aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
diff options
context:
space:
mode:
authoralanv <alanv@google.com>2012-05-10 11:33:31 -0700
committeralanv <alanv@google.com>2012-05-10 11:37:13 -0700
commit6662e2a40dc764d5b6a55c0e30ce650fd834afb6 (patch)
tree6f32e258b80078898310b35ceb644c6ee8d8851e /java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
parent7c23ad92fcbeb64623c7deda7c603ec6c35e11a3 (diff)
downloadlatinime-6662e2a40dc764d5b6a55c0e30ce650fd834afb6.tar.gz
latinime-6662e2a40dc764d5b6a55c0e30ce650fd834afb6.tar.xz
latinime-6662e2a40dc764d5b6a55c0e30ce650fd834afb6.zip
Implement "lift-to-type" interaction. Fix event text.
Bug: 6456970 Change-Id: Idd6b84fc7a730a1e78d9c1157e3b5f22e5d49fc4
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java')
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java30
1 files changed, 29 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index ba814e390..34817ba4e 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -23,6 +23,7 @@ import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
import com.android.inputmethod.keyboard.Key;
@@ -41,6 +42,12 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
private Key mLastHoverKey = null;
+ /**
+ * Inset in pixels to look for keys when the user's finger exits the
+ * keyboard area. See {@link ViewConfiguration#getScaledEdgeSlop()}.
+ */
+ private int mEdgeSlop;
+
public static void init(InputMethodService inputMethod) {
sInstance.initInternal(inputMethod);
}
@@ -55,6 +62,7 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
private void initInternal(InputMethodService inputMethod) {
mInputMethod = inputMethod;
+ mEdgeSlop = ViewConfiguration.get(inputMethod).getScaledEdgeSlop();
}
/**
@@ -108,8 +116,14 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
mLastHoverKey = key;
switch (event.getAction()) {
- case MotionEvent.ACTION_HOVER_ENTER:
case MotionEvent.ACTION_HOVER_EXIT:
+ // Make sure we're not getting an EXIT event because the user slid
+ // off the keyboard area, then force a key press.
+ if (pointInView(x, y)) {
+ tracker.onRegisterKey(key);
+ }
+ //$FALL-THROUGH$
+ case MotionEvent.ACTION_HOVER_ENTER:
return onHoverKey(key, event);
case MotionEvent.ACTION_HOVER_MOVE:
if (key != previousKey) {
@@ -123,6 +137,20 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
}
/**
+ * Utility method to determine whether the given point, in local
+ * coordinates, is inside the view, where the area of the view is contracted
+ * by the edge slop factor.
+ *
+ * @param localX The local x-coordinate.
+ * @param localY The local y-coordinate.
+ */
+ private boolean pointInView(int localX, int localY) {
+ return (localX >= mEdgeSlop) && (localY >= mEdgeSlop)
+ && (localX < (mView.getWidth() - mEdgeSlop))
+ && (localY < (mView.getHeight() - mEdgeSlop));
+ }
+
+ /**
* Simulates a transition between two {@link Key}s by sending a HOVER_EXIT
* on the previous key, a HOVER_ENTER on the current key, and a HOVER_MOVE
* on the current key.