Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4dd14c7 authored by Ale Nijamkin's avatar Ale Nijamkin
Browse files

[flexiglass] Other dual shade overlay can show.

QuickSettingsShadeOverlayActionsViewModel and NotificationsShadeOverlayActionsViewModel both bind the swipe-down from an edge to a ShowOverlay with a hideCurrentOverlays of themselves as the overlay to hide. Unfortunately, this doesn't work because the hiding of the overlay causes a transition from that overlay to the Gone scene which triggers a visibility change to false with a log statement of "visible → invisible, reason: scene is Gone and no overlays are shown"; this cancels the transition to show the new overlay, resulting in this bug.

Changing ShowOverlay to ReplaceByOverlay seems to do the trick.

Fix: 394331336
Test: manually verified that dragging from the top edge of the other
overlay shows that overlay while collapsing the current one
Flag: com.android.systemui.scene_container

Change-Id: I46f4b6c0d3de5f6561ffbff685c2ee52c8574254
parent aad774dd
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -22,8 +22,7 @@ import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.Back
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserActionResult.HideOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay.HideCurrentOverlays
import com.android.compose.animation.scene.UserActionResult.ReplaceByOverlay
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
@@ -77,10 +76,8 @@ class NotificationsShadeOverlayActionsViewModelTest : SysuiTestCase() {
            underTest.activateIn(this)

            val action =
                (actions?.get(Swipe.Down(fromSource = SceneContainerArea.EndHalf)) as? ShowOverlay)
                (actions?.get(Swipe.Down(fromSource = SceneContainerArea.EndHalf))
                    as? ReplaceByOverlay)
            assertThat(action?.overlay).isEqualTo(Overlays.QuickSettingsShade)
            val overlaysToHide = action?.hideCurrentOverlays as? HideCurrentOverlays.Some
            assertThat(overlaysToHide).isNotNull()
            assertThat(overlaysToHide?.overlays).containsExactly(Overlays.NotificationsShade)
        }
}
+2 −6
Original line number Diff line number Diff line
@@ -22,8 +22,7 @@ import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.Back
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserActionResult.HideOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay.HideCurrentOverlays
import com.android.compose.animation.scene.UserActionResult.ReplaceByOverlay
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
@@ -91,10 +90,7 @@ class QuickSettingsShadeOverlayActionsViewModelTest : SysuiTestCase() {

            val action =
                (actions?.get(Swipe.Down(fromSource = SceneContainerArea.StartHalf))
                    as? ShowOverlay)
                    as? ReplaceByOverlay)
            assertThat(action?.overlay).isEqualTo(Overlays.NotificationsShade)
            val overlaysToHide = action?.hideCurrentOverlays as? HideCurrentOverlays.Some
            assertThat(overlaysToHide).isNotNull()
            assertThat(overlaysToHide?.overlays).containsExactly(Overlays.QuickSettingsShade)
        }
}
+2 −6
Original line number Diff line number Diff line
@@ -21,8 +21,7 @@ import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.UserActionResult.HideOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay.HideCurrentOverlays
import com.android.compose.animation.scene.UserActionResult.ReplaceByOverlay
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.ui.viewmodel.SceneContainerArea
import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel
@@ -39,10 +38,7 @@ class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor() :
                Swipe.Up to HideOverlay(Overlays.NotificationsShade),
                Back to HideOverlay(Overlays.NotificationsShade),
                Swipe.Down(fromSource = SceneContainerArea.EndHalf) to
                    ShowOverlay(
                        Overlays.QuickSettingsShade,
                        hideCurrentOverlays = HideCurrentOverlays.Some(Overlays.NotificationsShade),
                    ),
                    ReplaceByOverlay(Overlays.QuickSettingsShade),
            )
        )
    }
+2 −7
Original line number Diff line number Diff line
@@ -21,8 +21,7 @@ import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.UserActionResult.HideOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay
import com.android.compose.animation.scene.UserActionResult.ShowOverlay.HideCurrentOverlays
import com.android.compose.animation.scene.UserActionResult.ReplaceByOverlay
import com.android.systemui.qs.panels.ui.viewmodel.EditModeViewModel
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.ui.viewmodel.SceneContainerArea
@@ -48,11 +47,7 @@ constructor(private val editModeViewModel: EditModeViewModel) : UserActionsViewM
                    }
                    put(
                        Swipe.Down(fromSource = SceneContainerArea.StartHalf),
                        ShowOverlay(
                            Overlays.NotificationsShade,
                            hideCurrentOverlays =
                                HideCurrentOverlays.Some(Overlays.QuickSettingsShade),
                        ),
                        ReplaceByOverlay(Overlays.NotificationsShade),
                    )
                }
            }