Merge "Check False tap within False touch in SeekBar" into tm-qpr-dev

This commit is contained in:
Michael Mikhail
2022-10-17 17:59:25 +00:00
committed by Android (Google) Code Review
3 changed files with 36 additions and 6 deletions

View File

@@ -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.BACK_GESTURE;
import static com.android.systemui.classifier.Classifier.GENERIC; 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.FalsingManagerProxy.FALSING_SUCCESS;
import static com.android.systemui.classifier.FalsingModule.BRIGHT_LINE_GESTURE_CLASSIFERS; import static com.android.systemui.classifier.FalsingModule.BRIGHT_LINE_GESTURE_CLASSIFERS;
@@ -220,6 +221,11 @@ public class BrightLineFalsingManager implements FalsingManager {
return r; return r;
}).collect(Collectors.toList()); }).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]); logDebug("False Gesture (type: " + interactionType + "): " + localResult[0]);
return localResult[0]; return localResult[0];

View File

@@ -33,7 +33,6 @@ import androidx.lifecycle.MutableLiveData
import com.android.systemui.classifier.Classifier.MEDIA_SEEKBAR import com.android.systemui.classifier.Classifier.MEDIA_SEEKBAR
import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.FalsingManager.LOW_PENALTY
import com.android.systemui.statusbar.NotificationMediaManager import com.android.systemui.statusbar.NotificationMediaManager
import com.android.systemui.util.concurrency.RepeatableExecutor import com.android.systemui.util.concurrency.RepeatableExecutor
import javax.inject.Inject import javax.inject.Inject
@@ -333,11 +332,7 @@ class SeekBarViewModel @Inject constructor(
} }
override fun onStopTrackingTouch(bar: SeekBar) { override fun onStopTrackingTouch(bar: SeekBar) {
// in addition to the normal functionality of both functions. if (falsingManager.isFalseTouch(MEDIA_SEEKBAR)) {
// 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)) {
viewModel.onSeekFalse() viewModel.onSeekFalse()
} }
viewModel.onSeek(bar.progress.toLong()) viewModel.onSeek(bar.progress.toLong())

View File

@@ -144,6 +144,35 @@ public class BrightLineClassifierTest extends SysuiTestCase {
assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isTrue(); 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 @Test
public void testIsFalseTouch_ClassifierBRejects() { public void testIsFalseTouch_ClassifierBRejects() {
when(mClassifierB.classifyGesture(anyInt(), anyDouble(), anyDouble())) when(mClassifierB.classifyGesture(anyInt(), anyDouble(), anyDouble()))