From cfd0e4e41f0bbf98e61a0aee9d76be4bb8a72e5d Mon Sep 17 00:00:00 2001 From: Chocolaterie <110991127+Chocolaterie@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:10:45 +0100 Subject: [PATCH] AlertDialog --- .../example/tpfilrouge/auth/LoginViewModel.kt | 10 +-- .../tpfilrouge/helpers/AlertDialogHelpers.kt | 75 +++++++++++++++++++ .../helpers/AlertDialogModelData.kt | 4 + .../example/tpfilrouge/ui/theme/AppTheme.kt | 2 + 4 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogHelpers.kt create mode 100644 app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogModelData.kt diff --git a/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt b/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt index f2046a8..5458f49 100644 --- a/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt +++ b/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt @@ -1,7 +1,9 @@ package com.example.tpfilrouge.auth +import androidx.compose.material3.AlertDialog import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.example.tpfilrouge.helpers.AlertDialogHelpers import com.example.tpfilrouge.helpers.AppDialogHelpers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch @@ -28,14 +30,12 @@ class LoginViewModel : ViewModel() { // Si connexion ok if (responseService.code.equals("200")){ - // Je notifie que c'est ok - println("Connexion OK") - // Note: J'appel la fonction que j'envoie en parametre de la fonction - onSuccess(); + //AlertDialogHelpers.get().show(responseService.message, onClose = { onSuccess() }) + AlertDialogHelpers.get().show(responseService.message, onClose = onSuccess) } else{ // Erreur - println("Connexion échouée") + AlertDialogHelpers.get().show(responseService.message, onClose = {}) } } } diff --git a/app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogHelpers.kt b/app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogHelpers.kt new file mode 100644 index 0000000..89a2e8f --- /dev/null +++ b/app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogHelpers.kt @@ -0,0 +1,75 @@ +package com.example.tpfilrouge.helpers + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import kotlinx.coroutines.flow.MutableStateFlow + +class AlertDialogHelpers { + + companion object { + val instance : AlertDialogHelpers by lazy { AlertDialogHelpers() } + + fun get() : AlertDialogHelpers { + return instance; + } + } + + // Sert à savoir en temps réel si il faut afficher ou pas la dialog + var alertDialogModelData = MutableStateFlow(AlertDialogModelData()); + + /** + * Afficher la popup + */ + fun show(message: String, onClose : () -> Unit){ + // Forcer le rafraichissement de l'etat + alertDialogModelData.value = alertDialogModelData.value.copy( + isShow = true, + message = message, + onClose = onClose); + } + + /** + * Fermer la popup + */ + fun closeDialog() { + // Forcer le rafraichissement de l'etat + alertDialogModelData.value = alertDialogModelData.value.copy(isShow = false); + } +} + +@Composable +fun AlertDialog(){ + // Je vais ecouter quand la dialog est true ou false + // Donc quand je dois afficher ou pas + val alertDialogModelDataState by AlertDialogHelpers.get().alertDialogModelData.collectAsState(); + + if (alertDialogModelDataState.isShow) { + Dialog(onDismissRequest = { + // Fermer la popup + AlertDialogHelpers.get().closeDialog(); + // Appeler le callback + alertDialogModelDataState.onClose(); + }){ + Box(modifier = Modifier.background( + color = Color(0xFFFFFFFF), + shape = RoundedCornerShape(30.dp) + ) + .padding(20.dp)) { + Text(text = alertDialogModelDataState.message) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogModelData.kt b/app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogModelData.kt new file mode 100644 index 0000000..8bc7d8f --- /dev/null +++ b/app/src/main/java/com/example/tpfilrouge/helpers/AlertDialogModelData.kt @@ -0,0 +1,4 @@ +package com.example.tpfilrouge.helpers + +data class AlertDialogModelData(var isShow : Boolean = false, var message : String = "", var onClose : () -> Unit = {}) { +} \ No newline at end of file diff --git a/app/src/main/java/com/example/tpfilrouge/ui/theme/AppTheme.kt b/app/src/main/java/com/example/tpfilrouge/ui/theme/AppTheme.kt index 46fe82e..138cc3a 100644 --- a/app/src/main/java/com/example/tpfilrouge/ui/theme/AppTheme.kt +++ b/app/src/main/java/com/example/tpfilrouge/ui/theme/AppTheme.kt @@ -25,6 +25,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import com.example.tpfilrouge.R +import com.example.tpfilrouge.helpers.AlertDialog import com.example.tpfilrouge.helpers.ProgressDialog class AppTheme { @@ -40,6 +41,7 @@ fun EniPage(content: @Composable () -> Unit){ content() } ProgressDialog() + AlertDialog() } } }