Fix PrivacyChip not visible issue
Bug: 281807669 Test: atest SysteMStatusAnimationSchedulerImplTest Change-Id: I9851e6ed4cb956d0459ef56251eb0ef3210764b8
This commit is contained in:
@@ -87,7 +87,8 @@ class BatteryEvent(@IntRange(from = 0, to = 100) val batteryLevel: Int) : Status
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
|
/** open only for testing purposes. (See [FakeStatusEvent.kt]) */
|
||||||
|
open class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
|
||||||
override var contentDescription: String? = null
|
override var contentDescription: String? = null
|
||||||
override val priority = 100
|
override val priority = 100
|
||||||
override var forceVisible = true
|
override var forceVisible = true
|
||||||
@@ -107,9 +108,9 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun shouldUpdateFromEvent(other: StatusEvent?): Boolean {
|
override fun shouldUpdateFromEvent(other: StatusEvent?): Boolean {
|
||||||
return other is PrivacyEvent &&
|
return other is PrivacyEvent && (other.privacyItems != privacyItems ||
|
||||||
(other.privacyItems != privacyItems ||
|
other.contentDescription != contentDescription ||
|
||||||
other.contentDescription != contentDescription)
|
(other.forceVisible && !forceVisible))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateFromEvent(other: StatusEvent?) {
|
override fun updateFromEvent(other: StatusEvent?) {
|
||||||
@@ -122,5 +123,7 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
|
|||||||
|
|
||||||
privacyChip?.contentDescription = other.contentDescription
|
privacyChip?.contentDescription = other.contentDescription
|
||||||
privacyChip?.privacyList = other.privacyItems
|
privacyChip?.privacyList = other.privacyItems
|
||||||
|
|
||||||
|
if (other.forceVisible) forceVisible = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
currentlyDisplayedEvent?.updateFromEvent(event)
|
currentlyDisplayedEvent?.updateFromEvent(event)
|
||||||
|
if (event.forceVisible) hasPersistentDot = true
|
||||||
} else if (scheduledEvent.value?.shouldUpdateFromEvent(event) == true) {
|
} else if (scheduledEvent.value?.shouldUpdateFromEvent(event) == true) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(
|
Log.d(
|
||||||
|
|||||||
@@ -27,3 +27,9 @@ class FakeStatusEvent(
|
|||||||
override val showAnimation: Boolean = true,
|
override val showAnimation: Boolean = true,
|
||||||
override var contentDescription: String? = "",
|
override var contentDescription: String? = "",
|
||||||
) : StatusEvent
|
) : StatusEvent
|
||||||
|
|
||||||
|
class FakePrivacyStatusEvent(
|
||||||
|
override val viewCreator: ViewCreator,
|
||||||
|
override val showAnimation: Boolean = true,
|
||||||
|
override var contentDescription: String? = "",
|
||||||
|
) : PrivacyEvent()
|
||||||
|
|||||||
@@ -379,6 +379,53 @@ class SystemStatusAnimationSchedulerImplTest : SysuiTestCase() {
|
|||||||
verify(listener, never()).onHidePersistentDot()
|
verify(listener, never()).onHidePersistentDot()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testPrivacyEvent_forceVisibleIsUpdated_whenRescheduledDuringQueuedState() = runTest {
|
||||||
|
// Instantiate class under test with TestScope from runTest
|
||||||
|
initializeSystemStatusAnimationScheduler(testScope = this)
|
||||||
|
|
||||||
|
// create and schedule privacy event
|
||||||
|
createAndScheduleFakePrivacyEvent()
|
||||||
|
// request removal of persistent dot (sets forceVisible to false)
|
||||||
|
systemStatusAnimationScheduler.removePersistentDot()
|
||||||
|
// create and schedule a privacy event again (resets forceVisible to true)
|
||||||
|
createAndScheduleFakePrivacyEvent()
|
||||||
|
|
||||||
|
// skip chip animation lifecycle and fast forward to SHOWING_PERSISTENT_DOT state
|
||||||
|
fastForwardAnimationToState(SHOWING_PERSISTENT_DOT)
|
||||||
|
|
||||||
|
// verify that we reach SHOWING_PERSISTENT_DOT and that listener callback is invoked
|
||||||
|
assertEquals(SHOWING_PERSISTENT_DOT, systemStatusAnimationScheduler.getAnimationState())
|
||||||
|
verify(listener, times(1)).onSystemStatusAnimationTransitionToPersistentDot(any())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testPrivacyEvent_forceVisibleIsUpdated_whenRescheduledDuringAnimatingState() = runTest {
|
||||||
|
// Instantiate class under test with TestScope from runTest
|
||||||
|
initializeSystemStatusAnimationScheduler(testScope = this)
|
||||||
|
|
||||||
|
// create and schedule privacy event
|
||||||
|
createAndScheduleFakePrivacyEvent()
|
||||||
|
// request removal of persistent dot (sets forceVisible to false)
|
||||||
|
systemStatusAnimationScheduler.removePersistentDot()
|
||||||
|
fastForwardAnimationToState(RUNNING_CHIP_ANIM)
|
||||||
|
|
||||||
|
// create and schedule a privacy event again (resets forceVisible to true)
|
||||||
|
createAndScheduleFakePrivacyEvent()
|
||||||
|
|
||||||
|
// skip status chip display time
|
||||||
|
advanceTimeBy(DISPLAY_LENGTH + 1)
|
||||||
|
assertEquals(ANIMATING_OUT, systemStatusAnimationScheduler.getAnimationState())
|
||||||
|
verify(listener, times(1)).onSystemEventAnimationFinish(anyBoolean())
|
||||||
|
|
||||||
|
// skip disappear animation
|
||||||
|
animatorTestRule.advanceTimeBy(DISAPPEAR_ANIMATION_DURATION)
|
||||||
|
|
||||||
|
// verify that we reach SHOWING_PERSISTENT_DOT and that listener callback is invoked
|
||||||
|
assertEquals(SHOWING_PERSISTENT_DOT, systemStatusAnimationScheduler.getAnimationState())
|
||||||
|
verify(listener, times(1)).onSystemStatusAnimationTransitionToPersistentDot(any())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testNewEvent_isScheduled_whenPostedDuringRemovalAnimation() = runTest {
|
fun testNewEvent_isScheduled_whenPostedDuringRemovalAnimation() = runTest {
|
||||||
// Instantiate class under test with TestScope from runTest
|
// Instantiate class under test with TestScope from runTest
|
||||||
@@ -440,8 +487,7 @@ class SystemStatusAnimationSchedulerImplTest : SysuiTestCase() {
|
|||||||
|
|
||||||
private fun createAndScheduleFakePrivacyEvent(): OngoingPrivacyChip {
|
private fun createAndScheduleFakePrivacyEvent(): OngoingPrivacyChip {
|
||||||
val privacyChip = OngoingPrivacyChip(mContext)
|
val privacyChip = OngoingPrivacyChip(mContext)
|
||||||
val fakePrivacyStatusEvent =
|
val fakePrivacyStatusEvent = FakePrivacyStatusEvent(viewCreator = { privacyChip })
|
||||||
FakeStatusEvent(viewCreator = { privacyChip }, priority = 100, forceVisible = true)
|
|
||||||
systemStatusAnimationScheduler.onStatusEvent(fakePrivacyStatusEvent)
|
systemStatusAnimationScheduler.onStatusEvent(fakePrivacyStatusEvent)
|
||||||
return privacyChip
|
return privacyChip
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user