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

Commit 5e3399b1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

parents d2e412e9 cb570a34
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()