11package com.codandotv.streamplayerapp.core_shared_ui.widget
22
3- import androidx.compose.foundation.background
43import androidx.compose.foundation.layout.Box
54import androidx.compose.foundation.layout.Column
6- import androidx.compose.foundation.layout.Row
5+ import androidx.compose.foundation.layout.fillMaxSize
76import androidx.compose.foundation.layout.fillMaxWidth
87import androidx.compose.foundation.layout.height
9- import androidx.compose.foundation.layout.padding
10- import androidx.compose.material3.MaterialTheme
118import androidx.compose.runtime.Composable
129import androidx.compose.runtime.DisposableEffect
13- import androidx.compose.runtime.LaunchedEffect
14- import androidx.compose.runtime.derivedStateOf
15- import androidx.compose.runtime.getValue
16- import androidx.compose.runtime.mutableStateOf
1710import androidx.compose.runtime.remember
18- import androidx.compose.runtime.setValue
1911import androidx.compose.ui.Alignment
2012import androidx.compose.ui.Modifier
2113import androidx.compose.ui.platform.LocalContext
2214import androidx.compose.ui.unit.dp
2315import androidx.compose.ui.viewinterop.AndroidView
2416import androidx.media3.common.MediaItem
25- import androidx.media3.common.Player
2617import androidx.media3.exoplayer.ExoPlayer
2718import androidx.media3.ui.PlayerView
2819import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews
29- import com.codandotv.streamplayerapp.core_shared_ui.widget.player.PlayerTracker
30- import com.codandotv.streamplayerapp.core_shared_ui.widget.player.PreviewBadge
31- import kotlinx.coroutines.delay
3220
3321@Composable
3422fun PlayerComponent (url : String , modifier : Modifier = Modifier ) {
3523 val context = LocalContext .current
3624
37- var isPlayerPlaying by remember { mutableStateOf(true ) }
38-
39- var playerPosition by remember { mutableStateOf(0L ) }
40-
4125 val exoplayer = remember {
4226 val mediaItem = MediaItem .Builder ()
4327 .setUri(url)
@@ -48,25 +32,12 @@ fun PlayerComponent(url: String, modifier: Modifier = Modifier) {
4832 prepare()
4933
5034 playWhenReady = true
51-
52- addListener(
53- object : Player .Listener {
54- override fun onIsPlayingChanged (isPlaying : Boolean ) {
55- isPlayerPlaying = isPlaying
56- }
57- }
58- )
5935 }
6036 }
6137
62- val playerProgress by remember {
63- derivedStateOf { (playerPosition / exoplayer.contentDuration.toDouble()).toFloat() }
64- }
65-
6638 Column (
6739 modifier = modifier
68- .height(225 .dp)
69- .fillMaxWidth()
40+ .fillMaxSize()
7041 ) {
7142 Box {
7243 AndroidView (
@@ -77,49 +48,13 @@ fun PlayerComponent(url: String, modifier: Modifier = Modifier) {
7748 factory = {
7849 PlayerView (it).apply {
7950 player = exoplayer
80- useController = false
51+ useController = true
8152 }
8253 }
8354 )
84-
85- PreviewBadge (
86- modifier = Modifier
87- .align(Alignment .BottomStart )
88- .padding(
89- start = 8 .dp,
90- bottom = 8 .dp
91- )
92- )
93- }
94-
95- Row (
96- modifier = Modifier
97- .fillMaxWidth()
98- .height(25 .dp)
99- .background(MaterialTheme .colorScheme.background)
100- ) {
101- PlayerTracker (
102- modifier = Modifier
103- .fillMaxWidth()
104- .height(18 .dp)
105- .padding(horizontal = 0 .dp),
106- percentage = playerProgress,
107- expanded = false
108- )
10955 }
11056 }
11157
112-
113- LaunchedEffect (
114- key1 = isPlayerPlaying,
115- block = {
116- while (isPlayerPlaying) {
117- delay(500L )
118- playerPosition + = 500L
119- }
120- }
121- )
122-
12358 DisposableEffect (key1 = Unit , effect = {
12459 onDispose {
12560 exoplayer.release()
0 commit comments