diff options
5 files changed, 68 insertions, 0 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt index 09580c5f17be..d472d98c03d4 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/adapter/QSSceneAdapterImplTest.kt @@ -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, @@ -583,6 +587,25 @@ class QSSceneAdapterImplTest : SysuiTestCase() { } @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 { val qsImpl by collectLastValue(underTest.qsImpl) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt index cecc70cae60d..d37e0fb2f047 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt @@ -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>, diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt index bb36fd5ea979..ae2f32aae874 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/adapter/QSSceneAdapter.kt @@ -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) } + } } } diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt index 5eb3a1cc1348..330f53fc3701 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/startable/ShadeStartable.kt @@ -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) + } + } + } + } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt index 79b80bc71c58..a1f157f13210 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/domain/startable/ShadeStartableKosmos.kt @@ -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, ) } |