From f1cdc05ebb26709ac8ecc1346959bf623ac08e02 Mon Sep 17 00:00:00 2001 From: "renaud.beuret" Date: Tue, 2 Apr 2024 23:17:34 +0200 Subject: [PATCH] =?UTF-8?q?[FIX]=20UiStates=20plus=20modifiables=20=C3=A0?= =?UTF-8?q?=20l'exterieur=20des=20VM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewModels/KahootViewModel.kt | 9 ++-- .../sciencequest/viewModels/LoginViewModel.kt | 8 ++-- .../sciencequest/viewModels/PenduViewModel.kt | 47 ++++++++++--------- 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt index 0e534f0..12bbba7 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/KahootViewModel.kt @@ -10,12 +10,15 @@ import fr.iut.sciencequest.model.repositories.question.IQuestionRepository import fr.iut.sciencequest.model.repositories.question.QuestionAPIRepository import fr.iut.sciencequest.viewModels.uixStates.KahootUIState import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch class KahootViewModel( val questionRepo: IQuestionRepository ): ViewModel() { - var uiState = MutableStateFlow(KahootUIState()) + private val _uiState = MutableStateFlow(KahootUIState()) + val uiState = _uiState.asStateFlow() private val handler = Handler(Looper.getMainLooper()) @@ -28,7 +31,7 @@ class KahootViewModel( handler.postDelayed( { Log.d("KahootViewModel", "J'actualise les questions") - uiState.value = KahootUIState( + _uiState.value = KahootUIState( question, duréePartie = uiState.value.duréePartie, nbPoints = uiState.value.nbPoints, @@ -50,7 +53,7 @@ class KahootViewModel( return } val nbPoints: Int = (10_000 - tpsReponse).toInt() - uiState.value = KahootUIState(uiState.value.question, + _uiState.value = KahootUIState(uiState.value.question, duréePartie = uiState.value.duréePartie, nbPoints = uiState.value.nbPoints + nbPoints, reponseChoisie = true) diff --git a/android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt index 1b4d704..7ce33bd 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/viewModels/LoginViewModel.kt @@ -3,15 +3,17 @@ package fr.iut.sciencequest.viewModels import androidx.lifecycle.ViewModel import fr.iut.sciencequest.viewModels.uiStates.LoginUIState import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow class LoginViewModel: ViewModel() { - var uiState = MutableStateFlow(LoginUIState()) + private val _uiState = MutableStateFlow(LoginUIState()) + val uiState = _uiState.asStateFlow() fun setPseudo(pseudo: String) { - uiState.value = LoginUIState(pseudo, uiState.value.mdp) + _uiState.value = LoginUIState(pseudo, uiState.value.mdp) } fun setMdp(mdp: String) { - uiState.value = LoginUIState(uiState.value.pseudo, mdp) + _uiState.value = LoginUIState(uiState.value.pseudo, mdp) } } \ No newline at end of file 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 2edceef..30c2531 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 @@ -1,6 +1,5 @@ package fr.iut.sciencequest.viewModels -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope @@ -8,12 +7,14 @@ import fr.iut.sciencequest.viewModels.uiStates.PenduUIState import fr.iut.sciencequest.model.repositories.scientifique.IScientifiqueRepository import fr.iut.sciencequest.model.repositories.scientifique.ScientifiqueAPIRepository import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch class PenduViewModel( val scientifiqueRepo: IScientifiqueRepository ) : ViewModel() { - var uiState = MutableStateFlow(PenduUIState()) + private val _uiState = MutableStateFlow(PenduUIState()) + val uiState = _uiState.asStateFlow() fun InitPartie() { viewModelScope.launch { @@ -27,7 +28,7 @@ class PenduViewModel( } else { '_' } - uiState.value = PenduUIState( + _uiState.value = PenduUIState( isActionGood = true, motATrouver = nomComplet, motATrou = motATrou @@ -40,40 +41,40 @@ class PenduViewModel( // motAct : état actuel du mot trouvé par l'utilisateur fun PlayAction(lettre: Char) { val lowerCaseLetter = lettre.lowercaseChar() - if (lettre == ' ' || uiState.value.lettresUtilises.contains(lowerCaseLetter)) { - uiState.value = PenduUIState(false, + if (lettre == ' ' || _uiState.value.lettresUtilises.contains(lowerCaseLetter)) { + _uiState.value = PenduUIState(false, false, - uiState.value.nbViesRestantes, - uiState.value.motATrouver, - uiState.value.motATrou, - uiState.value.lettresUtilises + _uiState.value.nbViesRestantes, + _uiState.value.motATrouver, + _uiState.value.motATrou, + _uiState.value.lettresUtilises ) return - } else if (uiState.value.motATrouver.lowercase().contains(lowerCaseLetter)) { - var nvMotATrou = uiState.value.motATrou - for (index in uiState.value.motATrouver.indices) { - val letterToCheck = uiState.value.motATrouver[index] + } else if (_uiState.value.motATrouver.lowercase().contains(lowerCaseLetter)) { + var nvMotATrou = _uiState.value.motATrou + for (index in _uiState.value.motATrouver.indices) { + val letterToCheck = _uiState.value.motATrouver[index] if (letterToCheck.lowercaseChar() == lowerCaseLetter) { nvMotATrou = nvMotATrou.replaceRange(index,index + 1, letterToCheck.toString()) } } - val isWon = nvMotATrou == uiState.value.motATrouver + val isWon = nvMotATrou == _uiState.value.motATrouver - uiState.value = PenduUIState(isWon, + _uiState.value = PenduUIState(isWon, true, - uiState.value.nbViesRestantes, - uiState.value.motATrouver, + _uiState.value.nbViesRestantes, + _uiState.value.motATrouver, nvMotATrou, - uiState.value.lettresUtilises.plus(lowerCaseLetter) + _uiState.value.lettresUtilises.plus(lowerCaseLetter) ) } else { - uiState.value = PenduUIState(false, + _uiState.value = PenduUIState(false, true, - uiState.value.nbViesRestantes - 1, - uiState.value.motATrouver, - uiState.value.motATrou, - uiState.value.lettresUtilises.plus(lowerCaseLetter) + _uiState.value.nbViesRestantes - 1, + _uiState.value.motATrouver, + _uiState.value.motATrou, + _uiState.value.lettresUtilises.plus(lowerCaseLetter) ) } }