Merge "Fix dream overlay lifecycle when bouncer is showing in scene container" into main
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
index a65e7ed..bbfc960 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
@@ -1035,6 +1035,7 @@
assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
}
+ @DisableFlags(FLAG_SCENE_CONTAINER)
@Test
fun testBouncerShown_setsLifecycleState() {
val client = client
@@ -1067,6 +1068,39 @@
assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
}
+ @EnableFlags(FLAG_SCENE_CONTAINER)
+ @Test
+ fun testBouncerShown_withSceneContainer_setsLifecycleState() {
+ val client = client
+
+ // Inform the overlay service of dream starting.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*isPreview*/,
+ false, /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+
+ // Bouncer shows.
+ kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "test")
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes from resumed back to started when the bouncer shows.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.STARTED)
+
+ // Bouncer closes.
+ kosmos.sceneInteractor.changeScene(Scenes.Dream, "test")
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes back to RESUMED.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ }
+
@Test
@DisableFlags(FLAG_SCENE_CONTAINER)
fun testCommunalVisible_setsLifecycleState() {
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
index b330ba3..408fe83 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
@@ -47,6 +47,7 @@
import androidx.lifecycle.ViewModelStore;
import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
+import com.android.compose.animation.scene.SceneKey;
import com.android.dream.lowlight.dagger.LowLightDreamModule;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
@@ -212,16 +213,14 @@
private final Consumer<Boolean> mBouncerShowingConsumer = new Consumer<>() {
@Override
public void accept(Boolean bouncerShowing) {
- mExecutor.execute(() -> {
- if (mBouncerShowing == bouncerShowing) {
- return;
- }
+ mExecutor.execute(() -> updateBouncerShowingLocked(bouncerShowing));
+ }
+ };
- mBouncerShowing = bouncerShowing;
-
- updateLifecycleStateLocked();
- updateGestureBlockingLocked();
- });
+ private final Consumer<SceneKey> mCurrentSceneConsumer = new Consumer<>() {
+ @Override
+ public void accept(SceneKey currentScene) {
+ mExecutor.execute(() -> updateBouncerShowingLocked(currentScene == Scenes.Bouncer));
}
};
@@ -425,8 +424,13 @@
mIsCommunalAvailableCallback));
mFlows.add(collectFlow(getLifecycle(), communalInteractor.isCommunalVisible(),
mCommunalVisibleConsumer));
- mFlows.add(collectFlow(getLifecycle(), keyguardInteractor.primaryBouncerShowing,
- mBouncerShowingConsumer));
+ if (SceneContainerFlag.isEnabled()) {
+ mFlows.add(collectFlow(getLifecycle(), sceneInteractor.getCurrentScene(),
+ mCurrentSceneConsumer));
+ } else {
+ mFlows.add(collectFlow(getLifecycle(), keyguardInteractor.primaryBouncerShowing,
+ mBouncerShowingConsumer));
+ }
}
@NonNull
@@ -707,4 +711,15 @@
Log.w(TAG, "Removing dream overlay container view parent!");
parentView.removeView(containerView);
}
+
+ private void updateBouncerShowingLocked(boolean bouncerShowing) {
+ if (mBouncerShowing == bouncerShowing) {
+ return;
+ }
+
+ mBouncerShowing = bouncerShowing;
+
+ updateLifecycleStateLocked();
+ updateGestureBlockingLocked();
+ }
}