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

Commit 2331290c authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Remove `StateFlow` from `ShadeSceneContentViewModel`." into main

parents a3e51f34 6fc10029
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -334,13 +334,14 @@ private fun ContentScope.SingleShade(
                                    dimensionResource(id = R.dimen.qs_horizontal_margin)
                        )
                ) {
                    val qqsViewModel = rememberViewModel(traceName = "shade_scene_qqs") {
                    val qqsViewModel =
                        rememberViewModel(traceName = "shade_scene_qqs") {
                            viewModel.quickQuickSettingsViewModel.create()
                        }
                    QuickQuickSettings(
                        qqsViewModel,
                        listening = { true },
                        modifier = Modifier.sysuiResTag("quick_qs_panel")
                        modifier = Modifier.sysuiResTag("quick_qs_panel"),
                    )
                }

@@ -428,8 +429,6 @@ private fun ContentScope.SplitShade(
            key = QuickSettings.SharedValues.TilesSquishiness,
            canOverflow = false,
        )
    val unfoldTranslationXForStartSide by
        viewModel.unfoldTranslationX(isOnStartSide = true).collectAsStateWithLifecycle(0f)

    val notificationStackPadding = dimensionResource(id = R.dimen.notification_side_paddings)
    val navBarBottomHeight = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding()
@@ -494,6 +493,8 @@ private fun ContentScope.SplitShade(
        )

        Column(modifier = Modifier.fillMaxSize()) {
            val unfoldTranslationXForStartSide = viewModel.unfoldTranslationXForStartSide

            CollapsedShadeHeader(
                viewModel = headerViewModel,
                isSplitShade = true,
+17 −21
Original line number Diff line number Diff line
@@ -33,8 +33,10 @@ import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintA
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runCurrent
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useStandardTestDispatcher
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
@@ -51,7 +53,6 @@ import com.android.systemui.testKosmos
import com.android.systemui.unfold.fakeUnfoldTransitionProgressProvider
import com.google.common.truth.Truth.assertThat
import java.util.Locale
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.update
@@ -137,38 +138,35 @@ class ShadeSceneContentViewModelTest : SysuiTestCase() {

    @Test
    fun unfoldTransitionProgress() =
        kosmos.runTest {
        testKosmos().useStandardTestDispatcher().runTest {
            // Set up and activate a new `underTest` which uses the StandardTestDispatcher.
            val underTest = shadeSceneContentViewModel
            underTest.activateIn(testScope)

            enableSingleShade()
            runCurrent()
            val maxTranslation = prepareConfiguration()
            val translations by
                collectLastValue(
                    combine(
                        underTest.unfoldTranslationX(isOnStartSide = true),
                        underTest.unfoldTranslationX(isOnStartSide = false),
                    ) { start, end ->
                        Translations(start = start, end = end)
                    }
                )

            val unfoldProvider = fakeUnfoldTransitionProgressProvider
            unfoldProvider.onTransitionStarted()
            assertThat(translations?.start).isEqualTo(0f)
            assertThat(translations?.end).isEqualTo(-0f)
            assertThat(underTest.unfoldTranslationXForStartSide).isEqualTo(0f)

            repeat(10) { repetition ->
                val transitionProgress = 0.1f * (repetition + 1)
                unfoldProvider.onTransitionProgress(transitionProgress)
                assertThat(translations?.start).isEqualTo((1 - transitionProgress) * maxTranslation)
                assertThat(translations?.end).isEqualTo(-(1 - transitionProgress) * maxTranslation)
                runCurrent()

                assertThat(underTest.unfoldTranslationXForStartSide)
                    .isEqualTo((1 - transitionProgress) * maxTranslation)
            }

            unfoldProvider.onTransitionFinishing()
            assertThat(translations?.start).isEqualTo(0f)
            assertThat(translations?.end).isEqualTo(-0f)
            runCurrent()
            assertThat(underTest.unfoldTranslationXForStartSide).isEqualTo(0f)

            unfoldProvider.onTransitionFinished()
            assertThat(translations?.start).isEqualTo(0f)
            assertThat(translations?.end).isEqualTo(-0f)
            runCurrent()
            assertThat(underTest.unfoldTranslationXForStartSide).isEqualTo(0f)
        }

    @Test
@@ -213,6 +211,4 @@ class ShadeSceneContentViewModelTest : SysuiTestCase() {
        sceneInteractor.changeScene(key, "test")
        sceneInteractor.setTransitionState(flowOf(ObservableTransitionState.Idle(key)))
    }

    private data class Translations(val start: Float, val end: Float)
}
+12 −10
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ import dagger.assisted.AssistedInject
import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

/**
@@ -60,7 +59,7 @@ constructor(
    disableFlagsInteractor: DisableFlagsInteractor,
    private val footerActionsViewModelFactory: FooterActionsViewModel.Factory,
    private val footerActionsController: FooterActionsController,
    private val unfoldTransitionInteractor: UnfoldTransitionInteractor,
    unfoldTransitionInteractor: UnfoldTransitionInteractor,
    deviceEntryInteractor: DeviceEntryInteractor,
    private val sceneInteractor: SceneInteractor,
) : ExclusiveActivatable() {
@@ -91,6 +90,17 @@ constructor(
            source = disableFlagsInteractor.disableFlags.map { it.isQuickSettingsEnabled() },
        )

    /**
     * Amount of X-axis translation to apply to various elements as the unfolded foldable is folded
     * slightly, in pixels.
     */
    val unfoldTranslationXForStartSide: Float by
        hydrator.hydratedStateOf(
            traceName = "unfoldTranslationXForStartSide",
            initialValue = 0f,
            source = unfoldTransitionInteractor.unfoldTranslationX(isOnStartSide = true),
        )

    private val footerActionsControllerInitialized = AtomicBoolean(false)

    override suspend fun onActivated(): Nothing {
@@ -101,14 +111,6 @@ constructor(
        }
    }

    /**
     * Amount of X-axis translation to apply to various elements as the unfolded foldable is folded
     * slightly, in pixels.
     */
    fun unfoldTranslationX(isOnStartSide: Boolean): Flow<Float> {
        return unfoldTransitionInteractor.unfoldTranslationX(isOnStartSide)
    }

    fun getFooterActionsViewModel(lifecycleOwner: LifecycleOwner): FooterActionsViewModel {
        if (footerActionsControllerInitialized.compareAndSet(false, true)) {
            footerActionsController.init()