diff options
| author | 2024-10-21 14:32:47 +0000 | |
|---|---|---|
| committer | 2024-10-21 14:32:47 +0000 | |
| commit | 97951cbcb8994d64d04ddbc80201f70da2045b8c (patch) | |
| tree | bdab69aef385bb73b25b9e478628d4463192fcf9 | |
| parent | 7db7b2f10a09e85ddfff52d4f9dc645243261e4f (diff) | |
| parent | 95d3598ec4d28d5b4899c4109b4cd288d0875a67 (diff) | |
Merge "Fix perf regression VisualStabilityCoordinator" into main
2 files changed, 23 insertions, 21 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 ea5c29ef30aa..cfac486dd37c 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 @@ -24,6 +24,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; @@ -65,6 +66,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.policy.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; @@ -98,6 +100,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; @@ -138,6 +141,7 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {                  mKosmos.getCommunalSceneInteractor(),                  mKosmos.getShadeInteractor(),                  mKosmos.getKeyguardTransitionInteractor(), +                mKeyguardStateController,                  mLogger);          mCoordinator.attach(mNotifPipeline);          mTestScope.getTestScheduler().runCurrent(); @@ -522,23 +526,13 @@ public class VisualStabilityCoordinatorTest extends SysuiTestCase {      @EnableFlags(Flags.FLAG_CHECK_LOCKSCREEN_GONE_TRANSITION)      public void testNotLockscreenInGoneTransition_invalidationCalled() {          // GIVEN visual stability is being maintained b/c animation is playing -        mKosmos.getKeyguardTransitionRepository().sendTransitionStepJava( -                mTestScope, new TransitionStep( -                        KeyguardState.LOCKSCREEN, -                        KeyguardState.GONE, -                        1f, -                        TransitionState.RUNNING),  /* validateStep = */ false); -        mTestScope.getTestScheduler().runCurrent(); +        doReturn(true).when(mKeyguardStateController).isKeyguardFadingAway(); +        mCoordinator.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged();          assertFalse(mNotifStabilityManager.isPipelineRunAllowed());          // WHEN the animation has stopped playing -        mKosmos.getKeyguardTransitionRepository().sendTransitionStepJava( -                mTestScope, new TransitionStep( -                        KeyguardState.LOCKSCREEN, -                        KeyguardState.GONE, -                        1f, -                        TransitionState.FINISHED),  /* validateStep = */ false); -        mTestScope.getTestScheduler().runCurrent(); +        doReturn(false).when(mKeyguardStateController).isKeyguardFadingAway(); +        mCoordinator.mKeyguardFadeAwayAnimationCallback.onKeyguardFadingAwayChanged();          // invalidate is called, b/c we were previously suppressing the pipeline from running          verifyStabilityManagerWasInvalidated(times(1)); 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 8660cd117493..6edffc0b7542 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 @@ -29,11 +29,9 @@ import com.android.systemui.dagger.qualifiers.Background;  import com.android.systemui.dump.DumpManager;  import com.android.systemui.keyguard.WakefulnessLifecycle;  import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; -import com.android.systemui.keyguard.shared.model.Edge;  import com.android.systemui.keyguard.shared.model.KeyguardState;  import com.android.systemui.plugins.statusbar.StatusBarStateController;  import com.android.systemui.scene.shared.flag.SceneContainerFlag; -import com.android.systemui.scene.shared.model.Scenes;  import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractor;  import com.android.systemui.shade.domain.interactor.ShadeInteractor;  import com.android.systemui.statusbar.notification.VisibilityLocationProvider; @@ -46,6 +44,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.policy.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 +77,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 +120,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable {              CommunalSceneInteractor communalSceneInteractor,              ShadeInteractor shadeInteractor,              KeyguardTransitionInteractor keyguardTransitionInteractor, +            KeyguardStateController keyguardStateController,              VisualStabilityCoordinatorLogger logger) {          mHeadsUpManager = headsUpManager;          mShadeAnimationInteractor = shadeAnimationInteractor; @@ -133,6 +134,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable {          mCommunalSceneInteractor = communalSceneInteractor;          mShadeInteractor = shadeInteractor;          mKeyguardTransitionInteractor = keyguardTransitionInteractor; +        mKeyguardStateController = keyguardStateController;          mLogger = logger;          dumpManager.registerDumpable(this); @@ -162,17 +164,23 @@ 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); +            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 =  |