Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b0e32440 authored by Sherry Zhou's avatar Sherry Zhou
Browse files

Reland "Fix there's no padding between time and date in large weather clock in AOD"

The reason is that both bcSmartspace and aodIconContainer may be gone
when use them as the barrier.

Flag: com.android.systemui.migrate_clocks_to_blueprint
Bug: 346748432
Test: screenshotTest, manually test locking screen with power button, observe there's
padding when there's no notifications or smartspace

Change-Id: Ifde90d64f3818dd36ef31ff47e512727b398e193
parent 1f8ddb15
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 -->
+16 −7
Original line number Diff line number Diff line
@@ -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,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)
                                }
                            }
+24 −17
Original line number Diff line number Diff line
@@ -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,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 =
@@ -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)
+11 −15
Original line number Diff line number Diff line
@@ -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,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
+0 −2
Original line number Diff line number Diff line
@@ -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,