From 5bbc5537a95b5826e67aeff5c4b832b566dc7b55 Mon Sep 17 00:00:00 2001 From: libreton Date: Thu, 28 Mar 2024 11:52:56 +0100 Subject: [PATCH 01/12] fix pendu --- .../sciencequest/ViewModels/PenduViewModel.kt | 9 ++++++--- .../fr/iut/sciencequest/view/games/Pendu.kt | 19 +++++++++++++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt index d5b93d6..d574d60 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt @@ -21,18 +21,21 @@ class PenduViewModel : ViewModel() { uiState.value.motATrou ) } - if (uiState.value.motATrouver.contains(lettre)) { + if (uiState.value.motATrouver.lowercase().contains(lettre.lowercase())) { Log.d("PenduViewModel","L'utilisateur a trouvé une lettre") var nvMotATrou = uiState.value.motATrou for (index in uiState.value.motATrouver.indices) { - if (uiState.value.motATrouver[index] == lettre) { - nvMotATrou = nvMotATrou.replaceRange(index,index + 1, lettre.toString()) + if (uiState.value.motATrouver[index].lowercase() == lettre.lowercase()) { + nvMotATrou = nvMotATrou.replaceRange(index,index + 1, + uiState.value.motATrouver[index].toString() + ) } } var isWon = false if (nvMotATrou.equals(uiState.value.motATrouver)) { isWon = true } + uiState.value = PenduUIState(isWon, true, uiState.value.nbViesRestantes, diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index fed615e..20ba2ae 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -2,7 +2,9 @@ package fr.iut.sciencequest.view.games import android.content.Context import android.widget.Toast +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text @@ -14,6 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R import fr.iut.sciencequest.ViewModels.PenduViewModel @@ -28,20 +31,28 @@ fun PenduScreen(viewModel: PenduViewModel = viewModel(), Column(modifier = Modifier.fillMaxWidth()) { TopBar(goToAccount, goToHome, stringResource(id = R.string.pendu)) //Text(text = stringResource(id = R.string.pendu), modifier = Modifier.padding(top=10.dp)) - Column(modifier = Modifier.align(Alignment.CenterHorizontally)) + Column(modifier = Modifier + .align(Alignment.CenterHorizontally) + .fillMaxWidth()) { - Text(text = state.value.motATrou) + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { + Text(text = state.value.motATrou, fontSize = 30.sp) + } TextField(value = "", onValueChange = { if (it.isNotEmpty()) { viewModel.PlayAction(it[0]) if ((!state.value.isWon) && (state.value.nbViesRestantes == 0)) { goToHome() - } else { + } else if (state.value.isWon) { Toast.makeText(context,"Vous avez gagné !",Toast.LENGTH_LONG).show() + goToHome() } }}, - modifier = Modifier.padding(20.dp)) + modifier = Modifier.padding(20.dp).fillMaxWidth()) + Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { + Text(text = state.value.nbViesRestantes.toString()) + } } } } From fe4e875c93eead82b63ec01fb22b6d0aaeb00a9b Mon Sep 17 00:00:00 2001 From: libreton Date: Tue, 2 Apr 2024 15:01:38 +0200 Subject: [PATCH 02/12] fix --- .../fr/iut/sciencequest/navigation/NavHost.kt | 13 ++++--- .../fr/iut/sciencequest/view/games/Kahoot.kt | 16 +++++--- .../fr/iut/sciencequest/view/games/Pendu.kt | 37 ++++++++++++++----- 3 files changed, 47 insertions(+), 19 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index 6e266a8..dc66149 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -21,7 +21,7 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen @Composable -fun NavHost(kahotVM: KahootViewModel = viewModel()) { +fun NavHost(kahootVM: KahootViewModel = viewModel()) { val navController = rememberNavController() NavHost( modifier = Modifier.fillMaxSize(), @@ -40,7 +40,7 @@ fun NavHost(kahotVM: KahootViewModel = viewModel()) { navController.navigate("pendu") }, goToKahoot = { - kahotVM.lancerPartie() + kahootVM.lancerPartie() navController.navigate("kahoot") } ) @@ -80,17 +80,20 @@ fun NavHost(kahotVM: KahootViewModel = viewModel()) { } composable(route= "kahoot"){ - KahootScreen( goToAccount = { + KahootScreen( + goToAccount = { navController.navigate("account") }, goToHome = { navController.navigate("home") }, - viewModel = kahotVM) + viewModel = kahootVM + ) } composable(route = "listeScientifiques") { - scientifiqueListeScreen(goToAccount = { + scientifiqueListeScreen( + goToAccount = { navController.navigate("account") }, goToHome = { diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt index 8632270..3ab141e 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Kahoot.kt @@ -4,6 +4,7 @@ import android.widget.Toast import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid @@ -18,6 +19,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R import fr.iut.sciencequest.ViewModels.KahootViewModel @@ -25,7 +27,6 @@ import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.view.TopBar -import java.util.Timer @Composable fun KahootScreen(viewModel: KahootViewModel = viewModel(), @@ -34,6 +35,7 @@ fun KahootScreen(viewModel: KahootViewModel = viewModel(), val state = viewModel.uiState.collectAsState() Column(modifier = Modifier.fillMaxWidth()) { TopBar(goToAccount, goToHome, stringResource(id = R.string.kahoot)) + KahootPlayer(state.value.question) { viewModel.ajouterPoints(it) } @@ -57,13 +59,17 @@ fun KahootPlayerPreview(){ @Composable fun KahootPlayer(question: QuestionWithSimpleResponseDTO, - sendReponse: (Long) -> Unit){ + sendResponse: (Long) -> Unit){ val context = LocalContext.current; val currTime = System.currentTimeMillis() - Column (horizontalAlignment = Alignment.CenterHorizontally){ + Column ( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceEvenly, + modifier = Modifier.fillMaxHeight() + ) { KahootQuestion(question = question.question) KahootReponses(reponses = question.reponses) { - sendReponse(currTime - System.currentTimeMillis()) + sendResponse(currTime - System.currentTimeMillis()) Toast.makeText(context, it.reponse, Toast.LENGTH_SHORT).show() } } @@ -88,5 +94,5 @@ fun KahootReponses(reponses : List, action: (ReponseSimpleDTO) @Composable fun KahootQuestion(question: String){ - Text(question, textAlign = TextAlign.Center) + Text(question, textAlign = TextAlign.Center, fontSize = 20.sp) } \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index 0ead09d..30a3618 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -2,10 +2,16 @@ package fr.iut.sciencequest.view.games import android.content.Context import android.widget.Toast +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.material3.TextField @@ -15,8 +21,11 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import fr.iut.sciencequest.R import fr.iut.sciencequest.ViewModels.PenduViewModel @@ -25,23 +34,33 @@ import fr.iut.sciencequest.view.TopBar @Composable fun PenduScreen(viewModel: PenduViewModel = viewModel(), goToAccount: () -> Unit, - goToHome: () -> Unit) { + goToHome: () -> Unit +) { val state = viewModel.uiState.collectAsState() val context = LocalContext.current; Column(modifier = Modifier.fillMaxWidth()) { TopBar(goToAccount, goToHome, stringResource(id = R.string.pendu)) //Text(text = stringResource(id = R.string.pendu), modifier = Modifier.padding(top=10.dp)) - Column(modifier = Modifier.align(Alignment.CenterHorizontally)) - { - Text(text = state.value.motATrou) - TextField(value = "", - onValueChange = { onLetterEntered(it, viewModel, context, goToHome) }, - modifier = Modifier.padding(20.dp)) - afficherVies(state.value.nbViesRestantes) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceAround, + modifier = Modifier.fillMaxSize() + ) { + Text(text = state.value.motATrou, fontSize = 20.sp) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween, + ) { + TextField(value = "", + onValueChange = { onLetterEntered(it, viewModel, context, goToHome) }, + modifier = Modifier.padding(20.dp), + ) + afficherVies(state.value.nbViesRestantes) + Text("Lettres utilisées: " + state.value.lettresUtilises) + } Button(onClick = { viewModel.InitPartie() }) { Text(text = stringResource(id = R.string.reset_game)) } - Text("Lettres utilisées: " + state.value.lettresUtilises) } } } From 80a1c3a3019173832acdb166c41cec4cfb3b8846 Mon Sep 17 00:00:00 2001 From: tobiard Date: Tue, 2 Apr 2024 15:03:46 +0200 Subject: [PATCH 03/12] =?UTF-8?q?Ajout=20de=20la=20page=20Qui-est-ce=20+?= =?UTF-8?q?=20description=20de=20l'id=C3=A9e=20pour=20la=20suite=20du=20je?= =?UTF-8?q?u.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/.idea/appInsightsSettings.xml | 6 ++ android/.idea/deploymentTargetDropDown.xml | 18 +--- .../fr/iut/sciencequest/navigation/NavHost.kt | 13 +++ .../fr/iut/sciencequest/view/HomeScreen.kt | 11 ++- .../fr/iut/sciencequest/view/games/Qui.kt | 92 +++++++++++++++++++ 5 files changed, 118 insertions(+), 22 deletions(-) create mode 100644 android/.idea/appInsightsSettings.xml create mode 100644 android/app/src/main/java/fr/iut/sciencequest/view/games/Qui.kt diff --git a/android/.idea/appInsightsSettings.xml b/android/.idea/appInsightsSettings.xml new file mode 100644 index 0000000..6bbe2ae --- /dev/null +++ b/android/.idea/appInsightsSettings.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/android/.idea/deploymentTargetDropDown.xml b/android/.idea/deploymentTargetDropDown.xml index 3d7ae4a..0c0c338 100644 --- a/android/.idea/deploymentTargetDropDown.xml +++ b/android/.idea/deploymentTargetDropDown.xml @@ -2,24 +2,8 @@ - - - - - - - - - - - - - - - - - + diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index 6e266a8..6773ad6 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -17,6 +17,7 @@ import fr.iut.sciencequest.view.HomeScreen import fr.iut.sciencequest.view.LoginScreen import fr.iut.sciencequest.view.games.KahootScreen import fr.iut.sciencequest.view.games.PenduScreen +import fr.iut.sciencequest.view.games.QuiScreen import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen @@ -42,6 +43,9 @@ fun NavHost(kahotVM: KahootViewModel = viewModel()) { goToKahoot = { kahotVM.lancerPartie() navController.navigate("kahoot") + }, + goToQui = { + navController.navigate("qui") } ) } @@ -89,6 +93,15 @@ fun NavHost(kahotVM: KahootViewModel = viewModel()) { viewModel = kahotVM) } + composable(route= "qui"){ + QuiScreen(goToAccount = { + navController.navigate("account") + }, + goToHome = { + navController.navigate("home") + }) + } + composable(route = "listeScientifiques") { scientifiqueListeScreen(goToAccount = { navController.navigate("account") diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt b/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt index b4555d0..b816e43 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/HomeScreen.kt @@ -21,21 +21,22 @@ import fr.iut.sciencequest.ViewModels.KahootViewModel fun HomeScreen(goToHome: () -> Unit, goToAccount: () -> Unit, goToPendu: () -> Unit, - goToKahoot: () -> Unit) { + goToKahoot: () -> Unit, + goToQui: () -> Unit) { Column (modifier = Modifier.fillMaxWidth()){ TopBar(goToAccount, goToHome) - MainContent(goToPendu, goToKahoot) + MainContent(goToPendu, goToKahoot, goToQui) } } @Preview @Composable fun HomeScreenPreview() { - HomeScreen({},{},{}, {}) + HomeScreen({},{},{},{},{}) } @Composable -fun MainContent(goToPendu: () -> Unit, goToKahoot: () -> Unit) { +fun MainContent(goToPendu: () -> Unit, goToKahoot: () -> Unit, goToQui: () -> Unit) { val context = LocalContext.current; val comingSoon = Toast.makeText(context, "Coming soon", Toast.LENGTH_SHORT); @@ -47,7 +48,7 @@ fun MainContent(goToPendu: () -> Unit, goToKahoot: () -> Unit) { Button(onClick = goToKahoot, Modifier.fillMaxWidth()) { Text(text = "Kahoot", fontSize = 13.sp) } - Button(onClick = { comingSoon.show() }, Modifier.fillMaxWidth()) { + Button(onClick = goToQui, Modifier.fillMaxWidth()) { Text(text = "Qui est ce ?", fontSize = 13.sp) } } diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Qui.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Qui.kt new file mode 100644 index 0000000..61b749b --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Qui.kt @@ -0,0 +1,92 @@ +package fr.iut.sciencequest.view.games + +import android.widget.Toast +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import fr.iut.sciencequest.R +import fr.iut.sciencequest.ViewModels.KahootViewModel +import fr.iut.sciencequest.model.dto.question.QuestionWithSimpleResponseDTO +import fr.iut.sciencequest.model.dto.reponse.ReponseSimpleDTO +import fr.iut.sciencequest.stub.StubQuestionWithReponses +import fr.iut.sciencequest.view.TopBar +import java.util.Timer + +@Composable +fun QuiScreen(viewModel: KahootViewModel = viewModel(), + goToAccount: () -> Unit, + goToHome: () -> Unit) { + val state = viewModel.uiState.collectAsState() + Column(modifier = Modifier.fillMaxWidth()) { + TopBar(goToAccount, goToHome, stringResource(id = R.string.kahoot)) + QuiPlayer(state.value.question) { + viewModel.ajouterPoints(it) + } + } +} + +@Preview +@Composable +fun QuiScreenPreview(){ + QuiScreen(goToAccount = {}, goToHome = {}) +} + + +@Preview +@Composable +fun QuiPlayerPreview(){ + val i = 0 + QuiPlayer(question = StubQuestionWithReponses) {} +} + + +@Composable +fun QuiPlayer(question: QuestionWithSimpleResponseDTO, + sendReponse: (Long) -> Unit){ + val context = LocalContext.current; + val currTime = System.currentTimeMillis() + Column (horizontalAlignment = Alignment.CenterHorizontally){ + QuiQuestion(question = question.question) + QuiReponses(reponses = question.reponses) { + sendReponse(currTime - System.currentTimeMillis()) + Toast.makeText(context, it.reponse, Toast.LENGTH_SHORT).show() + } + } +} + + +@Composable +fun QuiReponses(reponses : List, action: (ReponseSimpleDTO)->Unit) { + LazyVerticalGrid(columns = GridCells.Fixed(2), + contentPadding = PaddingValues(12.dp), + verticalArrangement = Arrangement.spacedBy(10.dp), + horizontalArrangement = Arrangement.spacedBy(10.dp)) { + reponses.forEach { + item() { + Button(onClick = {action(it)}){ + Text(it.reponse) + } + } + } + } +} + +@Composable +fun QuiQuestion(question: String){ + Text(question, textAlign = TextAlign.Center) +} \ No newline at end of file From 36eecd7e8e7cdf6aade10fa5515ed5d8a63d263f Mon Sep 17 00:00:00 2001 From: tobiard Date: Tue, 2 Apr 2024 15:06:09 +0200 Subject: [PATCH 04/12] Ajout qui-est-ce + idee --- .idea/modules.xml | 8 ++++++++ quiestce | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 .idea/modules.xml create mode 100644 quiestce diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c5871cc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/quiestce b/quiestce new file mode 100644 index 0000000..7633d57 --- /dev/null +++ b/quiestce @@ -0,0 +1,8 @@ +Description dérive Qui-est-ce: + +- Image flou du scientifique à trouver +- 1 seul indice au début en dessous de la photo exemple: femme - 1967 +- 4 réponse possible comme kahoot, 1 seul essai +- maximum de point si la personne trouve du premier coup +- possibilité d'avoir + d'indice / diminution du flou mais gagne moins de points au fur et à mesure +- Plus simple à implémenter qu'un réel qui-est-ce. From 6b7ec29f308af55a4f461018d89f62d0bb9c5c84 Mon Sep 17 00:00:00 2001 From: libreton Date: Tue, 2 Apr 2024 15:19:37 +0200 Subject: [PATCH 05/12] fix pendu --- .../src/main/java/fr/iut/sciencequest/navigation/NavHost.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index dc66149..360bac1 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -21,7 +21,7 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen @Composable -fun NavHost(kahootVM: KahootViewModel = viewModel()) { +fun NavHost(kahootVM: KahootViewModel = viewModel(), penduVM: PenduViewModel = viewModel()) { val navController = rememberNavController() NavHost( modifier = Modifier.fillMaxSize(), @@ -37,6 +37,7 @@ fun NavHost(kahootVM: KahootViewModel = viewModel()) { navController.navigate("home") }, goToPendu = { + penduVM.InitPartie() navController.navigate("pendu") }, goToKahoot = { @@ -70,6 +71,7 @@ fun NavHost(kahootVM: KahootViewModel = viewModel()) { composable(route = "pendu") { PenduScreen( + viewModel = penduVM, goToAccount = { navController.navigate("account") }, From 27d475c107d14e9e95c7abd3365e31addfa861a0 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:13:35 +0200 Subject: [PATCH 06/12] Ajout DTO ScientifiqueListInfos --- .../model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt b/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt new file mode 100644 index 0000000..5d3e594 --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt @@ -0,0 +1,4 @@ +package fr.iut.sciencequest.model.dto.ScientifiqueDTOs + +class ScientifiqueListInfosDTO { +} \ No newline at end of file From 18dfba47ecbacdf688c8fc009decc79bfa7bac7f Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:14:48 +0200 Subject: [PATCH 07/12] =?UTF-8?q?Modification=20ViewModel=20pour=20connexi?= =?UTF-8?q?on=20=C3=A0=20l'API=20complet,=20avec=20un=20random=20sur=20le?= =?UTF-8?q?=20nombre=20total=20de=20scientifiques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sciencequest/ViewModels/PenduViewModel.kt | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt index a13413b..57e9985 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt @@ -5,8 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import fr.iut.sciencequest.ViewModels.UiStates.PenduUIState import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiqueById -import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiques -import fr.iut.sciencequest.model.dto.extensions.ToModel +import fr.iut.sciencequest.model.buisness.Scientifique.fetchScientifiquesInfos import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch @@ -16,23 +15,27 @@ class PenduViewModel : ViewModel() { fun InitPartie() { Log.d("PenduViewModel","Un utilisateur initialise une partie") viewModelScope.launch { - fetchScientifiqueById(1).collect { - val nomComplet = it.prenom + " " + it.nom - Log.d("ViewModelPendu",nomComplet) - var motATrou = "" - for (chr in nomComplet) { - motATrou += if (chr == ' ') { - ' ' - } else { - '_' + fetchScientifiquesInfos().collect { scientifiquesInfos -> + Log.e("PenduViewModel",scientifiquesInfos.nbScientfiques.toString()) + fetchScientifiqueById((1..scientifiquesInfos.nbScientfiques).random()).collect { + val nomComplet = it.prenom + " " + it.nom + Log.d("ViewModelPendu",nomComplet) + var motATrou = "" + for (chr in nomComplet) { + motATrou += if (chr == ' ') { + ' ' + } else { + '_' + } } + uiState.value = PenduUIState( + isActionGood = true, + motATrouver = nomComplet, + motATrou = motATrou + ) } - uiState.value = PenduUIState( - isActionGood = true, - motATrouver = nomComplet, - motATrou = motATrou - ) } + } } @@ -60,10 +63,9 @@ class PenduViewModel : ViewModel() { nvMotATrou = nvMotATrou.replaceRange(index,index + 1, letterToCheck.toString()) } } - var isWon = false - if (nvMotATrou.equals(uiState.value.motATrouver)) { - isWon = true - } + + val isWon = nvMotATrou == uiState.value.motATrouver + uiState.value = PenduUIState(isWon, true, uiState.value.nbViesRestantes, From 94a1c3f84b94054fed1fd9b3fa37288a55c167f4 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:15:23 +0200 Subject: [PATCH 08/12] =?UTF-8?q?Ajout=20route=20scientifiques=20sans=20pa?= =?UTF-8?q?geId=20pour=20r=C3=A9cup=C3=A8rer=20les=20informations=20du=20b?= =?UTF-8?q?loc=20'page'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scientifique/ScientifiqueRequestService.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt index b3a5342..396ae00 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiqueRequestService.kt @@ -1,13 +1,8 @@ package fr.iut.sciencequest.model.buisness.Scientifique -import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueDTO import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueListDTO -import kotlinx.serialization.json.Json -import okhttp3.MediaType -import okhttp3.OkHttpClient -import retrofit2.Call -import retrofit2.Retrofit +import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueListInfosDTO import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query @@ -16,6 +11,9 @@ interface ScientifiqueRequestService { @GET("scientifiques?page") suspend fun getScientifiques(@Query("page") index: Int): ScientifiqueListDTO + @GET("scientifiques") + suspend fun getScientifiquesListInfos(): ScientifiqueListInfosDTO + @GET("scientifiques/{id}") suspend fun getScientifique(@Path("id") id: Int): ScientifiqueDTO } \ No newline at end of file From 4f5fbb321dfdf22338c4e6abc1363831ae33e6ca Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:15:52 +0200 Subject: [PATCH 09/12] Ajout fetchScientifiquesInfos qui retourne le bloc page --- .../Scientifique/ScientifiquesRequestor.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt index 519a8ed..8269e18 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/Scientifique/ScientifiquesRequestor.kt @@ -2,14 +2,8 @@ package fr.iut.sciencequest.model.buisness.Scientifique import android.util.Log import fr.iut.sciencequest.model.buisness.createRequestService -import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueDTO -import fr.iut.sciencequest.model.dto.ScientifiqueDTOs.ScientifiqueListDTO import kotlinx.coroutines.flow.flow -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response import retrofit2.create -import java.lang.IllegalArgumentException suspend fun fetchScientifiqueById(id: Int) = flow { val serviceClient = createRequestService().create() @@ -29,4 +23,14 @@ fun fetchScientifiques(index: Int) = flow { } catch (e: Exception) { Log.e("Requete API",e.message.toString()) } +} + +fun fetchScientifiquesInfos() = flow { + val serviceClient = createRequestService().create() + try { + val response = serviceClient.getScientifiquesListInfos().page + emit(response) + } catch (e: Exception) { + Log.e("Requete API",e.message.toString()) + } } \ No newline at end of file From b25dc03a36aea23497427150bffd8f2769216942 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:16:57 +0200 Subject: [PATCH 10/12] Modification URL API (passage vers le conteneur CodeFirst, :rotating_light: UTILISEZ EMULATEUR RECENT, SINON CERTIFICATS PAS A JOUR) --- .../java/fr/iut/sciencequest/model/buisness/ServiceUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/ServiceUtils.kt b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/ServiceUtils.kt index 9029826..3742b19 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/buisness/ServiceUtils.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/buisness/ServiceUtils.kt @@ -6,7 +6,7 @@ import okhttp3.MediaType import okhttp3.OkHttpClient import retrofit2.Retrofit -const val API_BASE_URL = "https://sae-java.alix-jdlm.fr/api/v1/" +const val API_BASE_URL = "https://codefirst.iut.uca.fr/containers/tombiard-api/api/v1/" val httpClient = OkHttpClient() From 96b9e10b86b5de1e4f9e76aa4cb9a68def6b1397 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:17:30 +0200 Subject: [PATCH 11/12] Ajout code DTO --- .../ScientifiqueListInfosDTO.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt b/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt index 5d3e594..c6e5a82 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/model/dto/ScientifiqueDTOs/ScientifiqueListInfosDTO.kt @@ -1,4 +1,21 @@ package fr.iut.sciencequest.model.dto.ScientifiqueDTOs -class ScientifiqueListInfosDTO { -} \ No newline at end of file +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +open class ScientifiqueListInfosPageDTO( + @SerialName("totalElements") + val nbScientfiques: Int, + + @SerialName("totalPages") + val nbPages: Int, + + @SerialName("size") + val nbScientifiquesParPage: Int +) + +@Serializable +open class ScientifiqueListInfosDTO ( + val page: ScientifiqueListInfosPageDTO +) \ No newline at end of file From 0134d8f861b9bfced4c0f0b63f98202b309a21bc Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Tue, 2 Apr 2024 17:18:19 +0200 Subject: [PATCH 12/12] =?UTF-8?q?Modification=20comportement=20si=20gagn?= =?UTF-8?q?=C3=A9/perdu,=20gel=20de=20l'input=20et=20affichage=20gagn?= =?UTF-8?q?=C3=A9/perdu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fr/iut/sciencequest/view/games/Pendu.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index 30a3618..7922a2b 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -2,16 +2,12 @@ package fr.iut.sciencequest.view.games import android.content.Context import android.widget.Toast -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.text.KeyboardActions import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.material3.TextField @@ -21,9 +17,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel @@ -54,9 +48,16 @@ fun PenduScreen(viewModel: PenduViewModel = viewModel(), TextField(value = "", onValueChange = { onLetterEntered(it, viewModel, context, goToHome) }, modifier = Modifier.padding(20.dp), + enabled = !state.value.isWon && state.value.nbViesRestantes > 0, + placeholder = { Text(if(!state.value.isWon) "Entrez une lettre" else "Cliquez sur Nouvelle Partie") } ) afficherVies(state.value.nbViesRestantes) Text("Lettres utilisées: " + state.value.lettresUtilises) + if(state.value.isWon) { + Text(modifier = Modifier.padding(top=10.dp), text = "Vous avez gagné !") + } else if (state.value.nbViesRestantes == 0) { + Text(modifier = Modifier.padding(top=10.dp), text = "Vous avez perdu :(") + } } Button(onClick = { viewModel.InitPartie() }) { Text(text = stringResource(id = R.string.reset_game)) @@ -73,7 +74,7 @@ fun onLetterEntered(entered: String, if (entered.isNotEmpty()) { vm.PlayAction(entered[0]) if ((!state.value.isWon) && (state.value.nbViesRestantes == 0)) { - goToHome() + Toast.makeText(context,"Vous avez perdu :(",Toast.LENGTH_LONG).show() } else if (state.value.isWon) { Toast.makeText(context,"Vous avez gagné !",Toast.LENGTH_LONG).show() }