Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be8667d9 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

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
parent b791973d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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];
+1 −6
Original line number Diff line number Diff line
@@ -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())
+29 −0
Original line number Diff line number Diff line
@@ -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()))