summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Danny Burakov <burakov@google.com> 2025-02-19 10:24:28 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-19 10:24:28 -0800
commit30ca69ca530f42e9fc1b128a799717a1bca92b5e (patch)
tree30f62a48077250810999c5fc3ea006d0f3a3b52e
parent20b53c15c88a54785ba80922753b248abcb0bc81 (diff)
parentc99d8b933c87134b50a49aeab5a818ac266324ee (diff)
Merge "[Dual Shade] Always show the date on shade header, never notif icons." into main
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt115
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt3
3 files changed, 37 insertions, 83 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
index 30623acbbd31..5e12ee1b18fa 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
@@ -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
@@ -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
@@ -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 {
@@ -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 {
@@ -319,25 +318,15 @@ 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,
- chipHighlight = viewModel.notificationsChipHighlight,
- )
- }
+ VariableDayDate(
+ longerDateText = viewModel.longerDateText,
+ shorterDateText = viewModel.shorterDateText,
+ chipHighlight = viewModel.notificationsChipHighlight,
+ )
}
}
},
@@ -560,31 +549,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,
useExpandedFormat: Boolean,
@@ -664,32 +628,29 @@ 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(
- modifier =
- Modifier.align(Alignment.CenterStart)
- .clickable(
- interactionSource = interactionSource,
- indication = null,
- onClick = { onClick() },
- )
- .clip(RoundedCornerShape(25.dp))
- .background(
- if (chipHighlight is HeaderChipHighlight.Strong)
- MaterialTheme.colorScheme.chipHighlighted
- else MaterialTheme.colorScheme.chipBackground
- )
- .padding(horizontal = 8.dp, vertical = 4.dp)
- ) {
- content()
+ val chipBackground =
+ with(MaterialTheme.colorScheme) {
+ if (chipHighlight is HeaderChipHighlight.Strong) chipHighlighted else chipBackground
}
+ Box(
+ modifier =
+ modifier
+ .clickable(
+ interactionSource = interactionSource,
+ indication = null,
+ onClick = onClick,
+ )
+ .background(chipBackground, RoundedCornerShape(25.dp))
+ .padding(horizontal = ChipPaddingHorizontal, vertical = ChipPaddingVertical)
+ ) {
+ content()
}
}
@@ -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(
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt
index 63161db7902b..4adc1a5ae746 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModel.kt
@@ -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
@@ -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")
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt
index 2f8387b2d0f9..34e5bfde43c9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/ShadeHeaderViewModelKosmos.kt
@@ -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
@@ -47,8 +46,6 @@ val Kosmos.shadeHeaderViewModel: ShadeHeaderViewModel by
tintedIconManagerFactory = tintedIconManagerFactory,
batteryMeterViewControllerFactory = batteryMeterViewControllerFactory,
statusBarIconController = mock<StatusBarIconController>(),
- notificationIconContainerStatusBarViewBinder =
- mock<NotificationIconContainerStatusBarViewBinder>(),
)
}