diff --git a/domain/src/main/java/co/kr/tnt/domain/utils/AppUrls.kt b/domain/src/main/java/co/kr/tnt/domain/utils/AppUrls.kt index 9892dd5b..5f27347a 100644 --- a/domain/src/main/java/co/kr/tnt/domain/utils/AppUrls.kt +++ b/domain/src/main/java/co/kr/tnt/domain/utils/AppUrls.kt @@ -1,7 +1,6 @@ package co.kr.tnt.domain.utils object AppUrls { - // TODO - const val PRIVACY_POLICY_URL = "https://fluffy-router-d0b.notion.site/775bc037dd1b4e8ba56679e51a7321e5" - const val TERMS_OF_SERVICE_URL = "https://fluffy-router-d0b.notion.site/f1ee7a43b6d941068723163fda127699" + const val PRIVACY_POLICY_URL = "https://ymkim97.notion.site/1bcd727836a3813e9f5dd60ed9620612" + const val TERMS_OF_SERVICE_URL = "https://ymkim97.notion.site/1bcd727836a381c08c7bdf4d70c3639b" } diff --git a/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordContract.kt b/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordContract.kt index 8064ac21..7e2f70f5 100644 --- a/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordContract.kt +++ b/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordContract.kt @@ -1,10 +1,10 @@ package co.kr.tnt.trainee.mealrecord -import android.content.Context import android.net.Uri import co.kr.tnt.ui.base.UiEvent import co.kr.tnt.ui.base.UiSideEffect import co.kr.tnt.ui.base.UiState +import java.io.File import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime @@ -52,7 +52,7 @@ internal class TraineeMealRecordContract { data object OnClickCloseBottomSheet : TraineeMealRecordUiEvent data class OnSelectMealType(val mealType: String) : TraineeMealRecordUiEvent data class OnChangeMemo(val memo: String) : TraineeMealRecordUiEvent - data class OnClickSave(val context: Context) : TraineeMealRecordUiEvent + data class OnClickSave(val imageFile: File?) : TraineeMealRecordUiEvent data object OnClickBack : TraineeMealRecordUiEvent data object OnClickDialogConfirm : TraineeMealRecordUiEvent data object OnDismissDialog : TraineeMealRecordUiEvent diff --git a/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordScreen.kt b/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordScreen.kt index 6c4d8e0c..e59060e4 100644 --- a/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordScreen.kt +++ b/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordScreen.kt @@ -77,11 +77,14 @@ import co.kr.tnt.ui.coil.ResizeTransformation import co.kr.tnt.ui.component.TnTLoadingScreen import co.kr.tnt.ui.extensions.clearFocusOnTap import co.kr.tnt.ui.model.RecordChip +import co.kr.tnt.ui.utils.convertToAllowedImageFormat import co.kr.tnt.ui.utils.throttled import coil.compose.rememberAsyncImagePainter import coil.request.ImageRequest import com.kizitonwose.calendar.compose.rememberCalendarState +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.time.DayOfWeek import java.time.LocalDate import java.time.LocalTime @@ -98,6 +101,7 @@ internal fun TraineeMealRecordRoute( val context = LocalContext.current val snackbar = LocalSnackbar.current + val coroutineScope = rememberCoroutineScope() val state by viewModel.uiState.collectAsStateWithLifecycle() val dateFormatter = remember { DateFormatter() } @@ -106,9 +110,7 @@ internal fun TraineeMealRecordRoute( LaunchedEffect(selectedDate) { viewModel.setEvent( TraineeMealRecordUiEvent.OnSelectMealDate( - dateFormatter.parse( - selectedDate, - ), + dateFormatter.parse(selectedDate), ), ) } @@ -116,7 +118,7 @@ internal fun TraineeMealRecordRoute( TraineeMealRecordScreen( state = state, context = context, - onImageSelect = { uri -> + onSelectImage = { uri -> viewModel.setEvent(TraineeMealRecordUiEvent.OnSelectImage(imageUri = uri)) }, onClickDeleteImage = { viewModel.setEvent(TraineeMealRecordUiEvent.OnClickDeleteImage) }, @@ -137,7 +139,14 @@ internal fun TraineeMealRecordRoute( onClickBack = { viewModel.setEvent(TraineeMealRecordUiEvent.OnClickBack) }, - onClickSaveButton = { viewModel.setEvent(TraineeMealRecordUiEvent.OnClickSave(context)) }, + onClickSaveButton = { + coroutineScope.launch { + val imageFile = withContext(Dispatchers.IO) { + state.image?.convertToAllowedImageFormat(context) + } + viewModel.setEvent(TraineeMealRecordUiEvent.OnClickSave(imageFile)) + } + }, ) if (showBottomSheet) { @@ -201,7 +210,7 @@ internal fun TraineeMealRecordRoute( private fun TraineeMealRecordScreen( state: TraineeMealRecordUiState, context: Context, - onImageSelect: (url: Uri) -> Unit, + onSelectImage: (url: Uri) -> Unit, onClickDeleteImage: () -> Unit, onClickDateSection: () -> Unit, onClickTimeSection: () -> Unit, @@ -214,7 +223,7 @@ private fun TraineeMealRecordScreen( val pickMediaLauncher = rememberLauncherForActivityResult(PickVisualMedia()) { uri -> if (uri != null) { - onImageSelect(uri) + onSelectImage(uri) } } @@ -327,8 +336,8 @@ private fun Dialog( content = "기록이 저장되지 않아요!", leftButtonText = "취소", rightButtonText = "확인", - onLeftButtonClick = onClickExit, - onRightButtonClick = onDismissDialog, + onLeftButtonClick = onDismissDialog, + onRightButtonClick = onClickExit, onDismiss = onDismissDialog, ) } @@ -672,7 +681,7 @@ private fun TraineeMealRecordScreenPreview() { memo = "", ), context = LocalContext.current, - onImageSelect = { }, + onSelectImage = { }, onClickDeleteImage = { }, onClickDateSection = { }, onClickTimeSection = { }, diff --git a/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordViewModel.kt b/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordViewModel.kt index b29f66f4..cc228deb 100644 --- a/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordViewModel.kt +++ b/feature/trainee/mealrecord/src/main/java/co/kr/tnt/trainee/mealrecord/TraineeMealRecordViewModel.kt @@ -1,6 +1,5 @@ package co.kr.tnt.trainee.mealrecord -import android.content.Context import androidx.lifecycle.viewModelScope import co.kr.tnt.domain.repository.TraineeRepository import co.kr.tnt.domain.utils.DateFormatter @@ -9,7 +8,6 @@ import co.kr.tnt.trainee.mealrecord.TraineeMealRecordContract.TraineeMealRecordU import co.kr.tnt.trainee.mealrecord.TraineeMealRecordContract.TraineeMealRecordUiState import co.kr.tnt.trainee.mealrecord.TraineeMealRecordContract.TraineeMealRecordUiState.DialogState import co.kr.tnt.ui.base.BaseViewModel -import co.kr.tnt.ui.utils.convertToAllowedImageFormat import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import java.io.File @@ -45,14 +43,13 @@ internal class TraineeMealRecordViewModel @Inject constructor( } TraineeMealRecordUiEvent.OnClickCloseBottomSheet -> clearFocusState() - is TraineeMealRecordUiEvent.OnSelectMealType -> updateState { copy(mealType = event.mealType).validateMealRecord() } is TraineeMealRecordUiEvent.OnChangeMemo -> updateMemo(event.memo) TraineeMealRecordUiEvent.OnClickBack -> handleBackClick() - is TraineeMealRecordUiEvent.OnClickSave -> postMealRecord(event.context) + is TraineeMealRecordUiEvent.OnClickSave -> postMealRecord(event.imageFile) TraineeMealRecordUiEvent.OnClickDialogConfirm -> { updateState { copy(dialogState = DialogState.NONE) } sendEffect(TraineeMealRecordSideEffect.NavigateToHome) @@ -90,18 +87,15 @@ internal class TraineeMealRecordViewModel @Inject constructor( } } - // TODO Context 제거 - private fun postMealRecord(context: Context) { + private fun postMealRecord(imageFile: File?) { updateState { copy(isLoading = true) } val mealDateTime = dateFormatter.format( LocalDateTime.of(currentState.date, currentState.time), "yyyy-MM-dd'T'HH:mm:ss", ) - viewModelScope.launch { val state = currentState - val imageFile: File? = state.image?.convertToAllowedImageFormat(context) runCatching { traineeRepository.postMealRecord( mealImage = imageFile, diff --git a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpCompletePage.kt b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpCompletePage.kt index 7103c6d6..0274b94c 100644 --- a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpCompletePage.kt +++ b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpCompletePage.kt @@ -1,6 +1,5 @@ package co.kr.tnt.trainee.signup -import android.net.Uri import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -12,8 +11,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember 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.res.stringResource import androidx.compose.ui.text.style.TextAlign.Companion.Center @@ -26,18 +29,35 @@ import co.kr.tnt.feature.trainee.signup.R import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiState import co.kr.tnt.ui.component.TnTLoadingScreen import co.kr.tnt.ui.model.DefaultUserProfile +import co.kr.tnt.ui.utils.convertToAllowedImageFormat import co.kr.tnt.ui.utils.throttled import coil.compose.rememberAsyncImagePainter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.File import co.kr.tnt.core.ui.R as uiResource @Composable internal fun TraineeSignUpCompletePage( state: TraineeSignUpUiState, onBackClick: () -> Unit, - onNextClick: (Uri?) -> Unit, + onNextClick: (image: File?) -> Unit, ) { BackHandler { onBackClick() } + val context = LocalContext.current + val completeState = remember { mutableStateOf(false) } + + LaunchedEffect(completeState.value) { + if (completeState.value) { + val imageFile = withContext(Dispatchers.IO) { + state.image?.convertToAllowedImageFormat(context) + } + onNextClick(imageFile) + completeState.value = false + } + } + Scaffold( containerColor = TnTTheme.colors.commonColors.Common0, ) { innerPadding -> @@ -79,7 +99,7 @@ internal fun TraineeSignUpCompletePage( } TnTBottomButton( text = stringResource(uiResource.string.start), - onClick = throttled { onNextClick(state.image) }, + onClick = throttled { completeState.value = true }, modifier = Modifier.align(Alignment.BottomCenter), ) } diff --git a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpContract.kt b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpContract.kt index b89ee334..f504bde1 100644 --- a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpContract.kt +++ b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpContract.kt @@ -1,10 +1,10 @@ package co.kr.tnt.trainee.signup -import android.content.Context import android.net.Uri import co.kr.tnt.ui.base.UiEvent import co.kr.tnt.ui.base.UiSideEffect import co.kr.tnt.ui.base.UiState +import java.io.File import java.time.LocalDate private const val MAX_NAME_LENGTH = 15 @@ -67,8 +67,7 @@ internal class TraineeSignUpContract { data object OnNextClick : TraineeSignUpUiEvent data object OnBackClick : TraineeSignUpUiEvent data class RequestSignUp( - val context: Context, - val imageUri: Uri?, + val imageFile: File?, val id: String, val email: String, val authType: String, diff --git a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpScreen.kt b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpScreen.kt index d13782cf..d3997dd0 100644 --- a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpScreen.kt +++ b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpScreen.kt @@ -4,7 +4,6 @@ import android.net.Uri import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.kr.tnt.designsystem.snackbar.LocalSnackbar @@ -12,6 +11,7 @@ import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpEffect import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpPage import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiEvent import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiState +import java.io.File import java.time.LocalDate @Composable @@ -24,7 +24,6 @@ internal fun TraineeSignUpRoute( navigateToConnect: () -> Unit, viewModel: TraineeSignUpViewModel = hiltViewModel(), ) { - val context = LocalContext.current val snackbar = LocalSnackbar.current val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -39,11 +38,10 @@ internal fun TraineeSignUpRoute( onCautionChange = { viewModel.setEvent(TraineeSignUpUiEvent.OnCautionChange(it)) }, onBackClick = { viewModel.setEvent(TraineeSignUpUiEvent.OnBackClick) }, onNextClick = { viewModel.setEvent(TraineeSignUpUiEvent.OnNextClick) }, - onSubmitSignUp = { uri -> + onSubmitSignUp = { file -> viewModel.setEvent( TraineeSignUpUiEvent.RequestSignUp( - context = context, - imageUri = uri, + imageFile = file, id = authId, email = email, authType = authType, @@ -67,14 +65,14 @@ internal fun TraineeSignUpRoute( @Composable private fun TraineeSignUpScreen( state: TraineeSignUpUiState, - onProfileImageSelect: (Uri) -> Unit, - onNameChange: (String) -> Unit, - onHeightChange: (String) -> Unit, - onWeightChange: (String) -> Unit, - onCautionChange: (String) -> Unit, - onBirthdayChange: (LocalDate) -> Unit, - onPurposeSelected: (String) -> Unit, - onSubmitSignUp: (Uri?) -> Unit, + onProfileImageSelect: (imageUri: Uri) -> Unit, + onNameChange: (name: String) -> Unit, + onHeightChange: (height: String) -> Unit, + onWeightChange: (weight: String) -> Unit, + onCautionChange: (caution: String) -> Unit, + onBirthdayChange: (birthday: LocalDate) -> Unit, + onPurposeSelected: (purpose: String) -> Unit, + onSubmitSignUp: (imageFile: File?) -> Unit, onNextClick: () -> Unit, onBackClick: () -> Unit, ) { diff --git a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpViewModel.kt b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpViewModel.kt index f3d75948..c663dca1 100644 --- a/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpViewModel.kt +++ b/feature/trainee/signup/src/main/java/co/kr/tnt/trainee/signup/TraineeSignUpViewModel.kt @@ -1,6 +1,5 @@ package co.kr.tnt.trainee.signup -import android.content.Context import android.net.Uri import androidx.lifecycle.viewModelScope import co.kr.tnt.domain.model.User @@ -10,7 +9,6 @@ import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpPage import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiEvent import co.kr.tnt.trainee.signup.TraineeSignUpContract.TraineeSignUpUiState import co.kr.tnt.ui.base.BaseViewModel -import co.kr.tnt.ui.utils.convertToAllowedImageFormat import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import java.io.File @@ -35,8 +33,7 @@ internal class TraineeSignUpViewModel @Inject constructor( TraineeSignUpUiEvent.OnBackClick -> navigateToBack() TraineeSignUpUiEvent.OnNextClick -> navigateToNext() is TraineeSignUpUiEvent.RequestSignUp -> signUp( - context = event.context, - imageUri = event.imageUri, + imageFile = event.imageFile, id = event.id, email = event.email, authType = event.authType, @@ -46,8 +43,7 @@ internal class TraineeSignUpViewModel @Inject constructor( } private fun signUp( - context: Context, - imageUri: Uri?, + imageFile: File?, id: String, email: String, authType: String, @@ -57,11 +53,9 @@ internal class TraineeSignUpViewModel @Inject constructor( updateState { copy(isLoading = true) } val state = currentState - val profileImageFile: File? = imageUri?.convertToAllowedImageFormat(context) - runCatching { signUpRepository.signUp( - profileImage = profileImageFile, + profileImage = imageFile, user = User.Trainee( id = id, name = state.name, diff --git a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpCompletePage.kt b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpCompletePage.kt index 03ed2d0b..a21859a3 100644 --- a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpCompletePage.kt +++ b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpCompletePage.kt @@ -1,6 +1,5 @@ package co.kr.tnt.trainer.signup -import android.net.Uri import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -12,8 +11,10 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope 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.res.stringResource import androidx.compose.ui.text.style.TextAlign.Companion.Center @@ -26,18 +27,26 @@ import co.kr.tnt.feature.trainer.signup.R import co.kr.tnt.trainer.signup.TrainerSignUpContract.TrainerSignUpUiState import co.kr.tnt.ui.component.TnTLoadingScreen import co.kr.tnt.ui.model.DefaultUserProfile +import co.kr.tnt.ui.utils.convertToAllowedImageFormat import co.kr.tnt.ui.utils.throttled import coil.compose.rememberAsyncImagePainter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File import co.kr.tnt.core.ui.R as uiResource @Composable internal fun TrainerSignUpCompletePage( state: TrainerSignUpUiState, onBackClick: () -> Unit, - onNextClick: (Uri?) -> Unit, + onNextClick: (image: File?) -> Unit, ) { BackHandler { onBackClick() } + val context = LocalContext.current + val coroutineScope = rememberCoroutineScope() + Scaffold( containerColor = TnTTheme.colors.commonColors.Common0, ) { innerPadding -> @@ -79,12 +88,18 @@ internal fun TrainerSignUpCompletePage( } TnTBottomButton( text = stringResource(uiResource.string.start), - onClick = throttled { onNextClick(state.image) }, + onClick = throttled { + coroutineScope.launch { + val imageFile = withContext(Dispatchers.IO) { + state.image?.convertToAllowedImageFormat(context) + } + onNextClick(imageFile) + } + }, modifier = Modifier.align(Alignment.BottomCenter), ) } } - if (state.isLoading) { TnTLoadingScreen() } diff --git a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpContract.kt b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpContract.kt index c5cc62fb..95896dcc 100644 --- a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpContract.kt +++ b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpContract.kt @@ -1,10 +1,10 @@ package co.kr.tnt.trainer.signup -import android.content.Context import android.net.Uri import co.kr.tnt.ui.base.UiEvent import co.kr.tnt.ui.base.UiSideEffect import co.kr.tnt.ui.base.UiState +import java.io.File private const val MAX_LENGTH = 15 @@ -28,8 +28,7 @@ internal class TrainerSignUpContract { data object OnNextClick : TrainerSignUpUiEvent data object OnBackClick : TrainerSignUpUiEvent data class RequestSignUp( - val context: Context, - val imageUri: Uri?, + val imageFile: File?, val id: String, val email: String, val authType: String, diff --git a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpScreen.kt b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpScreen.kt index 949668bc..f59e4948 100644 --- a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpScreen.kt +++ b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpScreen.kt @@ -4,13 +4,13 @@ import android.net.Uri import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.kr.tnt.designsystem.snackbar.LocalSnackbar import co.kr.tnt.navigation.model.ScreenMode import co.kr.tnt.trainer.signup.TrainerSignUpContract.TrainerSignUpUiEvent import co.kr.tnt.trainer.signup.TrainerSignUpContract.TrainerSignUpUiState +import java.io.File @Composable internal fun TrainerSignUpRoute( @@ -22,7 +22,6 @@ internal fun TrainerSignUpRoute( navigateToInvite: (ScreenMode) -> Unit, viewModel: TrainerSignUpViewModel = hiltViewModel(), ) { - val context = LocalContext.current val snackbar = LocalSnackbar.current val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -32,11 +31,10 @@ internal fun TrainerSignUpRoute( onProfileImageSelect = { viewModel.setEvent(TrainerSignUpUiEvent.OnImageChange(it)) }, onNextClick = { viewModel.setEvent(TrainerSignUpUiEvent.OnNextClick) }, onBackClick = { viewModel.setEvent(TrainerSignUpUiEvent.OnBackClick) }, - onSubmitSignUp = { uri -> + onSubmitSignUp = { file -> viewModel.setEvent( TrainerSignUpUiEvent.RequestSignUp( - context = context, - imageUri = uri, + imageFile = file, id = authId, email = email, authType = authType, @@ -60,9 +58,9 @@ internal fun TrainerSignUpRoute( @Composable private fun TrainerSignUpScreen( state: TrainerSignUpUiState, - onProfileImageSelect: (Uri) -> Unit, - onNameChange: (String) -> Unit, - onSubmitSignUp: (Uri?) -> Unit, + onProfileImageSelect: (imageUri: Uri) -> Unit, + onNameChange: (name: String) -> Unit, + onSubmitSignUp: (imageFile: File?) -> Unit, onNextClick: () -> Unit, onBackClick: () -> Unit, ) { diff --git a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpViewModel.kt b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpViewModel.kt index da9b826c..a579fffb 100644 --- a/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpViewModel.kt +++ b/feature/trainer/signup/src/main/java/co/kr/tnt/trainer/signup/TrainerSignUpViewModel.kt @@ -1,6 +1,5 @@ package co.kr.tnt.trainer.signup -import android.content.Context import android.net.Uri import androidx.lifecycle.viewModelScope import co.kr.tnt.domain.model.User @@ -11,7 +10,6 @@ import co.kr.tnt.trainer.signup.TrainerSignUpContract.TrainerSignUpPage import co.kr.tnt.trainer.signup.TrainerSignUpContract.TrainerSignUpUiEvent import co.kr.tnt.trainer.signup.TrainerSignUpContract.TrainerSignUpUiState import co.kr.tnt.ui.base.BaseViewModel -import co.kr.tnt.ui.utils.convertToAllowedImageFormat import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -31,8 +29,7 @@ internal class TrainerSignUpViewModel @Inject constructor( TrainerSignUpUiEvent.OnNextClick -> navigateToNext() TrainerSignUpUiEvent.OnBackClick -> navigateToBack() is TrainerSignUpUiEvent.RequestSignUp -> signUp( - context = event.context, - imageUri = event.imageUri, + imageFile = event.imageFile, id = event.id, email = event.email, authType = event.authType, @@ -42,8 +39,7 @@ internal class TrainerSignUpViewModel @Inject constructor( } private fun signUp( - context: Context, - imageUri: Uri?, + imageFile: File?, id: String, email: String, authType: String, @@ -51,11 +47,10 @@ internal class TrainerSignUpViewModel @Inject constructor( ) { viewModelScope.launch(Dispatchers.IO) { updateState { copy(isLoading = true) } - val profileImageFile: File? = imageUri?.convertToAllowedImageFormat(context) runCatching { signUpRepository.signUp( - profileImage = profileImageFile, + profileImage = imageFile, user = User.Trainer( id = id, name = currentState.name,