Move simulateKeyPress method to AccessibleKeyboardViewProxy

Change-Id: Ic14ff70c7c8475983cf02dc1ba4d5a5f7769aa16
main
Tadashi G. Takaoka 2014-04-23 17:01:45 -07:00
parent 7de3d0eed7
commit f7edc6582a
2 changed files with 35 additions and 24 deletions

View File

@ -19,14 +19,12 @@ package com.android.inputmethod.accessibility;
import android.graphics.Rect; import android.graphics.Rect;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat; import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v4.view.accessibility.AccessibilityNodeProviderCompat; import android.support.v4.view.accessibility.AccessibilityNodeProviderCompat;
import android.support.v4.view.accessibility.AccessibilityRecordCompat; import android.support.v4.view.accessibility.AccessibilityRecordCompat;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
@ -236,27 +234,6 @@ public final class AccessibilityEntityProvider extends AccessibilityNodeProvider
return info; return info;
} }
/**
* Simulates a key press by injecting touch events into the keyboard view.
* This avoids the complexity of trackers and listeners within the keyboard.
*
* @param key The key to press.
*/
void simulateKeyPress(final Key key) {
final int x = key.getHitBox().centerX();
final int y = key.getHitBox().centerY();
final long downTime = SystemClock.uptimeMillis();
final MotionEvent downEvent = MotionEvent.obtain(
downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
final MotionEvent upEvent = MotionEvent.obtain(
downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);
mKeyboardView.onTouchEvent(downEvent);
mKeyboardView.onTouchEvent(upEvent);
downEvent.recycle();
upEvent.recycle();
}
@Override @Override
public boolean performAction(final int virtualViewId, final int action, public boolean performAction(final int virtualViewId, final int action,
final Bundle arguments) { final Bundle arguments) {

View File

@ -18,6 +18,7 @@ package com.android.inputmethod.accessibility;
import android.content.Context; import android.content.Context;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.os.SystemClock;
import android.support.v4.view.AccessibilityDelegateCompat; import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat; import android.support.v4.view.accessibility.AccessibilityEventCompat;
@ -241,7 +242,8 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
// Make sure we're not getting an EXIT event because the user slid // Make sure we're not getting an EXIT event because the user slid
// off the keyboard area, then force a key press. // off the keyboard area, then force a key press.
if (key != null) { if (key != null) {
getAccessibilityNodeProvider().simulateKeyPress(key); final long downTime = simulateKeyPress(key);
simulateKeyRelease(key, downTime);
} }
//$FALL-THROUGH$ //$FALL-THROUGH$
case MotionEvent.ACTION_HOVER_ENTER: case MotionEvent.ACTION_HOVER_ENTER:
@ -281,6 +283,38 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
&& (localY < (mView.getHeight() - mEdgeSlop)); && (localY < (mView.getHeight() - mEdgeSlop));
} }
/**
* Simulates a key press by injecting touch event into the keyboard view.
* This avoids the complexity of trackers and listeners within the keyboard.
*
* @param key The key to press.
*/
private long simulateKeyPress(final Key key) {
final int x = key.getHitBox().centerX();
final int y = key.getHitBox().centerY();
final long downTime = SystemClock.uptimeMillis();
final MotionEvent downEvent = MotionEvent.obtain(
downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
mView.onTouchEvent(downEvent);
downEvent.recycle();
return downTime;
}
/**
* Simulates a key release by injecting touch event into the keyboard view.
* This avoids the complexity of trackers and listeners within the keyboard.
*
* @param key The key to release.
*/
private void simulateKeyRelease(final Key key, final long downTime) {
final int x = key.getHitBox().centerX();
final int y = key.getHitBox().centerY();
final MotionEvent upEvent = MotionEvent.obtain(
downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);
mView.onTouchEvent(upEvent);
upEvent.recycle();
}
/** /**
* Simulates a transition between two {@link Key}s by sending a HOVER_EXIT on the previous key, * 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. * a HOVER_ENTER on the current key, and a HOVER_MOVE on the current key.