From c661a12d7d94f52c1f7a0d5fa29e24dedde1e69d Mon Sep 17 00:00:00 2001 From: Shana CASCARRA Date: Sun, 7 Apr 2024 21:39:06 +0200 Subject: [PATCH] ajout du video player --- Android/VeraxApplication/app/build.gradle.kts | 5 ++ .../veraxapplication/ui/article/Article.kt | 80 +++---------------- .../ui/article/VideoPlayer.kt | 41 ++++++++++ .../veraxapplication/ui/topBar/TopBarVerax.kt | 40 ++-------- .../app/src/main/res/values/strings.xml | 2 +- 5 files changed, 64 insertions(+), 104 deletions(-) create mode 100644 Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/VideoPlayer.kt diff --git a/Android/VeraxApplication/app/build.gradle.kts b/Android/VeraxApplication/app/build.gradle.kts index cd4f400..f65a2fd 100644 --- a/Android/VeraxApplication/app/build.gradle.kts +++ b/Android/VeraxApplication/app/build.gradle.kts @@ -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") 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 c9a44fe..23712f9 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 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) { 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) { ) } "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) { } } - -/* -@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) { - 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/VideoPlayer.kt b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/VideoPlayer.kt new file mode 100644 index 0000000..99fef26 --- /dev/null +++ b/Android/VeraxApplication/app/src/main/java/com/example/veraxapplication/ui/article/VideoPlayer.kt @@ -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 + } + ) + + +} 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 b1aabc1..47f3c69 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 @@ -43,9 +43,7 @@ import com.example.veraxapplication.ui.theme.Orange @OptIn(ExperimentalMaterial3Api::class) @Composable fun TopBarVerax(theme: List, articles: List
, articlesStub : List
) { - var leMenu by remember { - mutableStateOf(false) - } + /*var leMenu by remember { mutableStateOf(false) }*/ val navController = rememberNavController() @@ -57,12 +55,11 @@ fun TopBarVerax(theme: List, articles: List
, 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, articles: List
, articlesStub : Lis } } - }, + }/*, actions = { IconButton(onClick = { leMenu = !leMenu }) { Icon( @@ -105,33 +102,14 @@ fun TopBarVerax(theme: List, articles: List
, 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, articles: List
, articlesStub : Lis verticalArrangement = Arrangement.spacedBy(16.dp), ) { - // AffichageLesArticles(articles = articles) - // AfficherArticle(articles.get(0)) - VeraxNavHost(articles = articles, navController, articlesStub= articlesStub) - } } } diff --git a/Android/VeraxApplication/app/src/main/res/values/strings.xml b/Android/VeraxApplication/app/src/main/res/values/strings.xml index 6157019..b13e8e2 100644 --- a/Android/VeraxApplication/app/src/main/res/values/strings.xml +++ b/Android/VeraxApplication/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - VeraxApplication + Verax \ No newline at end of file