@ -67,17 +67,11 @@ class MainActivity : ComponentActivity() {
// var article = listOf("Thinkerview", "thinkerview.jgp", "Thinkerview est une chaîne youtube d'interview-débat")
// 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"))))
var dataManager : IArticlesDataManager = StubArticles ( )
var dataManager : IArticlesDataManager = StubArticles ( )
var articles = dataManager . getDerniersArticles ( 4 )
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 )
var color = Color ( 0xFF00FF00 )
override fun onCreate ( savedInstanceState : Bundle ? ) {
override fun onCreate ( savedInstanceState : Bundle ? ) {
@ -88,185 +82,187 @@ class MainActivity : ComponentActivity() {
articles ?. forEach ( { a ->
articles ?. forEach ( { a ->
Log . println ( Log . ASSERT , " debug articles " , a . toString ( ) )
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 ...
// Il faudrait mettre ca dans un fichier appart mais je connais plus les conventions ...
@OptIn ( ExperimentalMaterial3Api :: class )
@OptIn ( ExperimentalMaterial3Api :: class )
@Composable
@Composable
fun TopBarVerax ( theme : List < String > , article : List < Article > ) {
fun TopBarVerax ( theme : List < String > , article : List < Article > ) {
var leMenu by remember {
var leMenu by remember {
mutableStateOf ( false )
mutableStateOf ( false )
}
}
Row ( ) {
Row ( ) {
Scaffold (
Scaffold (
topBar = {
topBar = {
CenterAlignedTopAppBar (
CenterAlignedTopAppBar (
title = {
title = {
Text (
Text (
text = " Verax " ,
text = " Verax " ,
style = TextStyle ( fontSize = 35. sp ) ,
style = TextStyle ( fontSize = 35. sp ) ,
color = colorResource ( R . color . red ) ,
color = colorResource ( R . color . red ) ,
textAlign = TextAlign . Center ,
textAlign = TextAlign . Center ,
/ * backcolor = topAppBarColors (
/ * backcolor = topAppBarColors (
containerColor = MaterialTheme . colorScheme . primaryContainer ) , * / //version recommandée par le prof
containerColor = MaterialTheme . colorScheme . primaryContainer ) , * / //version recommandée par le prof
modifier = Modifier . fillMaxWidth ( )
modifier = Modifier . fillMaxWidth ( )
)
} ,
navigationIcon = {
IconButton ( onClick = { /* action() */ } ) {
Icon (
imageVector = Icons . Filled . ArrowBack ,
contentDescription = " Retour " ,
Modifier . size ( 30. dp )
)
)
} ,
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 (
Icon (
imageVector = Icons . Filled . Menu ,
imageVector = Icons . Filled . Home ,
contentDescription = " Menu " ,
contentDescription = " Home " ,
Modifier . size ( 35. dp )
Modifier . size ( 35. dp )
)
)
}
}
DropdownMenu (
IconButton ( onClick = { /*TODO*/ } ) {
expanded = leMenu , onDismissRequest = { leMenu = false } ,
Icon (
modifier = Modifier
imageVector = Icons . Filled . Person ,
. background ( Color . hsl ( 0.08F , 1F , 0.96F ) )
contentDescription = " Account " ,
) {
Modifier . size ( 35. dp )
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 ->
) { innerPadding ->
Column (
Column (
modifier = Modifier
modifier = Modifier
. padding ( innerPadding ) ,
. padding ( innerPadding ) ,
verticalArrangement = Arrangement . spacedBy ( 16. dp ) ,
verticalArrangement = Arrangement . spacedBy ( 16. dp ) ,
) {
) {
AffichageUnArticle ( article = article )
AffichageUnArticle ( article = article )
}
}
}
}
}
}
}
}
@Composable
@Composable
fun AffichageUnArticle ( article : List < Article > ) {
fun AffichageUnArticle ( article : List < Article > ) {
Column ( ) {
Column ( ) {
for ( e in article ) {
for ( e in article ) {
DisplayTitle ( title = e . Title )
DisplayTitle ( title = e . Title )
DisplayHeader ( author = e . Author , description = e . Description , lectureTime = e . LectureTime )
DisplayHeader (
DisplayImage ( image = e . Image )
author = e . Author ,
DisplayContentArticle ( content = e . Content )
description = e . Description ,
lectureTime = e . LectureTime
)
DisplayImage ( image = e . Image )
DisplayContentArticle ( content = e . Content )
}
}
}
}
}
}
@Composable
@Composable
fun DisplayImage ( image : String ) {
fun DisplayImage ( image : String ) {
Log . d ( " DisplayImage " , " Chargement de l'image à partir de l'URL : $image " )
Log . d ( " DisplayImage " , " Chargement de l'image à partir de l'URL : $image " )
val painter = rememberImagePainter (
val painter = rememberImagePainter (
data = image ,
data = image ,
builder = {
builder = {
scale ( Scale . FILL )
scale ( Scale . FILL )
}
}
)
)
Log . d ( " DisplayImage " , " Painter créé avec succès " )
Log . d ( " DisplayImage " , " Painter créé avec succès " )
Box (
Box (
modifier = Modifier . fillMaxSize ( ) ,
contentAlignment = Alignment . Center
) {
androidx . compose . foundation . Image (
painter = painter ,
contentDescription = null ,
modifier = Modifier . fillMaxSize ( ) ,
modifier = Modifier . fillMaxSize ( ) ,
)
contentAlignment = Alignment . Center
) {
androidx . compose . foundation . Image (
painter = painter ,
contentDescription = null ,
modifier = Modifier . fillMaxSize ( ) ,
)
}
}
}
}
@Composable
@Composable
fun DisplayHeader ( author : String , description : String , lectureTime : String ) {
fun DisplayHeader ( author : String , description : String , lectureTime : String ) {
Box ( modifier = Modifier
Box (
. fillMaxWidth ( )
modifier = Modifier
. border ( width = 1. dp , color = Color . Black , shape = RoundedCornerShape ( 10. dp ) )
. fillMaxWidth ( )
. clip ( RoundedCornerShape ( 10. dp ) )
. border ( width = 1. dp , color = Color . Black , shape = RoundedCornerShape ( 10. dp ) )
. background ( Salmon )
. clip ( RoundedCornerShape ( 10. dp ) )
. padding ( 10. dp ) ) {
. background ( Salmon )
Column ( ) {
. padding ( 10. dp )
Text ( text = author )
) {
Text ( text = description )
Column ( ) {
Text ( text = " Lecture Time: " + lectureTime + " minutes " )
Text ( text = author )
Text ( text = description )
Text ( text = " Lecture Time: " + lectureTime + " minutes " )
}
}
}
}
}
}
@Composable
@Composable
fun DisplayTitle ( title : String ) {
fun DisplayTitle ( title : String ) {
Column ( modifier = Modifier . fillMaxWidth ( ) , horizontalAlignment = Alignment . CenterHorizontally ) {
Column (
Text ( text = title , fontFamily = FontFamily . Serif , fontSize = 30. sp )
modifier = Modifier . fillMaxWidth ( ) ,
horizontalAlignment = Alignment . CenterHorizontally
) {
Text ( text = title , fontFamily = FontFamily . Serif , fontSize = 30. sp )
}
}
}
}
@Composable
@Composable
fun DisplayContentArticle ( content : List < Paragraph > ) {
fun DisplayContentArticle ( content : List < Paragraph > ) {
Column {
Column {
for ( e in content ) {
for ( e in content ) {
Text ( text = e . Content , fontSize = 15. sp , fontFamily = FontFamily . Serif , textAlign = TextAlign . Justify , modifier = Modifier . padding ( 10. dp ) )
Text (
text = e . Content ,
fontSize = 15. sp ,
fontFamily = FontFamily . Serif ,
textAlign = TextAlign . Justify ,
modifier = Modifier . padding ( 10. dp )
)
}
}
}
}
}
}
}