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")))