Loading packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt +16 −3 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor Loading Loading @@ -84,6 +85,7 @@ import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsSecurityButtonVi import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.qs.ui.composable.QuickSettingsTheme import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import kotlinx.coroutines.launch Loading Loading @@ -264,7 +266,11 @@ private fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier = color = colorAttr(model.backgroundColor), shape = CircleShape, onClick = model.onClick, modifier = modifier, modifier = modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), ) { val tint = model.iconTint?.let { Color(it) } ?: Color.Unspecified Icon(model.icon, tint = tint, modifier = Modifier.size(20.dp)) Loading @@ -291,7 +297,11 @@ private fun NumberButton( shape = CircleShape, onClick = onClick, interactionSource = interactionSource, modifier = modifier, modifier = modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), ) { Box(Modifier.size(40.dp)) { Box( Loading Loading @@ -342,7 +352,10 @@ private fun TextButton( color = colorAttr(R.attr.underSurface), contentColor = MaterialTheme.colorScheme.onSurfaceVariant, borderStroke = BorderStroke(1.dp, colorAttr(R.attr.shadeInactive)), modifier = modifier.padding(horizontal = 4.dp), modifier = modifier .padding(horizontal = 4.dp) .borderOnFocus(color = MaterialTheme.colorScheme.secondary, CornerSize(50)), onClick = onClick, ) { Row( Loading packages/SystemUI/src/com/android/systemui/brightness/ui/compose/BrightnessSlider.kt +14 −8 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable Loading @@ -31,7 +32,6 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue Loading Loading @@ -61,6 +61,7 @@ import com.android.systemui.haptics.slider.SeekableSliderTrackerConfig import com.android.systemui.haptics.slider.SliderHapticFeedbackConfig import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import com.android.systemui.utils.PolicyRestriction Loading Loading @@ -102,10 +103,11 @@ private fun BrightnessSlider( null } val overriddenByAppState by if (Flags.showToastWhenAppControlBrightness()) { viewModel.brightnessOverriddenByWindow.collectAsStateWithLifecycle() val overriddenByAppState = if (Flags.showToastWhenAppControlBrightness()) { viewModel.brightnessOverriddenByWindow.collectAsStateWithLifecycle().value } else { mutableStateOf(false) false } PlatformSlider( Loading Loading @@ -160,7 +162,7 @@ private fun BrightnessSlider( if (interaction is DragInteraction.Start && overriddenByAppState) { viewModel.showToast( context, R.string.quick_settings_brightness_unable_adjust_msg R.string.quick_settings_brightness_unable_adjust_msg, ) } } Loading Loading @@ -213,7 +215,11 @@ fun BrightnessSliderContainer( coroutineScope.launch { viewModel.onDrag(Drag.Stopped(GammaBrightness(it))) } }, modifier = Modifier.then(if (viewModel.showMirror) Modifier.drawInOverlay() else Modifier) Modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(32.dp), ) .then(if (viewModel.showMirror) Modifier.drawInOverlay() else Modifier) .sliderBackground(containerColor) .fillMaxWidth(), formatter = viewModel::formatValue, Loading packages/SystemUI/src/com/android/systemui/keyboard/shortcut/ui/composable/Surfaces.kt +17 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.keyboard.shortcut.ui.composable import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.IndicationNodeFactory import androidx.compose.foundation.LocalIndication import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable Loading Loading @@ -126,8 +127,7 @@ fun SelectableShortcutSurface( .selectable( selected = selected, interactionSource = interactionSource, indication = ShortcutHelperIndication(interactionSource, interactionsConfig), indication = ShortcutHelperIndication(interactionsConfig), enabled = enabled, onClick = onClick, ) Loading Loading @@ -181,8 +181,7 @@ fun ClickableShortcutSurface( ) .clickable( interactionSource = interactionSource, indication = ShortcutHelperIndication(interactionSource, interactionsConfig), indication = ShortcutHelperIndication(interactionsConfig), enabled = enabled, onClick = onClick, ), Loading Loading @@ -507,10 +506,8 @@ private class ShortcutHelperInteractionsNode( } } data class ShortcutHelperIndication( private val interactionSource: InteractionSource, private val interactionsConfig: InteractionsConfig, ) : IndicationNodeFactory { data class ShortcutHelperIndication(private val interactionsConfig: InteractionsConfig) : IndicationNodeFactory { override fun create(interactionSource: InteractionSource): DelegatableNode { return ShortcutHelperInteractionsNode(interactionSource, interactionsConfig) } Loading @@ -529,3 +526,15 @@ data class InteractionsConfig( val hoverPadding: Dp = 0.dp, val pressedPadding: Dp = hoverPadding, ) @Composable fun ProvideShortcutHelperIndication( interactionsConfig: InteractionsConfig, content: @Composable () -> Unit, ) { CompositionLocalProvider( LocalIndication provides ShortcutHelperIndication(interactionsConfig) ) { content() } } packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +61 −43 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect Loading Loading @@ -78,6 +79,7 @@ import androidx.compose.ui.semantics.CustomAccessibilityAction import androidx.compose.ui.semantics.customActions import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.round import androidx.compose.ui.util.fastRoundToInt import androidx.compose.ui.viewinterop.AndroidView Loading @@ -102,6 +104,8 @@ import com.android.systemui.Dumpable import com.android.systemui.brightness.ui.compose.BrightnessSliderContainer import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.dump.DumpManager import com.android.systemui.keyboard.shortcut.ui.composable.InteractionsConfig import com.android.systemui.keyboard.shortcut.ui.composable.ProvideShortcutHelperIndication import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.lifecycle.setSnapshotBinding import com.android.systemui.media.controls.ui.view.MediaHost Loading Loading @@ -240,7 +244,8 @@ constructor( @Composable private fun Content() { PlatformTheme { PlatformTheme(isDarkTheme = true) { ProvideShortcutHelperIndication(interactionsConfig = interactionsConfig()) { AnimatedVisibility( visible = viewModel.isQsVisible, modifier = Loading @@ -266,7 +271,8 @@ constructor( AnimatedContent( targetState = isEditing, transitionSpec = { fadeIn(animationSpecEditMode) togetherWith fadeOut(animationSpecEditMode) fadeIn(animationSpecEditMode) togetherWith fadeOut(animationSpecEditMode) }, label = "EditModeAnimatedContent", ) { editing -> Loading @@ -290,6 +296,7 @@ constructor( } } } } /** * STL that contains both QQS (tiles) and QS (brightness, tiles, footer actions), but no Edit Loading Loading @@ -1090,3 +1097,14 @@ private object ResIdTags { const val qsScroll = "expanded_qs_scroll_view" const val qsFooterActions = "qs_footer_actions" } @Composable private fun interactionsConfig() = InteractionsConfig( hoverOverlayColor = MaterialTheme.colorScheme.onSurface, hoverOverlayAlpha = 0.11f, pressedOverlayColor = MaterialTheme.colorScheme.onSurface, pressedOverlayAlpha = 0.15f, // we are OK using this as our content is clipped and all corner radius are larger than this surfaceCornerRadius = 28.dp, ) packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PaginatedGridLayout.kt +28 −3 Original line number Diff line number Diff line Loading @@ -18,10 +18,13 @@ package com.android.systemui.qs.panels.ui.compose import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.Icon Loading @@ -32,7 +35,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment Loading @@ -41,6 +43,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.compose.animation.scene.SceneScope import com.android.compose.modifiers.padding import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.panels.dagger.PaginatedBaseLayoutType Loading @@ -48,6 +51,7 @@ import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout.Dimensions. import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout.Dimensions.InterPageSpacing import com.android.systemui.qs.panels.ui.viewmodel.PaginatedGridViewModel import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import javax.inject.Inject Loading Loading @@ -89,9 +93,24 @@ constructor( } Column { val contentPaddingValue = if (pages.size > 1) { InterPageSpacing } else { 0.dp } val contentPadding = PaddingValues(horizontal = contentPaddingValue) /* Use negative padding equal with value equal to content padding. That way, each page * layout extends to the sides, but the content is as if there was no padding. That * way, the clipping bounds of the HorizontalPager extend beyond the tiles in each page. */ HorizontalPager( state = pagerState, modifier = Modifier.sysuiResTag("qs_pager"), modifier = Modifier.sysuiResTag("qs_pager") .padding(horizontal = { -contentPaddingValue.roundToPx() }), contentPadding = contentPadding, pageSpacing = if (pages.size > 1) InterPageSpacing else 0.dp, beyondViewportPageCount = 1, verticalAlignment = Alignment.Top, Loading @@ -114,7 +133,13 @@ constructor( CompositionLocalProvider(value = LocalContentColor provides Color.White) { IconButton( onClick = editModeStart, modifier = Modifier.align(Alignment.CenterEnd), shape = RoundedCornerShape(CornerSize(28.dp)), modifier = Modifier.align(Alignment.CenterEnd) .borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(FooterHeight / 2), ), ) { Icon( imageVector = Icons.Default.Edit, Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/qs/footer/ui/compose/FooterActions.kt +16 −3 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor Loading Loading @@ -84,6 +85,7 @@ import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsSecurityButtonVi import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.qs.ui.composable.QuickSettingsTheme import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import kotlinx.coroutines.launch Loading Loading @@ -264,7 +266,11 @@ private fun IconButton(model: FooterActionsButtonViewModel, modifier: Modifier = color = colorAttr(model.backgroundColor), shape = CircleShape, onClick = model.onClick, modifier = modifier, modifier = modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), ) { val tint = model.iconTint?.let { Color(it) } ?: Color.Unspecified Icon(model.icon, tint = tint, modifier = Modifier.size(20.dp)) Loading @@ -291,7 +297,11 @@ private fun NumberButton( shape = CircleShape, onClick = onClick, interactionSource = interactionSource, modifier = modifier, modifier = modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, CornerSize(percent = 50), ), ) { Box(Modifier.size(40.dp)) { Box( Loading Loading @@ -342,7 +352,10 @@ private fun TextButton( color = colorAttr(R.attr.underSurface), contentColor = MaterialTheme.colorScheme.onSurfaceVariant, borderStroke = BorderStroke(1.dp, colorAttr(R.attr.shadeInactive)), modifier = modifier.padding(horizontal = 4.dp), modifier = modifier .padding(horizontal = 4.dp) .borderOnFocus(color = MaterialTheme.colorScheme.secondary, CornerSize(50)), onClick = onClick, ) { Row( Loading
packages/SystemUI/src/com/android/systemui/brightness/ui/compose/BrightnessSlider.kt +14 −8 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CornerSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable Loading @@ -31,7 +32,6 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue Loading Loading @@ -61,6 +61,7 @@ import com.android.systemui.haptics.slider.SeekableSliderTrackerConfig import com.android.systemui.haptics.slider.SliderHapticFeedbackConfig import com.android.systemui.haptics.slider.compose.ui.SliderHapticsViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import com.android.systemui.utils.PolicyRestriction Loading Loading @@ -102,10 +103,11 @@ private fun BrightnessSlider( null } val overriddenByAppState by if (Flags.showToastWhenAppControlBrightness()) { viewModel.brightnessOverriddenByWindow.collectAsStateWithLifecycle() val overriddenByAppState = if (Flags.showToastWhenAppControlBrightness()) { viewModel.brightnessOverriddenByWindow.collectAsStateWithLifecycle().value } else { mutableStateOf(false) false } PlatformSlider( Loading Loading @@ -160,7 +162,7 @@ private fun BrightnessSlider( if (interaction is DragInteraction.Start && overriddenByAppState) { viewModel.showToast( context, R.string.quick_settings_brightness_unable_adjust_msg R.string.quick_settings_brightness_unable_adjust_msg, ) } } Loading Loading @@ -213,7 +215,11 @@ fun BrightnessSliderContainer( coroutineScope.launch { viewModel.onDrag(Drag.Stopped(GammaBrightness(it))) } }, modifier = Modifier.then(if (viewModel.showMirror) Modifier.drawInOverlay() else Modifier) Modifier.borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(32.dp), ) .then(if (viewModel.showMirror) Modifier.drawInOverlay() else Modifier) .sliderBackground(containerColor) .fillMaxWidth(), formatter = viewModel::formatValue, Loading
packages/SystemUI/src/com/android/systemui/keyboard/shortcut/ui/composable/Surfaces.kt +17 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.keyboard.shortcut.ui.composable import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.IndicationNodeFactory import androidx.compose.foundation.LocalIndication import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable Loading Loading @@ -126,8 +127,7 @@ fun SelectableShortcutSurface( .selectable( selected = selected, interactionSource = interactionSource, indication = ShortcutHelperIndication(interactionSource, interactionsConfig), indication = ShortcutHelperIndication(interactionsConfig), enabled = enabled, onClick = onClick, ) Loading Loading @@ -181,8 +181,7 @@ fun ClickableShortcutSurface( ) .clickable( interactionSource = interactionSource, indication = ShortcutHelperIndication(interactionSource, interactionsConfig), indication = ShortcutHelperIndication(interactionsConfig), enabled = enabled, onClick = onClick, ), Loading Loading @@ -507,10 +506,8 @@ private class ShortcutHelperInteractionsNode( } } data class ShortcutHelperIndication( private val interactionSource: InteractionSource, private val interactionsConfig: InteractionsConfig, ) : IndicationNodeFactory { data class ShortcutHelperIndication(private val interactionsConfig: InteractionsConfig) : IndicationNodeFactory { override fun create(interactionSource: InteractionSource): DelegatableNode { return ShortcutHelperInteractionsNode(interactionSource, interactionsConfig) } Loading @@ -529,3 +526,15 @@ data class InteractionsConfig( val hoverPadding: Dp = 0.dp, val pressedPadding: Dp = hoverPadding, ) @Composable fun ProvideShortcutHelperIndication( interactionsConfig: InteractionsConfig, content: @Composable () -> Unit, ) { CompositionLocalProvider( LocalIndication provides ShortcutHelperIndication(interactionsConfig) ) { content() } }
packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt +61 −43 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect Loading Loading @@ -78,6 +79,7 @@ import androidx.compose.ui.semantics.CustomAccessibilityAction import androidx.compose.ui.semantics.customActions import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.round import androidx.compose.ui.util.fastRoundToInt import androidx.compose.ui.viewinterop.AndroidView Loading @@ -102,6 +104,8 @@ import com.android.systemui.Dumpable import com.android.systemui.brightness.ui.compose.BrightnessSliderContainer import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.dump.DumpManager import com.android.systemui.keyboard.shortcut.ui.composable.InteractionsConfig import com.android.systemui.keyboard.shortcut.ui.composable.ProvideShortcutHelperIndication import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.lifecycle.setSnapshotBinding import com.android.systemui.media.controls.ui.view.MediaHost Loading Loading @@ -240,7 +244,8 @@ constructor( @Composable private fun Content() { PlatformTheme { PlatformTheme(isDarkTheme = true) { ProvideShortcutHelperIndication(interactionsConfig = interactionsConfig()) { AnimatedVisibility( visible = viewModel.isQsVisible, modifier = Loading @@ -266,7 +271,8 @@ constructor( AnimatedContent( targetState = isEditing, transitionSpec = { fadeIn(animationSpecEditMode) togetherWith fadeOut(animationSpecEditMode) fadeIn(animationSpecEditMode) togetherWith fadeOut(animationSpecEditMode) }, label = "EditModeAnimatedContent", ) { editing -> Loading @@ -290,6 +296,7 @@ constructor( } } } } /** * STL that contains both QQS (tiles) and QS (brightness, tiles, footer actions), but no Edit Loading Loading @@ -1090,3 +1097,14 @@ private object ResIdTags { const val qsScroll = "expanded_qs_scroll_view" const val qsFooterActions = "qs_footer_actions" } @Composable private fun interactionsConfig() = InteractionsConfig( hoverOverlayColor = MaterialTheme.colorScheme.onSurface, hoverOverlayAlpha = 0.11f, pressedOverlayColor = MaterialTheme.colorScheme.onSurface, pressedOverlayAlpha = 0.15f, // we are OK using this as our content is clipped and all corner radius are larger than this surfaceCornerRadius = 28.dp, )
packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/PaginatedGridLayout.kt +28 −3 Original line number Diff line number Diff line Loading @@ -18,10 +18,13 @@ package com.android.systemui.qs.panels.ui.compose import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.Icon Loading @@ -32,7 +35,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment Loading @@ -41,6 +43,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.compose.animation.scene.SceneScope import com.android.compose.modifiers.padding import com.android.systemui.compose.modifiers.sysuiResTag import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.qs.panels.dagger.PaginatedBaseLayoutType Loading @@ -48,6 +51,7 @@ import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout.Dimensions. import com.android.systemui.qs.panels.ui.compose.PaginatedGridLayout.Dimensions.InterPageSpacing import com.android.systemui.qs.panels.ui.viewmodel.PaginatedGridViewModel import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel import com.android.systemui.qs.ui.compose.borderOnFocus import com.android.systemui.res.R import javax.inject.Inject Loading Loading @@ -89,9 +93,24 @@ constructor( } Column { val contentPaddingValue = if (pages.size > 1) { InterPageSpacing } else { 0.dp } val contentPadding = PaddingValues(horizontal = contentPaddingValue) /* Use negative padding equal with value equal to content padding. That way, each page * layout extends to the sides, but the content is as if there was no padding. That * way, the clipping bounds of the HorizontalPager extend beyond the tiles in each page. */ HorizontalPager( state = pagerState, modifier = Modifier.sysuiResTag("qs_pager"), modifier = Modifier.sysuiResTag("qs_pager") .padding(horizontal = { -contentPaddingValue.roundToPx() }), contentPadding = contentPadding, pageSpacing = if (pages.size > 1) InterPageSpacing else 0.dp, beyondViewportPageCount = 1, verticalAlignment = Alignment.Top, Loading @@ -114,7 +133,13 @@ constructor( CompositionLocalProvider(value = LocalContentColor provides Color.White) { IconButton( onClick = editModeStart, modifier = Modifier.align(Alignment.CenterEnd), shape = RoundedCornerShape(CornerSize(28.dp)), modifier = Modifier.align(Alignment.CenterEnd) .borderOnFocus( color = MaterialTheme.colorScheme.secondary, cornerSize = CornerSize(FooterHeight / 2), ), ) { Icon( imageVector = Icons.Default.Edit, Loading