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

Commit 45855bdd authored by Alejandro Nijamkin's avatar Alejandro Nijamkin
Browse files

[flexiglass] Defer reading QS squishiness

Defers the consumption of "squishiness" to later by passing lambdas
around instead of the actual value. This gets rid of the crash of the
associated bug.

Fix: 341061899
Test: manually verified that the reproduction steps from comment #6 on
the bug no longer cause a crash
Flag: com.android.systemui.scene_container

Change-Id: I4751671c76fa7b3b37cdcb3a8028fec43aea7172
parent b6eee7c9
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ object QuickSettings {

private fun SceneScope.stateForQuickSettingsContent(
    isSplitShade: Boolean,
    squishiness: Float = QuickSettings.SharedValues.SquishinessValues.Default
    squishiness: () -> Float = { QuickSettings.SharedValues.SquishinessValues.Default }
): QSSceneAdapter.State {
    return when (val transitionState = layoutState.transitionState) {
        is TransitionState.Idle -> {
@@ -125,9 +125,9 @@ fun SceneScope.QuickSettings(
    heightProvider: () -> Int,
    isSplitShade: Boolean,
    modifier: Modifier = Modifier,
    squishiness: Float = QuickSettings.SharedValues.SquishinessValues.Default,
    squishiness: () -> Float = { QuickSettings.SharedValues.SquishinessValues.Default },
) {
    val contentState = stateForQuickSettingsContent(isSplitShade, squishiness)
    val contentState = { stateForQuickSettingsContent(isSplitShade, squishiness) }
    val transitionState = layoutState.transitionState
    val isClosing =
        transitionState is TransitionState.Transition &&
@@ -161,7 +161,7 @@ fun SceneScope.QuickSettings(
@Composable
private fun QuickSettingsContent(
    qsSceneAdapter: QSSceneAdapter,
    state: QSSceneAdapter.State,
    state: () -> QSSceneAdapter.State,
    modifier: Modifier = Modifier,
) {
    val qsView by qsSceneAdapter.qsView.collectAsStateWithLifecycle(null)
@@ -185,10 +185,10 @@ private fun QuickSettingsContent(
                AndroidView(
                    modifier = Modifier.fillMaxWidth(),
                    factory = { _ ->
                        qsSceneAdapter.setState(state)
                        qsSceneAdapter.setState(state())
                        view
                    },
                    update = { qsSceneAdapter.setState(state) }
                    update = { qsSceneAdapter.setState(state()) }
                )
            }
        }
+2 −2
Original line number Diff line number Diff line
@@ -279,7 +279,7 @@ private fun SceneScope.SingleShade(
                                    viewModel.qsSceneAdapter,
                                    { viewModel.qsSceneAdapter.qqsHeight },
                                    isSplitShade = false,
                                    squishiness = tileSquishiness,
                                    squishiness = { tileSquishiness },
                                )
                            }

@@ -468,7 +468,7 @@ private fun SceneScope.SplitShade(
                                    heightProvider = { viewModel.qsSceneAdapter.qsHeight },
                                    isSplitShade = true,
                                    modifier = Modifier.fillMaxWidth(),
                                    squishiness = tileSquishiness,
                                    squishiness = { tileSquishiness },
                                )
                            }

+1 −1
Original line number Diff line number Diff line
@@ -257,7 +257,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() {
            runCurrent()
            clearInvocations(qsImpl!!)

            underTest.setState(QSSceneAdapter.State.UnsquishingQQS(squishiness))
            underTest.setState(QSSceneAdapter.State.UnsquishingQQS { squishiness })
            with(qsImpl!!) {
                verify(this).setQsVisible(true)
                verify(this)
+3 −3
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ class QSSceneAdapterTest : SysuiTestCase() {

    @Test
    fun expanding_squishiness1() {
        assertThat(QSSceneAdapter.State.Expanding(0.3f).squishiness).isEqualTo(1f)
        assertThat(QSSceneAdapter.State.Expanding(0.3f).squishiness()).isEqualTo(1f)
    }

    @Test
@@ -51,14 +51,14 @@ class QSSceneAdapterTest : SysuiTestCase() {
    @Test
    fun unsquishingQQS_expansionSameAsQQS() {
        val squishiness = 0.6f
        assertThat(QSSceneAdapter.State.UnsquishingQQS(squishiness).expansion)
        assertThat(QSSceneAdapter.State.UnsquishingQQS { squishiness }.expansion)
            .isEqualTo(QSSceneAdapter.State.QQS.expansion)
    }

    @Test
    fun unsquishingQS_expansionSameAsQS() {
        val squishiness = 0.6f
        assertThat(QSSceneAdapter.State.UnsquishingQS(squishiness).expansion)
        assertThat(QSSceneAdapter.State.UnsquishingQS { squishiness }.expansion)
            .isEqualTo(QSSceneAdapter.State.QS.expansion)
    }
}
+6 −6
Original line number Diff line number Diff line
@@ -127,28 +127,28 @@ interface QSSceneAdapter {

        val isVisible: Boolean
        val expansion: Float
        val squishiness: Float
        val squishiness: () -> Float

        data object CLOSED : State {
            override val isVisible = false
            override val expansion = 0f
            override val squishiness = 1f
            override val squishiness = { 1f }
        }

        /** State for expanding between QQS and QS */
        data class Expanding(override val expansion: Float) : State {
            override val isVisible = true
            override val squishiness = 1f
            override val squishiness = { 1f }
        }

        /** State for appearing QQS from Lockscreen or Gone */
        data class UnsquishingQQS(override val squishiness: Float) : State {
        data class UnsquishingQQS(override val squishiness: () -> Float) : State {
            override val isVisible = true
            override val expansion = 0f
        }

        /** State for appearing QS from Lockscreen or Gone, used in Split shade */
        data class UnsquishingQS(override val squishiness: Float) : State {
        data class UnsquishingQS(override val squishiness: () -> Float) : State {
            override val isVisible = true
            override val expansion = 1f
        }
@@ -370,7 +370,7 @@ constructor(
        setQsVisible(state.isVisible)
        setExpanded(state.isVisible && state.expansion > 0f)
        setListening(state.isVisible)
        setQsExpansion(state.expansion, 1f, 0f, state.squishiness)
        setQsExpansion(state.expansion, 1f, 0f, state.squishiness())
    }

    override fun dump(pw: PrintWriter, args: Array<out String>) {