refactor: extract audio player logic into a dedicated multiplatform module

This commit is contained in:
2026-06-16 17:26:48 +02:00
parent 45a8f7ac7f
commit 1de2d43b3b
22 changed files with 96 additions and 33 deletions
@@ -7,9 +7,9 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation3.runtime.NavEntry
import androidx.navigation3.ui.NavDisplay
import androidx.savedstate.compose.serialization.serializers.SnapshotStateListSerializer
import fr.ajaury.gwenedeg.di.platformModule
import fr.ajaury.gwenedeg.di.sharedModule
import fr.ajaury.gwenedeg.navigation.Route
import fr.ajaury.gwenedeg.player.di.audioPlayerModule
import fr.ajaury.gwenedeg.player.ui.PlayerScreen
import fr.ajaury.gwenedeg.records.ui.RecordsScreen
import fr.ajaury.gwenedeg.theme.GwenedegTheme
@@ -23,7 +23,7 @@ fun App() {
configuration = koinConfiguration {
modules(
sharedModule,
platformModule,
audioPlayerModule,
)
},
) {
@@ -4,7 +4,6 @@ import fr.ajaury.gwenedeg.player.ui.viewmodel.PlayerViewModel
import fr.ajaury.gwenedeg.records.data.InMemoryRecordRepository
import fr.ajaury.gwenedeg.records.domain.RecordRepository
import fr.ajaury.gwenedeg.records.ui.viewmodel.RecordsViewModel
import org.koin.core.module.Module
import org.koin.core.module.dsl.bind
import org.koin.core.module.dsl.factoryOf
import org.koin.core.module.dsl.viewModelOf
@@ -15,5 +14,3 @@ val sharedModule = module {
viewModelOf(::RecordsViewModel)
viewModelOf(::PlayerViewModel)
}
expect val platformModule: Module
@@ -1,13 +0,0 @@
package fr.ajaury.gwenedeg.player
interface AudioPlayer {
fun play()
fun pause()
fun stop()
fun release()
fun load(filePath: String)
}
@@ -1,10 +0,0 @@
package fr.ajaury.gwenedeg.player
/**
* An Audio Session will allow to request Audio focus and declare our audio source to the system
*/
interface AudioSessionManager {
fun activate()
fun deactivate()
}
@@ -3,6 +3,7 @@ package fr.ajaury.gwenedeg.player.ui.viewmodel
import androidx.lifecycle.ViewModel
import fr.ajaury.gwenedeg.player.AudioPlayer
import fr.ajaury.gwenedeg.player.AudioSessionManager
import gwenedeg.shared.generated.resources.Res
class PlayerViewModel(
private val audioPlayer: AudioPlayer,
@@ -13,7 +14,7 @@ class PlayerViewModel(
}
fun play(filePath: String) {
audioPlayer.load(filePath = filePath)
audioPlayer.load(uri = Res.getUri(filePath))
audioPlayer.play()
}