diff options
2 files changed, 52 insertions, 5 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt index 29f286fd31fa..7420ea0ba56a 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt @@ -248,6 +248,35 @@ class AvalancheControllerTest : SysuiTestCase() { } @Test + fun testGetDurationMs_untrackedEntryEmptyAvalanche_useAutoDismissTime() { + val givenEntry = createHeadsUpEntry(id = 0) + + // Nothing is showing + mAvalancheController.headsUpEntryShowing = null + + // Nothing is next + mAvalancheController.clearNext() + + val durationMs = mAvalancheController.getDurationMs(givenEntry, autoDismissMs = 5000) + Truth.assertThat(durationMs).isEqualTo(5000) + } + + @Test + fun testGetDurationMs_untrackedEntryNonEmptyAvalanche_useAutoDismissTime() { + val givenEntry = createHeadsUpEntry(id = 0) + + // Given entry not tracked + mAvalancheController.headsUpEntryShowing = createHeadsUpEntry(id = 1) + + mAvalancheController.clearNext() + val nextEntry = createHeadsUpEntry(id = 2) + mAvalancheController.addToNext(nextEntry, runnableMock!!) + + val durationMs = mAvalancheController.getDurationMs(givenEntry, autoDismissMs = 5000) + Truth.assertThat(durationMs).isEqualTo(5000) + } + + @Test fun testGetDurationMs_lastEntry_useAutoDismissTime() { // Entry is showing val showingEntry = createHeadsUpEntry(id = 0) @@ -261,7 +290,7 @@ class AvalancheControllerTest : SysuiTestCase() { } @Test - fun testGetDurationMs_nextEntryLowerPriority_500() { + fun testGetDurationMs_nextEntryLowerPriority_5000() { // Entry is showing val showingEntry = createFsiHeadsUpEntry(id = 1) mAvalancheController.headsUpEntryShowing = showingEntry diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt index f5735300c30b..36c23d381844 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt @@ -153,27 +153,45 @@ class AvalancheController @Inject constructor( // Use default duration, like we did before AvalancheController existed return autoDismissMs } - val showingList: MutableList<HeadsUpEntry> = mutableListOf() - headsUpEntryShowing?.let { showingList.add(it) } - + if (headsUpEntryShowing != null) { + showingList.add(headsUpEntryShowing!!) + } nextList.sort() val entryList = showingList + nextList - val thisEntryIndex = entryList.indexOf(entry) + if (entryList.isEmpty()) { + log { "No avalanche HUNs, use default ms: $autoDismissMs" } + return autoDismissMs + } + // entryList.indexOf(entry) returns -1 even when the entry is in entryList + var thisEntryIndex = -1 + for ((i, e) in entryList.withIndex()) { + if (e == entry) { + thisEntryIndex = i + } + } + if (thisEntryIndex == -1) { + log { "Untracked entry, use default ms: $autoDismissMs" } + return autoDismissMs + } val nextEntryIndex = thisEntryIndex + 1 // If last entry, use default duration if (nextEntryIndex >= entryList.size) { + log { "Last entry, use default ms: $autoDismissMs" } return autoDismissMs } val nextEntry = entryList[nextEntryIndex] if (nextEntry.compareNonTimeFields(entry) == -1) { // Next entry is higher priority + log { "Next entry is higher priority: 500ms" } return 500 } else if (nextEntry.compareNonTimeFields(entry) == 0) { // Next entry is same priority + log { "Next entry is same priority: 1000ms" } return 1000 } else { + log { "Next entry is lower priority, use default ms: $autoDismissMs" } return autoDismissMs } } |