From 0f2db13184f3d2c7b7736eea2e1f61329b2bc9d4 Mon Sep 17 00:00:00 2001 From: ElEgEv <112943269+ElEgEv@users.noreply.github.com> Date: Tue, 28 Nov 2023 10:17:11 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B2?= =?UTF-8?q?=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../is/pmu/composeui/navigation/MainNavbar.kt | 5 ++- .../is/pmu/composeui/navigation/Screen.kt | 2 +- .../ulstu/is/pmu/tank/composeui/TankList.kt | 31 ++++++++++++++----- .../tank/composeui/edit/TankEditViewModel.kt | 1 + .../java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt | 4 +-- .../ru/ulstu/is/pmu/tank/dao/NationDao.kt | 4 +-- .../is/pmu/tanks/composeui/Constructor.kt | 16 +++++----- .../ulstu/is/pmu/ui/AppViewModelProvider.kt | 8 ++++- 8 files changed, 49 insertions(+), 22 deletions(-) diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/MainNavbar.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/MainNavbar.kt index 362f175..018a35c 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/MainNavbar.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/MainNavbar.kt @@ -142,7 +142,10 @@ fun Navhost( startDestination = Screen.TankList.route, ) { composable(Screen.TankList.route) { TankList(navController) } - composable(Screen.Constructor.route) { Constructor(navController) } + composable( + Screen.Constructor.route, + arguments = listOf(navArgument("id") { type = NavType.LongType }) + ) { Constructor(navController) } composable(Screen.Hangar.route) { Hangar(navController) } composable(Screen.Account.route) { Account(navController) } composable( diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/Screen.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/Screen.kt index d4587aa..1149120 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/Screen.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/composeui/navigation/Screen.kt @@ -26,7 +26,7 @@ enum class Screen( "register", R.string.register, showInBottomBar = false ), Constructor( - "constructor", R.string.constructor, Icons.Filled.Add + "constructor/{id}", R.string.constructor, Icons.Filled.Add ), Hangar( "hangar", R.string.hangar, Icons.Filled.List diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt index f7a84d9..17781fa 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/TankList.kt @@ -4,6 +4,7 @@ import android.content.res.Configuration import androidx.compose.foundation.Image import androidx.compose.foundation.ScrollState import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -37,6 +38,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController import ru.ulstu.`is`.pmu.R import ru.ulstu.`is`.pmu.composeui.navigation.Screen import ru.ulstu.`is`.pmu.tank.composeui.list.TankListViewModel @@ -64,13 +66,23 @@ fun TankList( val tankListUiState by viewModel.tankListUiState.collectAsState() // Lazy Column, Pass the numbers array - TankList(numbers = listIds, listTanks = tankListUiState.tankList) + if (navController != null) { + TankList( + numbers = listIds, + listTanks = tankListUiState.tankList, + onClick = { uid: Long -> + val route = Screen.Constructor.route.replace("{id}", uid.toString()) + navController.navigate(route) + } + ) + } } @Composable fun ColumnItem( number: Int, - tanks: List + tanks: List, + onClick: (uid: Long) -> Unit ) { Column( modifier = Modifier.padding(0.dp, 10.dp) @@ -110,6 +122,7 @@ fun ColumnItem( modifier = Modifier .size(width = 200.dp, height = 250.dp) .padding(all = 5.dp) + .clickable { onClick(tank.tankId!!) } ) { Image( painter = painterResource(id = tank.image), @@ -133,7 +146,8 @@ fun ColumnItem( colors = ButtonDefaults.buttonColors( containerColor = CustomRed, contentColor = CustomDark), - onClick = { }) { + onClick = { } + ) { //navController?.navigate(Screen.Hangar.route) //navController?.navigate(studentId) //"${student.firstName} ${student.lastName}" @@ -151,7 +165,8 @@ fun ColumnItem( @Composable private fun TankList( numbers: List, - listTanks: List + listTanks: List, + onClick: (uid: Long) -> Unit, ) { LazyColumn( @@ -174,7 +189,7 @@ private fun TankList( // current list/array item in the lazyItemScope // тут как раз и выводим 3 раза все танки по нациям items(numbers) {arrayItem-> - ColumnItem(number = arrayItem, tanks = listTanks) + ColumnItem(number = arrayItem, tanks = listTanks, onClick = onClick) } // items(list/array) places number of @@ -197,7 +212,8 @@ fun TankListPreview() { ) { TankList( numbers = listOf(1, 2, 3), - listTanks = listOf() + listTanks = (1..20).map { i -> Tank.getTank(i.toLong()) }, + onClick = { } ) } } @@ -213,7 +229,8 @@ fun TankEmptyListPreview() { ) { TankList( numbers = listOf(1, 2, 3), - listTanks = listOf() + listTanks = listOf(), + onClick = { } ) } } diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/edit/TankEditViewModel.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/edit/TankEditViewModel.kt index 130942d..c8024aa 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/edit/TankEditViewModel.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/composeui/edit/TankEditViewModel.kt @@ -11,6 +11,7 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import ru.ulstu.`is`.pmu.tank.model.Tank import ru.ulstu.`is`.pmu.tank.repository.TankRepository +import kotlin.math.tan class TankEditViewModel( savedStateHandle: SavedStateHandle, diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt index 6ef2a1e..2657441 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt @@ -15,12 +15,12 @@ import ru.ulstu.`is`.pmu.tank.model.User @Dao interface LevelDao { @Query("select * from levels") - fun getAll(): List + suspend fun getAll(): List //получить уровни с танками @Transaction @Query("SELECT * FROM levels") - fun getLevelsWithTanks(): List + suspend fun getLevelsWithTanks(): List //получить конкретный уровень @Query("select * from levels where levels.uid = :uid") diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt index e4aadec..db84e2f 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt @@ -14,12 +14,12 @@ import ru.ulstu.`is`.pmu.tank.model.NationWithTanks @Dao interface NationDao { @Query("select * from nations") - fun getAll(): List + suspend fun getAll(): List //получить нации с танками @Transaction @Query("SELECT * FROM nations") - fun getNationsWithTanks(): List + suspend fun getNationsWithTanks(): List //получить конкретную нацию @Query("select * from nations where nations.uid = :uid") diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Constructor.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Constructor.kt index 7da8537..17683b3 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Constructor.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tanks/composeui/Constructor.kt @@ -21,6 +21,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -106,16 +107,16 @@ private fun Constructor( onClick: () -> Unit, onUpdate: (TankDetails) -> Unit ) { - var nationName by remember { mutableStateOf("") } - var price by remember { mutableStateOf("") } + var tankName by remember { mutableStateOf(tankUiState.tankDetails.name) } + var price by remember { mutableStateOf(tankUiState.tankDetails.price.toString()) } //для работы выпадающего списка уровней var expandedLevels by remember { mutableStateOf(false) } - var selectedLevel by remember { mutableStateOf(getLevels()[0].level) } + var selectedLevel by remember { mutableIntStateOf(1) } //для работы выпадающего списка наций var expandedNation by remember { mutableStateOf(false) } - var selectedNation by remember { mutableStateOf(getNations()[0].nationName) } + var selectedNation by remember { mutableStateOf("СССР") } Column( verticalArrangement = Arrangement.spacedBy(35.dp), @@ -152,7 +153,7 @@ private fun Constructor( } Column { TextField( - value = nationName, + value = tankName, placeholder = { Text(text = "Название", color = CustomDark) }, onValueChange = { onUpdate(tankUiState.tankDetails.copy(name = it)) }, modifier = Modifier @@ -187,7 +188,7 @@ private fun Constructor( }, ) { // menu items - getLevels().forEach { selectionOption -> + levelsListUiState.levelList.forEach { selectionOption -> DropdownMenuItem( text = { Text(selectionOption.level.toString()) }, onClick = { @@ -229,7 +230,7 @@ private fun Constructor( }, ) { // menu items - getNations().forEach { selectionOption -> + nationsListUiState.nationList.forEach { selectionOption -> DropdownMenuItem( text = { Text(selectionOption.nationName) }, onClick = { @@ -393,7 +394,6 @@ fun ConstructorEditPreview() { Surface( color = CustomDark ) { - val navController = rememberNavController() Constructor( tankUiState = Tank.getTank().toUiState(true), levelUiState = Level.DEMO_LEVEL.toUiState(), diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/ui/AppViewModelProvider.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/ui/AppViewModelProvider.kt index 39cda16..e9d2630 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/ui/AppViewModelProvider.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/ui/AppViewModelProvider.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.viewmodel.viewModelFactory import ru.ulstu.`is`.pmu.TankApplication import ru.ulstu.`is`.pmu.tank.composeui.edit.LevelDropDownViewModel import ru.ulstu.`is`.pmu.tank.composeui.edit.NationDropDownViewModel +import ru.ulstu.`is`.pmu.tank.composeui.edit.TankEditViewModel import ru.ulstu.`is`.pmu.tank.composeui.edit.UserEditViewModel import ru.ulstu.`is`.pmu.tank.composeui.list.TankListViewModel @@ -16,7 +17,12 @@ object AppViewModelProvider { initializer { TankListViewModel(tankApplication().container.tankRepository) } - + initializer { + TankEditViewModel( + this.createSavedStateHandle(), + tankApplication().container.tankRepository + ) + } initializer { UserEditViewModel( this.createSavedStateHandle(),