From 17c27e5b226ea8d004f17b415e8ee4e4d7f04152 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Tue, 16 Jan 2024 17:33:01 +0300 Subject: [PATCH] Allow MonetMode and ThemingMode to be used without compose dependencies --- gradle/libs.versions.toml | 1 + settings.gradle.kts | 1 + themmo-core/.gitignore | 1 + themmo-core/build.gradle.kts | 62 +++++++++++++++++++ themmo-core/consumer-rules.pro | 0 themmo-core/proguard-rules.pro | 21 +++++++ themmo-core/src/main/AndroidManifest.xml | 3 + .../github/sadellie/themmo/core/MonetMode.kt | 13 ++++ .../sadellie/themmo/core}/ThemingMode.kt | 2 +- themmo/build.gradle.kts | 3 +- .../themmo/ExampleInstrumentedTest.kt | 1 + .../github/sadellie/themmo/DynamicColors.kt | 12 +--- .../java/io/github/sadellie/themmo/Themmo.kt | 2 - .../sadellie/themmo/ThemmoController.kt | 2 + .../com/sadellie/themmosample/MainActivity.kt | 8 +-- 15 files changed, 113 insertions(+), 19 deletions(-) create mode 100644 themmo-core/.gitignore create mode 100644 themmo-core/build.gradle.kts create mode 100644 themmo-core/consumer-rules.pro create mode 100644 themmo-core/proguard-rules.pro create mode 100644 themmo-core/src/main/AndroidManifest.xml create mode 100644 themmo-core/src/main/java/io/github/sadellie/themmo/core/MonetMode.kt rename {themmo/src/main/java/io/github/sadellie/themmo => themmo-core/src/main/java/io/github/sadellie/themmo/core}/ThemingMode.kt (85%) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fc500eb..dc82fac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,4 +1,5 @@ [versions] +version = "1.3.0" androidGradlePlugin = "8.2.1" kotlin = "1.9.22" androidxCoreCoreKts = "1.12.0" diff --git a/settings.gradle.kts b/settings.gradle.kts index 68584eb..02e9011 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -17,3 +17,4 @@ dependencyResolutionManagement { rootProject.name = "Themmo" include(":themmo") include(":themmosample") +include(":themmo-core") diff --git a/themmo-core/.gitignore b/themmo-core/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/themmo-core/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/themmo-core/build.gradle.kts b/themmo-core/build.gradle.kts new file mode 100644 index 0000000..f3c6afe --- /dev/null +++ b/themmo-core/build.gradle.kts @@ -0,0 +1,62 @@ +plugins { + id("com.android.library") + id("kotlin-android") + id("maven-publish") +} + +publishing { + publications { + register("release") { + groupId = "io.github.sadellie" + artifactId = "themmo-core" + version = libs.versions.version.get().toString() + + afterEvaluate { + from(components["release"]) + } + } + } +} + +android { + namespace = "io.github.sadellie.themmo.core" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + + aarMetadata { + minCompileSdk = 29 + } + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + publishing { + singleVariant("release") { + withSourcesJar() + } + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + implementation(libs.androidx.core.core.ktx) +} diff --git a/themmo-core/consumer-rules.pro b/themmo-core/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/themmo-core/proguard-rules.pro b/themmo-core/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/themmo-core/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/themmo-core/src/main/AndroidManifest.xml b/themmo-core/src/main/AndroidManifest.xml new file mode 100644 index 0000000..69fc412 --- /dev/null +++ b/themmo-core/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/themmo-core/src/main/java/io/github/sadellie/themmo/core/MonetMode.kt b/themmo-core/src/main/java/io/github/sadellie/themmo/core/MonetMode.kt new file mode 100644 index 0000000..292ccec --- /dev/null +++ b/themmo-core/src/main/java/io/github/sadellie/themmo/core/MonetMode.kt @@ -0,0 +1,13 @@ +package io.github.sadellie.themmo.core + +enum class MonetMode { + TonalSpot, + Neutral, + Vibrant, + Expressive, + Rainbow, + FruitSalad, + Monochrome, + Fidelity, + Content +} diff --git a/themmo/src/main/java/io/github/sadellie/themmo/ThemingMode.kt b/themmo-core/src/main/java/io/github/sadellie/themmo/core/ThemingMode.kt similarity index 85% rename from themmo/src/main/java/io/github/sadellie/themmo/ThemingMode.kt rename to themmo-core/src/main/java/io/github/sadellie/themmo/core/ThemingMode.kt index 341e8f2..b88e562 100644 --- a/themmo/src/main/java/io/github/sadellie/themmo/ThemingMode.kt +++ b/themmo-core/src/main/java/io/github/sadellie/themmo/core/ThemingMode.kt @@ -1,4 +1,4 @@ -package io.github.sadellie.themmo +package io.github.sadellie.themmo.core enum class ThemingMode { /** diff --git a/themmo/build.gradle.kts b/themmo/build.gradle.kts index 95a043b..ab84d71 100644 --- a/themmo/build.gradle.kts +++ b/themmo/build.gradle.kts @@ -9,7 +9,7 @@ publishing { register("release") { groupId = "io.github.sadellie" artifactId = "themmo" - version = "1.2.0" + version = libs.versions.version.get().toString() afterEvaluate { from(components["release"]) @@ -83,4 +83,5 @@ dependencies { implementation(libs.androidx.compose.ui) implementation(libs.com.github.kyant0.m3color) implementation(libs.androidx.compose.material3) + api(project(":themmo-core")) } \ No newline at end of file diff --git a/themmo/src/androidTest/java/io/github/sadellie/themmo/ExampleInstrumentedTest.kt b/themmo/src/androidTest/java/io/github/sadellie/themmo/ExampleInstrumentedTest.kt index aa87c4c..8718373 100644 --- a/themmo/src/androidTest/java/io/github/sadellie/themmo/ExampleInstrumentedTest.kt +++ b/themmo/src/androidTest/java/io/github/sadellie/themmo/ExampleInstrumentedTest.kt @@ -6,6 +6,7 @@ import androidx.compose.material3.lightColorScheme import androidx.compose.ui.graphics.Color import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.github.sadellie.themmo.core.ThemingMode import org.junit.Test import org.junit.runner.RunWith diff --git a/themmo/src/main/java/io/github/sadellie/themmo/DynamicColors.kt b/themmo/src/main/java/io/github/sadellie/themmo/DynamicColors.kt index d647af5..3718a27 100644 --- a/themmo/src/main/java/io/github/sadellie/themmo/DynamicColors.kt +++ b/themmo/src/main/java/io/github/sadellie/themmo/DynamicColors.kt @@ -19,6 +19,7 @@ import com.kyant.m3color.scheme.SchemeNeutral import com.kyant.m3color.scheme.SchemeRainbow import com.kyant.m3color.scheme.SchemeTonalSpot import com.kyant.m3color.scheme.SchemeVibrant +import io.github.sadellie.themmo.core.MonetMode /** * Extract primary color from device wallpaper. @@ -92,14 +93,3 @@ internal fun dynamicColorScheme( ) } -enum class MonetMode { - TonalSpot, - Neutral, - Vibrant, - Expressive, - Rainbow, - FruitSalad, - Monochrome, - Fidelity, - Content -} diff --git a/themmo/src/main/java/io/github/sadellie/themmo/Themmo.kt b/themmo/src/main/java/io/github/sadellie/themmo/Themmo.kt index 17021ef..8d42d97 100644 --- a/themmo/src/main/java/io/github/sadellie/themmo/Themmo.kt +++ b/themmo/src/main/java/io/github/sadellie/themmo/Themmo.kt @@ -2,8 +2,6 @@ package io.github.sadellie.themmo import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.AnimationSpec -import androidx.compose.animation.core.CubicBezierEasing -import androidx.compose.animation.core.Easing import androidx.compose.animation.core.tween import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme diff --git a/themmo/src/main/java/io/github/sadellie/themmo/ThemmoController.kt b/themmo/src/main/java/io/github/sadellie/themmo/ThemmoController.kt index c67ea44..6d6880a 100644 --- a/themmo/src/main/java/io/github/sadellie/themmo/ThemmoController.kt +++ b/themmo/src/main/java/io/github/sadellie/themmo/ThemmoController.kt @@ -18,6 +18,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.isSpecified import androidx.compose.ui.res.colorResource +import io.github.sadellie.themmo.core.MonetMode +import io.github.sadellie.themmo.core.ThemingMode // Constants for Saver private const val AMOLED_ENABLED = "AMOLED_ENABLED" diff --git a/themmosample/src/main/java/com/sadellie/themmosample/MainActivity.kt b/themmosample/src/main/java/com/sadellie/themmosample/MainActivity.kt index 864f75c..c7d3825 100644 --- a/themmosample/src/main/java/com/sadellie/themmosample/MainActivity.kt +++ b/themmosample/src/main/java/com/sadellie/themmosample/MainActivity.kt @@ -35,10 +35,10 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp import androidx.core.graphics.toColorInt -import io.github.sadellie.themmo.MonetMode -import io.github.sadellie.themmo.ThemingMode +import io.github.sadellie.themmo.core.MonetMode import io.github.sadellie.themmo.Themmo import io.github.sadellie.themmo.ThemmoController +import io.github.sadellie.themmo.core.ThemingMode class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -104,7 +104,7 @@ fun ExampleSettingScreen(themmoController: ThemmoController) { Text("Current theme: ${themmoController.currentThemingMode}") - ThemingMode.values().forEach { + ThemingMode.entries.forEach { Button(onClick = { themmoController.setThemingMode(it) }) { Text(it.name) } } @@ -143,7 +143,7 @@ fun ExampleSettingScreen(themmoController: ThemmoController) { ) Text("Current mode: ${themmoController.currentMonetMode}") - MonetMode.values().forEach { + MonetMode.entries.forEach { Button(onClick = { themmoController.setMonetMode(it) }) { Text(it.name) } }