diff --git a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsComposable.kt b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsComposable.kt
index e499bf4..666e27d 100644
--- a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsComposable.kt
+++ b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsComposable.kt
@@ -31,6 +31,7 @@ import androidx.compose.material3.SliderDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
@@ -94,11 +95,15 @@ fun LessonContent(
viewModel: LessonsViewModel
) {
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.anim_plant))
-
+ val context = LocalContext.current
val sliderPosition by viewModel.playbackPosition.collectAsState()
val playbackDuration by viewModel.playbackDuration.collectAsState()
val isPlaying by viewModel.isPlaying.collectAsState()
+ LaunchedEffect(key1 = lessonDetails) {
+ viewModel.preparePlayer(context, lessonDetails.lessonDetails.audioResId)
+ }
+
Column(
modifier = modifier
) {
diff --git a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsViewModel.kt b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsViewModel.kt
index bc9aecd..8205647 100644
--- a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsViewModel.kt
+++ b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/lessons/LessonsViewModel.kt
@@ -15,6 +15,8 @@ import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.ExoPlayer
import com.d4rk.englishwithlidia.plus.data.model.ui.lessons.UiLessonsAsset
import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -41,41 +43,41 @@ class LessonsViewModel @OptIn(UnstableApi::class)
private var player: Player? = null
- fun preparePlayer(context: Context, audioPath: String) {
+ init {
viewModelScope.launch {
- player?.release()
-
- val resourceId = context.resources.getIdentifier(
- audioPath, "raw", context.packageName
- )
+ player = ExoPlayer.Builder(getApplication()).build()
+ }
+ }
- if (resourceId != 0) {
- val audioUri = Uri.parse("android.resource://${context.packageName}/$resourceId")
- player = ExoPlayer.Builder(getApplication()).build().apply {
- setMediaItem(MediaItem.fromUri(audioUri))
- prepare()
- playWhenReady = false
+ fun preparePlayer(context: Context, audioResId: Int) {
+ viewModelScope.launch {
+ player?.release()
- addListener(object : Player.Listener {
- override fun onIsPlayingChanged(isPlaying: Boolean) {
- _isPlaying.value = isPlaying
- }
+ val audioUri = Uri.parse("android.resource://${context.packageName}/$audioResId")
+ player = ExoPlayer.Builder(getApplication()).build().apply {
+ setMediaItem(MediaItem.fromUri(audioUri))
+ prepare()
+ playWhenReady = false
- override fun onPlaybackStateChanged(playbackState: Int) {
- if (playbackState == Player.STATE_READY) {
- _playbackDuration.value = duration
- }
- }
+ addListener(object : Player.Listener {
+ override fun onIsPlayingChanged(isPlaying: Boolean) {
+ _isPlaying.value = isPlaying
+ }
- override fun onPositionDiscontinuity(
- oldPosition: Player.PositionInfo,
- newPosition: Player.PositionInfo,
- reason: Int
- ) {
- _playbackPosition.value = currentPosition
+ override fun onPlaybackStateChanged(playbackState: Int) {
+ if (playbackState == Player.STATE_READY) {
+ _playbackDuration.value = duration
}
- })
- }
+ }
+
+ override fun onPositionDiscontinuity(
+ oldPosition: Player.PositionInfo,
+ newPosition: Player.PositionInfo,
+ reason: Int
+ ) {
+ _playbackPosition.value = currentPosition
+ }
+ })
}
startPositionUpdateJob()
}
@@ -99,6 +101,10 @@ class LessonsViewModel @OptIn(UnstableApi::class)
viewModelScope.launch {
while (true) {
_playbackPosition.value = player?.currentPosition ?: 0L
+ delay(100)
+ if (player?.isPlaying == false) {
+ break
+ }
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f41dfe2..53d50ea 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -130,7 +130,7 @@
License
About
- Learn more about Cart Calculator
+ Learn more about English with Lidia
App info
Application build version