Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.core.location.LocationCompat
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.geeksville.mesh.ConfigProtos
import com.geeksville.mesh.ConfigProtos.Config.PositionConfig
import com.geeksville.mesh.Position
import com.geeksville.mesh.R
Expand Down Expand Up @@ -105,7 +104,7 @@ fun PositionConfigScreen(viewModel: RadioConfigViewModel = hiltViewModel()) {
}

@OptIn(ExperimentalPermissionsApi::class)
@Suppress("LongMethod", "CyclomaticComplexMethod")
@Suppress("LongMethod", "CyclomaticComplexMethod", "MagicNumber")
@Composable
fun PositionConfigItemList(
phoneLocation: Location? = null,
Expand All @@ -125,6 +124,8 @@ fun PositionConfigItemList(
}
var locationInput by rememberSaveable { mutableStateOf(location) }
var positionInput by rememberSaveable { mutableStateOf(positionConfig) }
val maxInt32 = 2147483647
val defaultBroadcastSecs: Int = 900

LaunchedEffect(phoneLocation) {
if (phoneLocation != null) {
Expand All @@ -145,17 +146,48 @@ fun PositionConfigItemList(
}
LazyColumn(modifier = Modifier.fillMaxSize()) {
item { PreferenceCategory(text = stringResource(R.string.position_config)) }

item {
SwitchPreference(
title = "Broadcast Position",
checked = positionInput.positionBroadcastSecs < maxInt32,
enabled = enabled,
onCheckedChange = { isChecked ->
positionInput =
positionInput.copy {
positionBroadcastSecs =
if (isChecked) {
if (positionBroadcastSecs >= maxInt32) {
defaultBroadcastSecs
} else {
positionBroadcastSecs
}
} else {
maxInt32
}
}
},
)
}
item {
EditTextPreference(
title = stringResource(R.string.position_broadcast_interval_seconds),
value = positionInput.positionBroadcastSecs,
enabled = enabled,
enabled = enabled && positionInput.positionBroadcastSecs < maxInt32,
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
onValueChanged = { positionInput = positionInput.copy { positionBroadcastSecs = it } },
onValueChanged = {
positionInput =
positionInput.copy {
positionBroadcastSecs = it
if (it >= maxInt32) {
positionBroadcastSecs = maxInt32
}
}
},
)
}

item { HorizontalDivider() }

item {
SwitchPreference(
title = stringResource(R.string.smart_position_enabled),
Expand Down Expand Up @@ -249,8 +281,8 @@ fun PositionConfigItemList(
title = stringResource(R.string.gps_mode),
enabled = enabled,
items =
ConfigProtos.Config.PositionConfig.GpsMode.entries
.filter { it != ConfigProtos.Config.PositionConfig.GpsMode.UNRECOGNIZED }
PositionConfig.GpsMode.entries
.filter { it != PositionConfig.GpsMode.UNRECOGNIZED }
.map { it to it.name },
selectedItem = positionInput.gpsMode,
onItemSelected = { positionInput = positionInput.copy { gpsMode = it } },
Expand All @@ -274,7 +306,7 @@ fun PositionConfigItemList(
value = positionInput.positionFlags,
enabled = enabled,
items =
ConfigProtos.Config.PositionConfig.PositionFlags.entries
PositionConfig.PositionFlags.entries
.filter {
it != PositionConfig.PositionFlags.UNSET && it != PositionConfig.PositionFlags.UNRECOGNIZED
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.geeksville.mesh.ModuleConfigProtos.ModuleConfig.TelemetryConfig
import com.geeksville.mesh.R
Expand Down Expand Up @@ -61,27 +61,60 @@ fun TelemetryConfigScreen(viewModel: RadioConfigViewModel = hiltViewModel()) {
}

@Composable
@Suppress("MagicNumber", "LongMethod")
fun TelemetryConfigItemList(
telemetryConfig: TelemetryConfig,
enabled: Boolean,
onSaveClicked: (TelemetryConfig) -> Unit,
) {
val focusManager = LocalFocusManager.current
var telemetryInput by rememberSaveable { mutableStateOf(telemetryConfig) }
val maxInt32 = 2147483647
val defaultBroadcastSecs: Int = 1800

LazyColumn(modifier = Modifier.fillMaxSize()) {
item { PreferenceCategory(text = stringResource(R.string.telemetry_config)) }

item {
SwitchPreference(
title = "Broadcast Device Metrics",
checked = telemetryInput.deviceUpdateInterval < maxInt32,
enabled = enabled,
onCheckedChange = { isChecked ->
telemetryInput =
telemetryInput.copy {
deviceUpdateInterval =
if (isChecked) {
if (deviceUpdateInterval >= maxInt32) defaultBroadcastSecs else deviceUpdateInterval
} else {
maxInt32
}
}
},
)
}

item {
EditTextPreference(
title = stringResource(R.string.device_metrics_update_interval_seconds),
value = telemetryInput.deviceUpdateInterval,
enabled = enabled,
enabled = enabled && telemetryInput.deviceUpdateInterval < maxInt32,
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
onValueChanged = { telemetryInput = telemetryInput.copy { deviceUpdateInterval = it } },
onValueChanged = {
telemetryInput =
telemetryInput.copy {
deviceUpdateInterval = it
// Update broadcast toggle based on interval value
if (it >= maxInt32) {
deviceUpdateInterval = maxInt32
}
}
},
)
}

item { HorizontalDivider() }

item {
EditTextPreference(
title = stringResource(R.string.environment_metrics_update_interval_seconds),
Expand Down
Loading