Merge "Fix updating icons with BigPictureIconManager after reinflating the layout" into main
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt
index 79bdd1f..e6deb8b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/BigPictureIconManager.kt
@@ -117,11 +117,6 @@
@WorkerThread
override fun updateIcon(drawableConsumer: NotificationDrawableConsumer, icon: Icon?): Runnable {
- if (this.drawableConsumer != null && this.drawableConsumer != drawableConsumer) {
- Log.wtf(TAG, "A consumer is already set for this iconManager.")
- return Runnable {}
- }
-
this.drawableConsumer = drawableConsumer
this.lastLoadingJob?.cancel()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt
index 1bb7b61..2bad9f5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/BigPictureIconManagerTest.kt
@@ -143,18 +143,44 @@
}
@Test
- fun onIconUpdated_consumerAlreadySet_nothingHappens() =
+ fun onIconUpdated_consumerAlreadySet_newConsumerIsUpdatedWithPlaceholder() =
testScope.runTest {
// GIVEN a consumer is set
- val otherConsumer: NotificationDrawableConsumer = mock()
iconManager.updateIcon(mockConsumer, supportedIcon).run()
clearInvocations(mockConsumer)
// WHEN a new consumer is set
- iconManager.updateIcon(otherConsumer, unsupportedIcon).run()
+ val newConsumer: NotificationDrawableConsumer = mock()
+ iconManager.updateIcon(newConsumer, supportedIcon).run()
- // THEN nothing happens
- verifyZeroInteractions(mockConsumer, otherConsumer)
+ // THEN the new consumer is updated
+ verify(newConsumer).setImageDrawable(drawableCaptor.capture())
+ assertIsPlaceHolder(drawableCaptor.value)
+ assertSize(drawableCaptor.value)
+ // AND nothing happens on the old consumer
+ verifyZeroInteractions(mockConsumer)
+ }
+
+ @Test
+ fun onIconUpdated_consumerAlreadySet_newConsumerIsUpdatedWithFullImage() =
+ testScope.runTest {
+ // GIVEN a consumer is set
+ iconManager.updateIcon(mockConsumer, supportedIcon).run()
+ // AND an icon is loaded
+ iconManager.onViewShown(true)
+ runCurrent()
+ clearInvocations(mockConsumer)
+
+ // WHEN a new consumer is set
+ val newConsumer: NotificationDrawableConsumer = mock()
+ iconManager.updateIcon(newConsumer, supportedIcon).run()
+
+ // THEN the new consumer is updated
+ verify(newConsumer).setImageDrawable(drawableCaptor.capture())
+ assertIsFullImage(drawableCaptor.value)
+ assertSize(drawableCaptor.value)
+ // AND nothing happens on the old consumer
+ verifyZeroInteractions(mockConsumer)
}
@Test