summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java23
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);
}