Loading packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -1206,6 +1206,16 @@ flag { } } flag { name: "lockscreen_shade_to_dream_transition_fix" namespace: "systemui" description: "Flags a minor transition fix for starting the dream from lockscreen with shade open" bug: "409720192" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "dream_overlay_updated_ui" namespace: "systemui" Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt +37 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2 import com.android.systemui.Flags.FLAG_LOCKSCREEN_SHADE_TO_DREAM_TRANSITION_FIX import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository import com.android.systemui.common.shared.model.NotificationContainerBounds Loading Loading @@ -1338,6 +1339,42 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S assertThat(alpha).isEqualTo(1f) } @Test @EnableFlags(FLAG_LOCKSCREEN_SHADE_TO_DREAM_TRANSITION_FIX) @BrokenWithSceneContainer(430694649) fun alpha_isZero_duringLockscreenToDreamTransition() = kosmos.runTest { val viewState = ViewStateAccessor() val alpha by collectLastValue(underTest.keyguardAlpha(viewState, testScope.backgroundScope)) showLockscreenWithQSExpanded() // Start lockscreen to dream transition, alpha is 0 once the transition starts. keyguardTransitionRepository.sendTransitionStep( from = LOCKSCREEN, to = DREAMING, value = 0f, transitionState = TransitionState.STARTED, ) assertThat(alpha).isEqualTo(0f) keyguardTransitionRepository.sendTransitionStep( from = LOCKSCREEN, to = DREAMING, value = 0.5f, transitionState = TransitionState.RUNNING, ) assertThat(alpha).isEqualTo(0f) // Shade collapse animation finishing up. This can happen in the real world as the shade // collapse and dream start are not synced in any way. Keyguard alpha should not change // even when this is happening as the transition is ongoing. shadeTestUtil.setLockscreenShadeExpansion(0.1f) shadeTestUtil.setQsExpansion(0.1f) assertThat(alpha).isEqualTo(0f) } @Test @DisableSceneContainer fun notificationAbsoluteBottom_maxNotificationChanged() = Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +25 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel import android.content.Context import androidx.annotation.VisibleForTesting import com.android.app.tracing.coroutines.flow.flowName import com.android.systemui.Flags import com.android.systemui.Flags.glanceableHubV2 import com.android.systemui.bouncer.domain.interactor.BouncerInteractor import com.android.systemui.common.shared.model.NotificationContainerBounds Loading Loading @@ -596,11 +597,31 @@ constructor( } else { interactor.configurationBasedDimensions.flatMapLatest { configurationBasedDimensions -> combineTransform(shadeInteractor.shadeExpansion, shadeInteractor.qsExpansion) { shadeExpansion, qsExpansion -> combineTransform( shadeInteractor.shadeExpansion, shadeInteractor.qsExpansion, keyguardTransitionInteractor.isInTransition( // This branch is never triggered when scene container is enabled, the // edge param is unused. edge = Edge.create(from = LOCKSCREEN, to = Scenes.Dream), edgeWithoutSceneContainer = Edge.create(from = LOCKSCREEN, to = DREAMING), ), ) { shadeExpansion, qsExpansion, inLockscreenToDreamTransition -> if (shadeExpansion > 0f || qsExpansion > 0f) { if (configurationBasedDimensions.useSplitShade) { if ( Flags.lockscreenShadeToDreamTransitionFix() && inLockscreenToDreamTransition ) { // Don't show lock screen when transitioning to dream with the shade // open. The shade is collapsed by ACTION_CLOSE_SYSTEM_DIALOGS that // the system server sends when starting the dream. Since the shade // collapse isn't synced with the dream starting, if the collapse // animation finishes after the LOCKSCREN -> DREAMING transition // starts, it can cause keyguard to show up again briefly during the // transition. emit(0f) } else if (configurationBasedDimensions.useSplitShade) { emit(1f) } else if (qsExpansion == 1f) { // Ensure HUNs will be visible in QS shade (at least while Loading Loading
packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -1206,6 +1206,16 @@ flag { } } flag { name: "lockscreen_shade_to_dream_transition_fix" namespace: "systemui" description: "Flags a minor transition fix for starting the dream from lockscreen with shade open" bug: "409720192" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "dream_overlay_updated_ui" namespace: "systemui" Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt +37 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.FlagsParameterization import androidx.test.filters.SmallTest import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2 import com.android.systemui.Flags.FLAG_LOCKSCREEN_SHADE_TO_DREAM_TRANSITION_FIX import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository import com.android.systemui.common.shared.model.NotificationContainerBounds Loading Loading @@ -1338,6 +1339,42 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S assertThat(alpha).isEqualTo(1f) } @Test @EnableFlags(FLAG_LOCKSCREEN_SHADE_TO_DREAM_TRANSITION_FIX) @BrokenWithSceneContainer(430694649) fun alpha_isZero_duringLockscreenToDreamTransition() = kosmos.runTest { val viewState = ViewStateAccessor() val alpha by collectLastValue(underTest.keyguardAlpha(viewState, testScope.backgroundScope)) showLockscreenWithQSExpanded() // Start lockscreen to dream transition, alpha is 0 once the transition starts. keyguardTransitionRepository.sendTransitionStep( from = LOCKSCREEN, to = DREAMING, value = 0f, transitionState = TransitionState.STARTED, ) assertThat(alpha).isEqualTo(0f) keyguardTransitionRepository.sendTransitionStep( from = LOCKSCREEN, to = DREAMING, value = 0.5f, transitionState = TransitionState.RUNNING, ) assertThat(alpha).isEqualTo(0f) // Shade collapse animation finishing up. This can happen in the real world as the shade // collapse and dream start are not synced in any way. Keyguard alpha should not change // even when this is happening as the transition is ongoing. shadeTestUtil.setLockscreenShadeExpansion(0.1f) shadeTestUtil.setQsExpansion(0.1f) assertThat(alpha).isEqualTo(0f) } @Test @DisableSceneContainer fun notificationAbsoluteBottom_maxNotificationChanged() = Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +25 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel import android.content.Context import androidx.annotation.VisibleForTesting import com.android.app.tracing.coroutines.flow.flowName import com.android.systemui.Flags import com.android.systemui.Flags.glanceableHubV2 import com.android.systemui.bouncer.domain.interactor.BouncerInteractor import com.android.systemui.common.shared.model.NotificationContainerBounds Loading Loading @@ -596,11 +597,31 @@ constructor( } else { interactor.configurationBasedDimensions.flatMapLatest { configurationBasedDimensions -> combineTransform(shadeInteractor.shadeExpansion, shadeInteractor.qsExpansion) { shadeExpansion, qsExpansion -> combineTransform( shadeInteractor.shadeExpansion, shadeInteractor.qsExpansion, keyguardTransitionInteractor.isInTransition( // This branch is never triggered when scene container is enabled, the // edge param is unused. edge = Edge.create(from = LOCKSCREEN, to = Scenes.Dream), edgeWithoutSceneContainer = Edge.create(from = LOCKSCREEN, to = DREAMING), ), ) { shadeExpansion, qsExpansion, inLockscreenToDreamTransition -> if (shadeExpansion > 0f || qsExpansion > 0f) { if (configurationBasedDimensions.useSplitShade) { if ( Flags.lockscreenShadeToDreamTransitionFix() && inLockscreenToDreamTransition ) { // Don't show lock screen when transitioning to dream with the shade // open. The shade is collapsed by ACTION_CLOSE_SYSTEM_DIALOGS that // the system server sends when starting the dream. Since the shade // collapse isn't synced with the dream starting, if the collapse // animation finishes after the LOCKSCREN -> DREAMING transition // starts, it can cause keyguard to show up again briefly during the // transition. emit(0f) } else if (configurationBasedDimensions.useSplitShade) { emit(1f) } else if (qsExpansion == 1f) { // Ensure HUNs will be visible in QS shade (at least while Loading