Add settings and basic navigation
This commit is contained in:
@@ -73,9 +73,11 @@ kotlin {
|
||||
implementation(compose.ui)
|
||||
implementation(compose.components.resources)
|
||||
implementation(compose.components.uiToolingPreview)
|
||||
implementation(compose.animation)
|
||||
implementation(libs.androidx.lifecycle.livedata.core)
|
||||
implementation(libs.androidx.lifecycle.viewmodel)
|
||||
implementation(libs.androidx.lifecycle.runtime.compose)
|
||||
implementation(libs.androidx.navigation.compose)
|
||||
implementation(libs.lifecycle.runtime.compose)
|
||||
implementation(libs.lifecycle.viewmodel.compose)
|
||||
implementation(libs.androidx.lifecycle.viewmodel.compose)
|
||||
@@ -88,12 +90,17 @@ kotlin {
|
||||
implementation(libs.composeIcons.fontAwesome)
|
||||
implementation(libs.korau)
|
||||
implementation(libs.flagkit)
|
||||
implementation(libs.navigation.compose.v280alpha10)
|
||||
|
||||
}
|
||||
desktopMain.dependencies {
|
||||
implementation(compose.desktop.currentOs)
|
||||
implementation(libs.kotlinx.coroutines.swing)
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
implementation(libs.androidx.navigation.runtime.android)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
|
||||
@@ -34,8 +34,7 @@ import org.koin.compose.koinInject
|
||||
import org.koin.core.parameter.parametersOf
|
||||
import org.neutrino.ktans.di.appModule
|
||||
import org.koin.compose.viewmodel.dsl.viewModelOf
|
||||
import org.neutrino.ktans.view.MainView
|
||||
|
||||
import org.neutrino.ktans.ui.MainView
|
||||
|
||||
@Composable
|
||||
@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.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
|
||||
@@ -24,18 +20,13 @@ 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
|
||||
@@ -44,16 +35,14 @@ 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 androidx.navigation.NavController
|
||||
import org.neutrino.ktans.ui.navigation.Screen
|
||||
|
||||
|
||||
@Composable
|
||||
@@ -138,7 +127,8 @@ fun groupByString(terms: List<TermFull>, direction: Int): MutableList<MutableLis
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SearchBarTextField(viewModel: MainModelView) {
|
||||
fun SearchBarTextField(navController: NavController) {
|
||||
val viewModel: MainModelView = koinInject<MainModelView>()
|
||||
val query = remember { mutableStateOf("") }
|
||||
var columnViewType = remember { mutableStateOf(false) }
|
||||
var tDirection = remember { mutableStateOf(1) }
|
||||
@@ -220,7 +210,7 @@ fun SearchBarTextField(viewModel: MainModelView) {
|
||||
)
|
||||
Spacer(modifier = Modifier.padding(2.dp))
|
||||
IconButton(onClick = {
|
||||
/* TODO */
|
||||
navController.navigate(Screen.Settings.route)
|
||||
}) {
|
||||
Icon(
|
||||
Icons.Filled.Settings,
|
||||
@@ -346,7 +336,9 @@ fun SearchBarTextField(viewModel: MainModelView) {
|
||||
|
||||
|
||||
@Composable
|
||||
fun MainView(viewModel: MainModelView = koinInject<MainModelView>()) {
|
||||
SearchBarTextField(viewModel)
|
||||
fun MainScreen(navController: NavController) {
|
||||
|
||||
|
||||
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.Translation
|
||||
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() {
|
||||
val terms : StateFlow<List<TermFull>?> get() = _terms
|
||||
|
||||
@@ -68,7 +68,9 @@ lifecycleViewmodelKtx = "2.6.1"
|
||||
lifecycleViewmodelCompose = "2.8.4"
|
||||
logback = "1.5.12"
|
||||
material = "1.7.6"
|
||||
navigationCompose = "2.8.0-alpha10"
|
||||
okio = "3.10.2"
|
||||
androidx-navigation = "2.7.0"
|
||||
psqlVersion = "42.7.4"
|
||||
restAssuredVersion = "5.5.0"
|
||||
runtimeLivedata = "1.7.6"
|
||||
@@ -77,6 +79,7 @@ symbolProcessingApi = "2.1.0-1.0.29"
|
||||
lifecycleLivedataCoreKtx = "2.8.7"
|
||||
composeIcons = "1.1.1"
|
||||
korau = "4.0.10"
|
||||
navigationRuntimeAndroid = "2.9.0-alpha06"
|
||||
|
||||
|
||||
[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-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" }
|
||||
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" }
|
||||
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" }
|
||||
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-core = { module = "io.insert-koin:koin-core" }
|
||||
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]
|
||||
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
||||
|
||||
Reference in New Issue
Block a user