feature: implement onboarding flow for first-time users
This commit is contained in:
+7
@@ -20,6 +20,9 @@ internal class InMemoryPreferencesRepository : PreferencesRepository {
|
||||
private val playbackState = MutableStateFlow(PlaybackPreferences())
|
||||
override val playbackPreferences: StateFlow<PlaybackPreferences> = playbackState.asStateFlow()
|
||||
|
||||
private val onboardingCompletedState = MutableStateFlow(false)
|
||||
override val onboardingCompleted: StateFlow<Boolean> = onboardingCompletedState.asStateFlow()
|
||||
|
||||
override suspend fun setShowTranscription(enabled: Boolean) {
|
||||
subtitleState.update { it.copy(showTranscription = enabled) }
|
||||
}
|
||||
@@ -47,4 +50,8 @@ internal class InMemoryPreferencesRepository : PreferencesRepository {
|
||||
override suspend fun setAutoPause(enabled: Boolean) {
|
||||
playbackState.update { it.copy(autoPause = enabled) }
|
||||
}
|
||||
|
||||
override suspend fun setOnboardingCompleted() {
|
||||
onboardingCompletedState.value = true
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -10,6 +10,8 @@ interface PreferencesRepository {
|
||||
|
||||
val playbackPreferences: Flow<PlaybackPreferences>
|
||||
|
||||
val onboardingCompleted: Flow<Boolean>
|
||||
|
||||
suspend fun setShowTranscription(enabled: Boolean)
|
||||
|
||||
suspend fun setShowTranslation(enabled: Boolean)
|
||||
@@ -23,4 +25,6 @@ interface PreferencesRepository {
|
||||
suspend fun setBreakBetweenPhrases(duration: Duration)
|
||||
|
||||
suspend fun setAutoPause(enabled: Boolean)
|
||||
|
||||
suspend fun setOnboardingCompleted()
|
||||
}
|
||||
|
||||
+7
@@ -31,6 +31,10 @@ internal class DataStorePreferencesRepository(
|
||||
dataStore.data
|
||||
.map { it.toPlaybackPreferences() }
|
||||
|
||||
override val onboardingCompleted: Flow<Boolean> =
|
||||
dataStore.data
|
||||
.map { it[OnboardingCompletedKey] ?: false }
|
||||
|
||||
override suspend fun setShowTranscription(enabled: Boolean) = edit { it[ShowTranscriptionKey] = enabled }
|
||||
|
||||
override suspend fun setShowTranslation(enabled: Boolean) = edit { it[ShowTranslationKey] = enabled }
|
||||
@@ -46,6 +50,8 @@ internal class DataStorePreferencesRepository(
|
||||
|
||||
override suspend fun setAutoPause(enabled: Boolean) = edit { it[AutoPauseKey] = enabled }
|
||||
|
||||
override suspend fun setOnboardingCompleted() = edit { it[OnboardingCompletedKey] = true }
|
||||
|
||||
private suspend fun edit(transform: (MutablePreferences) -> Unit) {
|
||||
dataStore.edit(transform)
|
||||
}
|
||||
@@ -76,5 +82,6 @@ internal class DataStorePreferencesRepository(
|
||||
val PlaybackSpeedKey = floatPreferencesKey("playback_speed")
|
||||
val BreakBetweenPhrasesSecondsKey = intPreferencesKey("break_between_phrases_seconds")
|
||||
val AutoPauseKey = booleanPreferencesKey("auto_pause")
|
||||
val OnboardingCompletedKey = booleanPreferencesKey("onboarding_completed")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,21 @@
|
||||
<string name="auto_pause_title">Ehan emgefreek</string>
|
||||
<string name="auto_pause_description">Ehanañ goude pep frazenn</string>
|
||||
|
||||
<string name="onboarding_goal_title">Degemer mat e Chom bev</string>
|
||||
<string name="onboarding_goal_description">Deskit brezhoneg en ur selaou enrolladennoù, frazenn ha frazenn, evit gwellaat ho komprenidigezh hag ho tistagadur.</string>
|
||||
<string name="onboarding_subtitles_title">Istitloù diouzh ho tro</string>
|
||||
<string name="onboarding_subtitles_description">Adalek al lenner, diskouezit pe kuzhit an treuzskrivadur brezhonek hag an droidigezh c\'hallek, cheñchit ment an destenn hag ar merkoù distagañ.</string>
|
||||
<string name="onboarding_playback_title">Un tizh diouzh ho live</string>
|
||||
<string name="onboarding_playback_description">Gorrekait tizh al lenn hag ouzhpennit un ehan etre ar frazennoù evit kaout amzer da adlavaret.</string>
|
||||
<string name="onboarding_level_title">Dibabit ho live</string>
|
||||
<string name="onboarding_level_description">Gallout a reot cheñch an arventennoù-se pa garot adalek al lenner.</string>
|
||||
<string name="onboarding_level_beginner_title">Deraouad</string>
|
||||
<string name="onboarding_level_beginner_description">Lenn gorrekaet (x0.9) gant un ehan 3 s etre ar frazennoù</string>
|
||||
<string name="onboarding_level_advanced_title">Boas / araokaet</string>
|
||||
<string name="onboarding_level_advanced_description">Tizh boas, hep ehan etre ar frazennoù</string>
|
||||
<string name="onboarding_next">War-lerc\'h</string>
|
||||
<string name="onboarding_start">Kregiñ</string>
|
||||
|
||||
<string name="player_back">Distreiñ</string>
|
||||
<string name="player_previous_sentence">Frazenn a-raok</string>
|
||||
<string name="player_next_sentence">Frazenn war-lerc\'h</string>
|
||||
|
||||
@@ -28,6 +28,21 @@
|
||||
<string name="auto_pause_title">Pause automatique</string>
|
||||
<string name="auto_pause_description">Mettre en pause après chaque phrase</string>
|
||||
|
||||
<string name="onboarding_goal_title">Bienvenue dans\n Chom bev e Brezhoneg</string>
|
||||
<string name="onboarding_goal_description">Apprenez le breton en écoutant des enregistrements, phrase par phrase, pour améliorer votre compréhension et votre prononciation du Breton Vannetais.</string>
|
||||
<string name="onboarding_subtitles_title">Des sous-titres à votre rythme</string>
|
||||
<string name="onboarding_subtitles_description">Depuis le lecteur, affichez ou masquez la transcription bretonne et la traduction française, ajustez la taille du texte et les marques de prononciation.</string>
|
||||
<string name="onboarding_playback_title">Un rythme adapté</string>
|
||||
<string name="onboarding_playback_description">Ralentissez la vitesse de lecture et ajoutez une pause entre les phrases pour vous laisser le temps de répéter.</string>
|
||||
<string name="onboarding_level_title">Choisissez votre niveau</string>
|
||||
<string name="onboarding_level_description">Vous pourrez modifier ces réglages à tout moment depuis le lecteur.</string>
|
||||
<string name="onboarding_level_beginner_title">Je suis débutant·e</string>
|
||||
<string name="onboarding_level_beginner_description">Lecture ralentie (x0.9) avec une pause de 3 secondes entre les phrases</string>
|
||||
<string name="onboarding_level_advanced_title">Je parle un peu, beaucoup ...</string>
|
||||
<string name="onboarding_level_advanced_description">Vitesse normale, sans pause</string>
|
||||
<string name="onboarding_next">Suivant</string>
|
||||
<string name="onboarding_start">Commencer</string>
|
||||
|
||||
<string name="player_back">Retour</string>
|
||||
<string name="player_previous_sentence">Phrase précédente</string>
|
||||
<string name="player_next_sentence">Phrase suivante</string>
|
||||
|
||||
Reference in New Issue
Block a user