From efcf043ff92f68e1441d2597e6f9ae7c63f3d7ab Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 9 Apr 2021 18:24:06 -0400 Subject: Delay gesture processing in FalsingCollector. Clicks are processed after a delay on views. To handle this, we can't immediately analyze gestures in the FalsingManager. Instead, delay processing slightly to give click handlers an opportunity to acknowledge gestures. Fixes: 184963035 Test: manual Change-Id: I2c98d20c76b8fda1f53a0b4a3ec29674c32aa550 --- .../com/android/systemui/classifier/FalsingCollectorImpl.java | 9 +++++++-- .../android/systemui/classifier/FalsingCollectorImplTest.java | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java index aaea9ce98359..88748f9eaac4 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java @@ -24,10 +24,12 @@ import android.view.MotionEvent; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.time.SystemClock; @@ -50,6 +52,7 @@ class FalsingCollectorImpl implements FalsingCollector { private final ProximitySensor mProximitySensor; private final StatusBarStateController mStatusBarStateController; private final KeyguardStateController mKeyguardStateController; + private final DelayableExecutor mMainExecutor; private final SystemClock mSystemClock; private int mState; @@ -89,7 +92,8 @@ class FalsingCollectorImpl implements FalsingCollector { FalsingCollectorImpl(FalsingDataProvider falsingDataProvider, FalsingManager falsingManager, KeyguardUpdateMonitor keyguardUpdateMonitor, HistoryTracker historyTracker, ProximitySensor proximitySensor, StatusBarStateController statusBarStateController, - KeyguardStateController keyguardStateController, SystemClock systemClock) { + KeyguardStateController keyguardStateController, + @Main DelayableExecutor mainExecutor, SystemClock systemClock) { mFalsingDataProvider = falsingDataProvider; mFalsingManager = falsingManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; @@ -97,6 +101,7 @@ class FalsingCollectorImpl implements FalsingCollector { mProximitySensor = proximitySensor; mStatusBarStateController = statusBarStateController; mKeyguardStateController = keyguardStateController; + mMainExecutor = mainExecutor; mSystemClock = systemClock; @@ -276,7 +281,7 @@ class FalsingCollectorImpl implements FalsingCollector { @Override public void onMotionEventComplete() { - mFalsingDataProvider.onMotionEventComplete(); + mMainExecutor.executeDelayed(mFalsingDataProvider::onMotionEventComplete , 50); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java index e6aeee7a9184..f077190168be 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java @@ -35,6 +35,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.time.FakeSystemClock; @@ -65,6 +66,8 @@ public class FalsingCollectorImplTest extends SysuiTestCase { private SysuiStatusBarStateController mStatusBarStateController; @Mock private KeyguardStateController mKeyguardStateController; + private final FakeSystemClock mFakeSystemClock = new FakeSystemClock(); + private final FakeExecutor mFakeExecutor = new FakeExecutor(mFakeSystemClock); @Before public void setUp() { @@ -75,7 +78,8 @@ public class FalsingCollectorImplTest extends SysuiTestCase { mFalsingCollector = new FalsingCollectorImpl(mFalsingDataProvider, mFalsingManager, mKeyguardUpdateMonitor, mHistoryTracker, mProximitySensor, - mStatusBarStateController, mKeyguardStateController, new FakeSystemClock()); + mStatusBarStateController, mKeyguardStateController, mFakeExecutor, + mFakeSystemClock); } @Test -- cgit v1.2.3-59-g8ed1b