feat : hide system bar
continuous-integration/drone/push Build is passing Details

androidCompose
Yvan CALATAYUD 1 year ago
parent 71edb91bf3
commit 5382e21c65

@ -9,7 +9,7 @@ class CreateLobbyActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
CreateLobbyPage() CreateLobbyPage(activity = this@CreateLobbyActivity)
} }
} }
} }

@ -23,7 +23,7 @@ class QuizMultiActivity : ComponentActivity() {
val lobbyId = intent.getIntExtra("lobbyId",-1) val lobbyId = intent.getIntExtra("lobbyId",-1)
val serverName = intent.getStringExtra("serverName") val serverName = intent.getStringExtra("serverName")
QuizMultiScreen(lobbyId, serverName!!) //TODO sus QuizMultiScreen(lobbyId, serverName!!, activity = this@QuizMultiActivity) //TODO sus
} }
} }
} }

@ -37,6 +37,10 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import com.example.mathseduc.CreateLobbyActivity
import com.example.mathseduc.MainActivity import com.example.mathseduc.MainActivity
import com.example.mathseduc.ServerDetailsActivity import com.example.mathseduc.ServerDetailsActivity
import com.example.mathseduc.controllers.ControllerChapter import com.example.mathseduc.controllers.ControllerChapter
@ -46,7 +50,7 @@ import com.example.mathseduc.ui.theme.Colors
import okhttp3.MultipartBody import okhttp3.MultipartBody
@Composable @Composable
fun CreateLobbyPage() { fun CreateLobbyPage(activity: CreateLobbyActivity) {
var lobbyName by remember { mutableStateOf("") } var lobbyName by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") } var password by remember { mutableStateOf("") }
var nbPlayers by remember { mutableStateOf("") } var nbPlayers by remember { mutableStateOf("") }
@ -61,6 +65,14 @@ fun CreateLobbyPage() {
val context = LocalContext.current val context = LocalContext.current
val keyboardController = LocalSoftwareKeyboardController.current val keyboardController = LocalSoftwareKeyboardController.current
val windowInsetsController = remember {
WindowCompat.getInsetsController(activity.window, activity.window.decorView)
}
windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
Column( Column(
modifier = Modifier modifier = Modifier

@ -31,6 +31,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import com.example.mathseduc.ConnexionPlayerActivity import com.example.mathseduc.ConnexionPlayerActivity
import com.example.mathseduc.MainActivity import com.example.mathseduc.MainActivity
import com.example.mathseduc.MultiActivity import com.example.mathseduc.MultiActivity
@ -55,8 +56,9 @@ fun HomePage() {
WindowCompat.getInsetsController(window, window.decorView) WindowCompat.getInsetsController(window, window.decorView)
} }
// Hide the status bar windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsController?.hide(WindowInsetsCompat.Type.statusBars())
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
Column( Column(
modifier = modifier, modifier = modifier,

@ -50,6 +50,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import com.example.mathseduc.CreateLobbyActivity import com.example.mathseduc.CreateLobbyActivity
import com.example.mathseduc.MainActivity import com.example.mathseduc.MainActivity
import com.example.mathseduc.MultiActivity import com.example.mathseduc.MultiActivity
@ -72,7 +73,6 @@ fun MultiPage(activity: MultiActivity) {
var selectedItem by rememberSaveable { mutableStateOf<Lobby?>(null) } var selectedItem by rememberSaveable { mutableStateOf<Lobby?>(null) }
var lobbyList by remember { mutableStateOf<List<Lobby>>(emptyList()) } var lobbyList by remember { mutableStateOf<List<Lobby>>(emptyList()) }
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
var refreshState by remember { mutableStateOf(true) }
val isPortrait = LocalConfiguration.current.orientation == Configuration.ORIENTATION_PORTRAIT val isPortrait = LocalConfiguration.current.orientation == Configuration.ORIENTATION_PORTRAIT
@ -82,8 +82,11 @@ fun MultiPage(activity: MultiActivity) {
WindowCompat.getInsetsController(activity.window, activity.window.decorView) WindowCompat.getInsetsController(activity.window, activity.window.decorView)
} }
// Hide the status bar windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsController?.hide(WindowInsetsCompat.Type.statusBars())
// Hide the status bar and navigation bar ET OU MAXENCE Y'A UNE OPTION POUR FAIRE LES DEUX DIRECTEMENT REGARDE LA DOC FDP !!!
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
// Fonction pour actualiser la liste des lobbies // Fonction pour actualiser la liste des lobbies
suspend fun refreshLobbyList() { suspend fun refreshLobbyList() {
@ -94,14 +97,11 @@ fun MultiPage(activity: MultiActivity) {
Log.e("MainActivity", "Refreshed Lobby List") Log.e("MainActivity", "Refreshed Lobby List")
} }
DisposableEffect(refreshState) { DisposableEffect(Unit) {
val refreshRunnable = { val refreshRunnable = {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
try { try {
while (refreshState) { refreshLobbyList()
delay(5000)
refreshLobbyList()
}
} catch (e: Exception) { } catch (e: Exception) {
Log.e("MainActivity", "Error refreshing lobbies: ${e.message}") Log.e("MainActivity", "Error refreshing lobbies: ${e.message}")
} }
@ -110,8 +110,7 @@ fun MultiPage(activity: MultiActivity) {
refreshRunnable.invoke() refreshRunnable.invoke()
onDispose { onDispose {
Toast.makeText(context, "Au REVOIR UwU", Toast.LENGTH_SHORT).show() Toast.makeText(context, "Au REVOIR", Toast.LENGTH_SHORT).show()
refreshState = false
} }
} }
@ -136,13 +135,13 @@ fun MultiPage(activity: MultiActivity) {
) )
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(start = 16.dp, top = 62.dp, end = 16.dp) .padding(start = 16.dp, top = 62.dp, end = 16.dp)
) { ) {
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(bottom = 10.dp), .padding(bottom = 10.dp),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
Text( Text(
@ -150,19 +149,18 @@ fun MultiPage(activity: MultiActivity) {
color = Colors.White, color = Colors.White,
fontSize = 17.sp, fontSize = 17.sp,
modifier = Modifier modifier = Modifier
.weight(if (isPortrait) 1f else 0.6f) .weight(if (isPortrait) 1f else 0.6f)
.padding(start = 25.dp) .padding(start = 25.dp)
) )
Button( Button(
onClick = { onClick = {
refreshState = false
val intent = Intent(context, CreateLobbyActivity::class.java) val intent = Intent(context, CreateLobbyActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
}, },
shape = RoundedCornerShape(15), shape = RoundedCornerShape(15),
modifier = Modifier modifier = Modifier
.weight(if (isPortrait) 1f else 0.4f) .weight(if (isPortrait) 1f else 0.4f)
.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")
@ -171,14 +169,13 @@ fun MultiPage(activity: MultiActivity) {
LazyColumn( LazyColumn(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.border(2.dp, Color.White,shape = RoundedCornerShape(3)) .border(2.dp, Color.White, shape = RoundedCornerShape(3))
.weight(0.85f), .weight(0.85f),
) { ) {
items(lobbyList) { lobby -> items(lobbyList) { lobby ->
LobbyItem(lobby, selectedItem == lobby) { LobbyItem(lobby, selectedItem == lobby) {
selectedItem = it selectedItem = it
refreshState = false
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
@ -197,10 +194,24 @@ fun MultiPage(activity: MultiActivity) {
} }
} }
} }
Button(
onClick = {
scope.launch {
refreshLobbyList()
}
},
shape = RoundedCornerShape(15),
modifier = Modifier
.fillMaxWidth(),
colors = ButtonDefaults.buttonColors(Colors.Blue)
) {
Text(text = "Actualiser")
}
} }
} }
// Fonction pour créer un Utiliser pour le lobby sélectionné
private suspend fun createUtiliserForLobby(context: Context, lobby: Lobby) { private suspend fun createUtiliserForLobby(context: Context, lobby: Lobby) {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
val formDataBuilder = MultipartBody.Builder().setType(MultipartBody.FORM) val formDataBuilder = MultipartBody.Builder().setType(MultipartBody.FORM)
@ -224,18 +235,18 @@ fun LobbyItem(lobby: Lobby, isSelected: Boolean, onItemClick: (Lobby) -> Unit) {
var showDialog by rememberSaveable { mutableStateOf(false) } var showDialog by rememberSaveable { mutableStateOf(false) }
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(8.dp) .padding(8.dp)
.clickable { .clickable {
if (lobby.password.isNotEmpty()) { if (lobby.password.isNotEmpty()) {
showDialog = true showDialog = true
} else { } else {
onItemClick(lobby) onItemClick(lobby)
}
} }
.clip(RoundedCornerShape(8.dp)) }
.background(if (isSelected) Colors.Orange else Colors.Grey) .clip(RoundedCornerShape(8.dp))
.padding(16.dp) .background(if (isSelected) Colors.Orange else Colors.Grey)
.padding(16.dp)
) { ) {
Text( Text(
text = lobby.name, text = lobby.name,

@ -29,7 +29,11 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
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.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import com.example.mathseduc.MainActivity import com.example.mathseduc.MainActivity
import com.example.mathseduc.QuizMultiActivity
import com.example.mathseduc.ServerDetailsActivity import com.example.mathseduc.ServerDetailsActivity
import com.example.mathseduc.controllers.ControllerLobby import com.example.mathseduc.controllers.ControllerLobby
import com.example.mathseduc.controllers.ControllerQuestion import com.example.mathseduc.controllers.ControllerQuestion
@ -39,7 +43,7 @@ import okhttp3.MultipartBody
@Composable @Composable
fun QuizMultiScreen(lobbyId: Int,serverName: String) { fun QuizMultiScreen(lobbyId: Int,serverName: String,activity: QuizMultiActivity) {
val context = LocalContext.current val context = LocalContext.current
var chronoValue by remember { mutableStateOf(0.0f) } var chronoValue by remember { mutableStateOf(0.0f) }
@ -50,6 +54,14 @@ fun QuizMultiScreen(lobbyId: Int,serverName: String) {
val progressBarTotalValues by remember { mutableStateOf(Array(listPlayer.size) { 0.0f }) } val progressBarTotalValues by remember { mutableStateOf(Array(listPlayer.size) { 0.0f }) }
var quizFinished by remember { mutableStateOf(false) } // Variable pour indiquer si le quiz est terminé ou non var quizFinished by remember { mutableStateOf(false) } // Variable pour indiquer si le quiz est terminé ou non
val windowInsetsController = remember {
WindowCompat.getInsetsController(activity.window, activity.window.decorView)
}
windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
val timer = ticker(delayMillis = 100) // Update every 100 milliseconds val timer = ticker(delayMillis = 100) // Update every 100 milliseconds
for (tick in timer) { for (tick in timer) {

Loading…
Cancel
Save