diff --git a/.github/workflows/android_dev.yml b/.github/workflows/android_dev.yml deleted file mode 100644 index b42b223e..00000000 --- a/.github/workflows/android_dev.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Android CI - -on: - push: - branches: [ "dev" ] - -env: - KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} - RELEASE_SIGN_KEY_ALIAS: ${{ secrets.RELEASE_SIGN_KEY_ALIAS }} - RELEASE_SIGN_KEY_PASSWORD: ${{ secrets.RELEASE_SIGN_KEY_PASSWORD }} - -jobs: - build_apk_aab: - runs-on: ubuntu-latest - name: Build artifacts - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - cache: gradle - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - - name: Build and sign debug APKs - run: ./gradlew assembleDebug - - - name: Upload debug APK - uses: actions/upload-artifact@v4 - with: - name: app-debug.apk - path: app/build/outputs/apk/amethyst/debug/app-amethyst-debug.apk - - - name: Build and sign release APKs - run: ./gradlew assembleRelease - - - name: Upload release APK - uses: actions/upload-artifact@v4 - with: - name: app-release.apk - path: app/build/outputs/apk/amethyst/release/app-amethyst-release.apk diff --git a/.github/workflows/android_master.yml b/.github/workflows/android_master.yml index e2f588c6..254f13b9 100644 --- a/.github/workflows/android_master.yml +++ b/.github/workflows/android_master.yml @@ -34,7 +34,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: app-debug.apk - path: app/build/outputs/apk/amethyst/debug/app-amethyst-debug.apk + path: app/build/outputs/apk/debug/app-debug.apk - name: Build and sign release APKs run: ./gradlew assembleRelease @@ -43,4 +43,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: app-release.apk - path: app/build/outputs/apk/amethyst/release/app-amethyst-release.apk + path: app/build/outputs/apk/release/app-release.apk diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6464dbbf..e7308d7f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,26 +1,19 @@ import java.util.Properties plugins { - alias(libs.plugins.com.android.application) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) + alias(libs.plugins.fast.android.application) + alias(libs.plugins.fast.android.application.compose) alias(libs.plugins.kotlin.serialization) } android { namespace = "dev.meloda.fast" - compileSdk = Configs.compileSdk defaultConfig { applicationId = "dev.meloda.fast" - minSdk = Configs.minSdk - targetSdk = Configs.targetSdk - versionCode = Configs.appCode - versionName = Configs.appName - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + versionCode = 4 + versionName = "0.1.1" } signingConfigs { @@ -63,40 +56,6 @@ android { "proguard-rules.pro" ) } - - // TODO: 15/05/2024, Danil Nikolaev: add to other modules with build convention - register("staging") { - initWith(getByName("release")) - applicationIdSuffix = ".staging" - } - } - - val flavorDimension = "variant" - flavorDimensions += flavorDimension - - productFlavors { - register("amethyst") { - dimension = flavorDimension - isDefault = true - } - } - - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true } packaging { @@ -108,6 +67,7 @@ android { dependencies { implementation(projects.feature.auth) + implementation(projects.feature.chatmaterials) implementation(projects.feature.conversations) implementation(projects.feature.languagepicker) @@ -120,7 +80,6 @@ dependencies { implementation(projects.core.common) implementation(projects.core.ui) - implementation(projects.core.designsystem) implementation(projects.core.data) implementation(projects.core.model) implementation(projects.core.datastore) diff --git a/app/src/main/kotlin/dev/meloda/fast/common/di/ApplicationModule.kt b/app/src/main/kotlin/dev/meloda/fast/common/di/ApplicationModule.kt index 4cbcb03f..5a25d60c 100644 --- a/app/src/main/kotlin/dev/meloda/fast/common/di/ApplicationModule.kt +++ b/app/src/main/kotlin/dev/meloda/fast/common/di/ApplicationModule.kt @@ -5,7 +5,9 @@ import android.content.res.Resources import android.os.PowerManager import androidx.preference.PreferenceManager import dev.meloda.fast.MainViewModelImpl -import dev.meloda.fast.auth.authModule +import dev.meloda.fast.auth.captcha.di.captchaModule +import dev.meloda.fast.auth.login.di.loginModule +import dev.meloda.fast.auth.validation.di.validationModule import dev.meloda.fast.chatmaterials.di.chatMaterialsModule import dev.meloda.fast.common.provider.Provider import dev.meloda.fast.conversations.di.conversationsModule @@ -28,7 +30,9 @@ import org.koin.dsl.module val applicationModule = module { includes(dataModule) includes( - authModule, + loginModule, + validationModule, + captchaModule, conversationsModule, settingsModule, messagesHistoryModule, diff --git a/app/src/staging/res/mipmap-hdpi/ic_launcher.png b/app/src/staging/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 198f18ea..00000000 Binary files a/app/src/staging/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/staging/res/mipmap-mdpi/ic_launcher.png b/app/src/staging/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 12b7c714..00000000 Binary files a/app/src/staging/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/staging/res/mipmap-xhdpi/ic_launcher.png b/app/src/staging/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 37a31bb6..00000000 Binary files a/app/src/staging/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png b/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 4194db6f..00000000 Binary files a/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index ee939bd8..00000000 Binary files a/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/staging/res/values/ic_launcher_background.xml b/app/src/staging/res/values/ic_launcher_background.xml deleted file mode 100644 index 30bd17f3..00000000 --- a/app/src/staging/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #5B37DD - diff --git a/app/src/staging/res/values/strings.xml b/app/src/staging/res/values/strings.xml deleted file mode 100644 index aef1013b..00000000 --- a/app/src/staging/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Fast Staging - diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts new file mode 100644 index 00000000..4796dcd8 --- /dev/null +++ b/build-logic/convention/build.gradle.kts @@ -0,0 +1,70 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + `kotlin-dsl` +} + +group = "dev.meloda.fast.buildlogic" + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_17 + } +} + +dependencies { + compileOnly(libs.kotlin.gradlePlugin) + compileOnly(libs.android.gradlePlugin) + compileOnly(libs.compose.gradlePlugin) + compileOnly(libs.ksp.gradlePlugin) + compileOnly(libs.room.gradlePlugin) +} + +tasks { + validatePlugins { + enableStricterValidation = true + failOnWarning = true + } +} + +gradlePlugin { + plugins { + register("androidApplicationCompose") { + id = "fast.android.application.compose" + implementationClass = "AndroidApplicationComposeConventionPlugin" + } + register("androidApplication") { + id = "fast.android.application" + implementationClass = "AndroidApplicationConventionPlugin" + } + register("androidLibraryCompose") { + id = "fast.android.library.compose" + implementationClass = "AndroidLibraryComposeConventionPlugin" + } + register("androidLibrary") { + id = "fast.android.library" + implementationClass = "AndroidLibraryConventionPlugin" + } + register("androidFeature") { + id = "fast.android.feature" + implementationClass = "AndroidFeatureConventionPlugin" + } + register("androidTest") { + id = "fast.android.test" + implementationClass = "AndroidTestConventionPlugin" + } + register("androidRoom") { + id = "fast.android.room" + implementationClass = "AndroidRoomConventionPlugin" + } + register("jvmLibrary") { + id = "fast.jvm.library" + implementationClass = "JvmLibraryConventionPlugin" + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt new file mode 100644 index 00000000..1ad0d7fc --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -0,0 +1,18 @@ +import com.android.build.api.dsl.ApplicationExtension +import dev.meloda.fast.configureAndroidCompose +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.getByType + +class AndroidApplicationComposeConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "com.android.application") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") + + val extension = extensions.getByType() + configureAndroidCompose(extension) + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt new file mode 100644 index 00000000..62a7b7fb --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -0,0 +1,22 @@ +import com.android.build.api.dsl.ApplicationExtension +import dev.meloda.fast.configureKotlinAndroid +import dev.meloda.fast.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure + +class AndroidApplicationConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.android.application") + apply("org.jetbrains.kotlin.android") + } + + extensions.configure { + configureKotlinAndroid(this) + defaultConfig.targetSdk = libs.findVersion("targetSdk").get().toString().toInt() + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt new file mode 100644 index 00000000..d11e15fc --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -0,0 +1,27 @@ +import dev.meloda.fast.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.kotlin + +class AndroidFeatureConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + pluginManager.apply { + apply("fast.android.library") + } + + dependencies { + add("implementation", project(":core:common")) + add("implementation", project(":core:data")) + add("implementation", project(":core:model")) + add("implementation", project(":core:ui")) + + add("testImplementation", kotlin("test")) + add("androidTestImplementation", kotlin("test")) + + add("implementation", libs.findBundle("nanokt").get()) + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt new file mode 100644 index 00000000..a71f64dd --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -0,0 +1,18 @@ +import com.android.build.gradle.LibraryExtension +import dev.meloda.fast.configureAndroidCompose +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.getByType + +class AndroidLibraryComposeConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + apply(plugin = "com.android.library") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") + + val extension = extensions.getByType() + configureAndroidCompose(extension) + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt new file mode 100644 index 00000000..5d6e3c27 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -0,0 +1,36 @@ +import com.android.build.api.variant.LibraryAndroidComponentsExtension +import com.android.build.gradle.LibraryExtension +import dev.meloda.fast.configureKotlinAndroid +import dev.meloda.fast.disableUnnecessaryAndroidTests +import dev.meloda.fast.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.kotlin + +class AndroidLibraryConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.android.library") + apply("org.jetbrains.kotlin.android") + apply("org.jetbrains.kotlin.plugin.parcelize") + apply("org.jetbrains.kotlin.plugin.serialization") + } + + extensions.configure { + configureKotlinAndroid(this) + defaultConfig.targetSdk = libs.findVersion("targetSdk").get().toString().toInt() + defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + extensions.configure { + disableUnnecessaryAndroidTests(target) + } + dependencies { + add("androidTestImplementation", kotlin("test")) + add("testImplementation", kotlin("test")) + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt new file mode 100644 index 00000000..3c97102b --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt @@ -0,0 +1,31 @@ +import androidx.room.gradle.RoomExtension +import com.google.devtools.ksp.gradle.KspExtension +import dev.meloda.fast.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies + +class AndroidRoomConventionPlugin : Plugin { + + override fun apply(target: Project) { + with(target) { + pluginManager.apply("androidx.room") + pluginManager.apply("com.google.devtools.ksp") + + extensions.configure { + arg("room.generateKotlin", "true") + } + + extensions.configure { + schemaDirectory("$projectDir/schemas") + } + + dependencies { + add("implementation", libs.findLibrary("room.runtime").get()) + add("implementation", libs.findLibrary("room.ktx").get()) + add("ksp", libs.findLibrary("room.compiler").get()) + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt new file mode 100644 index 00000000..d032c87c --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidTestConventionPlugin.kt @@ -0,0 +1,22 @@ +import com.android.build.gradle.TestExtension +import dev.meloda.fast.configureKotlinAndroid +import dev.meloda.fast.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure + +class AndroidTestConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.android.test") + apply("org.jetbrains.kotlin.android") + } + + extensions.configure { + configureKotlinAndroid(this) + defaultConfig.targetSdk = libs.findVersion("targetSdk").get().toString().toInt() + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt new file mode 100644 index 00000000..c847650b --- /dev/null +++ b/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt @@ -0,0 +1,14 @@ +import dev.meloda.fast.configureKotlinJvm +import org.gradle.api.Plugin +import org.gradle.api.Project + +class JvmLibraryConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("org.jetbrains.kotlin.jvm") + } + configureKotlinJvm() + } + } +} diff --git a/build-logic/convention/src/main/kotlin/dev/meloda/fast/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/dev/meloda/fast/AndroidCompose.kt new file mode 100644 index 00000000..204fee29 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/dev/meloda/fast/AndroidCompose.kt @@ -0,0 +1,23 @@ +package dev.meloda.fast + +import com.android.build.api.dsl.CommonExtension +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies + +internal fun Project.configureAndroidCompose( + commonExtension: CommonExtension<*, *, *, *, *, *>, +) { + commonExtension.apply { + buildFeatures { + compose = true + } + + dependencies { + val bom = libs.findLibrary("compose-bom").get() + add("implementation", platform(bom)) + add("androidTestImplementation", platform(bom)) + add("implementation", libs.findLibrary("compose-ui-tooling-preview").get()) + add("debugImplementation", libs.findLibrary("compose-ui-tooling").get()) + } + } +} diff --git a/build-logic/convention/src/main/kotlin/dev/meloda/fast/AndroidInstrumentedTests.kt b/build-logic/convention/src/main/kotlin/dev/meloda/fast/AndroidInstrumentedTests.kt new file mode 100644 index 00000000..b9212954 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/dev/meloda/fast/AndroidInstrumentedTests.kt @@ -0,0 +1,19 @@ +package dev.meloda.fast + +import com.android.build.api.variant.LibraryAndroidComponentsExtension +import org.gradle.api.Project + +/** + * Disable unnecessary Android instrumented tests for the [project] if there is no `androidTest` folder. + * Otherwise, these projects would be compiled, packaged, installed and ran only to end-up with the following message: + * + * > Starting 0 tests on AVD + * + * Note: this could be improved by checking other potential sourceSets based on buildTypes and flavors. + */ +internal fun LibraryAndroidComponentsExtension.disableUnnecessaryAndroidTests( + project: Project, +) = beforeVariants { + it.enableAndroidTest = it.enableAndroidTest + && project.projectDir.resolve("src/androidTest").exists() +} diff --git a/build-logic/convention/src/main/kotlin/dev/meloda/fast/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/dev/meloda/fast/KotlinAndroid.kt new file mode 100644 index 00000000..20e36b56 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/dev/meloda/fast/KotlinAndroid.kt @@ -0,0 +1,62 @@ +package dev.meloda.fast + +import com.android.build.api.dsl.CommonExtension +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.kotlin.dsl.assign +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.provideDelegate +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension + +internal fun Project.configureKotlinAndroid( + commonExtension: CommonExtension<*, *, *, *, *, *>, +) { + commonExtension.apply { + compileSdk = libs.findVersion("compileSdk").get().toString().toInt() + + defaultConfig { + minSdk = libs.findVersion("minSdk").get().toString().toInt() + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + } + + configureKotlin() +} + +internal fun Project.configureKotlinJvm() { + extensions.configure { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + configureKotlin() +} + +private inline fun Project.configureKotlin() = configure { + // Treat all Kotlin warnings as errors (disabled by default) + // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties + val warningsAsErrors: String? by project + when (this) { + is KotlinAndroidProjectExtension -> compilerOptions + is KotlinJvmProjectExtension -> compilerOptions + else -> TODO("Unsupported project extension $this ${T::class}") + }.apply { + jvmTarget = JvmTarget.JVM_17 + allWarningsAsErrors = warningsAsErrors.toBoolean() + freeCompilerArgs.addAll( + "-opt-in=kotlin.RequiresOptIn", + // Enable experimental coroutines APIs, including Flow + "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", + "-opt-in=kotlinx.coroutines.FlowPreview", + "-Xcontext-receivers" + ) + } +} diff --git a/build-logic/convention/src/main/kotlin/dev/meloda/fast/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/dev/meloda/fast/ProjectExtensions.kt new file mode 100644 index 00000000..6775041d --- /dev/null +++ b/build-logic/convention/src/main/kotlin/dev/meloda/fast/ProjectExtensions.kt @@ -0,0 +1,9 @@ +package dev.meloda.fast + +import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.getByType + +val Project.libs + get(): VersionCatalog = extensions.getByType().named("libs") diff --git a/build-logic/gradle.properties b/build-logic/gradle.properties new file mode 100644 index 00000000..1c9073eb --- /dev/null +++ b/build-logic/gradle.properties @@ -0,0 +1,4 @@ +# Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534 +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configureondemand=true diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000..2907fbfb --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,14 @@ +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +rootProject.name = "build-logic" +include(":convention") diff --git a/build.gradle.kts b/build.gradle.kts index 31f5fa8b..44761e5e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,28 +1,11 @@ -import dev.iurysouza.modulegraph.Theme - plugins { - alias(libs.plugins.com.android.application) apply false - alias(libs.plugins.org.jetbrains.kotlin.android) apply false - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) apply false + alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false - - id("dev.iurysouza.modulegraph") version "0.10.0" -} - -moduleGraphConfig { - readmePath.set("${rootDir}/README.md") - heading.set("### Module Graph") - theme.set( - Theme.BASE( - mapOf( - "primaryTextColor" to "#fff", - "primaryColor" to "#5a4f7c", - "primaryBorderColor" to "#5a4f7c", - "lineColor" to "#f5a623", - "tertiaryColor" to "#40375c", - "fontSize" to "12px", - ), - focusColor = "#FA8140" - ), - ) +// alias(libs.plugins.org.jetbrains.kotlin.android) apply false + alias(libs.plugins.kotlin.parcelize) apply false + alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.compose) apply false + alias(libs.plugins.kotlin.jvm) apply false + alias(libs.plugins.room) apply false + alias(libs.plugins.ksp) apply false } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index b6413e30..00000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,7 +0,0 @@ -plugins { - `kotlin-dsl` -} - -repositories { - mavenCentral() -} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts deleted file mode 100644 index 29744ec1..00000000 --- a/buildSrc/settings.gradle.kts +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = "buildSrc" diff --git a/buildSrc/src/main/kotlin/Configs.kt b/buildSrc/src/main/kotlin/Configs.kt deleted file mode 100644 index 5fce0f04..00000000 --- a/buildSrc/src/main/kotlin/Configs.kt +++ /dev/null @@ -1,13 +0,0 @@ -import org.gradle.api.JavaVersion - -object Configs { - - const val appCode = 4 - const val appName = "0.1.1" - - const val compileSdk = 35 - const val minSdk = 24 - const val targetSdk = 35 - - val java = JavaVersion.VERSION_17 -} diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 9798f5f9..d6cbbc64 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -1,37 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.kotlin.compose.compiler) + alias(libs.plugins.fast.android.library) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.common" - android { namespace = "dev.meloda.fast.common" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } } dependencies { diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index bf997504..f3fc8d86 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -1,30 +1,9 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) + alias(libs.plugins.fast.android.library) } -group = "dev.meloda.fast.data" - android { namespace = "dev.meloda.fast.data" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } } dependencies { diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index cd6634f3..4c7cc896 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -1,36 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) + alias(libs.plugins.fast.android.library) + alias(libs.plugins.fast.android.room) } -group = "dev.meloda.fast.database" - android { namespace = "dev.meloda.fast.database" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - ksp { - arg("room.schemaLocation", "$projectDir/schemas") - arg("room.generateKotlin", "true") - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } } dependencies { diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index 8c7785f3..64899285 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -1,30 +1,9 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) + alias(libs.plugins.fast.android.library) } -group = "dev.meloda.fast.datastore" - android { namespace = "dev.meloda.fast.datastore" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } } dependencies { diff --git a/core/designsystem/.gitignore b/core/designsystem/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/core/designsystem/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts deleted file mode 100644 index 544dd601..00000000 --- a/core/designsystem/build.gradle.kts +++ /dev/null @@ -1,52 +0,0 @@ -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) -} - -group = "dev.meloda.fast.designsystem" - -android { - namespace = "dev.meloda.fast.designsystem" - - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } - buildFeatures { - compose = true - } - composeOptions { - useLiveLiterals = true - } -} - -dependencies { - implementation(projects.core.common) - implementation(projects.core.datastore) - implementation(projects.core.ui) - - implementation(libs.appcompat) - - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose) - - implementation(libs.haze) - implementation(libs.haze.materials) - - debugImplementation(libs.compose.ui.tooling) -} diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts index a0cdea44..3c8a9297 100644 --- a/core/model/build.gradle.kts +++ b/core/model/build.gradle.kts @@ -1,31 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) + alias(libs.plugins.fast.android.library) + alias(libs.plugins.ksp) } -group = "dev.meloda.fast.model" - android { - namespace = "dev.meloda.fast.model" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } + namespace = "dev.meloda.fast.datastore" } dependencies { diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 88f63b3e..167d47b7 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -1,31 +1,11 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) + alias(libs.plugins.fast.android.library) + alias(libs.plugins.ksp) } -group = "dev.meloda.fast.network" - android { namespace = "dev.meloda.fast.network" - compileSdk = Configs.compileSdk - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } buildFeatures { buildConfig = true } diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index a1dea308..52b88a1b 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -1,34 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) + alias(libs.plugins.fast.android.library) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.ui" - android { namespace = "dev.meloda.fast.ui" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - } - buildFeatures { - compose = true - } } dependencies { diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts index 133f68a4..392335d0 100644 --- a/feature/auth/build.gradle.kts +++ b/feature/auth/build.gradle.kts @@ -4,21 +4,18 @@ import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties val sdkPackage: String = getLocalProperty("sdkPackage", "\"\"") val sdkFingerprint: String = getLocalProperty("sdkFingerprint", "\"\"") +val debugUserId: String = getLocalProperty("userId", "\"0\"") +val debugAccessToken: String = getLocalProperty("accessToken", "\"\"") + fun getLocalProperty(key: String, defValue: String): String { return gradleLocalProperties(rootDir, providers).getProperty(key, defValue) } plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.auth" - androidComponents { onVariants { variant -> variant.buildConfigFields.apply { @@ -38,55 +35,50 @@ androidComponents { comment = "sdkFingerprint for VK" ) ) + put( + "debugUserId", + BuildConfigField( + type = "String", + value = debugUserId, + comment = "user id for debugging purposes" + ) + ) + put( + "debugAccessToken", + BuildConfigField( + type = "String", + value = debugAccessToken, + comment = "access token for debugging purposes" + ) + ) } } } android { namespace = "dev.meloda.fast.auth" - compileSdk = Configs.compileSdk - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } buildFeatures { - compose = true buildConfig = true } - - composeOptions { - useLiveLiterals = true - } } dependencies { implementation(projects.core.data) implementation(projects.core.ui) - implementation(projects.feature.conversations) + implementation(platform(libs.compose.bom)) + implementation(libs.bundles.compose) - implementation(projects.feature.auth.login) - implementation(projects.feature.auth.captcha) - implementation(projects.feature.auth.validation) - implementation(projects.feature.auth.userbanned) + implementation(libs.coil.compose) implementation(libs.koin.androidx.compose) implementation(libs.koin.android) implementation(libs.androidx.navigation.compose) implementation(libs.kotlin.serialization) + + implementation(libs.eithernet) + + androidTestImplementation(libs.bundles.compose.ui.test) } diff --git a/feature/auth/captcha/.gitignore b/feature/auth/captcha/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/feature/auth/captcha/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/auth/captcha/build.gradle.kts b/feature/auth/captcha/build.gradle.kts deleted file mode 100644 index cb58c0e6..00000000 --- a/feature/auth/captcha/build.gradle.kts +++ /dev/null @@ -1,59 +0,0 @@ -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.kotlin.serialization) -} - -android { - namespace = "dev.meloda.fast.captcha" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - buildConfig = true - } - - composeOptions { - useLiveLiterals = true - } -} - -dependencies { - implementation(projects.core.data) - implementation(projects.core.ui) - - implementation(libs.nanokt.android) - implementation(libs.nanokt.jvm) - implementation(libs.nanokt) - - implementation(libs.koin.android) - implementation(libs.koin.androidx.compose) - - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose) - - implementation(libs.coil.compose) - - implementation(libs.eithernet) - implementation(libs.androidx.navigation.compose) - implementation(libs.kotlin.serialization) -} diff --git a/feature/auth/captcha/consumer-rules.pro b/feature/auth/captcha/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/auth/captcha/proguard-rules.pro b/feature/auth/captcha/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/auth/captcha/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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/feature/auth/login/.gitignore b/feature/auth/login/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/feature/auth/login/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/auth/login/build.gradle.kts b/feature/auth/login/build.gradle.kts deleted file mode 100644 index 898eca6c..00000000 --- a/feature/auth/login/build.gradle.kts +++ /dev/null @@ -1,98 +0,0 @@ -import com.android.build.api.variant.BuildConfigField -import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties - -val debugUserId: String = getLocalProperty("userId", "\"0\"") -val debugAccessToken: String = getLocalProperty("accessToken", "\"\"") - -fun getLocalProperty(key: String, defValue: String): String { - return gradleLocalProperties(rootDir, providers).getProperty(key, defValue) -} - -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.kotlin.serialization) -} - -androidComponents { - onVariants { variant -> - variant.buildConfigFields.apply { - put( - "debugUserId", - BuildConfigField( - type = "String", - value = debugUserId, - comment = "user id for debugging purposes" - ) - ) - put( - "debugAccessToken", - BuildConfigField( - type = "String", - value = debugAccessToken, - comment = "access token for debugging purposes" - ) - ) - } - } -} - -android { - namespace = "dev.meloda.fast.auth.login" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - buildConfig = true - } - - composeOptions { - useLiveLiterals = true - } -} - -dependencies { - implementation(projects.core.data) - implementation(projects.core.ui) - - implementation(libs.nanokt.android) - implementation(libs.nanokt.jvm) - implementation(libs.nanokt) - - implementation(libs.koin.android) - implementation(libs.koin.androidx.compose) - - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose) - - implementation(libs.coil.compose) - - implementation(libs.eithernet) - implementation(libs.androidx.navigation.compose) - implementation(libs.kotlin.serialization) - - implementation(libs.rebugger) - - androidTestImplementation(libs.bundles.compose.ui.test) -} diff --git a/feature/auth/login/consumer-rules.pro b/feature/auth/login/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/auth/login/proguard-rules.pro b/feature/auth/login/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/auth/login/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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/feature/auth/login/src/androidTest/kotlin/dev/meloda/fast/auth/login/LoginScreenTest.kt b/feature/auth/src/androidTest/kotlin/dev/meloda/fast/auth/login/LoginScreenTest.kt similarity index 100% rename from feature/auth/login/src/androidTest/kotlin/dev/meloda/fast/auth/login/LoginScreenTest.kt rename to feature/auth/src/androidTest/kotlin/dev/meloda/fast/auth/login/LoginScreenTest.kt diff --git a/feature/auth/login/src/androidTest/kotlin/dev/meloda/fast/auth/login/LogoScreenTest.kt b/feature/auth/src/androidTest/kotlin/dev/meloda/fast/auth/login/LogoScreenTest.kt similarity index 100% rename from feature/auth/login/src/androidTest/kotlin/dev/meloda/fast/auth/login/LogoScreenTest.kt rename to feature/auth/src/androidTest/kotlin/dev/meloda/fast/auth/login/LogoScreenTest.kt diff --git a/feature/auth/src/main/kotlin/dev/meloda/fast/auth/AuthGraph.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/AuthGraph.kt index cfc4e43a..308c3bf1 100644 --- a/feature/auth/src/main/kotlin/dev/meloda/fast/auth/AuthGraph.kt +++ b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/AuthGraph.kt @@ -6,16 +6,16 @@ import androidx.navigation.navigation import dev.meloda.fast.auth.captcha.navigation.captchaScreen import dev.meloda.fast.auth.captcha.navigation.navigateToCaptcha import dev.meloda.fast.auth.captcha.navigation.setCaptchaResult +import dev.meloda.fast.auth.login.navigation.Logo +import dev.meloda.fast.auth.login.navigation.loginScreen +import dev.meloda.fast.auth.login.navigation.navigateToLogin +import dev.meloda.fast.auth.userbanned.model.UserBannedArguments +import dev.meloda.fast.auth.userbanned.navigation.navigateToUserBanned +import dev.meloda.fast.auth.userbanned.navigation.userBannedRoute import dev.meloda.fast.auth.validation.model.ValidationArguments import dev.meloda.fast.auth.validation.navigation.navigateToValidation import dev.meloda.fast.auth.validation.navigation.setValidationResult import dev.meloda.fast.auth.validation.navigation.validationScreen -import dev.meloda.fast.auth.userbanned.model.UserBannedArguments -import dev.meloda.fast.auth.userbanned.navigation.navigateToUserBanned -import dev.meloda.fast.auth.userbanned.navigation.userBannedRoute -import dev.meloda.fast.auth.login.navigation.Logo -import dev.meloda.fast.auth.login.navigation.loginScreen -import dev.meloda.fast.auth.login.navigation.navigateToLogin import kotlinx.serialization.Serializable import java.net.URLEncoder diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/CaptchaViewModel.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/CaptchaViewModel.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/CaptchaViewModel.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/CaptchaViewModel.kt diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/di/CaptchaDI.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/di/CaptchaDI.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/di/CaptchaDI.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/di/CaptchaDI.kt diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaScreenState.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaScreenState.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaScreenState.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaScreenState.kt diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaValidationResult.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaValidationResult.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaValidationResult.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/model/CaptchaValidationResult.kt diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/navigation/CaptchaNavigation.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/navigation/CaptchaNavigation.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/navigation/CaptchaNavigation.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/navigation/CaptchaNavigation.kt diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/presentation/CaptchaScreen.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/presentation/CaptchaScreen.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/presentation/CaptchaScreen.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/presentation/CaptchaScreen.kt diff --git a/feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/validation/CaptchaValidator.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/validation/CaptchaValidator.kt similarity index 100% rename from feature/auth/captcha/src/main/kotlin/dev/meloda/fast/auth/captcha/validation/CaptchaValidator.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/captcha/validation/CaptchaValidator.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/LoginViewModel.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/LoginViewModel.kt similarity index 99% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/LoginViewModel.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/LoginViewModel.kt index d932a99d..6b182491 100644 --- a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/LoginViewModel.kt +++ b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/LoginViewModel.kt @@ -70,12 +70,12 @@ interface LoginViewModel { } class LoginViewModelImpl( - private val oAuthUseCase: OAuthUseCase, + private val oAuthUseCase: dev.meloda.fast.auth.login.OAuthUseCase, private val usersUseCase: UsersUseCase, private val accountsRepository: AccountsRepository, private val loginValidator: LoginValidator, private val longPollController: LongPollController -) : ViewModel(), LoginViewModel { +) : ViewModel(), dev.meloda.fast.auth.login.LoginViewModel { override val screenState = MutableStateFlow(LoginScreenState.EMPTY) override val loginError = MutableStateFlow(null) diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCase.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCase.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCase.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCase.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCaseImpl.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCaseImpl.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCaseImpl.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/OAuthUseCaseImpl.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/di/LoginModule.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/di/LoginModule.kt similarity index 85% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/di/LoginModule.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/di/LoginModule.kt index e218dba1..4f6fb7c5 100644 --- a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/di/LoginModule.kt +++ b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/di/LoginModule.kt @@ -12,6 +12,6 @@ import org.koin.dsl.module val loginModule = module { singleOf(::LoginValidator) - viewModelOf(::LoginViewModelImpl) bind LoginViewModel::class + viewModelOf(::LoginViewModelImpl) bind dev.meloda.fast.auth.login.LoginViewModel::class singleOf(::OAuthUseCaseImpl) bind OAuthUseCase::class } diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/AuthInfo.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/AuthInfo.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/AuthInfo.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/AuthInfo.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/CaptchaArguments.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/CaptchaArguments.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/CaptchaArguments.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/CaptchaArguments.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginError.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginError.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginError.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginError.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginScreenState.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginScreenState.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginScreenState.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginScreenState.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginUserBannedArguments.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginUserBannedArguments.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginUserBannedArguments.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginUserBannedArguments.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationArguments.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationArguments.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationArguments.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationArguments.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationResult.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationResult.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationResult.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/model/LoginValidationResult.kt diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/navigation/LoginNavigation.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/navigation/LoginNavigation.kt similarity index 91% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/navigation/LoginNavigation.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/navigation/LoginNavigation.kt index ca06c374..c12dfa1b 100644 --- a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/navigation/LoginNavigation.kt +++ b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/navigation/LoginNavigation.kt @@ -29,8 +29,8 @@ fun NavGraphBuilder.loginScreen( navController: NavController ) { composable { backStackEntry -> - val viewModel: LoginViewModel = - backStackEntry.sharedViewModel(navController = navController) + val viewModel: dev.meloda.fast.auth.login.LoginViewModel = + backStackEntry.sharedViewModel(navController = navController) val validationCode = backStackEntry.getValidationResult() val captchaCode = backStackEntry.getCaptchaResult() diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LoginScreen.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LoginScreen.kt similarity index 99% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LoginScreen.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LoginScreen.kt index 5a240d00..b004f221 100644 --- a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LoginScreen.kt +++ b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LoginScreen.kt @@ -76,7 +76,7 @@ fun LoginRoute( onNavigateToValidation: (LoginValidationArguments) -> Unit, validationCode: String?, captchaCode: String?, - viewModel: LoginViewModel = koinViewModel() + viewModel: dev.meloda.fast.auth.login.LoginViewModel = koinViewModel() ) { val screenState by viewModel.screenState.collectAsStateWithLifecycle() val isNeedToOpenMain by viewModel.isNeedToOpenMain.collectAsStateWithLifecycle() diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LogoScreen.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LogoScreen.kt similarity index 97% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LogoScreen.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LogoScreen.kt index d56b25ae..9c1fc3fb 100644 --- a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LogoScreen.kt +++ b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/presentation/LogoScreen.kt @@ -40,9 +40,7 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import dev.meloda.fast.auth.login.BuildConfig -import dev.meloda.fast.auth.login.LoginViewModel -import dev.meloda.fast.auth.login.LoginViewModelImpl +import dev.meloda.fast.auth.BuildConfig import dev.meloda.fast.ui.components.ActionInvokeDismiss import dev.meloda.fast.ui.components.MaterialDialog import dev.meloda.fast.ui.theme.LocalSizeConfig @@ -53,7 +51,7 @@ import dev.meloda.fast.ui.R as UiR fun LogoRoute( onNavigateToMain: () -> Unit, onGoNextButtonClicked: () -> Unit, - viewModel: LoginViewModel = koinViewModel() + viewModel: dev.meloda.fast.auth.login.LoginViewModel = koinViewModel() ) { val screenState by viewModel.screenState.collectAsStateWithLifecycle() val isNeedToOpenMain by viewModel.isNeedToOpenMain.collectAsStateWithLifecycle() diff --git a/feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/validation/LoginValidator.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/validation/LoginValidator.kt similarity index 100% rename from feature/auth/login/src/main/kotlin/dev/meloda/fast/auth/login/validation/LoginValidator.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/login/validation/LoginValidator.kt diff --git a/feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedArguments.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedArguments.kt similarity index 100% rename from feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedArguments.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedArguments.kt diff --git a/feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedScreenState.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedScreenState.kt similarity index 100% rename from feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedScreenState.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/model/UserBannedScreenState.kt diff --git a/feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/navigation/UserBannedNavigation.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/navigation/UserBannedNavigation.kt similarity index 100% rename from feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/navigation/UserBannedNavigation.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/navigation/UserBannedNavigation.kt diff --git a/feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/presentation/UserBannedScreen.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/presentation/UserBannedScreen.kt similarity index 100% rename from feature/auth/userbanned/src/main/kotlin/dev/meloda/fast/auth/userbanned/presentation/UserBannedScreen.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/userbanned/presentation/UserBannedScreen.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCase.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCase.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCase.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCase.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCaseImpl.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCaseImpl.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCaseImpl.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/AuthUseCaseImpl.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/ValidationViewModel.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/ValidationViewModel.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/ValidationViewModel.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/ValidationViewModel.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/di/ValidationModule.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/di/ValidationModule.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/di/ValidationModule.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/di/ValidationModule.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationArguments.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationArguments.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationArguments.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationArguments.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationScreenState.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationScreenState.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationScreenState.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationScreenState.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationType.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationType.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationType.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationType.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationValidationResult.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationValidationResult.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationValidationResult.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/model/ValidationValidationResult.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/navigation/ValidationNavigation.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/navigation/ValidationNavigation.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/navigation/ValidationNavigation.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/navigation/ValidationNavigation.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/presentation/ValidationScreen.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/presentation/ValidationScreen.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/presentation/ValidationScreen.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/presentation/ValidationScreen.kt diff --git a/feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/validation/ValidationValidator.kt b/feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/validation/ValidationValidator.kt similarity index 100% rename from feature/auth/validation/src/main/kotlin/dev/meloda/fast/auth/validation/validation/ValidationValidator.kt rename to feature/auth/src/main/kotlin/dev/meloda/fast/auth/validation/validation/ValidationValidator.kt diff --git a/feature/auth/userbanned/.gitignore b/feature/auth/userbanned/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/feature/auth/userbanned/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/auth/userbanned/build.gradle.kts b/feature/auth/userbanned/build.gradle.kts deleted file mode 100644 index 069d2533..00000000 --- a/feature/auth/userbanned/build.gradle.kts +++ /dev/null @@ -1,62 +0,0 @@ -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) -} - -group = "dev.meloda.fast.auth.userbanned" - -android { - namespace = "dev.meloda.fast.auth.userbanned" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true - } -} - -dependencies { - implementation(projects.core.data) - implementation(projects.core.model) - implementation(projects.core.ui) - - implementation(libs.nanokt.android) - implementation(libs.nanokt.jvm) - implementation(libs.nanokt) - - implementation(libs.koin.android) - implementation(libs.koin.androidx.compose) - - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose) - - implementation(libs.coil.compose) - implementation(libs.androidx.navigation.compose) - implementation(libs.kotlin.serialization) - - debugImplementation(libs.compose.ui.tooling) -} diff --git a/feature/auth/validation/.gitignore b/feature/auth/validation/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/feature/auth/validation/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/auth/validation/build.gradle.kts b/feature/auth/validation/build.gradle.kts deleted file mode 100644 index 358189b9..00000000 --- a/feature/auth/validation/build.gradle.kts +++ /dev/null @@ -1,60 +0,0 @@ -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.kotlin.serialization) -} - -android { - namespace = "dev.meloda.fast.validation" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - buildConfig = true - } - - composeOptions { - useLiveLiterals = true - } -} - -dependencies { - implementation(projects.core.common) - implementation(projects.core.data) - implementation(projects.core.ui) - - implementation(libs.nanokt.android) - implementation(libs.nanokt.jvm) - implementation(libs.nanokt) - - implementation(libs.koin.android) - implementation(libs.koin.androidx.compose) - - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose) - - implementation(libs.coil.compose) - - implementation(libs.eithernet) - implementation(libs.androidx.navigation.compose) - implementation(libs.kotlin.serialization) -} diff --git a/feature/auth/validation/consumer-rules.pro b/feature/auth/validation/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/auth/validation/proguard-rules.pro b/feature/auth/validation/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/auth/validation/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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/feature/chatmaterials/build.gradle.kts b/feature/chatmaterials/build.gradle.kts index 373ece5e..fd0b610f 100644 --- a/feature/chatmaterials/build.gradle.kts +++ b/feature/chatmaterials/build.gradle.kts @@ -1,41 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.chatmaterials" - android { namespace = "dev.meloda.fast.chatmaterials" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/conversations/build.gradle.kts b/feature/conversations/build.gradle.kts index 7a91338a..32c01c9b 100644 --- a/feature/conversations/build.gradle.kts +++ b/feature/conversations/build.gradle.kts @@ -1,40 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.conversations" - android { namespace = "dev.meloda.fast.conversations" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/friends/build.gradle.kts b/feature/friends/build.gradle.kts index 5c12a2b5..3878cacb 100644 --- a/feature/friends/build.gradle.kts +++ b/feature/friends/build.gradle.kts @@ -1,40 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.friends" - android { namespace = "dev.meloda.fast.friends" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/friends/consumer-rules.pro b/feature/friends/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/friends/proguard-rules.pro b/feature/friends/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/friends/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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/feature/languagepicker/build.gradle.kts b/feature/languagepicker/build.gradle.kts index 6f093e39..51c5fa4a 100644 --- a/feature/languagepicker/build.gradle.kts +++ b/feature/languagepicker/build.gradle.kts @@ -1,41 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.languagepicker" - android { namespace = "dev.meloda.fast.languagepicker" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/messageshistory/build.gradle.kts b/feature/messageshistory/build.gradle.kts index cd5387f7..10c3452f 100644 --- a/feature/messageshistory/build.gradle.kts +++ b/feature/messageshistory/build.gradle.kts @@ -1,41 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.messageshistory" - android { namespace = "dev.meloda.fast.messageshistory" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/photoviewer/build.gradle.kts b/feature/photoviewer/build.gradle.kts index 94f6c362..637d6ee7 100644 --- a/feature/photoviewer/build.gradle.kts +++ b/feature/photoviewer/build.gradle.kts @@ -1,41 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.org.jetbrains.kotlin.plugin.parcelize) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.photoviewer" - android { namespace = "dev.meloda.fast.photoviewer" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/profile/build.gradle.kts b/feature/profile/build.gradle.kts index eda651a9..dae3e68e 100644 --- a/feature/profile/build.gradle.kts +++ b/feature/profile/build.gradle.kts @@ -1,42 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.profile" - android { namespace = "dev.meloda.fast.profile" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - - consumerProguardFiles("consumer-rules.pro") - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/feature/profile/consumer-rules.pro b/feature/profile/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/profile/proguard-rules.pro b/feature/profile/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/profile/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index 91e0571a..1a76347c 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -1,41 +1,10 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.org.jetbrains.kotlin.android) - alias(libs.plugins.com.google.devtools.ksp) - alias(libs.plugins.kotlin.compose.compiler) - alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.fast.android.feature) + alias(libs.plugins.fast.android.library.compose) } -group = "dev.meloda.fast.settings" - android { namespace = "dev.meloda.fast.settings" - compileSdk = Configs.compileSdk - - defaultConfig { - minSdk = Configs.minSdk - } - - buildTypes { - release { - isMinifyEnabled = false - } - } - compileOptions { - sourceCompatibility = Configs.java - targetCompatibility = Configs.java - } - kotlinOptions { - jvmTarget = Configs.java.toString() - freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn", "-Xcontext-receivers") - } - buildFeatures { - compose = true - } - - composeOptions { - useLiveLiterals = true - } } dependencies { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 41912b63..bca9ba9a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,4 +1,10 @@ [versions] +minSdk = "24" +targetSdk = "35" +compileSdk = "35" +versionCode = "4" +versionName = "0.1.1" + agp = "8.5.2" converterMoshi = "2.11.0" eithernet = "1.9.0" @@ -91,6 +97,13 @@ koin-android-test = { module = "io.insert-koin:koin-android-test", version.ref = koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin" } koin-androidx-compose-navigation = { module = "io.insert-koin:koin-androidx-compose-navigation", version.ref = "koin" } +# build-logic dependencies +android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" } +compose-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } +kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } +ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } +room-gradlePlugin = { group = "androidx.room", name = "room-gradle-plugin", version.ref = "room" } + [bundles] compose = [ "compose-material3", @@ -103,12 +116,29 @@ compose = [ "compose-runtime-saveable" ] compose-ui-test = ["compose-ui-test-junit4", "compose-ui-test-manifest"] +nanokt = [ + "nanokt", + "nanokt-android", + "nanokt-jvm" +] [plugins] -com-android-application = { id = "com.android.application", version.ref = "agp" } -org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } -kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } -com-google-devtools-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -org-jetbrains-kotlin-plugin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } +android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } +org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +room = { id = "androidx.room", version.ref = "room" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } + +#project plugins +fast-android-application = { id = "fast.android.application", version = "unspecified" } +fast-android-application-compose = { id = "fast.android.application.compose", version = "unspecified" } +fast-android-feature = { id = "fast.android.feature", version = "unspecified" } +fast-android-library = { id = "fast.android.library", version = "unspecified" } +fast-android-library-compose = { id = "fast.android.library.compose", version = "unspecified" } +fast-android-room = { id = "fast.android.room", version = "unspecified" } +fast-android-test = { id = "fast.android.test", version = "unspecified" } +fast-jvm-library = { id = "fast.jvm.library", version = "unspecified" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 5bf2267c..a22f39d6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,7 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement { + includeBuild("build-logic") repositories { google() mavenCentral() @@ -22,7 +23,6 @@ include(":core:network") include(":core:data") include(":core:database") include(":core:datastore") -include(":core:designsystem") include(":core:ui") include(":core:common") include(":core:model") @@ -33,9 +33,5 @@ include(":feature:chatmaterials") include(":feature:languagepicker") include(":feature:photoviewer") include(":feature:settings") -include(":feature:auth:login") -include(":feature:auth:validation") -include(":feature:auth:captcha") -include(":feature:auth:userbanned") include(":feature:friends") include(":feature:profile")