Add settings and basic navigation
This commit is contained in:
@@ -73,9 +73,11 @@ kotlin {
|
|||||||
implementation(compose.ui)
|
implementation(compose.ui)
|
||||||
implementation(compose.components.resources)
|
implementation(compose.components.resources)
|
||||||
implementation(compose.components.uiToolingPreview)
|
implementation(compose.components.uiToolingPreview)
|
||||||
|
implementation(compose.animation)
|
||||||
implementation(libs.androidx.lifecycle.livedata.core)
|
implementation(libs.androidx.lifecycle.livedata.core)
|
||||||
implementation(libs.androidx.lifecycle.viewmodel)
|
implementation(libs.androidx.lifecycle.viewmodel)
|
||||||
implementation(libs.androidx.lifecycle.runtime.compose)
|
implementation(libs.androidx.lifecycle.runtime.compose)
|
||||||
|
implementation(libs.androidx.navigation.compose)
|
||||||
implementation(libs.lifecycle.runtime.compose)
|
implementation(libs.lifecycle.runtime.compose)
|
||||||
implementation(libs.lifecycle.viewmodel.compose)
|
implementation(libs.lifecycle.viewmodel.compose)
|
||||||
implementation(libs.androidx.lifecycle.viewmodel.compose)
|
implementation(libs.androidx.lifecycle.viewmodel.compose)
|
||||||
@@ -88,12 +90,17 @@ kotlin {
|
|||||||
implementation(libs.composeIcons.fontAwesome)
|
implementation(libs.composeIcons.fontAwesome)
|
||||||
implementation(libs.korau)
|
implementation(libs.korau)
|
||||||
implementation(libs.flagkit)
|
implementation(libs.flagkit)
|
||||||
|
implementation(libs.navigation.compose.v280alpha10)
|
||||||
|
|
||||||
}
|
}
|
||||||
desktopMain.dependencies {
|
desktopMain.dependencies {
|
||||||
implementation(compose.desktop.currentOs)
|
implementation(compose.desktop.currentOs)
|
||||||
implementation(libs.kotlinx.coroutines.swing)
|
implementation(libs.kotlinx.coroutines.swing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dependencies {
|
||||||
|
implementation(libs.androidx.navigation.runtime.android)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|||||||
@@ -34,8 +34,7 @@ import org.koin.compose.koinInject
|
|||||||
import org.koin.core.parameter.parametersOf
|
import org.koin.core.parameter.parametersOf
|
||||||
import org.neutrino.ktans.di.appModule
|
import org.neutrino.ktans.di.appModule
|
||||||
import org.koin.compose.viewmodel.dsl.viewModelOf
|
import org.koin.compose.viewmodel.dsl.viewModelOf
|
||||||
import org.neutrino.ktans.view.MainView
|
import org.neutrino.ktans.ui.MainView
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@Preview
|
@Preview
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package org.neutrino.ktans.model.repository
|
||||||
|
|
||||||
|
import service.TermServiceImpl
|
||||||
|
|
||||||
|
class TermRepository {
|
||||||
|
private val termService = TermServiceImpl()
|
||||||
|
|
||||||
|
suspend fun getTerms
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package org.neutrino.ktans.ui
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import org.neutrino.ktans.ui.navigation.NavGraph
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun MainView() {
|
||||||
|
NavGraph()
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package org.neutrino.ktans.ui.navigation
|
||||||
|
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.navigation.compose.NavHost
|
||||||
|
import androidx.navigation.compose.composable
|
||||||
|
import androidx.navigation.compose.rememberNavController
|
||||||
|
import org.neutrino.ktans.ui.screens.MainScreen
|
||||||
|
import org.neutrino.ktans.ui.screens.SettingsScreen
|
||||||
|
|
||||||
|
sealed class Screen(val route: String) {
|
||||||
|
object Home : Screen("home")
|
||||||
|
object Settings : Screen("settings")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun NavGraph(startDestination: String = Screen.Home.route) {
|
||||||
|
val navController = rememberNavController()
|
||||||
|
NavHost(navController = navController, startDestination = startDestination) {
|
||||||
|
composable(Screen.Home.route) { MainScreen(navController) }
|
||||||
|
composable(Screen.Settings.route) { SettingsScreen(navController) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,14 +1,10 @@
|
|||||||
package org.neutrino.ktans.view
|
package org.neutrino.ktans.ui.screens
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.IntrinsicSize
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.text.selection.SelectionContainer
|
import androidx.compose.foundation.text.selection.SelectionContainer
|
||||||
import androidx.compose.material.Button
|
|
||||||
import androidx.compose.material.MaterialTheme
|
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -24,18 +20,13 @@ import androidx.compose.material.icons.filled.Settings
|
|||||||
import androidx.compose.material3.DropdownMenu
|
import androidx.compose.material3.DropdownMenu
|
||||||
import androidx.compose.material3.DropdownMenuItem
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import kotlinx.coroutines.flow.observeOn
|
|
||||||
import org.koin.compose.koinInject
|
import org.koin.compose.koinInject
|
||||||
import org.neutrino.ktans.viewmodel.MainModelView
|
import org.neutrino.ktans.viewmodel.MainModelView
|
||||||
import org.neutrino.ktans.viewmodel.Status
|
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
||||||
import compose.icons.TablerIcons
|
import compose.icons.TablerIcons
|
||||||
import compose.icons.tablericons.Table
|
import compose.icons.tablericons.Table
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
|
||||||
import androidx.compose.foundation.lazy.itemsIndexed
|
import androidx.compose.foundation.lazy.itemsIndexed
|
||||||
import androidx.compose.material.icons.filled.Check
|
import androidx.compose.material.icons.filled.Check
|
||||||
import compose.icons.FontAwesomeIcons
|
import compose.icons.FontAwesomeIcons
|
||||||
@@ -44,16 +35,14 @@ import compose.icons.tablericons.ArrowBigRight
|
|||||||
import compose.icons.tablericons.FileText
|
import compose.icons.tablericons.FileText
|
||||||
import compose.icons.fontawesomeicons.solid.PlayCircle
|
import compose.icons.fontawesomeicons.solid.PlayCircle
|
||||||
import compose.icons.tablericons.ArrowBigLeft
|
import compose.icons.tablericons.ArrowBigLeft
|
||||||
import models.Term
|
|
||||||
import models.TermFull
|
import models.TermFull
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import service.DatabaseFactory.getTranslationForLanguages
|
import service.DatabaseFactory.getTranslationForLanguages
|
||||||
import service.DatabaseFactory.getLanguageForCode
|
|
||||||
import service.DatabaseFactory.getDictionaies
|
import service.DatabaseFactory.getDictionaies
|
||||||
import service.DatabaseFactory.getLanguageForId
|
import service.DatabaseFactory.getLanguageForId
|
||||||
import dev.carlsen.flagkit.FlagKit
|
import dev.carlsen.flagkit.FlagKit
|
||||||
import dev.carlsen.flagkit.FlagIcons
|
|
||||||
import models.Dictionary
|
import models.Dictionary
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import org.neutrino.ktans.ui.navigation.Screen
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -138,7 +127,8 @@ fun groupByString(terms: List<TermFull>, direction: Int): MutableList<MutableLis
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun SearchBarTextField(viewModel: MainModelView) {
|
fun SearchBarTextField(navController: NavController) {
|
||||||
|
val viewModel: MainModelView = koinInject<MainModelView>()
|
||||||
val query = remember { mutableStateOf("") }
|
val query = remember { mutableStateOf("") }
|
||||||
var columnViewType = remember { mutableStateOf(false) }
|
var columnViewType = remember { mutableStateOf(false) }
|
||||||
var tDirection = remember { mutableStateOf(1) }
|
var tDirection = remember { mutableStateOf(1) }
|
||||||
@@ -220,7 +210,7 @@ fun SearchBarTextField(viewModel: MainModelView) {
|
|||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.padding(2.dp))
|
Spacer(modifier = Modifier.padding(2.dp))
|
||||||
IconButton(onClick = {
|
IconButton(onClick = {
|
||||||
/* TODO */
|
navController.navigate(Screen.Settings.route)
|
||||||
}) {
|
}) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Filled.Settings,
|
Icons.Filled.Settings,
|
||||||
@@ -346,7 +336,9 @@ fun SearchBarTextField(viewModel: MainModelView) {
|
|||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MainView(viewModel: MainModelView = koinInject<MainModelView>()) {
|
fun MainScreen(navController: NavController) {
|
||||||
SearchBarTextField(viewModel)
|
|
||||||
|
|
||||||
|
SearchBarTextField(navController)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package org.neutrino.ktans.ui.screens
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.IntrinsicSize
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.text.selection.SelectionContainer
|
||||||
|
import androidx.compose.material.Button
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.material.TextField
|
||||||
|
import androidx.compose.material.IconButton
|
||||||
|
import androidx.compose.material.Icon
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Search
|
||||||
|
import androidx.compose.material.icons.filled.Clear
|
||||||
|
import androidx.compose.material.icons.filled.Settings
|
||||||
|
import androidx.compose.material3.DropdownMenu
|
||||||
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import kotlinx.coroutines.flow.observeOn
|
||||||
|
import org.koin.compose.koinInject
|
||||||
|
import org.neutrino.ktans.viewmodel.MainModelView
|
||||||
|
import org.neutrino.ktans.viewmodel.Status
|
||||||
|
import androidx.compose.foundation.border
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
|
import androidx.compose.foundation.lazy.items
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
|
import compose.icons.TablerIcons
|
||||||
|
import compose.icons.tablericons.Table
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.lazy.itemsIndexed
|
||||||
|
import androidx.compose.material.icons.filled.Check
|
||||||
|
import compose.icons.FontAwesomeIcons
|
||||||
|
import compose.icons.fontawesomeicons.Solid
|
||||||
|
import compose.icons.tablericons.ArrowBigRight
|
||||||
|
import compose.icons.tablericons.FileText
|
||||||
|
import compose.icons.fontawesomeicons.solid.PlayCircle
|
||||||
|
import compose.icons.tablericons.ArrowBigLeft
|
||||||
|
import models.Term
|
||||||
|
import models.TermFull
|
||||||
|
import kotlinx.coroutines.*
|
||||||
|
import service.DatabaseFactory.getTranslationForLanguages
|
||||||
|
import service.DatabaseFactory.getLanguageForCode
|
||||||
|
import service.DatabaseFactory.getDictionaies
|
||||||
|
import service.DatabaseFactory.getLanguageForId
|
||||||
|
import dev.carlsen.flagkit.FlagKit
|
||||||
|
import dev.carlsen.flagkit.FlagIcons
|
||||||
|
import models.Dictionary
|
||||||
|
import models.Settings
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsScreen(navController: NavController) {
|
||||||
|
val viewModel: MainModelView = koinInject<MainModelView>()
|
||||||
|
Column {
|
||||||
|
Text("Setting Screen")
|
||||||
|
Button(onClick = { navController.popBackStack() }) {
|
||||||
|
Text("Back to Home Screen")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -20,7 +20,11 @@ import korlibs.io.file.std.openAsZip
|
|||||||
import models.Dictionary
|
import models.Dictionary
|
||||||
import models.Translation
|
import models.Translation
|
||||||
import service.DatabaseFactory.getDictionaies
|
import service.DatabaseFactory.getDictionaies
|
||||||
|
import androidx.navigation.NavHostController
|
||||||
|
import androidx.navigation.compose.NavHost
|
||||||
|
import androidx.navigation.compose.composable
|
||||||
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
|
import androidx.navigation.compose.rememberNavController
|
||||||
|
|
||||||
class MainModelView(private val repository: TermServiceImpl): ViewModel() {
|
class MainModelView(private val repository: TermServiceImpl): ViewModel() {
|
||||||
val terms : StateFlow<List<TermFull>?> get() = _terms
|
val terms : StateFlow<List<TermFull>?> get() = _terms
|
||||||
|
|||||||
@@ -68,7 +68,9 @@ lifecycleViewmodelKtx = "2.6.1"
|
|||||||
lifecycleViewmodelCompose = "2.8.4"
|
lifecycleViewmodelCompose = "2.8.4"
|
||||||
logback = "1.5.12"
|
logback = "1.5.12"
|
||||||
material = "1.7.6"
|
material = "1.7.6"
|
||||||
|
navigationCompose = "2.8.0-alpha10"
|
||||||
okio = "3.10.2"
|
okio = "3.10.2"
|
||||||
|
androidx-navigation = "2.7.0"
|
||||||
psqlVersion = "42.7.4"
|
psqlVersion = "42.7.4"
|
||||||
restAssuredVersion = "5.5.0"
|
restAssuredVersion = "5.5.0"
|
||||||
runtimeLivedata = "1.7.6"
|
runtimeLivedata = "1.7.6"
|
||||||
@@ -77,6 +79,7 @@ symbolProcessingApi = "2.1.0-1.0.29"
|
|||||||
lifecycleLivedataCoreKtx = "2.8.7"
|
lifecycleLivedataCoreKtx = "2.8.7"
|
||||||
composeIcons = "1.1.1"
|
composeIcons = "1.1.1"
|
||||||
korau = "4.0.10"
|
korau = "4.0.10"
|
||||||
|
navigationRuntimeAndroid = "2.9.0-alpha06"
|
||||||
|
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
@@ -185,13 +188,16 @@ ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "kto
|
|||||||
ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" }
|
ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" }
|
||||||
ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" }
|
ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" }
|
||||||
material = { module = "androidx.compose.material:material", version.ref = "material" }
|
material = { module = "androidx.compose.material:material", version.ref = "material" }
|
||||||
|
navigation-compose-v280alpha10 = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "navigationCompose" }
|
||||||
okio = { module = "com.squareup.okio:okio-bom", version.ref = "okio" }
|
okio = { module = "com.squareup.okio:okio-bom", version.ref = "okio" }
|
||||||
postgresql = { module = "org.postgresql:postgresql", version.ref = "psqlVersion" }
|
postgresql = { module = "org.postgresql:postgresql", version.ref = "psqlVersion" }
|
||||||
|
androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidx-navigation" }
|
||||||
rest-assured = { module = "io.rest-assured:rest-assured", version.ref = "restAssuredVersion" }
|
rest-assured = { module = "io.rest-assured:rest-assured", version.ref = "restAssuredVersion" }
|
||||||
symbol-processing-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "symbolProcessingApi" }
|
symbol-processing-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "symbolProcessingApi" }
|
||||||
koin-bom = { module = "io.insert-koin:koin-bom", version.ref = "koin-bom" }
|
koin-bom = { module = "io.insert-koin:koin-bom", version.ref = "koin-bom" }
|
||||||
koin-core = { module = "io.insert-koin:koin-core" }
|
koin-core = { module = "io.insert-koin:koin-core" }
|
||||||
androidx-lifecycle-livedata-core-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-core-ktx", version.ref = "lifecycleLivedataCoreKtx" }
|
androidx-lifecycle-livedata-core-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-core-ktx", version.ref = "lifecycleLivedataCoreKtx" }
|
||||||
|
androidx-navigation-runtime-android = { group = "androidx.navigation", name = "navigation-runtime-android", version.ref = "navigationRuntimeAndroid" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
||||||
|
|||||||
Reference in New Issue
Block a user