ui: collapse SMS fallback fields when disabled (matching email)
SMS fields (number / quota / carrier / balance) are now hidden when the toggle is off. Previously entered values are preserved, just hidden. Email forwarding already had this pattern. Settings page stays compact. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -260,72 +260,74 @@ fun SettingsScreen(onOpenLog: () -> Unit) {
|
||||
checked = smsFallback,
|
||||
) { v -> app.appScope.launch { app.settings.setSmsFallback(v) } }
|
||||
|
||||
Spacer(Modifier.size(8.dp))
|
||||
OutlinedTextField(
|
||||
value = smsTargetInput,
|
||||
onValueChange = { smsTargetInput = it },
|
||||
label = { Text("iPhone 手机号") },
|
||||
supportingText = { Text("短信转发的目标号码") },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
singleLine = true,
|
||||
)
|
||||
Spacer(Modifier.size(4.dp))
|
||||
Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
OutlinedButton(onClick = {
|
||||
app.appScope.launch { app.settings.setSmsTargetNumber(smsTargetInput.trim()) }
|
||||
smsNumSaved = true
|
||||
}, modifier = Modifier.weight(1f)) { Text(if (smsNumSaved) "✓ 已保存" else "保存号码") }
|
||||
if (smsNumSaved) {
|
||||
LaunchedEffect(Unit) { kotlinx.coroutines.delay(2000); smsNumSaved = false }
|
||||
}
|
||||
if (!hasSmsPerm) {
|
||||
if (smsFallback) {
|
||||
Spacer(Modifier.size(8.dp))
|
||||
OutlinedTextField(
|
||||
value = smsTargetInput,
|
||||
onValueChange = { smsTargetInput = it },
|
||||
label = { Text("iPhone 手机号") },
|
||||
supportingText = { Text("短信转发的目标号码") },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
singleLine = true,
|
||||
)
|
||||
Spacer(Modifier.size(4.dp))
|
||||
Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
OutlinedButton(onClick = {
|
||||
smsPermLauncher.launch(android.Manifest.permission.SEND_SMS)
|
||||
}, modifier = Modifier.weight(1f)) { Text("授予短信权限") }
|
||||
app.appScope.launch { app.settings.setSmsTargetNumber(smsTargetInput.trim()) }
|
||||
smsNumSaved = true
|
||||
}, modifier = Modifier.weight(1f)) { Text(if (smsNumSaved) "✓ 已保存" else "保存号码") }
|
||||
if (smsNumSaved) {
|
||||
LaunchedEffect(Unit) { kotlinx.coroutines.delay(2000); smsNumSaved = false }
|
||||
}
|
||||
if (!hasSmsPerm) {
|
||||
OutlinedButton(onClick = {
|
||||
smsPermLauncher.launch(android.Manifest.permission.SEND_SMS)
|
||||
}, modifier = Modifier.weight(1f)) { Text("授予短信权限") }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(Modifier.size(8.dp))
|
||||
Text(
|
||||
"检测到运营商:${detectedCarrier.displayName}" +
|
||||
if (detectedCarrier.serviceNumber == null) "(无自动查询,将用手动额度)" else "(${detectedCarrier.serviceNumber})",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
Spacer(Modifier.size(8.dp))
|
||||
OutlinedTextField(
|
||||
value = smsQuotaInput,
|
||||
onValueChange = { smsQuotaInput = it.filter { c -> c.isDigit() } },
|
||||
label = { Text("手动短信额度") },
|
||||
supportingText = { Text("自动查询失败时按此递减;余额≤5自动停用") },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
singleLine = true,
|
||||
)
|
||||
Spacer(Modifier.size(4.dp))
|
||||
OutlinedButton(onClick = {
|
||||
val q = smsQuotaInput.trim().toIntOrNull() ?: 0
|
||||
app.appScope.launch {
|
||||
app.settings.setSmsManualQuota(q)
|
||||
app.settings.setSmsBalance(q)
|
||||
if (q > 5) app.settings.setSmsSuspended(false)
|
||||
Spacer(Modifier.size(8.dp))
|
||||
Text(
|
||||
"检测到运营商:${detectedCarrier.displayName}" +
|
||||
if (detectedCarrier.serviceNumber == null) "(无自动查询,将用手动额度)" else "(${detectedCarrier.serviceNumber})",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
Spacer(Modifier.size(8.dp))
|
||||
OutlinedTextField(
|
||||
value = smsQuotaInput,
|
||||
onValueChange = { smsQuotaInput = it.filter { c -> c.isDigit() } },
|
||||
label = { Text("手动短信额度") },
|
||||
supportingText = { Text("自动查询失败时按此递减;余额≤5自动停用") },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
singleLine = true,
|
||||
)
|
||||
Spacer(Modifier.size(4.dp))
|
||||
OutlinedButton(onClick = {
|
||||
val q = smsQuotaInput.trim().toIntOrNull() ?: 0
|
||||
app.appScope.launch {
|
||||
app.settings.setSmsManualQuota(q)
|
||||
app.settings.setSmsBalance(q)
|
||||
if (q > 5) app.settings.setSmsSuspended(false)
|
||||
}
|
||||
smsQuotaSaved = true
|
||||
}) { Text(if (smsQuotaSaved) "✓ 已保存" else "保存额度并解除挂起") }
|
||||
if (smsQuotaSaved) {
|
||||
LaunchedEffect(Unit) { kotlinx.coroutines.delay(2000); smsQuotaSaved = false }
|
||||
}
|
||||
smsQuotaSaved = true
|
||||
}) { Text(if (smsQuotaSaved) "✓ 已保存" else "保存额度并解除挂起") }
|
||||
if (smsQuotaSaved) {
|
||||
LaunchedEffect(Unit) { kotlinx.coroutines.delay(2000); smsQuotaSaved = false }
|
||||
}
|
||||
|
||||
Spacer(Modifier.size(8.dp))
|
||||
val balanceText = when {
|
||||
smsSuspended -> "已挂起(余额不足)"
|
||||
smsBalance < 0 -> "余额未知"
|
||||
else -> "剩余约 ${smsBalance} 条"
|
||||
Spacer(Modifier.size(8.dp))
|
||||
val balanceText = when {
|
||||
smsSuspended -> "已挂起(余额不足)"
|
||||
smsBalance < 0 -> "余额未知"
|
||||
else -> "剩余约 ${smsBalance} 条"
|
||||
}
|
||||
Text(
|
||||
"当前状态:$balanceText",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = if (smsSuspended) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
Text(
|
||||
"当前状态:$balanceText",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = if (smsSuspended) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user