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