Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt +23 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 = Loading @@ -124,6 +127,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() { qsSceneComponentFactory, qsImplProvider, shadeInteractor, displayStateInteractor, dumpManager, testDispatcher, testScope.backgroundScope, Loading Loading @@ -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 { Loading packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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>, Loading packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading @@ -208,6 +210,7 @@ constructor( qsSceneComponentFactory: QSSceneComponent.Factory, qsImplProvider: Provider<QSImpl>, shadeInteractor: ShadeInteractor, displayStateInteractor: DisplayStateInteractor, dumpManager: DumpManager, @Main dispatcher: CoroutineDispatcher, @Application scope: CoroutineScope, Loading @@ -216,6 +219,7 @@ constructor( qsSceneComponentFactory, qsImplProvider, shadeInteractor, displayStateInteractor, dumpManager, dispatcher, scope, Loading Loading @@ -319,6 +323,10 @@ constructor( qsImpl.value?.setInSplitShade(it == ShadeMode.Split) } } launch { combine(displayStateInteractor.isLargeScreen, qsImpl.filterNotNull(), ::Pair) .collect { it.second.setIsNotificationPanelFullWidth(!it.first) } } } } Loading packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() Loading Loading @@ -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) } } } } } packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -48,6 +50,8 @@ val Kosmos.shadeStartable by Fixture { panelExpansionInteractorProvider = { panelExpansionInteractor }, shadeExpansionStateManager = shadeExpansionStateManager, pulseExpansionHandler = pulseExpansionHandler, displayStateInteractor = displayStateInteractor, nsslc = notificationStackScrollLayoutController, scrimController = scrimController, ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt +23 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 = Loading @@ -124,6 +127,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() { qsSceneComponentFactory, qsImplProvider, shadeInteractor, displayStateInteractor, dumpManager, testDispatcher, testScope.backgroundScope, Loading Loading @@ -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 { Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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>, Loading
packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading @@ -208,6 +210,7 @@ constructor( qsSceneComponentFactory: QSSceneComponent.Factory, qsImplProvider: Provider<QSImpl>, shadeInteractor: ShadeInteractor, displayStateInteractor: DisplayStateInteractor, dumpManager: DumpManager, @Main dispatcher: CoroutineDispatcher, @Application scope: CoroutineScope, Loading @@ -216,6 +219,7 @@ constructor( qsSceneComponentFactory, qsImplProvider, shadeInteractor, displayStateInteractor, dumpManager, dispatcher, scope, Loading Loading @@ -319,6 +323,10 @@ constructor( qsImpl.value?.setInSplitShade(it == ShadeMode.Split) } } launch { combine(displayStateInteractor.isLargeScreen, qsImpl.filterNotNull(), ::Pair) .collect { it.second.setIsNotificationPanelFullWidth(!it.first) } } } } Loading
packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() Loading Loading @@ -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) } } } } }
packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -48,6 +50,8 @@ val Kosmos.shadeStartable by Fixture { panelExpansionInteractorProvider = { panelExpansionInteractor }, shadeExpansionStateManager = shadeExpansionStateManager, pulseExpansionHandler = pulseExpansionHandler, displayStateInteractor = displayStateInteractor, nsslc = notificationStackScrollLayoutController, scrimController = scrimController, ) }