65 lines
2.1 KiB
Kotlin
65 lines
2.1 KiB
Kotlin
package de.timklge.karooreminder
|
|
|
|
import android.content.Context
|
|
import android.util.Log
|
|
import de.timklge.karooreminder.KarooReminderExtension.Companion.TAG
|
|
import de.timklge.karooreminder.screens.Reminder
|
|
import de.timklge.karooreminder.screens.defaultReminders
|
|
import de.timklge.karooreminder.screens.preferencesKey
|
|
import io.hammerhead.karooext.KarooSystemService
|
|
import io.hammerhead.karooext.models.OnStreamState
|
|
import io.hammerhead.karooext.models.RideState
|
|
import io.hammerhead.karooext.models.StreamState
|
|
import io.hammerhead.karooext.models.UserProfile
|
|
import kotlinx.coroutines.channels.awaitClose
|
|
import kotlinx.coroutines.channels.trySendBlocking
|
|
import kotlinx.coroutines.flow.Flow
|
|
import kotlinx.coroutines.flow.callbackFlow
|
|
import kotlinx.coroutines.flow.map
|
|
import kotlinx.serialization.json.Json
|
|
|
|
fun KarooSystemService.streamDataFlow(dataTypeId: String): Flow<StreamState> {
|
|
return callbackFlow {
|
|
val listenerId = addConsumer(OnStreamState.StartStreaming(dataTypeId)) { event: OnStreamState ->
|
|
trySendBlocking(event.state)
|
|
}
|
|
awaitClose {
|
|
removeConsumer(listenerId)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun KarooSystemService.streamRideState(): Flow<RideState> {
|
|
return callbackFlow {
|
|
val listenerId = addConsumer { rideState: RideState ->
|
|
trySendBlocking(rideState)
|
|
}
|
|
awaitClose {
|
|
removeConsumer(listenerId)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun KarooSystemService.streamUserProfile(): Flow<UserProfile> {
|
|
return callbackFlow {
|
|
val listenerId = addConsumer { userProfile: UserProfile ->
|
|
trySendBlocking(userProfile)
|
|
}
|
|
awaitClose {
|
|
removeConsumer(listenerId)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun Context.streamPreferences(): Flow<MutableList<Reminder>> {
|
|
return applicationContext.dataStore.data.map { remindersJson ->
|
|
try {
|
|
Json.decodeFromString<MutableList<Reminder>>(
|
|
remindersJson[preferencesKey] ?: defaultReminders
|
|
)
|
|
} catch(e: Throwable){
|
|
Log.e(TAG,"Failed to read preferences", e)
|
|
mutableListOf()
|
|
}
|
|
}
|
|
} |