Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +37 −78 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsHoveredAsState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer Loading @@ -43,10 +43,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.graphicsLayer Loading Loading @@ -80,18 +78,17 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader.Colors.chipBackground import com.android.systemui.shade.ui.composable.ShadeHeader.Colors.chipHighlighted import com.android.systemui.shade.ui.composable.ShadeHeader.Colors.onScrimDim import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.ChipPaddingHorizontal import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.ChipPaddingVertical import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.CollapsedHeight import com.android.systemui.shade.ui.composable.ShadeHeader.Values.ClockScale import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel.HeaderChipHighlight import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder import com.android.systemui.statusbar.phone.NotificationIconContainer import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernShadeCarrierGroupMobileView import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.ShadeCarrierGroupMobileIconViewModel import com.android.systemui.statusbar.policy.Clock import kotlinx.coroutines.launch object ShadeHeader { object Elements { Loading @@ -110,6 +107,8 @@ object ShadeHeader { object Dimensions { val CollapsedHeight = 48.dp val ExpandedHeight = 120.dp val ChipPaddingHorizontal = 8.dp val ChipPaddingVertical = 4.dp } object Colors { Loading Loading @@ -319,19 +318,10 @@ fun ContentScope.OverlayShadeHeader( ) Spacer(modifier = Modifier.width(5.dp)) } val chipHighlight = viewModel.notificationsChipHighlight NotificationIconChip( chipHighlight = chipHighlight, NotificationsChip( chipHighlight = viewModel.notificationsChipHighlight, onClick = viewModel::onNotificationIconChipClicked, ) { if (isShadeLayoutWide) { NotificationIcons( chipHighlight = chipHighlight, notificationIconContainerStatusBarViewBinder = viewModel.notificationIconContainerStatusBarViewBinder, modifier = Modifier.width(IntrinsicSize.Min).height(20.dp), ) } else { VariableDayDate( longerDateText = viewModel.longerDateText, shorterDateText = viewModel.shorterDateText, Loading @@ -339,7 +329,6 @@ fun ContentScope.OverlayShadeHeader( ) } } } }, endContent = { Row( Loading Loading @@ -559,31 +548,6 @@ private fun ShadeCarrierGroup(viewModel: ShadeHeaderViewModel, modifier: Modifie } } @Composable private fun NotificationIcons( chipHighlight: HeaderChipHighlight, notificationIconContainerStatusBarViewBinder: NotificationIconContainerStatusBarViewBinder, modifier: Modifier = Modifier, ) { val scope = rememberCoroutineScope() AndroidView( factory = { context -> NotificationIconContainer(context, null).also { view -> view.setOverrideIconColor(true) scope.launch { notificationIconContainerStatusBarViewBinder.bindWhileAttached( view = view, displayId = context.displayId, ) } } }, update = { it.setUseInverseOverrideIconColor(chipHighlight is HeaderChipHighlight.Strong) }, modifier = modifier, ) } @Composable private fun ContentScope.StatusIcons( viewModel: ShadeHeaderViewModel, Loading Loading @@ -664,34 +628,31 @@ private fun ContentScope.StatusIcons( } @Composable private fun NotificationIconChip( private fun NotificationsChip( chipHighlight: HeaderChipHighlight, onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit, content: @Composable BoxScope.() -> Unit, ) { val interactionSource = remember { MutableInteractionSource() } Box(modifier = modifier) { Row( val chipBackground = with(MaterialTheme.colorScheme) { if (chipHighlight is HeaderChipHighlight.Strong) chipHighlighted else chipBackground } Box( modifier = Modifier.align(Alignment.CenterStart) modifier .clickable( interactionSource = interactionSource, indication = null, onClick = { onClick() }, ) .clip(RoundedCornerShape(25.dp)) .background( if (chipHighlight is HeaderChipHighlight.Strong) MaterialTheme.colorScheme.chipHighlighted else MaterialTheme.colorScheme.chipBackground onClick = onClick, ) .padding(horizontal = 8.dp, vertical = 4.dp) .background(chipBackground, RoundedCornerShape(25.dp)) .padding(horizontal = ChipPaddingHorizontal, vertical = ChipPaddingVertical) ) { content() } } } @Composable private fun SystemIconChip( Loading @@ -703,23 +664,21 @@ private fun SystemIconChip( val interactionSource = remember { MutableInteractionSource() } val isHovered by interactionSource.collectIsHoveredAsState() val hoverModifier = Modifier.clip(RoundedCornerShape(CollapsedHeight / 4)) .background(MaterialTheme.colorScheme.onScrimDim) with(MaterialTheme.colorScheme) { Modifier.background(onScrimDim, RoundedCornerShape(CollapsedHeight / 4)) } val backgroundColor = if (chipHighlight is HeaderChipHighlight.Strong) MaterialTheme.colorScheme.chipHighlighted else MaterialTheme.colorScheme.chipBackground with(MaterialTheme.colorScheme) { if (chipHighlight is HeaderChipHighlight.Strong) chipHighlighted else chipBackground } Row( verticalAlignment = Alignment.CenterVertically, modifier = modifier .thenIf(chipHighlight !is HeaderChipHighlight.None) { Modifier.graphicsLayer { shape = RoundedCornerShape(25.dp) clip = true } .background(backgroundColor) .padding(horizontal = 8.dp, vertical = 4.dp) Modifier.background(backgroundColor, RoundedCornerShape(25.dp)) .padding(horizontal = ChipPaddingHorizontal, vertical = ChipPaddingVertical) } .thenIf(onClick != null) { Modifier.clickable( Loading packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt +0 −2 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ import com.android.systemui.shade.domain.interactor.PrivacyChipInteractor import com.android.systemui.shade.domain.interactor.ShadeHeaderClockInteractor import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.TintedIconManager Loading Loading @@ -74,7 +73,6 @@ constructor( private val tintedIconManagerFactory: TintedIconManager.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, val statusBarIconController: StatusBarIconController, val notificationIconContainerStatusBarViewBinder: NotificationIconContainerStatusBarViewBinder, ) : ExclusiveActivatable() { private val hydrator = Hydrator("ShadeHeaderViewModel.hydrator") Loading packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt +0 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.android.systemui.shade.domain.interactor.privacyChipInteractor import com.android.systemui.shade.domain.interactor.shadeHeaderClockInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.interactor.shadeModeInteractor import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.tintedIconManagerFactory import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.mobileIconsInteractor Loading @@ -47,8 +46,6 @@ val Kosmos.shadeHeaderViewModel: ShadeHeaderViewModel by tintedIconManagerFactory = tintedIconManagerFactory, batteryMeterViewControllerFactory = batteryMeterViewControllerFactory, statusBarIconController = mock<StatusBarIconController>(), notificationIconContainerStatusBarViewBinder = mock<NotificationIconContainerStatusBarViewBinder>(), ) } Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt +37 −78 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsHoveredAsState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer Loading @@ -43,10 +43,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.graphicsLayer Loading Loading @@ -80,18 +78,17 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader.Colors.chipBackground import com.android.systemui.shade.ui.composable.ShadeHeader.Colors.chipHighlighted import com.android.systemui.shade.ui.composable.ShadeHeader.Colors.onScrimDim import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.ChipPaddingHorizontal import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.ChipPaddingVertical import com.android.systemui.shade.ui.composable.ShadeHeader.Dimensions.CollapsedHeight import com.android.systemui.shade.ui.composable.ShadeHeader.Values.ClockScale import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel.HeaderChipHighlight import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder import com.android.systemui.statusbar.phone.NotificationIconContainer import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.StatusIconContainer import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernShadeCarrierGroupMobileView import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.ShadeCarrierGroupMobileIconViewModel import com.android.systemui.statusbar.policy.Clock import kotlinx.coroutines.launch object ShadeHeader { object Elements { Loading @@ -110,6 +107,8 @@ object ShadeHeader { object Dimensions { val CollapsedHeight = 48.dp val ExpandedHeight = 120.dp val ChipPaddingHorizontal = 8.dp val ChipPaddingVertical = 4.dp } object Colors { Loading Loading @@ -319,19 +318,10 @@ fun ContentScope.OverlayShadeHeader( ) Spacer(modifier = Modifier.width(5.dp)) } val chipHighlight = viewModel.notificationsChipHighlight NotificationIconChip( chipHighlight = chipHighlight, NotificationsChip( chipHighlight = viewModel.notificationsChipHighlight, onClick = viewModel::onNotificationIconChipClicked, ) { if (isShadeLayoutWide) { NotificationIcons( chipHighlight = chipHighlight, notificationIconContainerStatusBarViewBinder = viewModel.notificationIconContainerStatusBarViewBinder, modifier = Modifier.width(IntrinsicSize.Min).height(20.dp), ) } else { VariableDayDate( longerDateText = viewModel.longerDateText, shorterDateText = viewModel.shorterDateText, Loading @@ -339,7 +329,6 @@ fun ContentScope.OverlayShadeHeader( ) } } } }, endContent = { Row( Loading Loading @@ -559,31 +548,6 @@ private fun ShadeCarrierGroup(viewModel: ShadeHeaderViewModel, modifier: Modifie } } @Composable private fun NotificationIcons( chipHighlight: HeaderChipHighlight, notificationIconContainerStatusBarViewBinder: NotificationIconContainerStatusBarViewBinder, modifier: Modifier = Modifier, ) { val scope = rememberCoroutineScope() AndroidView( factory = { context -> NotificationIconContainer(context, null).also { view -> view.setOverrideIconColor(true) scope.launch { notificationIconContainerStatusBarViewBinder.bindWhileAttached( view = view, displayId = context.displayId, ) } } }, update = { it.setUseInverseOverrideIconColor(chipHighlight is HeaderChipHighlight.Strong) }, modifier = modifier, ) } @Composable private fun ContentScope.StatusIcons( viewModel: ShadeHeaderViewModel, Loading Loading @@ -664,34 +628,31 @@ private fun ContentScope.StatusIcons( } @Composable private fun NotificationIconChip( private fun NotificationsChip( chipHighlight: HeaderChipHighlight, onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable RowScope.() -> Unit, content: @Composable BoxScope.() -> Unit, ) { val interactionSource = remember { MutableInteractionSource() } Box(modifier = modifier) { Row( val chipBackground = with(MaterialTheme.colorScheme) { if (chipHighlight is HeaderChipHighlight.Strong) chipHighlighted else chipBackground } Box( modifier = Modifier.align(Alignment.CenterStart) modifier .clickable( interactionSource = interactionSource, indication = null, onClick = { onClick() }, ) .clip(RoundedCornerShape(25.dp)) .background( if (chipHighlight is HeaderChipHighlight.Strong) MaterialTheme.colorScheme.chipHighlighted else MaterialTheme.colorScheme.chipBackground onClick = onClick, ) .padding(horizontal = 8.dp, vertical = 4.dp) .background(chipBackground, RoundedCornerShape(25.dp)) .padding(horizontal = ChipPaddingHorizontal, vertical = ChipPaddingVertical) ) { content() } } } @Composable private fun SystemIconChip( Loading @@ -703,23 +664,21 @@ private fun SystemIconChip( val interactionSource = remember { MutableInteractionSource() } val isHovered by interactionSource.collectIsHoveredAsState() val hoverModifier = Modifier.clip(RoundedCornerShape(CollapsedHeight / 4)) .background(MaterialTheme.colorScheme.onScrimDim) with(MaterialTheme.colorScheme) { Modifier.background(onScrimDim, RoundedCornerShape(CollapsedHeight / 4)) } val backgroundColor = if (chipHighlight is HeaderChipHighlight.Strong) MaterialTheme.colorScheme.chipHighlighted else MaterialTheme.colorScheme.chipBackground with(MaterialTheme.colorScheme) { if (chipHighlight is HeaderChipHighlight.Strong) chipHighlighted else chipBackground } Row( verticalAlignment = Alignment.CenterVertically, modifier = modifier .thenIf(chipHighlight !is HeaderChipHighlight.None) { Modifier.graphicsLayer { shape = RoundedCornerShape(25.dp) clip = true } .background(backgroundColor) .padding(horizontal = 8.dp, vertical = 4.dp) Modifier.background(backgroundColor, RoundedCornerShape(25.dp)) .padding(horizontal = ChipPaddingHorizontal, vertical = ChipPaddingVertical) } .thenIf(onClick != null) { Modifier.clickable( Loading
packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt +0 −2 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ import com.android.systemui.shade.domain.interactor.PrivacyChipInteractor import com.android.systemui.shade.domain.interactor.ShadeHeaderClockInteractor import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder import com.android.systemui.statusbar.phone.StatusBarLocation import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.TintedIconManager Loading Loading @@ -74,7 +73,6 @@ constructor( private val tintedIconManagerFactory: TintedIconManager.Factory, private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory, val statusBarIconController: StatusBarIconController, val notificationIconContainerStatusBarViewBinder: NotificationIconContainerStatusBarViewBinder, ) : ExclusiveActivatable() { private val hydrator = Hydrator("ShadeHeaderViewModel.hydrator") Loading
packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt +0 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.android.systemui.shade.domain.interactor.privacyChipInteractor import com.android.systemui.shade.domain.interactor.shadeHeaderClockInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.interactor.shadeModeInteractor import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder import com.android.systemui.statusbar.phone.ui.StatusBarIconController import com.android.systemui.statusbar.phone.ui.tintedIconManagerFactory import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.mobileIconsInteractor Loading @@ -47,8 +46,6 @@ val Kosmos.shadeHeaderViewModel: ShadeHeaderViewModel by tintedIconManagerFactory = tintedIconManagerFactory, batteryMeterViewControllerFactory = batteryMeterViewControllerFactory, statusBarIconController = mock<StatusBarIconController>(), notificationIconContainerStatusBarViewBinder = mock<NotificationIconContainerStatusBarViewBinder>(), ) } Loading