Skip to content

Commit a2b72bd

Browse files
committed
chore: Add basic shared logic
Bug: #68 Change-Id: Iac7b7e3222411f47ce6df969d1507774b20572bd
1 parent 1499cb1 commit a2b72bd

14 files changed

Lines changed: 190 additions & 16 deletions

File tree

androidApp/src/main/kotlin/app/icampuspass/android/AndroidApp.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ class AndroidApp : Application() {
1515
extraModules = listOf(
1616
module {
1717
factory<GreetingScreenViewModel> {
18-
GreetingScreenViewModel()
18+
GreetingScreenViewModel(
19+
userRepository = get()
20+
)
1921
}
2022

2123
factory<MainScreenViewModel> {

androidApp/src/main/kotlin/app/icampuspass/android/app/views/screens/GreetingScreen.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import app.icampuspass.android.app.views.theme.Theme
3030
import app.icampuspass.shared.models.Greeting
3131
import app.icampuspass.shared.generated.resources.Res
3232
import app.icampuspass.shared.generated.resources.compose_multiplatform
33+
import app.icampuspass.shared.models.getPlatform
3334
import app.icampuspass.shared.viewmodels.GreetingScreenViewModel
3435
import org.jetbrains.compose.resources.painterResource
3536
import org.koin.androidx.compose.koinViewModel
@@ -38,11 +39,15 @@ import org.koin.androidx.compose.koinViewModel
3839
fun GreetingScreen(
3940
viewModel: GreetingScreenViewModel = koinViewModel()
4041
) {
41-
GreetingScreenContent()
42+
GreetingScreenContent(
43+
greet = remember { viewModel.getGreeting().greet() }
44+
)
4245
}
4346

4447
@Composable
45-
private fun GreetingScreenContent() {
48+
private fun GreetingScreenContent(
49+
greet: String
50+
) {
4651
var showContent by remember { mutableStateOf(value = false) }
4752

4853
Column(
@@ -57,8 +62,6 @@ private fun GreetingScreenContent() {
5762
}
5863

5964
AnimatedVisibility(visible = showContent) {
60-
val greeting = remember { Greeting().greet() }
61-
6265
Column(
6366
modifier = Modifier.fillMaxWidth(),
6467
horizontalAlignment = Alignment.CenterHorizontally
@@ -68,7 +71,7 @@ private fun GreetingScreenContent() {
6871
contentDescription = null
6972
)
7073

71-
Text(text = "Compose: $greeting")
74+
Text(text = "Compose: $greet")
7275
}
7376
}
7477
}
@@ -102,6 +105,8 @@ private fun GreetingScreenContent() {
102105
@Composable
103106
private fun GreetingScreenPreview() {
104107
Theme {
105-
GreetingScreenContent()
108+
GreetingScreenContent(
109+
greet = remember { Greeting(platform = getPlatform()).greet() }
110+
)
106111
}
107112
}

iosApp/iosApp/Views/Screens/GreetingScreen.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import KMPObservableViewModelSwiftUI
99
import Shared
1010

1111
struct GreetingScreen: View {
12-
@StateViewModel var viewModel = GreetingScreenViewModel()
12+
@StateViewModel var viewModel = GreetingScreenViewModel(
13+
userRepository: KoinDependencies().userRepository
14+
)
1315

1416
@State private var showContent = false
1517

@@ -42,7 +44,7 @@ struct GreetingScreen: View {
4244
Text(
4345
String(
4446
localized: "greeting_screen_greeting_content_text",
45-
defaultValue: "SwiftUI: \(Greeting().greet())",
47+
defaultValue: "SwiftUI: \(viewModel.getGreeting().greet())",
4648
table: "GreetingScreen",
4749
comment: "The greeting content text on the Greeting Screen."
4850
)

shared/src/commonMain/kotlin/app/icampuspass/shared/Koin.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package app.icampuspass.shared
22

3+
import app.icampuspass.shared.models.Greeting
4+
import app.icampuspass.shared.models.Platform
35
import app.icampuspass.shared.models.UserAccountRepository
46
import app.icampuspass.shared.models.UserRepository
57
import app.icampuspass.shared.models.database.DatabaseHelper
8+
import app.icampuspass.shared.models.getPlatform
69
import io.ktor.client.HttpClient
710
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
811
import io.ktor.client.plugins.cookies.HttpCookies
@@ -18,6 +21,10 @@ val commonModule = module {
1821
DatabaseHelper(driverFactory = get())
1922
}
2023

24+
single<Greeting> {
25+
Greeting(platform = get())
26+
}
27+
2128
single<HttpClient> {
2229
HttpClient {
2330
install(plugin = ContentNegotiation) {
@@ -33,14 +40,20 @@ val commonModule = module {
3340
}
3441
}
3542

43+
single<Platform> {
44+
getPlatform()
45+
}
46+
3647
single<UserAccountRepository> {
3748
UserAccountRepository().apply {
3849
init()
3950
}
4051
}
4152

4253
single<UserRepository> {
43-
UserRepository().apply {
54+
UserRepository(
55+
greeting = get()
56+
).apply {
4457
init()
4558
}
4659
}

shared/src/commonMain/kotlin/app/icampuspass/shared/models/Greeting.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package app.icampuspass.shared.models
22

3-
class Greeting {
4-
private val platform = getPlatform()
5-
3+
class Greeting(
4+
private val platform: Platform
5+
) {
66
fun greet(): String {
77
return "Hello, ${platform.name}!"
88
}

shared/src/commonMain/kotlin/app/icampuspass/shared/models/UserRepository.kt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,40 @@ import kotlinx.coroutines.CoroutineScope
44
import kotlinx.coroutines.SupervisorJob
55
import kotlinx.coroutines.launch
66

7-
class UserRepository() {
7+
class UserRepository(
8+
private val greeting: Greeting
9+
) {
810
private val scope = CoroutineScope(context = SupervisorJob())
911

1012
fun init() {
1113
scope.launch {}
1214
}
15+
16+
fun getGreeting(): Greeting {
17+
return greeting
18+
}
19+
20+
fun getEducationUnits() {}
21+
22+
fun getEducationUnitById(id: Int) {}
23+
24+
fun getCurrentEducationUnit() {}
25+
26+
fun getUsers() {}
27+
28+
fun getUserById(id: Int) {}
29+
30+
fun getCurrentUser() {}
31+
32+
fun getAccounts() {}
33+
34+
fun getAccountById(id: Int) {}
35+
36+
fun getCurrentAccounts() {}
37+
38+
fun getClassSchedules() {}
39+
40+
fun getClassScheduleById(id: Int) {}
41+
42+
fun getCurrentClassSchedule() {}
1343
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package app.icampuspass.shared.models.data
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class Account(
7+
val id: Int
8+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package app.icampuspass.shared.models.data
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class Schedule(
7+
val account: Account
8+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package app.icampuspass.shared.models.data
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class Session(
7+
val id: String,
8+
val courseSession: String,
9+
val courseName: String,
10+
val instructorName: String,
11+
val location: String,
12+
val gradeNumber: String,
13+
val examSeatNumber: String?
14+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package app.icampuspass.shared.models.data
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class User(
7+
val id: Int
8+
)

0 commit comments

Comments
 (0)