From 62daedfac047426bf4afdd09677364bf2e4f59f5 Mon Sep 17 00:00:00 2001 From: Pronay sarker Date: Mon, 30 Dec 2024 20:01:12 +0600 Subject: [PATCH 1/2] KMP setup --- build-logic/convention/build.gradle.kts | 16 +- .../main/kotlin/CMPFeatureConventionPlugin.kt | 60 +++++++ .../main/kotlin/KMMKoinConventionPlugin.kt | 28 +++ .../main/kotlin/KMPLibraryConventionPlugin.kt | 45 +++++ .../org/mifos/configureKotlinMultiplatform.kt | 32 ++++ build.gradle.kts | 7 + gradle/libs.versions.toml | 163 ++++++++++-------- mifosng-android/prodRelease-badging.txt | 134 ++++++++++++++ 8 files changed, 411 insertions(+), 74 deletions(-) create mode 100644 build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt create mode 100644 build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt create mode 100644 build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt create mode 100644 build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt create mode 100644 mifosng-android/prodRelease-badging.txt diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 6912606eb0d..b0656fb0aac 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -24,7 +24,7 @@ dependencies { compileOnly(libs.firebase.crashlytics.gradlePlugin) compileOnly(libs.firebase.performance.gradlePlugin) compileOnly(libs.kotlin.gradlePlugin) -// compileOnly(libs.compose.gradlePlugin) + compileOnly(libs.compose.gradlePlugin) compileOnly(libs.ksp.gradlePlugin) compileOnly(libs.room.gradlePlugin) compileOnly(libs.detekt.gradlePlugin) @@ -118,5 +118,19 @@ gradlePlugin { implementationClass = "MifosGitHooksConventionPlugin" description = "Installs git hooks for the project" } + + // KMP & CMP Plugins + register("cmpFeature") { + id = "mifos.cmp.feature" + implementationClass = "CMPFeatureConventionPlugin" + } + register("kmpKoin") { + id = "mifos.kmp.koin" + implementationClass = "KMPKoinConventionPlugin" + } + register("kmpLibrary") { + id = "mifos.kmp.library" + implementationClass = "KMPLibraryConventionPlugin" + } } } diff --git a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt new file mode 100644 index 00000000000..39bde3c5311 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt @@ -0,0 +1,60 @@ +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.mifos.libs + +/** + * Created by Pronay Sarker on 30/12/2024 (6:04 PM) + */ +class CMPFeatureConventionPlugin : Plugin { + + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("mifos.kmp.libray") + apply("mifos.kmp.koin") + apply("org.jetbrains.kotlin.plugin.compose") + apply("org.jetbrains.compose") + } + + dependencies { + add("commonMainImplementation", project(":core:ui")) + add("commonMainImplementation", project(":core:designsystem")) + add("commonMainImplementation", project(":core:data")) + + add("commonMainImplementation", libs.findLibrary("koin.compose").get()) + add("commonMainImplementation", libs.findLibrary("koin.compose.viewmodel").get()) + + add("commonMainImplementation", libs.findLibrary("jb.composeRuntime").get()) + add("commonMainImplementation", libs.findLibrary("jb.composeViewmodel").get()) + add("commonMainImplementation", libs.findLibrary("jb.lifecycleViewmodel").get()) + add("commonMainImplementation", libs.findLibrary("jb.lifecycleViewmodelSavedState").get()) + add("commonMainImplementation", libs.findLibrary("jb.savedstate").get()) + add("commonMainImplementation", libs.findLibrary("jb.bundle").get()) + add("commonMainImplementation", libs.findLibrary("jb.composeNavigation").get()) + add("commonMainImplementation", libs.findLibrary("kotlinx.collections.immutable").get()) + + add("androidMainImplementation", libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) + add("androidMainImplementation", libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) + add("androidMainImplementation", libs.findLibrary("androidx.tracing.ktx").get()) + + add("androidMainImplementation", platform(libs.findLibrary("koin-bom").get())) + add("androidMainImplementation", libs.findLibrary("koin-android").get()) + add("androidMainImplementation", libs.findLibrary("koin.androidx.compose").get()) + + add("androidMainImplementation", libs.findLibrary("koin.android").get()) + add("androidMainImplementation", libs.findLibrary("koin.androidx.navigation").get()) + add("androidMainImplementation", libs.findLibrary("koin.androidx.compose").get()) + add("androidMainImplementation", libs.findLibrary("koin.core.viewmodel").get()) + + add("androidTestImplementation", libs.findLibrary("koin.test.junit4").get()) + + add("androidInstrumentedTestImplementation", libs.findLibrary("androidx.navigation.testing").get()) + add("androidInstrumentedTestImplementation", libs.findLibrary("androidx.compose.ui.test").get()) + add("androidInstrumentedTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get()) + } + } + } +} + + diff --git a/build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt new file mode 100644 index 00000000000..437de53270a --- /dev/null +++ b/build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt @@ -0,0 +1,28 @@ +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.mifos.libs + +/** + * Created by Pronay Sarker on 30/12/2024 (7:30 PM) + */ +class KMMKoinConventionPlugin : Plugin { + + override fun apply(target: Project) { + with(target){ + with(pluginManager){ + apply("com.google.devtools.ksp") + } + + dependencies { + val bom = libs.findLibrary("koin-bom").get() + add("commonMainImplementation", platform(bom)) + add("commonMainImplementation", libs.findLibrary("koin.core").get()) + add("commonMainImplementation", libs.findLibrary("koin.annotations").get()) + add("kspCommonMainMetadata", libs.findLibrary("koin.ksp.compiler").get()) + add("commonTestImplementation", libs.findLibrary("koin.test").get()) + } + } + } + +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt new file mode 100644 index 00000000000..e4adfd70b91 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt @@ -0,0 +1,45 @@ +import com.android.build.api.dsl.LibraryExtension +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.dependencies +import org.mifos.configureFlavors +import org.mifos.configureKotlinAndroid +import org.mifos.configureKotlinMultiplatform +import org.mifos.libs + +/** + * Created by Pronay Sarker on 30/12/2024 (7:33 PM) + */ +class KMPLibraryConventionPlugin : Plugin { + + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.android.library") + apply("org.jetbrains.kotlin.multiplatform") + apply("mifos.kmp.koin") + } + + configureKotlinMultiplatform() + + extensions.configure { + configureKotlinAndroid(this) + defaultConfig.targetSdk = 34 + configureFlavors(this) + // The resource prefix is derived from the module name, + // so resources inside ":core:module1" must be prefixed with "core_module1_" + resourcePrefix = path + .split("""\W""".toRegex()) + .drop(1).distinct() + .joinToString(separator = "_") + .lowercase() + "_" + } + + dependencies { + add("commonTestImplementation", libs.findLibrary("kotlin.test").get()) + add("commonTestImplementation", libs.findLibrary("kotlinx.coroutines.test").get()) + } + } + } +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt b/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt new file mode 100644 index 00000000000..1a9da476eb4 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt @@ -0,0 +1,32 @@ +package org.mifos + +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension + +@OptIn(ExperimentalWasmDsl::class, ExperimentalKotlinGradlePluginApi::class) +internal fun Project.configureKotlinMultiplatform() { + extensions.configure { + applyDefaultHierarchyTemplate() + + jvm("desktop") + androidTarget() + iosSimulatorArm64() + iosX64() + iosArm64() + js(IR) { + this.nodejs() + binaries.executable() + } + wasmJs() { + browser() + nodejs() + } + + compilerOptions { + freeCompilerArgs.add("-Xexpect-actual-classes") + } + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 6bea7a6f59a..865cdbc4f8d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,4 +14,11 @@ plugins { alias(libs.plugins.detekt) apply false alias(libs.plugins.spotless) apply false alias(libs.plugins.ktlint) apply false + + //Multiplatform Plugins + alias(libs.plugins.jetbrainsCompose) apply false + alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.kotlinMultiplatform) apply false + alias(libs.plugins.wire) apply false + alias(libs.plugins.ktrofit) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d4145fb90b7..17912c5c0f8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,123 +1,123 @@ [versions] -accompanistDrawablepainter = "0.34.0" -accompanistSwiperefresh = "0.25.1" +accompanistDrawablepainter = "0.36.0" +accompanistSwiperefresh = "0.32.0" accompanistPermission = "0.34.0" adapterRxjava = "2.9.0" -androidDesugarJdkLibs = "2.0.4" +androidDesugarJdkLibs = "2.1.4" androidIconifyMaterial = "2.2.2" androidJob = "1.2.6" androidMapsUtils = "0.4.2" -androidGradlePlugin = "8.5.0" -androidTools = "31.6.0" -androidxActivity = "1.8.2" -androidxAppCompat = "1.6.1" +androidGradlePlugin = "8.5.2" +androidTools = "31.7.3" +androidxActivity = "1.9.3" +androidxAppCompat = "1.7.0" androidxArchCore = '2.2.0' -androidxComposeBom = "2024.02.01" +androidxComposeBom = "2024.12.01" androidxComposeCompiler = "1.5.8" -androidxComposeUi = "1.6.2" -androidxComposeRuntime = "1.6.2" -androidxComposeRuntimeTracing = "1.0.0-beta01" -androidxComposeMaterial3 = "1.2.1" -androidxCore = "1.12.0" +androidxComposeUi = "1.7.6" +androidxComposeRuntime = "1.7.6" +androidxComposeRuntimeTracing = "1.7.6" +androidxComposeMaterial3 = "1.3.1" +androidxCore = "1.15.0" androidxCoreSplashscreen = "1.0.1" -androidxEspresso = "3.5.1" +androidxEspresso = "3.6.1" androidxHiltNavigationCompose = "1.2.0" -androidxLifecycle = "2.7.0" -androidxMacroBenchmark = "1.2.3" -androidxBaselineProfile = "1.2.3" -androidxBenchmark = "1.2.3" +androidxLifecycle = "2.8.7" +androidxMacroBenchmark = "1.3.3" +androidxBaselineProfile = "1.3.3" +androidxBenchmark = "1.3.3" androidxBenchmarkJunit4 = "1.1.1" androidxMaterial = "1.6.7" -androidxMaterialVersion = "1.6.8" +androidxMaterialVersion = "1.7.6" androidxMetrics = "1.0.0-beta01" -androidxNavigation = "2.7.7" -androidxProfileinstaller = "1.3.1" -androidxStartup = "1.1.1" -androidxTestCore = "1.5.0" -androidxTestExt = "1.1.5" -androidxTestRules = "1.5.0" -androidxTestRunner = "1.5.2" +androidxNavigation = "2.8.5" +androidxProfileinstaller = "1.4.1" +androidxStartup = "1.2.0" +androidxTestCore = "1.6.1" +androidxTestExt = "1.2.1" +androidxTestRules = "1.6.1" +androidxTestRunner = "1.6.2" androidxTracing = "1.2.0" androidxUiAutomator = "2.3.0" -androidxWindowManager = "1.2.0" -androidxWork = "2.9.0" -annotation = "1.7.1" -compiler = "1.5.10" -converterGson = "2.9.0" -converterScalars = "2.9.0" +androidxWindowManager = "1.3.0" +androidxWork = "2.10.0" +annotation = "1.9.1" +compiler = "1.5.15" +converterGson = "2.11.0" +converterScalars = "2.10.0" coreTesting = "2.2.0" -coil-compose = "2.5.0" +coil-compose = "2.6.0" dbflow = "3.1.1" dbflowProcessor = "4.2.4" -espressoIdlingResource = "3.5.1" -espressoIntents = "3.5.1" +espressoIdlingResource = "3.6.1" +espressoIntents = "3.6.1" fineractClientVersion = "0.0.1" -firebaseBom = "32.7.3" -firebaseCrashlyticsPlugin = "2.9.9" +firebaseBom = "33.7.0" +firebaseCrashlyticsPlugin = "3.0.2" firebasePerfPlugin = "1.4.2" fliptables = "1.0.1" glide = "4.15.1" -gmsPlugin = "4.4.1" -googleOss = "17.0.1" +gmsPlugin = "4.4.2" +googleOss = "17.1.0" googleOssPlugin = "0.10.6" -hilt = "2.51" +hilt = "2.52" hiltExt = "1.2.0" jacoco = "0.8.7" junit4 = "4.13.2" -junitJupiter = "5.8.2" -junitVersion = "1.1.5" -kotlin = "1.9.22" -kotlinxCoroutines = "1.7.3" -kotlinxCoroutinesCoreVersion = "1.5.1" +junitJupiter = "5.11.3" +junitVersion = "1.2.1" +kotlin = "2.0.21" +kotlinxCoroutines = "1.9.0" +kotlinxCoroutinesCoreVersion = "1.9.0" kotlinxCoroutinesRx2 = "1.5.1" -kotlinxDatetime = "0.5.0" -kotlinxSerializationJson = "1.6.0" -kotlinxImmutable = "0.3.6" -ksp = "1.9.22-1.0.17" # "1.9.10-1.0.13" +kotlinxDatetime = "0.6.1" +kotlinxSerializationJson = "1.7.3" +kotlinxImmutable = "0.3.8" +ksp = "2.0.21-1.0.27" # "1.9.10-1.0.13" legacySupportV4 = "1.0.0" -lifecycleCommonJava8 = "2.7.0" +lifecycleCommonJava8 = "2.8.7" lifecycleExtensions = "2.2.0" -lifecycleReactivestreamsKtx = "2.7.0" +lifecycleReactivestreamsKtx = "2.8.7" lint = "31.3.0" libphonenumberAndroidVersion = "8.13.35" leakcanaryVersion = '2.10' -mapsCompose = "4.3.3" -material = "1.11.0" +mapsCompose = "4.4.1" +material = "1.12.0" materialIconsExtended = "1.6.2" materialshowcaseview = "1.3.7" -materialVersion = "1.6.7" +materialVersion = "1.7.6" mifosAndroidSdkArchVersion = "0.0.1" mifosPasscode = "1.0.0" -mockitoCore = "5.5.0" -moshiVersion = '1.15.0' +mockitoCore = "5.14.2" +moshiVersion = '1.15.1' mockkVersion = "1.13.5" multidex = "2.0.1" -navigationFragmentKtx = "2.7.7" -navigationUiKtx = "2.7.7" +navigationFragmentKtx = "2.8.5" +navigationUiKtx = "2.8.5" okhttpVersion = "4.12.0" -pagingRuntimeKtx = "3.2.1" -playServicesLocation = "21.1.0" -playServicesMaps = "18.2.0" -playServicesPlaces = "17.0.0" +pagingRuntimeKtx = "3.3.5" +playServicesLocation = "21.3.0" +playServicesMaps = "19.0.0" +playServicesPlaces = "17.1.0" preferenceKtx = "1.2.1" -protobuf = "3.24.4" +protobuf = "4.26.0" protobufPlugin = "0.9.4" -playIntegrity = '1.3.0' +playIntegrity = '1.4.0' playUpdate = "2.1.0" playScanner = "16.1.0" -playService = "18.3.0" +playService = "18.5.0" realmVersion = "1.13.0" recyclerview = "1.3.2" room = "2.6.1" -retrofit = "2.9.0" -rxandroidVersion = "1.1.0" +retrofit = "2.11.0" +rxandroidVersion = "1.2.1" rxjava = "1.3.8" rxjava3 = "3.1.8" # 1.3.8 rxandroid = "3.0.2" # 1.1.0 dependencyGuard = "0.5.0" -spotlessVersion = "6.23.3" -ktlint = "12.1.1" -detekt = "1.23.5" +spotlessVersion = "6.25.0" +ktlint = "12.1.2" +detekt = "1.23.7" twitter-detekt-compose = "0.0.26" secrets = "2.0.1" @@ -125,12 +125,21 @@ stetho = "1.3.1" stethoOkhttp3 = "1.3.1" sweetError = "1.0.9" textdrawable = "558677ea31" -turbine = "1.0.0" +turbine = "1.1.0" timberVersion = '5.0.1' -truthVersion = '1.1.5' -runtimeLivedata = "1.6.8" +truthVersion = '1.4.4' +runtimeLivedata = "1.7.6" appcompat = "1.7.0" +# Ktor and Ktorfit +ktorVersion = "3.0.1" +ktorfit = "2.2.0" +ktorfitKsp = "2.2.0-1.0.27" + +#CMP Libraries +compose-plugin = "1.7.0" +wire = "5.0.0" + [libraries] # AndroidX Libraries accompanist-drawablepainter = { module = "com.google.accompanist:accompanist-drawablepainter", version.ref = "accompanistDrawablepainter" } @@ -424,6 +433,14 @@ ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } spotless = { id = "com.diffplug.spotless", version.ref = "spotlessVersion" } dependencyGuard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" } +#KMP and CMP Plugings +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } +kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +ktrofit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktorfit" } +wire = { id = "com.squareup.wire", version.ref = "wire" } + + # Plugins defined by this project mifos-android-application = { id = "mifos.android.application", version = "unspecified" } mifos-android-application-flavors = { id = "mifos.android.application.flavors", version = "unspecified" } diff --git a/mifosng-android/prodRelease-badging.txt b/mifosng-android/prodRelease-badging.txt new file mode 100644 index 00000000000..2a9da4b16c3 --- /dev/null +++ b/mifosng-android/prodRelease-badging.txt @@ -0,0 +1,134 @@ +package: name='com.mifos.mifosxdroid' versionCode='6' versionName='1.0.1' platformBuildVersionName='UpsideDownCake' platformBuildVersionCode='33' compileSdkVersion='33' compileSdkVersionCodename='UpsideDownCake' +sdkVersion:'26' +targetSdkVersion:'34' +uses-permission: name='android.permission.INTERNET' +uses-permission: name='android.permission.CAMERA' +uses-permission: name='android.permission.READ_EXTERNAL_STORAGE' +uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE' maxSdkVersion='28' +uses-permission: name='android.permission.MANAGE_EXTERNAL_STORAGE' +uses-permission: name='android.permission.READ_MEDIA_IMAGES' +uses-permission: name='android.permission.VIBRATE' +uses-permission: name='android.permission.ACCESS_NETWORK_STATE' +uses-permission: name='android.permission.REORDER_TASKS' +uses-permission: name='android.permission.WAKE_LOCK' +uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' +uses-permission: name='com.mifos.mifosxdroid.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' +application-label:'MifosXDroid' +application-label-af:'MifosXDroid' +application-label-am:'MifosXDroid' +application-label-ar:'MifosXDroid' +application-label-as:'MifosXDroid' +application-label-az:'MifosXDroid' +application-label-be:'MifosXDroid' +application-label-bg:'MifosXDroid' +application-label-bn:'MifosXDroid' +application-label-bs:'MifosXDroid' +application-label-ca:'MifosXDroid' +application-label-cs:'MifosXDroid' +application-label-da:'MifosXDroid' +application-label-de:'MifosXDroid' +application-label-el:'MifosXDroid' +application-label-en:'MifosXDroid' +application-label-en-AU:'MifosXDroid' +application-label-en-CA:'MifosXDroid' +application-label-en-GB:'MifosXDroid' +application-label-en-IN:'MifosXDroid' +application-label-en-XC:'MifosXDroid' +application-label-es:'MifosXDroid' +application-label-es-419:'MifosXDroid' +application-label-es-US:'MifosXDroid' +application-label-et:'MifosXDroid' +application-label-eu:'MifosXDroid' +application-label-fa:'MifosXDroid' +application-label-fi:'MifosXDroid' +application-label-fr:'MifosXDroid' +application-label-fr-CA:'MifosXDroid' +application-label-gl:'MifosXDroid' +application-label-gu:'MifosXDroid' +application-label-hi:'MifosXDroid' +application-label-hr:'MifosXDroid' +application-label-hu:'MifosXDroid' +application-label-hy:'MifosXDroid' +application-label-in:'MifosXDroid' +application-label-is:'MifosXDroid' +application-label-it:'MifosXDroid' +application-label-iw:'MifosXDroid' +application-label-ja:'MifosXDroid' +application-label-ka:'MifosXDroid' +application-label-kk:'MifosXDroid' +application-label-km:'MifosXDroid' +application-label-kn:'MifosXDroid' +application-label-ko:'MifosXDroid' +application-label-ky:'MifosXDroid' +application-label-lo:'MifosXDroid' +application-label-lt:'MifosXDroid' +application-label-lv:'MifosXDroid' +application-label-mk:'MifosXDroid' +application-label-ml:'MifosXDroid' +application-label-mn:'MifosXDroid' +application-label-mr:'MifosXDroid' +application-label-ms:'MifosXDroid' +application-label-my:'MifosXDroid' +application-label-nb:'MifosXDroid' +application-label-ne:'MifosXDroid' +application-label-nl:'MifosXDroid' +application-label-or:'MifosXDroid' +application-label-pa:'MifosXDroid' +application-label-pl:'MifosXDroid' +application-label-pt:'MifosXDroid' +application-label-pt-BR:'MifosXDroid' +application-label-pt-PT:'MifosXDroid' +application-label-ro:'MifosXDroid' +application-label-ru:'MifosXDroid' +application-label-si:'MifosXDroid' +application-label-sk:'MifosXDroid' +application-label-sl:'MifosXDroid' +application-label-sq:'MifosXDroid' +application-label-sr:'MifosXDroid' +application-label-sr-Latn:'MifosXDroid' +application-label-sv:'MifosXDroid' +application-label-sw:'MifosXDroid' +application-label-ta:'MifosXDroid' +application-label-te:'MifosXDroid' +application-label-th:'MifosXDroid' +application-label-tl:'MifosXDroid' +application-label-tr:'MifosXDroid' +application-label-uk:'MifosXDroid' +application-label-ur:'MifosXDroid' +application-label-uz:'MifosXDroid' +application-label-vi:'MifosXDroid' +application-label-zh:'MifosXDroid' +application-label-zh-CN:'MifosXDroid' +application-label-zh-HK:'MifosXDroid' +application-label-zh-TW:'MifosXDroid' +application-label-zu:'MifosXDroid' +application-icon-120:'res/drawable/feature_client_ic_launcher.png' +application-icon-160:'res/drawable/feature_client_ic_launcher.png' +application-icon-240:'res/drawable/feature_client_ic_launcher.png' +application-icon-320:'res/drawable/feature_client_ic_launcher.png' +application-icon-480:'res/drawable/feature_client_ic_launcher.png' +application-icon-640:'res/drawable/feature_client_ic_launcher.png' +application-icon-65534:'res/drawable/feature_client_ic_launcher.png' +application: label='MifosXDroid' icon='res/drawable/feature_client_ic_launcher.png' +testOnly='-1' +launchable-activity: name='com.mifos.mifosxdroid.AndroidClientActivity' label='' icon='' +uses-library-not-required:'org.apache.http.legacy' +uses-library-not-required:'androidx.window.extensions' +uses-library-not-required:'androidx.window.sidecar' +feature-group: label='' + uses-gl-es: '0x20000' + uses-feature: name='android.hardware.camera.any' + uses-feature: name='android.hardware.camera' + uses-implied-feature: name='android.hardware.camera' reason='requested android.permission.CAMERA permission' + uses-feature: name='android.hardware.faketouch' + uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' + uses-feature: name='android.hardware.screen.portrait' + uses-implied-feature: name='android.hardware.screen.portrait' reason='one or more activities have specified a portrait orientation' +main +other-activities +other-receivers +other-services +supports-screens: 'small' 'normal' 'large' 'xlarge' +supports-any-density: 'true' +locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-419' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' +densities: '120' '160' '240' '320' '480' '640' '65534' From 9ce55d565cb04a3d9be66913f3b8577929edd820 Mon Sep 17 00:00:00 2001 From: Pronay sarker Date: Tue, 31 Dec 2024 04:35:28 +0600 Subject: [PATCH 2/2] version changed --- .../kotlin/AndroidApplicationComposeConventionPlugin.kt | 2 +- .../main/kotlin/AndroidLibraryComposeConventionPlugin.kt | 2 +- .../src/main/kotlin/CMPFeatureConventionPlugin.kt | 1 + ...MMKoinConventionPlugin.kt => KMPKoinConventionPlugin.kt} | 2 +- .../src/main/kotlin/KMPLibraryConventionPlugin.kt | 6 ++++-- .../main/kotlin/org/mifos/configureKotlinMultiplatform.kt | 1 + gradle/libs.versions.toml | 3 +-- mifosng-android/build.gradle.kts | 1 + 8 files changed, 11 insertions(+), 7 deletions(-) rename build-logic/convention/src/main/kotlin/{KMMKoinConventionPlugin.kt => KMPKoinConventionPlugin.kt} (94%) diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index 1166a9b977a..2fdf12b9db7 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -9,7 +9,7 @@ class AndroidApplicationComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.android.application") -// apply(plugin = "org.jetbrains.kotlin.plugin.compose") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 24cf93d94ba..ff41985a316 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -9,7 +9,7 @@ class AndroidLibraryComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { apply(plugin = "com.android.library") -// apply(plugin = "org.jetbrains.kotlin.plugin.compose") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt index 39bde3c5311..04650638b79 100644 --- a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt @@ -20,6 +20,7 @@ class CMPFeatureConventionPlugin : Plugin { dependencies { add("commonMainImplementation", project(":core:ui")) add("commonMainImplementation", project(":core:designsystem")) + add("commonMainImplementation", project(":core:testing")) add("commonMainImplementation", project(":core:data")) add("commonMainImplementation", libs.findLibrary("koin.compose").get()) diff --git a/build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KMPKoinConventionPlugin.kt similarity index 94% rename from build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt rename to build-logic/convention/src/main/kotlin/KMPKoinConventionPlugin.kt index 437de53270a..da501e7f1ed 100644 --- a/build-logic/convention/src/main/kotlin/KMMKoinConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/KMPKoinConventionPlugin.kt @@ -6,7 +6,7 @@ import org.mifos.libs /** * Created by Pronay Sarker on 30/12/2024 (7:30 PM) */ -class KMMKoinConventionPlugin : Plugin { +class KMPKoinConventionPlugin : Plugin { override fun apply(target: Project) { with(target){ diff --git a/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt index e4adfd70b91..ae024db3416 100644 --- a/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/KMPLibraryConventionPlugin.kt @@ -1,4 +1,5 @@ -import com.android.build.api.dsl.LibraryExtension + +import com.android.build.gradle.LibraryExtension import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -7,7 +8,6 @@ import org.mifos.configureFlavors import org.mifos.configureKotlinAndroid import org.mifos.configureKotlinMultiplatform import org.mifos.libs - /** * Created by Pronay Sarker on 30/12/2024 (7:33 PM) */ @@ -19,6 +19,8 @@ class KMPLibraryConventionPlugin : Plugin { apply("com.android.library") apply("org.jetbrains.kotlin.multiplatform") apply("mifos.kmp.koin") + apply("mifos.detekt.plugin") + apply("mifos.spotless.plugin") } configureKotlinMultiplatform() diff --git a/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt b/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt index 1a9da476eb4..18f5d040c96 100644 --- a/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt +++ b/build-logic/convention/src/main/kotlin/org/mifos/configureKotlinMultiplatform.kt @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension + @OptIn(ExperimentalWasmDsl::class, ExperimentalKotlinGradlePluginApi::class) internal fun Project.configureKotlinMultiplatform() { extensions.configure { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 17912c5c0f8..614afaa9e99 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -137,7 +137,7 @@ ktorfit = "2.2.0" ktorfitKsp = "2.2.0-1.0.27" #CMP Libraries -compose-plugin = "1.7.0" +compose-plugin = "1.7.0-rc01" wire = "5.0.0" [libraries] @@ -440,7 +440,6 @@ kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = ktrofit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktorfit" } wire = { id = "com.squareup.wire", version.ref = "wire" } - # Plugins defined by this project mifos-android-application = { id = "mifos.android.application", version = "unspecified" } mifos-android-application-flavors = { id = "mifos.android.application.flavors", version = "unspecified" } diff --git a/mifosng-android/build.gradle.kts b/mifosng-android/build.gradle.kts index 9344617c017..146414aa810 100644 --- a/mifosng-android/build.gradle.kts +++ b/mifosng-android/build.gradle.kts @@ -24,6 +24,7 @@ plugins { alias(libs.plugins.kotlin.serialization) alias(libs.plugins.secrets) alias(libs.plugins.androidx.navigation) + alias(libs.plugins.compose.compiler) } android {