Merge "Process input events immediately when received."

This commit is contained in:
Jeff Brown
2012-02-13 10:26:40 -08:00
committed by Android (Google) Code Review

View File

@@ -2631,7 +2631,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
break; break;
case DISPATCH_KEY: { case DISPATCH_KEY: {
KeyEvent event = (KeyEvent)msg.obj; KeyEvent event = (KeyEvent)msg.obj;
enqueueInputEvent(event, null, 0); enqueueInputEvent(event, null, 0, true);
} break; } break;
case DISPATCH_KEY_FROM_IME: { case DISPATCH_KEY_FROM_IME: {
if (LOCAL_LOGV) Log.v( if (LOCAL_LOGV) Log.v(
@@ -2644,7 +2644,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
//noinspection UnusedAssignment //noinspection UnusedAssignment
event = KeyEvent.changeFlags(event, event.getFlags() & ~KeyEvent.FLAG_FROM_SYSTEM); event = KeyEvent.changeFlags(event, event.getFlags() & ~KeyEvent.FLAG_FROM_SYSTEM);
} }
enqueueInputEvent(event, null, QueuedInputEvent.FLAG_DELIVER_POST_IME); enqueueInputEvent(event, null, QueuedInputEvent.FLAG_DELIVER_POST_IME, true);
} break; } break;
case FINISH_INPUT_CONNECTION: { case FINISH_INPUT_CONNECTION: {
InputMethodManager imm = InputMethodManager.peekInstance(); InputMethodManager imm = InputMethodManager.peekInstance();
@@ -2947,7 +2947,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN:
x.reset(2); x.reset(2);
y.reset(2); y.reset(2);
dispatchKey(new KeyEvent(curTime, curTime, enqueueInputEvent(new KeyEvent(curTime, curTime,
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER, 0, metaState, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER, 0, metaState,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK,
InputDevice.SOURCE_KEYBOARD)); InputDevice.SOURCE_KEYBOARD));
@@ -2955,7 +2955,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP:
x.reset(2); x.reset(2);
y.reset(2); y.reset(2);
dispatchKey(new KeyEvent(curTime, curTime, enqueueInputEvent(new KeyEvent(curTime, curTime,
KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER, 0, metaState, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER, 0, metaState,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK,
InputDevice.SOURCE_KEYBOARD)); InputDevice.SOURCE_KEYBOARD));
@@ -3009,7 +3009,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
+ keycode); + keycode);
movement--; movement--;
int repeatCount = accelMovement - movement; int repeatCount = accelMovement - movement;
dispatchKey(new KeyEvent(curTime, curTime, enqueueInputEvent(new KeyEvent(curTime, curTime,
KeyEvent.ACTION_MULTIPLE, keycode, repeatCount, metaState, KeyEvent.ACTION_MULTIPLE, keycode, repeatCount, metaState,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK,
InputDevice.SOURCE_KEYBOARD)); InputDevice.SOURCE_KEYBOARD));
@@ -3019,11 +3019,11 @@ public final class ViewRootImpl extends Handler implements ViewParent,
+ keycode); + keycode);
movement--; movement--;
curTime = SystemClock.uptimeMillis(); curTime = SystemClock.uptimeMillis();
dispatchKey(new KeyEvent(curTime, curTime, enqueueInputEvent(new KeyEvent(curTime, curTime,
KeyEvent.ACTION_DOWN, keycode, 0, metaState, KeyEvent.ACTION_DOWN, keycode, 0, metaState,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK,
InputDevice.SOURCE_KEYBOARD)); InputDevice.SOURCE_KEYBOARD));
dispatchKey(new KeyEvent(curTime, curTime, enqueueInputEvent(new KeyEvent(curTime, curTime,
KeyEvent.ACTION_UP, keycode, 0, metaState, KeyEvent.ACTION_UP, keycode, 0, metaState,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FALLBACK,
InputDevice.SOURCE_KEYBOARD)); InputDevice.SOURCE_KEYBOARD));
@@ -3090,7 +3090,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
if (xDirection != mLastJoystickXDirection) { if (xDirection != mLastJoystickXDirection) {
if (mLastJoystickXKeyCode != 0) { if (mLastJoystickXKeyCode != 0) {
dispatchKey(new KeyEvent(time, time, enqueueInputEvent(new KeyEvent(time, time,
KeyEvent.ACTION_UP, mLastJoystickXKeyCode, 0, metaState, KeyEvent.ACTION_UP, mLastJoystickXKeyCode, 0, metaState,
deviceId, 0, KeyEvent.FLAG_FALLBACK, source)); deviceId, 0, KeyEvent.FLAG_FALLBACK, source));
mLastJoystickXKeyCode = 0; mLastJoystickXKeyCode = 0;
@@ -3101,7 +3101,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
if (xDirection != 0 && synthesizeNewKeys) { if (xDirection != 0 && synthesizeNewKeys) {
mLastJoystickXKeyCode = xDirection > 0 mLastJoystickXKeyCode = xDirection > 0
? KeyEvent.KEYCODE_DPAD_RIGHT : KeyEvent.KEYCODE_DPAD_LEFT; ? KeyEvent.KEYCODE_DPAD_RIGHT : KeyEvent.KEYCODE_DPAD_LEFT;
dispatchKey(new KeyEvent(time, time, enqueueInputEvent(new KeyEvent(time, time,
KeyEvent.ACTION_DOWN, mLastJoystickXKeyCode, 0, metaState, KeyEvent.ACTION_DOWN, mLastJoystickXKeyCode, 0, metaState,
deviceId, 0, KeyEvent.FLAG_FALLBACK, source)); deviceId, 0, KeyEvent.FLAG_FALLBACK, source));
} }
@@ -3109,7 +3109,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
if (yDirection != mLastJoystickYDirection) { if (yDirection != mLastJoystickYDirection) {
if (mLastJoystickYKeyCode != 0) { if (mLastJoystickYKeyCode != 0) {
dispatchKey(new KeyEvent(time, time, enqueueInputEvent(new KeyEvent(time, time,
KeyEvent.ACTION_UP, mLastJoystickYKeyCode, 0, metaState, KeyEvent.ACTION_UP, mLastJoystickYKeyCode, 0, metaState,
deviceId, 0, KeyEvent.FLAG_FALLBACK, source)); deviceId, 0, KeyEvent.FLAG_FALLBACK, source));
mLastJoystickYKeyCode = 0; mLastJoystickYKeyCode = 0;
@@ -3120,7 +3120,7 @@ public final class ViewRootImpl extends Handler implements ViewParent,
if (yDirection != 0 && synthesizeNewKeys) { if (yDirection != 0 && synthesizeNewKeys) {
mLastJoystickYKeyCode = yDirection > 0 mLastJoystickYKeyCode = yDirection > 0
? KeyEvent.KEYCODE_DPAD_DOWN : KeyEvent.KEYCODE_DPAD_UP; ? KeyEvent.KEYCODE_DPAD_DOWN : KeyEvent.KEYCODE_DPAD_UP;
dispatchKey(new KeyEvent(time, time, enqueueInputEvent(new KeyEvent(time, time,
KeyEvent.ACTION_DOWN, mLastJoystickYKeyCode, 0, metaState, KeyEvent.ACTION_DOWN, mLastJoystickYKeyCode, 0, metaState,
deviceId, 0, KeyEvent.FLAG_FALLBACK, source)); deviceId, 0, KeyEvent.FLAG_FALLBACK, source));
} }
@@ -3805,8 +3805,12 @@ public final class ViewRootImpl extends Handler implements ViewParent,
} }
} }
void enqueueInputEvent(InputEvent event) {
enqueueInputEvent(event, null, 0, false);
}
void enqueueInputEvent(InputEvent event, void enqueueInputEvent(InputEvent event,
InputEventReceiver receiver, int flags) { InputEventReceiver receiver, int flags, boolean processImmediately) {
QueuedInputEvent q = obtainQueuedInputEvent(event, receiver, flags); QueuedInputEvent q = obtainQueuedInputEvent(event, receiver, flags);
if (ViewDebug.DEBUG_LATENCY) { if (ViewDebug.DEBUG_LATENCY) {
@@ -3830,7 +3834,11 @@ public final class ViewRootImpl extends Handler implements ViewParent,
last.mNext = q; last.mNext = q;
} }
scheduleProcessInputEvents(); if (processImmediately) {
doProcessInputEvents();
} else {
scheduleProcessInputEvents();
}
} }
private void scheduleProcessInputEvents() { private void scheduleProcessInputEvents() {
@@ -3919,13 +3927,14 @@ public final class ViewRootImpl extends Handler implements ViewParent,
@Override @Override
public void onInputEvent(InputEvent event) { public void onInputEvent(InputEvent event) {
enqueueInputEvent(event, this, 0); enqueueInputEvent(event, this, 0, true);
} }
} }
WindowInputEventReceiver mInputEventReceiver; WindowInputEventReceiver mInputEventReceiver;
public void dispatchKey(KeyEvent event) { public void dispatchKey(KeyEvent event) {
enqueueInputEvent(event, null, 0); Message msg = obtainMessage(DISPATCH_KEY, event);
sendMessage(msg);
} }
public void dispatchAppVisibility(boolean visible) { public void dispatchAppVisibility(boolean visible) {