Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
/**
* Kotlin Multiplatform project hierarchy template configuration.
*
* This file defines a structured hierarchy for organizing source sets in Kotlin Multiplatform
* projects. It establishes a logical grouping of platform targets that enables efficient code
* sharing across platforms with similar characteristics.
*
* The hierarchy template creates the following logical groupings:
* - `common`: Base shared code for all platforms
* - `nonAndroid`: Code shared between JVM, JS, and native platforms, excluding Android
* - `jsCommon`: Code shared between JavaScript and WebAssembly JavaScript targets
* - `nonJsCommon`: Code shared between JVM and native platforms, excluding JS platforms
* - `jvmCommon`: Code shared between Android and JVM targets
* - `nonJvmCommon`: Code shared between JS and native platforms, excluding JVM platforms
* - `native`: Code shared across all native platforms
* - `apple`: Code shared across Apple platforms (iOS, macOS)
* - `ios`: iOS-specific code
* - `macos`: macOS-specific code
* - `nonNative`: Code shared between JS and JVM platforms
*
* This template applies to both main and test source sets, establishing a consistent
* structure throughout the project.
*
* Note: This implementation uses experimental Kotlin Gradle plugin APIs and may be subject
* to change in future Kotlin releases.
*/
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

package org.mifos.mobile

import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyBuilder
import org.jetbrains.kotlin.gradle.plugin.KotlinHierarchyTemplate
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree

/**
* Defines the hierarchical structure for source set organization.
*
* This template establishes the relationships between different platform targets,
* creating logical groupings based on platform similarities to facilitate code sharing.
*/
private val hierarchyTemplate = KotlinHierarchyTemplate {
withSourceSetTree(
KotlinSourceSetTree.main,
KotlinSourceSetTree.test,
)

common {
withCompilations { true }

groupNonAndroid()
groupJsCommon()
groupNonJsCommon()
groupJvmCommon()
groupNonJvmCommon()
groupNative()
groupNonNative()
groupJvmJsCommon()
groupMobile()
}
}

/**
* Creates a group of non-Android platforms (JVM, JS, and native).
*/
private fun KotlinHierarchyBuilder.groupNonAndroid() {
group("nonAndroid") {
withJvm()
groupJsCommon()
groupNative()
}
}

/**
* Creates a group of JavaScript-related platforms (JS and WebAssembly JS).
*/
private fun KotlinHierarchyBuilder.groupJsCommon() {
group("jsCommon") {
withJs()
withWasmJs()
}
}

/**
* Creates a group of non-JavaScript platforms (JVM-based and native).
*/
private fun KotlinHierarchyBuilder.groupNonJsCommon() {
group("nonJsCommon") {
groupJvmCommon()
groupNative()
}
}

/**
* Creates a group of JVM-based platforms (Android and JVM).
*/
private fun KotlinHierarchyBuilder.groupJvmCommon() {
group("jvmCommon") {
withAndroidTarget()
withJvm()
}
}

/**
* Creates a group of non-JVM platforms (JavaScript and native).
*/
private fun KotlinHierarchyBuilder.groupNonJvmCommon() {
group("nonJvmCommon") {
groupJsCommon()
groupNative()
}
}

/**
* Creates a group of JVM, JS platforms (JavaScript and JVM).
*/
private fun KotlinHierarchyBuilder.groupJvmJsCommon() {
group("jvmJsCommon") {
groupJsCommon()
withJvm()
}
}

/**
* Creates a hierarchical group of native platforms with subgroups for Apple platforms.
*/
private fun KotlinHierarchyBuilder.groupNative() {
group("native") {
withNative()

group("apple") {
withApple()

group("ios") {
withIos()
}

group("macos") {
withMacos()
}
}
}
}

/**
* Creates a group of non-native platforms (JavaScript and JVM-based).
*/
private fun KotlinHierarchyBuilder.groupNonNative() {
group("nonNative") {
groupJsCommon()
groupJvmCommon()
}
}

private fun KotlinHierarchyBuilder.groupMobile() {
group("mobile") {
withAndroidTarget()
withApple()
}
}

/**
* Applies the predefined hierarchy template to a Kotlin Multiplatform project.
*
* This extension function should be called within the `kotlin` block of a Multiplatform
* project's build script to establish the source set hierarchy defined in this file.
*
* Example usage:
* ```
* kotlin {
* applyProjectHierarchyTemplate()
* // Configure targets...
* }
* ```
*/
fun KotlinMultiplatformExtension.applyProjectHierarchyTemplate() {
applyHierarchyTemplate(hierarchyTemplate)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
@OptIn(ExperimentalWasmDsl::class, ExperimentalKotlinGradlePluginApi::class)
internal fun Project.configureKotlinMultiplatform() {
extensions.configure<KotlinMultiplatformExtension> {
applyDefaultHierarchyTemplate()
applyProjectHierarchyTemplate()

jvm("desktop")
androidTarget()
Expand Down
178 changes: 89 additions & 89 deletions cmp-android/prodRelease-badging.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package: name='org.mifospay' versionCode='1' versionName='2024.12.4-beta.0.4' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
package: name='org.mifos.mobile' versionCode='1' versionName='2024.12.4-beta.0.4' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
sdkVersion:'26'
targetSdkVersion:'34'
uses-permission: name='android.permission.INTERNET'
Expand All @@ -12,100 +12,100 @@ uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE'
uses-permission: name='android.permission.ACCESS_ADSERVICES_ATTRIBUTION'
uses-permission: name='android.permission.ACCESS_ADSERVICES_AD_ID'
uses-permission: name='org.mifospay.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION'
application-label:'Mifos Pay'
application-label-af:'Mifos Pay'
application-label-am:'Mifos Pay'
application-label-ar:'Mifos Pay'
application-label-as:'Mifos Pay'
application-label-az:'Mifos Pay'
application-label-be:'Mifos Pay'
application-label-bg:'Mifos Pay'
application-label-bn:'Mifos Pay'
application-label-bs:'Mifos Pay'
application-label-ca:'Mifos Pay'
application-label-cs:'Mifos Pay'
application-label-da:'Mifos Pay'
application-label-de:'Mifos Pay'
application-label-el:'Mifos Pay'
application-label-en-AU:'Mifos Pay'
application-label-en-CA:'Mifos Pay'
application-label-en-GB:'Mifos Pay'
application-label-en-IN:'Mifos Pay'
application-label-en-XC:'Mifos Pay'
application-label-es:'Mifos Pay'
application-label-es-US:'Mifos Pay'
application-label-et:'Mifos Pay'
application-label-eu:'Mifos Pay'
application-label-fa:'Mifos Pay'
application-label-fi:'Mifos Pay'
application-label-fr:'Mifos Pay'
application-label-fr-CA:'Mifos Pay'
application-label-gl:'Mifos Pay'
application-label-gu:'Mifos Pay'
application-label-hi:'Mifos Pay'
application-label-hr:'Mifos Pay'
application-label-hu:'Mifos Pay'
application-label-hy:'Mifos Pay'
application-label-in:'Mifos Pay'
application-label-is:'Mifos Pay'
application-label-it:'Mifos Pay'
application-label-iw:'Mifos Pay'
application-label-ja:'Mifos Pay'
application-label-ka:'Mifos Pay'
application-label-kk:'Mifos Pay'
application-label-km:'Mifos Pay'
application-label-kn:'Mifos Pay'
application-label-ko:'Mifos Pay'
application-label-ky:'Mifos Pay'
application-label-lo:'Mifos Pay'
application-label-lt:'Mifos Pay'
application-label-lv:'Mifos Pay'
application-label-mk:'Mifos Pay'
application-label-ml:'Mifos Pay'
application-label-mn:'Mifos Pay'
application-label-mr:'Mifos Pay'
application-label-ms:'Mifos Pay'
application-label-my:'Mifos Pay'
application-label-nb:'Mifos Pay'
application-label-ne:'Mifos Pay'
application-label-nl:'Mifos Pay'
application-label-or:'Mifos Pay'
application-label-pa:'Mifos Pay'
application-label-pl:'Mifos Pay'
application-label-pt:'Mifos Pay'
application-label-pt-BR:'Mifos Pay'
application-label-pt-PT:'Mifos Pay'
application-label-ro:'Mifos Pay'
application-label-ru:'Mifos Pay'
application-label-si:'Mifos Pay'
application-label-sk:'Mifos Pay'
application-label-sl:'Mifos Pay'
application-label-sq:'Mifos Pay'
application-label-sr:'Mifos Pay'
application-label-sr-Latn:'Mifos Pay'
application-label-sv:'Mifos Pay'
application-label-sw:'Mifos Pay'
application-label-ta:'Mifos Pay'
application-label-te:'Mifos Pay'
application-label-th:'Mifos Pay'
application-label-tl:'Mifos Pay'
application-label-tr:'Mifos Pay'
application-label-uk:'Mifos Pay'
application-label-ur:'Mifos Pay'
application-label-uz:'Mifos Pay'
application-label-vi:'Mifos Pay'
application-label-zh-CN:'Mifos Pay'
application-label-zh-HK:'Mifos Pay'
application-label-zh-TW:'Mifos Pay'
application-label-zu:'Mifos Pay'
uses-permission: name='org.mifos.mobile.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION'
application-label:'Mifos Mobile'
application-label-af:'Mifos Mobile'
application-label-am:'Mifos Mobile'
application-label-ar:'Mifos Mobile'
application-label-as:'Mifos Mobile'
application-label-az:'Mifos Mobile'
application-label-be:'Mifos Mobile'
application-label-bg:'Mifos Mobile'
application-label-bn:'Mifos Mobile'
application-label-bs:'Mifos Mobile'
application-label-ca:'Mifos Mobile'
application-label-cs:'Mifos Mobile'
application-label-da:'Mifos Mobile'
application-label-de:'Mifos Mobile'
application-label-el:'Mifos Mobile'
application-label-en-AU:'Mifos Mobile'
application-label-en-CA:'Mifos Mobile'
application-label-en-GB:'Mifos Mobile'
application-label-en-IN:'Mifos Mobile'
application-label-en-XC:'Mifos Mobile'
application-label-es:'Mifos Mobile'
application-label-es-US:'Mifos Mobile'
application-label-et:'Mifos Mobile'
application-label-eu:'Mifos Mobile'
application-label-fa:'Mifos Mobile'
application-label-fi:'Mifos Mobile'
application-label-fr:'Mifos Mobile'
application-label-fr-CA:'Mifos Mobile'
application-label-gl:'Mifos Mobile'
application-label-gu:'Mifos Mobile'
application-label-hi:'Mifos Mobile'
application-label-hr:'Mifos Mobile'
application-label-hu:'Mifos Mobile'
application-label-hy:'Mifos Mobile'
application-label-in:'Mifos Mobile'
application-label-is:'Mifos Mobile'
application-label-it:'Mifos Mobile'
application-label-iw:'Mifos Mobile'
application-label-ja:'Mifos Mobile'
application-label-ka:'Mifos Mobile'
application-label-kk:'Mifos Mobile'
application-label-km:'Mifos Mobile'
application-label-kn:'Mifos Mobile'
application-label-ko:'Mifos Mobile'
application-label-ky:'Mifos Mobile'
application-label-lo:'Mifos Mobile'
application-label-lt:'Mifos Mobile'
application-label-lv:'Mifos Mobile'
application-label-mk:'Mifos Mobile'
application-label-ml:'Mifos Mobile'
application-label-mn:'Mifos Mobile'
application-label-mr:'Mifos Mobile'
application-label-ms:'Mifos Mobile'
application-label-my:'Mifos Mobile'
application-label-nb:'Mifos Mobile'
application-label-ne:'Mifos Mobile'
application-label-nl:'Mifos Mobile'
application-label-or:'Mifos Mobile'
application-label-pa:'Mifos Mobile'
application-label-pl:'Mifos Mobile'
application-label-pt:'Mifos Mobile'
application-label-pt-BR:'Mifos Mobile'
application-label-pt-PT:'Mifos Mobile'
application-label-ro:'Mifos Mobile'
application-label-ru:'Mifos Mobile'
application-label-si:'Mifos Mobile'
application-label-sk:'Mifos Mobile'
application-label-sl:'Mifos Mobile'
application-label-sq:'Mifos Mobile'
application-label-sr:'Mifos Mobile'
application-label-sr-Latn:'Mifos Mobile'
application-label-sv:'Mifos Mobile'
application-label-sw:'Mifos Mobile'
application-label-ta:'Mifos Mobile'
application-label-te:'Mifos Mobile'
application-label-th:'Mifos Mobile'
application-label-tl:'Mifos Mobile'
application-label-tr:'Mifos Mobile'
application-label-uk:'Mifos Mobile'
application-label-ur:'Mifos Mobile'
application-label-uz:'Mifos Mobile'
application-label-vi:'Mifos Mobile'
application-label-zh-CN:'Mifos Mobile'
application-label-zh-HK:'Mifos Mobile'
application-label-zh-TW:'Mifos Mobile'
application-label-zu:'Mifos Mobile'
application-icon-160:'res/mipmap-anydpi-v26/ic_launcher.xml'
application-icon-240:'res/mipmap-anydpi-v26/ic_launcher.xml'
application-icon-320:'res/mipmap-anydpi-v26/ic_launcher.xml'
application-icon-480:'res/mipmap-anydpi-v26/ic_launcher.xml'
application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml'
application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml'
application: label='Mifos Pay' icon='res/mipmap-anydpi-v26/ic_launcher.xml'
application: label='Mifos Mobile' icon='res/mipmap-anydpi-v26/ic_launcher.xml'
launchable-activity: name='org.mifospay.MainActivity' label='' icon=''
property: name='android.adservices.AD_SERVICES_CONFIG' resource='res/xml/ga_ad_services_config.xml'
uses-library-not-required:'androidx.window.extensions'
Expand Down
Loading
Loading