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

Commit 0312fa3e authored by Justin Weir's avatar Justin Weir Committed by Android (Google) Code Review
Browse files

Merge "Reconnect "full width" shade logic with scenes enabled" into main

parents d7c84513 672db054
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -24,9 +24,11 @@ import androidx.asynclayoutinflater.view.AsyncLayoutInflater
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.domain.interactor.displayStateInteractor
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.display.data.repository.displayStateRepository
import com.android.systemui.dump.DumpManager
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testCase
@@ -117,6 +119,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() {
        }

    private val shadeInteractor = kosmos.shadeInteractor
    private val displayStateInteractor = kosmos.displayStateInteractor
    private val dumpManager = mock<DumpManager>()

    private val underTest =
@@ -124,6 +127,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() {
            qsSceneComponentFactory,
            qsImplProvider,
            shadeInteractor,
            displayStateInteractor,
            dumpManager,
            testDispatcher,
            testScope.backgroundScope,
@@ -582,6 +586,25 @@ class QSSceneAdapterImplTest : SysuiTestCase() {
            verify(qsImpl!!).closeCustomizer()
        }

    @Test
    fun setIsNotificationPanelFullWidth() =
        testScope.runTest {
            val qsImpl by collectLastValue(underTest.qsImpl)

            underTest.inflate(context)
            runCurrent()

            kosmos.displayStateRepository.setIsLargeScreen(true)
            runCurrent()

            verify(qsImpl!!).setIsNotificationPanelFullWidth(false)

            underTest.inflate(context)
            runCurrent()

            verify(qsImpl!!).setIsNotificationPanelFullWidth(false)
        }

    @Test
    fun setBrightnessMirrorController() =
        testScope.runTest {
+16 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.authentication.data.repository.fakeAuthenticationRep
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.display.data.repository.displayStateRepository
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.parameterizeSceneContainerFlag
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
@@ -41,6 +42,8 @@ import com.android.systemui.shade.ShadeExpansionListener
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.shared.flag.DualShade
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.statusbar.notification.stack.notificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.scrimController
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
@@ -54,6 +57,7 @@ import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.verify
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@@ -167,6 +171,18 @@ class ShadeStartableTest(flags: FlagsParameterization) : SysuiTestCase() {
            }
        }

    @Test
    @EnableSceneContainer
    fun hydrateFullWidth() =
        testScope.runTest {
            underTest.start()

            kosmos.displayStateRepository.setIsLargeScreen(true)
            runCurrent()
            verify(kosmos.notificationStackScrollLayoutController).setIsFullWidth(false)
            assertThat(kosmos.scrimController.clipQsScrim).isFalse()
        }

    private fun TestScope.changeScene(
        toScene: SceneKey,
        transitionState: MutableStateFlow<ObservableTransitionState>,
+8 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import androidx.annotation.VisibleForTesting
import androidx.asynclayoutinflater.view.AsyncLayoutInflater
import com.android.settingslib.applications.InterestingConfigChanges
import com.android.systemui.Dumpable
import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -196,6 +197,7 @@ constructor(
    private val qsSceneComponentFactory: QSSceneComponent.Factory,
    private val qsImplProvider: Provider<QSImpl>,
    shadeInteractor: ShadeInteractor,
    displayStateInteractor: DisplayStateInteractor,
    dumpManager: DumpManager,
    @Main private val mainDispatcher: CoroutineDispatcher,
    @Application applicationScope: CoroutineScope,
@@ -208,6 +210,7 @@ constructor(
        qsSceneComponentFactory: QSSceneComponent.Factory,
        qsImplProvider: Provider<QSImpl>,
        shadeInteractor: ShadeInteractor,
        displayStateInteractor: DisplayStateInteractor,
        dumpManager: DumpManager,
        @Main dispatcher: CoroutineDispatcher,
        @Application scope: CoroutineScope,
@@ -216,6 +219,7 @@ constructor(
        qsSceneComponentFactory,
        qsImplProvider,
        shadeInteractor,
        displayStateInteractor,
        dumpManager,
        dispatcher,
        scope,
@@ -319,6 +323,10 @@ constructor(
                    qsImpl.value?.setInSplitShade(it == ShadeMode.Split)
                }
            }
            launch {
                combine(displayStateInteractor.isLargeScreen, qsImpl.filterNotNull(), ::Pair)
                    .collect { it.second.setIsNotificationPanelFullWidth(!it.first) }
            }
        }
    }

+17 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.shade.domain.startable

import android.content.Context
import com.android.systemui.CoreStartable
import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor
import com.android.systemui.common.ui.data.repository.ConfigurationRepository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -32,6 +33,7 @@ import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.transition.ScrimShadeTransitionController
import com.android.systemui.statusbar.PulseExpansionHandler
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.policy.SplitShadeStateController
import javax.inject.Inject
import javax.inject.Provider
@@ -56,11 +58,14 @@ constructor(
    private val panelExpansionInteractorProvider: Provider<PanelExpansionInteractor>,
    private val shadeExpansionStateManager: ShadeExpansionStateManager,
    private val pulseExpansionHandler: PulseExpansionHandler,
    private val displayStateInteractor: DisplayStateInteractor,
    private val nsslc: NotificationStackScrollLayoutController,
    private val scrimController: ScrimController,
) : CoreStartable {

    override fun start() {
        hydrateShadeLayoutWidth()
        hydrateFullWidth()
        hydrateShadeExpansionStateManager()
        logTouchesTo(touchLog)
        scrimShadeTransitionController.init()
@@ -98,4 +103,16 @@ constructor(
                }
        }
    }

    private fun hydrateFullWidth() {
        if (SceneContainerFlag.isEnabled) {
            applicationScope.launch {
                displayStateInteractor.isLargeScreen.collect {
                    val isFullWidth = !it
                    nsslc.setIsFullWidth(isFullWidth)
                    scrimController.setClipsQsScrim(isFullWidth)
                }
            }
        }
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.shade.domain.startable

import android.content.applicationContext
import com.android.systemui.biometrics.domain.interactor.displayStateInteractor
import com.android.systemui.common.ui.data.repository.configurationRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
@@ -28,6 +29,7 @@ import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.shade.domain.interactor.panelExpansionInteractor
import com.android.systemui.shade.transition.ScrimShadeTransitionController
import com.android.systemui.statusbar.notification.stack.notificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.scrimController
import com.android.systemui.statusbar.policy.splitShadeStateController
import com.android.systemui.statusbar.pulseExpansionHandler
import com.android.systemui.util.mockito.mock
@@ -48,6 +50,8 @@ val Kosmos.shadeStartable by Fixture {
        panelExpansionInteractorProvider = { panelExpansionInteractor },
        shadeExpansionStateManager = shadeExpansionStateManager,
        pulseExpansionHandler = pulseExpansionHandler,
        displayStateInteractor = displayStateInteractor,
        nsslc = notificationStackScrollLayoutController,
        scrimController = scrimController,
    )
}