diff --git a/compose/.gradle/8.0/executionHistory/executionHistory.bin b/compose/.gradle/8.0/executionHistory/executionHistory.bin index 1ef4a53..de8faa7 100644 Binary files a/compose/.gradle/8.0/executionHistory/executionHistory.bin and b/compose/.gradle/8.0/executionHistory/executionHistory.bin differ diff --git a/compose/.gradle/8.0/executionHistory/executionHistory.lock b/compose/.gradle/8.0/executionHistory/executionHistory.lock index da9e058..9c2f6e5 100644 Binary files a/compose/.gradle/8.0/executionHistory/executionHistory.lock and b/compose/.gradle/8.0/executionHistory/executionHistory.lock differ diff --git a/compose/.gradle/8.0/fileHashes/fileHashes.bin b/compose/.gradle/8.0/fileHashes/fileHashes.bin index b4e0d6f..23f9229 100644 Binary files a/compose/.gradle/8.0/fileHashes/fileHashes.bin and b/compose/.gradle/8.0/fileHashes/fileHashes.bin differ diff --git a/compose/.gradle/8.0/fileHashes/fileHashes.lock b/compose/.gradle/8.0/fileHashes/fileHashes.lock index 01d26f4..4421d37 100644 Binary files a/compose/.gradle/8.0/fileHashes/fileHashes.lock and b/compose/.gradle/8.0/fileHashes/fileHashes.lock differ diff --git a/compose/.gradle/8.0/fileHashes/resourceHashesCache.bin b/compose/.gradle/8.0/fileHashes/resourceHashesCache.bin index 892b217..0eae824 100644 Binary files a/compose/.gradle/8.0/fileHashes/resourceHashesCache.bin and b/compose/.gradle/8.0/fileHashes/resourceHashesCache.bin differ diff --git a/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock index dc72210..fa7128b 100644 Binary files a/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/compose/.gradle/buildOutputCleanup/outputFiles.bin b/compose/.gradle/buildOutputCleanup/outputFiles.bin index 2417ce0..fe35331 100644 Binary files a/compose/.gradle/buildOutputCleanup/outputFiles.bin and b/compose/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/compose/.gradle/file-system.probe b/compose/.gradle/file-system.probe index 9e25017..14f5211 100644 Binary files a/compose/.gradle/file-system.probe and b/compose/.gradle/file-system.probe differ 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 4eacae7..72ea040 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 @@ -40,6 +40,10 @@ class TankEditViewModel( } } + fun getTankId(): Long{ + return tankUid; + } + fun updateUiState(tankDetails: TankDetails) { tankUiState = TankUiState( tankDetails = tankDetails, @@ -58,6 +62,14 @@ class TankEditViewModel( } } + suspend fun deleteTank() { + if (validateInput()) { + if (tankUid > 0) { + tankRepository.deleteTank(tankUiState.tankDetails.toTank(tankUid)) + } + } + } + private fun validateInput(uiState: TankDetails = tankUiState.tankDetails): Boolean { return with(uiState) { name.isNotBlank() diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt index 9a7cb94..953fe39 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppDatabase.kt @@ -34,7 +34,7 @@ abstract class AppDatabase : RoomDatabase() { abstract fun tankImageDao() : TankImageDao companion object { - private const val DB_NAME: String = "18-db" + private const val DB_NAME: String = "19-db" @Volatile private var INSTANCE: AppDatabase? = null 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 5ae015f..61e1346 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 @@ -42,6 +42,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController +import com.application.ui.getEmptyBitmap import com.application.ui.miniatureBound import com.application.ui.resize import com.application.ui.tankImageBound @@ -75,11 +76,14 @@ fun Constructor( nationDropDownViewModel: NationDropDownViewModel = viewModel(factory = AppViewModelProvider.Factory) ){ val coroutineScope = rememberCoroutineScope() + + val tankId = tankEditViewModel.getTankId() levelDropDownViewModel.setCurrentLevel(tankEditViewModel.tankUiState.tankDetails.levelId ?: 1) nationDropDownViewModel.setCurrentNation(tankEditViewModel.tankUiState.tankDetails.nationId ?: 1) Constructor( + tankId = tankId, tankViewModel = tankEditViewModel, tankUiState = tankEditViewModel.tankUiState, levelUiState = levelDropDownViewModel.levelUiState, @@ -88,12 +92,18 @@ fun Constructor( nationUiState = nationDropDownViewModel.nationUiState, nationsListUiState = nationDropDownViewModel.nationsListUiState, onNationUpdate = nationDropDownViewModel::updateUiState, - onClick = { + onClickSave = { coroutineScope.launch { tankEditViewModel.saveTank() navController.popBackStack() } }, + onClickDelete = { + coroutineScope.launch { + tankEditViewModel.deleteTank() + navController.popBackStack() + } + }, onUpdate = tankEditViewModel::updateUiState ) } @@ -200,6 +210,7 @@ private fun NationDropDown( @OptIn(ExperimentalMaterial3Api::class) @Composable private fun Constructor( + tankId: Long, tankViewModel: TankEditViewModel, tankUiState: TankUiState, levelUiState: LevelUiState, @@ -208,7 +219,8 @@ private fun Constructor( nationUiState: NationUiState, nationsListUiState: NationsListUiState, onNationUpdate: (Nation) -> Unit, - onClick: () -> Unit, + onClickSave: () -> Unit, + onClickDelete: () -> Unit, onUpdate: (TankDetails) -> Unit ) { fun handleImageUpload(bitmap: Bitmap) { @@ -344,7 +356,7 @@ private fun Constructor( } Spacer(Modifier.height(10.dp)) Row( - horizontalArrangement = Arrangement.Center, + horizontalArrangement = Arrangement.SpaceAround, modifier = Modifier .fillMaxWidth() .padding(10.dp, 10.dp) @@ -358,11 +370,27 @@ private fun Constructor( contentColor = Color.Black ), enabled = tankUiState.isEntryValid, - onClick = onClick + onClick = onClickSave ) { //"${student.firstName} ${student.lastName}" Text(text = stringResource(id = R.string.save_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold) } + if(tankId != 0L){ + Button( + modifier = Modifier + .width(200.dp) + .height(50.dp), + colors = ButtonDefaults.buttonColors( + containerColor = CustomOrange, + contentColor = Color.Black + ), + enabled = tankUiState.isEntryValid, + onClick = onClickDelete + ) { + //"${student.firstName} ${student.lastName}" + Text(text = stringResource(id = R.string.delete_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold) + } + } } } } @@ -467,7 +495,7 @@ private fun Constructor( containerColor = CustomOrange, contentColor = Color.Black ), - onClick = onClick + onClick = onClickSave ) { //"${student.firstName} ${student.lastName}" Text(text = stringResource(id = R.string.create_account_button), fontSize = 20.sp, fontWeight = FontWeight.Bold) @@ -488,6 +516,7 @@ fun ConstructorEditPreview() { color = CustomDark ) { Constructor( + tankId = 0L, tankViewModel = viewModel(factory = AppViewModelProvider.Factory), tankUiState = Tank.getTank().toUiState(true), levelUiState = Level.DEMO_LEVEL.toUiState(), @@ -496,7 +525,8 @@ fun ConstructorEditPreview() { nationUiState = Nation.DEMO_NATION.toUiState(), nationsListUiState = NationsListUiState(listOf()), onNationUpdate = { }, - onClick = { }, + onClickSave = { }, + onClickDelete = { }, onUpdate = { }, ) } diff --git a/compose/app/src/main/res/values/strings.xml b/compose/app/src/main/res/values/strings.xml index de52e68..b5cc118 100644 --- a/compose/app/src/main/res/values/strings.xml +++ b/compose/app/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ Войти Создать Сохранить + Удалить Регистрация Имя Фамилия