feat : Confirmdialog password lobby
continuous-integration/drone/push Build is passing Details

androidCompose
Maxence GUITARD 1 year ago
parent ab3563723e
commit ef784ff3d3

@ -15,12 +15,15 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowBack import androidx.compose.material.icons.rounded.ArrowBack
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
@ -34,6 +37,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
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 com.example.mathseduc.CreateLobbyActivity import com.example.mathseduc.CreateLobbyActivity
@ -90,8 +95,8 @@ fun MultiPage() {
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(16.dp) .padding(16.dp)
) { ) {
IconButton( IconButton(
onClick = { onClick = {
@ -110,21 +115,21 @@ fun MultiPage() {
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(top = 48.dp) .padding(top = 48.dp)
) { ) {
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 10.dp), .padding(vertical = 10.dp),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Text( Text(
text = "Liste des lobbies", text = "Liste des lobbies",
color = Colors.White, color = Colors.White,
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.padding(start = 20.dp) .padding(start = 20.dp)
) )
Button( Button(
onClick = { onClick = {
@ -134,8 +139,8 @@ fun MultiPage() {
}, },
shape = RoundedCornerShape(15), shape = RoundedCornerShape(15),
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.padding(end = 20.dp), .padding(end = 20.dp),
colors = ButtonDefaults.buttonColors(Colors.Blue) colors = ButtonDefaults.buttonColors(Colors.Blue)
) { ) {
Text(text = "Ajouter un lobby") Text(text = "Ajouter un lobby")
@ -144,8 +149,8 @@ fun MultiPage() {
LazyColumn( LazyColumn(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.weight(0.85f) .weight(0.85f)
) { ) {
items(lobbyList) { lobby -> items(lobbyList) { lobby ->
LobbyItem(lobby, selectedItem == lobby) { LobbyItem(lobby, selectedItem == lobby) {
@ -154,6 +159,7 @@ fun MultiPage() {
if (ControllerLobby.getNbPlayerInLobby(selectedItem!!.id) < selectedItem!!.nbplayers) { if (ControllerLobby.getNbPlayerInLobby(selectedItem!!.id) < selectedItem!!.nbplayers) {
// Créer un Utiliser si le lobby n'est pas plein // Créer un Utiliser si le lobby n'est pas plein
scope.launch { scope.launch {
createUtiliserForLobby(context, selectedItem!!) createUtiliserForLobby(context, selectedItem!!)
} }
@ -192,16 +198,22 @@ private suspend fun createUtiliserForLobby(context: Context, lobby: Lobby) {
@Composable @Composable
fun LobbyItem(lobby: Lobby, isSelected: Boolean, onItemClick: (Lobby) -> Unit) { fun LobbyItem(lobby: Lobby, isSelected: Boolean, onItemClick: (Lobby) -> Unit) {
val context = LocalContext.current
var showDialog by rememberSaveable { mutableStateOf(false) }
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(8.dp) .padding(8.dp)
.clickable { .clickable {
onItemClick(lobby) if (lobby.password.isNotEmpty()) {
} showDialog = true
.background(if (isSelected) Colors.Orange else Colors.Grey) } else {
.padding(16.dp) onItemClick(lobby)
.clip(RoundedCornerShape(8.dp)) }
}
.background(if (isSelected) Colors.Orange else Colors.Grey)
.padding(16.dp)
.clip(RoundedCornerShape(8.dp))
) { ) {
Text( Text(
text = lobby.name, text = lobby.name,
@ -227,5 +239,73 @@ fun LobbyItem(lobby: Lobby, isSelected: Boolean, onItemClick: (Lobby) -> Unit) {
color = Colors.White, color = Colors.White,
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
) )
if (showDialog) {
ConfirmDialog(
onDismiss = { showDialog = false },
onConfirm = { password ->
println("Password input : $password")
if (password == lobby.password) {
showDialog = false
onItemClick(lobby)
} else {
Toast.makeText(context, "Wrong password!", Toast.LENGTH_SHORT).show()
}
}
)
}
} }
} }
@Composable
fun ConfirmDialog(onDismiss: () -> Unit, onConfirm: (String) -> Unit) {
val context = LocalContext.current
var password by remember { mutableStateOf("") }
AlertDialog(
onDismissRequest = {
onDismiss()
},
title = { Text("Enter Password") },
confirmButton = {
Button(
onClick = {
onConfirm(password)
}
) {
Text("Confirm")
}
},
dismissButton = {
Button(
onClick = {
onDismiss()
}
) {
Text("Dismiss")
}
},
text = {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
) {
OutlinedTextField(
value = password,
onValueChange = { password = it },
label = { Text("Password") },
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Password
),
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
)
}
}
)
}
Loading…
Cancel
Save