update
This commit is contained in:
@@ -5,7 +5,7 @@ import retrofit2.converter.gson.GsonConverterFactory
|
||||
|
||||
object ApiClient {
|
||||
// Server-IP hier anpassen
|
||||
const val BASE_URL = "http://192.168.178.92:8000/"
|
||||
const val BASE_URL = "http://marha.local:8000/"
|
||||
|
||||
val api: VideoApi by lazy {
|
||||
Retrofit.Builder()
|
||||
|
||||
@@ -157,7 +157,7 @@ fun AppNavigation() {
|
||||
arguments = listOf(navArgument("videoId") { type = NavType.IntType })
|
||||
) { backStackEntry ->
|
||||
val videoId = backStackEntry.arguments?.getInt("videoId") ?: return@composable
|
||||
VideoPlayerScreen(videoId = videoId, viewModel = viewModel)
|
||||
VideoPlayerScreen(videoId = videoId, viewModel = viewModel, onBack = { navController.popBackStack() })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,21 @@ package com.youtubeapp.ui.screens
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.LayoutInflater
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.viewinterop.AndroidView
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
@@ -20,7 +29,7 @@ import com.youtubeapp.ui.viewmodel.VideoViewModel
|
||||
|
||||
@Composable
|
||||
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
||||
fun VideoPlayerScreen(videoId: Int, viewModel: VideoViewModel) {
|
||||
fun VideoPlayerScreen(videoId: Int, viewModel: VideoViewModel, onBack: () -> Unit) {
|
||||
val context = LocalContext.current
|
||||
val playbackUri = viewModel.getPlaybackUri(videoId)
|
||||
|
||||
@@ -49,15 +58,29 @@ fun VideoPlayerScreen(videoId: Int, viewModel: VideoViewModel) {
|
||||
}
|
||||
}
|
||||
|
||||
AndroidView(
|
||||
factory = { ctx ->
|
||||
val view = LayoutInflater.from(ctx).inflate(R.layout.player_view, null) as PlayerView
|
||||
view.player = exoPlayer
|
||||
view
|
||||
},
|
||||
update = { view ->
|
||||
view.player = exoPlayer
|
||||
},
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
AndroidView(
|
||||
factory = { ctx ->
|
||||
val view = LayoutInflater.from(ctx).inflate(R.layout.player_view, null) as PlayerView
|
||||
view.player = exoPlayer
|
||||
view
|
||||
},
|
||||
update = { view ->
|
||||
view.player = exoPlayer
|
||||
},
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
IconButton(
|
||||
onClick = onBack,
|
||||
modifier = Modifier
|
||||
.align(Alignment.TopStart)
|
||||
.padding(16.dp)
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
||||
contentDescription = "Zurück",
|
||||
tint = Color.White
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,6 +195,10 @@ class VideoViewModel : ViewModel() {
|
||||
|
||||
fun getPlaybackUri(videoId: Int): String {
|
||||
val localFile = localStorage?.getLocalFile(videoId)
|
||||
return localFile?.toURI()?.toString() ?: repository.getStreamUrl(videoId)
|
||||
return if (localFile != null) {
|
||||
android.net.Uri.fromFile(localFile).toString()
|
||||
} else {
|
||||
repository.getStreamUrl(videoId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user