aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2014-06-09 15:18:48 +0900
committerTadashi G. Takaoka <takaoka@google.com>2014-06-09 16:32:19 +0900
commit176f803176de964cbb3715cfe033797de62aa1fe (patch)
tree2faf58ff28e8d64b0a6aebb539926cc8700c79e6 /java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
parent24fab555f93ae64040d02cf92f12e77f75d30d88 (diff)
downloadlatinime-176f803176de964cbb3715cfe033797de62aa1fe.tar.gz
latinime-176f803176de964cbb3715cfe033797de62aa1fe.tar.xz
latinime-176f803176de964cbb3715cfe033797de62aa1fe.zip
Use rectangle region to ignore hover events after long press
Bug: 15500282 Bug: 15501718 Change-Id: Ia4771198c3120a980b0a2cdd210928a4f47f5b83
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java')
-rw-r--r--java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java56
1 files changed, 47 insertions, 9 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index 4fdf5b8fa..6757a0efc 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -17,6 +17,7 @@
package com.android.inputmethod.accessibility;
import android.content.Context;
+import android.graphics.Rect;
import android.os.SystemClock;
import android.util.Log;
import android.util.SparseIntArray;
@@ -58,7 +59,8 @@ public final class MainKeyboardAccessibilityDelegate
/** The most recently set keyboard mode. */
private int mLastKeyboardMode = KEYBOARD_IS_HIDDEN;
private static final int KEYBOARD_IS_HIDDEN = -1;
- private boolean mShouldIgnoreOnRegisterHoverKey;
+ // The rectangle region to ignore hover events.
+ private final Rect mBoundsToIgnoreHoverEvent = new Rect();
private final AccessibilityLongPressTimer mAccessibilityLongPressTimer;
@@ -192,31 +194,49 @@ public final class MainKeyboardAccessibilityDelegate
@Override
protected void onRegisterHoverKey(final Key key, final MotionEvent event) {
+ final int x = key.getHitBox().centerX();
+ final int y = key.getHitBox().centerY();
if (DEBUG_HOVER) {
- Log.d(TAG, "onRegisterHoverKey: key=" + key + " ignore="
- + mShouldIgnoreOnRegisterHoverKey);
+ Log.d(TAG, "onRegisterHoverKey: key=" + key
+ + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
}
- if (!mShouldIgnoreOnRegisterHoverKey) {
- super.onRegisterHoverKey(key, event);
+ if (mBoundsToIgnoreHoverEvent.contains(x, y)) {
+ // This hover exit event points to the key that should be ignored.
+ // Clear the ignoring region to handle further hover events.
+ mBoundsToIgnoreHoverEvent.setEmpty();
+ return;
}
- mShouldIgnoreOnRegisterHoverKey = false;
+ super.onRegisterHoverKey(key, event);
}
@Override
protected void onHoverEnterTo(final Key key) {
+ final int x = key.getHitBox().centerX();
+ final int y = key.getHitBox().centerY();
if (DEBUG_HOVER) {
- Log.d(TAG, "onHoverEnterTo: key=" + key);
+ Log.d(TAG, "onHoverEnterTo: key=" + key
+ + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
}
mAccessibilityLongPressTimer.cancelLongPress();
+ if (mBoundsToIgnoreHoverEvent.contains(x, y)) {
+ return;
+ }
+ // This hover enter event points to the key that isn't in the ignoring region.
+ // Further hover events should be handled.
+ mBoundsToIgnoreHoverEvent.setEmpty();
super.onHoverEnterTo(key);
if (key.isLongPressEnabled()) {
mAccessibilityLongPressTimer.startLongPress(key);
}
}
+ @Override
protected void onHoverExitFrom(final Key key) {
+ final int x = key.getHitBox().centerX();
+ final int y = key.getHitBox().centerY();
if (DEBUG_HOVER) {
- Log.d(TAG, "onHoverExitFrom: key=" + key);
+ Log.d(TAG, "onHoverExitFrom: key=" + key
+ + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
}
mAccessibilityLongPressTimer.cancelLongPress();
super.onHoverExitFrom(key);
@@ -246,6 +266,24 @@ public final class MainKeyboardAccessibilityDelegate
// or a key invokes IME switcher dialog, we should just ignore the next
// {@link #onRegisterHoverKey(Key,MotionEvent)}. It can be determined by whether
// {@link PointerTracker} is in operation or not.
- mShouldIgnoreOnRegisterHoverKey = !tracker.isInOperation();
+ if (tracker.isInOperation()) {
+ // This long press shows a more keys keyboard and further hover events should be
+ // handled.
+ mBoundsToIgnoreHoverEvent.setEmpty();
+ return;
+ }
+ // This long press has handled at {@link MainKeyboardView#onLongPress(PointerTracker)}.
+ // We should ignore further hover events on this key.
+ mBoundsToIgnoreHoverEvent.set(key.getHitBox());
+ if (key.hasNoPanelAutoMoreKey()) {
+ // This long press has registered a code point without showing a more keys keyboard.
+ // We should talk back the code point if possible.
+ final int codePointOfNoPanelAutoMoreKey = key.getMoreKeys()[0].mCode;
+ final String text = KeyCodeDescriptionMapper.getInstance().getDescriptionForCodePoint(
+ mKeyboardView.getContext(), codePointOfNoPanelAutoMoreKey);
+ if (text != null) {
+ sendWindowStateChanged(text);
+ }
+ }
}
}