From 1533e526645234f6a6a54054cbabdc1fb0bc1e2f Mon Sep 17 00:00:00 2001 From: Mozart Louis Date: Tue, 28 Jul 2026 10:24:22 -0400 Subject: [PATCH] Modernize `createSampleTasks.kt` --- .claude/settings.local.json | 10 ------ .gitignore | 12 +++++++ build.gradle.kts | 12 ++++++- buildSrc/build.gradle.kts | 8 +++++ .../src/main/kotlin/CreateSampleTask.kt | 32 ++----------------- 5 files changed, 34 insertions(+), 40 deletions(-) delete mode 100644 .claude/settings.local.json create mode 100644 buildSrc/build.gradle.kts rename createSample.gradle.kts => buildSrc/src/main/kotlin/CreateSampleTask.kt (93%) diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index a36fc1ad..00000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(gh pr *)", - "Bash(gh api *)", - "Bash(python3 -c \"import json,sys; data=json.load\\(sys.stdin\\); print\\(f'Total inline comments: {len\\(data\\)}'\\); [print\\(f'\\\\n--- {c[\\\\\"user\\\\\"][\\\\\"login\\\\\"]} on {c.get\\(\\\\\"path\\\\\"\\)}:{c.get\\(\\\\\"line\\\\\"\\) or c.get\\(\\\\\"original_line\\\\\"\\)} ---\\\\n{c[\\\\\"body\\\\\"]}'\\) for c in data]\")", - "Bash(python3 -c \"import json,sys; data=json.load\\(sys.stdin\\); [print\\(f'\\\\n=== Review by {r[\\\\\"user\\\\\"][\\\\\"login\\\\\"]} [{r[\\\\\"state\\\\\"]}] ===\\\\n{r.get\\(\\\\\"body\\\\\",\\\\\"\\\\\"\\)}'\\) for r in data]\")" - ] - } -} diff --git a/.gitignore b/.gitignore index 07cd9300..024c3439 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,15 @@ proguard-project.txt # Android Studio/IDEA *.iml .idea + +# Agents +.claude/ +.cursor/ +.codex/ +.copilot/ +.aider.chat.history.md +.aider.tags.cache.v3 +.windsurf/ +.codeium/ +.cline/ +.anthropic/ diff --git a/build.gradle.kts b/build.gradle.kts index 5f555903..f5ff6a34 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,7 +26,17 @@ plugins { alias(libs.plugins.spotless) apply false } -apply(from = "createSample.gradle.kts") +tasks.register("createSample") { + description = "Generates a new compose-first camera sample for the Camera Samples Catalog" + group = "generation" + + sampleName.set(providers.gradleProperty("sampleName")) + screenName.set(providers.gradleProperty("screenName")) + title.set(providers.gradleProperty("title")) + desc.set(providers.gradleProperty("desc")) + type.set(providers.gradleProperty("type")) + rootDirPath.set(rootDir.absolutePath) +} // Dagger/Hilt 2.57+ unshades kotlin-metadata-jvm, so it can be overridden independently. Force it to // match the Kotlin compiler (2.4.0) — otherwise the Hilt aggregating processor (hiltJavaCompileDebug) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..02398e3a --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `kotlin-dsl` +} + +repositories { + google() + mavenCentral() +} diff --git a/createSample.gradle.kts b/buildSrc/src/main/kotlin/CreateSampleTask.kt similarity index 93% rename from createSample.gradle.kts rename to buildSrc/src/main/kotlin/CreateSampleTask.kt index c2ab6937..6ad86de7 100644 --- a/createSample.gradle.kts +++ b/buildSrc/src/main/kotlin/CreateSampleTask.kt @@ -15,10 +15,6 @@ import org.gradle.api.tasks.TaskAction * -Ptitle="Camera2 • Flash" \ * -Pdesc="Toggle the flash with Camera2" \ * -Ptype="camera2" # camera2 (default) or camerax - * - * It generates a compose-first module (UiState / ViewModel / Controller / Screen) that already - * shows a working camera preview behind CameraSampleScaffold, then registers it in - * settings.gradle.kts, app/build.gradle.kts, strings.xml and SampleCatalog.kt. */ abstract class CreateSampleTask : DefaultTask() { @get:Input @@ -107,7 +103,7 @@ abstract class CreateSampleTask : DefaultTask() { File(sampleDir, "proguard-rules.pro").writeText( "# Add project specific ProGuard rules here.\n" + "# By default, the flags in this file are appended to flags specified\n" + - "# in \$ANDROID_SDK/tools/proguard/proguard-android.txt\n", + "# in ${'$'}ANDROID_SDK/tools/proguard/proguard-android.txt\n", ) File(srcDir, "${base}UiState.kt").writeText(uiState(pkgName, base)) @@ -119,16 +115,6 @@ abstract class CreateSampleTask : DefaultTask() { if (isCameraX) cameraXScreen(pkgName, base, scName) else camera2Screen(pkgName, base, scName), ) - // Per-sample string resources: keep user-facing text out of the Kotlin and in strings.xml. - val resValuesDir = File(sampleDir, "src/main/res/values") - resValuesDir.mkdirs() - File(resValuesDir, "strings.xml").writeText( - "\n" + - "\n" + - " \n" + - "\n", - ) - // settings.gradle.kts val settingsFile = File(rootDirFile, "settings.gradle.kts") val settingsText = settingsFile.readText() @@ -142,8 +128,8 @@ abstract class CreateSampleTask : DefaultTask() { if (!appBuildText.contains("implementation(project(\":samples:$sName\"))")) { appBuildFile.writeText( appBuildText.replace( - " implementation(project(\":core-theme\"))", - " implementation(project(\":core-theme\"))\n" + + " implementation(project(\":core-ui\"))", + " implementation(project(\":core-ui\"))\n" + " implementation(project(\":samples:$sName\"))", ), ) @@ -580,15 +566,3 @@ private fun BoxScope.PreviewingContent(onBack: () -> Unit) { } """.trimStart() } - -tasks.register("createSample") { - description = "Generates a new compose-first camera sample for the Camera Samples Catalog" - group = "generation" - - sampleName.set(providers.gradleProperty("sampleName")) - screenName.set(providers.gradleProperty("screenName")) - title.set(providers.gradleProperty("title")) - desc.set(providers.gradleProperty("desc")) - type.set(providers.gradleProperty("type")) - rootDirPath.set(rootDir.absolutePath) -}