add dialog for create and import button
This commit is contained in:
parent
66f065d3f7
commit
92ba1c07c9
1 changed files with 127 additions and 2 deletions
|
@ -11,15 +11,26 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.itemsIndexed
|
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.Button
|
||||||
import androidx.compose.material3.Card
|
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.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
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.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.semantics.Role
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
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 setOfQuestions by model.setFlow.collectAsState(listOf())
|
||||||
val currentSelection by model.selected
|
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(
|
Column(
|
||||||
modifier = Modifier.padding(padding),
|
modifier = Modifier.padding(padding),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
@ -41,13 +69,19 @@ fun HomeScreen(padding: PaddingValues, model: HomeViewModel = viewModel()) {
|
||||||
ShowList(setOfQuestions, currentSelection)
|
ShowList(setOfQuestions, currentSelection)
|
||||||
|
|
||||||
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) {
|
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))
|
Text(text = context.getString(R.string.main_button_create))
|
||||||
}
|
}
|
||||||
Button(onClick = { Toast.makeText(context, "Modify", Toast.LENGTH_SHORT).show() }) {
|
Button(onClick = { Toast.makeText(context, "Modify", Toast.LENGTH_SHORT).show() }) {
|
||||||
Text(text = context.getString(R.string.main_button_modify))
|
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))
|
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
|
@Composable
|
||||||
fun ShowList(
|
fun ShowList(
|
||||||
sets: List<SetOfQuestions>,
|
sets: List<SetOfQuestions>,
|
||||||
|
|
Reference in a new issue