diff options
12 files changed, 128 insertions, 75 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorTest.kt index 72e0726dedb0..5994afa948c7 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorTest.kt @@ -55,7 +55,7 @@ class ConfigurationInteractorTest : SysuiTestCase() { testableResources.overrideConfiguration(configuration) configurationRepository = FakeConfigurationRepository() testScope = TestScope() - underTest = ConfigurationInteractor(configurationRepository) + underTest = ConfigurationInteractorImpl(configurationRepository) } @Test @@ -207,7 +207,7 @@ class ConfigurationInteractorTest : SysuiTestCase() { updateDisplay( width = DISPLAY_HEIGHT, height = DISPLAY_WIDTH, - rotation = Surface.ROTATION_90 + rotation = Surface.ROTATION_90, ) runCurrent() @@ -217,7 +217,7 @@ class ConfigurationInteractorTest : SysuiTestCase() { private fun updateDisplay( width: Int = DISPLAY_WIDTH, height: Int = DISPLAY_HEIGHT, - @Surface.Rotation rotation: Int = Surface.ROTATION_0 + @Surface.Rotation rotation: Int = Surface.ROTATION_0, ) { configuration.windowConfiguration.maxBounds.set(Rect(0, 0, width, height)) configuration.windowConfiguration.displayRotation = rotation diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyboard/docking/ui/viewmodel/KeyboardDockingIndicationViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyboard/docking/ui/viewmodel/KeyboardDockingIndicationViewModelTest.kt index 2735d2f03e6a..a0bef727e548 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyboard/docking/ui/viewmodel/KeyboardDockingIndicationViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyboard/docking/ui/viewmodel/KeyboardDockingIndicationViewModelTest.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.keyboard.data.repository.FakeKeyboardRepository import com.android.systemui.keyboard.docking.domain.interactor.KeyboardDockingIndicationInteractor import com.google.common.truth.Truth.assertThat @@ -59,7 +59,7 @@ class KeyboardDockingIndicationViewModelTest : SysuiTestCase() { val keyboardDockingIndicationInteractor = KeyboardDockingIndicationInteractor(keyboardRepository) - val configurationInteractor = ConfigurationInteractor(configurationRepository) + val configurationInteractor = ConfigurationInteractorImpl(configurationRepository) underTest = KeyboardDockingIndicationViewModel( @@ -67,7 +67,7 @@ class KeyboardDockingIndicationViewModelTest : SysuiTestCase() { context, keyboardDockingIndicationInteractor, configurationInteractor, - testScope.backgroundScope + testScope.backgroundScope, ) } 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 22913f12330f..8769022f3aa8 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 @@ -26,7 +26,7 @@ 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.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.coroutines.collectLastValue import com.android.systemui.display.data.repository.displayStateRepository import com.android.systemui.dump.DumpManager @@ -101,7 +101,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() { private val fakeConfigurationRepository = FakeConfigurationRepository().apply { onConfigurationChange(configuration) } - private val configurationInteractor = ConfigurationInteractor(fakeConfigurationRepository) + private val configurationInteractor = ConfigurationInteractorImpl(fakeConfigurationRepository) private val mockAsyncLayoutInflater = mock<AsyncLayoutInflater>() { @@ -151,10 +151,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() { inOrder.verify(qsImpl!!).onCreate(nullable()) inOrder .verify(qsImpl!!) - .onComponentCreated( - eq(qsSceneComponentFactory.components[0]), - any(), - ) + .onComponentCreated(eq(qsSceneComponentFactory.components[0]), any()) } @Test @@ -422,10 +419,7 @@ class QSSceneAdapterImplTest : SysuiTestCase() { inOrder.verify(newQSImpl).onCreate(nullable()) inOrder .verify(newQSImpl) - .onComponentCreated( - qsSceneComponentFactory.components[1], - bundleArgCaptor.value, - ) + .onComponentCreated(qsSceneComponentFactory.components[1], bundleArgCaptor.value) } @Test diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/HideNotificationsInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/HideNotificationsInteractorTest.kt index 476252737454..d665b3166986 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/HideNotificationsInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/HideNotificationsInteractorTest.kt @@ -24,7 +24,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.ConfigurationRepositoryImpl -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.coroutines.collectValues import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor @@ -75,9 +75,9 @@ open class HideNotificationsInteractorTest : SysuiTestCase() { configurationController, context, testScope.backgroundScope, - mock() + mock(), ) - private val configurationInteractor = ConfigurationInteractor(configurationRepository) + private val configurationInteractor = ConfigurationInteractorImpl(configurationRepository) private val unfoldTransitionRepository = UnfoldTransitionRepositoryImpl(Optional.of(unfoldTransitionProgressProvider)) @@ -103,7 +103,7 @@ open class HideNotificationsInteractorTest : SysuiTestCase() { unfoldTransitionInteractor, configurationInteractor, animationStatus, - powerInteractor + powerInteractor, ) } @@ -140,7 +140,7 @@ open class HideNotificationsInteractorTest : SysuiTestCase() { updateDisplay( width = INITIAL_DISPLAY_HEIGHT, height = INITIAL_DISPLAY_WIDTH, - rotation = ROTATION_90 + rotation = ROTATION_90, ) runCurrent() @@ -284,7 +284,7 @@ open class HideNotificationsInteractorTest : SysuiTestCase() { private fun updateDisplay( width: Int = INITIAL_DISPLAY_WIDTH, height: Int = INITIAL_DISPLAY_HEIGHT, - @Surface.Rotation rotation: Int = ROTATION_0 + @Surface.Rotation rotation: Int = ROTATION_0, ) { configuration.windowConfiguration.maxBounds.set(Rect(0, 0, width, height)) configuration.windowConfiguration.displayRotation = rotation diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/unfold/DisplaySwitchLatencyTrackerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/unfold/DisplaySwitchLatencyTrackerTest.kt index f1015394d7b1..09be93de9f3e 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/unfold/DisplaySwitchLatencyTrackerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/unfold/DisplaySwitchLatencyTrackerTest.kt @@ -24,7 +24,7 @@ import androidx.test.filters.SmallTest import com.android.internal.R import com.android.systemui.SysuiTestCase import com.android.systemui.common.ui.data.repository.ConfigurationRepositoryImpl -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.defaultDeviceState import com.android.systemui.deviceStateManager import com.android.systemui.display.data.repository.DeviceStateRepository @@ -107,9 +107,9 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { configurationController, context, testScope.backgroundScope, - mock() + mock(), ) - private val configurationInteractor = ConfigurationInteractor(configurationRepository) + private val configurationInteractor = ConfigurationInteractorImpl(configurationRepository) private val unfoldTransitionProgressProvider = FakeUnfoldTransitionProvider() private val unfoldTransitionRepository = UnfoldTransitionRepositoryImpl(Optional.of(unfoldTransitionProgressProvider)) @@ -145,7 +145,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { testScope.backgroundScope, displaySwitchLatencyLogger, systemClock, - deviceStateManager + deviceStateManager, ) } @@ -174,7 +174,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { DisplaySwitchLatencyEvent( latencyMs = 250, fromFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED, - toFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN + toFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN, ) assertThat(loggedEvent).isEqualTo(expectedLoggedEvent) } @@ -200,7 +200,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { testScope.backgroundScope, displaySwitchLatencyLogger, systemClock, - deviceStateManager + deviceStateManager, ) areAnimationEnabled.emit(true) @@ -226,7 +226,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { DisplaySwitchLatencyEvent( latencyMs = 50, fromFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED, - toFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN + toFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN, ) assertThat(loggedEvent).isEqualTo(expectedLoggedEvent) } @@ -259,7 +259,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { DisplaySwitchLatencyEvent( latencyMs = 50, fromFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED, - toFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN + toFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN, ) assertThat(loggedEvent).isEqualTo(expectedLoggedEvent) } @@ -289,7 +289,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { DisplaySwitchLatencyEvent( latencyMs = 200, fromFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN, - toFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED + toFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED, ) assertThat(loggedEvent).isEqualTo(expectedLoggedEvent) } @@ -310,7 +310,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { lastWakefulnessEvent.emit( WakefulnessModel( internalWakefulnessState = WakefulnessState.ASLEEP, - lastSleepReason = WakeSleepReason.FOLD + lastSleepReason = WakeSleepReason.FOLD, ) ) screenPowerState.emit(ScreenPowerState.SCREEN_OFF) @@ -326,7 +326,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { latencyMs = 200, fromFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN, toFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED, - toState = SysUiStatsLog.DISPLAY_SWITCH_LATENCY_TRACKED__TO_STATE__AOD + toState = SysUiStatsLog.DISPLAY_SWITCH_LATENCY_TRACKED__TO_STATE__AOD, ) assertThat(loggedEvent).isEqualTo(expectedLoggedEvent) } @@ -372,7 +372,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { lastWakefulnessEvent.emit( WakefulnessModel( internalWakefulnessState = WakefulnessState.ASLEEP, - lastSleepReason = WakeSleepReason.FOLD + lastSleepReason = WakeSleepReason.FOLD, ) ) screenPowerState.emit(ScreenPowerState.SCREEN_OFF) @@ -385,7 +385,7 @@ class DisplaySwitchLatencyTrackerTest : SysuiTestCase() { latencyMs = 0, fromFoldableDeviceState = FOLDABLE_DEVICE_STATE_HALF_OPEN, toFoldableDeviceState = FOLDABLE_DEVICE_STATE_CLOSED, - toState = SysUiStatsLog.DISPLAY_SWITCH_LATENCY_TRACKED__TO_STATE__SCREEN_OFF + toState = SysUiStatsLog.DISPLAY_SWITCH_LATENCY_TRACKED__TO_STATE__SCREEN_OFF, ) assertThat(loggedEvent).isEqualTo(expectedLoggedEvent) } diff --git a/packages/SystemUI/src/com/android/systemui/common/ui/ConfigurationStateModule.kt b/packages/SystemUI/src/com/android/systemui/common/ui/ConfigurationModule.kt index a3735f95cf74..7f50e4a06022 100644 --- a/packages/SystemUI/src/com/android/systemui/common/ui/ConfigurationStateModule.kt +++ b/packages/SystemUI/src/com/android/systemui/common/ui/ConfigurationModule.kt @@ -17,6 +17,9 @@ package com.android.systemui.common.ui import android.content.Context +import com.android.systemui.common.ui.data.repository.ConfigurationRepository +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.statusbar.policy.ConfigurationController @@ -35,17 +38,24 @@ import javax.inject.Qualifier @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class GlobalConfig @Module -interface ConfigurationStateModule { +interface ConfigurationModule { /** * Deprecated: [ConfigurationState] should be injected only with the correct annotation. For * now, without annotation the global config associated state is provided. */ @Binds + @Deprecated("Use the @GlobalConfig annotated one instead of this.") fun provideGlobalConfigurationState( @GlobalConfig configurationState: ConfigurationState ): ConfigurationState + @Binds + @Deprecated("Use the @GlobalConfig annotated one instead of this.") + fun provideDefaultConfigurationState( + @GlobalConfig configurationState: ConfigurationInteractor + ): ConfigurationInteractor + companion object { @SysUISingleton @Provides @@ -57,5 +67,14 @@ interface ConfigurationStateModule { ): ConfigurationState { return configStateFactory.create(context, configurationController) } + + @SysUISingleton + @Provides + @GlobalConfig + fun provideGlobalConfigurationInteractor( + configurationRepository: ConfigurationRepository + ): ConfigurationInteractor { + return ConfigurationInteractorImpl(configurationRepository) + } } } diff --git a/packages/SystemUI/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractor.kt b/packages/SystemUI/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractor.kt index eb423d69a4eb..97a23e1a5010 100644 --- a/packages/SystemUI/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractor.kt @@ -21,8 +21,6 @@ import android.content.res.Configuration import android.graphics.Rect import android.view.Surface import com.android.systemui.common.ui.data.repository.ConfigurationRepository -import com.android.systemui.dagger.SysUISingleton -import javax.inject.Inject import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine @@ -32,14 +30,52 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onStart /** Business logic related to configuration changes. */ -// TODO: b/374267505 - Create a @ShadeDisplayWindow annotated version of this. -@SysUISingleton -class ConfigurationInteractor @Inject constructor(private val repository: ConfigurationRepository) { +interface ConfigurationInteractor { /** * Returns screen size adjusted to rotation, so returned screen size is stable across all * rotations */ - private val Configuration.naturalScreenBounds: Rect + val Configuration.naturalScreenBounds: Rect + + /** Returns the unadjusted screen size. */ + val maxBounds: Flow<Rect> + + /** + * Returns screen size adjusted to rotation, so returned screen sizes are stable across all + * rotations, could be useful if you need to react to screen resize (e.g. fold/unfold on + * foldable devices) + */ + val naturalMaxBounds: Flow<Rect> + + /** + * The layout direction. Will be either `View#LAYOUT_DIRECTION_LTR` or + * `View#LAYOUT_DIRECTION_RTL`. + */ + val layoutDirection: Flow<Int> + + /** Emit an event on any config change */ + val onAnyConfigurationChange: Flow<Unit> + + /** Emits the new configuration on any configuration change */ + val configurationValues: Flow<Configuration> + + /** Emits the current resolution scaling factor */ + val scaleForResolution: Flow<Float> + + /** Given [resourceId], emit the dimension pixel size on config change */ + fun dimensionPixelSize(resourceId: Int): Flow<Int> + + /** Emits the dimensional pixel size of the given resource, inverting it for RTL if necessary */ + fun directionalDimensionPixelSize(originLayoutDirection: Int, resourceId: Int): Flow<Int> + + /** Given a set of [resourceId]s, emit Map<ResourceId, DimensionPixelSize> on config change */ + fun dimensionPixelSize(resourceIds: Set<Int>): Flow<Map<Int, Int>> +} + +class ConfigurationInteractorImpl(private val repository: ConfigurationRepository) : + ConfigurationInteractor { + + override val Configuration.naturalScreenBounds: Rect get() { val rotation = windowConfiguration.displayRotation val maxBounds = windowConfiguration.maxBounds @@ -50,53 +86,40 @@ class ConfigurationInteractor @Inject constructor(private val repository: Config } } - /** Returns the unadjusted screen size. */ - val maxBounds: Flow<Rect> = + override val maxBounds: Flow<Rect> = repository.configurationValues .map { Rect(it.windowConfiguration.maxBounds) } .distinctUntilChanged() - /** - * Returns screen size adjusted to rotation, so returned screen sizes are stable across all - * rotations, could be useful if you need to react to screen resize (e.g. fold/unfold on - * foldable devices) - */ - val naturalMaxBounds: Flow<Rect> = + override val naturalMaxBounds: Flow<Rect> = repository.configurationValues.map { it.naturalScreenBounds }.distinctUntilChanged() - /** - * The layout direction. Will be either `View#LAYOUT_DIRECTION_LTR` or - * `View#LAYOUT_DIRECTION_RTL`. - */ - val layoutDirection: Flow<Int> = + override val layoutDirection: Flow<Int> = repository.configurationValues.map { it.layoutDirection }.distinctUntilChanged() - /** Given [resourceId], emit the dimension pixel size on config change */ - fun dimensionPixelSize(resourceId: Int): Flow<Int> { + override fun dimensionPixelSize(resourceId: Int): Flow<Int> { return onAnyConfigurationChange.mapLatest { repository.getDimensionPixelSize(resourceId) } } - /** Emits the dimensional pixel size of the given resource, inverting it for RTL if necessary */ - fun directionalDimensionPixelSize(originLayoutDirection: Int, resourceId: Int): Flow<Int> { + override fun directionalDimensionPixelSize( + originLayoutDirection: Int, + resourceId: Int, + ): Flow<Int> { return dimensionPixelSize(resourceId).combine(layoutDirection) { size, direction -> if (originLayoutDirection == direction) size else -size } } - /** Given a set of [resourceId]s, emit Map<ResourceId, DimensionPixelSize> on config change */ - fun dimensionPixelSize(resourceIds: Set<Int>): Flow<Map<Int, Int>> { + override fun dimensionPixelSize(resourceIds: Set<Int>): Flow<Map<Int, Int>> { return onAnyConfigurationChange.mapLatest { resourceIds.associateWith { repository.getDimensionPixelSize(it) } } } - /** Emit an event on any config change */ - val onAnyConfigurationChange: Flow<Unit> = + override val onAnyConfigurationChange: Flow<Unit> = repository.onAnyConfigurationChange.onStart { emit(Unit) } - /** Emits the new configuration on any configuration change */ - val configurationValues: Flow<Configuration> = repository.configurationValues + override val configurationValues: Flow<Configuration> = repository.configurationValues - /** Emits the current resolution scaling factor */ - val scaleForResolution: Flow<Float> = repository.scaleForResolution + override val scaleForResolution: Flow<Float> = repository.scaleForResolution } diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index 9138243c642c..4447dff7af00 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -48,7 +48,7 @@ import com.android.systemui.brightness.dagger.ScreenBrightnessModule; import com.android.systemui.classifier.FalsingModule; import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule; import com.android.systemui.common.data.CommonDataLayerModule; -import com.android.systemui.common.ui.ConfigurationStateModule; +import com.android.systemui.common.ui.ConfigurationModule; import com.android.systemui.common.ui.data.repository.ConfigurationRepositoryModule; import com.android.systemui.common.usagestats.data.CommonUsageStatsDataLayerModule; import com.android.systemui.communal.dagger.CommunalModule; @@ -212,7 +212,7 @@ import javax.inject.Named; ClockRegistryModule.class, CommunalModule.class, CommonDataLayerModule.class, - ConfigurationStateModule.class, + ConfigurationModule.class, ConfigurationRepositoryModule.class, CommonUsageStatsDataLayerModule.class, ConfigurationControllerModule.class, 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 e922e09c26ec..d4adcdd49f5c 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 @@ -37,6 +37,7 @@ import com.android.systemui.qs.QSImpl import com.android.systemui.qs.dagger.QSSceneComponent import com.android.systemui.res.R import com.android.systemui.settings.brightness.MirrorController +import com.android.systemui.shade.ShadeDisplayAware import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.util.kotlin.sample @@ -206,7 +207,7 @@ constructor( dumpManager: DumpManager, @Main private val mainDispatcher: CoroutineDispatcher, @Application applicationScope: CoroutineScope, - private val configurationInteractor: ConfigurationInteractor, + @ShadeDisplayAware private val configurationInteractor: ConfigurationInteractor, private val asyncLayoutInflaterFactory: (Context) -> AsyncLayoutInflater, ) : QSContainerController, QSSceneAdapter, Dumpable { @@ -219,7 +220,7 @@ constructor( dumpManager: DumpManager, @Main dispatcher: CoroutineDispatcher, @Application scope: CoroutineScope, - configurationInteractor: ConfigurationInteractor, + @ShadeDisplayAware configurationInteractor: ConfigurationInteractor, ) : this( qsSceneComponentFactory, qsImplProvider, @@ -256,7 +257,7 @@ constructor( .stateIn( applicationScope, SharingStarted.WhileSubscribed(), - customizerState.value.isShowing + customizerState.value.isShowing, ) override val customizerAnimationDuration: StateFlow<Int> = customizerState diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayAwareModule.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayAwareModule.kt index 6fb9b1fe8873..42d4effbac3a 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayAwareModule.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeDisplayAwareModule.kt @@ -25,6 +25,8 @@ import com.android.systemui.common.ui.ConfigurationStateImpl import com.android.systemui.common.ui.GlobalConfig import com.android.systemui.common.ui.data.repository.ConfigurationRepository import com.android.systemui.common.ui.data.repository.ConfigurationRepositoryImpl +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.dagger.SysUISingleton import com.android.systemui.res.R import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround @@ -133,4 +135,18 @@ object ShadeDisplayAwareModule { globalConfigurationRepository } } + + @SysUISingleton + @Provides + @ShadeDisplayAware + fun provideShadeAwareConfigurationInteractor( + @ShadeDisplayAware configurationRepository: ConfigurationRepository, + @GlobalConfig configurationInteractor: ConfigurationInteractor, + ): ConfigurationInteractor { + return if (ShadeWindowGoesAround.isEnabled) { + ConfigurationInteractorImpl(configurationRepository) + } else { + configurationInteractor + } + } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorKosmos.kt index 7e0e5f39c708..f876003926a1 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/common/ui/domain/interactor/ConfigurationInteractorKosmos.kt @@ -20,4 +20,4 @@ import com.android.systemui.common.ui.data.repository.configurationRepository import com.android.systemui.kosmos.Kosmos var Kosmos.configurationInteractor: ConfigurationInteractor by - Kosmos.Fixture { ConfigurationInteractor(configurationRepository) } + Kosmos.Fixture { ConfigurationInteractorImpl(configurationRepository) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt index 8c4ec4c2cb75..4a6e27331efc 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt @@ -19,7 +19,7 @@ package com.android.systemui.keyguard.domain.interactor import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository -import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor +import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractorImpl import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.shared.model.KeyguardState @@ -77,7 +77,7 @@ object KeyguardInteractorFactory { repository = repository, powerInteractor = powerInteractor, bouncerRepository = bouncerRepository, - configurationInteractor = ConfigurationInteractor(configurationRepository), + configurationInteractor = ConfigurationInteractorImpl(configurationRepository), shadeRepository = shadeRepository, keyguardTransitionInteractor = keyguardTransitionInteractor, sceneInteractorProvider = { sceneInteractor }, |