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

Commit cb570a34 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix bouncer scrim animation on split shade" into tm-qpr-dev

parents 966a4e4e 7341405a
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -2,10 +2,13 @@ package com.android.systemui.statusbar.phone.shade.transition

import android.content.res.Configuration
import android.content.res.Resources
import android.util.MathUtils.constrain
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
import com.android.systemui.statusbar.policy.ConfigurationController
@@ -21,7 +24,8 @@ constructor(
    configurationController: ConfigurationController,
    dumpManager: DumpManager,
    private val scrimController: ScrimController,
    @Main private val resources: Resources
    @Main private val resources: Resources,
    private val statusBarStateController: SysuiStatusBarStateController,
) {

    private var inSplitShade = false
@@ -55,19 +59,23 @@ constructor(
    }

    private fun calculateScrimExpansionFraction(expansionEvent: PanelExpansionChangeEvent): Float {
        return if (inSplitShade) {
            expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance
        return if (inSplitShade && isScreenUnlocked()) {
            constrain(expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance, 0f, 1f)
        } else {
            expansionEvent.fraction
        }
    }

    private fun isScreenUnlocked() =
        statusBarStateController.currentOrUpcomingState == StatusBarState.SHADE

    private fun dump(printWriter: PrintWriter, args: Array<String>) {
        printWriter.println(
            """
                ScrimShadeTransitionController:
                  Resources:
                    inSplitShade: $inSplitShade
                    isScreenUnlocked: ${isScreenUnlocked()}
                    splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance
                  State:
                    lastExpansionFraction: $lastExpansionFraction
+61 −2
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@ import androidx.test.filters.SmallTest
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
import com.android.systemui.statusbar.policy.FakeConfigurationController
@@ -13,6 +15,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations

@RunWith(AndroidTestingRunner::class)
@@ -21,6 +24,7 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {

    @Mock private lateinit var scrimController: ScrimController
    @Mock private lateinit var dumpManager: DumpManager
    @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController
    private val configurationController = FakeConfigurationController()

    private lateinit var controller: ScrimShadeTransitionController
@@ -31,9 +35,14 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {
        context.ensureTestableResources()
        controller =
            ScrimShadeTransitionController(
                configurationController, dumpManager, scrimController, context.resources
                configurationController,
                dumpManager,
                scrimController,
                context.resources,
                statusBarStateController
            )
    }

    @Test
    fun onPanelExpansionChanged_inSingleShade_setsFractionEqualToEventFraction() {
        setSplitShadeEnabled(false)
@@ -44,7 +53,9 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {
    }

    @Test
    fun onPanelExpansionChanged_inSplitShade_setsFractionBasedOnDragDownAmount() {
    fun onPanelExpansionChanged_inSplitShade_unlockedShade_setsFractionBasedOnDragDownAmount() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.SHADE)
        val scrimShadeTransitionDistance =
            context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
        setSplitShadeEnabled(true)
@@ -55,6 +66,54 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {
        verify(scrimController).setRawPanelExpansionFraction(expectedFraction)
    }

    @Test
    fun onPanelExpansionChanged_inSplitShade_largeDragDownAmount_fractionIsNotGreaterThan1() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.SHADE)
        val scrimShadeTransitionDistance =
            context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
        setSplitShadeEnabled(true)

        controller.onPanelExpansionChanged(
            EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance)
        )

        verify(scrimController).setRawPanelExpansionFraction(1f)
    }

    @Test
    fun onPanelExpansionChanged_inSplitShade_negativeDragDownAmount_fractionIsNotLessThan0() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.SHADE)
        setSplitShadeEnabled(true)

        controller.onPanelExpansionChanged(EXPANSION_EVENT.copy(dragDownPxAmount = -100f))

        verify(scrimController).setRawPanelExpansionFraction(0f)
    }

    @Test
    fun onPanelExpansionChanged_inSplitShade_onLockedShade_setsFractionEqualToEventFraction() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.SHADE_LOCKED)
        setSplitShadeEnabled(true)

        controller.onPanelExpansionChanged(EXPANSION_EVENT)

        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
    }

    @Test
    fun onPanelExpansionChanged_inSplitShade_onKeyguard_setsFractionEqualToEventFraction() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.KEYGUARD)
        setSplitShadeEnabled(true)

        controller.onPanelExpansionChanged(EXPANSION_EVENT)

        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
    }

    private fun setSplitShadeEnabled(enabled: Boolean) {
        overrideResource(R.bool.config_use_split_notification_shade, enabled)
        configurationController.notifyConfigurationChanged()