style : CreateLobbyActivity
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
cf581393f9
commit
fb17127303
@ -1,4 +1,15 @@
|
|||||||
package com.example.mathseduc.ui
|
package com.example.mathseduc
|
||||||
|
|
||||||
class CreateLobbyActivity {
|
import android.os.Bundle
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
|
import androidx.activity.compose.setContent
|
||||||
|
import com.example.mathseduc.ui.CreateLobbyPage
|
||||||
|
|
||||||
|
class CreateLobbyActivity : ComponentActivity() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
setContent {
|
||||||
|
CreateLobbyPage()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,2 +1,225 @@
|
|||||||
package com.example.mathseduc.ui
|
package com.example.mathseduc.ui
|
||||||
|
|
||||||
|
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.ArrowDropDown
|
||||||
|
import androidx.compose.material3.Button
|
||||||
|
import androidx.compose.material3.DropdownMenu
|
||||||
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextField
|
||||||
|
import androidx.compose.material3.TextFieldDefaults
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.layout.onGloballyPositioned
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
|
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||||
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
|
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
|
import androidx.compose.ui.unit.IntSize
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.example.mathseduc.controllers.ControllerChapter
|
||||||
|
import com.example.mathseduc.ui.theme.Colors
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun CreateLobbyPage() {
|
||||||
|
var lobbyName by remember { mutableStateOf("") }
|
||||||
|
var password by remember { mutableStateOf("") }
|
||||||
|
var nbPlayers by remember { mutableStateOf("") }
|
||||||
|
var difficulty by remember { mutableStateOf("") }
|
||||||
|
var chapter by remember { mutableStateOf("") }
|
||||||
|
var expandedDifficulty by remember { mutableStateOf(false) }
|
||||||
|
var expandedChapter by remember { mutableStateOf(false) }
|
||||||
|
var sizeDifficulty by remember { mutableStateOf(IntSize.Zero) }
|
||||||
|
var sizeChapter by remember { mutableStateOf(IntSize.Zero) }
|
||||||
|
|
||||||
|
val context = LocalContext.current
|
||||||
|
val keyboardController = LocalSoftwareKeyboardController.current
|
||||||
|
|
||||||
|
Column(
|
||||||
|
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(16.dp)
|
||||||
|
.background(Colors.Black)
|
||||||
|
) {
|
||||||
|
TextField(
|
||||||
|
value = lobbyName,
|
||||||
|
onValueChange = { lobbyName = it },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp),
|
||||||
|
label = { Text("Lobby Name") }
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
TextField(
|
||||||
|
value = password,
|
||||||
|
onValueChange = { password = it },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp),
|
||||||
|
label = { Text("Password") },
|
||||||
|
visualTransformation = PasswordVisualTransformation(),
|
||||||
|
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Password)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
TextField(
|
||||||
|
value = nbPlayers,
|
||||||
|
onValueChange = { nbPlayers = it },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp),
|
||||||
|
label = { Text("Number of Players") },
|
||||||
|
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Box {
|
||||||
|
val difficultyOptions = listOf("Facile", "Moyen", "Difficile")
|
||||||
|
TextField(
|
||||||
|
value = difficulty,
|
||||||
|
onValueChange = { difficulty = it },
|
||||||
|
readOnly = true,
|
||||||
|
enabled = false,
|
||||||
|
colors = TextFieldDefaults.colors(
|
||||||
|
disabledTextColor = Colors.Black,
|
||||||
|
disabledLabelColor = Colors.Black,
|
||||||
|
disabledTrailingIconColor = Colors.Black,
|
||||||
|
disabledIndicatorColor = Color.Black
|
||||||
|
),
|
||||||
|
modifier = Modifier
|
||||||
|
.clickable(onClick = {
|
||||||
|
expandedDifficulty = !expandedDifficulty
|
||||||
|
})
|
||||||
|
.onGloballyPositioned {
|
||||||
|
sizeDifficulty = it.size
|
||||||
|
}
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp),
|
||||||
|
label = { Text("Difficulté") },
|
||||||
|
trailingIcon = {
|
||||||
|
Icon(
|
||||||
|
Icons.Default.ArrowDropDown,
|
||||||
|
contentDescription = null,
|
||||||
|
Modifier.clickable {
|
||||||
|
expandedDifficulty = !expandedDifficulty
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
DropdownMenu(
|
||||||
|
expanded = expandedDifficulty,
|
||||||
|
onDismissRequest = { expandedDifficulty = false },
|
||||||
|
modifier = Modifier
|
||||||
|
.width(with(LocalDensity.current) { sizeDifficulty.width.toDp() })
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
difficultyOptions.forEach { option ->
|
||||||
|
DropdownMenuItem(
|
||||||
|
text = { Text(option, color = Colors.Black) },
|
||||||
|
onClick = {
|
||||||
|
difficulty = option
|
||||||
|
expandedDifficulty = false
|
||||||
|
keyboardController?.hide()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Box {
|
||||||
|
val chapterOptions = ControllerChapter.getChapters()
|
||||||
|
TextField(
|
||||||
|
value = chapter,
|
||||||
|
onValueChange = { chapter = it },
|
||||||
|
readOnly = true,
|
||||||
|
enabled = false,
|
||||||
|
colors = TextFieldDefaults.colors(
|
||||||
|
disabledTextColor = Colors.Black,
|
||||||
|
disabledLabelColor = Colors.Black,
|
||||||
|
disabledTrailingIconColor = Colors.Black,
|
||||||
|
disabledIndicatorColor = Color.Black
|
||||||
|
),
|
||||||
|
modifier = Modifier
|
||||||
|
.clickable(onClick = {
|
||||||
|
expandedChapter = !expandedChapter
|
||||||
|
})
|
||||||
|
.onGloballyPositioned {
|
||||||
|
sizeChapter = it.size
|
||||||
|
}
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp),
|
||||||
|
label = { Text("Chapitre") },
|
||||||
|
trailingIcon = {
|
||||||
|
Icon(
|
||||||
|
Icons.Default.ArrowDropDown,
|
||||||
|
contentDescription = null,
|
||||||
|
Modifier.clickable {
|
||||||
|
expandedChapter = !expandedChapter
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
DropdownMenu(
|
||||||
|
expanded = expandedChapter,
|
||||||
|
onDismissRequest = { expandedChapter = false },
|
||||||
|
modifier = Modifier
|
||||||
|
.background(Colors.White)
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
|
||||||
|
chapterOptions?.forEach { option ->
|
||||||
|
DropdownMenuItem(
|
||||||
|
text = { Text(option.name, color = Colors.Black) },
|
||||||
|
onClick = {
|
||||||
|
chapter = option.name
|
||||||
|
expandedChapter = false
|
||||||
|
keyboardController?.hide()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
// Handle button click (Create Lobby)
|
||||||
|
// Use the collected data: lobbyName, password, nbPlayers, difficulty, chapter
|
||||||
|
},
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
Text(text = "Create Lobby", color = Colors.White)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in new issue