Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +39 −38 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import androidx.compose.ui.layout.layoutId import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle Loading Loading @@ -146,9 +147,7 @@ constructor( } @Composable override fun SceneScope.Content( modifier: Modifier, ) { override fun SceneScope.Content(modifier: Modifier) { QuickSettingsScene( notificationStackScrollView = notificationStackScrollView.get(), viewModelFactory = contentViewModelFactory, Loading Loading @@ -199,6 +198,9 @@ private fun SceneScope.QuickSettingsScene( onDispose { notificationsPlaceholderViewModel.setAlphaForBrightnessMirror(1f) } } val shadeHorizontalPadding = dimensionResource(id = R.dimen.notification_panel_margin_horizontal) BrightnessMirror( viewModel = brightnessMirrorViewModel, qsSceneAdapter = viewModel.qsSceneAdapter, Loading @@ -206,6 +208,7 @@ private fun SceneScope.QuickSettingsScene( Modifier.thenIf(cutoutLocation != CutoutLocation.CENTER) { Modifier.displayCutoutPadding() } .padding(horizontal = shadeHorizontalPadding), ) val shouldPunchHoleBehindScrim = Loading @@ -224,9 +227,7 @@ private fun SceneScope.QuickSettingsScene( // scene (and not the one under it) during a scene transition. Modifier.graphicsLayer(compositingStrategy = CompositingStrategy.Offscreen) } .thenIf(cutoutLocation != CutoutLocation.CENTER) { Modifier.displayCutoutPadding() }, .thenIf(cutoutLocation != CutoutLocation.CENTER) { Modifier.displayCutoutPadding() } ) { val isCustomizing by viewModel.qsSceneAdapter.isCustomizing.collectAsStateWithLifecycle() val isCustomizerShowing by Loading @@ -235,11 +236,7 @@ private fun SceneScope.QuickSettingsScene( viewModel.qsSceneAdapter.customizerAnimationDuration.collectAsStateWithLifecycle() val screenHeight = LocalRawScreenHeight.current BackHandler( enabled = isCustomizing, ) { viewModel.qsSceneAdapter.requestCloseCustomizer() } BackHandler(enabled = isCustomizing) { viewModel.qsSceneAdapter.requestCloseCustomizer() } val collapsedHeaderHeight = with(LocalDensity.current) { ShadeHeader.Dimensions.CollapsedHeight.roundToPx() } Loading Loading @@ -276,13 +273,13 @@ private fun SceneScope.QuickSettingsScene( animateDpAsState( targetValue = if (isCustomizing) 0.dp else navBarBottomHeight, animationSpec = tween(customizingAnimationDuration), label = "animateQSSceneBottomPaddingAsState" label = "animateQSSceneBottomPaddingAsState", ) val topPadding by animateDpAsState( targetValue = if (isCustomizing) ShadeHeader.Dimensions.CollapsedHeight else 0.dp, animationSpec = tween(customizingAnimationDuration), label = "animateQSSceneTopPaddingAsState" label = "animateQSSceneTopPaddingAsState", ) LaunchedEffect(navBarBottomHeight, density) { Loading Loading @@ -313,18 +310,15 @@ private fun SceneScope.QuickSettingsScene( Modifier.fillMaxSize() .padding( top = topPadding.coerceAtLeast(0.dp), bottom = bottomPadding.coerceAtLeast(0.dp) ) bottom = bottomPadding.coerceAtLeast(0.dp), ), ) { Box(modifier = Modifier.fillMaxSize().weight(1f)) { val shadeHeaderAndQuickSettingsModifier = if (isCustomizerShowing) { Modifier.fillMaxHeight().align(Alignment.TopCenter) } else { Modifier.verticalScroll( scrollState, enabled = isScrollable, ) Modifier.verticalScroll(scrollState, enabled = isScrollable) .clipScrollableContainer(Orientation.Horizontal) .fillMaxWidth() .wrapContentHeight(unbounded = true) Loading @@ -333,7 +327,7 @@ private fun SceneScope.QuickSettingsScene( Column( modifier = shadeHeaderAndQuickSettingsModifier.sysuiResTag("expanded_qs_scroll_view"), shadeHeaderAndQuickSettingsModifier.sysuiResTag("expanded_qs_scroll_view") ) { when (LocalWindowSizeClass.current.widthSizeClass) { WindowWidthSizeClass.Compact -> Loading @@ -345,7 +339,7 @@ private fun SceneScope.QuickSettingsScene( expandFrom = Alignment.Top, ) + slideInVertically( animationSpec = tween(customizingAnimationDuration), animationSpec = tween(customizingAnimationDuration) ) + fadeIn(tween(customizingAnimationDuration)), exit = Loading @@ -354,7 +348,7 @@ private fun SceneScope.QuickSettingsScene( shrinkTowards = Alignment.Top, ) + slideOutVertically( animationSpec = tween(customizingAnimationDuration), animationSpec = tween(customizingAnimationDuration) ) + fadeOut(tween(customizingAnimationDuration)), ) { Loading Loading @@ -382,7 +376,7 @@ private fun SceneScope.QuickSettingsScene( viewModel.qsSceneAdapter, { viewModel.qsSceneAdapter.qsHeight }, isSplitShade = false, modifier = Modifier.layoutId(QSMediaMeasurePolicy.LayoutId.QS) modifier = Modifier.layoutId(QSMediaMeasurePolicy.LayoutId.QS), ) MediaCarousel( Loading @@ -400,16 +394,15 @@ private fun SceneScope.QuickSettingsScene( { mediaOffset.roundToPx() }, ) } Box(modifier = Modifier.padding(horizontal = shadeHorizontalPadding)) { if (mediaInRow) { Layout( content = content, measurePolicy = landscapeQsMediaMeasurePolicy, ) Layout(content = content, measurePolicy = landscapeQsMediaMeasurePolicy) } else { content() } } } } FooterActionsWithAnimatedVisibility( viewModel = footerActionsViewModel, Loading @@ -417,13 +410,18 @@ private fun SceneScope.QuickSettingsScene( customizingAnimationDuration = customizingAnimationDuration, lifecycleOwner = lifecycleOwner, modifier = Modifier.align(Alignment.CenterHorizontally).sysuiResTag("qs_footer_actions"), Modifier.align(Alignment.CenterHorizontally) .sysuiResTag("qs_footer_actions") .padding(horizontal = shadeHorizontalPadding), ) } HeadsUpNotificationSpace( stackScrollView = notificationStackScrollView, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding(), modifier = Modifier.align(Alignment.BottomCenter) .navigationBarsPadding() .padding(horizontal = shadeHorizontalPadding), isPeekFromBottom = true, ) NotificationScrollingStack( Loading @@ -435,15 +433,18 @@ private fun SceneScope.QuickSettingsScene( shouldIncludeHeadsUpSpace = false, shadeMode = ShadeMode.Single, modifier = Modifier.fillMaxWidth().offset { IntOffset(x = 0, y = screenHeight.roundToInt()) }, Modifier.fillMaxWidth() .offset { IntOffset(x = 0, y = screenHeight.roundToInt()) } .padding(horizontal = shadeHorizontalPadding), ) NotificationStackCutoffGuideline( stackScrollView = notificationStackScrollView, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding().offset { IntOffset(x = 0, y = screenHeight.roundToInt()) } Modifier.align(Alignment.BottomCenter) .navigationBarsPadding() .offset { IntOffset(x = 0, y = screenHeight.roundToInt()) } .padding(horizontal = shadeHorizontalPadding), ) } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt +39 −38 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import androidx.compose.ui.layout.layoutId import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle Loading Loading @@ -146,9 +147,7 @@ constructor( } @Composable override fun SceneScope.Content( modifier: Modifier, ) { override fun SceneScope.Content(modifier: Modifier) { QuickSettingsScene( notificationStackScrollView = notificationStackScrollView.get(), viewModelFactory = contentViewModelFactory, Loading Loading @@ -199,6 +198,9 @@ private fun SceneScope.QuickSettingsScene( onDispose { notificationsPlaceholderViewModel.setAlphaForBrightnessMirror(1f) } } val shadeHorizontalPadding = dimensionResource(id = R.dimen.notification_panel_margin_horizontal) BrightnessMirror( viewModel = brightnessMirrorViewModel, qsSceneAdapter = viewModel.qsSceneAdapter, Loading @@ -206,6 +208,7 @@ private fun SceneScope.QuickSettingsScene( Modifier.thenIf(cutoutLocation != CutoutLocation.CENTER) { Modifier.displayCutoutPadding() } .padding(horizontal = shadeHorizontalPadding), ) val shouldPunchHoleBehindScrim = Loading @@ -224,9 +227,7 @@ private fun SceneScope.QuickSettingsScene( // scene (and not the one under it) during a scene transition. Modifier.graphicsLayer(compositingStrategy = CompositingStrategy.Offscreen) } .thenIf(cutoutLocation != CutoutLocation.CENTER) { Modifier.displayCutoutPadding() }, .thenIf(cutoutLocation != CutoutLocation.CENTER) { Modifier.displayCutoutPadding() } ) { val isCustomizing by viewModel.qsSceneAdapter.isCustomizing.collectAsStateWithLifecycle() val isCustomizerShowing by Loading @@ -235,11 +236,7 @@ private fun SceneScope.QuickSettingsScene( viewModel.qsSceneAdapter.customizerAnimationDuration.collectAsStateWithLifecycle() val screenHeight = LocalRawScreenHeight.current BackHandler( enabled = isCustomizing, ) { viewModel.qsSceneAdapter.requestCloseCustomizer() } BackHandler(enabled = isCustomizing) { viewModel.qsSceneAdapter.requestCloseCustomizer() } val collapsedHeaderHeight = with(LocalDensity.current) { ShadeHeader.Dimensions.CollapsedHeight.roundToPx() } Loading Loading @@ -276,13 +273,13 @@ private fun SceneScope.QuickSettingsScene( animateDpAsState( targetValue = if (isCustomizing) 0.dp else navBarBottomHeight, animationSpec = tween(customizingAnimationDuration), label = "animateQSSceneBottomPaddingAsState" label = "animateQSSceneBottomPaddingAsState", ) val topPadding by animateDpAsState( targetValue = if (isCustomizing) ShadeHeader.Dimensions.CollapsedHeight else 0.dp, animationSpec = tween(customizingAnimationDuration), label = "animateQSSceneTopPaddingAsState" label = "animateQSSceneTopPaddingAsState", ) LaunchedEffect(navBarBottomHeight, density) { Loading Loading @@ -313,18 +310,15 @@ private fun SceneScope.QuickSettingsScene( Modifier.fillMaxSize() .padding( top = topPadding.coerceAtLeast(0.dp), bottom = bottomPadding.coerceAtLeast(0.dp) ) bottom = bottomPadding.coerceAtLeast(0.dp), ), ) { Box(modifier = Modifier.fillMaxSize().weight(1f)) { val shadeHeaderAndQuickSettingsModifier = if (isCustomizerShowing) { Modifier.fillMaxHeight().align(Alignment.TopCenter) } else { Modifier.verticalScroll( scrollState, enabled = isScrollable, ) Modifier.verticalScroll(scrollState, enabled = isScrollable) .clipScrollableContainer(Orientation.Horizontal) .fillMaxWidth() .wrapContentHeight(unbounded = true) Loading @@ -333,7 +327,7 @@ private fun SceneScope.QuickSettingsScene( Column( modifier = shadeHeaderAndQuickSettingsModifier.sysuiResTag("expanded_qs_scroll_view"), shadeHeaderAndQuickSettingsModifier.sysuiResTag("expanded_qs_scroll_view") ) { when (LocalWindowSizeClass.current.widthSizeClass) { WindowWidthSizeClass.Compact -> Loading @@ -345,7 +339,7 @@ private fun SceneScope.QuickSettingsScene( expandFrom = Alignment.Top, ) + slideInVertically( animationSpec = tween(customizingAnimationDuration), animationSpec = tween(customizingAnimationDuration) ) + fadeIn(tween(customizingAnimationDuration)), exit = Loading @@ -354,7 +348,7 @@ private fun SceneScope.QuickSettingsScene( shrinkTowards = Alignment.Top, ) + slideOutVertically( animationSpec = tween(customizingAnimationDuration), animationSpec = tween(customizingAnimationDuration) ) + fadeOut(tween(customizingAnimationDuration)), ) { Loading Loading @@ -382,7 +376,7 @@ private fun SceneScope.QuickSettingsScene( viewModel.qsSceneAdapter, { viewModel.qsSceneAdapter.qsHeight }, isSplitShade = false, modifier = Modifier.layoutId(QSMediaMeasurePolicy.LayoutId.QS) modifier = Modifier.layoutId(QSMediaMeasurePolicy.LayoutId.QS), ) MediaCarousel( Loading @@ -400,16 +394,15 @@ private fun SceneScope.QuickSettingsScene( { mediaOffset.roundToPx() }, ) } Box(modifier = Modifier.padding(horizontal = shadeHorizontalPadding)) { if (mediaInRow) { Layout( content = content, measurePolicy = landscapeQsMediaMeasurePolicy, ) Layout(content = content, measurePolicy = landscapeQsMediaMeasurePolicy) } else { content() } } } } FooterActionsWithAnimatedVisibility( viewModel = footerActionsViewModel, Loading @@ -417,13 +410,18 @@ private fun SceneScope.QuickSettingsScene( customizingAnimationDuration = customizingAnimationDuration, lifecycleOwner = lifecycleOwner, modifier = Modifier.align(Alignment.CenterHorizontally).sysuiResTag("qs_footer_actions"), Modifier.align(Alignment.CenterHorizontally) .sysuiResTag("qs_footer_actions") .padding(horizontal = shadeHorizontalPadding), ) } HeadsUpNotificationSpace( stackScrollView = notificationStackScrollView, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding(), modifier = Modifier.align(Alignment.BottomCenter) .navigationBarsPadding() .padding(horizontal = shadeHorizontalPadding), isPeekFromBottom = true, ) NotificationScrollingStack( Loading @@ -435,15 +433,18 @@ private fun SceneScope.QuickSettingsScene( shouldIncludeHeadsUpSpace = false, shadeMode = ShadeMode.Single, modifier = Modifier.fillMaxWidth().offset { IntOffset(x = 0, y = screenHeight.roundToInt()) }, Modifier.fillMaxWidth() .offset { IntOffset(x = 0, y = screenHeight.roundToInt()) } .padding(horizontal = shadeHorizontalPadding), ) NotificationStackCutoffGuideline( stackScrollView = notificationStackScrollView, viewModel = notificationsPlaceholderViewModel, modifier = Modifier.align(Alignment.BottomCenter).navigationBarsPadding().offset { IntOffset(x = 0, y = screenHeight.roundToInt()) } Modifier.align(Alignment.BottomCenter) .navigationBarsPadding() .offset { IntOffset(x = 0, y = screenHeight.roundToInt()) } .padding(horizontal = shadeHorizontalPadding), ) } }