@ -2,13 +2,12 @@ package com.example.veraxapplication
import android.os.Build
import android.os.Build
import android.os.Bundle
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.compose.setContent
< < < < < < < HEAD
import com.example.veraxapplication.ui.theme.Salmon
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Color
=== === =
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
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.foundation.layout.fillMaxSize
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Scaffold
import androidx.compose.ui.graphics.Color
import androidx.compose.material3.Text
import androidx.compose.material3.Text
import androidx.compose.ui.res.colorResource
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.Article
import com.example.veraxapplication.data.Paragraph
import com.example.veraxapplication.data.Paragraph
import com.example.veraxapplication.ui.topBar.*
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 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 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
//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
// 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 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 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 " )
@ -84,196 +83,14 @@ class MainActivity : ComponentActivity() {
super . onCreate ( savedInstanceState )
super . onCreate ( savedInstanceState )
setContent {
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
// 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 -> println(a)})
articles ?. forEach ( { a ->
/ * articles ?. forEach ( { a ->
Log . println ( Log . ASSERT , " debug articles " , a . toString ( ) )
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 < String > , article : List < Article > ) {
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 < Article > ) {
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 < Paragraph > ) {
Column {
for ( e in content ) {
Text (
text = e . Content ,
fontSize = 15. sp ,
fontFamily = FontFamily . Serif ,
textAlign = TextAlign . Justify ,
modifier = Modifier . padding ( 10. dp )
)
}
}
}
}