Skip to content

Commit

Permalink
using navigation library
Browse files Browse the repository at this point in the history
  • Loading branch information
babichev.a committed Aug 5, 2024
1 parent abeed5f commit 79c94da
Show file tree
Hide file tree
Showing 22 changed files with 179 additions and 144 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
buildscript {
extra["kotlin_version"] = "2.0.20-Beta2"
extra["kotlin_version"] = "2.0.20-RC"
extra["android_min_sdk_version"] = 21
extra["android_compile_sdk_version"] = 34
extra["jdk_version"] = 17
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
GROUP=io.github.softartdev
VERSION=0.8.6
VERSION=0.8.7

org.gradle.jvmargs=-Xmx16g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx16g" -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
org.gradle.parallel=true
Expand Down
1 change: 1 addition & 0 deletions sample/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ kotlin {
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation("org.jetbrains.androidx.navigation:navigation-compose:2.7.0-alpha07")
}
desktopMain.dependencies {
implementation(compose.desktop.currentOs)
Expand Down
7 changes: 5 additions & 2 deletions sample/src/commonMain/kotlin/com/softartdev/shared/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.softartdev.shared
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.softartdev.shared.material.MaterialApp
import com.softartdev.shared.material3.Material3App
import kotlin.experimental.ExperimentalObjCRefinement
Expand All @@ -12,9 +14,10 @@ import kotlin.native.HiddenFromObjC
@HiddenFromObjC
@Composable
fun App() {
val navController: NavHostController = rememberNavController()
val showMaterial3: Boolean by remember(AppState::showMaterial3)
when(showMaterial3) {
true -> Material3App()
else -> MaterialApp()
true -> Material3App(navController)
else -> MaterialApp(navController)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.softartdev.shared

enum class AppNavGraph {
Settings, NoteDetail, ThemeDialog
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import org.jetbrains.compose.resources.stringResource

object AppState {
val showMaterial3: MutableState<Boolean> = mutableStateOf(false)
val showNote: MutableState<Boolean> = mutableStateOf(false)
val textState: MutableState<String> = mutableStateOf(readMe)
val scrollState: ScrollState = ScrollState(initial = 0)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,46 @@
package com.softartdev.shared.material

import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import com.softartdev.shared.AppState
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.dialog
import androidx.navigation.compose.rememberNavController
import com.softartdev.shared.AppNavGraph
import com.softartdev.theme.material.PreferableMaterialTheme
import com.softartdev.theme.material.ThemeDialog
import com.softartdev.theme.pref.PreferenceHelper
import kotlin.experimental.ExperimentalObjCRefinement
import kotlin.native.HiddenFromObjC

@OptIn(ExperimentalObjCRefinement::class)
@HiddenFromObjC
@Composable
fun MaterialApp() = PreferableMaterialTheme { // provides composition locals
val showNote: Boolean by remember(AppState::showNote)
when(showNote) {
true -> NoteDetailBody()
else -> SettingsBody()
fun MaterialApp(
navController: NavHostController = rememberNavController()
) = PreferableMaterialTheme { // provides composition locals
NavHost(
navController = navController,
startDestination = AppNavGraph.Settings.name,
) {
composable(route = AppNavGraph.Settings.name) {
SettingsBody(
onBackClick = { navController.navigate(route = AppNavGraph.NoteDetail.name) },
onThemeClick = { navController.navigate(route = AppNavGraph.ThemeDialog.name) }
)
}
composable(route = AppNavGraph.NoteDetail.name) {
NoteDetailBody(
onBackClick = { navController.navigate(route = AppNavGraph.Settings.name) }
)
}
dialog(route = AppNavGraph.ThemeDialog.name) {
val preferenceHelper: PreferenceHelper = themePrefs.preferenceHelper
ThemeDialog(
darkThemeState = themePrefs.darkThemeState,
writePref = preferenceHelper::themeEnum::set,
dismissDialog = navController::navigateUp,
)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
package com.softartdev.shared.material

import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.*
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.LinearProgressIndicator
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.SettingsBrightness
Expand All @@ -15,7 +24,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.softartdev.shared.AppState
import com.softartdev.theme.pref.LocalThemePrefs
import kotlin.experimental.ExperimentalObjCRefinement
import kotlin.native.HiddenFromObjC

Expand All @@ -24,7 +32,7 @@ import kotlin.native.HiddenFromObjC
@Composable
fun NoteDetailBody(
textState: MutableState<String> = remember(AppState::textState),
onBackClick: () -> Unit = { AppState.showNote.value = false },
onBackClick: () -> Unit = {},
showLoading: Boolean = true,
scrollState: ScrollState = remember(AppState::scrollState),
) = Scaffold(
Expand All @@ -42,17 +50,18 @@ fun NoteDetailBody(
actions = barActions()
)
}) {
Box {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
if (showLoading) LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
TextField(
modifier = Modifier.weight(1F).fillMaxWidth().padding(8.dp).verticalScroll(state = scrollState),
label = { Text("Type text") },
value = textState.value,
onValueChange = { textState.value = it },
)
}
LocalThemePrefs.current.showDialogIfNeed()
Column(horizontalAlignment = Alignment.CenterHorizontally) {
if (showLoading) LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
TextField(
modifier = Modifier
.weight(1F)
.fillMaxWidth()
.padding(8.dp)
.verticalScroll(state = scrollState),
label = { Text("Type text") },
value = textState.value,
onValueChange = { textState.value = it },
)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.softartdev.shared.material

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Switch
Expand All @@ -14,7 +13,6 @@ import com.softartdev.theme.material.PreferenceItem
import com.softartdev.theme.material.SettingsScaffold
import com.softartdev.theme.material.ThemePreferenceItem
import com.softartdev.theme.material.ThemePreferencesCategory
import com.softartdev.theme.pref.PreferableMaterialTheme.themePrefs
import io.github.softartdev.theme_prefs.generated.resources.Res
import io.github.softartdev.theme_prefs.generated.resources.material_version
import org.jetbrains.compose.resources.stringResource
Expand All @@ -25,15 +23,13 @@ import kotlin.native.HiddenFromObjC
@HiddenFromObjC
@Composable
fun SettingsBody(
onBackClick: () -> Unit = { AppState.showNote.value = !AppState.showNote.value },
) = SettingsScaffold(onBackClick, barActions()) { // includes TopAppBar
Box(modifier = Modifier.padding(it)) {
Column {
ThemePreferencesCategory() // subtitle
ThemePreferenceItem() // menu item
MaterialSwitchPreferenceItem()
}
themePrefs.showDialogIfNeed() // shows when menu item clicked
onBackClick: () -> Unit = {},
onThemeClick: () -> Unit = {},
) = SettingsScaffold(onBackClick, barActions()) { paddingValues -> // includes TopAppBar
Column(modifier = Modifier.padding(paddingValues)) {
ThemePreferencesCategory() // subtitle
ThemePreferenceItem(onClick = onThemeClick) // menu item
MaterialSwitchPreferenceItem()
}
}

Expand All @@ -43,5 +39,10 @@ fun MaterialSwitchPreferenceItem() = PreferenceItem(
vector = Icons.Filled.Style,
secondaryText = { Text(AppState.secondaryText) },
onClick = AppState.switchMaterialCallback,
trailing = { Switch(checked = AppState.showMaterial3.value, onCheckedChange = AppState.changeMaterialCallback) }
trailing = {
Switch(
checked = AppState.showMaterial3.value,
onCheckedChange = AppState.changeMaterialCallback
)
}
)
Original file line number Diff line number Diff line change
@@ -1,20 +1,46 @@
package com.softartdev.shared.material3

import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import com.softartdev.shared.AppState
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.dialog
import androidx.navigation.compose.rememberNavController
import com.softartdev.shared.AppNavGraph
import com.softartdev.theme.material3.PreferableMaterialTheme
import com.softartdev.theme.material3.ThemeDialog
import com.softartdev.theme.pref.PreferenceHelper
import kotlin.experimental.ExperimentalObjCRefinement
import kotlin.native.HiddenFromObjC

@OptIn(ExperimentalObjCRefinement::class)
@HiddenFromObjC
@Composable
fun Material3App() = PreferableMaterialTheme { // provides composition locals
val showNote: Boolean by remember(AppState::showNote) // provides composition locals
when(showNote) {
true -> NoteDetailBody()
else -> SettingsBody()
fun Material3App(
navController: NavHostController = rememberNavController()
) = PreferableMaterialTheme { // provides composition locals
NavHost(
navController = navController,
startDestination = AppNavGraph.Settings.name,
) {
composable(route = AppNavGraph.Settings.name) {
SettingsBody(
onBackClick = { navController.navigate(route = AppNavGraph.NoteDetail.name) },
onThemeClick = { navController.navigate(route = AppNavGraph.ThemeDialog.name) }
)
}
composable(route = AppNavGraph.NoteDetail.name) {
NoteDetailBody(
onBackClick = { navController.navigate(route = AppNavGraph.Settings.name) }
)
}
dialog(route = AppNavGraph.ThemeDialog.name) {
val preferenceHelper: PreferenceHelper = themePrefs.preferenceHelper
ThemeDialog(
darkThemeState = themePrefs.darkThemeState,
writePref = preferenceHelper::themeEnum::set,
dismissDialog = navController::navigateUp,
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,30 @@
package com.softartdev.shared.material3

import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.SettingsBrightness
import androidx.compose.material.icons.filled.Style
import androidx.compose.material3.*
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.softartdev.shared.AppState
import com.softartdev.theme.pref.LocalThemePrefs
import kotlin.experimental.ExperimentalObjCRefinement
import kotlin.native.HiddenFromObjC

Expand All @@ -26,7 +35,7 @@ import kotlin.native.HiddenFromObjC
@Composable
fun NoteDetailBody(
textState: MutableState<String> = remember(AppState::textState),
onBackClick: () -> Unit = { AppState.showNote.value = false },
onBackClick: () -> Unit = {},
showLoading: Boolean = true,
scrollState: ScrollState = remember(AppState::scrollState),
) = Scaffold(
Expand All @@ -44,17 +53,21 @@ fun NoteDetailBody(
actions = barActions()
)
}) { paddingValues ->
Box(modifier = Modifier.padding(paddingValues)) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
if (showLoading) LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
TextField(
modifier = Modifier.weight(1F).fillMaxWidth().padding(8.dp).verticalScroll(state = scrollState),
label = { Text("Type text") },
value = textState.value,
onValueChange = { textState.value = it },
)
}
LocalThemePrefs.current.showDialogIfNeed()
Column(
modifier = Modifier.padding(paddingValues),
horizontalAlignment = Alignment.CenterHorizontally
) {
if (showLoading) LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
TextField(
modifier = Modifier
.weight(1F)
.fillMaxWidth()
.padding(8.dp)
.verticalScroll(state = scrollState),
label = { Text("Type text") },
value = textState.value,
onValueChange = { textState.value = it },
)
}
}

Expand Down
Loading

0 comments on commit 79c94da

Please sign in to comment.