diff --git a/presentation/src/main/java/com/kusitms/presentation/model/profile/edit/ProfileEditViewModel.kt b/presentation/src/main/java/com/kusitms/presentation/model/profile/edit/ProfileEditViewModel.kt index 1899d9a..05b9577 100644 --- a/presentation/src/main/java/com/kusitms/presentation/model/profile/edit/ProfileEditViewModel.kt +++ b/presentation/src/main/java/com/kusitms/presentation/model/profile/edit/ProfileEditViewModel.kt @@ -99,6 +99,47 @@ class ProfileEditViewModel @Inject constructor( validateFields() } + fun updateSelectedImage(uri: Uri?) { + _selectedImage.value = uri + } + + fun updateLinkTypeAt(index: Int, linkType: LinkType) { + val updatedItems = _linkItems.value.toMutableList() + if (index in updatedItems.indices) { + val currentItem = updatedItems[index] + updatedItems[index] = currentItem.copy(linkType = linkType) + _linkItems.value = updatedItems + } + } + + fun addLinkItem() { + val newLinkItem = LinkItem(LinkType.LINK, "") //기본 설정값 + _linkItems.value = _linkItems.value + newLinkItem + } + + fun updateLinkItem(index: Int, linkType: LinkType, url: String) { + val updatedItems = _linkItems.value.toMutableList() + if (index in updatedItems.indices) { + updatedItems[index] = LinkItem(linkType, url) + _linkItems.value = updatedItems + } + } + + fun removeLinkItem() { + if (_linkItems.value.isNotEmpty()) { + _linkItems.value = _linkItems.value.dropLast(1) + } + } + + fun updateIntroduce(introduce: String) { + _introduce.value = introduce + } + + fun updateSignInStatus(signInStatus: SignInStatus) { + _signInStatus.value = signInStatus + } + + private fun validateFields() { _isAllFieldsValid.value = _major.value.isNotBlank() && _selectedPart.value != null && @@ -116,5 +157,4 @@ class ProfileEditViewModel @Inject constructor( val phoneRegex = Regex("^01(?:0|1|[6-9])-(?:\\d{3}|\\d{4})-\\d{4}\$") return phoneNumber.matches(phoneRegex) } - } \ No newline at end of file diff --git a/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileAdd.kt b/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileAdd.kt new file mode 100644 index 0000000..cc50566 --- /dev/null +++ b/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileAdd.kt @@ -0,0 +1,203 @@ +package com.kusitms.presentation.ui.profile.edit + +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import com.kusitms.presentation.R +import com.kusitms.presentation.common.ui.KusitmsMarginVerticalSpacer +import com.kusitms.presentation.common.ui.theme.KusitmsColorPalette +import com.kusitms.presentation.common.ui.theme.KusitmsTypo +import com.kusitms.presentation.model.profile.edit.ProfileEditViewModel +import com.kusitms.presentation.ui.ImageVector.ImagePhoto +import com.kusitms.presentation.ui.ImageVector.StudyIcon +import com.kusitms.presentation.ui.signIn.TextColumn +import com.kusitms.presentation.ui.signIn.Title2Column +import kotlinx.coroutines.ExperimentalCoroutinesApi + +@OptIn(ExperimentalCoroutinesApi::class) +@Composable +fun ProfileAdd( + viewModel: ProfileEditViewModel = hiltViewModel(), +) { + val scrollState = rememberScrollState() + + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState) + .background(KusitmsColorPalette.current.Grey900), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.Top) + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.Start), + verticalAlignment = Alignment.Top, + ) { + StudyIcon.drawStudyIcon( + modifier = Modifier + .height(24.dp) + .width(24.dp) + ) + Column( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 40.dp) + .background(KusitmsColorPalette.current.Grey900), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.Top + + ) { + Text( + text = stringResource(id = R.string.signin2_text1), + style = KusitmsTypo.current.SubTitle2_Semibold, + color = KusitmsColorPalette.current.Grey300 + ) + Text( + text = stringResource(id = R.string.signin2_text2), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Sub1 + ) + } + } + PhotoColumn(viewModel) + KusitmsMarginVerticalSpacer(size = 10) + IntroEditColumn(viewModel) + KusitmsMarginVerticalSpacer(size = 4) + } +} + +@OptIn(ExperimentalCoroutinesApi::class) +@Composable +fun PhotoColumn(viewModel: ProfileEditViewModel) { + val imageUri by viewModel.selectedImage.collectAsState() // This should be a Uri? in your ViewModel + + val imagePickerLauncher = + rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> + uri?.let { + viewModel.updateSelectedImage(uri) + } + } + + Box( + modifier = Modifier + .width(96.dp) + .height(96.dp) + .background( + color = KusitmsColorPalette.current.Grey600, + shape = RoundedCornerShape(size = 12.dp) + ) + .clickable { + imagePickerLauncher.launch("image/*") + } + ) { + Column( + modifier = Modifier + .align(Alignment.Center), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + ImagePhoto(imageUri) + } + } +} + + +@Composable +fun IntroEditColumn(viewModel: ProfileEditViewModel) { + Column( + modifier = Modifier + .fillMaxWidth() + .background(KusitmsColorPalette.current.Grey900), + verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically), + horizontalAlignment = Alignment.Start, + ) { + Text( + text = stringResource(id = R.string.signin2_title1), + style = KusitmsTypo.current.SubTitle2_Semibold, + color = KusitmsColorPalette.current.Grey300 + ) + IntroEditTextField(viewModel) + } +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalCoroutinesApi::class) +@Composable +fun IntroEditTextField(viewModel: ProfileEditViewModel) { + val maxLength = 100 + val textState by viewModel.introduce.collectAsState() + Column( + modifier = Modifier + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(4.dp), + horizontalAlignment = Alignment.Start + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .height(130.dp) + .background(KusitmsColorPalette.current.Grey600, shape = RoundedCornerShape(16.dp)) + ) { + TextField( + value = textState, + onValueChange = { + if (it.length <= maxLength) { + viewModel.updateIntroduce(it) + } + }, + shape = RoundedCornerShape(16.dp), + colors = TextFieldDefaults.colors( + focusedContainerColor = KusitmsColorPalette.current.Grey600, + unfocusedContainerColor = KusitmsColorPalette.current.Grey600, + disabledContainerColor = KusitmsColorPalette.current.Grey600, + cursorColor = KusitmsColorPalette.current.Grey400, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + focusedTextColor = KusitmsColorPalette.current.White, + unfocusedTextColor = KusitmsColorPalette.current.White, + disabledLabelColor = KusitmsColorPalette.current.White, + ), + placeholder = { + Text( + stringResource(id = R.string.signin2_placeholder1), + style = KusitmsTypo.current.Text_Medium, + color = KusitmsColorPalette.current.Grey400 + ) + } + ) + } + Text( + text = "${textState.length}/$maxLength", + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + } +} + + diff --git a/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileBasic.kt b/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileBasic.kt new file mode 100644 index 0000000..5067896 --- /dev/null +++ b/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileBasic.kt @@ -0,0 +1,201 @@ +package com.kusitms.presentation.ui.profile.edit + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import com.kusitms.presentation.R +import com.kusitms.presentation.common.ui.KusitmsSnackField +import com.kusitms.presentation.common.ui.theme.KusitmsColorPalette +import com.kusitms.presentation.common.ui.theme.KusitmsTypo +import com.kusitms.presentation.model.profile.edit.ProfileEditViewModel +import com.kusitms.presentation.ui.ImageVector.StudyIcon +import com.kusitms.presentation.ui.login.member.TextColumn1 +import com.kusitms.presentation.ui.signIn.KusitmsInputField +import com.kusitms.presentation.ui.signIn.SignInFixedInput +import kotlinx.coroutines.ExperimentalCoroutinesApi + +@OptIn(ExperimentalCoroutinesApi::class) +@Composable +fun ProfileBasic( + viewModel: ProfileEditViewModel = hiltViewModel(), +) { + val email by viewModel.email.collectAsState() + val phoneNum by viewModel.phoneNum.collectAsState() + val name by viewModel.name.collectAsState() + val major by viewModel.major.collectAsState() + val selectedPart by viewModel.selectedPart.collectAsState() + val interests by viewModel.interests.collectAsState() + val likeCategoryText = if (interests.isNotEmpty()) { + interests.joinToString(", ") { it.content } + } else { + stringResource(id = R.string.signin_member_hint1_3) + } + val emailError by viewModel.emailError.collectAsState() + val phoneNumError by viewModel.phoneNumError.collectAsState() + + var isOpenPartBottomSheet by remember { mutableStateOf(false) } + var isOpenLikeCategoryBottomSheet by remember { mutableStateOf(false) } + + + Column( + modifier = Modifier + .fillMaxWidth() + .background(KusitmsColorPalette.current.Grey900) + .height(64.dp), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.Top + + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.Start), + verticalAlignment = Alignment.Top, + ) { + StudyIcon.drawStudyIcon( + modifier = Modifier + .height(24.dp) + .width(24.dp) + ) + TextColumn1() + } + } + Spacer(modifier = Modifier.height(20.dp)) + Text( + text = stringResource(id = R.string.signin_member_title1), + style = KusitmsTypo.current.SubTitle2_Semibold, + color = KusitmsColorPalette.current.Grey300 + ) + Spacer(modifier = Modifier.height(28.dp)) + Text( + text = stringResource(id = R.string.signin_member_caption1_1), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + Spacer(modifier = Modifier.height(5.dp)) + SignInFixedInput(modelValue = name) + Spacer(modifier = Modifier.height(20.dp)) + + //전공 + Text( + text = stringResource(id = R.string.signin_member_caption1_2), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + Spacer(modifier = Modifier.height(5.dp)) + KusitmsInputField( + text = R.string.signin_member_hint1_1, + value = major, + onValueChange = viewModel::updateMajor + ) + if (major.length > 20) { + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = "최대 20자까지 입력할 수 있어요", + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + } + + Spacer(modifier = Modifier.height(24.dp)) + //파트 선택 + + Text( + text = stringResource(id = R.string.signin_member_caption1_3), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + Spacer(modifier = Modifier.height(5.dp)) + (if (!selectedPart.isNullOrEmpty()) { + selectedPart + } else { + stringResource(R.string.signin_member_hint1_2) + })?.let { + KusitmsSnackField( + text = it, + onSnackClick = { + isOpenPartBottomSheet = true + } + ) + } + + //관심 카테고리 + Spacer(modifier = Modifier.height(24.dp)) + Text( + text = stringResource(id = R.string.signin_member_caption1_4), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + Spacer(modifier = Modifier.height(5.dp)) + KusitmsSnackField( + text = likeCategoryText, + onSnackClick = { + isOpenLikeCategoryBottomSheet = true + } + ) + + + Spacer(modifier = Modifier.height(40.dp)) + Text( + text = stringResource(id = R.string.signin_member_title2), + style = KusitmsTypo.current.SubTitle2_Semibold, + color = KusitmsColorPalette.current.Grey300 + ) + //이메일 + Spacer(modifier = Modifier.height(24.dp)) + Text( + text = stringResource(id = R.string.signin_member_caption1_5), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + Spacer(modifier = Modifier.height(5.dp)) + KusitmsInputField( + text = R.string.signin_member_hint1_4, + value = email, + onValueChange = viewModel::updateEmail + ) + emailError?.let { error -> + Text( + text = error, + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + } + + //전화번호 + Spacer(modifier = Modifier.height(20.dp)) + Text( + text = stringResource(id = R.string.signin_member_caption1_6), + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + Spacer(modifier = Modifier.height(5.dp)) + KusitmsInputField( + text = R.string.signin_member_hint1_5, + value = phoneNum, + onValueChange = viewModel::updatePhoneNumber + ) + phoneNumError?.let { error -> + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = error, + style = KusitmsTypo.current.Caption1, + color = KusitmsColorPalette.current.Grey400 + ) + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileEditScreen.kt b/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileEditScreen.kt index 11a6e0f..405608b 100644 --- a/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileEditScreen.kt +++ b/presentation/src/main/java/com/kusitms/presentation/ui/profile/edit/ProfileEditScreen.kt @@ -6,11 +6,9 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll @@ -21,9 +19,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.rotate @@ -34,19 +29,14 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.kusitms.presentation.R import com.kusitms.presentation.common.ui.KusitmsMarginVerticalSpacer -import com.kusitms.presentation.common.ui.KusitmsSnackField import com.kusitms.presentation.common.ui.KusitsmTopBarBackTextWithIcon import com.kusitms.presentation.common.ui.theme.KusitmsColorPalette import com.kusitms.presentation.common.ui.theme.KusitmsTypo import com.kusitms.presentation.model.profile.edit.ProfileEditViewModel import com.kusitms.presentation.model.profile.edit.ProfileFilterList import com.kusitms.presentation.model.profile.edit.categories -import com.kusitms.presentation.ui.ImageVector.StudyIcon import com.kusitms.presentation.ui.ImageVector.icons.KusitmsIcons import com.kusitms.presentation.ui.ImageVector.icons.kusitmsicons.ArrowDown -import com.kusitms.presentation.ui.login.member.TextColumn1 -import com.kusitms.presentation.ui.signIn.KusitmsInputField -import com.kusitms.presentation.ui.signIn.SignInFixedInput import kotlinx.coroutines.ExperimentalCoroutinesApi @OptIn(ExperimentalCoroutinesApi::class) @@ -58,22 +48,6 @@ fun ProfileEditScreen( val scrollState = rememberScrollState() val expanded by viewModel.expended.collectAsStateWithLifecycle() - val email by viewModel.email.collectAsState() - val phoneNum by viewModel.phoneNum.collectAsState() - val name by viewModel.name.collectAsState() - val major by viewModel.major.collectAsState() - val selectedPart by viewModel.selectedPart.collectAsState() - val interests by viewModel.interests.collectAsState() - val likeCategoryText = if (interests.isNotEmpty()) { - interests.joinToString(", ") { it.content } - } else { - stringResource(id = R.string.signin_member_hint1_3) - } - val emailError by viewModel.emailError.collectAsState() - val phoneNumError by viewModel.phoneNumError.collectAsState() - - var isOpenPartBottomSheet by remember { mutableStateOf(false) } - var isOpenLikeCategoryBottomSheet by remember { mutableStateOf(false) } Column { @@ -127,150 +101,7 @@ fun ProfileEditScreen( verticalArrangement = Arrangement.Top, horizontalAlignment = Alignment.Start ) { - Column( - modifier = Modifier - .fillMaxWidth() - .background(KusitmsColorPalette.current.Grey900) - .height(64.dp), - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top - - ) { - Row( - horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.Start), - verticalAlignment = Alignment.Top, - ) { - StudyIcon.drawStudyIcon( - modifier = Modifier - .height(24.dp) - .width(24.dp) - ) - TextColumn1() - } - } - Spacer(modifier = Modifier.height(20.dp)) - Text( - text = stringResource(id = R.string.signin_member_title1), - style = KusitmsTypo.current.SubTitle2_Semibold, - color = KusitmsColorPalette.current.Grey300 - ) - Spacer(modifier = Modifier.height(28.dp)) - Text( - text = stringResource(id = R.string.signin_member_caption1_1), - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - Spacer(modifier = Modifier.height(5.dp)) - SignInFixedInput(modelValue = name) - Spacer(modifier = Modifier.height(20.dp)) - - //전공 - Text( - text = stringResource(id = R.string.signin_member_caption1_2), - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - Spacer(modifier = Modifier.height(5.dp)) - KusitmsInputField( - text = R.string.signin_member_hint1_1, - value = major, - onValueChange = viewModel::updateMajor - ) - if (major.length > 20) { - Spacer(modifier = Modifier.height(4.dp)) - Text( - text = "최대 20자까지 입력할 수 있어요", - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - } - - Spacer(modifier = Modifier.height(24.dp)) - //파트 선택 - - Text( - text = stringResource(id = R.string.signin_member_caption1_3), - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - Spacer(modifier = Modifier.height(5.dp)) - (if (!selectedPart.isNullOrEmpty()) { - selectedPart - } else { - stringResource(R.string.signin_member_hint1_2) - })?.let { - KusitmsSnackField( - text = it, - onSnackClick = { - isOpenPartBottomSheet = true - } - ) - } - - //관심 카테고리 - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(id = R.string.signin_member_caption1_4), - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - Spacer(modifier = Modifier.height(5.dp)) - KusitmsSnackField( - text = likeCategoryText, - onSnackClick = { - isOpenLikeCategoryBottomSheet = true - } - ) - - - Spacer(modifier = Modifier.height(40.dp)) - Text( - text = stringResource(id = R.string.signin_member_title2), - style = KusitmsTypo.current.SubTitle2_Semibold, - color = KusitmsColorPalette.current.Grey300 - ) - //이메일 - Spacer(modifier = Modifier.height(24.dp)) - Text( - text = stringResource(id = R.string.signin_member_caption1_5), - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - Spacer(modifier = Modifier.height(5.dp)) - KusitmsInputField( - text = R.string.signin_member_hint1_4, - value = email, - onValueChange = viewModel::updateEmail - ) - emailError?.let { error -> - Text( - text = error, - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - } - - //전화번호 - Spacer(modifier = Modifier.height(20.dp)) - Text( - text = stringResource(id = R.string.signin_member_caption1_6), - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - Spacer(modifier = Modifier.height(5.dp)) - KusitmsInputField( - text = R.string.signin_member_hint1_5, - value = phoneNum, - onValueChange = viewModel::updatePhoneNumber - ) - phoneNumError?.let { error -> - Spacer(modifier = Modifier.height(4.dp)) - Text( - text = error, - style = KusitmsTypo.current.Caption1, - color = KusitmsColorPalette.current.Grey400 - ) - } + ProfileAdd() } } }