Fix privacy dot not removed issue

Bug: 285241369
Test: atest SystemStatusAnimationSchedulerImplTest
Change-Id: Ib5bd99709cc718f76a45e50922cdf73a79d40dbc
This commit is contained in:
Johannes Gallmann
2023-06-01 23:32:28 +02:00
parent 3816d9b959
commit 038d5c78b0
2 changed files with 33 additions and 1 deletions

View File

@@ -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()
}
}

View File

@@ -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