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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user