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

Commit 21182312 authored by burakov's avatar burakov
Browse files

[flexiglass] Simplify ShadeMode + remove ShadeRepository.isLargeScreen.

Now that isShadeLayoutWide was split into "isWideScreen" and
"legacyUseSplitShade", which differ by the fact that the latter is
"false" on large screen devices in portrait orientation, we no longer
need the "isLargeScreen" flow in ShadeRepository.

This is part of a multi-CL refactor that is meant to disambiguate the
meaning of "shade layout wide" and simplify related decision-making
logic.

Bug: 354926927
Bug: 411365508
Test: All unit tests pass.
Flag: com.android.systemui.scene_container
Change-Id: I9b356ff7e31b8cf461fa5406cd422b9a06ce9fbe
parent 240ae877
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -180,7 +180,6 @@ class LockscreenUserActionsViewModelTest : SysuiTestCase() {
            )
            sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
            shadeRepository.setShadeLayoutWide(!isNarrowScreen)
            shadeRepository.setLargeScreen(!isNarrowScreen)
            fakePowerRepository.updateWakefulness(
                rawState = if (isShadeTouchable) WakefulnessState.AWAKE else WakefulnessState.ASLEEP
            )
+0 −2
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.res.R
import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -58,7 +57,6 @@ class ShadeModeInteractorImplTest : SysuiTestCase() {
            val shadeMode by collectLastValue(underTest.shadeMode)
            // This simulates the case of a tablet or certain unfolded foldables in portrait mode.
            enableSingleShade(wideLayout = false)
            fakeShadeRepository.setLargeScreen(true)
            displayStateRepository.setIsLargeScreen(true)

            assertThat(shadeMode).isEqualTo(ShadeMode.Single)
+0 −29
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import com.android.systemui.display.data.repository.createFakeDisplaySubcomponen
import com.android.systemui.display.data.repository.displayStateRepository
import com.android.systemui.display.data.repository.displaySubcomponentPerDisplayRepository
import com.android.systemui.display.domain.interactor.createDisplayStateInteractor
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.parameterizeSceneContainerFlag
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
@@ -281,34 +280,6 @@ class ShadeStartableTest(flags: FlagsParameterization) : SysuiTestCase() {
            assertThat(legacyUseSplitShade).isFalse()
        }

    @Test
    @EnableSceneContainer
    fun hydrateLargeScreen_sceneContainer() =
        kosmos.runTest {
            val isLargeScreen by collectLastValue(shadeRepository.isLargeScreen)
            underTest.start()

            displayStateRepository.setIsLargeScreen(false)
            assertThat(isLargeScreen).isFalse()

            displayStateRepository.setIsLargeScreen(true)
            assertThat(isLargeScreen).isTrue()
        }

    @Test
    @DisableSceneContainer
    fun hydrateLargeScreen_nonSceneContainer() =
        kosmos.runTest {
            val isLargeScreen by collectLastValue(shadeRepository.isLargeScreen)
            underTest.start()

            displayStateRepository.setIsLargeScreen(false)
            assertThat(isLargeScreen).isFalse()

            displayStateRepository.setIsLargeScreen(true)
            assertThat(isLargeScreen).isTrue()
        }

    private fun Kosmos.changeScene(
        toScene: SceneKey,
        transitionState: MutableStateFlow<ObservableTransitionState>,
+12 −13
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.systemui.flags.andSceneContainer
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -42,7 +43,6 @@ import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.testKosmos
import com.android.systemui.tuner.TunerService
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.After
import org.junit.Before
@@ -66,7 +66,8 @@ import platform.test.runner.parameterized.Parameters
@RunWith(ParameterizedAndroidJunit4::class)
@TestableLooper.RunWithLooper
class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase() {
    private val kosmos = testKosmos()

    private val kosmos = testKosmos().useUnconfinedTestDispatcher()
    private val testScope = kosmos.testScope
    private val featureFlags = FakeFeatureFlags()
    private val shadeTestUtil by lazy { kosmos.shadeTestUtil }
@@ -117,7 +118,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    private fun defaultConfigPostureClosed() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_auth_supported_posture,
            DEVICE_POSTURE_CLOSED
            DEVICE_POSTURE_CLOSED,
        )
        initKeyguardBypassController()
        verify(devicePostureController).addCallback(postureCallbackCaptor.capture())
@@ -127,7 +128,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    private fun defaultConfigPostureOpened() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_auth_supported_posture,
            DEVICE_POSTURE_OPENED
            DEVICE_POSTURE_OPENED,
        )
        initKeyguardBypassController()
        verify(devicePostureController).addCallback(postureCallbackCaptor.capture())
@@ -137,7 +138,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    private fun defaultConfigPostureFlipped() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_auth_supported_posture,
            DEVICE_POSTURE_FLIPPED
            DEVICE_POSTURE_FLIPPED,
        )
        initKeyguardBypassController()
        verify(devicePostureController).addCallback(postureCallbackCaptor.capture())
@@ -147,7 +148,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    private fun defaultConfigPostureUnknown() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_auth_supported_posture,
            DEVICE_POSTURE_UNKNOWN
            DEVICE_POSTURE_UNKNOWN,
        )
        initKeyguardBypassController()
        verify(devicePostureController, never()).addCallback(postureCallbackCaptor.capture())
@@ -268,7 +269,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    fun defaultConfigPostureClosed_canOverrideByPassAlways_shouldReturnFalse() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_unlock_bypass_override,
            1 /* FACE_UNLOCK_BYPASS_ALWAYS */
            1, /* FACE_UNLOCK_BYPASS_ALWAYS */
        )

        defaultConfigPostureClosed()
@@ -282,7 +283,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    fun defaultConfigPostureUnknown_canNotOverrideByPassAlways_shouldReturnTrue() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_unlock_bypass_override,
            1 /* FACE_UNLOCK_BYPASS_ALWAYS */
            1, /* FACE_UNLOCK_BYPASS_ALWAYS */
        )

        defaultConfigPostureUnknown()
@@ -294,7 +295,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    fun defaultConfigPostureUnknown_canNotOverrideByPassNever_shouldReturnFalse() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_unlock_bypass_override,
            2 /* FACE_UNLOCK_BYPASS_NEVER */
            2, /* FACE_UNLOCK_BYPASS_NEVER */
        )

        defaultConfigPostureUnknown()
@@ -309,12 +310,10 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
            assertThat(keyguardBypassController.qsExpanded).isFalse()
            val job = keyguardBypassController.listenForQsExpandedChange()
            shadeTestUtil.setQsExpansion(0.5f)
            runCurrent()

            assertThat(keyguardBypassController.qsExpanded).isTrue()

            shadeTestUtil.setQsExpansion(0f)
            runCurrent()

            assertThat(keyguardBypassController.qsExpanded).isFalse()

@@ -326,7 +325,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    fun canBypass_bypassDisabled() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_unlock_bypass_override,
            2 /* FACE_UNLOCK_BYPASS_NEVER */
            2, /* FACE_UNLOCK_BYPASS_NEVER */
        )
        initKeyguardBypassController()
        assertThat(keyguardBypassController.canBypass()).isFalse()
@@ -336,7 +335,7 @@ class KeyguardBypassControllerTest(flags: FlagsParameterization) : SysuiTestCase
    fun canBypass_bypassEnabled_alternateBouncerShowing() {
        context.orCreateTestableResources.addOverride(
            R.integer.config_face_unlock_bypass_override,
            1 /* FACE_UNLOCK_BYPASS_ALWAYS */
            1, /* FACE_UNLOCK_BYPASS_ALWAYS */
        )
        initKeyguardBypassController()
        whenever(keyguardTransitionInteractor.getCurrentState())
+0 −16
Original line number Diff line number Diff line
@@ -117,12 +117,6 @@ interface ShadeRepository {
    /** Provides whether the display containing the shade is wide (i.e. >= 600dp). */
    val isWideScreen: MutableStateFlow<Boolean>

    /**
     * Provides whether the display containing the shade is a large screen (i.e. all edges are >=
     * 600dp). Unlike [isWideScreen], this is agnostic of display rotation.
     */
    val isLargeScreen: StateFlow<Boolean>

    /** True when QS is taking up the entire screen, i.e. fully expanded on a non-unfolded phone. */
    @Deprecated("Use ShadeInteractor instead") val legacyQsFullscreen: StateFlow<Boolean>

@@ -132,9 +126,6 @@ interface ShadeRepository {
    /** Sets whether the shade layout should be wide (true) or narrow (false). */
    fun setShadeLayoutWide(isShadeLayoutWide: Boolean)

    /** Sets whether the current display is a large screen. */
    fun setLargeScreen(isLargeScreen: Boolean)

    /** Sets whether a closing animation is happening. */
    @Deprecated("Use ShadeAnimationInteractor instead") fun setLegacyIsClosing(isClosing: Boolean)

@@ -255,18 +246,11 @@ class ShadeRepositoryImpl @Inject constructor(@Background val backgroundScope: C
    @Deprecated("Use ShadeInteractor instead")
    override val legacyQsFullscreen: StateFlow<Boolean> = _legacyQsFullscreen.asStateFlow()

    private val _isLargeScreen = MutableStateFlow(false)
    override val isLargeScreen: StateFlow<Boolean> = _isLargeScreen.asStateFlow()

    override fun setShadeLayoutWide(isShadeLayoutWide: Boolean) {
        isWideScreen.value = isShadeLayoutWide
        legacyUseSplitShade.value = isShadeLayoutWide
    }

    override fun setLargeScreen(isLargeScreen: Boolean) {
        _isLargeScreen.value = isLargeScreen
    }

    @Deprecated("Use ShadeInteractor instead")
    override fun setLegacyQsFullscreen(legacyQsFullscreen: Boolean) {
        _legacyQsFullscreen.value = legacyQsFullscreen
Loading