From be8667d9deb74d628263fee537acfaf17b2af16c Mon Sep 17 00:00:00 2001 From: Michael Mikhail Date: Thu, 13 Oct 2022 21:22:45 +0000 Subject: [PATCH] Check False tap within False touch in SeekBar This CL checks for false tap if the interaction type is MEDIA_SEEKBAR. It makes sure that SeekBar is protected from any false interactions. Bug: 241487855 Test: atest BrightLineClassifierTest. Test: atest SeekBarViewModelTest. Change-Id: I3525f549ac07c833ab5a73a04a2b0d8d42a37fda --- .../classifier/BrightLineFalsingManager.java | 6 ++++ .../systemui/media/SeekBarViewModel.kt | 7 +---- .../classifier/BrightLineClassifierTest.java | 29 +++++++++++++++++++ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java index d53e56f7b852d..500f280044292 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java @@ -18,6 +18,7 @@ package com.android.systemui.classifier; import static com.android.systemui.classifier.Classifier.BACK_GESTURE; import static com.android.systemui.classifier.Classifier.GENERIC; +import static com.android.systemui.classifier.Classifier.MEDIA_SEEKBAR; import static com.android.systemui.classifier.FalsingManagerProxy.FALSING_SUCCESS; import static com.android.systemui.classifier.FalsingModule.BRIGHT_LINE_GESTURE_CLASSIFERS; @@ -220,6 +221,11 @@ public class BrightLineFalsingManager implements FalsingManager { return r; }).collect(Collectors.toList()); + // check for false tap if it is a seekbar interaction + if (interactionType == MEDIA_SEEKBAR) { + localResult[0] &= isFalseTap(LOW_PENALTY); + } + logDebug("False Gesture (type: " + interactionType + "): " + localResult[0]); return localResult[0]; diff --git a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt index 17ebfecdd1fa8..0f78a1e2ff50a 100644 --- a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt @@ -33,7 +33,6 @@ import androidx.lifecycle.MutableLiveData import com.android.systemui.classifier.Classifier.MEDIA_SEEKBAR import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.plugins.FalsingManager -import com.android.systemui.plugins.FalsingManager.LOW_PENALTY import com.android.systemui.statusbar.NotificationMediaManager import com.android.systemui.util.concurrency.RepeatableExecutor import javax.inject.Inject @@ -333,11 +332,7 @@ class SeekBarViewModel @Inject constructor( } override fun onStopTrackingTouch(bar: SeekBar) { - // in addition to the normal functionality of both functions. - // isFalseTouch returns true if there is a real/false tap since it is not a move. - // isFalseTap returns true if there is a real/false move since it is not a tap. - if (falsingManager.isFalseTouch(MEDIA_SEEKBAR) && - falsingManager.isFalseTap(LOW_PENALTY)) { + if (falsingManager.isFalseTouch(MEDIA_SEEKBAR)) { viewModel.onSeekFalse() } viewModel.onSeek(bar.progress.toLong()) diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java index b2a9e82094952..6bc7308a6a403 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java @@ -144,6 +144,35 @@ public class BrightLineClassifierTest extends SysuiTestCase { assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isTrue(); } + @Test + public void testIsFalseTouch_SeekBar_FalseTouch() { + when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble())) + .thenReturn(mFalsedResult); + when(mSingleTapClassfier.isTap(any(List.class), anyDouble())).thenReturn(mFalsedResult); + assertThat(mBrightLineFalsingManager.isFalseTouch(Classifier.MEDIA_SEEKBAR)).isTrue(); + } + + @Test + public void testIsFalseTouch_SeekBar_RealTouch() { + when(mSingleTapClassfier.isTap(any(List.class), anyDouble())).thenReturn(mFalsedResult); + assertThat(mBrightLineFalsingManager.isFalseTouch(Classifier.MEDIA_SEEKBAR)).isFalse(); + } + + @Test + public void testIsFalseTouch_SeekBar_FalseTap() { + when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble())) + .thenReturn(mFalsedResult); + when(mSingleTapClassfier.isTap(any(List.class), anyDouble())).thenReturn(mFalsedResult); + assertThat(mBrightLineFalsingManager.isFalseTouch(Classifier.MEDIA_SEEKBAR)).isTrue(); + } + + @Test + public void testIsFalseTouch_SeekBar_RealTap() { + when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble())) + .thenReturn(mFalsedResult); + assertThat(mBrightLineFalsingManager.isFalseTouch(Classifier.MEDIA_SEEKBAR)).isFalse(); + } + @Test public void testIsFalseTouch_ClassifierBRejects() { when(mClassifierB.classifyGesture(anyInt(), anyDouble(), anyDouble()))