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

Commit a144ebaa authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Change expansion to be a lambda

That way, it will only be read when needed instead of in every
composition.

Test: manual
Test: atest QSSceneAdapterTest
Bug: 280887232
Flag: com.android.systemui.scene_container
Change-Id: Ic8701c8b8d2b6ade7d5342fc06f931131c7585eb
parent ccf4f5a8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -103,10 +103,10 @@ private fun SceneScope.stateForQuickSettingsContent(
                when {
                    isSplitShade -> UnsquishingQS(squishiness)
                    fromScene == Scenes.Shade && toScene == Scenes.QuickSettings -> {
                        Expanding(progress)
                        Expanding { progress }
                    }
                    fromScene == Scenes.QuickSettings && toScene == Scenes.Shade -> {
                        Collapsing(progress)
                        Collapsing { progress }
                    }
                    fromScene == Scenes.Shade || toScene == Scenes.Shade -> {
                        UnsquishingQQS(squishiness)
+1 −1
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() {
            runCurrent()
            clearInvocations(qsImpl!!)

            underTest.setState(QSSceneAdapter.State.Expanding(progress))
            underTest.setState(QSSceneAdapter.State.Expanding { progress })
            with(qsImpl!!) {
                verify(this).setQsVisible(true)
                verify(this, never())
+40 −9
Original line number Diff line number Diff line
@@ -20,7 +20,12 @@ import android.platform.test.annotations.EnabledOnRavenwood
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.qs.ui.adapter.ExpandingSubject.Companion.assertThatExpanding
import com.android.systemui.qs.ui.adapter.QSSceneAdapter.State.Companion.Collapsing
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
import com.google.common.truth.Subject.Factory
import com.google.common.truth.Truth.assertAbout
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
@@ -32,33 +37,59 @@ 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
    fun expandingSpecialValues() {
        assertThat(QSSceneAdapter.State.QQS).isEqualTo(QSSceneAdapter.State.Expanding(0f))
        assertThat(QSSceneAdapter.State.QS).isEqualTo(QSSceneAdapter.State.Expanding(1f))
        assertThatExpanding(QSSceneAdapter.State.QQS)
            .isEqualTo(QSSceneAdapter.State.Expanding { 0f })
        assertThatExpanding(QSSceneAdapter.State.QS)
            .isEqualTo(QSSceneAdapter.State.Expanding { 1f })
    }

    @Test
    fun collapsing() {
        val collapsingProgress = 0.3f
        assertThat(Collapsing(collapsingProgress))
            .isEqualTo(QSSceneAdapter.State.Expanding(1 - collapsingProgress))
        assertThatExpanding(Collapsing { collapsingProgress })
            .isEqualTo(QSSceneAdapter.State.Expanding { 1 - collapsingProgress })
    }

    @Test
    fun unsquishingQQS_expansionSameAsQQS() {
        val squishiness = 0.6f
        assertThat(QSSceneAdapter.State.UnsquishingQQS { squishiness }.expansion)
            .isEqualTo(QSSceneAdapter.State.QQS.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)
            .isEqualTo(QSSceneAdapter.State.QS.expansion)
        assertThat(QSSceneAdapter.State.UnsquishingQS { squishiness }.expansion())
            .isEqualTo(QSSceneAdapter.State.QS.expansion())
    }
}

private class ExpandingSubject(
    metadata: FailureMetadata,
    private val actual: QSSceneAdapter.State.Expanding?
) : Subject(metadata, actual) {
    fun isEqualTo(expected: QSSceneAdapter.State.Expanding) {
        isNotNull()
        check("expansion()")
            .that(actual?.expansion?.invoke())
            .isEqualTo(expected.expansion.invoke())
    }

    companion object {
        fun expanding(): Factory<ExpandingSubject, QSSceneAdapter.State.Expanding> {
            return Factory { metadata: FailureMetadata, actual: QSSceneAdapter.State.Expanding? ->
                ExpandingSubject(metadata, actual)
            }
        }

        fun assertThatExpanding(actual: QSSceneAdapter.State.Expanding): ExpandingSubject {
            return assertAbout(expanding()).that(actual)
        }
    }
}
+10 −10
Original line number Diff line number Diff line
@@ -147,17 +147,17 @@ interface QSSceneAdapter {
    sealed interface State {

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

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

        /** State for expanding between QQS and QS */
        data class Expanding(override val expansion: Float) : State {
        class Expanding(override val expansion: () -> Float) : State {
            override val isVisible = true
            override val squishiness = { 1f }
        }
@@ -170,7 +170,7 @@ interface QSSceneAdapter {
         */
        class UnsquishingQQS(override val squishiness: () -> Float) : State {
            override val isVisible = true
            override val expansion = 0f
            override val expansion = { 0f }
        }

        /**
@@ -181,16 +181,16 @@ interface QSSceneAdapter {
         */
        class UnsquishingQS(override val squishiness: () -> Float) : State {
            override val isVisible = true
            override val expansion = 1f
            override val expansion = { 1f }
        }

        companion object {
            // These are special cases of the expansion.
            val QQS = Expanding(0f)
            val QS = Expanding(1f)
            val QQS = Expanding { 0f }
            val QS = Expanding { 1f }

            /** Collapsing from QS to QQS. [progress] is 0f in QS and 1f in QQS. */
            fun Collapsing(progress: Float) = Expanding(1f - progress)
            fun Collapsing(progress: () -> Float) = Expanding { 1f - progress() }
        }
    }
}
@@ -418,14 +418,14 @@ constructor(

    private fun QSImpl.applyState(state: QSSceneAdapter.State) {
        setQsVisible(state.isVisible)
        setExpanded(state.isVisible && state.expansion > 0f)
        setExpanded(state.isVisible && state.expansion() > 0f)
        setListening(state.isVisible)
    }

    override fun applyLatestExpansionAndSquishiness() {
        val qsImpl = _qsImpl.value
        val state = state.value
        qsImpl?.setQsExpansion(state.expansion, 1f, 0f, state.squishiness())
        qsImpl?.setQsExpansion(state.expansion(), 1f, 0f, state.squishiness())
    }

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