diff options
| author | 2019-03-14 21:26:18 +0000 | |
|---|---|---|
| committer | 2019-03-14 21:26:18 +0000 | |
| commit | 5a0a5e7280f849a69c34cdb70e97a95d1fbcd026 (patch) | |
| tree | ae8398e331feb64ecbc837ba1b057970634ab6a9 | |
| parent | 67244aeac25e34cf4c201729513e561fe2af64b8 (diff) | |
| parent | 9d29030c0704f423f868aa6690243c7b60894555 (diff) | |
Merge "Only wait for animations to complete when injecting a DOWN event."
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index b973ed598cac..a6c92571bc03 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7472,13 +7472,26 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean injectInputAfterTransactionsApplied(InputEvent ev, int mode) { - waitForAnimationsToComplete(); - - synchronized (mGlobalLock) { - mWindowPlacerLocked.performSurfacePlacementIfScheduled(); + boolean shouldWaitForAnimComplete = false; + if (ev instanceof KeyEvent) { + KeyEvent keyEvent = (KeyEvent) ev; + shouldWaitForAnimComplete = keyEvent.getSource() == InputDevice.SOURCE_MOUSE + || keyEvent.getAction() == KeyEvent.ACTION_DOWN; + } else if (ev instanceof MotionEvent) { + MotionEvent motionEvent = (MotionEvent) ev; + shouldWaitForAnimComplete = motionEvent.getSource() == InputDevice.SOURCE_MOUSE + || motionEvent.getAction() == MotionEvent.ACTION_DOWN; } - new SurfaceControl.Transaction().syncInputWindows().apply(true); + if (shouldWaitForAnimComplete) { + waitForAnimationsToComplete(); + + synchronized (mGlobalLock) { + mWindowPlacerLocked.performSurfacePlacementIfScheduled(); + } + + new SurfaceControl.Transaction().syncInputWindows().apply(true); + } return LocalServices.getService(InputManagerInternal.class).injectInputEvent(ev, mode); } |