new: add playback speed control
This commit is contained in:
+12
-4
@@ -1,6 +1,7 @@
|
||||
package fr.ajaury.gwenedeg.preferences.data
|
||||
|
||||
import fr.ajaury.gwenedeg.preferences.domain.PreferencesRepository
|
||||
import fr.ajaury.gwenedeg.preferences.model.PlaybackPreferences
|
||||
import fr.ajaury.gwenedeg.preferences.model.SubtitlePreferences
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
@@ -8,14 +9,21 @@ import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
||||
internal class PreferencesRepositoryImpl : PreferencesRepository {
|
||||
private val state = MutableStateFlow(SubtitlePreferences())
|
||||
override val subtitlePreferences: StateFlow<SubtitlePreferences> = state.asStateFlow()
|
||||
private val subtitleState = MutableStateFlow(SubtitlePreferences())
|
||||
override val subtitlePreferences: StateFlow<SubtitlePreferences> = subtitleState.asStateFlow()
|
||||
|
||||
private val playbackState = MutableStateFlow(PlaybackPreferences())
|
||||
override val playbackPreferences: StateFlow<PlaybackPreferences> = playbackState.asStateFlow()
|
||||
|
||||
override fun setShowTranscription(enabled: Boolean) {
|
||||
state.update { it.copy(showTranscription = enabled) }
|
||||
subtitleState.update { it.copy(showTranscription = enabled) }
|
||||
}
|
||||
|
||||
override fun setShowTranslation(enabled: Boolean) {
|
||||
state.update { it.copy(showTranslation = enabled) }
|
||||
subtitleState.update { it.copy(showTranslation = enabled) }
|
||||
}
|
||||
|
||||
override fun setPlaybackSpeed(speed: Float) {
|
||||
playbackState.update { it.copy(speed = speed) }
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -1,12 +1,17 @@
|
||||
package fr.ajaury.gwenedeg.preferences.domain
|
||||
|
||||
import fr.ajaury.gwenedeg.preferences.model.PlaybackPreferences
|
||||
import fr.ajaury.gwenedeg.preferences.model.SubtitlePreferences
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
interface PreferencesRepository {
|
||||
val subtitlePreferences: StateFlow<SubtitlePreferences>
|
||||
|
||||
val playbackPreferences: StateFlow<PlaybackPreferences>
|
||||
|
||||
fun setShowTranscription(enabled: Boolean)
|
||||
|
||||
fun setShowTranslation(enabled: Boolean)
|
||||
|
||||
fun setPlaybackSpeed(speed: Float)
|
||||
}
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package fr.ajaury.gwenedeg.preferences.model
|
||||
|
||||
/**
|
||||
* User preferences controlling audio playback.
|
||||
*
|
||||
* @property speed playback speed multiplier, clamped between [MIN_SPEED] and [MAX_SPEED] in
|
||||
* [SPEED_STEP] increments. [DEFAULT_SPEED] is the normal, unaltered speed.
|
||||
*/
|
||||
data class PlaybackPreferences(
|
||||
val speed: Float = DEFAULT_SPEED,
|
||||
) {
|
||||
companion object {
|
||||
const val DEFAULT_SPEED = 1f
|
||||
const val MIN_SPEED = 0.5f
|
||||
const val MAX_SPEED = 1f
|
||||
const val SPEED_STEP = 0.1f
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user