diff options
5 files changed, 52 insertions, 41 deletions
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index 177ba598add7..212dae279387 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -233,6 +233,7 @@ <item type="id" name="smart_space_barrier_bottom" /> <item type="id" name="small_clock_guideline_top" /> <item type="id" name="weather_clock_date_and_icons_barrier_bottom" /> + <item type="id" name="weather_clock_bc_smartspace_bottom" /> <item type="id" name="accessibility_actions_view" /> <!-- Privacy dialog --> diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt index f2821a0f49d2..e0633807db88 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt @@ -37,6 +37,10 @@ import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.plugins.clocks.AodClockBurnInModel import com.android.systemui.plugins.clocks.ClockController +import com.android.systemui.util.ui.value +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch object KeyguardClockViewBinder { @@ -99,15 +103,20 @@ object KeyguardClockViewBinder { launch { if (!MigrateClocksToBlueprint.isEnabled) return@launch - viewModel.isAodIconsVisible.collect { - viewModel.currentClock.value?.let { - if ( - viewModel.isLargeClockVisible.value && it.config.useCustomClockScene - ) { - blueprintInteractor.refreshBlueprint(Type.DefaultTransition) + combine( + viewModel.hasAodIcons, + rootViewModel.isNotifIconContainerVisible.map { it.value } + ) { hasIcon, isVisible -> + hasIcon && isVisible + } + .distinctUntilChanged() + .collect { _ -> + viewModel.currentClock.value?.let { + if (it.config.useCustomClockScene) { + blueprintInteractor.refreshBlueprint(Type.DefaultTransition) + } } } - } } launch { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt index 34a1da54c123..0637bba9f1de 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt @@ -45,6 +45,7 @@ import com.android.systemui.plugins.clocks.ClockController import com.android.systemui.plugins.clocks.ClockFaceLayout import com.android.systemui.res.R import com.android.systemui.shared.R as sharedR +import com.android.systemui.util.ui.value import dagger.Lazy import javax.inject.Inject @@ -70,6 +71,7 @@ constructor( private val rootViewModel: KeyguardRootViewModel, ) : KeyguardSection() { override fun addViews(constraintLayout: ConstraintLayout) {} + override fun bindData(constraintLayout: ConstraintLayout) { if (!MigrateClocksToBlueprint.isEnabled) { return @@ -121,35 +123,39 @@ constructor( private fun getTargetClockFace(clock: ClockController): ClockFaceLayout = if (keyguardClockViewModel.isLargeClockVisible.value) clock.largeClock.layout else clock.smallClock.layout + private fun getNonTargetClockFace(clock: ClockController): ClockFaceLayout = if (keyguardClockViewModel.isLargeClockVisible.value) clock.smallClock.layout else clock.largeClock.layout fun constrainWeatherClockDateIconsBarrier(constraints: ConstraintSet) { constraints.apply { - if (keyguardClockViewModel.isAodIconsVisible.value) { + createBarrier( + R.id.weather_clock_bc_smartspace_bottom, + Barrier.BOTTOM, + getDimen(ENHANCED_SMARTSPACE_HEIGHT), + (custR.id.weather_clock_time) + ) + if ( + rootViewModel.isNotifIconContainerVisible.value.value && + keyguardClockViewModel.hasAodIcons.value + ) { createBarrier( R.id.weather_clock_date_and_icons_barrier_bottom, Barrier.BOTTOM, 0, - *intArrayOf(sharedR.id.bc_smartspace_view, R.id.aod_notification_icon_container) + *intArrayOf( + R.id.aod_notification_icon_container, + R.id.weather_clock_bc_smartspace_bottom + ) ) } else { - if (smartspaceViewModel.bcSmartspaceVisibility.value == VISIBLE) { - createBarrier( - R.id.weather_clock_date_and_icons_barrier_bottom, - Barrier.BOTTOM, - 0, - (sharedR.id.bc_smartspace_view) - ) - } else { - createBarrier( - R.id.weather_clock_date_and_icons_barrier_bottom, - Barrier.BOTTOM, - getDimen(ENHANCED_SMARTSPACE_HEIGHT), - (R.id.lockscreen_clock_view) - ) - } + createBarrier( + R.id.weather_clock_date_and_icons_barrier_bottom, + Barrier.BOTTOM, + 0, + *intArrayOf(R.id.weather_clock_bc_smartspace_bottom) + ) } } } @@ -198,6 +204,7 @@ constructor( companion object { private const val DATE_WEATHER_VIEW_HEIGHT = "date_weather_view_height" private const val ENHANCED_SMARTSPACE_HEIGHT = "enhanced_smartspace_height" + fun getDimen(context: Context, name: String): Int { val res = context.packageManager.getResourcesForApplication(context.packageName) val id = res.getIdentifier(name, "dimen", context.packageName) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt index f5c521a3d8c7..573b75e623fb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt @@ -31,7 +31,6 @@ import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeMode -import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.ui.SystemBarUtilsProxy import javax.inject.Inject @@ -50,7 +49,6 @@ constructor( keyguardClockInteractor: KeyguardClockInteractor, @Application private val applicationScope: CoroutineScope, aodNotificationIconViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, - notifsKeyguardInteractor: NotificationsKeyguardInteractor, @get:VisibleForTesting val shadeInteractor: ShadeInteractor, private val systemBarUtils: SystemBarUtilsProxy, configurationInteractor: ConfigurationInteractor, @@ -90,14 +88,13 @@ constructor( currentClock?.let { clock -> val face = if (isLargeClock) clock.largeClock else clock.smallClock face.config.hasCustomWeatherDataDisplay - } - ?: false + } ?: false } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), - initialValue = currentClock.value?.largeClock?.config?.hasCustomWeatherDataDisplay - ?: false + initialValue = + currentClock.value?.largeClock?.config?.hasCustomWeatherDataDisplay ?: false ) val clockShouldBeCentered: StateFlow<Boolean> = @@ -109,15 +106,14 @@ constructor( // To translate elements below smartspace in weather clock to avoid overlapping between date // element in weather clock and aod icons - val isAodIconsVisible: StateFlow<Boolean> = combine(aodNotificationIconViewModel.icons.map { - it.visibleIcons.isNotEmpty() - }, notifsKeyguardInteractor.areNotificationsFullyHidden) { hasIcons, visible -> - hasIcons && visible - }.stateIn( - scope = applicationScope, - started = SharingStarted.WhileSubscribed(), - initialValue = false - ) + val hasAodIcons: StateFlow<Boolean> = + aodNotificationIconViewModel.icons + .map { it.visibleIcons.isNotEmpty() } + .stateIn( + scope = applicationScope, + started = SharingStarted.WhileSubscribed(), + initialValue = false + ) val currentClockLayout: StateFlow<ClockLayout> = combine( diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt index 3c62b44ed2c4..b5e6f75c7915 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt @@ -23,7 +23,6 @@ import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.notification.icon.ui.viewmodel.notificationIconContainerAlwaysOnDisplayViewModel -import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor import com.android.systemui.statusbar.ui.systemBarUtilsProxy val Kosmos.keyguardClockViewModel by @@ -32,7 +31,6 @@ val Kosmos.keyguardClockViewModel by keyguardClockInteractor = keyguardClockInteractor, applicationScope = applicationCoroutineScope, aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel, - notifsKeyguardInteractor = notificationsKeyguardInteractor, shadeInteractor = shadeInteractor, systemBarUtils = systemBarUtilsProxy, configurationInteractor = configurationInteractor, |