Skip to content

Commit cb3975c

Browse files
feat(core:model): Migrate model module to KMP (#2732)
* feat(core:model): Migrate model module to KMP * Change properties from var to val and remove unnecessary annotations * remove inheritance of Account in ShareAccount, SavingAccount and LoanAccount * replace ArrayList() with emptyList() and improve numeric literal consistency
1 parent 174ccd2 commit cb3975c

File tree

177 files changed

+2276
-2427
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

177 files changed

+2276
-2427
lines changed

core/model/build.gradle.kts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
* See https://github.com/openMF/mobile-mobile/blob/master/LICENSE.md
99
*/
1010
plugins {
11-
alias(libs.plugins.mifos.android.library)
12-
alias(libs.plugins.kotlin.android)
11+
alias(libs.plugins.mifos.kmp.library)
1312
alias(libs.plugins.kotlin.serialization)
1413
alias(libs.plugins.kotlin.parcelize)
1514
}
@@ -21,17 +20,15 @@ android {
2120
}
2221
}
2322

24-
dependencies {
25-
26-
api(projects.core.common)
27-
28-
implementation(libs.jetbrains.kotlin.jdk7)
29-
implementation(libs.kotlinx.serialization.json)
30-
31-
// For Serialized name
32-
implementation(libs.squareup.retrofit.converter.gson)
33-
34-
testImplementation(libs.junit)
35-
androidTestImplementation(libs.androidx.test.ext.junit)
36-
androidTestImplementation(libs.androidx.test.espresso.core)
23+
kotlin {
24+
androidTarget {
25+
compilerOptions {
26+
freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=org.mifos.mobile.core.model.Parcelize")
27+
}
28+
}
29+
sourceSets {
30+
commonMain.dependencies {
31+
implementation(libs.kotlinx.serialization.json)
32+
}
33+
}
3734
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright 2025 Mifos Initiative
3+
*
4+
* This Source Code Form is subject to the terms of the Mozilla Public
5+
* License, v. 2.0. If a copy of the MPL was not distributed with this
6+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
7+
*
8+
* See https://github.com/openMF/mobile-mobile/blob/master/LICENSE.md
9+
*/
10+
package org.mifos.mobile.core.model
11+
12+
import android.os.Parcelable
13+
import kotlinx.parcelize.IgnoredOnParcel
14+
import kotlinx.parcelize.RawValue
15+
16+
actual typealias Parcelable = Parcelable
17+
18+
actual typealias IgnoredOnParcel = IgnoredOnParcel
19+
20+
actual typealias RawValue = RawValue
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright 2025 Mifos Initiative
3+
*
4+
* This Source Code Form is subject to the terms of the Mozilla Public
5+
* License, v. 2.0. If a copy of the MPL was not distributed with this
6+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
7+
*
8+
* See https://github.com/openMF/mobile-mobile/blob/master/LICENSE.md
9+
*/
10+
package org.mifos.mobile.core.model
11+
12+
annotation class Parcelize()
13+
14+
expect interface Parcelable
15+
16+
expect annotation class IgnoredOnParcel()
17+
18+
@Target(AnnotationTarget.TYPE)
19+
expect annotation class RawValue()

core/model/src/main/java/org/mifos/mobile/core/model/entity/Charge.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/Charge.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
12+
import org.mifos.mobile.core.model.Parcelable
13+
import org.mifos.mobile.core.model.Parcelize
1414

1515
@Parcelize
1616
data class Charge(
1717
val clientId: Int? = null,
1818
val chargeId: Int? = null,
1919
val name: String? = null,
20-
val dueDate: ArrayList<Int?> = ArrayList(),
20+
val dueDate: ArrayList<Int?> = arrayListOf(),
2121
val chargeTimeType: ChargeTimeType? = null,
2222
val chargeCalculationType: ChargeCalculationType? = null,
2323
val currency: Currency? = null,

core/model/src/main/java/org/mifos/mobile/core/model/entity/ChargeCalculationType.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/ChargeCalculationType.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
1412
import kotlinx.serialization.Serializable
13+
import org.mifos.mobile.core.model.Parcelable
14+
import org.mifos.mobile.core.model.Parcelize
1515

1616
@Parcelize
1717
@Serializable
1818
data class ChargeCalculationType(
19-
var id: Int = 0,
20-
var code: String? = null,
21-
var value: String? = null,
19+
val id: Int = 0,
20+
val code: String? = null,
21+
val value: String? = null,
2222
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/ChargeTimeType.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/ChargeTimeType.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
12+
import org.mifos.mobile.core.model.Parcelable
13+
import org.mifos.mobile.core.model.Parcelize
1414

1515
/**
1616
* Created by michaelsosnick on 12/11/16.
1717
*/
1818

1919
@Parcelize
2020
data class ChargeTimeType(
21-
var id: Int = 0,
22-
var code: String? = null,
23-
var value: String? = null,
21+
val id: Int = 0,
22+
val code: String? = null,
23+
val value: String? = null,
2424
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/CheckboxStatus.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/CheckboxStatus.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ package org.mifos.mobile.core.model.entity
1313
* Created by dilpreet on 3/7/17.
1414
*/
1515

16-
data class CheckboxStatus @JvmOverloads constructor(
17-
var status: String?,
18-
var color: Int,
19-
var isChecked: Boolean = false,
16+
data class CheckboxStatus(
17+
val status: String?,
18+
val color: Int,
19+
val isChecked: Boolean = false,
2020
)

core/model/src/main/java/org/mifos/mobile/core/model/entity/Currency.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/Currency.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
12+
import org.mifos.mobile.core.model.Parcelable
13+
import org.mifos.mobile.core.model.Parcelize
1414

1515
/**
1616
* Created by michaelsosnick on 12/11/16.
1717
*/
1818

1919
@Parcelize
2020
data class Currency(
21-
var code: String? = null,
22-
var name: String? = null,
23-
var decimalPlaces: Int = 0,
24-
var displaySymbol: String? = null,
25-
var nameCode: String? = null,
26-
var displayLabel: String? = null,
21+
val code: String? = null,
22+
val name: String? = null,
23+
val decimalPlaces: Int = 0,
24+
val displaySymbol: String? = null,
25+
val nameCode: String? = null,
26+
val displayLabel: String? = null,
2727
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/FAQ.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/FAQ.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
12+
import org.mifos.mobile.core.model.Parcelable
13+
import org.mifos.mobile.core.model.Parcelize
1414

1515
/**
1616
* Created by dilpreet on 12/8/17.
1717
*/
1818

1919
@Parcelize
20-
data class FAQ @JvmOverloads constructor(
21-
var question: String? = null,
22-
var answer: String? = null,
23-
var isSelected: Boolean = false,
20+
data class FAQ constructor(
21+
val question: String? = null,
22+
val answer: String? = null,
23+
val isSelected: Boolean = false,
2424
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/MifosNotification.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/MifosNotification.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
1412
import kotlinx.serialization.Serializable
13+
import org.mifos.mobile.core.model.Parcelable
14+
import org.mifos.mobile.core.model.Parcelize
1515

1616
@Parcelize
1717
@Serializable
1818
data class MifosNotification(
19-
var timeStamp: Long,
20-
var msg: String? = null,
21-
var read: Boolean? = null,
19+
val timeStamp: Long,
20+
val msg: String? = null,
21+
val read: Boolean? = null,
2222
) : Parcelable {
2323
fun isRead(): Boolean {
2424
return read == true

core/model/src/main/java/org/mifos/mobile/core/model/entity/Page.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/Page.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ package org.mifos.mobile.core.model.entity
1414
*/
1515
data class Page<T>(
1616

17-
var totalFilteredRecords: Int = 0,
18-
var pageItems: List<T> = ArrayList(),
17+
val totalFilteredRecords: Int = 0,
18+
val pageItems: List<T> = emptyList(),
1919
)

core/model/src/main/java/org/mifos/mobile/core/model/entity/Timeline.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/Timeline.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
12+
import org.mifos.mobile.core.model.Parcelable
13+
import org.mifos.mobile.core.model.Parcelize
1414

1515
/**
1616
* Created by ishankhanna for mifos android-client on 09/02/14.
@@ -24,16 +24,16 @@ import kotlinx.parcelize.Parcelize
2424

2525
@Parcelize
2626
data class Timeline(
27-
var submittedOnDate: List<Int> = ArrayList(),
28-
var submittedByUsername: String? = null,
29-
var submittedByFirstname: String? = null,
30-
var submittedByLastname: String? = null,
31-
var activatedOnDate: List<Int> = ArrayList(),
32-
var activatedByUsername: String? = null,
33-
var activatedByFirstname: String? = null,
34-
var activatedByLastname: String? = null,
35-
var closedOnDate: List<Int> = ArrayList(),
36-
var closedByUsername: String? = null,
37-
var closedByFirstname: String? = null,
38-
var closedByLastname: String? = null,
27+
val submittedOnDate: List<Int> = emptyList(),
28+
val submittedByUsername: String? = null,
29+
val submittedByFirstname: String? = null,
30+
val submittedByLastname: String? = null,
31+
val activatedOnDate: List<Int> = emptyList(),
32+
val activatedByUsername: String? = null,
33+
val activatedByFirstname: String? = null,
34+
val activatedByLastname: String? = null,
35+
val closedOnDate: List<Int> = emptyList(),
36+
val closedByUsername: String? = null,
37+
val closedByFirstname: String? = null,
38+
val closedByLastname: String? = null,
3939
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/Transaction.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/Transaction.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import kotlinx.parcelize.Parcelize
12+
import org.mifos.mobile.core.model.Parcelable
13+
import org.mifos.mobile.core.model.Parcelize
1414
import org.mifos.mobile.core.model.entity.client.Type
1515

1616
/**
@@ -21,22 +21,22 @@ import org.mifos.mobile.core.model.entity.client.Type
2121
@Parcelize
2222
data class Transaction(
2323

24-
var id: Long? = null,
24+
val id: Long? = null,
2525

26-
var officeId: Long? = null,
26+
val officeId: Long? = null,
2727

28-
var officeName: String? = null,
28+
val officeName: String? = null,
2929

30-
var type: Type,
30+
val type: Type,
3131

32-
var date: List<Int> = ArrayList(),
32+
val date: List<Int> = emptyList(),
3333

34-
var currency: Currency? = null,
34+
val currency: Currency? = null,
3535

36-
var amount: Double? = null,
36+
val amount: Double? = null,
3737

38-
var submittedOnDate: List<Int> = ArrayList(),
38+
val submittedOnDate: List<Int> = emptyList(),
3939

40-
var reversed: Boolean? = null,
40+
val reversed: Boolean? = null,
4141

4242
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/UpdatePasswordPayload.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/UpdatePasswordPayload.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ package org.mifos.mobile.core.model.entity
1414
*/
1515
class UpdatePasswordPayload {
1616

17-
var password: String? = null
17+
val password: String? = null
1818

19-
var repeatPassword: String? = null
19+
val repeatPassword: String? = null
2020
}

core/model/src/main/java/org/mifos/mobile/core/model/entity/User.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/User.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
*/
1010
package org.mifos.mobile.core.model.entity
1111

12-
import android.os.Parcelable
13-
import com.google.gson.annotations.SerializedName
14-
import kotlinx.parcelize.Parcelize
12+
import kotlinx.serialization.SerialName
13+
import org.mifos.mobile.core.model.Parcelable
14+
import org.mifos.mobile.core.model.Parcelize
1515

1616
/**
1717
* @author Vishwajeet
@@ -20,26 +20,26 @@ import kotlinx.parcelize.Parcelize
2020
@Parcelize
2121
data class User(
2222
val userId: Long = 0,
23-
@SerializedName("authenticated")
23+
@SerialName("authenticated")
2424
val isAuthenticated: Boolean = false,
2525
val username: String? = null,
2626
val officeId: Long = 0,
2727
val officeName: String? = null,
28-
val roles: ArrayList<Role> = ArrayList(),
28+
val roles: ArrayList<Role> = arrayListOf(),
2929
val base64EncodedAuthenticationKey: String? = null,
30-
val permissions: ArrayList<String> = ArrayList(),
30+
val permissions: ArrayList<String> = arrayListOf(),
3131
val shouldRenewPassword: Boolean = false,
3232
val isTwoFactorAuthenticationRequired: Boolean = false,
3333
) : Parcelable
3434

3535
@Parcelize
3636
data class Role(
37-
@SerializedName("id")
37+
@SerialName("id")
3838
val id: Long = 0,
39-
@SerializedName("name")
39+
@SerialName("name")
4040
val name: String? = null,
41-
@SerializedName("description")
41+
@SerialName("description")
4242
val description: String? = null,
43-
@SerializedName("disabled")
43+
@SerialName("disabled")
4444
val disabled: Boolean = false,
4545
) : Parcelable

core/model/src/main/java/org/mifos/mobile/core/model/entity/accounts/LoanAccountsListResponse.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/accounts/LoanAccountsListResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ package org.mifos.mobile.core.model.entity.accounts
1212
import org.mifos.mobile.core.model.entity.accounts.loan.LoanAccount
1313

1414
data class LoanAccountsListResponse(
15-
var loanAccounts: List<LoanAccount> = ArrayList(),
15+
val loanAccounts: List<LoanAccount> = emptyList(),
1616
)

core/model/src/main/java/org/mifos/mobile/core/model/entity/accounts/SavingAccountsListResponse.kt renamed to core/model/src/commonMain/kotlin/org/mifos/mobile/core/model/entity/accounts/SavingAccountsListResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ package org.mifos.mobile.core.model.entity.accounts
1212
import org.mifos.mobile.core.model.entity.accounts.savings.SavingAccount
1313

1414
data class SavingAccountsListResponse(
15-
var savingsAccounts: List<SavingAccount> = ArrayList(),
15+
val savingsAccounts: List<SavingAccount> = emptyList(),
1616
)

0 commit comments

Comments
 (0)