package net.bluemangoo.indpjsk.ui import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.unit.dp import net.bluemangoo.indpjsk.R import net.bluemangoo.indpjsk.data.SettingsStore @OptIn(ExperimentalMaterial3Api::class) @Composable fun UploadSettingsScreen(onBack: () -> Unit) { val context = LocalContext.current var code by remember { mutableStateOf(SettingsStore.loadUploadCode(context)) } var useUpload by remember { mutableStateOf(SettingsStore.loadUseUpload(context)) } var showCode by remember { mutableStateOf(false) } val canUpload = code.isNotBlank() Scaffold( topBar = { TopAppBar( title = { Text("上传设置") }, navigationIcon = { IconButton(onClick = onBack) { Icon( painter = painterResource(R.drawable.arrow_back_24px), contentDescription = "返回" ) } } ) } ) { padding -> Column( modifier = Modifier .padding(padding) .verticalScroll(rememberScrollState()) .padding(horizontal = 16.dp, vertical = 12.dp), verticalArrangement = Arrangement.spacedBy(12.dp) ) { OutlinedTextField( value = code, onValueChange = { code = it.trim() SettingsStore.saveUploadCode(context, code) if (code.isBlank() && useUpload) { useUpload = false SettingsStore.saveUseUpload(context, false) } }, modifier = Modifier.fillMaxWidth(), singleLine = true, label = { Text("Haruki 上传码") }, placeholder = { Text("从 Haruki 工具箱 - 数据上传 - iOS 获取") }, visualTransformation = if (showCode) { VisualTransformation.None } else { PasswordVisualTransformation() }, trailingIcon = { TextButton(onClick = { showCode = !showCode }) { Text(if (showCode) "隐藏" else "显示") } } ) Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { Checkbox( checked = useUpload && canUpload, onCheckedChange = { useUpload = it SettingsStore.saveUseUpload(context, it) }, enabled = canUpload ) Text( text = "上传到 Haruki", style = MaterialTheme.typography.bodyMedium ) } } } }