diff options
4 files changed, 53 insertions, 22 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt index f3994360ea18..055534604734 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt @@ -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) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt index d472d98c03d4..22913f12330f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt @@ -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()) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterTest.kt index 63ce67c5eb28..41b5988971d9 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterTest.kt @@ -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) + } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt index dfcf21628c3b..ac6ebe7c87d3 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt @@ -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>) { |