Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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, ) { Loading packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +73 −28 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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(), Loading @@ -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 Loading Loading @@ -445,7 +485,7 @@ constructor( qsContainerController, viewModel.containerViewModel.editModeViewModel.isEditing, ) { setCustomizerShowing(it) setCustomizerShowing(it, EDIT_MODE_TIME_MILLIS.toLong()) } } } Loading Loading @@ -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 { Loading Loading @@ -717,3 +760,5 @@ private class ExpansionTransition(currentProgress: Float) : finishCompletable.complete(Unit) } } private const val EDIT_MODE_TIME_MILLIS = 500 Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsShadeOverlay.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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, ) { Loading
packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +73 −28 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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(), Loading @@ -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 Loading Loading @@ -445,7 +485,7 @@ constructor( qsContainerController, viewModel.containerViewModel.editModeViewModel.isEditing, ) { setCustomizerShowing(it) setCustomizerShowing(it, EDIT_MODE_TIME_MILLIS.toLong()) } } } Loading Loading @@ -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 { Loading Loading @@ -717,3 +760,5 @@ private class ExpansionTransition(currentProgress: Float) : finishCompletable.complete(Unit) } } private const val EDIT_MODE_TIME_MILLIS = 500