diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 962a776..1a15121 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,11 +21,6 @@
android:exported="true"
android:label="@string/title_activity_list_article"
android:theme="@style/Theme.TpFilRouge">
-
-
-
-
-
+
+
+
+
+
diff --git a/app/src/main/java/com/example/tpfilrouge/auth/AuthService.kt b/app/src/main/java/com/example/tpfilrouge/auth/AuthService.kt
new file mode 100644
index 0000000..1775952
--- /dev/null
+++ b/app/src/main/java/com/example/tpfilrouge/auth/AuthService.kt
@@ -0,0 +1,19 @@
+package com.example.tpfilrouge.auth
+
+import com.example.tpfilrouge.api.RetrofitTools.Companion.retrofit
+import com.example.tpfilrouge.api.ServiceResponseDTO
+import com.example.tpfilrouge.article.Article
+import retrofit2.http.Body
+import retrofit2.http.GET
+import retrofit2.http.POST
+
+interface AuthService {
+
+ @POST("login")
+ suspend fun login(@Body loginRequestDTO: LoginRequestDTO) : ServiceResponseDTO
+
+ object AuthApi {
+ val authService : AuthService by lazy { retrofit.create(AuthService::class.java) }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/auth/LoginActivity.kt b/app/src/main/java/com/example/tpfilrouge/auth/LoginActivity.kt
index 2b5ec17..25c4854 100644
--- a/app/src/main/java/com/example/tpfilrouge/auth/LoginActivity.kt
+++ b/app/src/main/java/com/example/tpfilrouge/auth/LoginActivity.kt
@@ -11,6 +11,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
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
@@ -22,22 +24,29 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.tpfilrouge.R
+import com.example.tpfilrouge.article.ListArticleActivity
import com.example.tpfilrouge.ui.theme.EniButton
import com.example.tpfilrouge.ui.theme.EniPage
import com.example.tpfilrouge.ui.theme.EniTextField
class LoginActivity : ComponentActivity() {
+
+ var loginViewModel = LoginViewModel();
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
- LoginActivityPage()
+ LoginActivityPage(loginViewModel);
}
}
}
@Composable
-fun LoginActivityPage() {
+fun LoginActivityPage(loginViewModel: LoginViewModel) {
+ // Ecouter les changements de l'email et mot de passe saisies
+ val emailField by loginViewModel.email.collectAsState()
+ val passwordField by loginViewModel.password.collectAsState()
val context = LocalContext.current;
@@ -57,9 +66,14 @@ fun LoginActivityPage() {
textAlign = TextAlign.Center,
style = TextStyle(color = Color(0xCCFFFFFF))
)
- EniTextField(stringResource(R.string.email))
- EniTextField(stringResource(R.string.password))
- EniButton(stringResource(R.string.connection), onClick = {})
+ EniTextField(stringResource(R.string.email), value = emailField, onValueChange = { value -> loginViewModel.email.value = value; })
+ EniTextField(stringResource(R.string.password), value = passwordField, onValueChange = { value -> loginViewModel.password.value = value; })
+ EniButton(stringResource(R.string.connection), onClick = { loginViewModel.callLoginApi(
+ onSuccess = {
+ // je change de page (page article
+ context.startActivity(Intent(context, ListArticleActivity::class.java))
+ }
+ ) })
EniButton(stringResource(R.string.forget_password),
onClick = {
// Changer de page (d'activity)
@@ -88,5 +102,5 @@ fun LoginActivityPage() {
)
@Composable
fun LoginActivityPreview() {
- LoginActivityPage()
+ LoginActivityPage(LoginViewModel())
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/auth/LoginRequestDTO.kt b/app/src/main/java/com/example/tpfilrouge/auth/LoginRequestDTO.kt
new file mode 100644
index 0000000..eb64fe1
--- /dev/null
+++ b/app/src/main/java/com/example/tpfilrouge/auth/LoginRequestDTO.kt
@@ -0,0 +1,4 @@
+package com.example.tpfilrouge.auth
+
+data class LoginRequestDTO(var email: String, var password : String) {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt b/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt
new file mode 100644
index 0000000..f2046a8
--- /dev/null
+++ b/app/src/main/java/com/example/tpfilrouge/auth/LoginViewModel.kt
@@ -0,0 +1,42 @@
+package com.example.tpfilrouge.auth
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.example.tpfilrouge.helpers.AppDialogHelpers
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.launch
+
+class LoginViewModel : ViewModel() {
+
+ // Ecouter la saisie de email et password
+ var email = MutableStateFlow("isaac@gmail.com")
+ var password = MutableStateFlow("password")
+
+ fun callLoginApi(onSuccess : () -> Unit = {}){
+ AppDialogHelpers.get().showDialog("Tentive de connexion...");
+
+ viewModelScope.launch {
+ // Preparer le DTO à envoyer dans request body
+ // Le DTO qui contient : email et password
+ val loginRequest = LoginRequestDTO(email.value, password.value);
+
+ // Appel api async
+ val responseService = AuthService.AuthApi.authService.login(loginRequest);
+
+ // Fermer la popup de chargement aprés l'appel de API
+ AppDialogHelpers.get().closeDialog()
+
+ // 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();
+ }
+ else{
+ // Erreur
+ println("Connexion échouée")
+ }
+ }
+ }
+}
\ No newline at end of file