diff options
2 files changed, 46 insertions, 5 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java index ba85e32484df..657fffb1875d 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java @@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -45,6 +46,8 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.communal.shared.model.CommunalScenes; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.BrokenWithSceneContainer; +import com.android.systemui.flags.DisableSceneContainer; +import com.android.systemui.flags.EnableSceneContainer; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.keyguard.shared.model.KeyguardState; import com.android.systemui.keyguard.shared.model.TransitionState; @@ -68,6 +71,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.plugga import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider; import com.android.systemui.statusbar.notification.domain.interactor.SeenNotificationsInteractor; import com.android.systemui.statusbar.notification.headsup.HeadsUpManager; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.kotlin.JavaAdapter; import com.android.systemui.util.time.FakeSystemClock; @@ -110,6 +114,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase { @Mock private VisibilityLocationProvider mVisibilityLocationProvider; @Mock private VisualStabilityProvider mVisualStabilityProvider; @Mock private VisualStabilityCoordinatorLogger mLogger; + @Mock private KeyguardStateController mKeyguardStateController; @Captor private ArgumentCaptor<WakefulnessLifecycle.Observer> mWakefulnessObserverCaptor; @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mSBStateListenerCaptor; @@ -155,6 +160,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase { mKosmos.getCommunalSceneInteractor(), mKosmos.getShadeInteractor(), mKosmos.getKeyguardTransitionInteractor(), + mKeyguardStateController, mLogger); mCoordinator.attach(mNotifPipeline); mTestScope.getTestScheduler().runCurrent(); @@ -539,6 +545,25 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase { @Test @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION) + @DisableSceneContainer + public void testNotLockscreenInGoneTransitionLegacy_invalidationCalled() { + // GIVEN visual stability is being maintained b/c animation is playing + doReturn(true).when(mKeyguardStateController).isKeyguardFadingAway(); + mCoordinator.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged(); + + assertFalse(mNotifStabilityManager.isPipelineRunAllowed()); + + // WHEN the animation has stopped playing + doReturn(false).when(mKeyguardStateController).isKeyguardFadingAway(); + mCoordinator.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged(); + + // invalidate is called, b/c we were previously suppressing the pipeline from running + verifyStabilityManagerWasInvalidated(times(1)); + } + + @Test + @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION) + @EnableSceneContainer @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer public void testNotLockscreenInGoneTransition_invalidationCalled() { // GIVEN visual stability is being maintained b/c animation is playing diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java index e75c11de57c7..3c31d893cf72 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java @@ -46,6 +46,7 @@ import com.android.systemui.statusbar.notification.collection.provider.VisualSta import com.android.systemui.statusbar.notification.domain.interactor.SeenNotificationsInteractor; import com.android.systemui.statusbar.notification.shared.NotificationMinimalism; import com.android.systemui.statusbar.notification.headsup.HeadsUpManager; +import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.kotlin.BooleanFlowOperators; import com.android.systemui.util.kotlin.JavaAdapter; @@ -78,6 +79,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable { private final CommunalSceneInteractor mCommunalSceneInteractor; private final ShadeInteractor mShadeInteractor; private final KeyguardTransitionInteractor mKeyguardTransitionInteractor; + private final KeyguardStateController mKeyguardStateController; private final VisualStabilityCoordinatorLogger mLogger; private boolean mSleepy = true; @@ -120,6 +122,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable { CommunalSceneInteractor communalSceneInteractor, ShadeInteractor shadeInteractor, KeyguardTransitionInteractor keyguardTransitionInteractor, + KeyguardStateController keyguardStateController, VisualStabilityCoordinatorLogger logger) { mHeadsUpManager = headsUpManager; mShadeAnimationInteractor = shadeAnimationInteractor; @@ -133,6 +136,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable { mCommunalSceneInteractor = communalSceneInteractor; mShadeInteractor = shadeInteractor; mKeyguardTransitionInteractor = keyguardTransitionInteractor; + mKeyguardStateController = keyguardStateController; mLogger = logger; dumpManager.registerDumpable(this); @@ -162,17 +166,29 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable { KeyguardState.LOCKSCREEN), this::onLockscreenKeyguardStateTransitionValueChanged); } + if (Flags.checkLockscreenGoneTransition()) { - mJavaAdapter.alwaysCollectFlow(mKeyguardTransitionInteractor.isInTransition( - Edge.create(KeyguardState.LOCKSCREEN, Scenes.Gone), - Edge.create(KeyguardState.LOCKSCREEN, KeyguardState.GONE)), - this::onLockscreenInGoneTransitionChanged); + if (SceneContainerFlag.isEnabled()) { + mJavaAdapter.alwaysCollectFlow(mKeyguardTransitionInteractor.isInTransition( + Edge.create(KeyguardState.LOCKSCREEN, Scenes.Gone), null), + this::onLockscreenInGoneTransitionChanged); + } else { + mKeyguardStateController.addCallback(mKeyguardFadeAwayAnimationCallback); + } } - pipeline.setVisualStabilityManager(mNotifStabilityManager); } + final KeyguardStateController.Callback mKeyguardFadeAwayAnimationCallback = + new KeyguardStateController.Callback() { + @Override + public void onKeyguardFadingAwayChanged() { + onLockscreenInGoneTransitionChanged( + mKeyguardStateController.isKeyguardFadingAway()); + } + }; + // TODO(b/203826051): Ensure stability manager can allow reordering off-screen // HUNs to the top of the shade private final NotifStabilityManager mNotifStabilityManager = |