Merge "Fix screenshots not triggering onRenderParametersChanged. Test: Unit Test Bug: 237644169 Relnote: Include the isForScreenShot in the equals and hash code. Make sure the onRenderParametersChanged gets a correct isForScreenshot value" into androidx-main
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/RenderParameters.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/RenderParameters.kt
index 66dda1f..b6e4527 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/RenderParameters.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/RenderParameters.kt
@@ -384,6 +384,7 @@
         if (watchFaceLayers != other.watchFaceLayers) return false
         if (highlightLayer != other.highlightLayer) return false
         if (lastComplicationTapDownEvents != other.lastComplicationTapDownEvents) return false
+        if (isForScreenshot != other.isForScreenshot) return false
 
         return true
     }
@@ -393,6 +394,7 @@
         result = 31 * result + watchFaceLayers.hashCode()
         result = 31 * result + (highlightLayer?.hashCode() ?: 0)
         result = 31 * result + lastComplicationTapDownEvents.hashCode()
+        result = 31 * result + isForScreenshot.hashCode()
         return result
     }
 }
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
index 4e820fc..3c3c77e 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
@@ -617,11 +617,14 @@
                 Bitmap.Config.ARGB_8888
             )
             val prevRenderParameters = this.renderParameters
+            val originalIsForScreenshot = renderParameters.isForScreenshot
+
+            renderParameters.isForScreenshot = true
             this.renderParameters = renderParameters
-            this.renderParameters.isForScreenshot = true
             renderAndComposite(Canvas(bitmap), zonedDateTime)
-            this.renderParameters.isForScreenshot = false
             this.renderParameters = prevRenderParameters
+            renderParameters.isForScreenshot = originalIsForScreenshot
+
             return bitmap
         }
 
diff --git a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
index a183f9c..d6930a3 100644
--- a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
+++ b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
@@ -253,6 +253,7 @@
 ) {
     public var lastOnDrawZonedDateTime: ZonedDateTime? = null
     public var lastRenderWasForScreenshot: Boolean? = null
+    public val renderParametersScreenshotFlags = mutableListOf<Boolean>()
 
     override fun render(
         canvas: Canvas,
@@ -265,6 +266,11 @@
 
     override fun renderHighlightLayer(canvas: Canvas, bounds: Rect, zonedDateTime: ZonedDateTime) {
     }
+
+    public override fun onRenderParametersChanged(renderParameters: RenderParameters) {
+        renderParametersScreenshotFlags.add(renderParameters.isForScreenshot)
+        super.onRenderParametersChanged(renderParameters)
+    }
 }
 
 public open class TestRendererWithShouldAnimate(
diff --git a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
index b77e904..024b835 100644
--- a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
+++ b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
@@ -5096,10 +5096,19 @@
             )
         )
 
+        val screenshotParams = RenderParameters(
+            DrawMode.AMBIENT,
+            WatchFaceLayer.ALL_WATCH_FACE_LAYERS,
+            null
+        )
+
         renderer.takeScreenshot(
             ZonedDateTime.ofInstant(Instant.EPOCH, ZoneId.of("GMT")),
-            RenderParameters(DrawMode.INTERACTIVE, WatchFaceLayer.ALL_WATCH_FACE_LAYERS, null)
+            screenshotParams
         )
+
+        assertEquals(listOf(true, false), renderer.renderParametersScreenshotFlags)
+
         assertThat(renderer.lastRenderWasForScreenshot).isTrue()
 
         renderer.renderInternal(ZonedDateTime.ofInstant(Instant.EPOCH, ZoneId.of("GMT")))