ajout du video player

API
Shana CASCARRA 3 months ago
parent 47daea74e6
commit c661a12d7d

@ -64,6 +64,11 @@ dependencies {
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 ("androidx.media3:media3-session:1.3.0")
implementation("com.google.android.exoplayer:exoplayer-core:2.19.1")
implementation ("com.google.android.exoplayer:exoplayer-ui:2.19.1")
implementation ("com.squareup.okhttp3:logging-interceptor:4.9.1")

@ -1,5 +1,6 @@
package com.example.veraxapplication.ui.article
import VideoPlayer
import android.util.Log
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
@ -109,7 +110,6 @@ fun AfficherArticle(e : Article){
DisplayHeader(author = e.auteur, description = e.description, lectureTime = e.temps)
Image(
painter = rememberImagePainter(
data = e.imagePrincipale
@ -150,7 +150,9 @@ fun DisplayContenu(contenus: List<Contenu>) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
for (contenu in contenus) {
when (contenu) {
is ContenuMedia -> {
Log.d("Img", contenu.titre + " " + contenu.lien)
Text(text = contenu.titre, fontSize = 20.sp, fontWeight = FontWeight.Bold)
when (contenu.typeContenu) {
"image" -> {
@ -166,9 +168,13 @@ fun DisplayContenu(contenus: List<Contenu>) {
)
}
"video" -> {
// Pour l'instant, un simple texte pour les vidéos
Text(text = "Ici une vidéo ... ${contenu.lien}", fontSize = 15.sp, textAlign = TextAlign.Start)
// Implémentation pour vidéo à venir...
Text(
text = "Ici une video ..." + contenu.toString(),
fontSize = 15.sp,
textAlign = TextAlign.Start
)
VideoPlayer(videoUrl = contenu.lien)
}
}
}
@ -181,69 +187,3 @@ fun DisplayContenu(contenus: List<Contenu>) {
}
}
/*
@Composable
fun DisplayImage(image: String) {
Image(
painter = rememberImagePainter(
data = image
),
contentScale = ContentScale.Crop,
contentDescription = null,
modifier = Modifier
.size(350.dp)
.align(Alignment.CenterHorizontally)
.padding(5.dp, 35.dp)
)
}
@Composable
fun DisplayImage(image: String) {
Image(
painter = rememberImagePainter(
data = e.imagePrincipale
),
contentScale = ContentScale.Crop,
contentDescription = null,
modifier = Modifier
.size(350.dp)
.align(Alignment.CenterHorizontally)
.padding(5.dp, 35.dp)
)
}
@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<Contenu>) {
Column {
for(e in content){
Text(text = e.Content, fontSize = 15.sp, fontFamily = FontFamily.Serif, textAlign = TextAlign.Justify, modifier = Modifier.padding(10.dp))
}
}
}*/

@ -0,0 +1,41 @@
import android.view.ViewGroup
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.ui.PlayerView
@Composable
fun VideoPlayer(videoUrl : String){
val context = LocalContext.current
val player = ExoPlayer.Builder(context).build()
val playerView = PlayerView(context).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
}
val mediaItem = MediaItem.Builder()
.setUri(videoUrl)
.build()
player.setMediaItem(mediaItem)
player.prepare()
player.play()
AndroidView(
factory = { context -> playerView },
modifier = Modifier.fillMaxSize(),
update = { view ->
view.player = player
}
)
}

@ -43,9 +43,7 @@ import com.example.veraxapplication.ui.theme.Orange
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopBarVerax(theme: List<String>, articles: List<Article>, articlesStub : List<Article>) {
var leMenu by remember {
mutableStateOf(false)
}
/*var leMenu by remember { mutableStateOf(false) }*/
val navController = rememberNavController()
@ -57,12 +55,11 @@ fun TopBarVerax(theme: List<String>, articles: List<Article>, articlesStub : Lis
CenterAlignedTopAppBar(
title = {
Text(
text = "Verax",
//text = R.string.app_name,
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()
)
},
@ -76,7 +73,7 @@ fun TopBarVerax(theme: List<String>, articles: List<Article>, articlesStub : Lis
}
}
},
}/*,
actions = {
IconButton(onClick = { leMenu = !leMenu }) {
Icon(
@ -105,33 +102,14 @@ fun TopBarVerax(theme: List<String>, articles: List<Article>, articlesStub : Lis
.padding(10.dp)
)
},
onClick = { /* faut un moyen d'appeler une methode diff pour chaque, ca doit etre faisable facilement */ }
onClick = { }
)
}
}
}
}*/
)
}/*,
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
@ -139,12 +117,8 @@ fun TopBarVerax(theme: List<String>, articles: List<Article>, articlesStub : Lis
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
// AffichageLesArticles(articles = articles)
// AfficherArticle(articles.get(0))
VeraxNavHost(articles = articles, navController, articlesStub= articlesStub)
}
}
}

@ -1,3 +1,3 @@
<resources>
<string name="app_name">VeraxApplication</string>
<string name="app_name">Verax</string>
</resources>
Loading…
Cancel
Save