1.0.0 - Material you rework

This commit is contained in:
2025-08-31 02:24:26 -06:00
parent e4ea44f766
commit d10622c382
52 changed files with 1689 additions and 975 deletions

View File

@@ -0,0 +1,19 @@
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import com.atridad.mealient.configureAndroidCompose
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("com.android.application")
pluginManager.apply("org.jetbrains.kotlin.plugin.compose")
extensions.configure<BaseAppModuleExtension> {
configureAndroidCompose(this)
}
}
}
}

View File

@@ -0,0 +1,24 @@
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import com.atridad.mealient.Versions
import com.atridad.mealient.configureKotlinAndroid
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
apply("org.jetbrains.kotlinx.kover")
}
extensions.configure<BaseAppModuleExtension> {
configureKotlinAndroid(this)
defaultConfig.targetSdk = Versions.TARGET_SDK_VERSION
}
}
}
}

View File

@@ -0,0 +1,18 @@
import com.android.build.gradle.LibraryExtension
import com.atridad.mealient.configureAndroidCompose
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("org.jetbrains.kotlin.plugin.compose")
extensions.configure<LibraryExtension> {
configureAndroidCompose(this)
}
}
}
}

View File

@@ -0,0 +1,23 @@
import com.android.build.gradle.LibraryExtension
import com.atridad.mealient.Versions
import com.atridad.mealient.configureKotlinAndroid
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply("org.jetbrains.kotlin.android")
apply("org.jetbrains.kotlinx.kover")
}
extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
defaultConfig.targetSdk = Versions.TARGET_SDK_VERSION
}
}
}
}

View File

@@ -0,0 +1,49 @@
package com.atridad.mealient
import com.android.build.api.dsl.CommonExtension
import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
internal fun Project.configureAndroidCompose(
commonExtension: CommonExtension<*, *, *, *, *, *>,
) {
val variants = when (commonExtension) {
is BaseAppModuleExtension -> commonExtension.applicationVariants
is LibraryExtension -> commonExtension.libraryVariants
else -> error("Unsupported extension type")
}
commonExtension.apply {
buildFeatures {
compose = true
}
// Add compose-destinations generated code to Gradle source sets
variants.all {
kotlin.sourceSets {
getByName(name) {
kotlin.srcDir("build/generated/ksp/$name/kotlin")
}
}
}
dependencies {
val bom = library("androidx-compose-bom")
add("implementation", platform(bom))
add("androidTestImplementation", platform(bom))
add("implementation", library("androidx-compose-material3"))
add("implementation", library("androidx-compose-ui-toolingPreview"))
add("implementation", library("androidx-compose-runtime-livedata"))
add("implementation", library("androidx-lifecycle-viewmodelCompose"))
add("implementation", library("google-accompanist-themeadapter-material3"))
add("debugImplementation", library("androidx-compose-ui-tooling"))
add("debugImplementation", library("androidx-compose-ui-testManifest"))
add("androidTestImplementation", library("androidx-compose-ui-testJunit"))
add("implementation", library("composeDestinations-core"))
add("ksp", library("composeDestinations-ksp"))
}
}
}

View File

@@ -0,0 +1,24 @@
package com.atridad.mealient
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
internal val Project.kotlin: KotlinAndroidProjectExtension
get() = (this as ExtensionAware).extensions.getByName("kotlin") as KotlinAndroidProjectExtension
internal fun Project.kotlin(configure: Action<KotlinAndroidProjectExtension>): Unit =
(this as ExtensionAware).extensions.configure("kotlin", configure)
internal fun KotlinAndroidProjectExtension.sourceSets(configure: Action<NamedDomainObjectContainer<KotlinSourceSet>>): Unit =
(this as ExtensionAware).extensions.configure("sourceSets", configure)
internal fun Project.library(name: String): Provider<MinimalExternalModuleDependency> {
return libs.findLibrary(name).get()
}

View File

@@ -0,0 +1,69 @@
@file:Suppress("UnstableApiUsage")
package com.atridad.mealient
import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
internal fun Project.configureKotlinAndroid(
commonExtension: CommonExtension<*, *, *, *, *, *>,
) {
commonExtension.apply {
compileSdk = Versions.COMPILE_SDK_VERSION
defaultConfig {
minSdk = Versions.MIN_SDK_VERSION
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
}
lint {
disable += listOf(
"ObsoleteLintCustomCheck",
"IconMissingDensityFolder",
"MissingTranslation"
)
enable += listOf(
"ConvertToWebp",
"DuplicateStrings",
"EasterEgg",
"ExpensiveAssertion",
"IconExpectedSize",
"ImplicitSamInstance",
"InvalidPackage",
"KotlinPropertyAccess",
"LambdaLast",
"MinSdkTooLow",
"NegativeMargin",
"NoHardKeywords",
"Registered",
"RequiredSize",
"UnknownNullness",
"WrongThreadInterprocedural"
)
}
testOptions {
unitTests {
isIncludeAndroidResources = true
}
}
buildTypes {
getByName("debug") {
enableUnitTestCoverage = true
}
}
dependencies {
add("coreLibraryDesugaring", library("android-tools-desugar").get())
}
}
kotlin {
jvmToolchain(17)
}
}

View File

@@ -0,0 +1,15 @@
package com.atridad.mealient
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
object Versions {
const val MIN_SDK_VERSION = 26
const val TARGET_SDK_VERSION = 34
const val COMPILE_SDK_VERSION = 34
}
val Project.libs: VersionCatalog
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")