diff --git a/feature/login/src/main/java/pokitmons/pokit/LoginViewModel.kt b/feature/login/src/main/java/pokitmons/pokit/LoginViewModel.kt index f19f7ec0..e4168cde 100644 --- a/feature/login/src/main/java/pokitmons/pokit/LoginViewModel.kt +++ b/feature/login/src/main/java/pokitmons/pokit/LoginViewModel.kt @@ -43,6 +43,9 @@ class LoginViewModel @Inject constructor( } } } + + val nicknameRegex = Regex("^[a-zA-Z0-9가-힣]+$") + private var duplicateNicknameJob: Job? = null private val _isBottomSheetVisible: MutableState = mutableStateOf(false) @@ -134,7 +137,7 @@ class LoginViewModel @Inject constructor( fun checkDuplicateNickname(nickname: String) { duplicateNicknameJob?.cancel() duplicateNicknameJob = viewModelScope.launch { - delay(1.second()) + delay(0.5.second()) when (val duplicateNicknameResult = nicknameUseCase.checkDuplicateNickname(nickname)) { is PokitResult.Success -> { _inputNicknameState.update { duplicateNicknameState -> @@ -147,6 +150,13 @@ class LoginViewModel @Inject constructor( } } + fun checkNicknameRegex(nickname: String): Boolean { + _inputNicknameState.update { duplicateNicknameState -> + duplicateNicknameState.copy(isRegex = nicknameRegex.matches(nickname)) + } + return nicknameRegex.matches(nickname) + } + fun setCategories() { val categoryNames: List = listOf( context.getString(R.string.sports_and_leisure), @@ -195,6 +205,10 @@ class LoginViewModel @Inject constructor( return (this * 1000L) } + private fun Double.second(): Long { + return (this * 1000L).toLong() + } + private const val LIMIT_SELECTED_COUNT = 3 } } diff --git a/feature/login/src/main/java/pokitmons/pokit/model/DuplicateNicknameState.kt b/feature/login/src/main/java/pokitmons/pokit/model/DuplicateNicknameState.kt index 62086325..75029ff8 100644 --- a/feature/login/src/main/java/pokitmons/pokit/model/DuplicateNicknameState.kt +++ b/feature/login/src/main/java/pokitmons/pokit/model/DuplicateNicknameState.kt @@ -2,5 +2,6 @@ package pokitmons.pokit.model data class DuplicateNicknameState( val nickname: String = "", - val isDuplicate: Boolean = true, + val isDuplicate: Boolean = false, + val isRegex: Boolean = false, ) diff --git a/feature/login/src/main/java/pokitmons/pokit/nickname/InputNicknameScreen.kt b/feature/login/src/main/java/pokitmons/pokit/nickname/InputNicknameScreen.kt index 89c40626..ce096374 100644 --- a/feature/login/src/main/java/pokitmons/pokit/nickname/InputNicknameScreen.kt +++ b/feature/login/src/main/java/pokitmons/pokit/nickname/InputNicknameScreen.kt @@ -1,5 +1,6 @@ package pokitmons.pokit.nickname +import android.util.Log import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -65,17 +66,23 @@ fun InputNicknameScreen( inputText = inputNicknameState.nickname, maxLength = NICKNAME_MAX_LENGTH, sub = when { - inputNicknameState.nickname.length < NICKNAME_MAX_LENGTH -> stringResource(id = Login.string.input_restriction_message) - !inputNicknameState.isDuplicate -> stringResource(id = Login.string.nickname_already_in_use) - else -> stringResource(id = Login.string.input_max_length) + inputNicknameState.isDuplicate -> stringResource(id = Login.string.nickname_already_in_use) + inputNicknameState.isRegex -> stringResource(id = Login.string.input_restriction_message) + inputNicknameState.nickname.length < NICKNAME_MAX_LENGTH -> stringResource(id = Login.string.input_max_length) + else -> "" }, - isError = inputNicknameState.nickname.length > NICKNAME_MAX_LENGTH || !inputNicknameState.isDuplicate, + isError = inputNicknameState.nickname.length > NICKNAME_MAX_LENGTH || inputNicknameState.isDuplicate || inputNicknameState.isRegex, hintText = stringResource(id = Login.string.input_nickname_hint), onChangeText = { text -> + Log.d("!! : ", text) if (text.length <= NICKNAME_MAX_LENGTH) { viewModel.apply { inputText(text) - checkDuplicateNickname(text) + if (checkNicknameRegex(text)) { + Log.d("!! : ", "else call") + checkDuplicateNickname(text) + } else { + } } } } @@ -89,7 +96,7 @@ fun InputNicknameScreen( text = stringResource(id = pokitmons.pokit.login.R.string.next), icon = null, size = PokitButtonSize.LARGE, - enable = !inputNicknameState.isDuplicate, + enable = !inputNicknameState.isDuplicate && inputNicknameState.isRegex && inputNicknameState.nickname.length < NICKNAME_MAX_LENGTH, onClick = { onNavigateToKeywordScreen() } ) } diff --git a/feature/login/src/main/java/pokitmons/pokit/success/SignUpSuccessScreen.kt b/feature/login/src/main/java/pokitmons/pokit/success/SignUpSuccessScreen.kt index 8fbd5d79..99412fce 100644 --- a/feature/login/src/main/java/pokitmons/pokit/success/SignUpSuccessScreen.kt +++ b/feature/login/src/main/java/pokitmons/pokit/success/SignUpSuccessScreen.kt @@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -34,12 +33,6 @@ fun SignUpSuccessScreen( .background(color = Color.White) .padding(start = 20.dp, end = 20.dp, top = 20.dp, bottom = 28.dp) ) { - Icon( - modifier = Modifier.padding(start = 4.dp), - painter = painterResource(id = coreDrawable.icon_24_arrow_left), - contentDescription = null - ) - Column( modifier = Modifier .fillMaxWidth() diff --git a/feature/login/src/main/res/values/strings.xml b/feature/login/src/main/res/values/strings.xml index 0012ad0b..a6459201 100644 --- a/feature/login/src/main/res/values/strings.xml +++ b/feature/login/src/main/res/values/strings.xml @@ -10,7 +10,7 @@ 내용을 입력해주세요. 한글, 영어, 숫자로만 입력이 가능합니다. 사용 중인 닉네임입니다. - 최대 20자까지 입력 가능합니다. + 최대 10자까지 입력 가능합니다. 어떤 분야에 관심이 있으세요? 최대 3개를 골라주시면,\n관련 콘텐츠를 추천해드릴게요! 스포츠/레저 diff --git a/feature/settings/src/main/java/pokitmons/pokit/settings/SettingViewModel.kt b/feature/settings/src/main/java/pokitmons/pokit/settings/SettingViewModel.kt index bf37d3eb..95697815 100644 --- a/feature/settings/src/main/java/pokitmons/pokit/settings/SettingViewModel.kt +++ b/feature/settings/src/main/java/pokitmons/pokit/settings/SettingViewModel.kt @@ -61,7 +61,7 @@ class SettingViewModel @Inject constructor( fun checkDuplicateNickname(nickname: String) { duplicateNicknameJob?.cancel() duplicateNicknameJob = viewModelScope.launch { - delay(1.second()) + delay(0.5.second()) when (val duplicateNicknameResult = nicknameUseCase.checkDuplicateNickname(nickname)) { is PokitResult.Success -> { _inputNicknameState.update { duplicateNicknameState -> @@ -115,6 +115,10 @@ class SettingViewModel @Inject constructor( private fun Int.second(): Long { return (this * 1000L) } + + private fun Double.second(): Long { + return (this * 1000L).toLong() + } } } diff --git a/feature/settings/src/main/java/pokitmons/pokit/settings/setting/SettingsScreen.kt b/feature/settings/src/main/java/pokitmons/pokit/settings/setting/SettingsScreen.kt index a5db85da..74f30ece 100644 --- a/feature/settings/src/main/java/pokitmons/pokit/settings/setting/SettingsScreen.kt +++ b/feature/settings/src/main/java/pokitmons/pokit/settings/setting/SettingsScreen.kt @@ -45,9 +45,10 @@ fun SettingsScreen( SettingItem(title = stringResource(StringResource.nickname_settings)) { onNavigateToEditNickname() } - SettingItem(title = stringResource(StringResource.notification_settings)) { - // TODO 커스텀 토스트 메세지 - } + +// SettingItem(title = stringResource(StringResource.notification_settings)) { +// // TODO 커스텀 토스트 메세지 +// } DividerItem() diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml index fd7fc692..af92a543 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/main/res/values/strings.xml @@ -16,6 +16,6 @@ 저장 한글, 영어, 숫자로만 입력이 가능합니다. 사용 중인 닉네임입니다. - 최대 20자까지 입력 가능합니다. + 최대 10자까지 입력 가능합니다. 닉네임을 입력해주세요 \ No newline at end of file