From 7ed2d03fdbc9388ec02183383d87415263edb6d5 Mon Sep 17 00:00:00 2001 From: Arthur Hung Date: Thu, 12 Aug 2021 13:19:35 +0000 Subject: [PATCH] Fix flaky test WindowInputTestsi#testTrustedOverlapWindow When disabling batching input, we should post the action to consume batched events to prevent it would be handled before current event. Bug: 189241600 Test: atest WindowInputTests --rerun-until-failure Change-Id: I87aaa2574a27368f88df1aba3f2eb769a8e8f36b (cherry picked from commit a0ef47223c83a344e04c5c57828eeb05ae242592) --- .../android/view/BatchedInputEventReceiver.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/BatchedInputEventReceiver.java b/core/java/android/view/BatchedInputEventReceiver.java index 7023e4bd0134a..1ed12f74ba2c2 100644 --- a/core/java/android/view/BatchedInputEventReceiver.java +++ b/core/java/android/view/BatchedInputEventReceiver.java @@ -17,6 +17,7 @@ package android.view; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Handler; import android.os.Looper; /** @@ -27,6 +28,13 @@ public class BatchedInputEventReceiver extends InputEventReceiver { private Choreographer mChoreographer; private boolean mBatchingEnabled; private boolean mBatchedInputScheduled; + private final Handler mHandler; + private final Runnable mConsumeBatchedInputEvents = new Runnable() { + @Override + public void run() { + consumeBatchedInputEvents(-1); + } + }; @UnsupportedAppUsage public BatchedInputEventReceiver( @@ -34,6 +42,7 @@ public class BatchedInputEventReceiver extends InputEventReceiver { super(inputChannel, looper); mChoreographer = choreographer; mBatchingEnabled = true; + mHandler = new Handler(looper); } @Override @@ -57,10 +66,15 @@ public class BatchedInputEventReceiver extends InputEventReceiver { * @hide */ public void setBatchingEnabled(boolean batchingEnabled) { + if (mBatchingEnabled == batchingEnabled) { + return; + } + mBatchingEnabled = batchingEnabled; + mHandler.removeCallbacks(mConsumeBatchedInputEvents); if (!batchingEnabled) { unscheduleBatchedInput(); - consumeBatchedInputEvents(-1); + mHandler.post(mConsumeBatchedInputEvents); } }