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

Commit 2310e1c6 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Handle split shade and alpha" into main

parents c5140b0a 1376825f
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.approachLayout
import androidx.compose.ui.layout.onPlaced
import androidx.compose.ui.layout.onSizeChanged
@@ -236,14 +237,16 @@ constructor(
            AnimatedVisibility(
                visible = viewModel.isQsVisible,
                modifier =
                    Modifier.windowInsetsPadding(WindowInsets.navigationBars)
                    Modifier.graphicsLayer { alpha = viewModel.viewAlpha }
                        .windowInsetsPadding(WindowInsets.navigationBars)
                        // Clipping before translation to match QSContainerImpl.onDraw
                        .offset {
                            IntOffset(x = 0, y = viewModel.viewTranslationY.fastRoundToInt())
                        }
                        .thenIf(notificationScrimClippingParams.isEnabled) {
                            Modifier.notificationScrimClip {
                                notificationScrimClippingParams.params
                            }
                        }
                        .offset {
                            IntOffset(x = 0, y = viewModel.viewTranslationY.fastRoundToInt())
                        },
            ) {
                val isEditing by
+49 −7
Original line number Diff line number Diff line
@@ -26,10 +26,15 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.lifecycle.LifecycleCoroutineScope
import com.android.keyguard.BouncerPanelExpansionCalculator
import com.android.systemui.Dumpable
import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.Hydrator
import com.android.systemui.plugins.statusbar.StatusBarStateController
@@ -39,6 +44,7 @@ import com.android.systemui.qs.panels.domain.interactor.TileSquishinessInteracto
import com.android.systemui.qs.panels.ui.viewmodel.PaginatedGridViewModel
import com.android.systemui.qs.ui.viewmodel.QuickSettingsContainerViewModel
import com.android.systemui.res.R
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator
import com.android.systemui.statusbar.StatusBarState
@@ -67,13 +73,14 @@ class QSFragmentComposeViewModel
constructor(
    val containerViewModel: QuickSettingsContainerViewModel,
    @Main private val resources: Resources,
    private val footerActionsViewModelFactory: FooterActionsViewModel.Factory,
    footerActionsViewModelFactory: FooterActionsViewModel.Factory,
    private val footerActionsController: FooterActionsController,
    private val sysuiStatusBarStateController: SysuiStatusBarStateController,
    private val deviceEntryInteractor: DeviceEntryInteractor,
    private val disableFlagsRepository: DisableFlagsRepository,
    deviceEntryInteractor: DeviceEntryInteractor,
    disableFlagsRepository: DisableFlagsRepository,
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
    private val largeScreenShadeInterpolator: LargeScreenShadeInterpolator,
    private val configurationInteractor: ConfigurationInteractor,
    configurationInteractor: ConfigurationInteractor,
    private val largeScreenHeaderHelper: LargeScreenHeaderHelper,
    private val squishinessInteractor: TileSquishinessInteractor,
    private val paginatedGridViewModel: PaginatedGridViewModel,
@@ -203,6 +210,16 @@ constructor(
        if (onKeyguardAndExpanded) panelTranslationY else 0f
    }

    val viewAlpha by derivedStateOf {
        when {
            isInBouncerTransit ->
                BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(alphaProgress)
            isKeyguardState -> alphaProgress
            isSmallScreen -> ShadeInterpolation.getContentAlpha(alphaProgress)
            else -> largeScreenShadeInterpolator.getQsAlpha(alphaProgress)
        }
    }

    private var qsBounds by mutableStateOf(Rect())

    private val constrainedSquishinessFraction: Float
@@ -210,8 +227,6 @@ constructor(

    private var _headerAnimating by mutableStateOf(false)

    private var keyguardAndExpanded by mutableStateOf(false)

    /**
     * Tracks the current [StatusBarState]. It will switch early if the upcoming state is
     * [StatusBarState.KEYGUARD]
@@ -271,12 +286,37 @@ constructor(
    }

    private val translationScaleY: Float
        get() = (qsExpansion - 1) * (if (isInSplitShade) 1f else SHORT_PARALLAX_AMOUNT)
        get() = ((qsExpansion - 1) * (if (isInSplitShade) 1f else SHORT_PARALLAX_AMOUNT))

    private val headerTranslation by derivedStateOf {
        if (isTransitioningToFullShade) 0f else proposedTranslation
    }

    private val alphaProgress by derivedStateOf {
        when {
            isSmallScreen -> 1f
            isInSplitShade ->
                if (isTransitioningToFullShade || isKeyguardState) {
                    lockscreenToShadeProgress
                } else {
                    panelExpansionFraction
                }
            isTransitioningToFullShade -> lockscreenToShadeProgress
            else -> panelExpansionFraction
        }
    }

    private val isInBouncerTransit by
        hydrator.hydratedStateOf(
            traceName = "isInBouncerTransit",
            initialValue = false,
            source =
                keyguardTransitionInteractor.isInTransition(
                    Edge.create(to = Scenes.Bouncer),
                    Edge.create(to = KeyguardState.PRIMARY_BOUNCER),
                ),
        )

    override suspend fun onActivated(): Nothing {
        coroutineScope {
            launch { hydrateSquishinessInteractor() }
@@ -310,10 +350,12 @@ constructor(
                    println("translationScaleY", translationScaleY)
                    println("viewTranslationY", viewTranslationY)
                    println("qsScrollTranslationY", qsScrollTranslationY)
                    println("viewAlpha", viewAlpha)
                }
            }
            printSection("Shade state") {
                println("stackOverscrolling", isStackScrollerOverscrolling)
                println("overscrollAmount", overScrollAmount)
                println("statusBarState", StatusBarState.toString(statusBarState))
                println("isKeyguardState", isKeyguardState)
                println("isSmallScreen", isSmallScreen)
+4 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.res.mainResources
import androidx.lifecycle.LifecycleCoroutineScope
import com.android.systemui.common.ui.domain.interactor.configurationInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.qs.footerActionsController
import com.android.systemui.qs.footerActionsViewModelFactory
@@ -30,7 +31,9 @@ import com.android.systemui.shade.largeScreenHeaderHelper
import com.android.systemui.shade.transition.largeScreenShadeInterpolator
import com.android.systemui.statusbar.disableflags.data.repository.disableFlagsRepository
import com.android.systemui.statusbar.sysuiStatusBarStateController
import kotlinx.coroutines.ExperimentalCoroutinesApi

@OptIn(ExperimentalCoroutinesApi::class)
val Kosmos.qsFragmentComposeViewModelFactory by
    Kosmos.Fixture {
        object : QSFragmentComposeViewModel.Factory {
@@ -45,6 +48,7 @@ val Kosmos.qsFragmentComposeViewModelFactory by
                    sysuiStatusBarStateController,
                    deviceEntryInteractor,
                    disableFlagsRepository,
                    keyguardTransitionInteractor,
                    largeScreenShadeInterpolator,
                    configurationInteractor,
                    largeScreenHeaderHelper,