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

Commit c97f4daa authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "Delete SceneInteractor.transitioning" into main

parents 8608a612 36dcd63c
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ import com.android.systemui.battery.BatteryMeterViewController
import com.android.systemui.common.ui.compose.windowinsets.CutoutLocation
import com.android.systemui.common.ui.compose.windowinsets.LocalDisplayCutout
import com.android.systemui.res.R
import com.android.systemui.scene.ui.composable.QuickSettings
import com.android.systemui.scene.ui.composable.Shade as ShadeKey
import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel
import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager
@@ -348,7 +350,7 @@ private fun ShadeCarrierGroup(
}

@Composable
private fun StatusIcons(
private fun SceneScope.StatusIcons(
    viewModel: ShadeHeaderViewModel,
    createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager,
    statusBarIconController: StatusBarIconController,
@@ -358,7 +360,6 @@ private fun StatusIcons(
    val carrierIconSlots =
        listOf(stringResource(id = com.android.internal.R.string.status_bar_mobile))
    val isSingleCarrier by viewModel.isSingleCarrier.collectAsState()
    val isTransitioning by viewModel.isTransitioning.collectAsState()

    AndroidView(
        factory = { context ->
@@ -373,7 +374,9 @@ private fun StatusIcons(
            iconContainer
        },
        update = { iconContainer ->
            iconContainer.setQsExpansionTransitioning(isTransitioning)
            iconContainer.setQsExpansionTransitioning(
                layoutState.isTransitioningBetween(ShadeKey, QuickSettings)
            )
            if (isSingleCarrier || !useExpandedFormat) {
                iconContainer.removeIgnoredSlots(carrierIconSlots)
            } else {
+0 −99
Original line number Diff line number Diff line
@@ -173,105 +173,6 @@ class SceneInteractorTest : SysuiTestCase() {
            assertThat(transitionTo).isNull()
        }

    @Test
    fun transitioning_idle_false() =
        testScope.runTest {
            val transitionState =
                MutableStateFlow<ObservableTransitionState>(
                    ObservableTransitionState.Idle(SceneKey.Shade)
                )
            val transitioning by
                collectLastValue(underTest.transitioning(SceneKey.Shade, SceneKey.Lockscreen))
            underTest.setTransitionState(transitionState)

            assertThat(transitioning).isFalse()
        }

    @Test
    fun transitioning_wrongFromScene_false() =
        testScope.runTest {
            val transitionState =
                MutableStateFlow<ObservableTransitionState>(
                    ObservableTransitionState.Transition(
                        fromScene = SceneKey.Gone,
                        toScene = SceneKey.Lockscreen,
                        progress = flowOf(0.5f),
                        isInitiatedByUserInput = false,
                        isUserInputOngoing = flowOf(false),
                    )
                )
            val transitioning by
                collectLastValue(underTest.transitioning(SceneKey.Shade, SceneKey.Lockscreen))
            underTest.setTransitionState(transitionState)

            assertThat(transitioning).isFalse()
        }

    @Test
    fun transitioning_wrongToScene_false() =
        testScope.runTest {
            val transitionState =
                MutableStateFlow<ObservableTransitionState>(
                    ObservableTransitionState.Transition(
                        fromScene = SceneKey.Shade,
                        toScene = SceneKey.QuickSettings,
                        progress = flowOf(0.5f),
                        isInitiatedByUserInput = false,
                        isUserInputOngoing = flowOf(false),
                    )
                )
            underTest.setTransitionState(transitionState)

            assertThat(underTest.transitioning(SceneKey.Shade, SceneKey.Lockscreen).value).isFalse()
        }

    @Test
    fun transitioning_correctFromAndToScenes_true() =
        testScope.runTest {
            val transitionState =
                MutableStateFlow<ObservableTransitionState>(
                    ObservableTransitionState.Transition(
                        fromScene = SceneKey.Shade,
                        toScene = SceneKey.Lockscreen,
                        progress = flowOf(0.5f),
                        isInitiatedByUserInput = false,
                        isUserInputOngoing = flowOf(false),
                    )
                )
            val transitioning by
                collectLastValue(underTest.transitioning(SceneKey.Shade, SceneKey.Lockscreen))
            underTest.setTransitionState(transitionState)

            assertThat(transitioning).isTrue()
        }

    @Test
    fun transitioning_updates() =
        testScope.runTest {
            val transitionState =
                MutableStateFlow<ObservableTransitionState>(
                    ObservableTransitionState.Idle(SceneKey.Shade)
                )
            val transitioning by
                collectLastValue(underTest.transitioning(SceneKey.Shade, SceneKey.Lockscreen))
            underTest.setTransitionState(transitionState)

            assertThat(transitioning).isFalse()

            transitionState.value =
                ObservableTransitionState.Transition(
                    fromScene = SceneKey.Shade,
                    toScene = SceneKey.Lockscreen,
                    progress = flowOf(0.5f),
                    isInitiatedByUserInput = false,
                    isUserInputOngoing = flowOf(false),
                )
            assertThat(transitioning).isTrue()

            transitionState.value = ObservableTransitionState.Idle(SceneKey.Lockscreen)
            assertThat(transitioning).isFalse()
        }

    @Test
    fun isTransitionUserInputOngoing_idle_false() =
        testScope.runTest {
+0 −72
Original line number Diff line number Diff line
@@ -9,8 +9,6 @@ import com.android.systemui.flags.FakeFeatureFlagsClassic
import com.android.systemui.flags.Flags
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.ObservableTransitionState
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
@@ -22,8 +20,6 @@ import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnec
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -73,74 +69,6 @@ class ShadeHeaderViewModelTest : SysuiTestCase() {
            )
    }

    @Test
    fun isTransitioning_idle_false() =
        testScope.runTest {
            val isTransitioning by collectLastValue(underTest.isTransitioning)
            sceneInteractor.setTransitionState(
                MutableStateFlow(ObservableTransitionState.Idle(SceneKey.Shade))
            )

            assertThat(isTransitioning).isFalse()
        }

    @Test
    fun isTransitioning_shadeToQs_true() =
        testScope.runTest {
            val isTransitioning by collectLastValue(underTest.isTransitioning)
            sceneInteractor.setTransitionState(
                MutableStateFlow(
                    ObservableTransitionState.Transition(
                        fromScene = SceneKey.Shade,
                        toScene = SceneKey.QuickSettings,
                        progress = MutableStateFlow(0.5f),
                        isInitiatedByUserInput = false,
                        isUserInputOngoing = flowOf(false),
                    )
                )
            )

            assertThat(isTransitioning).isTrue()
        }

    @Test
    fun isTransitioning_qsToShade_true() =
        testScope.runTest {
            val isTransitioning by collectLastValue(underTest.isTransitioning)
            sceneInteractor.setTransitionState(
                MutableStateFlow(
                    ObservableTransitionState.Transition(
                        fromScene = SceneKey.QuickSettings,
                        toScene = SceneKey.Shade,
                        progress = MutableStateFlow(0.5f),
                        isInitiatedByUserInput = false,
                        isUserInputOngoing = flowOf(false),
                    )
                )
            )

            assertThat(isTransitioning).isTrue()
        }

    @Test
    fun isTransitioning_otherTransition_false() =
        testScope.runTest {
            val isTransitioning by collectLastValue(underTest.isTransitioning)
            sceneInteractor.setTransitionState(
                MutableStateFlow(
                    ObservableTransitionState.Transition(
                        fromScene = SceneKey.Gone,
                        toScene = SceneKey.Shade,
                        progress = MutableStateFlow(0.5f),
                        isInitiatedByUserInput = false,
                        isUserInputOngoing = flowOf(false),
                    )
                )
            )

            assertThat(isTransitioning).isFalse()
        }

    @Test
    fun mobileSubIds_update() =
        testScope.runTest {
+0 −22
Original line number Diff line number Diff line
@@ -171,28 +171,6 @@ constructor(
        return repository.setVisible(isVisible)
    }

    /** True if there is a transition happening from and to the specified scenes. */
    fun transitioning(from: SceneKey, to: SceneKey): StateFlow<Boolean> {
        fun transitioning(
            state: ObservableTransitionState,
            from: SceneKey,
            to: SceneKey,
        ): Boolean {
            return (state as? ObservableTransitionState.Transition)?.let {
                it.fromScene == from && it.toScene == to
            }
                ?: false
        }

        return transitionState
            .map { state -> transitioning(state, from, to) }
            .stateIn(
                scope = applicationScope,
                started = SharingStarted.WhileSubscribed(),
                initialValue = transitioning(transitionState.value, from, to),
            )
    }

    /**
     * Binds the given flow so the system remembers it.
     *
+1 −13
Original line number Diff line number Diff line
@@ -22,12 +22,11 @@ import android.content.IntentFilter
import android.icu.text.DateFormat
import android.icu.text.DisplayContext
import android.os.UserHandle
import com.android.systemui.res.R
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel
import java.util.Date
@@ -38,7 +37,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
@@ -57,16 +55,6 @@ constructor(
    val mobileIconsViewModel: MobileIconsViewModel,
    broadcastDispatcher: BroadcastDispatcher,
) {
    /** True if we are transitioning between Shade and QuickSettings scenes, in either direction. */
    val isTransitioning =
        combine(
                sceneInteractor.transitioning(from = SceneKey.Shade, to = SceneKey.QuickSettings),
                sceneInteractor.transitioning(from = SceneKey.QuickSettings, to = SceneKey.Shade)
            ) { shadeToQuickSettings, quickSettingsToShade ->
                shadeToQuickSettings || quickSettingsToShade
            }
            .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)

    /** True if there is exactly one mobile connection. */
    val isSingleCarrier: StateFlow<Boolean> = mobileIconsInteractor.isSingleCarrier