From 92ba1c07c970d1c8054522361b00fd690bdace10 Mon Sep 17 00:00:00 2001 From: DIAMANT alexandre Date: Mon, 27 Nov 2023 15:39:17 +0100 Subject: [PATCH] add dialog for create and import button --- .../memorisationapplication/HomeScreen.kt | 129 +++++++++++++++++- 1 file changed, 127 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/HomeScreen.kt b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/HomeScreen.kt index 0b9aa9e..b90f4b4 100644 --- a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/HomeScreen.kt +++ b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/HomeScreen.kt @@ -11,15 +11,26 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed +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.Card +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.RadioButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +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.semantics.Role import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel @@ -34,6 +45,23 @@ fun HomeScreen(padding: PaddingValues, model: HomeViewModel = viewModel()) { val setOfQuestions by model.setFlow.collectAsState(listOf()) val currentSelection by model.selected + var wantToCreate by remember { mutableStateOf(false) } + var wantToImport by remember { mutableStateOf(false) } + + if (wantToCreate) { + DialogCreation( + annuler = {wantToCreate = false}, + confirmer = {wantToCreate = false} + ) + } + + if (wantToImport) { + DialogImportation( + annuler = {wantToImport = false}, + confirmer = {wantToImport = false} + ) + } + Column( modifier = Modifier.padding(padding), horizontalAlignment = Alignment.CenterHorizontally @@ -41,13 +69,19 @@ fun HomeScreen(padding: PaddingValues, model: HomeViewModel = viewModel()) { ShowList(setOfQuestions, currentSelection) Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) { - Button(onClick = { Toast.makeText(context, "Create", Toast.LENGTH_SHORT).show() }) { + Button(onClick = { + Toast.makeText(context, "Create", Toast.LENGTH_SHORT).show() + wantToCreate = true + }) { Text(text = context.getString(R.string.main_button_create)) } Button(onClick = { Toast.makeText(context, "Modify", Toast.LENGTH_SHORT).show() }) { Text(text = context.getString(R.string.main_button_modify)) } - Button(onClick = { Toast.makeText(context, "Import", Toast.LENGTH_SHORT).show() }) { + Button(onClick = { + Toast.makeText(context, "Import", Toast.LENGTH_SHORT).show() + wantToImport = true + }) { Text(text = context.getString(R.string.main_button_import)) } } @@ -62,6 +96,97 @@ fun HomeScreen(padding: PaddingValues, model: HomeViewModel = viewModel()) { } } +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DialogCreation(annuler: () -> Unit, confirmer: () -> Unit) { + var sujet by remember {mutableStateOf("")} + + AlertDialog( + onDismissRequest = annuler, + title = { Text(text ="Créer un sujet") }, + text = { + OutlinedTextField( + value = sujet, + onValueChange = { newTextValue -> sujet = newTextValue}, + label = { Text("Nouveau sujet") } + ) + }, + confirmButton = { + Button( + // on ajoute le sujet dans la liste des sujets + onClick = confirmer, + content = { Text("Ajouter") } + ) + }, + dismissButton = { + Button( + onClick = annuler, + content = { Text("Annuler") } + ) + } + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DialogImportation(annuler: () -> Unit, confirmer: () -> Unit) { + val radioOptions = listOf("Locale", "Internet") + val (selectedOption, onOptionSelected) = remember {mutableStateOf(radioOptions[0])} + + var lien by remember { mutableStateOf("") } + + AlertDialog( + onDismissRequest = annuler, + title = { Text(text = "Importer un jeu de question") }, + text = { + Column { + Column(Modifier.selectableGroup()) { + radioOptions.forEach { text -> + Row( + Modifier + .selectable( + selected = (text == selectedOption), + onClick = { onOptionSelected(text) }, + role = Role.RadioButton + ) + .padding(horizontal = 16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + RadioButton( + selected = (text == selectedOption), + onClick = null // pour l'instant + ) + Text( + text = text, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(start = 16.dp) + ) + } + } + } + + OutlinedTextField( + value = lien, + onValueChange = {newTextValue -> lien = newTextValue}, + label = {Text(text = "Lien") } + ) + } + }, + confirmButton = { + Button( + onClick = confirmer, + content = { Text("Importer") } + ) + }, + dismissButton = { + Button( + onClick = annuler, + content = { Text("Annuler") } + ) + } + ) +} + @Composable fun ShowList( sets: List,