feat(ui): complete ABox app experience redesign #10

Merged
KremeCN merged 40 commits from feat/ui-ux-redesign into main 2026-08-27 23:25:08 +08:00
Showing only changes of commit 1139606f9f - Show all commits
@@ -84,9 +84,6 @@ import com.flagship.abox.manager.domain.SocketPowerState
import com.flagship.abox.manager.domain.infrared.RemoteKeyBinding import com.flagship.abox.manager.domain.infrared.RemoteKeyBinding
import com.flagship.abox.manager.domain.infrared.VirtualRemote import com.flagship.abox.manager.domain.infrared.VirtualRemote
private const val DEFAULT_SOCKET_DEVICE_NAME = "Zigbee插座控制器"
private const val DEFAULT_TH_DEVICE_NAME = "温湿度传感器"
private const val DEFAULT_IR_DEVICE_NAME = "红外控制器"
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@@ -774,7 +771,7 @@ private fun AddTriggerDialog(
onAdd: (type: Int, deviceName: String, time: String, temp: Double, hum: Double, op: ComparisonOperator) -> Unit, onAdd: (type: Int, deviceName: String, time: String, temp: Double, hum: Double, op: ComparisonOperator) -> Unit,
) { ) {
var selectedType by remember { mutableIntStateOf(0) } var selectedType by remember { mutableIntStateOf(0) }
var deviceName by remember { mutableStateOf(DEFAULT_TH_DEVICE_NAME) } var deviceName by remember { mutableStateOf("") }
var timeInput by remember { mutableStateOf("07:30") } var timeInput by remember { mutableStateOf("07:30") }
var tempThreshold by remember { mutableDoubleStateOf(28.0) } var tempThreshold by remember { mutableDoubleStateOf(28.0) }
var humThreshold by remember { mutableDoubleStateOf(40.0) } var humThreshold by remember { mutableDoubleStateOf(40.0) }
@@ -855,9 +852,9 @@ private fun AddConditionDialog(
onAddTimeRange: (String, String) -> Unit, onAddTimeRange: (String, String) -> Unit,
) { ) {
var selectedType by remember { mutableIntStateOf(0) } var selectedType by remember { mutableIntStateOf(0) }
var tempDeviceName by remember { mutableStateOf(DEFAULT_TH_DEVICE_NAME) } var tempDeviceName by remember { mutableStateOf("") }
var humDeviceName by remember { mutableStateOf(DEFAULT_TH_DEVICE_NAME) } var humDeviceName by remember { mutableStateOf("") }
var socketDeviceName by remember { mutableStateOf(DEFAULT_SOCKET_DEVICE_NAME) } var socketDeviceName by remember { mutableStateOf("") }
var operator by remember { mutableStateOf(ComparisonOperator.GREATER_THAN) } var operator by remember { mutableStateOf(ComparisonOperator.GREATER_THAN) }
var tempVal by remember { mutableDoubleStateOf(26.0) } var tempVal by remember { mutableDoubleStateOf(26.0) }
var humVal by remember { mutableDoubleStateOf(50.0) } var humVal by remember { mutableDoubleStateOf(50.0) }
@@ -997,7 +994,7 @@ private fun AddActionDialog(
val defaultNotifyTitle = stringResource(R.string.scene_default_notify_title) val defaultNotifyTitle = stringResource(R.string.scene_default_notify_title)
val defaultNotifyMsg = stringResource(R.string.scene_default_notify_msg) val defaultNotifyMsg = stringResource(R.string.scene_default_notify_msg)
var socketName by remember { mutableStateOf(DEFAULT_SOCKET_DEVICE_NAME) } var socketName by remember { mutableStateOf("") }
var socketPower by remember { mutableStateOf(SocketPowerState.ON) } var socketPower by remember { mutableStateOf(SocketPowerState.ON) }
var selectedRemoteIndex by remember { mutableIntStateOf(0) } var selectedRemoteIndex by remember { mutableIntStateOf(0) }
@@ -1056,7 +1053,6 @@ private fun AddActionDialog(
1 -> { 1 -> {
if (availableRemotes.isEmpty()) { if (availableRemotes.isEmpty()) {
Text(stringResource(R.string.scene_no_virtual_remotes)) Text(stringResource(R.string.scene_no_virtual_remotes))
OutlinedTextField(value = selectedButtonId, onValueChange = { selectedButtonId = it }, label = { Text(stringResource(R.string.scene_remote_button_slot_label)) }, singleLine = true)
} else { } else {
Text(stringResource(R.string.scene_select_virtual_remote)) Text(stringResource(R.string.scene_select_virtual_remote))
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) { Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
@@ -1107,7 +1103,7 @@ private fun AddActionDialog(
confirmButton = { confirmButton = {
val canConfirm = when (actionType) { val canConfirm = when (actionType) {
0 -> socketName.isNotBlank() 0 -> socketName.isNotBlank()
1 -> selectedButtonId.isNotBlank() 1 -> availableRemotes.isNotEmpty() && selectedButtonId.isNotBlank()
3 -> notifyTitle.isNotBlank() 3 -> notifyTitle.isNotBlank()
else -> true else -> true
} }
@@ -1119,8 +1115,6 @@ private fun AddActionDialog(
val remote = availableRemotes.getOrNull(selectedRemoteIndex) val remote = availableRemotes.getOrNull(selectedRemoteIndex)
if (remote != null) { if (remote != null) {
onAddRemote(remote.id.value, remote.displayName, selectedButtonId, selectedButtonName) onAddRemote(remote.id.value, remote.displayName, selectedButtonId, selectedButtonName)
} else {
onAddRemote("default-ir", DEFAULT_IR_DEVICE_NAME, selectedButtonId, selectedButtonName)
} }
} }
2 -> onAddDelay(delaySeconds) 2 -> onAddDelay(delaySeconds)