Skip to content

Commit ddd083c

Browse files
committed
Test logic and Android UI
Change-Id: Icd2bdd002b1d8c37a78c2ef5e203265e8634f11e
1 parent 997e6f8 commit ddd083c

8 files changed

Lines changed: 504 additions & 40 deletions

File tree

composeApp/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55
alias(libs.plugins.composeCompiler)
66
alias(libs.plugins.composeMultiplatform)
77
alias(libs.plugins.kotlinMultiplatform)
8+
alias(libs.plugins.kotlinxSerialization)
89
}
910

1011
kotlin {
@@ -17,6 +18,7 @@ kotlin {
1718
androidMain.dependencies {
1819
implementation(compose.preview)
1920
implementation(libs.androidx.activity.compose)
21+
implementation(libs.androidx.navigation.compose)
2022
implementation(libs.koin.androidx.compose)
2123
}
2224
commonMain.dependencies {
@@ -28,6 +30,7 @@ kotlin {
2830
implementation(compose.ui)
2931
implementation(libs.androidx.lifecycle.runtime.compose)
3032
implementation(libs.androidx.lifecycle.viewmodel)
33+
implementation(libs.kotlinx.serialization.core)
3134
implementation(projects.shared)
3235
}
3336
commonTest.dependencies {
Lines changed: 74 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,93 @@
11
package com.itocc.icampuspass
22

3-
import androidx.compose.animation.AnimatedVisibility
4-
import androidx.compose.foundation.Image
5-
import androidx.compose.foundation.background
6-
import androidx.compose.foundation.layout.Column
3+
import androidx.activity.compose.BackHandler
4+
import androidx.compose.foundation.isSystemInDarkTheme
75
import androidx.compose.foundation.layout.fillMaxSize
8-
import androidx.compose.foundation.layout.fillMaxWidth
6+
import androidx.compose.foundation.layout.padding
97
import androidx.compose.foundation.layout.safeContentPadding
10-
import androidx.compose.material3.Button
8+
import androidx.compose.material3.DrawerState
9+
import androidx.compose.material3.DrawerValue
1110
import androidx.compose.material3.MaterialTheme
12-
import androidx.compose.material3.Text
11+
import androidx.compose.material3.ModalNavigationDrawer
12+
import androidx.compose.material3.Scaffold
13+
import androidx.compose.material3.darkColorScheme
14+
import androidx.compose.material3.lightColorScheme
15+
import androidx.compose.material3.rememberDrawerState
1316
import androidx.compose.runtime.Composable
14-
import androidx.compose.runtime.getValue
15-
import androidx.compose.runtime.mutableStateOf
16-
import androidx.compose.runtime.remember
17-
import androidx.compose.runtime.setValue
18-
import androidx.compose.ui.Alignment
17+
import androidx.compose.runtime.rememberCoroutineScope
1918
import androidx.compose.ui.Modifier
2019
import androidx.compose.ui.tooling.preview.Preview
21-
import icampuspass.composeapp.generated.resources.Res
22-
import icampuspass.composeapp.generated.resources.compose_multiplatform
23-
import org.jetbrains.compose.resources.painterResource
20+
import androidx.navigation.NavHostController
21+
import androidx.navigation.compose.NavHost
22+
import androidx.navigation.compose.composable
23+
import androidx.navigation.compose.rememberNavController
24+
import com.itocc.icampuspass.components.ModalDrawerSheetComponent
25+
import com.itocc.icampuspass.components.TopAppBarComponent
26+
import com.itocc.icampuspass.destinations.ClassScheduleDestination
27+
import com.itocc.icampuspass.destinations.MainDestination
28+
import com.itocc.icampuspass.screens.ClassScheduleScreen
29+
import com.itocc.icampuspass.screens.MainScreen
30+
import kotlinx.coroutines.CoroutineScope
31+
import kotlinx.coroutines.launch
2432

2533
@Preview
2634
@Composable
2735
fun App() {
28-
MaterialTheme {
29-
var showContent by remember { mutableStateOf(value = false) }
36+
val drawerState: DrawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
3037

31-
Column(
32-
modifier = Modifier
33-
.background(color = MaterialTheme.colorScheme.primaryContainer)
34-
.safeContentPadding()
35-
.fillMaxSize(),
36-
horizontalAlignment = Alignment.CenterHorizontally,
37-
) {
38-
Button(onClick = { showContent = !showContent }) {
39-
Text(text = "Click me!")
40-
}
38+
val scope: CoroutineScope = rememberCoroutineScope()
4139

42-
AnimatedVisibility(visible = showContent) {
43-
val greeting = remember { Greeting().greet() }
40+
val navController: NavHostController = rememberNavController()
4441

45-
Column(
46-
modifier = Modifier.fillMaxWidth(),
47-
horizontalAlignment = Alignment.CenterHorizontally
48-
) {
49-
Image(
50-
painter = painterResource(resource = Res.drawable.compose_multiplatform),
51-
contentDescription = null
52-
)
42+
MaterialTheme(
43+
colorScheme = if (isSystemInDarkTheme()) {
44+
darkColorScheme()
45+
} else {
46+
lightColorScheme()
47+
}
48+
) {
49+
ModalNavigationDrawer(
50+
drawerContent = {
51+
ModalDrawerSheetComponent(
52+
navController = navController,
53+
scope = scope,
54+
drawerState = drawerState
55+
)
56+
},
57+
modifier = Modifier.fillMaxSize().safeContentPadding(),
58+
drawerState = drawerState,
59+
gesturesEnabled = drawerState.isOpen,
60+
content = {
61+
Scaffold(
62+
topBar = {
63+
TopAppBarComponent(scope = scope, drawerState = drawerState)
64+
},
65+
content = { innerPadding ->
66+
NavHost(navController = navController, startDestination = MainDestination) {
67+
composable<MainDestination> {
68+
MainScreen(
69+
modifier = Modifier
70+
.padding(innerPadding)
71+
.fillMaxSize()
72+
)
73+
}
74+
composable<ClassScheduleDestination> {
75+
ClassScheduleScreen(
76+
modifier = Modifier
77+
.padding(innerPadding)
78+
.fillMaxSize()
79+
)
80+
}
81+
}
5382

54-
Text(text = "Compose: $greeting")
55-
}
83+
BackHandler(enabled = drawerState.isOpen) {
84+
scope.launch {
85+
drawerState.close()
86+
}
87+
}
88+
}
89+
)
5690
}
57-
}
91+
)
5892
}
5993
}

0 commit comments

Comments
 (0)