diff options
| author | 2019-01-24 02:33:49 +0000 | |
|---|---|---|
| committer | 2019-01-24 02:33:49 +0000 | |
| commit | 9e2eb49a786863d495aa45c53e4110cdbba2bc5c (patch) | |
| tree | 103ea2eb460d73870d432e30bde83495eb227347 | |
| parent | 15f7bb3c24d38822d67e57bc7cd5186f981a987e (diff) | |
| parent | 678024f0253e987d473c5801f19d64963656b379 (diff) | |
Merge "Fix the window can't receive input still recevied events"
| -rw-r--r-- | services/core/java/com/android/server/wm/InputMonitor.java | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 632db3842839..3c5d911903e7 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -46,7 +46,6 @@ import android.view.InputChannel; import android.view.InputEventReceiver; import android.view.InputWindowHandle; import android.view.SurfaceControl; -import android.view.animation.Animation; import com.android.server.AnimationThread; import com.android.server.policy.WindowManagerPolicy; @@ -70,8 +69,7 @@ final class InputMonitor { private boolean mDisableWallpaperTouchEvents; private final Rect mTmpRect = new Rect(); - private final UpdateInputForAllWindowsConsumer mUpdateInputForAllWindowsConsumer = - new UpdateInputForAllWindowsConsumer(); + private final UpdateInputForAllWindowsConsumer mUpdateInputForAllWindowsConsumer; private final int mDisplayId; private final DisplayContent mDisplayContent; @@ -165,6 +163,7 @@ final class InputMonitor { mDisplayId = displayId; mInputTransaction = mDisplayContent.getPendingTransaction(); mHandler = AnimationThread.getHandler(); + mUpdateInputForAllWindowsConsumer = new UpdateInputForAllWindowsConsumer(); } void onDisplayRemoved() { @@ -407,6 +406,9 @@ final class InputMonitor { boolean inDrag; WallpaperController wallpaperController; + // An invalid window handle that tells SurfaceFlinger not update the input info. + final InputWindowHandle mInvalidInputWindow = new InputWindowHandle(null, null, mDisplayId); + private void updateInputWindows(boolean inDrag) { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "updateInputWindows"); @@ -445,6 +447,10 @@ final class InputMonitor { final InputWindowHandle inputWindowHandle = w.mInputWindowHandle; if (inputChannel == null || inputWindowHandle == null || w.mRemoved || w.cantReceiveTouchInput()) { + if (w.mWinAnimator.hasSurface()) { + mInputTransaction.setInputWindowInfo( + w.mWinAnimator.mSurfaceController.mSurfaceControl, mInvalidInputWindow); + } // Skip this window because it cannot possibly receive input. return; } |