diff --git a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/components/DeviceConfigItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/components/DeviceConfigItemList.kt
index 0d3c16c40..9b08ae7f0 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/radioconfig/components/DeviceConfigItemList.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/radioconfig/components/DeviceConfigItemList.kt
@@ -17,19 +17,31 @@
package com.geeksville.mesh.ui.radioconfig.components
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.AlertDialog
+import androidx.compose.material.Checkbox
import androidx.compose.material.Divider
+import androidx.compose.material.Text
+import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextLinkStyles
+import androidx.compose.ui.text.fromHtml
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
@@ -97,6 +109,57 @@ fun DeviceConfigScreen(
)
}
+@Suppress("LongMethod")
+@Composable
+fun RouterRoleConfirmationDialog(
+ onDismiss: () -> Unit,
+ onConfirm: () -> Unit,
+) {
+ val dialogTitle = stringResource(R.string.are_you_sure)
+ val annotatedDialogText = AnnotatedString.fromHtml(
+ htmlString = stringResource(R.string.router_role_confirmation_text),
+ linkStyles = TextLinkStyles(style = SpanStyle(color = Color.Blue))
+ )
+
+ var confirmed by rememberSaveable { mutableStateOf(false) }
+
+ AlertDialog(
+ title = {
+ Text(text = dialogTitle)
+ },
+ text = {
+ Column {
+ Text(text = annotatedDialogText)
+ Row(
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Checkbox(
+ checked = confirmed,
+ onCheckedChange = { confirmed = it }
+ )
+ Text(stringResource(R.string.i_know_what_i_m_doing))
+ }
+ }
+ },
+ onDismissRequest = onDismiss,
+ confirmButton = {
+ TextButton(
+ onClick = onConfirm,
+ enabled = confirmed
+ ) {
+ Text(stringResource(R.string.accept))
+ }
+ },
+ dismissButton = {
+ TextButton(
+ onClick = onDismiss
+ ) {
+ Text(stringResource(R.string.cancel))
+ }
+ }
+ )
+}
+
@Composable
fun DeviceConfigItemList(
deviceConfig: DeviceConfig,
@@ -106,6 +169,16 @@ fun DeviceConfigItemList(
val focusManager = LocalFocusManager.current
var deviceInput by rememberSaveable { mutableStateOf(deviceConfig) }
+ var showRouterRoleConfirmationDialog by rememberSaveable { mutableStateOf(false) }
+ if (showRouterRoleConfirmationDialog) {
+ RouterRoleConfirmationDialog(
+ onDismiss = { showRouterRoleConfirmationDialog = false },
+ onConfirm = {
+ showRouterRoleConfirmationDialog = false
+ deviceInput = deviceInput.copy { role = DeviceConfig.Role.ROUTER }
+ }
+ )
+ }
LazyColumn(
modifier = Modifier.fillMaxSize()
) {
@@ -116,7 +189,13 @@ fun DeviceConfigItemList(
title = "Role",
enabled = enabled,
selectedItem = deviceInput.role,
- onItemSelected = { deviceInput = deviceInput.copy { role = it } },
+ onItemSelected = {
+ if (it == DeviceConfig.Role.ROUTER && deviceInput.role != DeviceConfig.Role.ROUTER) {
+ showRouterRoleConfirmationDialog = true
+ } else {
+ deviceInput = deviceInput.copy { role = it }
+ }
+ },
summary = stringResource(id = deviceInput.role.stringRes),
)
Divider()
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 36d8f31b0..6364a6809 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -328,4 +328,7 @@
Channel 3
Current
Voltage
+ Are you sure?
+ Device Role Documentation and the blog post about Choosing The Right Device Role.]]>
+ I know what I\'m doing.