From 5f5c8ee1f2dfe67fbee08cf22279072170defdcb Mon Sep 17 00:00:00 2001 From: tonyfages Date: Wed, 13 Mar 2024 17:34:20 +0100 Subject: [PATCH 01/13] Creation Vue ATTENTION MARCHE PAS --- Android/VeraxApplication/app/build.gradle.kts | 1 + .../example/veraxapplication/MainActivity.kt | 91 ++++++++++++++----- .../example/veraxapplication/data/Article.kt | 10 ++ .../veraxapplication/data/Paragraph.kt | 5 + .../veraxapplication/ui/theme/Color.kt | 3 +- 5 files changed, 84 insertions(+), 26 deletions(-) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt diff --git a/Android/VeraxApplication/app/build.gradle.kts b/Android/VeraxApplication/app/build.gradle.kts index abf70c9..114550b 100644 --- a/Android/VeraxApplication/app/build.gradle.kts +++ b/Android/VeraxApplication/app/build.gradle.kts @@ -66,6 +66,7 @@ dependencies { androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") + implementation("io.coil-kt:coil-compose:1.4.0") } \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index 4a44758..12f795e 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -1,36 +1,29 @@ package com.example.veraxapplication -import android.graphics.Paint.Align import android.os.Bundle -import android.text.Layout -import android.view.Menu import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MenuDefaults import androidx.compose.material3.Scaffold import androidx.compose.ui.graphics.Color import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar import androidx.compose.ui.res.colorResource -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Menu import androidx.compose.material.icons.filled.Person @@ -40,34 +33,39 @@ import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.NavigationBarDefaults.containerColor -import androidx.compose.material3.Scaffold -import androidx.compose.material3.ScaffoldDefaults -import androidx.compose.material3.TopAppBarDefaults.topAppBarColors -import androidx.compose.material3.darkColorScheme 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.draw.clip import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp - +import coil.compose.rememberImagePainter +import com.example.veraxapplication.data.Article +import com.example.veraxapplication.data.Paragraph +import com.example.veraxapplication.ui.theme.Salmon // doc navBar: https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#TopAppBar(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,androidx.compose.material3.TopAppBarColors,androidx.compose.material3.TopAppBarScrollBehavior) // doc compose, pleins de trucs: https://developer.android.com/jetpack/compose/text?hl=fr //doc couleur background pas finie: https://developer.android.com/jetpack/compose/components/scaffold + + + class MainActivity : ComponentActivity() { // un truc vite fait pour avoir un visi var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") + var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")), Image = "http://www.april.org/sites/default/files/JZ%20thinkerview.png")) var theme = listOf("Economique","Culture","Politique","Faits divers") + var color = Color(0xFF00FF00) + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - TopBarVerax(theme = theme, article = article) + TopBarVerax(theme = theme, article = articles) // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej } @@ -77,13 +75,11 @@ class MainActivity : ComponentActivity() { // Il faudrait mettre ca dans un fichier appart mais je connais plus les conventions ... @OptIn(ExperimentalMaterial3Api::class) @Composable -fun TopBarVerax(theme : List, article : List) { +fun TopBarVerax(theme : List, article : List
) { var leMenu by remember { mutableStateOf(false) } - Row( - Modifier.background(Color.Cyan) - ) { + Row() { Scaffold( topBar = { CenterAlignedTopAppBar( @@ -172,10 +168,55 @@ fun TopBarVerax(theme : List, article : List) { @Composable -fun AffichageUnArticle(article : List){ - Column { +fun AffichageUnArticle(article : List
){ + Column() { for(e in article){ - Text(text = e) + DisplayTitle(title = e.Title) + DisplayHeader(author = e.Author, description = e.Description, lectureTime = e.LectureTime) + DisplayImage(image = e.Image) + DisplayContentArticle(content = e.Content) + } + } +} + +@Composable +fun DisplayImage(image: String) { + Image( + painter = rememberImagePainter(data = image), + contentDescription = "Article Image", + modifier = Modifier.fillMaxWidth() + ) +} + + +@Composable +fun DisplayHeader(author: String, description: String, lectureTime: String) { + Box(modifier = Modifier + .fillMaxWidth() + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)) + .background(Salmon) + .padding(10.dp)) { + Column () { + Text(text = author) + Text(text = description) + Text(text = "Lecture Time: " + lectureTime + " minutes") + } + } +} + +@Composable +fun DisplayTitle(title: String) { + Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally){ + Text(text = title, fontFamily = FontFamily.Serif, fontSize = 30.sp) + } +} + +@Composable +fun DisplayContentArticle(content: List) { + Column { + for(e in content){ + Text(text = e.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) } } } diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt new file mode 100644 index 0000000..ddbbbe1 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt @@ -0,0 +1,10 @@ +package com.example.veraxapplication.data + +data class Article( + var Title : String, + var Description : String, + var Image : String, + var Author : String, + var Content : List, + var LectureTime : String +) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt new file mode 100644 index 0000000..8f4a51c --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt @@ -0,0 +1,5 @@ +package com.example.veraxapplication.data + +data class Paragraph( + var Content : String, +) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt index 416d5de..a2952b8 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt @@ -8,4 +8,5 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file +val Pink40 = Color(0xFF7D5260) +val Salmon = Color(0xFFE9967A) \ No newline at end of file From f0ebbb91fbe9c83b5d9e5753938701b236ea07a3 Mon Sep 17 00:00:00 2001 From: tonyfages Date: Thu, 14 Mar 2024 09:43:05 +0100 Subject: [PATCH 02/13] =?UTF-8?q?Tentative=20de=20fix=20image=20(j'ai=20mi?= =?UTF-8?q?s=20les=20logs=20pour=20aider=20a=20debugger=20=F0=9F=9A=91?= =?UTF-8?q?=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/src/main/AndroidManifest.xml | 1 + .../example/veraxapplication/MainActivity.kt | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/AndroidManifest.xml b/Android/VeraxApplication/app/src/main/AndroidManifest.xml index 316f500..cb87384 100644 --- a/Android/VeraxApplication/app/src/main/AndroidManifest.xml +++ b/Android/VeraxApplication/app/src/main/AndroidManifest.xml @@ -24,5 +24,6 @@ + \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index 12f795e..e227e0b 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -1,6 +1,7 @@ package com.example.veraxapplication import android.os.Bundle +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image @@ -12,6 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.ui.graphics.Color @@ -45,6 +47,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.rememberImagePainter +import coil.size.Scale import com.example.veraxapplication.data.Article import com.example.veraxapplication.data.Paragraph import com.example.veraxapplication.ui.theme.Salmon @@ -58,7 +61,7 @@ import com.example.veraxapplication.ui.theme.Salmon class MainActivity : ComponentActivity() { // un truc vite fait pour avoir un visi var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") - var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")), Image = "http://www.april.org/sites/default/files/JZ%20thinkerview.png")) + var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) var theme = listOf("Economique","Culture","Politique","Faits divers") var color = Color(0xFF00FF00) @@ -181,14 +184,31 @@ fun AffichageUnArticle(article : List
){ @Composable fun DisplayImage(image: String) { - Image( - painter = rememberImagePainter(data = image), - contentDescription = "Article Image", - modifier = Modifier.fillMaxWidth() + Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") + + val painter = rememberImagePainter( + data = image, + builder = { + scale(Scale.FILL) + } ) + + Log.d("DisplayImage", "Painter créé avec succès") + + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + androidx.compose.foundation.Image( + painter = painter, + contentDescription = null, + modifier = Modifier.fillMaxSize(), + ) + } } + @Composable fun DisplayHeader(author: String, description: String, lectureTime: String) { Box(modifier = Modifier From b2a9da1992910688ca4fccf6e462292f38ff9152 Mon Sep 17 00:00:00 2001 From: Siwa12100 Date: Wed, 20 Mar 2024 10:34:29 +0100 Subject: [PATCH 03/13] debut travail sur le modele --- .../modele/articles/Article.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt new file mode 100644 index 0000000..6965fc4 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt @@ -0,0 +1,26 @@ +//package com.example.veraxapplication.articles +// +//class Article( +// +// val id: Int, +// val titre: String, +// val description: String, +// val temps: String, +// val date: String, +// val auteur: String, +// val imagePrincipale: String +//) { +// val note = 1.0 +// private val lContenus: MutableList +// +// init { +// lContenus = java.util.ArrayList() +// } +// +// fun remplirArticle(lContenus: List?) { +// this.lContenus.addAll(lContenus!!) +// } +// +// val contenus: List +// get() = lContenus +//} \ No newline at end of file From c26affc745939e2b53051c5084202a0bbb2dd049 Mon Sep 17 00:00:00 2001 From: Siwa12100 Date: Wed, 20 Mar 2024 10:45:10 +0100 Subject: [PATCH 04/13] ajout du stub en dur --- .../modele/IArticlesDataManager.kt | 9 + .../modele/articles/Article.kt | 53 +-- .../modele/articles/StubArticles.kt | 424 ++++++++++++++++++ .../modele/articles/contenus/Contenu.kt | 8 + .../modele/articles/contenus/ContenuMedia.kt | 24 + .../articles/contenus/ContenuParagraphe.kt | 16 + 6 files changed, 508 insertions(+), 26 deletions(-) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt new file mode 100644 index 0000000..3fe3fb9 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt @@ -0,0 +1,9 @@ +package com.example.veraxapplication.articles + + +interface IArticlesDataManager { + val allArticles: List? + + fun getArticle(id: Int): Article? + fun getDerniersArticles(nbArticles: Int): List? +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt index 6965fc4..d0cb0c8 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt @@ -1,26 +1,27 @@ -//package com.example.veraxapplication.articles -// -//class Article( -// -// val id: Int, -// val titre: String, -// val description: String, -// val temps: String, -// val date: String, -// val auteur: String, -// val imagePrincipale: String -//) { -// val note = 1.0 -// private val lContenus: MutableList -// -// init { -// lContenus = java.util.ArrayList() -// } -// -// fun remplirArticle(lContenus: List?) { -// this.lContenus.addAll(lContenus!!) -// } -// -// val contenus: List -// get() = lContenus -//} \ No newline at end of file +package com.example.veraxapplication.articles + +class Article( + + val id: Int, + val titre: String, + val description: String, + val temps: String, + val date: String, + val auteur: String, + val imagePrincipale: String + +) { + val note = 1.0 + private val lContenus: MutableList + + init { + lContenus = java.util.ArrayList() + } + + fun remplirArticle(lContenus: List?) { + this.lContenus.addAll(lContenus!!) + } + + val contenus: List + get() = lContenus +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt new file mode 100644 index 0000000..22f04e4 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt @@ -0,0 +1,424 @@ +package com.example.veraxapplication.articles + +class StubArticles() : IArticlesDataManager { + private var lArticles: MutableList
? = null + + init { + chargerArticles() + } + + private fun chargerArticles() { + lArticles = java.util.ArrayList
() + val contenuMap: Map> = chargerContenuParagraphe() + + // Article 1 + val article1 = Article( + 1, + "Thinkerview", + "Thinkerview est une chaîne passionnante chaîne youtube d'interview-débat.", + "3", + LocalDate.now().toString(), + "Siwa", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219554341388816437/stub1.webp?ex=660bb97d&is=65f9447d&hm=3e1e8d3372ae897fa4e2aa1ec730d976d74b35fce96cb8d78d6f9239e2836564&" + ) + article1.remplirArticle(contenuMap["article1"]) + lArticles!!.add(article1) + + // Article 2 + val article2 = Article( + 2, + "Le réchauffement climatique : un mythe ?", + "Revenons sur les différentes controverses à ce sujet.", + "7", + LocalDate.now().toString(), + "Siwa", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219555874339815454/stub2.webp?ex=660bbaea&is=65f945ea&hm=80aef945e8410b18395c716fdd19265608f7b1263731192d5c69f807fce9e944&" + ) + article2.remplirArticle(contenuMap["article5"]) + lArticles!!.add(article2) + + // Article 4 + val article3 = Article( + 3, + "La terre plate : vraiment ?", + "Pour réfuter la fausse croyance que la Terre est plate, il est essentiel de s'appuyer sur des preuves scientifiques et des observations historiques. ", + "5", + LocalDate.now().toString(), + "Siwa", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219547864196317225/stub1.webp?ex=660bb374&is=65f93e74&hm=a9e5dd48faa3ae68c358309af8949c46dfd4dea9c4d6e3d845d707784e5341cf&" + ) + article3.remplirArticle(contenuMap["article4"]) + lArticles!!.add(article3) + + // Article 4 + val article4 = Article( + 4, + "L'ia & humanité : quel avenir ? ", + "Explorons les progrès remarquables dans le domaine de l'IA, les secteurs qu'elle révolutionne, et les implications éthiques majeures qu'elle soulève.", + "9", + LocalDate.now().toString(), + "Luthen", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219560686254817290/stub1.webp?ex=660bbf65&is=65f94a65&hm=021bd8c90c89347f31373468cc7a03ae15f1d3f9988a5b4325149c6df938d7bb&" + ) + article4.remplirArticle(contenuMap["article6"]) + lArticles!!.add(article4) + } + + private fun chargerContenuParagraphe(): Map> { + val contenuMap: MutableMap> = HashMap>() + val article1Contenus: MutableList = java.util.ArrayList() + val article2Contenus: MutableList = java.util.ArrayList() + val article3Contenus: MutableList = java.util.ArrayList() + val article4Contenus: MutableList = java.util.ArrayList() + val article5Contenus: MutableList = java.util.ArrayList() + val article6Contenus: MutableList = java.util.ArrayList() + + // Contenu de l'article 1 + article1Contenus.add( + ContenuParagraphe( + 1, "Le mystérieux cygne noir.", + "Sous les traits d’un mystérieux cygne noir, un objet vidéo non identifié plane dans la galaxie \n" + + " médiatique. Ambiance Star Wars. Après une musique lancinante, sur fond noir et fumée grisâtre,\n" + + " un invité apparaît, et la voix d’un intervieweur-mystère situé hors champ l’invite à se\n" + + " présenter « succinctement ». C’est ainsi qu’on entre dans le monde de ThinkerView, \n" + + " chaîne qui a commencé à diffuser en janvier 2013 sur YouTube. Ici, pas de publicité,\n" + + " pas de montage, pas d’effets de lumière. Le calme, peut-être pour annoncer la tempête." + ) + ) + article1Contenus.add( + ContenuMedia( + 0, + "Des sujets majeurs abordés", + "https://www.systext.org/sites/default/files/styles/large/public/Ill_Thinkerview_Janv2022.png?itok=JvlFQmCH" + ) + ) + article1Contenus.add( + ContenuParagraphe( + 2, "Penser, réfléchir et s'exprimer librement.", + ("Dernier carton en date : un entretien de deux heures avec Juan Branco, l’avocat du gilet \n" + + " jaune Maxime Nicolle et « conseiller juridique » de Wikileaks. Quelques jours avant lui,\n" + + " c’était au tour de François Boulo, autre avocat inscrit au barreau de Rouen et l’un des\n" + + " porte-parole des « gilets jaunes ». « Ici, les gens ont vraiment le temps de développer \n" + + " leurs idées, confie Boulo. Il faut pouvoir écouter une pensée complète, sans être interrompu.\n" + + " » Aux yeux de ce fils d’une famille de droite populaire (paysans et commerçants), ThinkerView \n" + + " a réalisé ce dont Pierre Bourdieu avait rêvé. S’il s’abreuve à cette source depuis « un an ou \n" + + " deux », en réalité, ce n’est pas lui qui l’a trouvée, mais l’inverse. Magie des algorithmes.") + ) + ) + article1Contenus.add( + ContenuMedia( + 1, + "De prestigieux et fascinants invités", + "https://i.ytimg.com/vi/_D-AnsdbnRI/maxresdefault.jpg" + ) + ) + article1Contenus.add( + ContenuParagraphe( + 3, "Une alternative dans un monde aux informations formatées", + ("\\\"Nous faisons des interviews aux perspectives alternatives dans un monde aux informations formatées\\\",\n" + + " explique le site Thinkerview. La marque a adopté un cygne noir comme logo, un clin d'œil à la théorie \n" + + " du cygne noir (expliquée dans cet article de Challenges), soit un événement qui a peu de \n" + + " chances de se produire mais qui, s'il se produit, a des conséquences considérables.\n" + + "\n" + + " Les invités viennent d'horizons divers avec une petite préférence pour les \n" + + " intellectuels iconoclastes et les contestataires de tous bords, de l'ancien \n" + + " ministre grec Yanis Varoufakis à l'historien et essayiste Emmanuel Todd, en\n" + + " passant par les journalistes Natacha Polony et Laurent Obertone ou encore \n" + + " la coqueluche des \\\"gilets jaunes\\\" Etienne Chouard. \\\"On est au milieu de \n" + + " toutes les communautés qui s'écharpent sur internet, de l'extrême droite à\n" + + " l'extrême gauche, explique Sky. On cherche à créer un terrain neutre pour \n" + + " que tout le monde puisse échanger.") + ) + ) + article1Contenus.add( + ContenuMedia.newVideo( + 2, + "Prendre le temps d'écouter les experts dans leurs domaines.", + "https://www.youtube.com/embed/1tTksQL2kqs" + ) + ) + + // Contenu de l'article 2 + article2Contenus.add( + ContenuParagraphe( + 1, "Oui les Ukrainiens reprennent du terrain", + "Timéo demande à Eric Biegala, grand reporter à la rédaction internationale de Radio France..." + ) + ) + article2Contenus.add( + ContenuMedia( + 1, + "Des violents affrontements", + "https://images.ladepeche.fr/api/v1/images/view/655a496a7097bc144658af8c/large/image.jpg?v=1" + ) + ) + article2Contenus.add( + ContenuParagraphe( + 2, "Non les rayons ne seront pas vides cet hiver", + "Lorenzo se demande s'il est vrai \"qu'il y aura une pénurie de produits étrangers cet hiver\"..." + ) + ) + article2Contenus.add( + ContenuMedia( + 2, "Une carte en perpétuelle évolution", + "https://ds1.static.rtbf.be/image/media/object/default/16x9/1920x1080/4/e/6/4e67668ff30a378cbf0a9172f92712a7.jpg" + ) + ) + article2Contenus.add( + ContenuParagraphe( + 3, "Le gaz va augmenter en 2023, mais l'Etat va continuer à aider", + "Isra se demande s'il est vrai \"que le gaz va être plus cher cet hiver\"..." + ) + ) + + // Contenu de l'article 3 + article3Contenus.add( + ContenuParagraphe( + 1, "Une certaine \"tempête Jinette\" en Guyane", + "Ne vous laissez pas convaincre par les nuages et les pluies au-dessus de l'île de Cayenne ce matin..." + ) + ) + article3Contenus.add( + ContenuMedia( + 1, "Pour aujourd'hui, la vigilance est au vert en Guyane.", + "https://medias.franceantilles.fr/api/v1/images/view/6560a041c9b8a232734f9fda/width_1000/image.jpg" + ) + ) + article3Contenus.add( + ContenuParagraphe( + 2, "De simples petites averses en prévision !", + "Les quelques averses qui passent actuellement au-dessus de l'île de Cayenne et des savanes ne sont que passagères..." + ) + ) + article3Contenus.add( + ContenuMedia( + 2, "Le faux document en question. Diffusé depuis hier soir.", + "https://medias.franceantilles.fr/api/v1/images/view/6560b08a04eeb6664b7f5488/width_1000/image.jpg" + ) + ) + + + // contenu article 4 + article4Contenus.add( + ContenuParagraphe( + 1, + "Introduction", + "Depuis l'antiquité, l'humanité s'est questionnée sur la forme de la Terre. Malgré la croyance populaire que les anciens pensaient la Terre plate, de nombreux philosophes, mathématiciens et astronomes de différentes cultures avaient déjà conclu que la Terre était sphérique. La théorie de la Terre plate, cependant, persiste dans certains cercles aujourd'hui, malgré une abondance de preuves contraires." + ) + ) + article4Contenus.add( + ContenuMedia( + 1, + "la terre plate : un vieux mythe", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219547863709913128/stub2.webp?ex=660bb374&is=65f93e74&hm=bd349fe6896af98f169987089ff1527a515129d9582c1cf8399e3d4ee35d0e31&" + ) + ) + article4Contenus.add( + (ContenuParagraphe( + 2, + "Preuves historiques de la sphéricité de la Terre", + ("Observations des éclipses lunaires : Les éclipses lunaires se produisent lorsque la Terre se trouve entre le Soleil et la Lune, projetant son ombre sur la Lune. Cette ombre est toujours ronde, ce qui suggère fortement que la Terre est sphérique.\n" + + "\n" + + "Expérience de l'horizon : Lorsqu'on observe un navire s'éloigner en mer, il semble disparaître progressivement, avec la coque qui disparaît en premier et les voiles en dernier. Cela ne pourrait se produire si la Terre était plate.\n" + + "\n" + + "Variation de la gravité : La gravité agit de manière uniforme autour d'une sphère, attirant tout vers le centre. Si la Terre était plate, la gravité agirait différemment et nous le remarquerions dans nos déplacements et nos observations.\n" + + "\n" + + "Photographies de l'espace : Depuis le XXe siècle, l'humanité a pu observer la Terre depuis l'espace, confirmant sans ambiguïté sa forme sphérique grâce à des milliers de photographies.") + )) + ) + article4Contenus.add( + ContenuParagraphe( + 3, "Preuves scientifiques contemporaines", + ("Satellites et GPS : Le fonctionnement du système de positionnement global (GPS) repose sur l'existence de satellites orbitant autour d'une Terre sphérique. La précision de ce système serait impossible sur une Terre plate.\n" + + "\n" + + "Vols aériens : Les trajets des avions et leur temps de vol s'expliquent par la courbure de la Terre. Les routes aériennes utilisent souvent ce qu'on appelle des \"routes orthodromiques\", qui sont les chemins les plus courts entre deux points sur une sphère, indiquant encore la forme sphérique de la Terre.\n" + + "\n" + + "La physique de Newton et la gravitation universelle : Les lois du mouvement de Newton et sa théorie de la gravitation universelle ne peuvent s'expliquer que si la Terre est une sphère. Ces théories ont été vérifiées à de multiples reprises par des expériences et des observations.") + ) + ) + article4Contenus.add( + ContenuParagraphe( + 4, "Explications et réfutations des arguments des platistes", + ("La question de l'horizon toujours à niveau : Les platistes argumentent souvent que si la Terre était ronde, l'horizon ne semblerait pas toujours plat. Cependant, cela s'explique par la taille massive de la Terre par rapport à notre champ de vision. La courbure est trop légère pour être perçue à l'œil nu sur de courtes distances.\n" + + "\n" + + "La théorie de la conspiration de la NASA : Un argument fréquent est que les images de la Terre depuis l'espace sont des faux. Cependant, des agences spatiales du monde entier, y compris celles de pays en conflit ou en compétition, ont fourni des images cohérentes de la Terre.\n" + + "\n" + + "Les expériences de niveau d'eau et de laser : Certains platistes utilisent des expériences de niveau d'eau ou de laser sur de longues distances pour prouver que la Terre est plate. Ces expériences ne tiennent cependant pas compte de la réfraction atmosphérique ou de la précision des instruments utilisés.") + ) + ) + article4Contenus.add( + ContenuMedia( + 1, + "Une planete observée", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219547863139483698/stub3.webp?ex=660bb374&is=65f93e74&hm=26eac72039dc1d65bebfaa5e90972c0c0177c9d281121f58d33757419586bb62&" + ) + ) + article4Contenus.add( + ContenuParagraphe( + 5, + "Conclusion", + "La croyance que la Terre est plate est contredite par une multitude de preuves et d'observations faites au fil des millénaires. De la science ancienne aux technologies modernes, chaque preuve renforce la conclusion que la Terre est une sphère. La science et l'observation directe nous fournissent une compréhension claire de notre monde, nous permettant de rejeter les mythes et les désinformations tels que la théorie de la Terre plate." + ) + ) + + + // article 5 + article5Contenus.add( + ContenuParagraphe( + 1, + "Introduction", + "Le réchauffement climatique fait référence à l'augmentation à long terme de la température moyenne de l'atmosphère terrestre et des océans. Cette tendance, principalement attribuée aux activités humaines depuis la révolution industrielle, entraîne des changements climatiques significatifs et potentiellement irréversibles. Les preuves de ce phénomène sont multiples et incluent des données atmosphériques, océaniques et terrestres." + ) + ) + article5Contenus.add( + ContenuParagraphe( + 2, "Causes du réchauffement climatique", + ("Émissions de gaz à effet de serre (GES) : La principale cause du réchauffement climatique est l'augmentation des émissions de GES, notamment le dioxyde de carbone (CO2), le méthane (CH4) et le protoxyde d'azote (N2O), résultant de la combustion des combustibles fossiles, de la déforestation, de l'agriculture intensive et de l'industrie.\n" + + "\n" + + "Déforestation : La réduction des forêts mondiales diminue la capacité de la Terre à absorber le CO2 de l'atmosphère, exacerbant ainsi l'effet de serre.\n" + + "\n" + + "Agriculture et élevage : Ces activités contribuent significativement aux émissions de CH4 et de N2O, à travers la fermentation entérique des ruminants et l'utilisation d'engrais chimiques.") + ) + ) + article5Contenus.add( + ContenuMedia( + 1, + "Un chaos annoncé.", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219555873253490698/stub4.webp?ex=660bbaea&is=65f945ea&hm=d19e48c6ada7d824a9d7f859f657d5a81135dc2817f5791ac7e4f308369e1dc2&" + ) + ) + article5Contenus.add( + ContenuParagraphe( + 3, "Conséquences du réchauffement climatique", + ("Changements météorologiques extrêmes : L'augmentation de la température entraîne des vagues de chaleur plus fréquentes et plus intenses, des tempêtes plus violentes, des sécheresses et des inondations.\n" + + "\n" + + "Montée des eaux : La fonte des glaciers et des calottes glaciaires, ainsi que l'expansion thermique des océans, entraînent une élévation du niveau de la mer, menaçant les zones côtières et les îles basses.\n" + + "\n" + + "Perturbation des écosystèmes : Le réchauffement climatique affecte la biodiversité, avec des espèces contraintes de migrer, de s'adapter ou risquant l'extinction.\n" + + "\n" + + "Impacts sur la santé humaine : Les vagues de chaleur, la pollution atmosphérique et la propagation de maladies vectorielles sont exacerbées par le changement climatique, posant des risques accrus pour la santé humaine.") + ) + ) + article5Contenus.add( + ContenuParagraphe( + 4, "Solutions au réchauffement climatique", + ("Réduction des émissions de GES : Limiter les émissions à travers l'adoption de technologies propres, l'amélioration de l'efficacité énergétique et le développement des énergies renouvelables.\n" + + "\n" + + "Séquestration du carbone : Reboiser et restaurer les écosystèmes naturels pour augmenter l'absorption de CO2 de l'atmosphère.\n" + + "\n" + + "Innovation technologique : Développer et déployer des technologies de capture et de stockage du carbone, ainsi que des solutions d'énergie renouvelable avancées.\n" + + "\n" + + "Action politique globale : Mettre en œuvre des accords internationaux, comme l'Accord de Paris, pour coordonner les efforts mondiaux de lutte contre le changement climatique.\n" + + "\n" + + "Sensibilisation et éducation : Informer le public sur les causes et les conséquences du réchauffement climatique et sur les moyens d'agir à titre individuel et collectif.") + ) + ) + article5Contenus.add( + ContenuMedia( + 1, + "Un avenir à écrire", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219555873710542909/stub3.webp?ex=660bbaea&is=65f945ea&hm=8e702e51a2e4defba269341894a2d70dfc9d52de453ded2b0ad131d8e367aa41&" + ) + ) + article5Contenus.add( + ContenuParagraphe( + 5, + "Conclusion", + "Le réchauffement climatique est une urgence planétaire qui exige une action immédiate et concertée. Les preuves scientifiques sont indéniables et montrent que les activités humaines sont la principale cause de ce phénomène. En adoptant des mesures de mitigation et d'adaptation, en innovant dans les technologies propres et en travaillant ensemble à tous les niveaux de la société, nous pouvons faire face à ce défi et assurer un avenir durable pour les générations futures. Il est impératif d'agir maintenant pour prévenir les pires conséquences du changement climatique." + ) + ) + + + // Article 6 + article6Contenus.add( + ContenuParagraphe( + 1, + "Introduction", + "L'IA désigne les systèmes ou machines capables de réaliser des tâches nécessitant une intelligence humaine. Ces dernières années, des progrès substantiels ont été réalisés, notamment grâce à des techniques comme l'apprentissage profond (deep learning), permettant aux machines de traiter et d'analyser de grandes quantités de données de manière plus efficace que jamais." + ) + ) + article6Contenus.add( + ContenuParagraphe( + 2, "Secteurs Transformés par l'IA", + ("Santé : L'IA est utilisée pour diagnostiquer des maladies plus rapidement et avec plus de précision, personnaliser les traitements et même prédire les risques de maladies avant qu'elles ne surviennent.\n" + + "Automobile : Les technologies d'IA sont au cœur du développement des véhicules autonomes, promettant de réduire les accidents de la route causés par l'erreur humaine.\n" + + "Finance : L'IA transforme le secteur financier en optimisant les opérations, en détectant les fraudes et en personnalisant les services pour les clients.\n" + + "Environnement : Grâce à l'IA, nous pouvons mieux comprendre les changements climatiques, optimiser la consommation d'énergie et développer des solutions plus durables.") + ) + ) + article6Contenus.add( + ContenuMedia( + 1, + "Quel avenir ?", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219560685592248320/stub2.webp?ex=660bbf65&is=65f94a65&hm=5c6ccd06b39526391826a74ad178f1b56711d6eadcc3625a380d4f6f37e34b2a&" + ) + ) + article6Contenus.add( + ContenuParagraphe( + 3, + "Implications Éthiques de l'IA", + ("Les avancées de l'IA ne sont pas sans soulever d'importantes questions éthiques :\n" + + "\n" + + "Vie privée et surveillance : L'utilisation accrue de l'IA dans la surveillance pose des questions sur le droit à la vie privée et la possibilité d'une surveillance de masse.\n" + + "Sécurité : Les technologies d'IA, en particulier les armes autonomes, soulèvent des préoccupations en matière de sécurité mondiale et de contrôle humain sur les machines.\n" + + "Biais et discrimination : Les systèmes d'IA peuvent perpétuer ou même exacerber les biais sociaux et raciaux s'ils ne sont pas correctement conçus et surveillés.\n" + + "Emploi et économie : L'automatisation poussée par l'IA menace de perturber le marché du travail, posant des questions sur le futur de l'emploi et l'équité économique.") + ) + ) + article6Contenus.add( + ContenuMedia( + 1, + "IA et humains égaux ?", + "https://cdn.discordapp.com/attachments/1150826798549049554/1219560881621569606/stub3.webp?ex=660bbf94&is=65f94a94&hm=5242c98d2c475bf05990e1b921ea5cc112cb6dded11ae28001fd777d8cb3b7ec&" + ) + ) + article6Contenus.add( + ContenuParagraphe( + 4, + "Naviguer dans l'Avenir de l'IA", + ("Pour maximiser les bénéfices de l'IA tout en minimisant ses risques, une approche multidisciplinaire est nécessaire, impliquant des experts en technologie, en éthique, en droit et dans d'autres domaines clés. Les principes suivants pourraient guider le développement responsable de l'IA :\n" + + "\n" + + "Transparence : Les processus de prise de décision de l'IA devraient être transparents, permettant une compréhension et une confiance accrues.\n" + + "Équité : Des mesures doivent être prises pour s'assurer que les systèmes d'IA traitent tous les individus équitablement et sans discrimination.\n" + + "Sécurité : La sécurité doit être une priorité à toutes les étapes du développement et de l'implémentation de l'IA.\n" + + "Responsabilité : Les développeurs et les utilisateurs d'IA doivent être tenus responsables des impacts de leurs systèmes.") + ) + ) + article6Contenus.add( + ContenuParagraphe( + 5, + "Conclusion", + "Les avancées de l'IA offrent des possibilités extraordinaires pour le progrès humain, mais elles exigent aussi une réflexion profonde sur les valeurs que nous souhaitons préserver dans une ère de plus en plus automatisée. En abordant les défis éthiques avec sérieux et en collaborant à l'échelle mondiale, nous pouvons orienter le développement de l'IA vers un avenir qui reflète le meilleur de l'humanité." + ) + ) + + + // -=-=-=-= + contenuMap.put("article1", article1Contenus) + contenuMap.put("article2", article2Contenus) + contenuMap.put("article3", article3Contenus) + contenuMap.put("article4", article4Contenus) + contenuMap.put("article5", article5Contenus) + contenuMap.put("article6", article6Contenus) + return contenuMap + } + + val allArticles: List? + get() = lArticles + + fun getArticle(id: Int): Article { + println("Passage dans getArticle avec comme id : $id") + println("Nombre d'articles disponibles : " + lArticles!!.size) + val articleARenvoyer: Article = lArticles.stream() + .filter(java.util.function.Predicate
{ article: Article -> article.getId() === id }).findFirst() + .orElse(null) + java.lang.System.out.println(articleARenvoyer) + + // Article articleARenvoyer = this.lArticles.get(id); + return articleARenvoyer + } + + fun getDerniersArticles(nbArticles: Int): List
{ + return lArticles!!.subList(0, min(nbArticles, lArticles!!.size)) + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt new file mode 100644 index 0000000..48ae4b1 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt @@ -0,0 +1,8 @@ +package com.example.veraxapplication.articles.contenus + + +abstract class Contenu(var id: Int) { + var typeContenu: String? = null + protected set + +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt new file mode 100644 index 0000000..4406364 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt @@ -0,0 +1,24 @@ +package com.example.veraxapplication.articles.contenus + +class ContenuMedia(id: Int, var titre: String, var lien: String) : Contenu(id) { + + init { + setTypeContenu("image") + } + + val contenu: Map + get() { + val contenu: MutableMap = HashMap() + contenu.put("titre", titre) + contenu.put("contenu", lien) + return contenu + } + + companion object { + fun newVideo(id: Int, titre: String, lien: String): ContenuMedia { + val temp = ContenuMedia(id, titre, lien) + temp.setTypeContenu("video") + return temp + } + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt new file mode 100644 index 0000000..25a9671 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt @@ -0,0 +1,16 @@ +package com.example.veraxapplication.articles.contenus + +class ContenuParagraphe(id: Int, var titre: String, var texte: String) : Contenu(id) { + + init { + setTypeContenu("paragraphe") + } + + val contenu: Map + get() { + val contenu: MutableMap = HashMap() + contenu.put("titre", titre) + contenu.put("contenu", texte) + return contenu + } +} \ No newline at end of file From 90bd1b0e5bc112a9661ed1de10ff32c6c36011d6 Mon Sep 17 00:00:00 2001 From: Siwa12100 Date: Wed, 20 Mar 2024 11:49:24 +0100 Subject: [PATCH 05/13] =?UTF-8?q?stub=20et=20datamanager=20bien=20impl?= =?UTF-8?q?=C3=A9ment=C3=A9=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/veraxapplication/MainActivity.kt | 36 +++++++++++++-- .../modele/IArticlesDataManager.kt | 2 + .../modele/articles/Article.kt | 20 ++++++--- .../modele/articles/StubArticles.kt | 45 ++++++++++++------- .../modele/articles/contenus/Contenu.kt | 2 +- .../modele/articles/contenus/ContenuMedia.kt | 20 ++++++--- .../articles/contenus/ContenuParagraphe.kt | 16 ++++--- 7 files changed, 102 insertions(+), 39 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index e227e0b..775033e 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -1,9 +1,11 @@ package com.example.veraxapplication +import android.os.Build import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.annotation.RequiresApi import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -48,6 +50,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.rememberImagePainter import coil.size.Scale +import com.example.veraxapplication.articles.IArticlesDataManager +import com.example.veraxapplication.articles.StubArticles import com.example.veraxapplication.data.Article import com.example.veraxapplication.data.Paragraph import com.example.veraxapplication.ui.theme.Salmon @@ -60,15 +64,41 @@ import com.example.veraxapplication.ui.theme.Salmon class MainActivity : ComponentActivity() { // un truc vite fait pour avoir un visi - var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") - var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) +// var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") +// var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) + + var dataManager : IArticlesDataManager = StubArticles() + var articles = dataManager.getDerniersArticles(4) + + + + + + + + var theme = listOf("Economique","Culture","Politique","Faits divers") var color = Color(0xFF00FF00) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - TopBarVerax(theme = theme, article = articles) + + // articles?.forEach({ a -> println(a)}) + + articles?.forEach({ a -> + Log.println(Log.ASSERT, "debug articles", a.toString()) + +// if (a != null) { +// a.contenus.forEach({cont -> +// +// Log.println(Log.ASSERT, "contenus de l'article " + a.id, cont.toString()) +// }) +// } +// }) + + + //TopBarVerax(theme = theme, article = articles) // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej } diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt index 3fe3fb9..1bdf6c9 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt @@ -1,5 +1,7 @@ package com.example.veraxapplication.articles +import com.example.veraxapplication.modele.articles.Article + interface IArticlesDataManager { val allArticles: List? diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt index d0cb0c8..d5b26e9 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/Article.kt @@ -1,7 +1,8 @@ -package com.example.veraxapplication.articles +package com.example.veraxapplication.modele.articles -class Article( +import com.example.veraxapplication.modele.articles.contenus.Contenu +class Article( val id: Int, val titre: String, val description: String, @@ -9,19 +10,24 @@ class Article( val date: String, val auteur: String, val imagePrincipale: String - ) { val note = 1.0 - private val lContenus: MutableList + private val lContenus: MutableList = java.util.ArrayList() init { - lContenus = java.util.ArrayList() + // Initialisation des contenus si nécessaire } fun remplirArticle(lContenus: List?) { - this.lContenus.addAll(lContenus!!) + if (lContenus != null) { + this.lContenus.addAll(lContenus) + } } val contenus: List get() = lContenus -} \ No newline at end of file + + override fun toString(): String { + return "Article(id=$id, titre='$titre', description='$description', temps='$temps', date='$date', auteur='$auteur', imagePrincipale='$imagePrincipale', note=$note, contenus=${lContenus.size} contenus)" + } +} diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt index 22f04e4..70f81e7 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt @@ -1,5 +1,15 @@ package com.example.veraxapplication.articles +import android.os.Build +import androidx.annotation.RequiresApi +import com.example.veraxapplication.modele.articles.Article +import com.example.veraxapplication.modele.articles.contenus.Contenu +import com.example.veraxapplication.modele.articles.contenus.ContenuMedia +import com.example.veraxapplication.modele.articles.contenus.ContenuParagraphe +import java.time.LocalDate +import kotlin.math.min + + class StubArticles() : IArticlesDataManager { private var lArticles: MutableList
? = null @@ -7,6 +17,7 @@ class StubArticles() : IArticlesDataManager { chargerArticles() } + private fun chargerArticles() { lArticles = java.util.ArrayList
() val contenuMap: Map> = chargerContenuParagraphe() @@ -17,7 +28,7 @@ class StubArticles() : IArticlesDataManager { "Thinkerview", "Thinkerview est une chaîne passionnante chaîne youtube d'interview-débat.", "3", - LocalDate.now().toString(), + "date a revoir", "Siwa", "https://cdn.discordapp.com/attachments/1150826798549049554/1219554341388816437/stub1.webp?ex=660bb97d&is=65f9447d&hm=3e1e8d3372ae897fa4e2aa1ec730d976d74b35fce96cb8d78d6f9239e2836564&" ) @@ -30,7 +41,7 @@ class StubArticles() : IArticlesDataManager { "Le réchauffement climatique : un mythe ?", "Revenons sur les différentes controverses à ce sujet.", "7", - LocalDate.now().toString(), + "date a revoir", "Siwa", "https://cdn.discordapp.com/attachments/1150826798549049554/1219555874339815454/stub2.webp?ex=660bbaea&is=65f945ea&hm=80aef945e8410b18395c716fdd19265608f7b1263731192d5c69f807fce9e944&" ) @@ -43,7 +54,7 @@ class StubArticles() : IArticlesDataManager { "La terre plate : vraiment ?", "Pour réfuter la fausse croyance que la Terre est plate, il est essentiel de s'appuyer sur des preuves scientifiques et des observations historiques. ", "5", - LocalDate.now().toString(), + "date a revoir", "Siwa", "https://cdn.discordapp.com/attachments/1150826798549049554/1219547864196317225/stub1.webp?ex=660bb374&is=65f93e74&hm=a9e5dd48faa3ae68c358309af8949c46dfd4dea9c4d6e3d845d707784e5341cf&" ) @@ -56,7 +67,7 @@ class StubArticles() : IArticlesDataManager { "L'ia & humanité : quel avenir ? ", "Explorons les progrès remarquables dans le domaine de l'IA, les secteurs qu'elle révolutionne, et les implications éthiques majeures qu'elle soulève.", "9", - LocalDate.now().toString(), + "date a revoir", "Luthen", "https://cdn.discordapp.com/attachments/1150826798549049554/1219560686254817290/stub1.webp?ex=660bbf65&is=65f94a65&hm=021bd8c90c89347f31373468cc7a03ae15f1d3f9988a5b4325149c6df938d7bb&" ) @@ -403,22 +414,26 @@ class StubArticles() : IArticlesDataManager { return contenuMap } - val allArticles: List? + override val allArticles: List
? // Assurez-vous que lArticles est bien une liste d'Article et non pas une liste de Any? get() = lArticles - fun getArticle(id: Int): Article { + override fun getArticle(id: Int): Article? { println("Passage dans getArticle avec comme id : $id") - println("Nombre d'articles disponibles : " + lArticles!!.size) - val articleARenvoyer: Article = lArticles.stream() - .filter(java.util.function.Predicate
{ article: Article -> article.getId() === id }).findFirst() - .orElse(null) - java.lang.System.out.println(articleARenvoyer) + lArticles?.let { + println("Nombre d'articles disponibles : ${it.size}") - // Article articleARenvoyer = this.lArticles.get(id); - return articleARenvoyer + val articleARenvoyer: Article? = it.find { article -> article.id == id } + println(articleARenvoyer) + + return articleARenvoyer + } + return null // Retourne null si lArticles est null } - fun getDerniersArticles(nbArticles: Int): List
{ - return lArticles!!.subList(0, min(nbArticles, lArticles!!.size)) + override fun getDerniersArticles(nbArticles: Int): List
? { + return lArticles?.let { + it.take(min(nbArticles, it.size)) + } } + } \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt index 48ae4b1..e9e9c04 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/Contenu.kt @@ -1,4 +1,4 @@ -package com.example.veraxapplication.articles.contenus +package com.example.veraxapplication.modele.articles.contenus abstract class Contenu(var id: Int) { diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt index 4406364..dae0f98 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt @@ -1,24 +1,30 @@ -package com.example.veraxapplication.articles.contenus +package com.example.veraxapplication.modele.articles.contenus class ContenuMedia(id: Int, var titre: String, var lien: String) : Contenu(id) { init { - setTypeContenu("image") + this.typeContenu = "image" } val contenu: Map get() { - val contenu: MutableMap = HashMap() - contenu.put("titre", titre) - contenu.put("contenu", lien) + val contenu: MutableMap = HashMap() + contenu["titre"] = titre + contenu["contenu"] = lien return contenu } companion object { + fun newVideo(id: Int, titre: String, lien: String): ContenuMedia { val temp = ContenuMedia(id, titre, lien) - temp.setTypeContenu("video") + + temp.typeContenu = "video" return temp } } -} \ No newline at end of file + + override fun toString(): String { + return "ContenuMedia(id=$id, typeContenu='$typeContenu', titre='$titre', lien='$lien')" + } +} diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt index 25a9671..45c36d5 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt @@ -1,16 +1,20 @@ -package com.example.veraxapplication.articles.contenus +package com.example.veraxapplication.modele.articles.contenus class ContenuParagraphe(id: Int, var titre: String, var texte: String) : Contenu(id) { init { - setTypeContenu("paragraphe") + this.typeContenu = "paragraphe" } val contenu: Map get() { - val contenu: MutableMap = HashMap() - contenu.put("titre", titre) - contenu.put("contenu", texte) + val contenu: MutableMap = HashMap() + contenu["titre"] = titre + contenu["contenu"] = texte return contenu } -} \ No newline at end of file + + override fun toString(): String { + return "ContenuParagraphe(id=$id, typeContenu='$typeContenu', titre='$titre', texte='$texte')" + } +} From 3b089e35f63d30d25d0ada20fc45d6c207d0b659 Mon Sep 17 00:00:00 2001 From: Siwa12100 Date: Wed, 20 Mar 2024 11:51:24 +0100 Subject: [PATCH 06/13] =?UTF-8?q?stub=20et=20datamanager=20bien=20impl?= =?UTF-8?q?=C3=A9ment=C3=A9=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/veraxapplication/MainActivity.kt | 302 +++++++++--------- 1 file changed, 149 insertions(+), 153 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index 775033e..370cd77 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -67,17 +67,11 @@ class MainActivity : ComponentActivity() { // var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") // var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) - var dataManager : IArticlesDataManager = StubArticles() + var dataManager: IArticlesDataManager = StubArticles() var articles = dataManager.getDerniersArticles(4) - - - - - - - var theme = listOf("Economique","Culture","Politique","Faits divers") + var theme = listOf("Economique", "Culture", "Politique", "Faits divers") var color = Color(0xFF00FF00) override fun onCreate(savedInstanceState: Bundle?) { @@ -88,185 +82,187 @@ class MainActivity : ComponentActivity() { articles?.forEach({ a -> Log.println(Log.ASSERT, "debug articles", a.toString()) - -// if (a != null) { -// a.contenus.forEach({cont -> -// -// Log.println(Log.ASSERT, "contenus de l'article " + a.id, cont.toString()) -// }) -// } -// }) - - - //TopBarVerax(theme = theme, article = articles) - // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej - + }) } } -} -// Il faudrait mettre ca dans un fichier appart mais je connais plus les conventions ... -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun TopBarVerax(theme : List, article : List
) { - var leMenu by remember { - mutableStateOf(false) - } - Row() { - Scaffold( - topBar = { - CenterAlignedTopAppBar( - title = { - Text( - text = "Verax", - style = TextStyle(fontSize = 35.sp), - color = colorResource(R.color.red), - textAlign = TextAlign.Center, - /*backcolor = topAppBarColors( + // Il faudrait mettre ca dans un fichier appart mais je connais plus les conventions ... + @OptIn(ExperimentalMaterial3Api::class) + @Composable + fun TopBarVerax(theme: List, article: List
) { + var leMenu by remember { + mutableStateOf(false) + } + Row() { + Scaffold( + topBar = { + CenterAlignedTopAppBar( + title = { + Text( + text = "Verax", + style = TextStyle(fontSize = 35.sp), + color = colorResource(R.color.red), + textAlign = TextAlign.Center, + /*backcolor = topAppBarColors( containerColor = MaterialTheme.colorScheme.primaryContainer),*/ //version recommandée par le prof - modifier = Modifier.fillMaxWidth() - ) - }, - navigationIcon = { - IconButton(onClick = { /* action() */ }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = "Retour", - Modifier.size(30.dp) + modifier = Modifier.fillMaxWidth() ) + }, + navigationIcon = { + IconButton(onClick = { /* action() */ }) { + Icon( + imageVector = Icons.Filled.ArrowBack, + contentDescription = "Retour", + Modifier.size(30.dp) + ) + } + }, + actions = { + IconButton(onClick = { leMenu = !leMenu }) { + Icon( + imageVector = Icons.Filled.Menu, + contentDescription = "Menu", + Modifier.size(35.dp) + ) + } + DropdownMenu( + expanded = leMenu, onDismissRequest = { leMenu = false }, + modifier = Modifier + .background(Color.hsl(0.08F, 1F, 0.96F)) + ) { + theme.sorted().forEach { + DropdownMenuItem( + text = { + Text( + it, + style = TextStyle(fontSize = 25.sp), + modifier = Modifier + .padding(10.dp) + ) + }, + onClick = { /* faut un moyen d'appeler une methode diff pour chaque, ca doit etre faisable facilement */ } + ) + } + } } - }, - actions = { - IconButton(onClick = { leMenu = !leMenu }) { + + ) + }, + bottomBar = { + // Faudrait pouvoir faire un flex sur les boutons parce que là ils sont juste côte à côte + BottomAppBar(containerColor = Color.Black, contentColor = Color.White) { + IconButton(onClick = { /*TODO*/ }) { Icon( - imageVector = Icons.Filled.Menu, - contentDescription = "Menu", + imageVector = Icons.Filled.Home, + contentDescription = "Home", Modifier.size(35.dp) ) } - DropdownMenu( - expanded = leMenu, onDismissRequest = { leMenu = false }, - modifier = Modifier - .background(Color.hsl(0.08F, 1F, 0.96F)) - ) { - theme.sorted().forEach { - DropdownMenuItem( - text = { - Text( - it, - style = TextStyle(fontSize = 25.sp), - modifier = Modifier - .padding(10.dp) - ) - }, - onClick = { /* faut un moyen d'appeler une methode diff pour chaque, ca doit etre faisable facilement */ } - ) - } + IconButton(onClick = { /*TODO*/ }) { + Icon( + imageVector = Icons.Filled.Person, + contentDescription = "Account", + Modifier.size(35.dp) + ) } } - - ) - }, - bottomBar = { - // Faudrait pouvoir faire un flex sur les boutons parce que là ils sont juste côte à côte - BottomAppBar(containerColor = Color.Black, contentColor = Color.White) { - IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Filled.Home, - contentDescription = "Home", - Modifier.size(35.dp) - ) - } - IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Filled.Person, - contentDescription = "Account", - Modifier.size(35.dp) - ) - } } - } - ) { innerPadding -> - Column( - modifier = Modifier - .padding(innerPadding), - verticalArrangement = Arrangement.spacedBy(16.dp), - ) { - AffichageUnArticle(article = article) + ) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + AffichageUnArticle(article = article) + } } } } -} -@Composable -fun AffichageUnArticle(article : List
){ - Column() { - for(e in article){ - DisplayTitle(title = e.Title) - DisplayHeader(author = e.Author, description = e.Description, lectureTime = e.LectureTime) - DisplayImage(image = e.Image) - DisplayContentArticle(content = e.Content) + @Composable + fun AffichageUnArticle(article: List
) { + Column() { + for (e in article) { + DisplayTitle(title = e.Title) + DisplayHeader( + author = e.Author, + description = e.Description, + lectureTime = e.LectureTime + ) + DisplayImage(image = e.Image) + DisplayContentArticle(content = e.Content) + } } } -} -@Composable -fun DisplayImage(image: String) { - Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") + @Composable + fun DisplayImage(image: String) { + Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") - val painter = rememberImagePainter( - data = image, - builder = { - scale(Scale.FILL) - } - ) + val painter = rememberImagePainter( + data = image, + builder = { + scale(Scale.FILL) + } + ) - Log.d("DisplayImage", "Painter créé avec succès") + Log.d("DisplayImage", "Painter créé avec succès") - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - androidx.compose.foundation.Image( - painter = painter, - contentDescription = null, + Box( modifier = Modifier.fillMaxSize(), - ) + contentAlignment = Alignment.Center + ) { + androidx.compose.foundation.Image( + painter = painter, + contentDescription = null, + modifier = Modifier.fillMaxSize(), + ) + } } -} - -@Composable -fun DisplayHeader(author: String, description: String, lectureTime: String) { - Box(modifier = Modifier - .fillMaxWidth() - .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) - .clip(RoundedCornerShape(10.dp)) - .background(Salmon) - .padding(10.dp)) { - Column () { - Text(text = author) - Text(text = description) - Text(text = "Lecture Time: " + lectureTime + " minutes") + @Composable + fun DisplayHeader(author: String, description: String, lectureTime: String) { + Box( + modifier = Modifier + .fillMaxWidth() + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)) + .background(Salmon) + .padding(10.dp) + ) { + Column() { + Text(text = author) + Text(text = description) + Text(text = "Lecture Time: " + lectureTime + " minutes") + } } } -} -@Composable -fun DisplayTitle(title: String) { - Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally){ - Text(text = title, fontFamily = FontFamily.Serif, fontSize = 30.sp) + @Composable + fun DisplayTitle(title: String) { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text(text = title, fontFamily = FontFamily.Serif, fontSize = 30.sp) + } } -} -@Composable -fun DisplayContentArticle(content: List) { - Column { - for(e in content){ - Text(text = e.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) + @Composable + fun DisplayContentArticle(content: List) { + Column { + for (e in content) { + Text( + text = e.Content, + fontSize = 15.sp, + fontFamily = FontFamily.Serif, + textAlign = TextAlign.Justify, + modifier = Modifier.padding(10.dp) + ) + } } } } From 6a414e37969feda255c18071570e4e6c7d431e56 Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Wed, 20 Mar 2024 11:52:06 +0100 Subject: [PATCH 07/13] =?UTF-8?q?R=C3=A9arrangement=20des=20dossiers=20+?= =?UTF-8?q?=20affiches=20des=20articles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/veraxapplication/MainActivity.kt | 217 +----------------- .../veraxapplication/ui/article/Article.kt | 143 ++++++++++++ .../veraxapplication/ui/topBar/TopBarVerax.kt | 132 +++++++++++ 3 files changed, 279 insertions(+), 213 deletions(-) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index e227e0b..1cff687 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -1,56 +1,12 @@ package com.example.veraxapplication import android.os.Bundle -import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Scaffold import androidx.compose.ui.graphics.Color -import androidx.compose.material3.Text -import androidx.compose.ui.res.colorResource - -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Home -import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Person -import androidx.compose.material3.BottomAppBar -import androidx.compose.material3.CenterAlignedTopAppBar -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -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.draw.clip -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import coil.compose.rememberImagePainter -import coil.size.Scale import com.example.veraxapplication.data.Article import com.example.veraxapplication.data.Paragraph -import com.example.veraxapplication.ui.theme.Salmon +import com.example.veraxapplication.ui.topBar.* // doc navBar: https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#TopAppBar(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,androidx.compose.material3.TopAppBarColors,androidx.compose.material3.TopAppBarScrollBehavior) // doc compose, pleins de trucs: https://developer.android.com/jetpack/compose/text?hl=fr //doc couleur background pas finie: https://developer.android.com/jetpack/compose/components/scaffold @@ -59,184 +15,19 @@ import com.example.veraxapplication.ui.theme.Salmon class MainActivity : ComponentActivity() { - // un truc vite fait pour avoir un visi + // un truc vite fait pour avoir un visu var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") - var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) + var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph"))), Article("Thinkerview2", "This is a descrition2", Author = "IAmAGreatAuthor2", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "122", Content = listOf(Paragraph("This is a paragraph2"), Paragraph("This is another paragraph2"), Paragraph("This is a third paragraph2")))) var theme = listOf("Economique","Culture","Politique","Faits divers") var color = Color(0xFF00FF00) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - TopBarVerax(theme = theme, article = articles) + TopBarVerax(theme = theme, articles = articles) // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej } } } -// Il faudrait mettre ca dans un fichier appart mais je connais plus les conventions ... -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun TopBarVerax(theme : List, article : List
) { - var leMenu by remember { - mutableStateOf(false) - } - Row() { - Scaffold( - topBar = { - CenterAlignedTopAppBar( - title = { - Text( - text = "Verax", - style = TextStyle(fontSize = 35.sp), - color = colorResource(R.color.red), - textAlign = TextAlign.Center, - /*backcolor = topAppBarColors( - containerColor = MaterialTheme.colorScheme.primaryContainer),*/ //version recommandée par le prof - modifier = Modifier.fillMaxWidth() - ) - }, - navigationIcon = { - IconButton(onClick = { /* action() */ }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = "Retour", - Modifier.size(30.dp) - ) - } - }, - actions = { - IconButton(onClick = { leMenu = !leMenu }) { - Icon( - imageVector = Icons.Filled.Menu, - contentDescription = "Menu", - Modifier.size(35.dp) - ) - } - DropdownMenu( - expanded = leMenu, onDismissRequest = { leMenu = false }, - modifier = Modifier - .background(Color.hsl(0.08F, 1F, 0.96F)) - ) { - theme.sorted().forEach { - DropdownMenuItem( - text = { - Text( - it, - style = TextStyle(fontSize = 25.sp), - modifier = Modifier - .padding(10.dp) - ) - }, - onClick = { /* faut un moyen d'appeler une methode diff pour chaque, ca doit etre faisable facilement */ } - ) - } - } - } - - ) - }, - bottomBar = { - // Faudrait pouvoir faire un flex sur les boutons parce que là ils sont juste côte à côte - BottomAppBar(containerColor = Color.Black, contentColor = Color.White) { - IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Filled.Home, - contentDescription = "Home", - Modifier.size(35.dp) - ) - } - IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Filled.Person, - contentDescription = "Account", - Modifier.size(35.dp) - ) - } - } - } - ) { innerPadding -> - Column( - modifier = Modifier - .padding(innerPadding), - verticalArrangement = Arrangement.spacedBy(16.dp), - ) { - AffichageUnArticle(article = article) - - } - } - } -} - - -@Composable -fun AffichageUnArticle(article : List
){ - Column() { - for(e in article){ - DisplayTitle(title = e.Title) - DisplayHeader(author = e.Author, description = e.Description, lectureTime = e.LectureTime) - DisplayImage(image = e.Image) - DisplayContentArticle(content = e.Content) - } - } -} - -@Composable -fun DisplayImage(image: String) { - Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") - - val painter = rememberImagePainter( - data = image, - builder = { - scale(Scale.FILL) - } - ) - - Log.d("DisplayImage", "Painter créé avec succès") - - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - androidx.compose.foundation.Image( - painter = painter, - contentDescription = null, - modifier = Modifier.fillMaxSize(), - ) - } -} - - - -@Composable -fun DisplayHeader(author: String, description: String, lectureTime: String) { - Box(modifier = Modifier - .fillMaxWidth() - .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) - .clip(RoundedCornerShape(10.dp)) - .background(Salmon) - .padding(10.dp)) { - Column () { - Text(text = author) - Text(text = description) - Text(text = "Lecture Time: " + lectureTime + " minutes") - } - } -} - -@Composable -fun DisplayTitle(title: String) { - Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally){ - Text(text = title, fontFamily = FontFamily.Serif, fontSize = 30.sp) - } -} - -@Composable -fun DisplayContentArticle(content: List) { - Column { - for(e in content){ - Text(text = e.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) - } - } -} diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt new file mode 100644 index 0000000..5d67d43 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -0,0 +1,143 @@ +package com.example.veraxapplication.ui.article + +import android.util.Log +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box +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.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import coil.compose.rememberImagePainter +import coil.size.Scale +import com.example.veraxapplication.data.Article +import com.example.veraxapplication.data.Paragraph +import com.example.veraxapplication.ui.theme.Salmon + +@Composable +fun AffichageLesArticles(articles : List
){ + //Row(modifier = Modifier.verticalScroll(rememberScrollState())){ + for(article in articles){ + AffichageUnArticle(e = article) + } + //} + +} +@Composable +fun AffichageUnArticle(e : Article){ + Column( modifier = Modifier.verticalScroll(rememberScrollState())) { + /*DisplayTitle(title = e.Title) + DisplayHeader(author = e.Author, description = e.Description, lectureTime = e.LectureTime) + DisplayImage(image = e.Image) + DisplayContentArticle(content = e.Content)*/ + + + + Text(text = e.Title, fontFamily = FontFamily.Serif, fontSize = 30.sp) + + Box(modifier = Modifier + .fillMaxWidth() + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)) + .background(Salmon) + .padding(10.dp)) { + Column () { + Text(text = e.Author) + Text(text = e.Description) + Text(text = "Lecture Time: " + e.LectureTime + " minutes") + } + } + Image( + painter = rememberImagePainter( + data = e.Image, + builder = { + scale(Scale.FILL) + } + ), + contentDescription = null, + modifier = Modifier.size(250.dp), + ) + + + Column { + for(c in e.Content){ + Text(text = c.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) + } + } + + } +} + +@Composable +fun DisplayImage(image: String) { + Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") + + Log.d("DisplayImage", "Painter créé avec succès") + + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Image( + painter = rememberImagePainter( + data = image, + builder = { + scale(Scale.FILL) + } + ), + contentDescription = null, + modifier = Modifier.fillMaxSize(), + ) + } +} + + + +@Composable +fun DisplayHeader(author: String, description: String, lectureTime: String) { + Box(modifier = Modifier + .fillMaxWidth() + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)) + .background(Salmon) + .padding(10.dp)) { + Column () { + Text(text = author) + Text(text = description) + Text(text = "Lecture Time: " + lectureTime + " minutes") + } + } +} + +@Composable +fun DisplayTitle(title: String) { + Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally){ + Text(text = title, fontFamily = FontFamily.Serif, fontSize = 30.sp) + } +} + +@Composable +fun DisplayContentArticle(content: List) { + Column { + for(e in content){ + Text(text = e.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) + } + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt new file mode 100644 index 0000000..8c15fda --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt @@ -0,0 +1,132 @@ +package com.example.veraxapplication.ui.topBar + +import androidx.compose.foundation.background +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.foundation.layout.size +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.Menu +import androidx.compose.material.icons.filled.Person +import androidx.compose.material3.BottomAppBar +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.veraxapplication.R +import com.example.veraxapplication.data.Article +import com.example.veraxapplication.ui.article.* + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TopBarVerax(theme : List, articles : List
) { + var leMenu by remember { + mutableStateOf(false) + } + Row() { + Scaffold( + topBar = { + CenterAlignedTopAppBar( + title = { + Text( + text = "Verax", + style = TextStyle(fontSize = 35.sp), + color = colorResource(R.color.red), + textAlign = TextAlign.Center, + /*backcolor = topAppBarColors( + containerColor = MaterialTheme.colorScheme.primaryContainer),*/ //version recommandée par le prof + modifier = Modifier.fillMaxWidth() + ) + }, + navigationIcon = { + IconButton(onClick = { /* action() */ }) { + Icon( + imageVector = Icons.Filled.ArrowBack, + contentDescription = "Retour", + Modifier.size(30.dp) + ) + } + }, + actions = { + IconButton(onClick = { leMenu = !leMenu }) { + Icon( + imageVector = Icons.Filled.Menu, + contentDescription = "Menu", + Modifier.size(35.dp) + ) + } + DropdownMenu( + expanded = leMenu, onDismissRequest = { leMenu = false }, + modifier = Modifier + .background(Color.hsl(0.08F, 1F, 0.96F)) + ) { + theme.sorted().forEach { + DropdownMenuItem( + text = { + Text( + it, + style = TextStyle(fontSize = 25.sp), + modifier = Modifier + .padding(10.dp) + ) + }, + onClick = { /* faut un moyen d'appeler une methode diff pour chaque, ca doit etre faisable facilement */ } + ) + } + } + } + + ) + }/*, + bottomBar = { + // Faudrait pouvoir faire un flex sur les boutons parce que là ils sont juste côte à côte + BottomAppBar(containerColor = Color.Black, contentColor = Color.White) { + IconButton(onClick = { /*TODO*/ }) { + Icon( + imageVector = Icons.Filled.Home, + contentDescription = "Home", + Modifier.size(35.dp) + ) + } + IconButton(onClick = { /*TODO*/ }) { + Icon( + imageVector = Icons.Filled.Person, + contentDescription = "Account", + Modifier.size(35.dp) + ) + } + } + }*/ + ) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + + AffichageLesArticles(articles = articles) + + } + } + } +} \ No newline at end of file From 8d589d91462734f0f04bb4046f7b5682ace985cd Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Wed, 20 Mar 2024 12:02:44 +0100 Subject: [PATCH 08/13] Adaptation avec le modele --- .../example/veraxapplication/MainActivity.kt | 203 +----------------- .../veraxapplication/ui/article/Article.kt | 8 +- 2 files changed, 14 insertions(+), 197 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index f7bf62d..d348bc1 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -2,13 +2,12 @@ package com.example.veraxapplication import android.os.Build import android.os.Bundle +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -<<<<<<< HEAD +import com.example.veraxapplication.ui.theme.Salmon + import androidx.compose.ui.graphics.Color -======= -import androidx.annotation.RequiresApi -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement @@ -20,7 +19,6 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold -import androidx.compose.ui.graphics.Color import androidx.compose.material3.Text import androidx.compose.ui.res.colorResource @@ -60,6 +58,7 @@ import com.example.veraxapplication.articles.StubArticles import com.example.veraxapplication.data.Article import com.example.veraxapplication.data.Paragraph import com.example.veraxapplication.ui.topBar.* + // doc navBar: https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#TopAppBar(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,androidx.compose.material3.TopAppBarColors,androidx.compose.material3.TopAppBarScrollBehavior) // doc compose, pleins de trucs: https://developer.android.com/jetpack/compose/text?hl=fr //doc couleur background pas finie: https://developer.android.com/jetpack/compose/components/scaffold @@ -71,10 +70,10 @@ class MainActivity : ComponentActivity() { // un truc vite fait pour avoir un visi // var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") -// var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) + var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph"))), Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) var dataManager: IArticlesDataManager = StubArticles() - var articles = dataManager.getDerniersArticles(4) + //var articles = dataManager.getDerniersArticles(4) var theme = listOf("Economique", "Culture", "Politique", "Faits divers") @@ -84,196 +83,14 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) setContent { - // TopBarVerax(theme = theme, articles = articles) + TopBarVerax(theme = theme, articles = articles) // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej // articles?.forEach({ a -> println(a)}) - articles?.forEach({ a -> + /*articles?.forEach({ a -> Log.println(Log.ASSERT, "debug articles", a.toString()) - }) - } - } - - - // Il faudrait mettre ca dans un fichier appart mais je connais plus les conventions ... - @OptIn(ExperimentalMaterial3Api::class) - @Composable - fun TopBarVerax(theme: List, article: List
) { - var leMenu by remember { - mutableStateOf(false) - } - Row() { - Scaffold( - topBar = { - CenterAlignedTopAppBar( - title = { - Text( - text = "Verax", - style = TextStyle(fontSize = 35.sp), - color = colorResource(R.color.red), - textAlign = TextAlign.Center, - /*backcolor = topAppBarColors( - containerColor = MaterialTheme.colorScheme.primaryContainer),*/ //version recommandée par le prof - modifier = Modifier.fillMaxWidth() - ) - }, - navigationIcon = { - IconButton(onClick = { /* action() */ }) { - Icon( - imageVector = Icons.Filled.ArrowBack, - contentDescription = "Retour", - Modifier.size(30.dp) - ) - } - }, - actions = { - IconButton(onClick = { leMenu = !leMenu }) { - Icon( - imageVector = Icons.Filled.Menu, - contentDescription = "Menu", - Modifier.size(35.dp) - ) - } - DropdownMenu( - expanded = leMenu, onDismissRequest = { leMenu = false }, - modifier = Modifier - .background(Color.hsl(0.08F, 1F, 0.96F)) - ) { - theme.sorted().forEach { - DropdownMenuItem( - text = { - Text( - it, - style = TextStyle(fontSize = 25.sp), - modifier = Modifier - .padding(10.dp) - ) - }, - onClick = { /* faut un moyen d'appeler une methode diff pour chaque, ca doit etre faisable facilement */ } - ) - } - } - } - - ) - }, - bottomBar = { - // Faudrait pouvoir faire un flex sur les boutons parce que là ils sont juste côte à côte - BottomAppBar(containerColor = Color.Black, contentColor = Color.White) { - IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Filled.Home, - contentDescription = "Home", - Modifier.size(35.dp) - ) - } - IconButton(onClick = { /*TODO*/ }) { - Icon( - imageVector = Icons.Filled.Person, - contentDescription = "Account", - Modifier.size(35.dp) - ) - } - } - } - ) { innerPadding -> - Column( - modifier = Modifier - .padding(innerPadding), - verticalArrangement = Arrangement.spacedBy(16.dp), - ) { - AffichageUnArticle(article = article) - - } - } - } - } - - - @Composable - fun AffichageUnArticle(article: List
) { - Column() { - for (e in article) { - DisplayTitle(title = e.Title) - DisplayHeader( - author = e.Author, - description = e.Description, - lectureTime = e.LectureTime - ) - DisplayImage(image = e.Image) - DisplayContentArticle(content = e.Content) - } + })*/ } } - - @Composable - fun DisplayImage(image: String) { - Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") - - val painter = rememberImagePainter( - data = image, - builder = { - scale(Scale.FILL) - } - ) - - Log.d("DisplayImage", "Painter créé avec succès") - - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - androidx.compose.foundation.Image( - painter = painter, - contentDescription = null, - modifier = Modifier.fillMaxSize(), - ) - } - } - - - @Composable - fun DisplayHeader(author: String, description: String, lectureTime: String) { - Box( - modifier = Modifier - .fillMaxWidth() - .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) - .clip(RoundedCornerShape(10.dp)) - .background(Salmon) - .padding(10.dp) - ) { - Column() { - Text(text = author) - Text(text = description) - Text(text = "Lecture Time: " + lectureTime + " minutes") - } - } - } - - @Composable - fun DisplayTitle(title: String) { - Column( - modifier = Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text(text = title, fontFamily = FontFamily.Serif, fontSize = 30.sp) - } - } - - @Composable - fun DisplayContentArticle(content: List) { - Column { - for (e in content) { - Text( - text = e.Content, - fontSize = 15.sp, - fontFamily = FontFamily.Serif, - textAlign = TextAlign.Justify, - modifier = Modifier.padding(10.dp) - ) - } - } - } -} - +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt index 5d67d43..852b767 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -33,16 +33,16 @@ import com.example.veraxapplication.ui.theme.Salmon @Composable fun AffichageLesArticles(articles : List
){ - //Row(modifier = Modifier.verticalScroll(rememberScrollState())){ + Column(modifier = Modifier.verticalScroll(rememberScrollState())){ for(article in articles){ AffichageUnArticle(e = article) } - //} - + } } + @Composable fun AffichageUnArticle(e : Article){ - Column( modifier = Modifier.verticalScroll(rememberScrollState())) { + Column() { /*DisplayTitle(title = e.Title) DisplayHeader(author = e.Author, description = e.Description, lectureTime = e.LectureTime) DisplayImage(image = e.Image) From 3dbe1afa2572b12006d516bc7503262e00332fda Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Wed, 20 Mar 2024 19:23:00 +0100 Subject: [PATCH 09/13] Le modele marche ! --- .../example/veraxapplication/MainActivity.kt | 54 ++----------------- .../example/veraxapplication/data/Article.kt | 3 +- .../veraxapplication/data/Paragraph.kt | 3 +- .../modele/IArticlesDataManager.kt | 2 +- .../modele/articles/StubArticles.kt | 6 +-- .../veraxapplication/ui/article/Article.kt | 31 +++++------ .../veraxapplication/ui/topBar/TopBarVerax.kt | 9 ++-- 7 files changed, 26 insertions(+), 82 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index d348bc1..f107ad8 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -1,62 +1,14 @@ package com.example.veraxapplication -import android.os.Build import android.os.Bundle -import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import com.example.veraxapplication.ui.theme.Salmon import androidx.compose.ui.graphics.Color -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.ui.res.colorResource - -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Home -import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Person -import androidx.compose.material3.BottomAppBar -import androidx.compose.material3.CenterAlignedTopAppBar -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -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.draw.clip -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import coil.compose.rememberImagePainter -import coil.size.Scale + import com.example.veraxapplication.articles.IArticlesDataManager import com.example.veraxapplication.articles.StubArticles - - -import com.example.veraxapplication.data.Article -import com.example.veraxapplication.data.Paragraph import com.example.veraxapplication.ui.topBar.* // doc navBar: https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#TopAppBar(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,androidx.compose.material3.TopAppBarColors,androidx.compose.material3.TopAppBarScrollBehavior) @@ -70,10 +22,10 @@ class MainActivity : ComponentActivity() { // un truc vite fait pour avoir un visi // var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat") - var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph"))), Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) + //var articles = listOf( Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph"))), Article("Thinkerview", "This is a descrition", Author = "IAmAGreatAuthor", Image = "https://www.gstatic.com/webp/gallery/1.jpg", LectureTime = "12", Content = listOf(Paragraph("This is a paragraph"), Paragraph("This is another paragraph"), Paragraph("This is a third paragraph")))) var dataManager: IArticlesDataManager = StubArticles() - //var articles = dataManager.getDerniersArticles(4) + var articles = dataManager.getDerniersArticles(4) var theme = listOf("Economique", "Culture", "Politique", "Faits divers") diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt index ddbbbe1..c5c9a74 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Article.kt @@ -1,5 +1,5 @@ package com.example.veraxapplication.data - +/* data class Article( var Title : String, var Description : String, @@ -8,3 +8,4 @@ data class Article( var Content : List, var LectureTime : String ) +*/ \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt index 8f4a51c..622a37a 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/data/Paragraph.kt @@ -1,5 +1,6 @@ package com.example.veraxapplication.data - +/* data class Paragraph( var Content : String, ) +*/ \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt index 1bdf6c9..f6f4a1d 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/IArticlesDataManager.kt @@ -7,5 +7,5 @@ interface IArticlesDataManager { val allArticles: List? fun getArticle(id: Int): Article? - fun getDerniersArticles(nbArticles: Int): List? + fun getDerniersArticles(nbArticles: Int): List
} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt index 70f81e7..a0c66ca 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt @@ -430,10 +430,8 @@ class StubArticles() : IArticlesDataManager { return null // Retourne null si lArticles est null } - override fun getDerniersArticles(nbArticles: Int): List
? { - return lArticles?.let { - it.take(min(nbArticles, it.size)) - } + override fun getDerniersArticles(nbArticles: Int): List
{ + return lArticles?.takeIf { it.isNotEmpty() }?.take(nbArticles) ?: emptyList() } } \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt index 852b767..794e9f2 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -1,14 +1,10 @@ package com.example.veraxapplication.ui.article -import android.util.Log import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box 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.padding import androidx.compose.foundation.layout.size @@ -17,18 +13,15 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.rememberImagePainter import coil.size.Scale -import com.example.veraxapplication.data.Article -import com.example.veraxapplication.data.Paragraph +import com.example.veraxapplication.modele.articles.Article import com.example.veraxapplication.ui.theme.Salmon @Composable @@ -50,7 +43,7 @@ fun AffichageUnArticle(e : Article){ - Text(text = e.Title, fontFamily = FontFamily.Serif, fontSize = 30.sp) + Text(text = e.titre, fontFamily = FontFamily.Serif, fontSize = 30.sp) Box(modifier = Modifier .fillMaxWidth() @@ -59,14 +52,14 @@ fun AffichageUnArticle(e : Article){ .background(Salmon) .padding(10.dp)) { Column () { - Text(text = e.Author) - Text(text = e.Description) - Text(text = "Lecture Time: " + e.LectureTime + " minutes") + Text(text = e.auteur) + Text(text = e.description) + Text(text = "Lecture Time: " + e.temps + " minutes") } } Image( painter = rememberImagePainter( - data = e.Image, + data = e.imagePrincipale, builder = { scale(Scale.FILL) } @@ -75,16 +68,18 @@ fun AffichageUnArticle(e : Article){ modifier = Modifier.size(250.dp), ) - + /* Column { - for(c in e.Content){ - Text(text = c.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) + for(c in e.contenus){ + Text(text = c.toString(), fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) } } + */ } } +/* @Composable fun DisplayImage(image: String) { Log.d("DisplayImage", "Chargement de l'image à partir de l'URL : $image") @@ -134,10 +129,10 @@ fun DisplayTitle(title: String) { } @Composable -fun DisplayContentArticle(content: List) { +fun DisplayContentArticle(content: List) { Column { for(e in content){ Text(text = e.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) } } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt index 8c15fda..e210370 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt @@ -9,10 +9,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Person -import androidx.compose.material3.BottomAppBar import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -34,12 +31,12 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.veraxapplication.R -import com.example.veraxapplication.data.Article -import com.example.veraxapplication.ui.article.* +import com.example.veraxapplication.modele.articles.Article +import com.example.veraxapplication.ui.article.AffichageLesArticles @OptIn(ExperimentalMaterial3Api::class) @Composable -fun TopBarVerax(theme : List, articles : List
) { +fun TopBarVerax(theme: List, articles: List
) { var leMenu by remember { mutableStateOf(false) } From f874d363aad545a261fa092af1efcc6586601078 Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Thu, 21 Mar 2024 23:55:21 +0100 Subject: [PATCH 10/13] Re arangement du visu --- .../veraxapplication/ui/article/Article.kt | 36 ++++++++++++------- .../veraxapplication/ui/theme/Color.kt | 2 +- .../veraxapplication/ui/theme/Theme.kt | 2 +- .../veraxapplication/ui/topBar/TopBarVerax.kt | 6 +++- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt index 794e9f2..e9fca3a 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -3,6 +3,7 @@ package com.example.veraxapplication.ui.article import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -13,9 +14,11 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -28,14 +31,20 @@ import com.example.veraxapplication.ui.theme.Salmon fun AffichageLesArticles(articles : List
){ Column(modifier = Modifier.verticalScroll(rememberScrollState())){ for(article in articles){ - AffichageUnArticle(e = article) + Box (Modifier.clickable { /*faut je regarde la doc*/ }){ + AffichageUnArticle(e = article) + } + } } } @Composable fun AffichageUnArticle(e : Article){ - Column() { + Column(modifier = Modifier + .padding(7.dp) + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .padding(5.dp)) { /*DisplayTitle(title = e.Title) DisplayHeader(author = e.Author, description = e.Description, lectureTime = e.LectureTime) DisplayImage(image = e.Image) @@ -46,26 +55,27 @@ fun AffichageUnArticle(e : Article){ Text(text = e.titre, fontFamily = FontFamily.Serif, fontSize = 30.sp) Box(modifier = Modifier - .fillMaxWidth() + .padding(15.dp) .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) .clip(RoundedCornerShape(10.dp)) .background(Salmon) - .padding(10.dp)) { - Column () { - Text(text = e.auteur) - Text(text = e.description) - Text(text = "Lecture Time: " + e.temps + " minutes") + ) { + Column (modifier = Modifier.padding(15.dp)) { + Text(text = e.auteur, fontSize = 17.sp) + Text(text = e.description, fontSize = 17.sp) + Text(text = "Lecture Time: " + e.temps + " minutes", fontSize = 17.sp) } } Image( painter = rememberImagePainter( - data = e.imagePrincipale, - builder = { - scale(Scale.FILL) - } + data = e.imagePrincipale ), + contentScale = ContentScale.Crop, contentDescription = null, - modifier = Modifier.size(250.dp), + modifier = Modifier + .size(350.dp) + .align(Alignment.CenterHorizontally) + .padding(5.dp, 35.dp) ) /* diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt index a2952b8..cbf700e 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Color.kt @@ -8,5 +8,5 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) +val Orange = Color(0xFFFADCD1) val Salmon = Color(0xFFE9967A) \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt index 903147c..53df8c9 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt @@ -24,7 +24,7 @@ private val DarkColorScheme = darkColorScheme( private val LightColorScheme = lightColorScheme( primary = Purple40, secondary = PurpleGrey40, - tertiary = Pink40 + tertiary = Salmon /* Other default colors to override background = Color(0xFFFFFBFE), diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt index e210370..e8b2d7b 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt @@ -1,12 +1,14 @@ package com.example.veraxapplication.ui.topBar import androidx.compose.foundation.background +import androidx.compose.foundation.border 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.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.Menu @@ -33,6 +35,7 @@ import androidx.compose.ui.unit.sp import com.example.veraxapplication.R import com.example.veraxapplication.modele.articles.Article import com.example.veraxapplication.ui.article.AffichageLesArticles +import com.example.veraxapplication.ui.theme.Orange @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -75,7 +78,8 @@ fun TopBarVerax(theme: List, articles: List
) { DropdownMenu( expanded = leMenu, onDismissRequest = { leMenu = false }, modifier = Modifier - .background(Color.hsl(0.08F, 1F, 0.96F)) + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .background(Orange) ) { theme.sorted().forEach { DropdownMenuItem( From 2c6f66eabdf6f25c660b32240a8df1e63b99cf7c Mon Sep 17 00:00:00 2001 From: tonyfages Date: Fri, 22 Mar 2024 17:38:15 +0100 Subject: [PATCH 11/13] implementation api start --- Android/VeraxApplication/app/build.gradle.kts | 6 +++++ .../app/src/main/AndroidManifest.xml | 3 ++- .../example/veraxapplication/MainActivity.kt | 11 ++++++---- .../veraxapplication/modele/ApiClient.kt | 22 +++++++++++++++++++ .../veraxapplication/modele/ApiService.kt | 10 +++++++++ .../veraxapplication/ui/article/Article.kt | 7 +++--- 6 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClient.kt create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiService.kt diff --git a/Android/VeraxApplication/app/build.gradle.kts b/Android/VeraxApplication/app/build.gradle.kts index 114550b..8998151 100644 --- a/Android/VeraxApplication/app/build.gradle.kts +++ b/Android/VeraxApplication/app/build.gradle.kts @@ -51,6 +51,11 @@ android { dependencies { + // Retrofit + implementation ("com.squareup.retrofit2:retrofit:2.9.0") + implementation ("com.squareup.retrofit2:converter-gson:2.9.0") + + implementation("androidx.core:core-ktx:1.10.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") implementation("androidx.activity:activity-compose:1.7.0") @@ -59,6 +64,7 @@ dependencies { implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") + implementation("com.google.firebase:firebase-crashlytics-buildtools:2.9.9") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") diff --git a/Android/VeraxApplication/app/src/main/AndroidManifest.xml b/Android/VeraxApplication/app/src/main/AndroidManifest.xml index cb87384..9088017 100644 --- a/Android/VeraxApplication/app/src/main/AndroidManifest.xml +++ b/Android/VeraxApplication/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + xmlns:tools="http://schemas.android.com/tools" + > println(a)}) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClient.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClient.kt new file mode 100644 index 0000000..c7c58f3 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiClient.kt @@ -0,0 +1,22 @@ +package com.example.veraxapplication.modele + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +object RetrofitClient { + + private const val BASE_URL = "http://181.214.189.133:9092/" + + val retrofit: Retrofit by lazy { + Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } +} + +object ApiClient { + val apiService: ApiService by lazy { + RetrofitClient.retrofit.create(ApiService::class.java) + } +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiService.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiService.kt new file mode 100644 index 0000000..7ec370e --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/ApiService.kt @@ -0,0 +1,10 @@ +package com.example.veraxapplication.modele + +import com.example.veraxapplication.modele.articles.Article +import retrofit2.Call +import retrofit2.http.GET + +interface ApiService { + @GET("articles/") + fun getArticles(): Call> +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt index e9fca3a..b10a322 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState @@ -20,10 +19,10 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.rememberImagePainter -import coil.size.Scale import com.example.veraxapplication.modele.articles.Article import com.example.veraxapplication.ui.theme.Salmon @@ -78,13 +77,13 @@ fun AffichageUnArticle(e : Article){ .padding(5.dp, 35.dp) ) - /* + Column { for(c in e.contenus){ Text(text = c.toString(), fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) } } - */ + } } From c2abb90896ec49972f2e0e4cb5b64d6a54b97b2a Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Sun, 24 Mar 2024 23:16:45 +0100 Subject: [PATCH 12/13] Ajout du bouton, je regarde la doc pour voir comment on navigue ... --- .../veraxapplication/ui/article/Article.kt | 21 ++++++++++++------- .../veraxapplication/ui/theme/Theme.kt | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt index b10a322..ea6aee0 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -1,5 +1,6 @@ package com.example.veraxapplication.ui.article +import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -11,6 +12,8 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -76,15 +79,19 @@ fun AffichageUnArticle(e : Article){ .align(Alignment.CenterHorizontally) .padding(5.dp, 35.dp) ) - - - Column { - for(c in e.contenus){ - Text(text = c.toString(), fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp)) - } + + Button(onClick = { /*TODO*/ }, + colors = ButtonDefaults.buttonColors( + containerColor = Salmon, + contentColor = Color.Black + ), + border = BorderStroke(1.dp, Color.Black), + modifier = Modifier + .align(Alignment.CenterHorizontally) + ) { + Text(text = "Voir plus") } - } } diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt index 53df8c9..b91ef74 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/theme/Theme.kt @@ -22,7 +22,7 @@ private val DarkColorScheme = darkColorScheme( ) private val LightColorScheme = lightColorScheme( - primary = Purple40, + primary = Salmon, secondary = PurpleGrey40, tertiary = Salmon From 2818828c3c043282ed708fa5bd805a2a30512751 Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Wed, 27 Mar 2024 00:30:31 +0100 Subject: [PATCH 13/13] Page d'affichage d'1 article --- Android/VeraxApplication/app/build.gradle.kts | 4 + .../example/veraxapplication/MainActivity.kt | 15 ++-- .../modele/articles/StubArticles.kt | 52 ++++++------ .../modele/articles/contenus/ContenuMedia.kt | 2 +- .../articles/contenus/ContenuParagraphe.kt | 2 +- .../navigation/VeraxNavHost.kt | 24 ++++++ .../veraxapplication/ui/article/Article.kt | 85 +++++++++++++++++-- .../veraxapplication/ui/topBar/TopBarVerax.kt | 3 + 8 files changed, 145 insertions(+), 42 deletions(-) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/navigation/VeraxNavHost.kt diff --git a/Android/VeraxApplication/app/build.gradle.kts b/Android/VeraxApplication/app/build.gradle.kts index 8998151..f7d95bb 100644 --- a/Android/VeraxApplication/app/build.gradle.kts +++ b/Android/VeraxApplication/app/build.gradle.kts @@ -59,12 +59,15 @@ dependencies { implementation("androidx.core:core-ktx:1.10.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") implementation("androidx.activity:activity-compose:1.7.0") + implementation("androidx.navigation:navigation-compose:2.4.0-alpha08") + implementation(platform("androidx.compose:compose-bom:2023.08.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") implementation("com.google.firebase:firebase-crashlytics-buildtools:2.9.9") + implementation("androidx.navigation:navigation-compose:2.8.0-alpha05") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") @@ -75,4 +78,5 @@ dependencies { implementation("io.coil-kt:coil-compose:1.4.0") + } \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt index aaf4b49..babcbb2 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/MainActivity.kt @@ -7,6 +7,9 @@ import androidx.compose.ui.graphics.Color import com.example.veraxapplication.articles.IArticlesDataManager import com.example.veraxapplication.articles.StubArticles import com.example.veraxapplication.modele.ApiClient +import com.example.veraxapplication.modele.articles.Article +import com.example.veraxapplication.navigation.VeraxNavHost +import com.example.veraxapplication.ui.article.AfficherArticle import com.example.veraxapplication.ui.topBar.TopBarVerax // doc navBar: https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#TopAppBar(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1,androidx.compose.foundation.layout.WindowInsets,androidx.compose.material3.TopAppBarColors,androidx.compose.material3.TopAppBarScrollBehavior) @@ -28,7 +31,6 @@ class MainActivity : ComponentActivity() { var theme = listOf("Economique", "Culture", "Politique", "Faits divers") - var color = Color(0xFF00FF00) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -36,16 +38,11 @@ class MainActivity : ComponentActivity() { //TopBarVerax(theme = theme, articles = articlesApi) - TopBarVerax(theme = theme, articles = articles) + // TopBarVerax(theme = theme, articles = articles) + VeraxNavHost() - // allez sur la doc de Scaffold sur Android Dev et si vous comprenez comment on doit faire bien ouej - - // articles?.forEach({ a -> println(a)}) - - /*articles?.forEach({ a -> - Log.println(Log.ASSERT, "debug articles", a.toString()) - })*/ } } + } \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt index a0c66ca..3335819 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/StubArticles.kt @@ -88,12 +88,12 @@ class StubArticles() : IArticlesDataManager { article1Contenus.add( ContenuParagraphe( 1, "Le mystérieux cygne noir.", - "Sous les traits d’un mystérieux cygne noir, un objet vidéo non identifié plane dans la galaxie \n" + - " médiatique. Ambiance Star Wars. Après une musique lancinante, sur fond noir et fumée grisâtre,\n" + - " un invité apparaît, et la voix d’un intervieweur-mystère situé hors champ l’invite à se\n" + - " présenter « succinctement ». C’est ainsi qu’on entre dans le monde de ThinkerView, \n" + - " chaîne qui a commencé à diffuser en janvier 2013 sur YouTube. Ici, pas de publicité,\n" + - " pas de montage, pas d’effets de lumière. Le calme, peut-être pour annoncer la tempête." + "Sous les traits d’un mystérieux cygne noir, un objet vidéo non identifié plane dans la galaxie " + + " médiatique. Ambiance Star Wars. Après une musique lancinante, sur fond noir et fumée grisâtre," + + " un invité apparaît, et la voix d’un intervieweur-mystère situé hors champ l’invite à se" + + " présenter « succinctement ». C’est ainsi qu’on entre dans le monde de ThinkerView," + + " chaîne qui a commencé à diffuser en janvier 2013 sur YouTube. Ici, pas de publicité," + + " pas de montage, pas d’effets de lumière. Le calme, peut-être pour annoncer la tempête." ) ) article1Contenus.add( @@ -106,14 +106,14 @@ class StubArticles() : IArticlesDataManager { article1Contenus.add( ContenuParagraphe( 2, "Penser, réfléchir et s'exprimer librement.", - ("Dernier carton en date : un entretien de deux heures avec Juan Branco, l’avocat du gilet \n" + - " jaune Maxime Nicolle et « conseiller juridique » de Wikileaks. Quelques jours avant lui,\n" + - " c’était au tour de François Boulo, autre avocat inscrit au barreau de Rouen et l’un des\n" + - " porte-parole des « gilets jaunes ». « Ici, les gens ont vraiment le temps de développer \n" + - " leurs idées, confie Boulo. Il faut pouvoir écouter une pensée complète, sans être interrompu.\n" + - " » Aux yeux de ce fils d’une famille de droite populaire (paysans et commerçants), ThinkerView \n" + - " a réalisé ce dont Pierre Bourdieu avait rêvé. S’il s’abreuve à cette source depuis « un an ou \n" + - " deux », en réalité, ce n’est pas lui qui l’a trouvée, mais l’inverse. Magie des algorithmes.") + ("Dernier carton en date : un entretien de deux heures avec Juan Branco, l’avocat du gilet" + + " jaune Maxime Nicolle et « conseiller juridique » de Wikileaks. Quelques jours avant lui," + + " c’était au tour de François Boulo, autre avocat inscrit au barreau de Rouen et l’un des" + + " porte-parole des « gilets jaunes ». « Ici, les gens ont vraiment le temps de développer" + + " leurs idées, confie Boulo. Il faut pouvoir écouter une pensée complète, sans être interrompu." + + " » Aux yeux de ce fils d’une famille de droite populaire (paysans et commerçants), ThinkerView" + + " a réalisé ce dont Pierre Bourdieu avait rêvé. S’il s’abreuve à cette source depuis « un an ou" + + " deux », en réalité, ce n’est pas lui qui l’a trouvée, mais l’inverse. Magie des algorithmes.") ) ) article1Contenus.add( @@ -126,19 +126,19 @@ class StubArticles() : IArticlesDataManager { article1Contenus.add( ContenuParagraphe( 3, "Une alternative dans un monde aux informations formatées", - ("\\\"Nous faisons des interviews aux perspectives alternatives dans un monde aux informations formatées\\\",\n" + - " explique le site Thinkerview. La marque a adopté un cygne noir comme logo, un clin d'œil à la théorie \n" + - " du cygne noir (expliquée dans cet article de Challenges), soit un événement qui a peu de \n" + - " chances de se produire mais qui, s'il se produit, a des conséquences considérables.\n" + + ("\\\"Nous faisons des interviews aux perspectives alternatives dans un monde aux informations formatées\\\"," + + " explique le site Thinkerview. La marque a adopté un cygne noir comme logo, un clin d'œil à la théorie" + + " du cygne noir (expliquée dans cet article de Challenges), soit un événement qui a peu de" + + " chances de se produire mais qui, s'il se produit, a des conséquences considérables." + "\n" + - " Les invités viennent d'horizons divers avec une petite préférence pour les \n" + - " intellectuels iconoclastes et les contestataires de tous bords, de l'ancien \n" + - " ministre grec Yanis Varoufakis à l'historien et essayiste Emmanuel Todd, en\n" + - " passant par les journalistes Natacha Polony et Laurent Obertone ou encore \n" + - " la coqueluche des \\\"gilets jaunes\\\" Etienne Chouard. \\\"On est au milieu de \n" + - " toutes les communautés qui s'écharpent sur internet, de l'extrême droite à\n" + - " l'extrême gauche, explique Sky. On cherche à créer un terrain neutre pour \n" + - " que tout le monde puisse échanger.") + " Les invités viennent d'horizons divers avec une petite préférence pour les" + + " intellectuels iconoclastes et les contestataires de tous bords, de l'ancien" + + " ministre grec Yanis Varoufakis à l'historien et essayiste Emmanuel Todd, en" + + " passant par les journalistes Natacha Polony et Laurent Obertone ou encore" + + " la coqueluche des \\\"gilets jaunes\\\" Etienne Chouard. \\\"On est au milieu de" + + " toutes les communautés qui s'écharpent sur internet, de l'extrême droite à" + + " l'extrême gauche, explique Sky. On cherche à créer un terrain neutre pour" + + " que tout le monde puisse échanger.") ) ) article1Contenus.add( diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt index dae0f98..ce955eb 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuMedia.kt @@ -25,6 +25,6 @@ class ContenuMedia(id: Int, var titre: String, var lien: String) : Contenu(id) { } override fun toString(): String { - return "ContenuMedia(id=$id, typeContenu='$typeContenu', titre='$titre', lien='$lien')" + return "$lien\n\n" } } diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt index 45c36d5..dc6d134 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/modele/articles/contenus/ContenuParagraphe.kt @@ -15,6 +15,6 @@ class ContenuParagraphe(id: Int, var titre: String, var texte: String) : Contenu } override fun toString(): String { - return "ContenuParagraphe(id=$id, typeContenu='$typeContenu', titre='$titre', texte='$texte')" + return "$texte \n\n" } } diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/navigation/VeraxNavHost.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/navigation/VeraxNavHost.kt new file mode 100644 index 0000000..97003c4 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/navigation/VeraxNavHost.kt @@ -0,0 +1,24 @@ +package com.example.veraxapplication.navigation + +import androidx.compose.runtime.Composable +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.example.veraxapplication.MainActivity + +@Composable +fun VeraxNavHost() { + + val navController = rememberNavController() + + NavHost( + navController = navController, + startDestination = "accueil" + ){ + composable(route="accueil"){ + + } + } + + +} \ No newline at end of file diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt index ea6aee0..899ae40 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/Article.kt @@ -22,11 +22,14 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.rememberImagePainter import com.example.veraxapplication.modele.articles.Article +import com.example.veraxapplication.modele.articles.contenus.ContenuMedia +import com.example.veraxapplication.modele.articles.contenus.ContenuParagraphe import com.example.veraxapplication.ui.theme.Salmon @Composable @@ -34,7 +37,7 @@ fun AffichageLesArticles(articles : List
){ Column(modifier = Modifier.verticalScroll(rememberScrollState())){ for(article in articles){ Box (Modifier.clickable { /*faut je regarde la doc*/ }){ - AffichageUnArticle(e = article) + AffichageUnArticleInfo(e = article) } } @@ -42,7 +45,7 @@ fun AffichageLesArticles(articles : List
){ } @Composable -fun AffichageUnArticle(e : Article){ +fun AffichageUnArticleInfo(e : Article){ Column(modifier = Modifier .padding(7.dp) .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) @@ -63,9 +66,9 @@ fun AffichageUnArticle(e : Article){ .background(Salmon) ) { Column (modifier = Modifier.padding(15.dp)) { - Text(text = e.auteur, fontSize = 17.sp) - Text(text = e.description, fontSize = 17.sp) - Text(text = "Lecture Time: " + e.temps + " minutes", fontSize = 17.sp) + Text(text = "Auteur : "+e.auteur, fontSize = 17.sp) + Text(text = "Description : "+e.description, fontSize = 17.sp) + Text(text = "Temps de lecture : "+e.temps+" minutes", fontSize = 17.sp) } } Image( @@ -95,6 +98,78 @@ fun AffichageUnArticle(e : Article){ } } +@Composable +fun AfficherArticle(e : Article){ + Column(modifier = Modifier + .verticalScroll(rememberScrollState()) + .padding(7.dp) + .padding(5.dp)) { + + Text(text = e.titre, fontFamily = FontFamily.Serif, fontSize = 30.sp) + + Box( + modifier = Modifier + .padding(15.dp) + .border(width = 1.dp, color = Color.Black, shape = RoundedCornerShape(10.dp)) + .clip(RoundedCornerShape(10.dp)) + .background(Salmon) + ) { + Column(modifier = Modifier.padding(15.dp)) { + Text(text = "Auteur : "+e.auteur, fontSize = 17.sp) + Text(text = "Description : "+e.description, fontSize = 17.sp) + Text(text = "Temps de lecture : " + e.temps + " minutes", fontSize = 17.sp) + } + } + Image( + painter = rememberImagePainter( + data = e.imagePrincipale + ), + contentScale = ContentScale.Crop, + contentDescription = null, + modifier = Modifier + .size(350.dp) + .align(Alignment.CenterHorizontally) + .padding(5.dp, 35.dp) + ) + + + Column (modifier = Modifier.align(Alignment.Start)){ + for (text in e.contenus){ + when(text){ + is ContenuMedia -> { + Text(text = text.titre, fontSize = 20.sp, fontWeight = FontWeight.Bold) + when(text.typeContenu){ + "image" -> { + Image( + painter = rememberImagePainter( + data = text.lien + ), + contentScale = ContentScale.FillHeight , + contentDescription = null, + modifier = Modifier + .size(350.dp) + .align(Alignment.CenterHorizontally) + .padding(5.dp, 35.dp) + ) + } + "video" -> { + Text(text = "Ici une video ..."+ text.toString(), fontSize = 15.sp, textAlign = TextAlign.Start) + //faut je vois comment on fait pour inclure une video ... + } + } + + + } + is ContenuParagraphe ->{ + Text(text = text.titre, fontSize = 20.sp, fontWeight = FontWeight.Bold) + Text(text = text.toString(), fontSize = 16.sp, textAlign = TextAlign.Start) + } + } + } + } + } +} + /* @Composable fun DisplayImage(image: String) { diff --git a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt index e8b2d7b..5a48c80 100644 --- a/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/topBar/TopBarVerax.kt @@ -35,6 +35,7 @@ import androidx.compose.ui.unit.sp import com.example.veraxapplication.R import com.example.veraxapplication.modele.articles.Article import com.example.veraxapplication.ui.article.AffichageLesArticles +import com.example.veraxapplication.ui.article.AfficherArticle import com.example.veraxapplication.ui.theme.Orange @OptIn(ExperimentalMaterial3Api::class) @@ -126,6 +127,8 @@ fun TopBarVerax(theme: List, articles: List
) { ) { AffichageLesArticles(articles = articles) + // AfficherArticle(articles.get(0)); + } }