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

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

Merge "Move Edit mode to be top level in QS" into main

parents 15ea1c90 8e5da82a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -124,8 +124,9 @@ fun SceneScope.ShadeBody(viewModel: QuickSettingsContainerViewModel) {
    }
}

/** Column containing Brightness and QS tiles. */
@Composable
private fun SceneScope.QuickSettingsLayout(
fun SceneScope.QuickSettingsLayout(
    viewModel: QuickSettingsContainerViewModel,
    modifier: Modifier = Modifier,
) {
+73 −28
Original line number Diff line number Diff line
@@ -26,7 +26,12 @@ import android.view.ViewGroup
import androidx.activity.OnBackPressedDispatcher
import androidx.activity.OnBackPressedDispatcherOwner
import androidx.activity.setViewTreeOnBackPressedDispatcherOwner
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.togetherWith
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@@ -88,11 +93,12 @@ import com.android.systemui.qs.composefragment.ui.quickQuickSettingsToQuickSetti
import com.android.systemui.qs.composefragment.viewmodel.QSFragmentComposeViewModel
import com.android.systemui.qs.flags.QSComposeFragment
import com.android.systemui.qs.footer.ui.compose.FooterActions
import com.android.systemui.qs.panels.ui.compose.EditMode
import com.android.systemui.qs.panels.ui.compose.QuickQuickSettings
import com.android.systemui.qs.shared.ui.ElementKeys
import com.android.systemui.qs.ui.composable.QuickSettingsLayout
import com.android.systemui.qs.ui.composable.QuickSettingsShade
import com.android.systemui.qs.ui.composable.QuickSettingsTheme
import com.android.systemui.qs.ui.composable.ShadeBody
import com.android.systemui.res.R
import com.android.systemui.util.LifecycleFragment
import com.android.systemui.util.asIndenting
@@ -200,6 +206,50 @@ constructor(
                                }
                                .graphicsLayer { elevation = 4.dp.toPx() },
                    ) {
                        val isEditing by
                            viewModel.containerViewModel.editModeViewModel.isEditing
                                .collectAsStateWithLifecycle()
                        val animationSpecEditMode = tween<Float>(EDIT_MODE_TIME_MILLIS)
                        AnimatedContent(
                            targetState = isEditing,
                            transitionSpec = {
                                fadeIn(animationSpecEditMode) togetherWith
                                    fadeOut(animationSpecEditMode)
                            },
                            label = "EditModeAnimatedContent",
                        ) { editing ->
                            if (editing) {
                                val qqsPadding by
                                    viewModel.qqsHeaderHeight.collectAsStateWithLifecycle()
                                EditMode(
                                    viewModel = viewModel.containerViewModel.editModeViewModel,
                                    modifier =
                                        Modifier.fillMaxWidth()
                                            .padding(top = { qqsPadding })
                                            .padding(
                                                horizontal = {
                                                    QuickSettingsShade.Dimensions.Padding
                                                        .roundToPx()
                                                }
                                            ),
                                )
                            } else {
                                CollapsableQuickSettingsSTL()
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * STL that contains both QQS (tiles) and QS (brightness, tiles, footer actions), but no Edit
     * mode. It tracks [QSFragmentComposeViewModel.expansionState] to drive the transition between
     * [SceneKeys.QuickQuickSettings] and [SceneKeys.QuickSettings].
     */
    @Composable
    private fun CollapsableQuickSettingsSTL() {
        val sceneState = remember {
            MutableSceneTransitionLayoutState(
                viewModel.expansionState.value.toIdleSceneKey(),
@@ -213,25 +263,15 @@ constructor(
        }

        LaunchedEffect(Unit) {
                            synchronizeQsState(
                                sceneState,
                                viewModel.expansionState.map { it.progress },
                            )
            synchronizeQsState(sceneState, viewModel.expansionState.map { it.progress })
        }

                        SceneTransitionLayout(
                            state = sceneState,
                            modifier = Modifier.fillMaxSize(),
                        ) {
        SceneTransitionLayout(state = sceneState, modifier = Modifier.fillMaxSize()) {
            scene(QuickSettings) { QuickSettingsElement() }

            scene(QuickQuickSettings) { QuickQuickSettingsElement() }
        }
    }
                }
            }
        }
    }

    override fun setPanelView(notificationPanelView: QS.HeightListener?) {
        heightListener.value = notificationPanelView
@@ -445,7 +485,7 @@ constructor(
                        qsContainerController,
                        viewModel.containerViewModel.editModeViewModel.isEditing,
                    ) {
                        setCustomizerShowing(it)
                        setCustomizerShowing(it, EDIT_MODE_TIME_MILLIS.toLong())
                    }
                }
            }
@@ -519,7 +559,10 @@ constructor(
                        Spacer(
                            modifier = Modifier.height { qqsPadding + qsExtraPadding.roundToPx() }
                        )
                        ShadeBody(viewModel = viewModel.containerViewModel)
                        QuickSettingsLayout(
                            viewModel = viewModel.containerViewModel,
                            modifier = Modifier.sysuiResTag("quick_settings_panel"),
                        )
                    }
                }
                QuickSettingsTheme {
@@ -717,3 +760,5 @@ private class ExpansionTransition(currentProgress: Float) :
        finishCompletable.complete(Unit)
    }
}

private const val EDIT_MODE_TIME_MILLIS = 500