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

Commit 00a1e71b authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Handling 3 and 4 finger swipes on tutorial selection screen

Sometimes user is clicking button by mistake by performing touchpad gesture on top of it.
Tutorial selection screen is already intercepting gestures from system but now let's also have high-level composable that handles them so they're not propagating to lower composables.

I considered also enabling system gestures on this screen instead but it must be done on window level. All screens from touchpad tutorial share the same window so it must be done in runtime but seems changing that flag in runtime doesn't work (maybe because it's private window flag?).

Fixes: 373376226
Test: do 3-finger gesture on top of the button (start and end point must be inside the button) and see nothing's happening
Flag: com.android.systemui.shared.new_touchpad_gestures_tutorial
Change-Id: If9ad2f83d4715a706a4ca39a01c4412b06a63b8f
parent ea1f8243
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -39,11 +39,14 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.input.pointer.pointerInteropFilter
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.dp
import com.android.systemui.inputdevice.tutorial.ui.composable.DoneButton
import com.android.systemui.res.R
import com.android.systemui.touchpad.tutorial.ui.gesture.isFourFingerTouchpadSwipe
import com.android.systemui.touchpad.tutorial.ui.gesture.isThreeFingerTouchpadSwipe

@Composable
fun TutorialSelectionScreen(
@@ -55,7 +58,16 @@ fun TutorialSelectionScreen(
    Column(
        verticalArrangement = Arrangement.Center,
        modifier =
            Modifier.background(color = MaterialTheme.colorScheme.surfaceContainer).fillMaxSize(),
            Modifier.background(color = MaterialTheme.colorScheme.surfaceContainer)
                .fillMaxSize()
                .pointerInteropFilter(
                    onTouchEvent = { event ->
                        // Because of window flag we're intercepting 3 and 4-finger swipes.
                        // Although we don't handle them in this screen, we want to disable them so
                        // that user is not clicking button by mistake by performing these swipes.
                        isThreeFingerTouchpadSwipe(event) || isFourFingerTouchpadSwipe(event)
                    }
                ),
    ) {
        TutorialSelectionButtons(
            onBackTutorialClicked = onBackTutorialClicked,