@@ -39,6 +39,7 @@ import androidx.compose.material3.MaterialTheme
39
39
import androidx.compose.material3.Scaffold
40
40
import androidx.compose.material3.Text
41
41
import androidx.compose.runtime.Composable
42
+ import androidx.compose.runtime.DisposableEffect
42
43
import androidx.compose.runtime.mutableStateOf
43
44
import androidx.compose.runtime.remember
44
45
import androidx.compose.runtime.rememberCoroutineScope
@@ -47,9 +48,12 @@ import androidx.compose.ui.Modifier
47
48
import androidx.compose.ui.platform.LocalContext
48
49
import androidx.compose.ui.tooling.preview.Preview
49
50
import androidx.compose.ui.unit.dp
51
+ import androidx.compose.ui.viewinterop.AndroidView
50
52
import androidx.compose.ui.window.Dialog
51
53
import androidx.compose.ui.window.DialogProperties
52
- import coil.compose.AsyncImage
54
+ import androidx.media3.common.MediaItem
55
+ import androidx.media3.exoplayer.ExoPlayer
56
+ import androidx.media3.ui.PlayerView
53
57
import kotlinx.coroutines.CoroutineScope
54
58
import kotlinx.coroutines.Dispatchers
55
59
import kotlinx.coroutines.launch
@@ -168,6 +172,33 @@ private fun ViewerActions(
168
172
}
169
173
}
170
174
175
+ @Composable
176
+ internal fun VideoViewer (path : String ) {
177
+ val context = LocalContext .current
178
+ val exoPlayer = remember {
179
+ ExoPlayer .Builder (context).build().apply {
180
+ val mediaItem = MediaItem .Builder ()
181
+ .setUri(path)
182
+ .build()
183
+ setMediaItem(mediaItem)
184
+ prepare()
185
+ }
186
+ }
187
+
188
+ AndroidView (
189
+ factory = {
190
+ PlayerView (context).apply {
191
+ player = exoPlayer
192
+ }
193
+ }
194
+ )
195
+ DisposableEffect (Unit ) {
196
+ onDispose {
197
+ exoPlayer.release()
198
+ }
199
+ }
200
+ }
201
+
171
202
@Preview
172
203
@Composable
173
204
private fun FileViewerPreview () {
0 commit comments