diff options
| author | 2024-11-13 10:29:59 +0000 | |
|---|---|---|
| committer | 2024-11-13 10:29:59 +0000 | |
| commit | ae2d3b1079acc0967b70fb06073f423fd12b957f (patch) | |
| tree | b118e6da02a4d9a9b61e9ba1c183f3bddec1db37 | |
| parent | c7ebd30233246ed09bd49f6436085799e6a89a0a (diff) | |
| parent | b54233e88a63c1e48c60875feb0c2b65c8412819 (diff) | |
Merge "Fix up kotlin files for footer inlining" into main
12 files changed, 283 insertions, 219 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt index ca75ca679c31..a70d24efada7 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt @@ -28,43 +28,41 @@ import com.android.systemui.statusbar.notification.collection.ShadeListBuilder import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderListListener -import com.android.systemui.util.mockito.any -import com.android.systemui.util.mockito.mock -import com.android.systemui.util.mockito.withArgCaptor import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.Mockito.inOrder -import org.mockito.Mockito.never -import org.mockito.Mockito.spy -import org.mockito.Mockito.times -import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyNoMoreInteractions -import org.mockito.MockitoAnnotations +import org.mockito.kotlin.any +import org.mockito.kotlin.argumentCaptor +import org.mockito.kotlin.inOrder +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.spy +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoMoreInteractions @SmallTest @RunWith(AndroidJUnit4::class) class RenderStageManagerTest : SysuiTestCase() { - @Mock private lateinit var shadeListBuilder: ShadeListBuilder - @Mock private lateinit var onAfterRenderListListener: OnAfterRenderListListener - @Mock private lateinit var onAfterRenderGroupListener: OnAfterRenderGroupListener - @Mock private lateinit var onAfterRenderEntryListener: OnAfterRenderEntryListener + private val shadeListBuilder: ShadeListBuilder = mock() + private val onAfterRenderListListener: OnAfterRenderListListener = mock() + private val onAfterRenderGroupListener: OnAfterRenderGroupListener = mock() + private val onAfterRenderEntryListener: OnAfterRenderEntryListener = mock() + private val spyViewRenderer = spy(FakeNotifViewRenderer()) private lateinit var onRenderListListener: ShadeListBuilder.OnRenderListListener + private lateinit var renderStageManager: RenderStageManager - private val spyViewRenderer = spy(FakeNotifViewRenderer()) @Before fun setUp() { - MockitoAnnotations.initMocks(this) - renderStageManager = RenderStageManager() renderStageManager.attach(shadeListBuilder) - onRenderListListener = withArgCaptor { - verify(shadeListBuilder).setOnRenderListListener(capture()) - } + + val captor = argumentCaptor<ShadeListBuilder.OnRenderListListener>() + verify(shadeListBuilder).setOnRenderListListener(captor.capture()) + onRenderListListener = captor.lastValue } private fun setUpRenderer() { @@ -89,7 +87,7 @@ class RenderStageManagerTest : SysuiTestCase() { verifyNoMoreInteractions( onAfterRenderListListener, onAfterRenderGroupListener, - onAfterRenderEntryListener + onAfterRenderEntryListener, ) } @@ -171,7 +169,7 @@ class RenderStageManagerTest : SysuiTestCase() { verifyNoMoreInteractions( onAfterRenderListListener, onAfterRenderGroupListener, - onAfterRenderEntryListener + onAfterRenderEntryListener, ) } @@ -191,30 +189,27 @@ class RenderStageManagerTest : SysuiTestCase() { verifyNoMoreInteractions( onAfterRenderListListener, onAfterRenderGroupListener, - onAfterRenderEntryListener + onAfterRenderEntryListener, ) } - private fun listWith2Groups8Entries() = listOf( - group( - notif(1), - notif(2), - notif(3) - ), - notif(4), - group( - notif(5), - notif(6), - notif(7) - ), - notif(8) - ) + private fun listWith2Groups8Entries() = + listOf( + group(notif(1), notif(2), notif(3)), + notif(4), + group(notif(5), notif(6), notif(7)), + notif(8), + ) private class FakeNotifViewRenderer : NotifViewRenderer { override fun onRenderList(notifList: List<ListEntry>) {} + override fun getStackController(): NotifStackController = mock() + override fun getGroupController(group: GroupEntry): NotifGroupController = mock() + override fun getRowController(entry: NotificationEntry): NotifRowController = mock() + override fun onDispatchComplete() {} } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt index b2a485c48860..b877456ab604 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt @@ -32,23 +32,19 @@ import com.android.systemui.statusbar.notification.row.ExpandableView import com.android.systemui.statusbar.notification.shared.NotificationsImprovedHunAnimation import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.policy.AvalancheController -import com.android.systemui.util.mockito.mock import com.google.common.truth.Expect import com.google.common.truth.Truth.assertThat -import junit.framework.Assert.assertEquals -import junit.framework.Assert.assertFalse -import junit.framework.Assert.assertTrue import kotlinx.coroutines.ExperimentalCoroutinesApi import org.junit.Assume import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mockito.any -import org.mockito.Mockito.eq -import org.mockito.Mockito.mock -import org.mockito.Mockito.verify -import org.mockito.Mockito.`when` as whenever +import org.mockito.kotlin.any +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @@ -846,7 +842,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { val viewStart = 0f val shelfStart = 1f - val expandableView = mock(ExpandableView::class.java) + val expandableView = mock<ExpandableView>() whenever(expandableView.isExpandAnimationRunning).thenReturn(false) whenever(expandableView.hasExpandingChild()).thenReturn(false) @@ -854,7 +850,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState.yTranslation = viewStart stackScrollAlgorithm.updateViewWithShelf(expandableView, expandableViewState, shelfStart) - assertFalse(expandableViewState.hidden) + assertThat(expandableViewState.hidden).isFalse() } @Test @@ -862,7 +858,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { val shelfStart = 0f val viewStart = 1f - val expandableView = mock(ExpandableView::class.java) + val expandableView = mock<ExpandableView>() whenever(expandableView.isExpandAnimationRunning).thenReturn(false) whenever(expandableView.hasExpandingChild()).thenReturn(false) @@ -870,7 +866,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState.yTranslation = viewStart stackScrollAlgorithm.updateViewWithShelf(expandableView, expandableViewState, shelfStart) - assertTrue(expandableViewState.hidden) + assertThat(expandableViewState.hidden).isTrue() } @Test @@ -878,7 +874,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { val shelfStart = 0f val viewStart = 1f - val expandableView = mock(ExpandableView::class.java) + val expandableView = mock<ExpandableView>() whenever(expandableView.isExpandAnimationRunning).thenReturn(true) whenever(expandableView.hasExpandingChild()).thenReturn(true) @@ -886,7 +882,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState.yTranslation = viewStart stackScrollAlgorithm.updateViewWithShelf(expandableView, expandableViewState, shelfStart) - assertFalse(expandableViewState.hidden) + assertThat(expandableViewState.hidden).isFalse() } @Test @@ -898,12 +894,12 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState, /* isShadeExpanded= */ true, /* mustStayOnScreen= */ true, - /* isViewEndVisible= */ true, + /* topVisible = */ true, /* viewEnd= */ 0f, - /* maxHunY= */ 10f, + /* hunMax = */ 10f, ) - assertTrue(expandableViewState.headsUpIsVisible) + assertThat(expandableViewState.headsUpIsVisible).isTrue() } @Test @@ -915,12 +911,12 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState, /* isShadeExpanded= */ true, /* mustStayOnScreen= */ true, - /* isViewEndVisible= */ true, + /* topVisible = */ true, /* viewEnd= */ 10f, - /* maxHunY= */ 0f, + /* hunMax = */ 0f, ) - assertFalse(expandableViewState.headsUpIsVisible) + assertThat(expandableViewState.headsUpIsVisible).isFalse() } @Test @@ -932,12 +928,12 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState, /* isShadeExpanded= */ false, /* mustStayOnScreen= */ true, - /* isViewEndVisible= */ true, + /* topVisible = */ true, /* viewEnd= */ 10f, - /* maxHunY= */ 1f, + /* hunMax = */ 1f, ) - assertTrue(expandableViewState.headsUpIsVisible) + assertThat(expandableViewState.headsUpIsVisible).isTrue() } @Test @@ -949,12 +945,12 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState, /* isShadeExpanded= */ true, /* mustStayOnScreen= */ false, - /* isViewEndVisible= */ true, + /* topVisible = */ true, /* viewEnd= */ 10f, - /* maxHunY= */ 1f, + /* hunMax = */ 1f, ) - assertTrue(expandableViewState.headsUpIsVisible) + assertThat(expandableViewState.headsUpIsVisible).isTrue() } @Test @@ -966,12 +962,12 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { expandableViewState, /* isShadeExpanded= */ true, /* mustStayOnScreen= */ true, - /* isViewEndVisible= */ false, + /* topVisible = */ false, /* viewEnd= */ 10f, - /* maxHunY= */ 1f, + /* hunMax = */ 1f, ) - assertTrue(expandableViewState.headsUpIsVisible) + assertThat(expandableViewState.headsUpIsVisible).isTrue() } @Test @@ -986,7 +982,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { ) // qqs (10 + 0) < viewY (50) - assertEquals(50f, expandableViewState.yTranslation) + assertThat(expandableViewState.yTranslation).isEqualTo(50f) } @Test @@ -1001,7 +997,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { ) // qqs (10 + 0) > viewY (-10) - assertEquals(10f, expandableViewState.yTranslation) + assertThat(expandableViewState.yTranslation).isEqualTo(10f) } @Test @@ -1019,7 +1015,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { // newTranslation = max(10, -100) = 10 // distToRealY = 10 - (-100f) = 110 // height = max(20 - 110, 10f) - assertEquals(10, expandableViewState.height) + assertThat(expandableViewState.height).isEqualTo(10) } @Test @@ -1037,7 +1033,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { // newTranslation = max(10, 5) = 10 // distToRealY = 10 - 5 = 5 // height = max(20 - 5, 10) = 15 - assertEquals(15, expandableViewState.height) + assertThat(expandableViewState.height).isEqualTo(15) } @Test @@ -1047,9 +1043,9 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { /* hostViewHeight= */ 100f, /* stackY= */ 110f, /* viewMaxHeight= */ 20f, - /* originalCornerRoundness= */ 0f, + /* originalCornerRadius = */ 0f, ) - assertEquals(1f, currentRoundness) + assertThat(currentRoundness).isEqualTo(1f) } @Test @@ -1059,9 +1055,9 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { /* hostViewHeight= */ 100f, /* stackY= */ 90f, /* viewMaxHeight= */ 20f, - /* originalCornerRoundness= */ 0f, + /* originalCornerRadius = */ 0f, ) - assertEquals(0.5f, currentRoundness) + assertThat(currentRoundness).isEqualTo(0.5f) } @Test @@ -1071,9 +1067,9 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { /* hostViewHeight= */ 100f, /* stackY= */ 0f, /* viewMaxHeight= */ 20f, - /* originalCornerRoundness= */ 0f, + /* originalCornerRadius = */ 0f, ) - assertEquals(0f, currentRoundness) + assertThat(currentRoundness).isZero() } @Test @@ -1083,9 +1079,9 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { /* hostViewHeight= */ 100f, /* stackY= */ 0f, /* viewMaxHeight= */ 20f, - /* originalCornerRoundness= */ 1f, + /* originalCornerRadius = */ 1f, ) - assertEquals(1f, currentRoundness) + assertThat(currentRoundness).isEqualTo(1f) } @Test @@ -1105,13 +1101,14 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updateChildZValue( /* i= */ 0, /* childrenOnTop= */ 0.0f, - /* StackScrollAlgorithmState= */ algorithmState, + /* algorithmState = */ algorithmState, /* ambientState= */ ambientState, - /* shouldElevateHun= */ true, + /* isTopHun = */ true, ) // Then: full shadow would be applied - assertEquals(px(R.dimen.heads_up_pinned_elevation), childHunView.viewState.zTranslation) + assertThat(childHunView.viewState.zTranslation) + .isEqualTo(px(R.dimen.heads_up_pinned_elevation)) } @Test @@ -1133,9 +1130,9 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updateChildZValue( /* i= */ 0, /* childrenOnTop= */ 0.0f, - /* StackScrollAlgorithmState= */ algorithmState, + /* algorithmState = */ algorithmState, /* ambientState= */ ambientState, - /* shouldElevateHun= */ true, + /* isTopHun = */ true, ) // Then: HUN should have shadow, but not as full size @@ -1166,13 +1163,13 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updateChildZValue( /* i= */ 0, /* childrenOnTop= */ 0.0f, - /* StackScrollAlgorithmState= */ algorithmState, + /* algorithmState = */ algorithmState, /* ambientState= */ ambientState, - /* shouldElevateHun= */ true, + /* isTopHun = */ true, ) // Then: HUN should not have shadow - assertEquals(0f, childHunView.viewState.zTranslation) + assertThat(childHunView.viewState.zTranslation).isZero() } @Test @@ -1195,13 +1192,14 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updateChildZValue( /* i= */ 0, /* childrenOnTop= */ 0.0f, - /* StackScrollAlgorithmState= */ algorithmState, + /* algorithmState = */ algorithmState, /* ambientState= */ ambientState, - /* shouldElevateHun= */ true, + /* isTopHun = */ true, ) // Then: HUN should have full shadow - assertEquals(px(R.dimen.heads_up_pinned_elevation), childHunView.viewState.zTranslation) + assertThat(childHunView.viewState.zTranslation) + .isEqualTo(px(R.dimen.heads_up_pinned_elevation)) } @Test @@ -1225,9 +1223,9 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updateChildZValue( /* i= */ 0, /* childrenOnTop= */ 0.0f, - /* StackScrollAlgorithmState= */ algorithmState, + /* algorithmState = */ algorithmState, /* ambientState= */ ambientState, - /* shouldElevateHun= */ true, + /* isTopHun = */ true, ) // Then: HUN should have shadow, but not as full size @@ -1251,7 +1249,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updatePulsingStates(algorithmState, ambientState) // Then: ambientState.pulsingRow should still be pulsingNotificationView - assertTrue(ambientState.isPulsingRow(pulsingNotificationView)) + assertThat(ambientState.isPulsingRow(pulsingNotificationView)).isTrue() } @Test @@ -1268,7 +1266,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updatePulsingStates(algorithmState, ambientState) // Then: ambientState.pulsingRow should record the pulsingNotificationView - assertTrue(ambientState.isPulsingRow(pulsingNotificationView)) + assertThat(ambientState.isPulsingRow(pulsingNotificationView)).isTrue() } @Test @@ -1287,7 +1285,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.updatePulsingStates(algorithmState, ambientState) // Then: ambientState.pulsingRow should be null - assertTrue(ambientState.isPulsingRow(null)) + assertThat(ambientState.isPulsingRow(null)).isTrue() } @Test @@ -1310,10 +1308,8 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { stackScrollAlgorithm.resetViewStates(ambientState, 0) // Then: pulsingNotificationView should show at full height - assertEquals( - stackScrollAlgorithm.getMaxAllowedChildHeight(pulsingNotificationView), - pulsingNotificationView.viewState.height, - ) + assertThat(pulsingNotificationView.viewState.height) + .isEqualTo(stackScrollAlgorithm.getMaxAllowedChildHeight(pulsingNotificationView)) // After: reset dozeAmount and expansionFraction ambientState.dozeAmount = 0f @@ -1418,7 +1414,7 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { yTranslation = ambientState.maxHeadsUpTranslation - height // move it to the max } - assertTrue(stackScrollAlgorithm.shouldHunAppearFromBottom(ambientState, viewState)) + assertThat(stackScrollAlgorithm.shouldHunAppearFromBottom(ambientState, viewState)).isTrue() } @Test @@ -1431,7 +1427,8 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { ambientState.maxHeadsUpTranslation - height - 1 // move it below the max } - assertFalse(stackScrollAlgorithm.shouldHunAppearFromBottom(ambientState, viewState)) + assertThat(stackScrollAlgorithm.shouldHunAppearFromBottom(ambientState, viewState)) + .isFalse() } // endregion @@ -1579,13 +1576,13 @@ class StackScrollAlgorithmTest(flags: FlagsParameterization) : SysuiTestCase() { } private fun mockExpandableNotificationRow(): ExpandableNotificationRow { - return mock(ExpandableNotificationRow::class.java).apply { + return mock<ExpandableNotificationRow>().apply { whenever(viewState).thenReturn(ExpandableViewState()) } } private fun mockFooterView(height: Int): FooterView { - return mock(FooterView::class.java).apply { + return mock<FooterView>().apply { whenever(viewState).thenReturn(FooterViewState()) whenever(intrinsicHeight).thenReturn(height) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt index dc8ff63865a2..90212ed5b5f7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt @@ -27,13 +27,13 @@ import com.android.systemui.statusbar.notification.collection.render.requireSumm import javax.inject.Inject /** - * A small coordinator which updates the notif stack (the view layer which holds notifications) - * with high-level data after the stack is populated with the final entries. + * A small coordinator which updates the notif stack (the view layer which holds notifications) with + * high-level data after the stack is populated with the final entries. */ @CoordinatorScope -class DataStoreCoordinator @Inject internal constructor( - private val notifLiveDataStoreImpl: NotifLiveDataStoreImpl -) : CoreCoordinator { +class DataStoreCoordinator +@Inject +internal constructor(private val notifLiveDataStoreImpl: NotifLiveDataStoreImpl) : CoreCoordinator { override fun attach(pipeline: NotifPipeline) { pipeline.addOnAfterRenderListListener { entries, _ -> onAfterRenderList(entries) } @@ -61,4 +61,4 @@ class DataStoreCoordinator @Inject internal constructor( } } } -}
\ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt index e9292f8c3cb8..32de65be5b5b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt @@ -43,8 +43,7 @@ internal constructor( private val groupExpansionManagerImpl: GroupExpansionManagerImpl, private val renderListInteractor: RenderNotificationListInteractor, private val activeNotificationsInteractor: ActiveNotificationsInteractor, - private val sensitiveNotificationProtectionController: - SensitiveNotificationProtectionController, + private val sensitiveNotificationProtectionController: SensitiveNotificationProtectionController, ) : Coordinator { override fun attach(pipeline: NotifPipeline) { @@ -52,7 +51,7 @@ internal constructor( groupExpansionManagerImpl.attach(pipeline) } - fun onAfterRenderList(entries: List<ListEntry>, controller: NotifStackController) = + private fun onAfterRenderList(entries: List<ListEntry>, controller: NotifStackController) = traceSection("StackCoordinator.onAfterRenderList") { val notifStats = calculateNotifStats(entries) if (FooterViewRefactor.isEnabled) { @@ -78,13 +77,13 @@ internal constructor( val isSilent = section.bucket == BUCKET_SILENT // NOTE: NotificationEntry.isClearable will internally check group children to ensure // the group itself definitively clearable. - val isClearable = !isSensitiveContentProtectionActive && entry.isClearable - && !entry.isSensitive.value + val isClearable = + !isSensitiveContentProtectionActive && entry.isClearable && !entry.isSensitive.value when { isSilent && isClearable -> hasClearableSilentNotifs = true isSilent && !isClearable -> hasNonClearableSilentNotifs = true !isSilent && isClearable -> hasClearableAlertingNotifs = true - !isSilent && !isClearable -> hasNonClearableAlertingNotifs = true + else -> hasNonClearableAlertingNotifs = true } } return NotifStats( @@ -92,7 +91,7 @@ internal constructor( hasNonClearableAlertingNotifs = hasNonClearableAlertingNotifs, hasClearableAlertingNotifs = hasClearableAlertingNotifs, hasNonClearableSilentNotifs = hasNonClearableSilentNotifs, - hasClearableSilentNotifs = hasClearableSilentNotifs + hasClearableSilentNotifs = hasClearableSilentNotifs, ) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt index 1ea574b2f386..410b78b9d3bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt @@ -21,15 +21,15 @@ import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry /** - * This interface and the interfaces it returns define the main API surface that must be - * implemented by the view implementation. The term "render" is used to indicate a handoff - * to the view system, whether that be to attach views to the hierarchy or to update independent - * view models, data stores, or adapters. + * This interface and the interfaces it returns define the main API surface that must be implemented + * by the view implementation. The term "render" is used to indicate a handoff to the view system, + * whether that be to attach views to the hierarchy or to update independent view models, data + * stores, or adapters. */ interface NotifViewRenderer { /** - * Hand off the list of notifications to the view implementation. This may attach views to the + * Hand off the list of notifications to the view implementation. This may attach views to the * hierarchy or simply update an independent datastore, but once called, the implementer myst * also ensure that future calls to [getStackController], [getGroupController], and * [getRowController] will provide valid results. @@ -37,21 +37,21 @@ interface NotifViewRenderer { fun onRenderList(notifList: List<ListEntry>) /** - * Provides an interface for the pipeline to update the overall shade. - * This will be called at most once for each time [onRenderList] is called. + * Provides an interface for the pipeline to update the overall shade. This will be called at + * most once for each time [onRenderList] is called. */ fun getStackController(): NotifStackController /** - * Provides an interface for the pipeline to update individual groups. - * This will be called at most once for each group in the most recent call to [onRenderList]. + * Provides an interface for the pipeline to update individual groups. This will be called at + * most once for each group in the most recent call to [onRenderList]. */ fun getGroupController(group: GroupEntry): NotifGroupController /** - * Provides an interface for the pipeline to update individual entries. - * This will be called at most once for each entry in the most recent call to [onRenderList]. - * This includes top level entries, group summaries, and group children. + * Provides an interface for the pipeline to update individual entries. This will be called at + * most once for each entry in the most recent call to [onRenderList]. This includes top level + * entries, group summaries, and group children. */ fun getRowController(entry: NotificationEntry): NotifRowController @@ -62,8 +62,8 @@ interface NotifViewRenderer { * logic now that all data from the pipeline is known to have been set for this execution. * * When this is called, the view system can expect that no more calls will be made to the - * getters on this interface until after the next call to [onRenderList]. Additionally, there + * getters on this interface until after the next call to [onRenderList]. Additionally, there * should be no further calls made on the objects previously returned by those getters. */ fun onDispatchComplete() {} -}
\ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt index 9b5521018f97..9d3b098fa966 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.notification.collection.render +import com.android.app.tracing.traceSection import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.notification.collection.GroupEntry import com.android.systemui.statusbar.notification.collection.ListEntry @@ -26,7 +27,6 @@ import com.android.systemui.statusbar.notification.collection.ShadeListBuilder import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderListListener -import com.android.app.tracing.traceSection import javax.inject.Inject /** @@ -77,16 +77,17 @@ class RenderStageManager @Inject constructor() : PipelineDumpable { onAfterRenderEntryListeners.add(listener) } - override fun dumpPipeline(d: PipelineDumper) = with(d) { - dump("viewRenderer", viewRenderer) - dump("onAfterRenderListListeners", onAfterRenderListListeners) - dump("onAfterRenderGroupListeners", onAfterRenderGroupListeners) - dump("onAfterRenderEntryListeners", onAfterRenderEntryListeners) - } + override fun dumpPipeline(d: PipelineDumper) = + with(d) { + dump("viewRenderer", viewRenderer) + dump("onAfterRenderListListeners", onAfterRenderListListeners) + dump("onAfterRenderGroupListeners", onAfterRenderGroupListeners) + dump("onAfterRenderEntryListeners", onAfterRenderEntryListeners) + } private fun dispatchOnAfterRenderList( viewRenderer: NotifViewRenderer, - entries: List<ListEntry> + entries: List<ListEntry>, ) { traceSection("RenderStageManager.dispatchOnAfterRenderList") { val stackController = viewRenderer.getStackController() @@ -98,7 +99,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable { private fun dispatchOnAfterRenderGroups( viewRenderer: NotifViewRenderer, - entries: List<ListEntry> + entries: List<ListEntry>, ) { traceSection("RenderStageManager.dispatchOnAfterRenderGroups") { if (onAfterRenderGroupListeners.isEmpty()) { @@ -115,7 +116,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable { private fun dispatchOnAfterRenderEntries( viewRenderer: NotifViewRenderer, - entries: List<ListEntry> + entries: List<ListEntry>, ) { traceSection("RenderStageManager.dispatchOnAfterRenderEntries") { if (onAfterRenderEntryListeners.isEmpty()) { @@ -131,8 +132,8 @@ class RenderStageManager @Inject constructor() : PipelineDumpable { } /** - * Performs a forward, depth-first traversal of the list where the group's summary - * immediately precedes the group's children. + * Performs a forward, depth-first traversal of the list where the group's summary immediately + * precedes the group's children. */ private inline fun List<ListEntry>.forEachNotificationEntry( action: (NotificationEntry) -> Unit diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/ActiveNotificationListRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/ActiveNotificationListRepository.kt index 45d1034f2cfb..2b9e49372a63 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/ActiveNotificationListRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/data/repository/ActiveNotificationListRepository.kt @@ -66,7 +66,7 @@ data class ActiveNotificationsStore( * Map of notification key to rank, where rank is the 0-based index of the notification on the * system server, meaning that in the unfiltered flattened list of notification entries. */ - val rankingsMap: Map<String, Int> = emptyMap() + val rankingsMap: Map<String, Int> = emptyMap(), ) { operator fun get(key: Key): ActiveNotificationEntryModel? { return when (key) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsController.kt index 76e228bb54d2..2c5d9c2e449b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsController.kt @@ -38,6 +38,8 @@ interface NotificationsController { ) fun resetUserExpandedStates() + fun setNotificationSnoozed(sbn: StatusBarNotification, snoozeOption: SnoozeOption) + fun getActiveNotificationsCount(): Int } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt index 1677418c5c30..ea6a60bd7a1c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerImpl.kt @@ -129,7 +129,7 @@ constructor( } else { notificationListener.snoozeNotification( sbn.key, - snoozeOption.minutesToSnoozeFor * 60 * 1000.toLong() + snoozeOption.minutesToSnoozeFor * 60 * 1000.toLong(), ) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerStub.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerStub.kt index 65ba6de5b5cb..148b3f021643 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerStub.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/init/NotificationsControllerStub.kt @@ -28,9 +28,9 @@ import javax.inject.Inject /** * Implementation of [NotificationsController] that's used when notifications rendering is disabled. */ -class NotificationsControllerStub @Inject constructor( - private val notificationListener: NotificationListener -) : NotificationsController { +class NotificationsControllerStub +@Inject +constructor(private val notificationListener: NotificationListener) : NotificationsController { override fun initialize( presenter: NotificationPresenter, @@ -43,11 +43,9 @@ class NotificationsControllerStub @Inject constructor( notificationListener.registerAsSystemService() } - override fun resetUserExpandedStates() { - } + override fun resetUserExpandedStates() {} - override fun setNotificationSnoozed(sbn: StatusBarNotification, snoozeOption: SnoozeOption) { - } + override fun setNotificationSnoozed(sbn: StatusBarNotification, snoozeOption: SnoozeOption) {} override fun getActiveNotificationsCount(): Int { return 0 diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinatorTest.kt index e72109d4d8e3..a3c518128b47 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinatorTest.kt @@ -27,16 +27,15 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderListListener import com.android.systemui.statusbar.notification.collection.render.NotifStackController -import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyNoMoreInteractions -import org.mockito.MockitoAnnotations.initMocks +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoMoreInteractions @SmallTest @RunWith(AndroidJUnit4::class) @@ -47,14 +46,13 @@ class DataStoreCoordinatorTest : SysuiTestCase() { private lateinit var entry: NotificationEntry - @Mock private lateinit var pipeline: NotifPipeline - @Mock private lateinit var notifLiveDataStoreImpl: NotifLiveDataStoreImpl - @Mock private lateinit var stackController: NotifStackController - @Mock private lateinit var section: NotifSection + private val pipeline: NotifPipeline = mock() + private val notifLiveDataStoreImpl: NotifLiveDataStoreImpl = mock() + private val stackController: NotifStackController = mock() + private val section: NotifSection = mock() @Before fun setUp() { - initMocks(this) entry = NotificationEntryBuilder().setSection(section).build() coordinator = DataStoreCoordinator(notifLiveDataStoreImpl) coordinator.attach(pipeline) @@ -76,31 +74,35 @@ class DataStoreCoordinatorTest : SysuiTestCase() { listOf( notificationEntry("foo", 1), notificationEntry("foo", 2), - GroupEntryBuilder().setSummary( - notificationEntry("bar", 1) - ).setChildren( - listOf( - notificationEntry("bar", 2), - notificationEntry("bar", 3), - notificationEntry("bar", 4) + GroupEntryBuilder() + .setSummary(notificationEntry("bar", 1)) + .setChildren( + listOf( + notificationEntry("bar", 2), + notificationEntry("bar", 3), + notificationEntry("bar", 4), + ) ) - ).setSection(section).build(), - notificationEntry("baz", 1) + .setSection(section) + .build(), + notificationEntry("baz", 1), ), - stackController + stackController, ) val list: List<NotificationEntry> = withArgCaptor { verify(notifLiveDataStoreImpl).setActiveNotifList(capture()) } - assertThat(list.map { it.key }).containsExactly( - "0|foo|1|null|0", - "0|foo|2|null|0", - "0|bar|1|null|0", - "0|bar|2|null|0", - "0|bar|3|null|0", - "0|bar|4|null|0", - "0|baz|1|null|0" - ).inOrder() + assertThat(list.map { it.key }) + .containsExactly( + "0|foo|1|null|0", + "0|foo|2|null|0", + "0|bar|1|null|0", + "0|bar|2|null|0", + "0|bar|3|null|0", + "0|bar|4|null|0", + "0|baz|1|null|0", + ) + .inOrder() verifyNoMoreInteractions(notifLiveDataStoreImpl) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinatorTest.kt index 56b70bde2cca..2c37f510a45c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinatorTest.kt @@ -38,41 +38,37 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.stack.BUCKET_ALERTING import com.android.systemui.statusbar.notification.stack.BUCKET_SILENT import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController -import com.android.systemui.util.mockito.eq -import com.android.systemui.util.mockito.withArgCaptor import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyNoMoreInteractions -import org.mockito.MockitoAnnotations.initMocks -import org.mockito.Mockito.`when` as whenever +import org.mockito.kotlin.argumentCaptor +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoMoreInteractions +import org.mockito.kotlin.whenever @SmallTest @RunWith(AndroidJUnit4::class) @RunWithLooper class StackCoordinatorTest : SysuiTestCase() { + private lateinit var entry: NotificationEntry private lateinit var coordinator: StackCoordinator private lateinit var afterRenderListListener: OnAfterRenderListListener - private lateinit var entry: NotificationEntry - - @Mock private lateinit var pipeline: NotifPipeline - @Mock private lateinit var groupExpansionManagerImpl: GroupExpansionManagerImpl - @Mock private lateinit var renderListInteractor: RenderNotificationListInteractor - @Mock private lateinit var activeNotificationsInteractor: ActiveNotificationsInteractor - @Mock - private lateinit var sensitiveNotificationProtectionController: - SensitiveNotificationProtectionController - @Mock private lateinit var stackController: NotifStackController - @Mock private lateinit var section: NotifSection - @Mock private lateinit var row: ExpandableNotificationRow + private val pipeline: NotifPipeline = mock() + private val groupExpansionManagerImpl: GroupExpansionManagerImpl = mock() + private val renderListInteractor: RenderNotificationListInteractor = mock() + private val activeNotificationsInteractor: ActiveNotificationsInteractor = mock() + private val sensitiveNotificationProtectionController: + SensitiveNotificationProtectionController = + mock() + private val stackController: NotifStackController = mock() + private val section: NotifSection = mock() + private val row: ExpandableNotificationRow = mock() @Before fun setUp() { - initMocks(this) - whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(false) entry = NotificationEntryBuilder().setSection(section).build() @@ -86,9 +82,9 @@ class StackCoordinatorTest : SysuiTestCase() { sensitiveNotificationProtectionController, ) coordinator.attach(pipeline) - afterRenderListListener = withArgCaptor { - verify(pipeline).addOnAfterRenderListListener(capture()) - } + val captor = argumentCaptor<OnAfterRenderListListener>() + verify(pipeline).addOnAfterRenderListListener(captor.capture()) + afterRenderListListener = captor.lastValue } @Test @@ -109,7 +105,16 @@ class StackCoordinatorTest : SysuiTestCase() { fun testSetNotificationStats_clearableAlerting() { whenever(section.bucket).thenReturn(BUCKET_ALERTING) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) - verify(stackController).setNotifStats(NotifStats(1, false, true, false, false)) + verify(stackController) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = false, + hasClearableAlertingNotifs = true, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(activeNotificationsInteractor) } @@ -120,7 +125,16 @@ class StackCoordinatorTest : SysuiTestCase() { whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(section.bucket).thenReturn(BUCKET_ALERTING) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) - verify(stackController).setNotifStats(NotifStats(1, true, false, false, false)) + verify(stackController) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = true, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(activeNotificationsInteractor) } @@ -129,7 +143,16 @@ class StackCoordinatorTest : SysuiTestCase() { fun testSetNotificationStats_clearableSilent() { whenever(section.bucket).thenReturn(BUCKET_SILENT) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) - verify(stackController).setNotifStats(NotifStats(1, false, false, false, true)) + verify(stackController) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = false, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = true, + ) + ) verifyNoMoreInteractions(activeNotificationsInteractor) } @@ -140,7 +163,16 @@ class StackCoordinatorTest : SysuiTestCase() { whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(section.bucket).thenReturn(BUCKET_SILENT) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) - verify(stackController).setNotifStats(NotifStats(1, false, false, true, false)) + verify(stackController) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = false, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = true, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(activeNotificationsInteractor) } @@ -150,7 +182,15 @@ class StackCoordinatorTest : SysuiTestCase() { whenever(section.bucket).thenReturn(BUCKET_ALERTING) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) verify(activeNotificationsInteractor) - .setNotifStats(NotifStats(1, false, true, false, false)) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = false, + hasClearableAlertingNotifs = true, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(stackController) } @@ -158,14 +198,22 @@ class StackCoordinatorTest : SysuiTestCase() { @EnableFlags( FooterViewRefactor.FLAG_NAME, FLAG_SCREENSHARE_NOTIFICATION_HIDING, - FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX + FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX, ) fun testSetNotificationStats_footerFlagOn_isSensitiveStateActive_nonClearableAlerting() { whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(section.bucket).thenReturn(BUCKET_ALERTING) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) verify(activeNotificationsInteractor) - .setNotifStats(NotifStats(1, true, false, false, false)) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = true, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(stackController) } @@ -175,7 +223,15 @@ class StackCoordinatorTest : SysuiTestCase() { whenever(section.bucket).thenReturn(BUCKET_SILENT) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) verify(activeNotificationsInteractor) - .setNotifStats(NotifStats(1, false, false, false, true)) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = false, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = true, + ) + ) verifyNoMoreInteractions(stackController) } @@ -183,27 +239,41 @@ class StackCoordinatorTest : SysuiTestCase() { @EnableFlags( FooterViewRefactor.FLAG_NAME, FLAG_SCREENSHARE_NOTIFICATION_HIDING, - FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX + FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX, ) fun testSetNotificationStats_footerFlagOn_isSensitiveStateActive_nonClearableSilent() { whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(section.bucket).thenReturn(BUCKET_SILENT) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) verify(activeNotificationsInteractor) - .setNotifStats(NotifStats(1, false, false, true, false)) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = false, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = true, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(stackController) } @Test - @EnableFlags( - FooterViewRefactor.FLAG_NAME - ) + @EnableFlags(FooterViewRefactor.FLAG_NAME) fun testSetNotificationStats_footerFlagOn_nonClearableRedacted() { entry.setSensitive(true, true) whenever(section.bucket).thenReturn(BUCKET_ALERTING) afterRenderListListener.onAfterRenderList(listOf(entry), stackController) verify(activeNotificationsInteractor) - .setNotifStats(NotifStats(1, hasNonClearableAlertingNotifs = true, false, false, false)) + .setNotifStats( + NotifStats( + 1, + hasNonClearableAlertingNotifs = true, + hasClearableAlertingNotifs = false, + hasNonClearableSilentNotifs = false, + hasClearableSilentNotifs = false, + ) + ) verifyNoMoreInteractions(stackController) } } |