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

Commit c4d4a9e5 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Fix QS Edit scrolling in Split shade." into main

parents 43fa00ce 968c28cb
Loading
Loading
Loading
Loading
+32 −25
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import androidx.compose.ui.unit.dp
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.LowestZIndexScenePicker
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.TransitionState
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.animateSceneFloatAsState
@@ -294,6 +295,7 @@ private fun SceneScope.SplitShade(
    }

    val quickSettingsScrollState = rememberScrollState()
    val isScrollable = layoutState.transitionState is TransitionState.Idle
    LaunchedEffect(isCustomizing, quickSettingsScrollState) {
        if (isCustomizing) {
            quickSettingsScrollState.scrollTo(0)
@@ -322,15 +324,24 @@ private fun SceneScope.SplitShade(
                Column(
                    verticalArrangement = Arrangement.Top,
                    modifier =
                        Modifier.weight(1f).fillMaxHeight().thenIf(!isCustomizing) {
                        Modifier.weight(1f).fillMaxSize().thenIf(!isCustomizing) {
                            Modifier.padding(bottom = navBarBottomHeight)
                        },
                ) {
                    Column(
                        modifier =
                            Modifier.fillMaxSize().weight(1f).thenIf(!isCustomizing) {
                                Modifier.verticalNestedScrollToScene()
                                .verticalScroll(quickSettingsScrollState)
                                    .verticalScroll(
                                        quickSettingsScrollState,
                                        enabled = isScrollable
                                    )
                                    .clipScrollableContainer(Orientation.Horizontal)
                                .padding(bottom = navBarBottomHeight)
                            }
                    ) {
                        Box(
                        modifier = Modifier.element(QuickSettings.Elements.SplitShadeQuickSettings)
                            modifier =
                                Modifier.element(QuickSettings.Elements.SplitShadeQuickSettings)
                        ) {
                            QuickSettings(
                                qsSceneAdapter = viewModel.qsSceneAdapter,
@@ -347,11 +358,7 @@ private fun SceneScope.SplitShade(
                            mediaHost = mediaHost,
                            modifier = Modifier.fillMaxWidth(),
                        )

                    Spacer(
                        modifier = Modifier.weight(1f),
                    )

                    }
                    FooterActionsWithAnimatedVisibility(
                        viewModel = footerActionsViewModel,
                        isCustomizing = isCustomizing,
+16 −2
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() {
            scope = testScope.backgroundScope,
        )

    private val qsFlexiglassAdapter = FakeQSSceneAdapter({ mock() })
    private val qsSceneAdapter = FakeQSSceneAdapter({ mock() })

    private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel

@@ -122,7 +122,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() {
                applicationScope = testScope.backgroundScope,
                deviceEntryInteractor = deviceEntryInteractor,
                shadeHeaderViewModel = shadeHeaderViewModel,
                qsSceneAdapter = qsFlexiglassAdapter,
                qsSceneAdapter = qsSceneAdapter,
                notifications = kosmos.notificationsPlaceholderViewModel,
                mediaDataManager = mediaDataManager,
                shadeInteractor = kosmos.shadeInteractor,
@@ -278,6 +278,20 @@ class ShadeSceneViewModelTest : SysuiTestCase() {
                .isEqualTo(Scenes.QuickSettings)
        }

    @Test
    fun upTransitionSceneKey_customizing_noTransition() =
            testScope.runTest {
                val destinationScenes by collectLastValue(underTest.destinationScenes)

                qsSceneAdapter.setCustomizing(true)
                assertThat(
                        destinationScenes!!
                                .keys
                                .filterIsInstance<Swipe>()
                                .filter { it.direction == SwipeDirection.Up }
                ).isEmpty()
            }

    @Test
    fun shadeMode() =
        testScope.runTest {
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ constructor(
        qsSceneAdapter.isCustomizing.map { customizing ->
            if (customizing) {
                mapOf<UserAction, UserActionResult>(Back to UserActionResult(Scenes.QuickSettings))
                // TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade
                // while customizing
            } else {
                mapOf(
                    Back to UserActionResult(Scenes.Shade),
+8 −2
Original line number Diff line number Diff line
@@ -66,11 +66,13 @@ constructor(
                deviceEntryInteractor.isUnlocked,
                deviceEntryInteractor.canSwipeToEnter,
                shadeInteractor.shadeMode,
            ) { isUnlocked, canSwipeToDismiss, shadeMode ->
                qsSceneAdapter.isCustomizing
            ) { isUnlocked, canSwipeToDismiss, shadeMode, isCustomizing ->
                destinationScenes(
                    isUnlocked = isUnlocked,
                    canSwipeToDismiss = canSwipeToDismiss,
                    shadeMode = shadeMode,
                    isCustomizing = isCustomizing
                )
            }
            .stateIn(
@@ -81,6 +83,7 @@ constructor(
                        isUnlocked = deviceEntryInteractor.isUnlocked.value,
                        canSwipeToDismiss = deviceEntryInteractor.canSwipeToEnter.value,
                        shadeMode = shadeInteractor.shadeMode.value,
                        isCustomizing = qsSceneAdapter.isCustomizing.value,
                    ),
            )

@@ -120,6 +123,7 @@ constructor(
        isUnlocked: Boolean,
        canSwipeToDismiss: Boolean?,
        shadeMode: ShadeMode,
        isCustomizing: Boolean,
    ): Map<UserAction, UserActionResult> {
        val up =
            when {
@@ -131,7 +135,9 @@ constructor(
        val down = Scenes.QuickSettings.takeIf { shadeMode is ShadeMode.Single }

        return buildMap {
            if (!isCustomizing) {
                this[Swipe(SwipeDirection.Up)] = UserActionResult(up)
            } // TODO(b/330200163) Add an else to be able to collapse the shade while customizing
            down?.let { this[Swipe(SwipeDirection.Down)] = UserActionResult(down) }
        }
    }