Skip to content

Commit 25070c3

Browse files
runningcodeclaude
andauthored
feat(snapshot): Make Paparazzi theme configurable (#1134)
Remove the hardcoded `android:Theme.Translucent.NoTitleBar` theme and add a `theme` property to the `sentrySnapshot` extension. When unset, Paparazzi uses its own default theme. Users can override it via: sentrySnapshot { theme = "com.example:Theme.MyApp" } Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent a51e5be commit 25070c3

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

plugin-build/src/main/kotlin/io/sentry/android/gradle/snapshot/GenerateSnapshotTestsTask.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.gradle.api.provider.ListProperty
1111
import org.gradle.api.provider.Property
1212
import org.gradle.api.tasks.CacheableTask
1313
import org.gradle.api.tasks.Input
14+
import org.gradle.api.tasks.Optional
1415
import org.gradle.api.tasks.OutputDirectory
1516
import org.gradle.api.tasks.TaskAction
1617
import org.gradle.api.tasks.TaskProvider
@@ -27,6 +28,8 @@ abstract class GenerateSnapshotTestsTask : DefaultTask() {
2728

2829
@get:Input abstract val packageTrees: ListProperty<String>
2930

31+
@get:Input @get:Optional abstract val theme: Property<String>
32+
3033
@get:OutputDirectory abstract val outputDir: DirectoryProperty
3134

3235
@TaskAction
@@ -43,6 +46,7 @@ abstract class GenerateSnapshotTestsTask : DefaultTask() {
4346
generateTestFileContent(
4447
includePrivatePreviews = includePrivatePreviews.get(),
4548
packageTrees = packageTrees.get(),
49+
theme = theme.orNull,
4650
)
4751
File(packageDir, "$CLASS_NAME.kt").writeText(content)
4852
logger.lifecycle("Generated snapshot test: ${packageDir.absolutePath}/$CLASS_NAME.kt")
@@ -63,6 +67,7 @@ abstract class GenerateSnapshotTestsTask : DefaultTask() {
6367
GenerateSnapshotTestsTask::class.java,
6468
) { task ->
6569
task.includePrivatePreviews.set(extension.includePrivatePreviews)
70+
task.theme.set(extension.theme)
6671
// Fall back to the Android namespace when the user doesn't configure packageTrees
6772
task.packageTrees.set(
6873
extension.packageTrees.map { packages ->
@@ -79,6 +84,7 @@ abstract class GenerateSnapshotTestsTask : DefaultTask() {
7984
private fun generateTestFileContent(
8085
includePrivatePreviews: Boolean,
8186
packageTrees: List<String>,
87+
theme: String? = null,
8288
): String {
8389
val includePrivateExpr =
8490
if (includePrivatePreviews) "\n .includePrivatePreviews()" else ""
@@ -221,7 +227,7 @@ private object PaparazziPreviewRule {
221227
return Paparazzi(
222228
environment = detectEnvironment().copy(compileSdkVersion = previewApiLevel),
223229
deviceConfig = DeviceConfigBuilder.build(preview.previewInfo),
224-
theme = "android:Theme.Translucent.NoTitleBar",
230+
${if (theme != null) "theme = \"$theme\"," else ""}
225231
supportsRtl = true,
226232
showSystemUi = previewInfo.showSystemUi,
227233
renderingMode = when {

plugin-build/src/main/kotlin/io/sentry/android/gradle/snapshot/SentrySnapshotExtension.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ abstract class SentrySnapshotExtension(objects: ObjectFactory) {
1717

1818
val packageTrees: ListProperty<String> =
1919
objects.listProperty(String::class.java).convention(emptyList())
20+
21+
val theme: Property<String> = objects.property(String::class.java)
2022
}

0 commit comments

Comments
 (0)