diff options
| author | 2022-10-13 21:22:45 +0000 | |
|---|---|---|
| committer | 2022-10-13 21:30:36 +0000 | |
| commit | be8667d9deb74d628263fee537acfaf17b2af16c (patch) | |
| tree | b7ce0ba421ce08955ed201e07cf29404e25e25a0 | |
| parent | b791973debcac0e6ae3baf81ef1cf3c015d9a423 (diff) | |
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
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 d53e56f7b852..500f28004429 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 17ebfecdd1fa..0f78a1e2ff50 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 b2a9e8209495..6bc7308a6a40 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java @@ -145,6 +145,35 @@ public class BrightLineClassifierTest extends SysuiTestCase { } @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())) .thenReturn(mFalsedResult); |