From 586f854b9d3d443ebd5079e90b7314ae2dba99e8 Mon Sep 17 00:00:00 2001
From: Chocolaterie <110991127+Chocolaterie@users.noreply.github.com>
Date: Wed, 29 Jan 2025 13:59:31 +0100
Subject: [PATCH] Correction TP 7
---
app/src/main/AndroidManifest.xml | 25 ++----
.../tpfilrouge/article/ArticleActivity.kt | 46 +++++++++++
.../tpfilrouge/article/ArticleFormFragment.kt | 80 +++++++++++++++++++
...icleActivity.kt => ListArticleFragment.kt} | 53 ++----------
.../example/tpfilrouge/auth/LoginFragment.kt | 4 +-
5 files changed, 141 insertions(+), 67 deletions(-)
create mode 100644 app/src/main/java/com/example/tpfilrouge/article/ArticleActivity.kt
create mode 100644 app/src/main/java/com/example/tpfilrouge/article/ArticleFormFragment.kt
rename app/src/main/java/com/example/tpfilrouge/article/{ListArticleActivity.kt => ListArticleFragment.kt} (66%)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 23736f1..58924b9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,33 +17,22 @@
android:theme="@style/Theme.TpFilRouge"
tools:targetApi="31" >
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/article/ArticleActivity.kt b/app/src/main/java/com/example/tpfilrouge/article/ArticleActivity.kt
new file mode 100644
index 0000000..b998f05
--- /dev/null
+++ b/app/src/main/java/com/example/tpfilrouge/article/ArticleActivity.kt
@@ -0,0 +1,46 @@
+package com.example.tpfilrouge.article
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.activity.enableEdgeToEdge
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.rememberNavController
+
+class ArticleActivity : ComponentActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContent {
+ ArticleActivityPage()
+ }
+ }
+}
+
+@Composable
+fun ArticleActivityPage() {
+ val navController = rememberNavController();
+
+ var viewModel = ListArticleViewModel();
+
+ NavHost(
+ navController = navController,
+ startDestination = "list_article"
+ ) {
+ composable("list_article") { ListArticleFragmentPage(viewModel, navController) }
+ composable("article_form") { ArticleFormFragmentPage(viewModel) }
+ }
+}
+
+@Preview(
+ showBackground = true,
+ locale = "en"
+)
+@Composable
+fun ActivityActivityPreview() {
+ ArticleActivityPage()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/article/ArticleFormFragment.kt b/app/src/main/java/com/example/tpfilrouge/article/ArticleFormFragment.kt
new file mode 100644
index 0000000..1f764f5
--- /dev/null
+++ b/app/src/main/java/com/example/tpfilrouge/article/ArticleFormFragment.kt
@@ -0,0 +1,80 @@
+package com.example.tpfilrouge.article
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.TextStyle
+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 com.example.tpfilrouge.R
+import com.example.tpfilrouge.ui.theme.EniButton
+import com.example.tpfilrouge.ui.theme.EniPage
+import com.example.tpfilrouge.ui.theme.EniTextField
+import kotlinx.coroutines.flow.MutableStateFlow
+
+@Composable
+fun ArticleForm(viewModel: ListArticleViewModel){
+ var titleFieldState by remember { mutableStateOf("Un article") }
+ var descFieldState by remember { mutableStateOf("Une description") }
+
+ Column {
+ EniTextField(label = "Saisir un Email", value = titleFieldState,
+ onValueChange = { newValue -> titleFieldState = newValue })
+ EniTextField(label = "Saisir une Description", value = descFieldState,
+ onValueChange = { newValue -> descFieldState = newValue })
+ EniButton("Ajouter") {
+ // Instancer un article avec les infos de la saisie
+ val newArticle = Article(titleFieldState, descFieldState,
+ "https://avatar.iran.liara.run/public");
+ // Envoyer l'article via une méthode view model
+ viewModel.addArticle(newArticle)
+ }
+ }
+}
+
+@Composable
+fun ArticleFormFragmentPage(viewModel: ListArticleViewModel) {
+
+ EniPage {
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier.padding(40.dp)
+ ) {
+ Text(text = "Ajouter un article",
+ modifier = Modifier.fillMaxWidth(),
+ textAlign = TextAlign.Center,
+ style = TextStyle(color = Color.White, fontSize = 28.sp)
+ )
+ ArticleForm(viewModel)
+ }
+ }
+}
+
+@Preview(
+ showBackground = true,
+)
+@Composable
+fun ArticleFormFragmentPreview() {
+ var viewModel = ListArticleViewModel();
+ viewModel.articles = MutableStateFlow(listOf(
+ Article("Teletubies", "Meilleur série du monde", "https://avatar.iran.liara.run/public"),
+ Article("Velocipastor", "Meilleur film du monde, gros budget", "https://avatar.iran.liara.run/public"),
+ Article("Photo mouton béret paille ?", "Pourquoi", "https://avatar.iran.liara.run/public")
+ ));
+ ArticleFormFragmentPage(viewModel)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/article/ListArticleActivity.kt b/app/src/main/java/com/example/tpfilrouge/article/ListArticleFragment.kt
similarity index 66%
rename from app/src/main/java/com/example/tpfilrouge/article/ListArticleActivity.kt
rename to app/src/main/java/com/example/tpfilrouge/article/ListArticleFragment.kt
index f2d4f1e..adefcf3 100644
--- a/app/src/main/java/com/example/tpfilrouge/article/ListArticleActivity.kt
+++ b/app/src/main/java/com/example/tpfilrouge/article/ListArticleFragment.kt
@@ -1,10 +1,5 @@
package com.example.tpfilrouge.article
-import android.os.Bundle
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.activity.enableEdgeToEdge
-import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@@ -15,13 +10,9 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.Text
-import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -33,47 +24,13 @@ 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.navigation.NavController
import coil.compose.AsyncImage
import com.example.tpfilrouge.R
import com.example.tpfilrouge.ui.theme.EniButton
import com.example.tpfilrouge.ui.theme.EniPage
-import com.example.tpfilrouge.ui.theme.EniTextField
import kotlinx.coroutines.flow.MutableStateFlow
-class ListArticleActivity : ComponentActivity() {
-
- // Instancier le view model
- var viewModel = ListArticleViewModel();
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- setContent {
- ListArticleActivityPage(viewModel)
- }
- }
-}
-
-@Composable
-fun ArticleForm(viewModel: ListArticleViewModel){
- var titleFieldState by remember { mutableStateOf("Un article") }
- var descFieldState by remember { mutableStateOf("Une description") }
-
- Column {
- EniTextField(label = "Saisir un Email", value = titleFieldState,
- onValueChange = { newValue -> titleFieldState = newValue })
- EniTextField(label = "Saisir une Description", value = descFieldState,
- onValueChange = { newValue -> descFieldState = newValue })
- EniButton("Ajouter") {
- // Instancer un article avec les infos de la saisie
- val newArticle = Article(titleFieldState, descFieldState,
- "https://avatar.iran.liara.run/public");
- // Envoyer l'article via une méthode view model
- viewModel.addArticle(newArticle)
- }
- }
-}
-
@Composable
fun ArticleCard(article: Article){
ElevatedCard(
@@ -97,7 +54,7 @@ fun ArticleCard(article: Article){
}
@Composable
-fun ListArticleActivityPage(viewModel: ListArticleViewModel) {
+fun ListArticleFragmentPage(viewModel: ListArticleViewModel, navController: NavController? = null) {
// Ecouter les changements de la liste d'article dans le ViewModel
val articlesState by viewModel.articles.collectAsState();
@@ -110,7 +67,9 @@ fun ListArticleActivityPage(viewModel: ListArticleViewModel) {
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
style = TextStyle(color = Color.White, fontSize = 28.sp))
- ArticleForm(viewModel)
+ EniButton("Ajouter un Article") {
+ navController!!.navigate("article_form")
+ }
EniButton("Rafraichir") {
// Appeler l'api du viewmodel
viewModel.callArticlesApi()
@@ -135,5 +94,5 @@ fun ListArticleActivityPreview() {
Article("Velocipastor", "Meilleur film du monde, gros budget", "https://avatar.iran.liara.run/public"),
Article("Photo mouton béret paille ?", "Pourquoi", "https://avatar.iran.liara.run/public")
));
- ListArticleActivityPage(viewModel)
+ ListArticleFragmentPage(viewModel)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tpfilrouge/auth/LoginFragment.kt b/app/src/main/java/com/example/tpfilrouge/auth/LoginFragment.kt
index 8ab94aa..90e835d 100644
--- a/app/src/main/java/com/example/tpfilrouge/auth/LoginFragment.kt
+++ b/app/src/main/java/com/example/tpfilrouge/auth/LoginFragment.kt
@@ -21,7 +21,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.example.tpfilrouge.R
-import com.example.tpfilrouge.article.ListArticleActivity
+import com.example.tpfilrouge.article.ArticleActivity
import com.example.tpfilrouge.ui.theme.EniButton
import com.example.tpfilrouge.ui.theme.EniPage
import com.example.tpfilrouge.ui.theme.EniTextField
@@ -62,7 +62,7 @@ fun LoginFragmentPage(loginViewModel: LoginViewModel, navController: NavControll
loginViewModel.callLoginApi(
onSuccess = {
// je change de page (page article
- context.startActivity(Intent(context, ListArticleActivity::class.java))
+ context.startActivity(Intent(context, ArticleActivity::class.java))
}
)
})