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

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

Merge "[Split shade][Motion] Fix scrim not being fully opaque after shade...

Merge "[Split shade][Motion] Fix scrim not being fully opaque after shade expansion" into tm-qpr-dev am: 0ec6e127

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19084488



Change-Id: Ib3cb9a76ffc31576fff946ee2ee9f097d837ad42
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 149e65e1 0ec6e127
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.IntDef
import android.util.Log
import androidx.annotation.FloatRange
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.util.Compile
import javax.inject.Inject

/**
@@ -109,8 +110,8 @@ class PanelExpansionStateManager @Inject constructor() {

        debugLog(
            "panelExpansionChanged:" +
                    "start state=${oldState.stateToString()} " +
                    "end state=${state.stateToString()} " +
                    "start state=${oldState.panelStateToString()} " +
                    "end state=${state.panelStateToString()} " +
                    "f=$fraction " +
                    "expanded=$expanded " +
                    "tracking=$tracking" +
@@ -126,14 +127,15 @@ class PanelExpansionStateManager @Inject constructor() {

    /** Updates the panel state if necessary. */
    fun updateState(@PanelState state: Int) {
        debugLog("update state: ${this.state.stateToString()} -> ${state.stateToString()}")
        debugLog(
            "update state: ${this.state.panelStateToString()} -> ${state.panelStateToString()}")
        if (this.state != state) {
            updateStateInternal(state)
        }
    }

    private fun updateStateInternal(@PanelState state: Int) {
        debugLog("go state: ${this.state.stateToString()} -> ${state.stateToString()}")
        debugLog("go state: ${this.state.panelStateToString()} -> ${state.panelStateToString()}")
        this.state = state
        stateListeners.forEach { it.onPanelStateChanged(state) }
    }
@@ -154,7 +156,7 @@ const val STATE_OPENING = 1
const val STATE_OPEN = 2

@PanelState
private fun Int.stateToString(): String {
fun Int.panelStateToString(): String {
    return when (this) {
        STATE_CLOSED -> "CLOSED"
        STATE_OPENING -> "OPENING"
@@ -163,5 +165,5 @@ private fun Int.stateToString(): String {
    }
}

private const val DEBUG = false
private val TAG = PanelExpansionStateManager::class.simpleName
private val DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG)
+29 −9
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@ 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.phone.panelstate.PanelState
import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.LargeScreenUtils
import java.io.PrintWriter
@@ -30,8 +32,9 @@ constructor(

    private var inSplitShade = false
    private var splitShadeScrimTransitionDistance = 0
    private var lastExpansionFraction: Float = 0f
    private var lastExpansionFraction: Float? = null
    private var lastExpansionEvent: PanelExpansionChangeEvent? = null
    private var currentPanelState: Int? = null

    init {
        updateResources()
@@ -41,8 +44,8 @@ constructor(
                    updateResources()
                }
            })
        dumpManager
            .registerDumpable(ScrimShadeTransitionController::class.java.simpleName, this::dump)
        dumpManager.registerDumpable(
            ScrimShadeTransitionController::class.java.simpleName, this::dump)
    }

    private fun updateResources() {
@@ -51,21 +54,38 @@ constructor(
            resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
    }

    fun onPanelStateChanged(@PanelState state: Int) {
        currentPanelState = state
        onStateChanged()
    }

    fun onPanelExpansionChanged(panelExpansionChangeEvent: PanelExpansionChangeEvent) {
        val expansionFraction = calculateScrimExpansionFraction(panelExpansionChangeEvent)
        lastExpansionEvent = panelExpansionChangeEvent
        onStateChanged()
    }

    private fun onStateChanged() {
        val expansionEvent = lastExpansionEvent ?: return
        val panelState = currentPanelState
        val expansionFraction = calculateScrimExpansionFraction(expansionEvent, panelState)
        scrimController.setRawPanelExpansionFraction(expansionFraction)
        lastExpansionFraction = expansionFraction
        lastExpansionEvent = panelExpansionChangeEvent
    }

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

    private fun canUseCustomFraction(panelState: Int?) =
        inSplitShade && isScreenUnlocked() && panelState == STATE_OPENING

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

@@ -78,9 +98,9 @@ constructor(
                    isScreenUnlocked: ${isScreenUnlocked()}
                    splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance
                  State:
                    currentPanelState: $currentPanelState
                    lastExpansionFraction: $lastExpansionFraction
                    lastExpansionEvent: $lastExpansionEvent
            """.trimIndent()
        )
            """.trimIndent())
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import com.android.systemui.statusbar.phone.NotificationPanelViewController
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
import com.android.systemui.statusbar.phone.panelstate.PanelState
import com.android.systemui.statusbar.phone.panelstate.panelStateToString
import com.android.systemui.statusbar.policy.ConfigurationController
import java.io.PrintWriter
import javax.inject.Inject
@@ -34,6 +35,8 @@ constructor(
    lateinit var qs: QS

    private var inSplitShade = false
    private var currentPanelState: Int? = null
    private var lastPanelExpansionChangeEvent: PanelExpansionChangeEvent? = null

    private val splitShadeOverScroller by lazy {
        splitShadeOverScrollerFactory.create({ qs }, { notificationStackScrollLayoutController })
@@ -66,10 +69,13 @@ constructor(
    }

    private fun onPanelStateChanged(@PanelState state: Int) {
        currentPanelState = state
        shadeOverScroller.onPanelStateChanged(state)
        scrimShadeTransitionController.onPanelStateChanged(state)
    }

    private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) {
        lastPanelExpansionChangeEvent = event
        shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount)
        scrimShadeTransitionController.onPanelExpansionChanged(event)
    }
@@ -84,6 +90,8 @@ constructor(
            """
            ShadeTransitionController:
                inSplitShade: $inSplitShade
                currentPanelState: ${currentPanelState?.panelStateToString()}
                lastPanelExpansionChangeEvent: $lastPanelExpansionChangeEvent
                qs.isInitialized: ${this::qs.isInitialized}
                npvc.isInitialized: ${this::notificationPanelViewController.isInitialized}
                nssl.isInitialized: ${this::notificationStackScrollLayoutController.isInitialized}
+35 −12
Original line number Diff line number Diff line
@@ -9,6 +9,9 @@ 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.phone.panelstate.STATE_CLOSED
import com.android.systemui.statusbar.phone.panelstate.STATE_OPEN
import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
import com.android.systemui.statusbar.policy.FakeConfigurationController
import org.junit.Before
import org.junit.Test
@@ -39,8 +42,9 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {
                dumpManager,
                scrimController,
                context.resources,
                statusBarStateController
            )
                statusBarStateController)

        controller.onPanelStateChanged(STATE_OPENING)
    }

    @Test
@@ -54,8 +58,7 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {

    @Test
    fun onPanelExpansionChanged_inSplitShade_unlockedShade_setsFractionBasedOnDragDownAmount() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.SHADE)
        whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE)
        val scrimShadeTransitionDistance =
            context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
        setSplitShadeEnabled(true)
@@ -68,23 +71,20 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {

    @Test
    fun onPanelExpansionChanged_inSplitShade_largeDragDownAmount_fractionIsNotGreaterThan1() {
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.SHADE)
        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)
        )
            EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance))

        verify(scrimController).setRawPanelExpansionFraction(1f)
    }

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

        controller.onPanelExpansionChanged(EXPANSION_EVENT.copy(dragDownPxAmount = -100f))
@@ -114,6 +114,30 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {
        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
    }

    @Test
    fun onPanelExpansionChanged_inSplitShade_panelOpen_setsFractionEqualToEventFraction() {
        controller.onPanelStateChanged(STATE_OPEN)
        whenever(statusBarStateController.currentOrUpcomingState)
            .thenReturn(StatusBarState.KEYGUARD)
        setSplitShadeEnabled(true)

        controller.onPanelExpansionChanged(EXPANSION_EVENT)

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

    @Test
    fun onPanelExpansionChanged_inSplitShade_panelClosed_setsFractionEqualToEventFraction() {
        controller.onPanelStateChanged(STATE_CLOSED)
        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()
@@ -122,7 +146,6 @@ class ScrimShadeTransitionControllerTest : SysuiTestCase() {
    companion object {
        val EXPANSION_EVENT =
            PanelExpansionChangeEvent(
                fraction = 0.5f, expanded = true, tracking = true, dragDownPxAmount = 10f
            )
                fraction = 0.5f, expanded = true, tracking = true, dragDownPxAmount = 10f)
    }
}
+22 −6
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.qs.QS
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.NotificationPanelViewController
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
import com.android.systemui.statusbar.policy.FakeConfigurationController
@@ -49,8 +50,7 @@ class ShadeTransitionControllerTest : SysuiTestCase() {
                context,
                splitShadeOverScrollerFactory = { _, _ -> splitShadeOverScroller },
                noOpOverScroller,
                scrimShadeTransitionController
            )
                scrimShadeTransitionController)

        // Resetting as they are notified upon initialization.
        reset(noOpOverScroller, splitShadeOverScroller)
@@ -91,6 +91,16 @@ class ShadeTransitionControllerTest : SysuiTestCase() {
        verifyZeroInteractions(splitShadeOverScroller)
    }

    @Test
    fun onPanelStateChanged_forwardsToScrimTransitionController() {
        initLateProperties()

        startPanelExpansion()

        verify(scrimShadeTransitionController).onPanelStateChanged(STATE_OPENING)
        verify(scrimShadeTransitionController).onPanelExpansionChanged(DEFAULT_EXPANSION_EVENT)
    }

    private fun initLateProperties() {
        controller.qs = qs
        controller.notificationStackScrollLayoutController = nsslController
@@ -112,14 +122,20 @@ class ShadeTransitionControllerTest : SysuiTestCase() {

    private fun startPanelExpansion() {
        panelExpansionStateManager.onPanelExpansionChanged(
            fraction = 0.5f,
            expanded = true,
            tracking = true,
            dragDownPxAmount = DEFAULT_DRAG_DOWN_AMOUNT
            DEFAULT_EXPANSION_EVENT.fraction,
            DEFAULT_EXPANSION_EVENT.expanded,
            DEFAULT_EXPANSION_EVENT.tracking,
            DEFAULT_EXPANSION_EVENT.dragDownPxAmount,
        )
    }

    companion object {
        private const val DEFAULT_DRAG_DOWN_AMOUNT = 123f
        private val DEFAULT_EXPANSION_EVENT =
            PanelExpansionChangeEvent(
                fraction = 0.5f,
                expanded = true,
                tracking = true,
                dragDownPxAmount = DEFAULT_DRAG_DOWN_AMOUNT)
    }
}