diff --git a/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt b/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt index d313046..98bab09 100644 --- a/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt +++ b/foreground/src/main/java/com/gyf/csams/account/ui/AccountActivity.kt @@ -19,7 +19,6 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.withStyle -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.NavHost @@ -117,282 +116,263 @@ class AccountActivity : ComponentActivity() { } } } -} -/** - * 帐号表单 - * - * @param accountViewModel - * @param Action 表单操作区域 - */ -@Composable -private fun Account( - accountViewModel: AccountViewModel = viewModel(), - scaffoldState: ScaffoldState, - route: AccountRoute, - Action: @Composable (isValidForm: Boolean, accountViewModel: AccountViewModel) -> Unit -) { - accountViewModel.route = route - Row( - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxSize() + /** + * 帐号表单 + * + * @param accountViewModel + * @param Action 表单操作区域 + */ + @Composable + private fun Account( + accountViewModel: AccountViewModel = viewModel(), + scaffoldState: ScaffoldState, + route: AccountRoute, + Action: @Composable (isValidForm: Boolean, accountViewModel: AccountViewModel) -> Unit ) { - Column(modifier = Modifier.width(IntrinsicSize.Min)) { - Text(buildAnnotatedString { - withStyle( - style = MaterialTheme.typography.subtitle1.toSpanStyle() - .copy(color = MaterialTheme.colors.primary) - ) { - append(accountViewModel.name.formValue.value ?: "") - } - withStyle(style = MaterialTheme.typography.subtitle1.toSpanStyle()) { - append(accountViewModel.welcomeStart) - } - withStyle(style = MaterialTheme.typography.subtitle2.toSpanStyle()) { - append(accountViewModel.welcomeEnd) - } - withStyle( - style = MaterialTheme.typography.subtitle2.toSpanStyle() - .copy(color = MaterialTheme.colors.secondary) - ) { - append(BuildConfig.foreground_app_name) - } - }) - - StudentId(checkRepeat = route == AccountRoute.register) - Spacer(modifier = Modifier.height(10.dp)) - + accountViewModel.route = route + Row( + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxSize() + ) { + Column(modifier = Modifier.width(IntrinsicSize.Min)) { + Text(buildAnnotatedString { + withStyle( + style = MaterialTheme.typography.subtitle1.toSpanStyle() + .copy(color = MaterialTheme.colors.primary) + ) { + append(accountViewModel.name.formValue.value ?: "") + } + withStyle(style = MaterialTheme.typography.subtitle1.toSpanStyle()) { + append(accountViewModel.welcomeStart) + } + withStyle(style = MaterialTheme.typography.subtitle2.toSpanStyle()) { + append(accountViewModel.welcomeEnd) + } + withStyle( + style = MaterialTheme.typography.subtitle2.toSpanStyle() + .copy(color = MaterialTheme.colors.secondary) + ) { + append(BuildConfig.foreground_app_name) + } + }) - if (route == AccountRoute.register) Name() else Password() + StudentId(checkRepeat = route == AccountRoute.register) + Spacer(modifier = Modifier.height(10.dp)) - Spacer(modifier = Modifier.height(10.dp)) - PasswordTip() - val isValidForm: Boolean by accountViewModel.isValidForm.observeAsState(false) - Action(isValidForm = isValidForm, accountViewModel = accountViewModel) - val snackBarMsg: String by accountViewModel.snackBarMsg.observeAsState("") + if (route == AccountRoute.register) Name() else Password() - if (snackBarMsg != "") { - LaunchedEffect(scaffoldState) { - scaffoldState.snackbarHostState.showSnackbar( - message = snackBarMsg - ) - accountViewModel.resetRegisterResMsg() + Spacer(modifier = Modifier.height(10.dp)) + PasswordTip() + val isValidForm: Boolean by accountViewModel.isValidForm.observeAsState(false) + Action(isValidForm = isValidForm, accountViewModel = accountViewModel) + + val snackBarMsg: String by accountViewModel.snackBarMsg.observeAsState("") + + if (snackBarMsg != "") { + LaunchedEffect(scaffoldState) { + scaffoldState.snackbarHostState.showSnackbar( + message = snackBarMsg + ) + accountViewModel.resetRegisterResMsg() + } } - } - RegisterDialog() + RegisterDialog() + } } } -} -/** - * 学号 - * @param accountViewModel - */ -@Composable -private fun StudentId(accountViewModel: AccountViewModel = viewModel(), checkRepeat: Boolean) { - Column { - - - val isValidStudentId: Boolean by accountViewModel.isValidStudentId.observeAsState(false) - BaseTextField( - form = accountViewModel.studentId, keyboardOptions = KeyboardOptions.Default.copy( - keyboardType = KeyboardType.Number, - imeAction = ImeAction.Done - ), isError = !isValidStudentId - ) - if (isValidStudentId) { - if (checkRepeat) { - val isRepeat: Boolean? by accountViewModel.isRepeat.observeAsState(null) - Logger.i("isRepeat=$isRepeat") - when (isRepeat) { - null -> AnimationText(text = accountViewModel.checkRegTip) - true -> - Text(buildAnnotatedString { - append(accountViewModel.studentId.formDesc) - withStyle( - style = MaterialTheme.typography.body1.toSpanStyle().copy( - color = MaterialTheme.colors.error - ) - ) { - append(accountViewModel.studentId.formValue.value ?: "") - } - append(accountViewModel.registered) - }) - false -> - Text(buildAnnotatedString { - append(accountViewModel.studentId.formDesc) - withStyle( - style = MaterialTheme.typography.body1.toSpanStyle().copy( - color = MaterialTheme.colors.primary - ) - ) { - append(accountViewModel.studentId.formValue.value ?: "") - } - append(accountViewModel.canRegister) - }) + /** + * 学号 + * @param accountViewModel + */ + @Composable + private fun StudentId(accountViewModel: AccountViewModel = viewModel(), checkRepeat: Boolean) { + Column { + + + val isValidStudentId: Boolean by accountViewModel.isValidStudentId.observeAsState(false) + BaseTextField( + form = accountViewModel.studentId, keyboardOptions = KeyboardOptions.Default.copy( + keyboardType = KeyboardType.Number, + imeAction = ImeAction.Done + ), isError = !isValidStudentId + ) + if (isValidStudentId) { + if (checkRepeat) { + val isRepeat: Boolean? by accountViewModel.isRepeat.observeAsState(null) + Logger.i("isRepeat=$isRepeat") + when (isRepeat) { + null -> AnimationText(text = accountViewModel.checkRegTip) + true -> + Text(buildAnnotatedString { + append(accountViewModel.studentId.formDesc) + withStyle( + style = MaterialTheme.typography.body1.toSpanStyle().copy( + color = MaterialTheme.colors.error + ) + ) { + append(accountViewModel.studentId.formValue.value ?: "") + } + append(accountViewModel.registered) + }) + false -> + Text(buildAnnotatedString { + append(accountViewModel.studentId.formDesc) + withStyle( + style = MaterialTheme.typography.body1.toSpanStyle().copy( + color = MaterialTheme.colors.primary + ) + ) { + append(accountViewModel.studentId.formValue.value ?: "") + } + append(accountViewModel.canRegister) + }) + } } + } else { + Text( + text = accountViewModel.studentIdFormat, + color = MaterialTheme.colors.error, + style = MaterialTheme.typography.body1 + ) } - } else { - Text( - text = accountViewModel.studentIdFormat, - color = MaterialTheme.colors.error, - style = MaterialTheme.typography.body1 - ) - } + } } -} -/** - * 注册弹窗 - * - * @param accountViewModel - */ -@Composable -private fun RegisterDialog(accountViewModel: AccountViewModel = viewModel()) { - val dialogMsg: DialogMessage? by accountViewModel.dialogMsg.observeAsState(null) - - val message = dialogMsg?.userResDto?.password - if (message?.isNotEmpty() == true) { - PasswordDialog(message = message) + /** + * 注册弹窗 + * + * @param accountViewModel + */ + @Composable + private fun RegisterDialog(accountViewModel: AccountViewModel = viewModel()) { + val dialogMsg: DialogMessage? by accountViewModel.dialogMsg.observeAsState(null) + + val message = dialogMsg?.userResDto?.password + if (message?.isNotEmpty() == true) { + PasswordDialog(message = message) + } } -} -/** - * 密码弹窗 - * - * @param accountViewModel - * @param message - */ -@Composable -private fun PasswordDialog(accountViewModel: AccountViewModel = viewModel(), message: String) { - val context = LocalContext.current - val button: @Composable () -> Unit = { - Row( - horizontalArrangement = Arrangement.Center, modifier = Modifier - .fillMaxWidth() - .padding(bottom = 10.dp) - ) { - OutlinedButton( - onClick = { accountViewModel.resetDialogMsg() }, - modifier = Modifier.padding(end = 10.dp) - ) { - Text(text = accountViewModel.confirmDesc) - } - OutlinedButton( - onClick = { - context.startActivity(Intent(context, AccountActivity::class.java)) - }, - colors = ButtonDefaults.outlinedButtonColors( - contentColor = MaterialTheme.colors.onBackground - ) + /** + * 密码弹窗 + * + * @param accountViewModel + * @param message + */ + @Composable + private fun PasswordDialog(accountViewModel: AccountViewModel = viewModel(), message: String) { + val context = LocalContext.current + val button: @Composable () -> Unit = { + Row( + horizontalArrangement = Arrangement.Center, modifier = Modifier + .fillMaxWidth() + .padding(bottom = 10.dp) ) { - Text(text = accountViewModel.backLogin) - } - } - } - AlertDialog(onDismissRequest = { accountViewModel.resetDialogMsg() }, - buttons = button, - title = { Text(text = accountViewModel.title) }, - text = { - Text(buildAnnotatedString { - append(accountViewModel.passwordDialogStart) - withStyle( - style = MaterialTheme.typography.body1.toSpanStyle() - .copy(color = MaterialTheme.colors.secondary) + OutlinedButton( + onClick = { accountViewModel.resetDialogMsg() }, + modifier = Modifier.padding(end = 10.dp) + ) { + Text(text = accountViewModel.confirmDesc) + } + OutlinedButton( + onClick = { + context.startActivity(Intent(context, AccountActivity::class.java)) + }, + colors = ButtonDefaults.outlinedButtonColors( + contentColor = MaterialTheme.colors.onBackground + ) ) { - append(message) + Text(text = accountViewModel.backLogin) } - append(accountViewModel.passwordDialogEnd) + } + } + AlertDialog(onDismissRequest = { accountViewModel.resetDialogMsg() }, + buttons = button, + title = { Text(text = accountViewModel.title) }, + text = { + Text(buildAnnotatedString { + append(accountViewModel.passwordDialogStart) + withStyle( + style = MaterialTheme.typography.body1.toSpanStyle() + .copy(color = MaterialTheme.colors.secondary) + ) { + append(message) + } + append(accountViewModel.passwordDialogEnd) + }) }) - }) -} + } -/** - * 姓名文本框 - * @param accountViewModel - */ -@Composable -private fun Name(accountViewModel: AccountViewModel = viewModel()) { - Column { + /** + * 姓名文本框 + * @param accountViewModel + */ + @Composable + private fun Name(accountViewModel: AccountViewModel = viewModel()) { + Column { - val isValidName: Boolean by accountViewModel.isValidName.observeAsState(false) - BaseTextField(form = accountViewModel.name, isError = !isValidName) + val isValidName: Boolean by accountViewModel.isValidName.observeAsState(false) + BaseTextField(form = accountViewModel.name, isError = !isValidName) - if (!isValidName) { - Text( - text = accountViewModel.nameFormat, - color = MaterialTheme.colors.error - ) + if (!isValidName) { + Text( + text = accountViewModel.nameFormat, + color = MaterialTheme.colors.error + ) + } } - } -} + } -/** - * 密码框 - * @param accountViewModel - */ -@Composable -private fun Password(accountViewModel: AccountViewModel = viewModel()) { - Column { - val isValidPwd: Boolean by accountViewModel.isValidPwd.observeAsState(false) - - BaseTextField( - form = accountViewModel.password, isError = !isValidPwd, - keyboardOptions = KeyboardOptions.Default.copy( - imeAction = ImeAction.Done, - keyboardType = KeyboardType.Number, - ), visualTransformation = PasswordVisualTransformation() - ) - - - if (!isValidPwd) { - Text( - text = accountViewModel.passwordFormat, - color = MaterialTheme.colors.error + /** + * 密码框 + * @param accountViewModel + */ + @Composable + private fun Password(accountViewModel: AccountViewModel = viewModel()) { + Column { + val isValidPwd: Boolean by accountViewModel.isValidPwd.observeAsState(false) + + BaseTextField( + form = accountViewModel.password, isError = !isValidPwd, + keyboardOptions = KeyboardOptions.Default.copy( + imeAction = ImeAction.Done, + keyboardType = KeyboardType.Number, + ), visualTransformation = PasswordVisualTransformation() ) + + + if (!isValidPwd) { + Text( + text = accountViewModel.passwordFormat, + color = MaterialTheme.colors.error + ) + } } } -} -/** - * 提示自动生成密码 - * - * @param accountViewModel - */ -@Composable -private fun PasswordTip(accountViewModel: AccountViewModel = viewModel()) { - if (accountViewModel.isValidForm.value == true) { - Text( - text = accountViewModel.passwordTip, color = MaterialTheme.colors.primary, - modifier = Modifier.fillMaxWidth() - ) + /** + * 提示自动生成密码 + * + * @param accountViewModel + */ + @Composable + private fun PasswordTip(accountViewModel: AccountViewModel = viewModel()) { + if (accountViewModel.isValidForm.value == true) { + Text( + text = accountViewModel.passwordTip, color = MaterialTheme.colors.primary, + modifier = Modifier.fillMaxWidth() + ) + } } } -@Preview(showBackground = true) -@Composable -fun DefaultPreview() { - CSAMSTheme { - - Row( - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxSize() - ) { - Column(modifier = Modifier.width(IntrinsicSize.Min)) { - val model: AccountViewModel = viewModel() - - StudentId(model, false) - Spacer(modifier = Modifier.height(10.dp)) - } - } - } -}