Skip to content

Commit a5b445f

Browse files
committed
Test logic and Android UI
Change-Id: Icd2bdd002b1d8c37a78c2ef5e203265e8634f11e
1 parent 23210ee commit a5b445f

8 files changed

Lines changed: 503 additions & 36 deletions

File tree

composeApp/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ plugins {
77
alias(libs.plugins.composeCompiler)
88
alias(libs.plugins.composeMultiplatform)
99
alias(libs.plugins.kotlinMultiplatform)
10+
alias(libs.plugins.kotlinxSerialization)
1011
}
1112

1213
kotlin {
@@ -20,6 +21,7 @@ kotlin {
2021
androidMain.dependencies {
2122
implementation(compose.preview)
2223
implementation(libs.androidx.activity.compose)
24+
implementation(libs.androidx.navigation.compose)
2325
implementation(libs.koin.androidx.compose)
2426
}
2527
commonMain.dependencies {
@@ -31,6 +33,7 @@ kotlin {
3133
implementation(compose.ui)
3234
implementation(libs.androidx.lifecycle.runtime.compose)
3335
implementation(libs.androidx.lifecycle.viewmodel)
36+
implementation(libs.kotlinx.serialization.core)
3437
implementation(projects.shared)
3538
}
3639
}
Lines changed: 75 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +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.layout.Column
6-
import androidx.compose.foundation.layout.fillMaxWidth
3+
import androidx.activity.compose.BackHandler
4+
import androidx.compose.foundation.isSystemInDarkTheme
5+
import androidx.compose.foundation.layout.fillMaxSize
6+
import androidx.compose.foundation.layout.padding
77
import androidx.compose.foundation.layout.safeDrawingPadding
8-
import androidx.compose.material3.Button
8+
import androidx.compose.material3.DrawerState
9+
import androidx.compose.material3.DrawerValue
910
import androidx.compose.material3.MaterialTheme
10-
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
1116
import androidx.compose.runtime.Composable
12-
import androidx.compose.runtime.getValue
13-
import androidx.compose.runtime.mutableStateOf
14-
import androidx.compose.runtime.remember
15-
import androidx.compose.runtime.setValue
16-
import androidx.compose.ui.Alignment
17+
import androidx.compose.runtime.rememberCoroutineScope
1718
import androidx.compose.ui.Modifier
1819
import androidx.compose.ui.tooling.preview.Preview
19-
import icampuspass.composeapp.generated.resources.Res
20-
import icampuspass.composeapp.generated.resources.compose_multiplatform
21-
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
2232

2333
@Preview
2434
@Composable
2535
fun App() {
26-
MaterialTheme {
27-
var showContent by remember { mutableStateOf(value = false) }
36+
val drawerState: DrawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
2837

29-
Column(
30-
modifier = Modifier.fillMaxWidth().safeDrawingPadding(),
31-
horizontalAlignment = Alignment.CenterHorizontally
32-
) {
33-
Button(onClick = { showContent = !showContent }) {
34-
Text(text = "Click me!")
35-
}
38+
val scope: CoroutineScope = rememberCoroutineScope()
3639

37-
AnimatedVisibility(visible = showContent) {
38-
val greeting = remember { Greeting().greet() }
40+
val navController: NavHostController = rememberNavController()
3941

40-
Column(
41-
modifier = Modifier.fillMaxWidth(),
42-
horizontalAlignment = Alignment.CenterHorizontally
43-
) {
44-
Image(
45-
painter = painterResource(resource = Res.drawable.compose_multiplatform),
46-
contentDescription = null
47-
)
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().safeDrawingPadding(),
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+
}
4882

49-
Text(text = "Compose: $greeting")
50-
}
83+
BackHandler(enabled = drawerState.isOpen) {
84+
scope.launch {
85+
drawerState.close()
86+
}
87+
}
88+
}
89+
)
5190
}
52-
}
91+
)
5392
}
5493
}

0 commit comments

Comments
 (0)