diff options
author | 2025-01-31 14:20:27 +0000 | |
---|---|---|
committer | 2025-01-31 19:11:59 +0000 | |
commit | 9f48f16dcee467d26017c3d3ec190d69d2d09f50 (patch) | |
tree | 73ca27f3f99b4777210bc02bf96d6c868f9b90b9 | |
parent | 10770a272d5dc4d57beaf4a07c84a76b03de9cca (diff) |
[Dual Shade] Hide the other shade when expanding QS/notifications shade.
Bug: 391151101
Test: Unit tests still pass.
Test: Manually verified shade layout on both narrow and large screens.
Flag: com.android.systemui.scene_container
Change-Id: I332b519008780ce84df54a5efb0a63a86c8cc8eb
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt index 661f2ae5132c..246177e0c46d 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImpl.kt @@ -35,6 +35,7 @@ import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated import javax.inject.Inject import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -45,6 +46,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn /** ShadeInteractor implementation for Scene Container. */ +@OptIn(ExperimentalCoroutinesApi::class) @SysUISingleton class ShadeInteractorSceneContainerImpl @Inject @@ -137,20 +139,18 @@ constructor( override fun expandNotificationsShade(loggingReason: String, transitionKey: TransitionKey?) { if (shadeModeInteractor.isDualShade) { - if (Overlays.QuickSettingsShade in sceneInteractor.currentOverlays.value) { - sceneInteractor.replaceOverlay( - from = Overlays.QuickSettingsShade, - to = Overlays.NotificationsShade, - loggingReason = loggingReason, - transitionKey = transitionKey, - ) - } else { - sceneInteractor.showOverlay( - overlay = Overlays.NotificationsShade, - loggingReason = loggingReason, - transitionKey = transitionKey, - ) - } + // Collapse the quick settings shade if it's expanded (no-op if it isn't). + sceneInteractor.hideOverlay( + overlay = Overlays.QuickSettingsShade, + loggingReason = loggingReason, + transitionKey = transitionKey, + ) + // Expand the notifications shade. + sceneInteractor.showOverlay( + overlay = Overlays.NotificationsShade, + loggingReason = loggingReason, + transitionKey = transitionKey, + ) } else { sceneInteractor.changeScene( toScene = Scenes.Shade, @@ -163,20 +163,18 @@ constructor( override fun expandQuickSettingsShade(loggingReason: String, transitionKey: TransitionKey?) { if (shadeModeInteractor.isDualShade) { - if (Overlays.NotificationsShade in sceneInteractor.currentOverlays.value) { - sceneInteractor.replaceOverlay( - from = Overlays.NotificationsShade, - to = Overlays.QuickSettingsShade, - loggingReason = loggingReason, - transitionKey = transitionKey, - ) - } else { - sceneInteractor.showOverlay( - overlay = Overlays.QuickSettingsShade, - loggingReason = loggingReason, - transitionKey = transitionKey, - ) - } + // Collapse the notifications shade if it's expanded (no-op if it isn't). + sceneInteractor.hideOverlay( + overlay = Overlays.NotificationsShade, + loggingReason = loggingReason, + transitionKey = transitionKey, + ) + // Expand the quick settings shade. + sceneInteractor.showOverlay( + overlay = Overlays.QuickSettingsShade, + loggingReason = loggingReason, + transitionKey = transitionKey, + ) } else { val isSplitShade = shadeModeInteractor.isSplitShade sceneInteractor.changeScene( @@ -199,12 +197,12 @@ constructor( // TODO(b/356596436): Define instant transition instead of snapToScene(). sceneInteractor.snapToScene( toScene = SceneFamilies.Home, - loggingReason = loggingReason + " (collapseNotificationsShade)", + loggingReason = "$loggingReason (collapseNotificationsShade)", ) } else { sceneInteractor.changeScene( toScene = SceneFamilies.Home, - loggingReason = loggingReason + " (collapseNotificationsShade)", + loggingReason = "$loggingReason (collapseNotificationsShade)", transitionKey = transitionKey ?: ToSplitShade.takeIf { shadeModeInteractor.isSplitShade }, ) @@ -233,12 +231,12 @@ constructor( // TODO(b/356596436): Define instant transition instead of snapToScene(). sceneInteractor.snapToScene( toScene = targetScene, - loggingReason = loggingReason + " (collapseQuickSettingsShade)", + loggingReason = "$loggingReason (collapseQuickSettingsShade)", ) } else { sceneInteractor.changeScene( toScene = targetScene, - loggingReason = loggingReason + " (collapseQuickSettingsShade)", + loggingReason = "$loggingReason (collapseQuickSettingsShade)", transitionKey = transitionKey ?: ToSplitShade.takeIf { isSplitShade }, ) } |