Loading core/java/android/view/ViewRoot.java +44 −19 Original line number Original line Diff line number Diff line Loading @@ -1711,6 +1711,9 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn deliverPointerEvent(event); deliverPointerEvent(event); } finally { } finally { event.recycle(); event.recycle(); if (msg.arg1 != 0) { finishInputEvent(); } if (LOCAL_LOGV || WATCH_POINTER) Log.i(TAG, "Done dispatching!"); if (LOCAL_LOGV || WATCH_POINTER) Log.i(TAG, "Done dispatching!"); } } } break; } break; Loading @@ -1720,6 +1723,9 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn deliverTrackballEvent(event); deliverTrackballEvent(event); } finally { } finally { event.recycle(); event.recycle(); if (msg.arg1 != 0) { finishInputEvent(); } } } } break; } break; case DISPATCH_APP_VISIBILITY: case DISPATCH_APP_VISIBILITY: Loading Loading @@ -1843,15 +1849,24 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } } } } private void finishKeyEvent(KeyEvent event) { private void startInputEvent(Runnable finishedCallback) { if (LOCAL_LOGV) Log.v(TAG, "Telling window manager key is finished"); if (mFinishedCallback != null) { Slog.w(TAG, "Received a new input event from the input queue but there is " + "already an unfinished input event in progress."); } mFinishedCallback = finishedCallback; } private void finishInputEvent() { if (LOCAL_LOGV) Log.v(TAG, "Telling window manager input event is finished"); if (mFinishedCallback != null) { if (mFinishedCallback != null) { mFinishedCallback.run(); mFinishedCallback.run(); mFinishedCallback = null; mFinishedCallback = null; } else { } else { Slog.w(TAG, "Attempted to tell the input queue that the current key event " Slog.w(TAG, "Attempted to tell the input queue that the current input event " + "is finished but there is no key event actually in progress."); + "is finished but there is no input event actually in progress."); } } } } Loading Loading @@ -2310,7 +2325,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn boolean handled = mView == null || mView.dispatchKeyEventPreIme(event); boolean handled = mView == null || mView.dispatchKeyEventPreIme(event); if (handled) { if (handled) { if (sendDone) { if (sendDone) { finishKeyEvent(event); finishInputEvent(); } } return; return; } } Loading Loading @@ -2340,7 +2355,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn if (!handled) { if (!handled) { deliverKeyEventToViewHierarchy(event, sendDone); deliverKeyEventToViewHierarchy(event, sendDone); } else if (sendDone) { } else if (sendDone) { finishKeyEvent(event); finishInputEvent(); } else { } else { Log.w(TAG, "handleFinishedEvent(seq=" + seq Log.w(TAG, "handleFinishedEvent(seq=" + seq + " handled=" + handled + " ev=" + event + " handled=" + handled + " ev=" + event Loading Loading @@ -2413,7 +2428,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } finally { } finally { if (sendDone) { if (sendDone) { finishKeyEvent(event); finishInputEvent(); } } // Let the exception fall through -- the looper will catch // Let the exception fall through -- the looper will catch // it and take care of the bad app for us. // it and take care of the bad app for us. Loading Loading @@ -2606,20 +2621,13 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn private final InputHandler mInputHandler = new InputHandler() { private final InputHandler mInputHandler = new InputHandler() { public void handleKey(KeyEvent event, Runnable finishedCallback) { public void handleKey(KeyEvent event, Runnable finishedCallback) { if (mFinishedCallback != null) { startInputEvent(finishedCallback); Slog.w(TAG, "Received a new key event from the input queue but there is " + "already an unfinished key event in progress."); } mFinishedCallback = finishedCallback; dispatchKey(event, true); dispatchKey(event, true); } } public void handleMotion(MotionEvent event, Runnable finishedCallback) { public void handleMotion(MotionEvent event, Runnable finishedCallback) { finishedCallback.run(); startInputEvent(finishedCallback); dispatchMotion(event, true); dispatchMotion(event); } } }; }; Loading Loading @@ -2651,26 +2659,43 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } } public void dispatchMotion(MotionEvent event) { public void dispatchMotion(MotionEvent event) { dispatchMotion(event, false); } private void dispatchMotion(MotionEvent event, boolean sendDone) { int source = event.getSource(); int source = event.getSource(); if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { dispatchPointer(event); dispatchPointer(event, sendDone); } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) { } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) { dispatchTrackball(event); dispatchTrackball(event, sendDone); } else { } else { // TODO // TODO Log.v(TAG, "Dropping unsupported motion event (unimplemented): " + event); Log.v(TAG, "Dropping unsupported motion event (unimplemented): " + event); if (sendDone) { finishInputEvent(); } } } } } public void dispatchPointer(MotionEvent event) { public void dispatchPointer(MotionEvent event) { dispatchPointer(event, false); } private void dispatchPointer(MotionEvent event, boolean sendDone) { Message msg = obtainMessage(DISPATCH_POINTER); Message msg = obtainMessage(DISPATCH_POINTER); msg.obj = event; msg.obj = event; msg.arg1 = sendDone ? 1 : 0; sendMessageAtTime(msg, event.getEventTime()); sendMessageAtTime(msg, event.getEventTime()); } } public void dispatchTrackball(MotionEvent event) { public void dispatchTrackball(MotionEvent event) { dispatchTrackball(event, false); } private void dispatchTrackball(MotionEvent event, boolean sendDone) { Message msg = obtainMessage(DISPATCH_TRACKBALL); Message msg = obtainMessage(DISPATCH_TRACKBALL); msg.obj = event; msg.obj = event; msg.arg1 = sendDone ? 1 : 0; sendMessageAtTime(msg, event.getEventTime()); sendMessageAtTime(msg, event.getEventTime()); } } Loading policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -235,10 +235,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override @Override public void handleMotion(MotionEvent event, Runnable finishedCallback) { public void handleMotion(MotionEvent event, Runnable finishedCallback) { finishedCallback.run(); finishedCallback.run(); synchronized (mLock) { synchronized (mLock) { if (mPointerLocationView != null) { mPointerLocationView.addTouchEvent(event); mPointerLocationView.addTouchEvent(event); } } } } } }; }; // The current size of the screen. // The current size of the screen. Loading Loading
core/java/android/view/ViewRoot.java +44 −19 Original line number Original line Diff line number Diff line Loading @@ -1711,6 +1711,9 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn deliverPointerEvent(event); deliverPointerEvent(event); } finally { } finally { event.recycle(); event.recycle(); if (msg.arg1 != 0) { finishInputEvent(); } if (LOCAL_LOGV || WATCH_POINTER) Log.i(TAG, "Done dispatching!"); if (LOCAL_LOGV || WATCH_POINTER) Log.i(TAG, "Done dispatching!"); } } } break; } break; Loading @@ -1720,6 +1723,9 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn deliverTrackballEvent(event); deliverTrackballEvent(event); } finally { } finally { event.recycle(); event.recycle(); if (msg.arg1 != 0) { finishInputEvent(); } } } } break; } break; case DISPATCH_APP_VISIBILITY: case DISPATCH_APP_VISIBILITY: Loading Loading @@ -1843,15 +1849,24 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } } } } private void finishKeyEvent(KeyEvent event) { private void startInputEvent(Runnable finishedCallback) { if (LOCAL_LOGV) Log.v(TAG, "Telling window manager key is finished"); if (mFinishedCallback != null) { Slog.w(TAG, "Received a new input event from the input queue but there is " + "already an unfinished input event in progress."); } mFinishedCallback = finishedCallback; } private void finishInputEvent() { if (LOCAL_LOGV) Log.v(TAG, "Telling window manager input event is finished"); if (mFinishedCallback != null) { if (mFinishedCallback != null) { mFinishedCallback.run(); mFinishedCallback.run(); mFinishedCallback = null; mFinishedCallback = null; } else { } else { Slog.w(TAG, "Attempted to tell the input queue that the current key event " Slog.w(TAG, "Attempted to tell the input queue that the current input event " + "is finished but there is no key event actually in progress."); + "is finished but there is no input event actually in progress."); } } } } Loading Loading @@ -2310,7 +2325,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn boolean handled = mView == null || mView.dispatchKeyEventPreIme(event); boolean handled = mView == null || mView.dispatchKeyEventPreIme(event); if (handled) { if (handled) { if (sendDone) { if (sendDone) { finishKeyEvent(event); finishInputEvent(); } } return; return; } } Loading Loading @@ -2340,7 +2355,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn if (!handled) { if (!handled) { deliverKeyEventToViewHierarchy(event, sendDone); deliverKeyEventToViewHierarchy(event, sendDone); } else if (sendDone) { } else if (sendDone) { finishKeyEvent(event); finishInputEvent(); } else { } else { Log.w(TAG, "handleFinishedEvent(seq=" + seq Log.w(TAG, "handleFinishedEvent(seq=" + seq + " handled=" + handled + " ev=" + event + " handled=" + handled + " ev=" + event Loading Loading @@ -2413,7 +2428,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } finally { } finally { if (sendDone) { if (sendDone) { finishKeyEvent(event); finishInputEvent(); } } // Let the exception fall through -- the looper will catch // Let the exception fall through -- the looper will catch // it and take care of the bad app for us. // it and take care of the bad app for us. Loading Loading @@ -2606,20 +2621,13 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn private final InputHandler mInputHandler = new InputHandler() { private final InputHandler mInputHandler = new InputHandler() { public void handleKey(KeyEvent event, Runnable finishedCallback) { public void handleKey(KeyEvent event, Runnable finishedCallback) { if (mFinishedCallback != null) { startInputEvent(finishedCallback); Slog.w(TAG, "Received a new key event from the input queue but there is " + "already an unfinished key event in progress."); } mFinishedCallback = finishedCallback; dispatchKey(event, true); dispatchKey(event, true); } } public void handleMotion(MotionEvent event, Runnable finishedCallback) { public void handleMotion(MotionEvent event, Runnable finishedCallback) { finishedCallback.run(); startInputEvent(finishedCallback); dispatchMotion(event, true); dispatchMotion(event); } } }; }; Loading Loading @@ -2651,26 +2659,43 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } } public void dispatchMotion(MotionEvent event) { public void dispatchMotion(MotionEvent event) { dispatchMotion(event, false); } private void dispatchMotion(MotionEvent event, boolean sendDone) { int source = event.getSource(); int source = event.getSource(); if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { dispatchPointer(event); dispatchPointer(event, sendDone); } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) { } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) { dispatchTrackball(event); dispatchTrackball(event, sendDone); } else { } else { // TODO // TODO Log.v(TAG, "Dropping unsupported motion event (unimplemented): " + event); Log.v(TAG, "Dropping unsupported motion event (unimplemented): " + event); if (sendDone) { finishInputEvent(); } } } } } public void dispatchPointer(MotionEvent event) { public void dispatchPointer(MotionEvent event) { dispatchPointer(event, false); } private void dispatchPointer(MotionEvent event, boolean sendDone) { Message msg = obtainMessage(DISPATCH_POINTER); Message msg = obtainMessage(DISPATCH_POINTER); msg.obj = event; msg.obj = event; msg.arg1 = sendDone ? 1 : 0; sendMessageAtTime(msg, event.getEventTime()); sendMessageAtTime(msg, event.getEventTime()); } } public void dispatchTrackball(MotionEvent event) { public void dispatchTrackball(MotionEvent event) { dispatchTrackball(event, false); } private void dispatchTrackball(MotionEvent event, boolean sendDone) { Message msg = obtainMessage(DISPATCH_TRACKBALL); Message msg = obtainMessage(DISPATCH_TRACKBALL); msg.obj = event; msg.obj = event; msg.arg1 = sendDone ? 1 : 0; sendMessageAtTime(msg, event.getEventTime()); sendMessageAtTime(msg, event.getEventTime()); } } Loading
policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +4 −1 Original line number Original line Diff line number Diff line Loading @@ -235,10 +235,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { @Override @Override public void handleMotion(MotionEvent event, Runnable finishedCallback) { public void handleMotion(MotionEvent event, Runnable finishedCallback) { finishedCallback.run(); finishedCallback.run(); synchronized (mLock) { synchronized (mLock) { if (mPointerLocationView != null) { mPointerLocationView.addTouchEvent(event); mPointerLocationView.addTouchEvent(event); } } } } } }; }; // The current size of the screen. // The current size of the screen. Loading