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

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

Fix AodNotifIcons overlapping with date view in large weather clock

Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint DEVELOPMENT
Test: atest WeatherClockFaceLayoutTest, ClockSectionTest, manually test with smartspace and notification
Bug: 319141259

Change-Id: Iaff2caefd728cc486d0e56237d43d39d98e5d486
parent f227a2bc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@
    <item type="id" name="ambient_indication_container" />
    <item type="id" name="status_view_media_container" />
    <item type="id" name="smart_space_barrier_bottom" />
    <item type="id" name="weather_clock_date_and_icons_barrier_bottom" />

    <!-- Privacy dialog -->
    <item type="id" name="privacy_dialog_close_app_button" />
+6 −0
Original line number Diff line number Diff line
@@ -89,6 +89,12 @@ object KeyguardClockViewBinder {
                        }
                    }
                }
                launch {
                    if (!migrateClocksToBlueprint()) return@launch
                    viewModel.isAodIconsVisible.collect {
                        applyConstraints(clockSection, keyguardRootView, true)
                    }
                }
            }
        }
    }
+0 −1
Original line number Diff line number Diff line
@@ -57,7 +57,6 @@ constructor(
    private var nicBindingDisposable: DisposableHandle? = null
    private val nicId = R.id.aod_notification_icon_container
    private lateinit var nic: NotificationIconContainer
    private val smartSpaceBarrier = View.generateViewId()

    override fun addViews(constraintLayout: ConstraintLayout) {
        if (!KeyguardShadeMigrationNssl.isEnabled) {
+34 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.view.layout.sections

import android.content.Context
import android.view.View
import androidx.constraintlayout.widget.Barrier
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
@@ -35,6 +36,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
import com.android.systemui.keyguard.shared.model.KeyguardSection
import com.android.systemui.keyguard.ui.binder.KeyguardClockViewBinder
import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.plugins.clocks.ClockFaceLayout
import com.android.systemui.res.R
@@ -61,6 +63,7 @@ constructor(
    protected val keyguardClockViewModel: KeyguardClockViewModel,
    private val context: Context,
    private val splitShadeStateController: SplitShadeStateController,
    val smartspaceViewModel: KeyguardSmartspaceViewModel,
    val blueprintInteractor: Lazy<KeyguardBlueprintInteractor>,
) : KeyguardSection() {
    override fun addViews(constraintLayout: ConstraintLayout) {}
@@ -117,6 +120,35 @@ constructor(

    private fun getLargeClockFace(clock: ClockController): ClockFaceLayout = clock.largeClock.layout
    private fun getSmallClockFace(clock: ClockController): ClockFaceLayout = clock.smallClock.layout

    fun constrainWeatherClockDateIconsBarrier(constraints: ConstraintSet) {
        constraints.apply {
            if (keyguardClockViewModel.isAodIconsVisible.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)
                )
            } 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)
                    )
                }
            }
        }
    }
    open fun applyDefaultConstraints(constraints: ConstraintSet) {
        val guideline =
            if (keyguardClockViewModel.clockShouldBeCentered.value) PARENT_ID
@@ -173,6 +205,8 @@ constructor(
            }
            connect(R.id.lockscreen_clock_view, TOP, PARENT_ID, TOP, smallClockTopMargin)
        }

        constrainWeatherClockDateIconsBarrier(constraints)
    }

    private fun getDimen(name: String): Int {
+9 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.shared.model.SettingsClockSize
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.res.R
import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
import com.android.systemui.statusbar.policy.SplitShadeStateController
import com.android.systemui.util.Utils
import javax.inject.Inject
@@ -44,6 +45,7 @@ constructor(
    private val keyguardClockInteractor: KeyguardClockInteractor,
    @Application private val applicationScope: CoroutineScope,
    private val splitShadeStateController: SplitShadeStateController,
    notifsKeyguardInteractor: NotificationsKeyguardInteractor,
) {
    var burnInLayer: Layer? = null
    val useLargeClock: Boolean
@@ -91,6 +93,13 @@ constructor(
            initialValue = false
        )

    val isAodIconsVisible: StateFlow<Boolean> =
        notifsKeyguardInteractor.areNotificationsFullyHidden.stateIn(
            scope = applicationScope,
            started = SharingStarted.WhileSubscribed(),
            initialValue = false
        )

    // Needs to use a non application context to get display cutout.
    fun getSmallClockTopMargin(context: Context) =
        if (splitShadeStateController.shouldUseSplitNotificationShade(context.resources)) {
Loading