aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/accessibility
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility')
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibilityLongPressTimer.java4
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java70
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java15
-rw-r--r--java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java10
-rw-r--r--java/src/com/android/inputmethod/accessibility/MoreSuggestionsAccessibilityDelegate.java37
5 files changed, 50 insertions, 86 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityLongPressTimer.java b/java/src/com/android/inputmethod/accessibility/AccessibilityLongPressTimer.java
index 967cafad0..37d910edb 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityLongPressTimer.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityLongPressTimer.java
@@ -26,7 +26,7 @@ import com.android.inputmethod.latin.R;
// Handling long press timer to show a more keys keyboard.
final class AccessibilityLongPressTimer extends Handler {
public interface LongPressTimerCallback {
- public void onLongPressed(Key key);
+ public void performLongClickOn(Key key);
}
private static final int MSG_LONG_PRESS = 1;
@@ -47,7 +47,7 @@ final class AccessibilityLongPressTimer extends Handler {
switch (msg.what) {
case MSG_LONG_PRESS:
cancelLongPress();
- mCallback.onLongPressed((Key)msg.obj);
+ mCallback.performLongClickOn((Key)msg.obj);
return;
default:
super.handleMessage(msg);
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index 3925fc652..237117d10 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -17,9 +17,9 @@
package com.android.inputmethod.accessibility;
import android.content.Context;
+import android.os.SystemClock;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat;
-import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.util.Log;
import android.view.MotionEvent;
@@ -31,7 +31,6 @@ import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardView;
-import com.android.inputmethod.keyboard.PointerTracker;
/**
* This class represents a delegate that can be registered in a class that extends
@@ -51,7 +50,7 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
protected final KV mKeyboardView;
protected final KeyDetector mKeyDetector;
private Keyboard mKeyboard;
- private KeyboardAccessibilityNodeProvider mAccessibilityNodeProvider;
+ private KeyboardAccessibilityNodeProvider<KV> mAccessibilityNodeProvider;
private Key mLastHoverKey;
public static final int HOVER_EVENT_POINTER_ID = 0;
@@ -134,19 +133,20 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
* @return The accessibility node provider for the current keyboard.
*/
@Override
- public KeyboardAccessibilityNodeProvider getAccessibilityNodeProvider(final View host) {
+ public KeyboardAccessibilityNodeProvider<KV> getAccessibilityNodeProvider(final View host) {
return getAccessibilityNodeProvider();
}
/**
* @return A lazily-instantiated node provider for this view delegate.
*/
- protected KeyboardAccessibilityNodeProvider getAccessibilityNodeProvider() {
+ protected KeyboardAccessibilityNodeProvider<KV> getAccessibilityNodeProvider() {
// Instantiate the provide only when requested. Since the system
// will call this method multiple times it is a good practice to
// cache the provider instance.
if (mAccessibilityNodeProvider == null) {
- mAccessibilityNodeProvider = new KeyboardAccessibilityNodeProvider(mKeyboardView);
+ mAccessibilityNodeProvider =
+ new KeyboardAccessibilityNodeProvider<>(mKeyboardView, this);
}
return mAccessibilityNodeProvider;
}
@@ -243,57 +243,42 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
// Make sure we're not getting an EXIT event because the user slid
// off the keyboard area, then force a key press.
if (key != null) {
- onRegisterHoverKey(key, event);
+ performClickOn(key);
onHoverExitFrom(key);
}
setLastHoverKey(null);
}
/**
- * Register a key that is selected by a hover event
+ * Perform click on a key.
*
* @param key A key to be registered.
- * @param event A hover exit event that triggers key registering.
*/
- protected void onRegisterHoverKey(final Key key, final MotionEvent event) {
+ public void performClickOn(final Key key) {
if (DEBUG_HOVER) {
- Log.d(TAG, "onRegisterHoverKey: key=" + key);
+ Log.d(TAG, "performClickOn: key=" + key);
}
- simulateTouchEvent(MotionEvent.ACTION_DOWN, event);
- simulateTouchEvent(MotionEvent.ACTION_UP, event);
+ simulateTouchEvent(MotionEvent.ACTION_DOWN, key);
+ simulateTouchEvent(MotionEvent.ACTION_UP, key);
}
/**
- * Simulating a touch event by injecting a synthesized touch event into {@link PointerTracker}.
+ * Simulating a touch event by injecting a synthesized touch event into {@link KeyboardView}.
*
* @param touchAction The action of the synthesizing touch event.
- * @param hoverEvent The base hover event from that the touch event is synthesized.
+ * @param key The key that a synthesized touch event is on.
*/
- protected void simulateTouchEvent(final int touchAction, final MotionEvent hoverEvent) {
- final MotionEvent touchEvent = synthesizeTouchEvent(touchAction, hoverEvent);
- final int actionIndex = touchEvent.getActionIndex();
- final int pointerId = touchEvent.getPointerId(actionIndex);
- final PointerTracker tracker = PointerTracker.getPointerTracker(pointerId);
- tracker.processMotionEvent(touchEvent, mKeyDetector);
+ private void simulateTouchEvent(final int touchAction, final Key key) {
+ final int x = key.getHitBox().centerX();
+ final int y = key.getHitBox().centerY();
+ final long eventTime = SystemClock.uptimeMillis();
+ final MotionEvent touchEvent = MotionEvent.obtain(
+ eventTime, eventTime, touchAction, x, y, 0 /* metaState */);
+ mKeyboardView.onTouchEvent(touchEvent);
touchEvent.recycle();
}
/**
- * Synthesize a touch event from a hover event.
- *
- * @param touchAction The action of the synthesizing touch event.
- * @param hoverEvent The base hover event from that the touch event is synthesized.
- * @return The synthesized touch event of <code>touchAction</code> that has pointer information
- * of <code>event</code>.
- */
- protected static MotionEvent synthesizeTouchEvent(final int touchAction,
- final MotionEvent hoverEvent) {
- final MotionEvent touchEvent = MotionEvent.obtain(hoverEvent);
- touchEvent.setAction(touchAction);
- return touchEvent;
- }
-
- /**
* Handles a hover enter event on a key.
*
* @param key The currently hovered key.
@@ -304,7 +289,7 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
}
key.onPressed();
mKeyboardView.invalidateKey(key);
- final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+ final KeyboardAccessibilityNodeProvider<KV> provider = getAccessibilityNodeProvider();
provider.onHoverEnterTo(key);
provider.performActionForKey(key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS);
}
@@ -327,7 +312,16 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
}
key.onReleased();
mKeyboardView.invalidateKey(key);
- final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+ final KeyboardAccessibilityNodeProvider<KV> provider = getAccessibilityNodeProvider();
provider.onHoverExitFrom(key);
}
+
+ /**
+ * Perform long click on a key.
+ *
+ * @param key A key to be long pressed on.
+ */
+ public void performLongClickOn(final Key key) {
+ // A extended class should override this method to implement long press.
+ }
}
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index 61d066af5..66b0acb2f 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -47,7 +47,8 @@ import java.util.List;
* virtual views, thus conveying their logical structure.
* </p>
*/
-final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderCompat {
+final class KeyboardAccessibilityNodeProvider<KV extends KeyboardView>
+ extends AccessibilityNodeProviderCompat {
private static final String TAG = KeyboardAccessibilityNodeProvider.class.getSimpleName();
// From {@link android.view.accessibility.AccessibilityNodeInfo#UNDEFINED_ITEM_ID}.
@@ -68,17 +69,21 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
/** The virtual view identifier for the hovering node. */
private int mHoveringNodeId = UNDEFINED;
- /** The current keyboard view. */
- private final KeyboardView mKeyboardView;
+ /** The keyboard view to provide an accessibility node info. */
+ private final KV mKeyboardView;
+ /** The accessibility delegate. */
+ private final KeyboardAccessibilityDelegate<KV> mDelegate;
/** The current keyboard. */
private Keyboard mKeyboard;
- public KeyboardAccessibilityNodeProvider(final KeyboardView keyboardView) {
+ public KeyboardAccessibilityNodeProvider(final KV keyboardView,
+ final KeyboardAccessibilityDelegate<KV> delegate) {
super();
mKeyCodeDescriptionMapper = KeyCodeDescriptionMapper.getInstance();
mAccessibilityUtils = AccessibilityUtils.getInstance();
mKeyboardView = keyboardView;
+ mDelegate = delegate;
// Since this class is constructed lazily, we might not get a subsequent
// call to setKeyboard() and therefore need to call it now.
@@ -287,9 +292,11 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
return true;
case AccessibilityNodeInfoCompat.ACTION_CLICK:
sendAccessibilityEventForKey(key, AccessibilityEvent.TYPE_VIEW_CLICKED);
+ mDelegate.performClickOn(key);
return true;
case AccessibilityNodeInfoCompat.ACTION_LONG_CLICK:
sendAccessibilityEventForKey(key, AccessibilityEvent.TYPE_VIEW_LONG_CLICKED);
+ mDelegate.performLongClickOn(key);
return true;
default:
return false;
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index 96f84dde9..b84d402fb 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -207,11 +207,11 @@ public final class MainKeyboardAccessibilityDelegate
}
@Override
- protected void onRegisterHoverKey(final Key key, final MotionEvent event) {
+ public void performClickOn(final Key key) {
final int x = key.getHitBox().centerX();
final int y = key.getHitBox().centerY();
if (DEBUG_HOVER) {
- Log.d(TAG, "onRegisterHoverKey: key=" + key
+ Log.d(TAG, "performClickOn: key=" + key
+ " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y));
}
if (mBoundsToIgnoreHoverEvent.contains(x, y)) {
@@ -220,7 +220,7 @@ public final class MainKeyboardAccessibilityDelegate
mBoundsToIgnoreHoverEvent.setEmpty();
return;
}
- super.onRegisterHoverKey(key, event);
+ super.performClickOn(key);
}
@Override
@@ -257,9 +257,9 @@ public final class MainKeyboardAccessibilityDelegate
}
@Override
- public void onLongPressed(final Key key) {
+ public void performLongClickOn(final Key key) {
if (DEBUG_HOVER) {
- Log.d(TAG, "onLongPressed: key=" + key);
+ Log.d(TAG, "performLongClickOn: key=" + key);
}
final PointerTracker tracker = PointerTracker.getPointerTracker(HOVER_EVENT_POINTER_ID);
final long eventTime = SystemClock.uptimeMillis();
diff --git a/java/src/com/android/inputmethod/accessibility/MoreSuggestionsAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MoreSuggestionsAccessibilityDelegate.java
deleted file mode 100644
index dfc866113..000000000
--- a/java/src/com/android/inputmethod/accessibility/MoreSuggestionsAccessibilityDelegate.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.accessibility;
-
-import android.view.MotionEvent;
-
-import com.android.inputmethod.keyboard.KeyDetector;
-import com.android.inputmethod.keyboard.MoreKeysKeyboardView;
-
-public final class MoreSuggestionsAccessibilityDelegate
- extends MoreKeysKeyboardAccessibilityDelegate {
- public MoreSuggestionsAccessibilityDelegate(final MoreKeysKeyboardView moreKeysKeyboardView,
- final KeyDetector keyDetector) {
- super(moreKeysKeyboardView, keyDetector);
- }
-
- @Override
- protected void simulateTouchEvent(final int touchAction, final MotionEvent hoverEvent) {
- final MotionEvent touchEvent = synthesizeTouchEvent(touchAction, hoverEvent);
- mKeyboardView.onTouchEvent(touchEvent);
- touchEvent.recycle();
- }
-}