diff options
Diffstat (limited to 'core/java/android/view/InputEventAssigner.java')
| -rw-r--r-- | core/java/android/view/InputEventAssigner.java | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/core/java/android/view/InputEventAssigner.java b/core/java/android/view/InputEventAssigner.java index c159a127f4eb..7fac6c5e4af6 100644 --- a/core/java/android/view/InputEventAssigner.java +++ b/core/java/android/view/InputEventAssigner.java @@ -45,13 +45,13 @@ import static android.view.InputDevice.SOURCE_TOUCHSCREEN; public class InputEventAssigner { private static final String TAG = "InputEventAssigner"; private boolean mHasUnprocessedDown = false; - private int mEventId = INVALID_INPUT_EVENT_ID; + private int mDownEventId = INVALID_INPUT_EVENT_ID; /** - * Notify InputEventAssigner that the Choreographer callback has been processed. This will reset - * the 'down' state to assign the latest input event to the current frame. + * Notify InputEventAssigner that a frame has been processed. We no longer need to keep track of + * the DOWN event because a frame has already been produced for it. */ - public void onChoreographerCallback() { + public void notifyFrameProcessed() { // Mark completion of this frame. Use newest input event from now on. mHasUnprocessedDown = false; } @@ -62,31 +62,22 @@ public class InputEventAssigner { * @return the id of the input event to use for the current frame */ public int processEvent(InputEvent event) { - if (event instanceof KeyEvent) { - // We will not do any special handling for key events - return event.getId(); - } - if (event instanceof MotionEvent) { MotionEvent motionEvent = (MotionEvent) event; - final int action = motionEvent.getActionMasked(); - - if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { - mHasUnprocessedDown = false; + if (motionEvent.isFromSource(SOURCE_TOUCHSCREEN)) { + final int action = motionEvent.getActionMasked(); + if (action == MotionEvent.ACTION_DOWN) { + mHasUnprocessedDown = true; + mDownEventId = event.getId(); + } + if (mHasUnprocessedDown && action == MotionEvent.ACTION_MOVE) { + return mDownEventId; + } + if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { + mHasUnprocessedDown = false; + } } - if (motionEvent.isFromSource(SOURCE_TOUCHSCREEN) && action == MotionEvent.ACTION_DOWN) { - mHasUnprocessedDown = true; - mEventId = event.getId(); - // This will remain 'true' even if we receive a MOVE event, as long as choreographer - // hasn't invoked the 'CALLBACK_INPUT' callback. - } - // Don't update the event id if we haven't processed DOWN yet. - if (!mHasUnprocessedDown) { - mEventId = event.getId(); - } - return mEventId; } - - throw new IllegalArgumentException("Received unexpected " + event); + return event.getId(); } } |
