Add option to only show bars while riding
This commit is contained in:
parent
dbaac0cec0
commit
792577ba69
@ -28,6 +28,7 @@ val settingsKey = stringPreferencesKey("settings")
|
||||
data class PowerbarSettings(
|
||||
val source: SelectedSource = SelectedSource.POWER,
|
||||
val topBarSource: SelectedSource = SelectedSource.NONE,
|
||||
val onlyShowWhileRiding: Boolean = true
|
||||
){
|
||||
companion object {
|
||||
val defaultSettings = Json.encodeToString(PowerbarSettings())
|
||||
|
||||
@ -7,13 +7,20 @@ import android.app.Service
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.IBinder
|
||||
import android.util.Log
|
||||
import androidx.core.app.NotificationCompat
|
||||
import de.timklge.karoopowerbar.KarooPowerbarExtension.Companion.TAG
|
||||
import de.timklge.karoopowerbar.screens.SelectedSource
|
||||
import io.hammerhead.karooext.KarooSystemService
|
||||
import io.hammerhead.karooext.models.RideState
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
data class StreamState(val settings: PowerbarSettings, val showBars: Boolean)
|
||||
|
||||
class ForegroundService : Service() {
|
||||
override fun onBind(intent: Intent?): IBinder {
|
||||
throw UnsupportedOperationException("Not yet implemented")
|
||||
@ -26,12 +33,26 @@ class ForegroundService : Service() {
|
||||
setupForeground()
|
||||
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
applicationContext.streamSettings()
|
||||
.collectLatest { settings ->
|
||||
val karooSystemService = KarooSystemService(applicationContext)
|
||||
karooSystemService.connect { connected ->
|
||||
Log.i(TAG, "Karoo system service connected: $connected")
|
||||
}
|
||||
val rideStateFlow = karooSystemService.streamRideState()
|
||||
|
||||
applicationContext
|
||||
.streamSettings()
|
||||
.combine(rideStateFlow) { settings, rideState ->
|
||||
val showBars = if (settings.onlyShowWhileRiding){
|
||||
rideState is RideState.Recording
|
||||
} else {
|
||||
true
|
||||
}
|
||||
StreamState(settings, showBars)
|
||||
}.collectLatest { (settings, showBars) ->
|
||||
windows.forEach { it.close() }
|
||||
windows.clear()
|
||||
|
||||
if (settings.source != SelectedSource.NONE) {
|
||||
if (settings.source != SelectedSource.NONE && showBars) {
|
||||
Window(this@ForegroundService, PowerbarLocation.BOTTOM).apply {
|
||||
selectedSource = settings.source
|
||||
windows.add(this)
|
||||
@ -39,7 +60,7 @@ class ForegroundService : Service() {
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.topBarSource != SelectedSource.NONE){
|
||||
if (settings.topBarSource != SelectedSource.NONE && showBars){
|
||||
Window(this@ForegroundService, PowerbarLocation.TOP).apply {
|
||||
selectedSource = settings.topBarSource
|
||||
open()
|
||||
|
||||
@ -31,9 +31,7 @@ class KarooPowerbarExtension : KarooExtension("karoo-powerbar", "1.0.1") {
|
||||
|
||||
serviceJob = CoroutineScope(Dispatchers.IO).launch {
|
||||
karooSystem.connect { connected ->
|
||||
if (connected) {
|
||||
Log.i(TAG, "Connected")
|
||||
}
|
||||
Log.i(TAG, "Karoo system service connected: $connected")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowInsets
|
||||
import android.view.WindowManager
|
||||
import de.timklge.karoopowerbar.KarooPowerbarExtension.Companion.TAG
|
||||
import de.timklge.karoopowerbar.screens.SelectedSource
|
||||
import io.hammerhead.karooext.KarooSystemService
|
||||
import io.hammerhead.karooext.models.DataType
|
||||
@ -98,9 +99,7 @@ class Window(
|
||||
suspend fun open() {
|
||||
serviceJob = CoroutineScope(Dispatchers.Default).launch {
|
||||
karooSystem.connect { connected ->
|
||||
if (connected) {
|
||||
Log.i(KarooPowerbarExtension.TAG, "Connected")
|
||||
}
|
||||
Log.i(TAG, "Karoo system service connected: $connected")
|
||||
}
|
||||
|
||||
powerbar.progressColor = context.resources.getColor(R.color.zoneAerobic)
|
||||
|
||||
@ -5,6 +5,7 @@ import android.provider.Settings
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
@ -22,6 +23,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.FilledTonalButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
@ -31,6 +33,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
@ -66,12 +69,15 @@ fun MainScreen() {
|
||||
var showAlerts by remember { mutableStateOf(false) }
|
||||
var givenPermissions by remember { mutableStateOf(false) }
|
||||
|
||||
var onlyShowWhileRiding by remember { mutableStateOf(false) }
|
||||
|
||||
LaunchedEffect(Unit) {
|
||||
givenPermissions = Settings.canDrawOverlays(ctx)
|
||||
|
||||
ctx.streamSettings().collect { settings ->
|
||||
bottomSelectedSource = settings.source
|
||||
topSelectedSource = settings.topBarSource
|
||||
onlyShowWhileRiding = settings.onlyShowWhileRiding
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,10 +128,16 @@ fun MainScreen() {
|
||||
}
|
||||
}
|
||||
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Switch(checked = onlyShowWhileRiding, onCheckedChange = { onlyShowWhileRiding = it})
|
||||
Spacer(modifier = Modifier.width(10.dp))
|
||||
Text("Only show while riding")
|
||||
}
|
||||
|
||||
FilledTonalButton(modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(50.dp), onClick = {
|
||||
val newSettings = PowerbarSettings(source = bottomSelectedSource, topBarSource = topSelectedSource)
|
||||
val newSettings = PowerbarSettings(source = bottomSelectedSource, topBarSource = topSelectedSource, onlyShowWhileRiding = onlyShowWhileRiding)
|
||||
|
||||
coroutineScope.launch {
|
||||
saveSettings(ctx, newSettings)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user