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)); + } }