From 038d5c78b089d260fe010ffdad6a55e00277be82 Mon Sep 17 00:00:00 2001 From: Johannes Gallmann Date: Thu, 1 Jun 2023 23:32:28 +0200 Subject: [PATCH] Fix privacy dot not removed issue Bug: 285241369 Test: atest SystemStatusAnimationSchedulerImplTest Change-Id: Ib5bd99709cc718f76a45e50922cdf73a79d40dbc --- .../SystemStatusAnimationSchedulerImpl.kt | 4 ++- .../SystemStatusAnimationSchedulerImplTest.kt | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImpl.kt index 0a18f2d89d873..56ea703668d0d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImpl.kt @@ -188,7 +188,9 @@ constructor( if (animationState.value == ANIMATING_OUT) { coroutineScope.launch { withTimeout(DISAPPEAR_ANIMATION_DURATION) { - animationState.first { it == SHOWING_PERSISTENT_DOT || it == ANIMATION_QUEUED } + animationState.first { + it == SHOWING_PERSISTENT_DOT || it == IDLE || it == ANIMATION_QUEUED + } notifyHidePersistentDot() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt index 39ed5535ff3b8..914301f2e8302 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/events/SystemStatusAnimationSchedulerImplTest.kt @@ -60,9 +60,13 @@ import org.mockito.MockitoAnnotations class SystemStatusAnimationSchedulerImplTest : SysuiTestCase() { @Mock private lateinit var systemEventCoordinator: SystemEventCoordinator + @Mock private lateinit var statusBarWindowController: StatusBarWindowController + @Mock private lateinit var statusBarContentInsetProvider: StatusBarContentInsetsProvider + @Mock private lateinit var dumpManager: DumpManager + @Mock private lateinit var listener: SystemStatusAnimationCallback private lateinit var systemClock: FakeSystemClock @@ -379,6 +383,32 @@ class SystemStatusAnimationSchedulerImplTest : SysuiTestCase() { verify(listener, never()).onHidePersistentDot() } + @Test + fun testPrivacyDot_isRemovedDuringChipDisappearAnimation() = runTest { + // Instantiate class under test with TestScope from runTest + initializeSystemStatusAnimationScheduler(testScope = this) + + // create and schedule high priority event + createAndScheduleFakePrivacyEvent() + + // fast forward to ANIMATING_OUT state + fastForwardAnimationToState(ANIMATING_OUT) + assertEquals(ANIMATING_OUT, systemStatusAnimationScheduler.getAnimationState()) + verify(listener, times(1)).onSystemStatusAnimationTransitionToPersistentDot(any()) + + // remove persistent dot + systemStatusAnimationScheduler.removePersistentDot() + testScheduler.runCurrent() + + // skip disappear animation + animatorTestRule.advanceTimeBy(DISAPPEAR_ANIMATION_DURATION) + testScheduler.runCurrent() + + // verify that animationState changes to IDLE and onHidePersistentDot callback is invoked + assertEquals(IDLE, systemStatusAnimationScheduler.getAnimationState()) + verify(listener, times(1)).onHidePersistentDot() + } + @Test fun testPrivacyEvent_forceVisibleIsUpdated_whenRescheduledDuringQueuedState() = runTest { // Instantiate class under test with TestScope from runTest