add settings screen, move db deletion into it, fix center of "no questions" message in play screen
This commit is contained in:
parent
4ebd2dc7f1
commit
e7c511f5e4
9 changed files with 103 additions and 62 deletions
|
@ -20,7 +20,6 @@ import androidx.compose.foundation.selection.selectable
|
|||
import androidx.compose.foundation.selection.selectableGroup
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
|
@ -66,7 +65,6 @@ fun HomeScreen(
|
|||
val creationRequest by model.creation
|
||||
val importationRequest by model.importation
|
||||
val deletionRequest by model.deletionSelect
|
||||
val deletionDBRequest by model.deletionDB
|
||||
|
||||
val errorEntry by model.error
|
||||
|
||||
|
@ -98,13 +96,6 @@ fun HomeScreen(
|
|||
)
|
||||
}
|
||||
|
||||
if (deletionDBRequest) {
|
||||
DeletionDBDialog(
|
||||
model::dismissDeleteAll,
|
||||
model::deleteAll
|
||||
)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier.padding(padding), horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
|
@ -120,32 +111,12 @@ fun HomeScreen(
|
|||
|
||||
Spacer(modifier = Modifier.padding(top = 50.dp))
|
||||
|
||||
DeleteRow(context, model)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun DeleteRow(
|
||||
context: Context, model: HomeViewModel
|
||||
) {
|
||||
val selection by model.selected
|
||||
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center
|
||||
) {
|
||||
Button(
|
||||
onClick = { (model::doAction)(ActionHome.DELETION_DB) },
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorResource(id = R.color.red))
|
||||
) {
|
||||
Text(text = context.getString(R.string.main_button_deletebase))
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.padding(2.dp))
|
||||
|
||||
Button(enabled = selection != null, onClick = {
|
||||
(model::doAction)(ActionHome.DELETION_SELECT)
|
||||
}) {
|
||||
Text(text = context.getString(R.string.main_button_delete))
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
|
||||
Button(enabled = currentSelection != null, onClick = {
|
||||
model.doAction(ActionHome.DELETION_SELECT)
|
||||
}) {
|
||||
Text(text = context.getString(R.string.main_button_delete))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -155,7 +126,7 @@ private fun ActionRow(context: Context, model: HomeViewModel, navController: Nav
|
|||
val selection by model.selected
|
||||
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
|
||||
Button(onClick = { (model::doAction)(ActionHome.CREATION) }) {
|
||||
Button(onClick = { model.doAction(ActionHome.CREATION) }) {
|
||||
Text(text = context.getString(R.string.main_button_create))
|
||||
}
|
||||
|
||||
|
@ -169,7 +140,7 @@ private fun ActionRow(context: Context, model: HomeViewModel, navController: Nav
|
|||
|
||||
Spacer(modifier = Modifier.padding(2.dp))
|
||||
|
||||
Button(onClick = { (model::doAction)(ActionHome.IMPORTATION) }) {
|
||||
Button(onClick = { model.doAction(ActionHome.IMPORTATION) }) {
|
||||
Text(text = context.getString(R.string.main_button_import))
|
||||
}
|
||||
}
|
||||
|
@ -284,13 +255,6 @@ fun DeletionDialog(dismiss: () -> Unit, confirm: () -> Unit) =
|
|||
text = { Text(text = "Voulez-vous supprimer ce jeu de question ?") },
|
||||
confirmButton = { Button(onClick = confirm) { Text(text = "Ok") } })
|
||||
|
||||
@Composable
|
||||
fun DeletionDBDialog(dismiss: () -> Unit, confirm: () -> Unit) =
|
||||
AlertDialog(onDismissRequest = dismiss,
|
||||
title = { Text(text = "Supprimer la base de données") },
|
||||
text = { Text(text = "Voulez-vous supprimer la base de données ?") },
|
||||
confirmButton = { Button(onClick = confirm) { Text(text = "Ok") } })
|
||||
|
||||
@Composable
|
||||
fun ShowList(
|
||||
sets: List<SetOfQuestions>,
|
||||
|
|
|
@ -10,6 +10,7 @@ import androidx.compose.material.BottomNavigationItem
|
|||
import androidx.compose.material.Icon
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Home
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.material3.CenterAlignedTopAppBar
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
|
@ -90,6 +91,7 @@ fun MainScreen() {
|
|||
)
|
||||
}
|
||||
}
|
||||
composable(SETTINGS) { SettingsScreen(padding) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -117,4 +119,13 @@ fun BottomBar(navController: NavHostController) =
|
|||
contentDescription = LocalContext.current.getString(R.string.home_button)
|
||||
)
|
||||
})
|
||||
|
||||
BottomNavigationItem(selected = currentRoute == SETTINGS,
|
||||
onClick = { navController.navigate(SETTINGS) { popUpTo(HOME) } },
|
||||
icon = {
|
||||
Icon(
|
||||
Icons.Default.Settings,
|
||||
LocalContext.current.getString(R.string.settings_button)
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -73,7 +73,9 @@ fun PlayScreen(
|
|||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
if (question == null) {
|
||||
Text("Ce set n'a aucune question", fontSize = 30.sp, textAlign = TextAlign.Center)
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
|
||||
Text("Ce set n'a aucune question", fontSize = 30.sp)
|
||||
}
|
||||
} else {
|
||||
Text(text = question!!.enonce, fontSize = 30.sp, textAlign = TextAlign.Center)
|
||||
|
||||
|
|
|
@ -5,3 +5,4 @@ const val MODIFY_SET = "modify_set"
|
|||
const val MODIFY_SET_ARGS = "id_set"
|
||||
const val PLAY = "play"
|
||||
const val PLAY_SET_ARG = "id_set"
|
||||
const val SETTINGS = "settings"
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package fr.uparis.diamantkennel.memorisationapplication
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.colorResource
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import fr.uparis.diamantkennel.memorisationapplication.ui.SettingsViewModel
|
||||
|
||||
@Composable
|
||||
fun SettingsScreen(padding: PaddingValues, model: SettingsViewModel = viewModel()) {
|
||||
val context = LocalContext.current
|
||||
|
||||
var deletionDBRequest by model.deletionDB
|
||||
|
||||
if (deletionDBRequest) {
|
||||
DeletionDBDialog(model::deleteDb) { deletionDBRequest = false }
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier.padding(padding),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
|
||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
|
||||
Button(
|
||||
onClick = { deletionDBRequest = true },
|
||||
colors = ButtonDefaults.buttonColors(containerColor = colorResource(id = R.color.red))
|
||||
) {
|
||||
Text(text = context.getString(R.string.main_button_deletebase))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun DeletionDBDialog(confirm: () -> Unit, dismiss: () -> Unit) =
|
||||
AlertDialog(onDismissRequest = dismiss,
|
||||
title = { Text(text = "Supprimer la base de données") },
|
||||
text = { Text(text = "Voulez-vous supprimer la base de données ?") },
|
||||
confirmButton = {
|
||||
Button(onClick = confirm) { Text(text = "Oui") }
|
||||
},
|
||||
dismissButton = { Button(onClick = dismiss) { Text(text = "Non") } })
|
|
@ -1,5 +1,5 @@
|
|||
package fr.uparis.diamantkennel.memorisationapplication.ui
|
||||
|
||||
enum class ActionHome {
|
||||
CREATION, IMPORTATION, DELETION_SELECT, DELETION_DB
|
||||
CREATION, IMPORTATION, DELETION_SELECT
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) {
|
|||
var creation = mutableStateOf(false)
|
||||
var importation = mutableStateOf(false)
|
||||
var deletionSelect = mutableStateOf(false)
|
||||
var deletionDB = mutableStateOf(false)
|
||||
|
||||
var sujet = mutableStateOf("")
|
||||
var error = mutableStateOf<ErrorsAjout?>(null)
|
||||
|
@ -85,17 +84,6 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) {
|
|||
deletionSelect.value = true
|
||||
}
|
||||
}
|
||||
|
||||
ActionHome.DELETION_DB -> {
|
||||
deletionDB.value = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteAll() {
|
||||
deletionDB.value = false
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
dao.deleteTable()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -122,10 +110,6 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) {
|
|||
deletionSelect.value = false
|
||||
}
|
||||
|
||||
fun dismissDeleteAll() {
|
||||
deletionDB.value = false
|
||||
}
|
||||
|
||||
fun dismissImportation() {
|
||||
importation.value = false
|
||||
}
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
package fr.uparis.diamantkennel.memorisationapplication.ui
|
||||
|
||||
import android.app.Application
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import fr.uparis.diamantkennel.memorisationapplication.MemoApplication
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class SettingsViewModel(application: Application) : AndroidViewModel(application) {
|
||||
private val dao = (application as MemoApplication).database.memoDao()
|
||||
val deletionDB = mutableStateOf(false)
|
||||
|
||||
fun deleteDb() {
|
||||
deletionDB.value = false
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
dao.deleteTable()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
<resources>
|
||||
<string name="app_name">Memorisation</string>
|
||||
<string name="home_button">Page principale</string>
|
||||
<string name="settings_button">Paramètres</string>
|
||||
<string name="main_button_create">Créer</string>
|
||||
<string name="main_button_modify">Modifier</string>
|
||||
<string name="main_button_import">Importer</string>
|
||||
|
|
Reference in a new issue