Loading packages/SystemUI/res/values/ids.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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 --> Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt +16 −7 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -99,11 +103,16 @@ object KeyguardClockViewBinder { launch { if (!MigrateClocksToBlueprint.isEnabled) return@launch viewModel.isAodIconsVisible.collect { combine( viewModel.hasAodIcons, rootViewModel.isNotifIconContainerVisible.map { it.value } ) { hasIcon, isVisible -> hasIcon && isVisible } .distinctUntilChanged() .collect { _ -> viewModel.currentClock.value?.let { if ( viewModel.isLargeClockVisible.value && it.config.useCustomClockScene ) { if (it.config.useCustomClockScene) { blueprintInteractor.refreshBlueprint(Type.DefaultTransition) } } Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt +24 −17 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -70,6 +71,7 @@ constructor( private val rootViewModel: KeyguardRootViewModel, ) : KeyguardSection() { override fun addViews(constraintLayout: ConstraintLayout) {} override fun bindData(constraintLayout: ConstraintLayout) { if (!MigrateClocksToBlueprint.isEnabled) { return Loading Loading @@ -121,38 +123,42 @@ 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_date_and_icons_barrier_bottom, R.id.weather_clock_bc_smartspace_bottom, Barrier.BOTTOM, 0, *intArrayOf(sharedR.id.bc_smartspace_view, R.id.aod_notification_icon_container) getDimen(ENHANCED_SMARTSPACE_HEIGHT), (custR.id.weather_clock_time) ) } else { if (smartspaceViewModel.bcSmartspaceVisibility.value == VISIBLE) { if ( rootViewModel.isNotifIconContainerVisible.value.value && keyguardClockViewModel.hasAodIcons.value ) { createBarrier( R.id.weather_clock_date_and_icons_barrier_bottom, Barrier.BOTTOM, 0, (sharedR.id.bc_smartspace_view) *intArrayOf( R.id.aod_notification_icon_container, R.id.weather_clock_bc_smartspace_bottom ) ) } else { createBarrier( R.id.weather_clock_date_and_icons_barrier_bottom, Barrier.BOTTOM, getDimen(ENHANCED_SMARTSPACE_HEIGHT), (R.id.lockscreen_clock_view) 0, *intArrayOf(R.id.weather_clock_bc_smartspace_bottom) ) } } } } open fun applyDefaultConstraints(constraints: ConstraintSet) { val guideline = Loading Loading @@ -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) Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt +11 −15 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading Loading @@ -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> = Loading @@ -109,11 +106,10 @@ 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( val hasAodIcons: StateFlow<Boolean> = aodNotificationIconViewModel.icons .map { it.visibleIcons.isNotEmpty() } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), initialValue = false Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt +0 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -32,7 +31,6 @@ val Kosmos.keyguardClockViewModel by keyguardClockInteractor = keyguardClockInteractor, applicationScope = applicationCoroutineScope, aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel, notifsKeyguardInteractor = notificationsKeyguardInteractor, shadeInteractor = shadeInteractor, systemBarUtils = systemBarUtilsProxy, configurationInteractor = configurationInteractor, Loading Loading
packages/SystemUI/res/values/ids.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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 --> Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt +16 −7 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -99,11 +103,16 @@ object KeyguardClockViewBinder { launch { if (!MigrateClocksToBlueprint.isEnabled) return@launch viewModel.isAodIconsVisible.collect { combine( viewModel.hasAodIcons, rootViewModel.isNotifIconContainerVisible.map { it.value } ) { hasIcon, isVisible -> hasIcon && isVisible } .distinctUntilChanged() .collect { _ -> viewModel.currentClock.value?.let { if ( viewModel.isLargeClockVisible.value && it.config.useCustomClockScene ) { if (it.config.useCustomClockScene) { blueprintInteractor.refreshBlueprint(Type.DefaultTransition) } } Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt +24 −17 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -70,6 +71,7 @@ constructor( private val rootViewModel: KeyguardRootViewModel, ) : KeyguardSection() { override fun addViews(constraintLayout: ConstraintLayout) {} override fun bindData(constraintLayout: ConstraintLayout) { if (!MigrateClocksToBlueprint.isEnabled) { return Loading Loading @@ -121,38 +123,42 @@ 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_date_and_icons_barrier_bottom, R.id.weather_clock_bc_smartspace_bottom, Barrier.BOTTOM, 0, *intArrayOf(sharedR.id.bc_smartspace_view, R.id.aod_notification_icon_container) getDimen(ENHANCED_SMARTSPACE_HEIGHT), (custR.id.weather_clock_time) ) } else { if (smartspaceViewModel.bcSmartspaceVisibility.value == VISIBLE) { if ( rootViewModel.isNotifIconContainerVisible.value.value && keyguardClockViewModel.hasAodIcons.value ) { createBarrier( R.id.weather_clock_date_and_icons_barrier_bottom, Barrier.BOTTOM, 0, (sharedR.id.bc_smartspace_view) *intArrayOf( R.id.aod_notification_icon_container, R.id.weather_clock_bc_smartspace_bottom ) ) } else { createBarrier( R.id.weather_clock_date_and_icons_barrier_bottom, Barrier.BOTTOM, getDimen(ENHANCED_SMARTSPACE_HEIGHT), (R.id.lockscreen_clock_view) 0, *intArrayOf(R.id.weather_clock_bc_smartspace_bottom) ) } } } } open fun applyDefaultConstraints(constraints: ConstraintSet) { val guideline = Loading Loading @@ -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) Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt +11 −15 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading Loading @@ -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> = Loading @@ -109,11 +106,10 @@ 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( val hasAodIcons: StateFlow<Boolean> = aodNotificationIconViewModel.icons .map { it.visibleIcons.isNotEmpty() } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), initialValue = false Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt +0 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -32,7 +31,6 @@ val Kosmos.keyguardClockViewModel by keyguardClockInteractor = keyguardClockInteractor, applicationScope = applicationCoroutineScope, aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel, notifsKeyguardInteractor = notificationsKeyguardInteractor, shadeInteractor = shadeInteractor, systemBarUtils = systemBarUtilsProxy, configurationInteractor = configurationInteractor, Loading