summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Michael Mikhail <michaelmikhil@google.com> 2022-10-13 21:22:45 +0000
committer Michael Mikhail <michaelmikhil@google.com> 2022-10-13 21:30:36 +0000
commitbe8667d9deb74d628263fee537acfaf17b2af16c (patch)
treeb7ce0ba421ce08955ed201e07cf29404e25e25a0
parentb791973debcac0e6ae3baf81ef1cf3c015d9a423 (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
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java29
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);