From 99d4c638d7fc18ac06d3e20dd9b0f35e0c4a0515 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Mon, 19 Aug 2024 23:00:28 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[DOCS/#188]=20=EB=B0=94=ED=85=80=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=EB=AC=B8=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/bottomsheet/MyPageLogoutBottomSheet.kt | 9 +++++++++ .../component/bottomsheet/MyPageQuitBottomSheet.kt | 9 +++++++++ .../component/bottomsheet/SignUpBottomSheet.kt | 8 ++++++++ .../component/bottomsheet/TerningBasicBottomSheet.kt | 7 +++++++ 4 files changed, 33 insertions(+) diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageLogoutBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageLogoutBottomSheet.kt index 0cccd2206..47b579c90 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageLogoutBottomSheet.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageLogoutBottomSheet.kt @@ -17,6 +17,15 @@ import com.terning.core.designsystem.component.button.RoundButton import com.terning.core.designsystem.theme.TerningTheme import kotlinx.coroutines.launch +/** + * 로그아웃을 할 수 있는 바텀시트입니다. + * + * 로그아웃 버튼과, 취소 버튼으로 이루어져있습니다. + * + * @param modifier 바텀시트에 적용할 Modifier입니다. + * @param onDismiss 취소 버튼 클릭 시, 바텀시트가 닫히면서 호출되는 함수입니다. + * @param onLogoutClick 로그아웃 버튼 클릭 시, 호출되는 콜백 함수입니다. + */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun MyPageLogoutBottomSheet( diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageQuitBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageQuitBottomSheet.kt index 1f3d4414e..68d00a184 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageQuitBottomSheet.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/MyPageQuitBottomSheet.kt @@ -17,6 +17,15 @@ import com.terning.core.designsystem.component.button.DeleteRoundButton import com.terning.core.designsystem.component.button.RoundButton import com.terning.core.designsystem.theme.TerningTheme +/** + * 회원탈퇴를 할 수 있는 바텀시트입니다. + * + * 회원탈퇴 버튼과, 취소 버튼으로 이루어져있습니다. + * + * @param modifier 바텀시트에 적용할 Modifier입니다. + * @param onDismiss 취소 버튼 클릭 시, 바텀시트가 닫히면서 호출되는 함수입니다. + * @param onQuitClick 회원탈퇴 버튼 클릭 시, 호출되는 콜백 함수입니다. + */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun MyPageQuitBottomSheet( diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt index 8b4b6e27b..44685a2a2 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/SignUpBottomSheet.kt @@ -33,6 +33,14 @@ import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.extension.noRippleClickable import kotlinx.coroutines.launch +/** + * 회원가입을 할 때 프로필 이미지를 선택할 수 있는 바텀시트입니다. + * + * @param modifier 바텀시트에 적용할 Modifier입니다. + * @param onDismiss 바텀시트가 닫힐 때 호출되는 콜백 함수입니다. + * @param onSaveClick 저장하기 버튼 클릭 시, 호출되는 콜백 함수입니다. + * @param initialSelectedOption 초기에 선택된 이미지를 나타내는 인덱스 값입니다. + */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun SignUpBottomSheet( diff --git a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt index 87e82c6aa..c7727284f 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/bottomsheet/TerningBasicBottomSheet.kt @@ -8,6 +8,13 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import com.terning.core.designsystem.theme.White +/** + * 기본 바텀시트 함수입니다. + * + * @param content 바텀시트에 표시할 내용을 담은 Composable 함수입니다. + * @param onDismissRequest 바텀시트가 닫히는 요청 시 호출되는 콜백 함수입니다. + * @param sheetState 바텀시트의 상태를 관리하는 SheetState 객체입니다. + */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun TerningBasicBottomSheet( From 007a44813d8473bb1d75084e7a640db60986c37e Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 05:29:07 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[FIX/#180]=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/button/DeleteRoundButton.kt | 28 +++++++++++++ .../component/button/FilteringButton.kt | 40 +++++++++++++++++++ .../component/button/RectangleButton.kt | 10 +++++ .../component/button/RoundButton.kt | 11 +++++ .../onboarding/signin/SignInViewModel.kt | 3 +- 5 files changed, 91 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/DeleteRoundButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/DeleteRoundButton.kt index 2e92f354d..200f4c14d 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/button/DeleteRoundButton.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/button/DeleteRoundButton.kt @@ -16,12 +16,26 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import com.terning.core.R import com.terning.core.designsystem.theme.Grey400 +import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.White import com.terning.core.util.NoRippleTheme +/** + * 취소 기능을 하는 버튼입니다. + * + * @param style 버튼의 텍스트에 적용할 텍스트 스타일입니다. + * @param paddingVertical 버튼 내부 콘텐츠의 수직 패딩 값입니다. + * @param text 버튼에 표시될 문자열의 리소스 ID입니다. + * @param onButtonClick 버튼 클릭 시 호출될 콜백 함수입니다. + * @param modifier 버튼에 적용할 Modifier입니다. + * @param isEnabled 버튼 활성화 여부를 설정할 수 있습니다. + * @param cornerRadius 버튼의 모서리 반경을 설정하는 Dp 값입니다. + */ @Composable fun DeleteRoundButton( style: TextStyle, @@ -54,4 +68,18 @@ fun DeleteRoundButton( ) } } +} + +@Preview(showBackground = true) +@Composable +fun DeleteRoundButtonPreview() { + TerningPointTheme { + DeleteRoundButton( + style = TextStyle(), + paddingVertical = 15.dp, + text = R.string.button_preview, + onButtonClick = {}, + cornerRadius = 10.dp + ) + } } \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt index ded84d07e..69560b6dc 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt @@ -4,6 +4,7 @@ import androidx.annotation.StringRes import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsPressedAsState +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.shape.RoundedCornerShape @@ -18,10 +19,13 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import com.terning.core.R import com.terning.core.designsystem.theme.Grey400 import com.terning.core.designsystem.theme.TerningMain +import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningSub1 import com.terning.core.designsystem.theme.TerningSub3 import com.terning.core.designsystem.theme.TerningSub4 @@ -30,6 +34,19 @@ import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.designsystem.theme.White import com.terning.core.util.NoRippleTheme +/** + * 온보딩 과정에서 필터링을 설정할 때 사용되는 버튼입니다. + * + * 버튼 클릭을 클릭했을 때, 버튼의 배경 색과 텍스트 색상이 바뀝니다. + * + * @param isSelected 버튼이 선택됐는지 여부를 나타냅니다. + * @param text 버튼에 표시될 문자열의 리소스 ID입니다. + * @param cornerRadius 버튼의 모서리 반경을 설정하는 Dp 값입니다. + * @param paddingVertical 버튼 내부 콘텐츠의 수직 패딩 값입니다. + * @param onButtonClick 버튼 클릭 시 호출될 콜백 함수입니다. + * @param isEnabled 버튼 활성화 여부를 설정할 수 있습니다. + * @param modifier 버튼에 적용할 Modifier입니다. + */ @Composable fun FilteringButton( isSelected: Boolean, @@ -80,3 +97,26 @@ fun FilteringButton( } } } + +@Preview(showBackground = true) +@Composable +fun FilteringButtonPreview() { + TerningPointTheme { + Column { + FilteringButton( + isSelected = true, + text = R.string.button_preview, + cornerRadius = 15.dp, + paddingVertical = 10.dp, + onButtonClick = {} + ) + FilteringButton( + isSelected = false, + text = R.string.button_preview, + cornerRadius = 15.dp, + paddingVertical = 10.dp, + onButtonClick = {} + ) + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/RectangleButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/RectangleButton.kt index 66e456677..431102e21 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/button/RectangleButton.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/button/RectangleButton.kt @@ -12,6 +12,16 @@ import com.terning.core.R import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme +/** + * 모서리의 둥근 부분이 없는 직사각형 버튼입니다. + * + * @param style 버튼의 텍스트에 적용할 텍스트 스타일입니다. + * @param paddingVertical 버튼 내부 콘텐츠의 수직 패딩 값입니다. + * @param text 버튼에 표시될 문자열의 리소스 ID입니다. + * @param onButtonClick 버튼 클릭 시 호출될 콜백 함수입니다. + * @param modifier 버튼에 적용할 Modifier입니다. + * @param isEnabled 버튼 활성화 여부를 설정할 수 있습니다. + */ @Composable fun RectangleButton( style: TextStyle, diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/RoundButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/RoundButton.kt index 5dd31848f..8ab383b38 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/button/RoundButton.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/button/RoundButton.kt @@ -12,6 +12,17 @@ import com.terning.core.R import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme +/** + * 모서리의 둥근 부분을 설정할 수 있는 버튼입니다. + * + * @param style 버튼의 텍스트에 적용할 텍스트 스타일입니다. + * @param paddingVertical 버튼 내부 콘텐츠의 수직 패딩 값입니다. + * @param cornerRadius 버튼의 모서리 반경을 설정하는 Dp 값입니다. + * @param text 버튼에 표시될 문자열의 리소스 ID입니다. + * @param onButtonClick 버튼 클릭 시 호출될 콜백 함수입니다. + * @param modifier 버튼에 적용할 Modifier입니다. + * @param isEnabled 버튼 활성화 여부를 설정할 수 있습니다. + */ @Composable fun RoundButton( style: TextStyle, diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt index 95172e193..ff4f9af58 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt @@ -22,6 +22,7 @@ import javax.inject.Inject class SignInViewModel @Inject constructor( private val authRepository: AuthRepository, private val tokenRepository: TokenRepository, +//application context -> 앱 거 ) : ViewModel() { init { @@ -54,7 +55,7 @@ class SignInViewModel @Inject constructor( } } - private fun signInFailure(context: Context, error: Throwable?) { + private fun signInFailure(context: Context, error: Throwable) { if (error.toString().contains(KAKAO_NOT_LOGGED_IN)) { UserApiClient.instance.loginWithKakaoAccount(context) { token, error -> signInResult(context, token, error) From 7eb3edd4dfc97fd17cf1cc03f36dc5a7d3f8ef74 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 05:34:46 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[FIX/#188]=20=EB=8D=B0=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=20=ED=94=BC=EC=BB=A4=20=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/datepicker/DatePicker.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt b/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt index c0c133587..cd669a8b0 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt @@ -39,6 +39,16 @@ private val years = private val monthsNumber = (listOf("") + (START_MONTH..END_MONTH).map { it.toString() } + listOf("") + listOf("")).toImmutableList() +/** + * 데이트 피커를 나타냅니다. + * + * 사용자가 원하는 연도와 월을 설정할 수 있습니다. + * + * @param chosenYear 선택된 연도를 나타내는 값입니다. + * @param chosenMonth 선택된 월을 나타내는 값입니다. + * @param onYearChosen 연도가 선택되었을 때 호출되는 콜백 함수입니다. + * @param onMonthChosen 월이 선택되었을 때 호출되는 콜백 함수입니다. + */ @Composable fun DatePickerUI( chosenYear: Int, @@ -60,6 +70,14 @@ fun DatePickerUI( } } +/** + * 연도와 월을 선택할 수 있는 두 개의 피커를 제공합니다. + * + * @param chosenYear 선택된 연도를 나타내는 값입니다. + * @param chosenMonth 선택된 월을 나타내는 값입니다. + * @param onYearChosen 연도가 선택되었을 때 호출되는 콜백 함수입니다. + * @param onMonthChosen 월이 선택되었을 때 호출되는 콜백 함수입니다. + */ @Composable fun DateSelectionSection( chosenYear: Int, @@ -87,6 +105,15 @@ fun DateSelectionSection( } } +/** + * 사용자가 스크롤을 통해 연도 또는 월을 선택할 수 있는 피커입니다. + * + * @param items 선택 가능한 항목들의 리스트입니다. (연도 또는 월) + * @param firstIndex 초기 선택된 항목의 인덱스입니다. (연도 또는 월) + * @param onItemSelected 항목이 선택되었을 때 호출되는 콜백 함수입니다. + * @param modifier 레이아웃, 동작 등을 수정할 수 있는 Modifier 옵션입니다. + * @param isYear 이 피커가 연도를 선택하는 것인지에 대한 여부입니다. + */ @Composable fun DateItemsPicker( items: List, From f61cdcaabd1a376c097e10cbd14b450f7069e3a0 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 05:37:42 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[FIX/#188]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/designsystem/component/image/TerningImage.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt b/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt index 776291ac7..0030fa4b3 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt @@ -9,6 +9,12 @@ import androidx.compose.ui.tooling.preview.Preview import com.terning.core.R import com.terning.core.designsystem.theme.TerningPointTheme +/** + * contentDescription을 사용하지 않고 Image를 편리하게 사용할 수 있는 함수입니다. + * + * @param painter 이미지 리소스 ID입니다. + * @param modifier Image의 Modifier입니다. + */ @Composable fun TerningImage( painter: Int, From 75ccd828affe6d1c2d82e905471d994e9b33e23c Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 17:17:55 +0900 Subject: [PATCH 05/11] =?UTF-8?q?[FIX/#188]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20navigation=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/terning/feature/onboarding/signup/SignUpRoute.kt | 4 ++-- .../onboarding/signup/navigation/SignUpNavigation.kt | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt index fe5fb8984..9d4be7025 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt @@ -37,7 +37,7 @@ import com.terning.feature.onboarding.signup.component.SignUpProfile fun SignUpRoute( authId: String, viewModel: SignUpViewModel = hiltViewModel(), - navController: NavController + navigateToStartFiltering: (String) -> Unit ) { val signUpState by viewModel.state.collectAsStateWithLifecycle() @@ -54,7 +54,7 @@ fun SignUpRoute( when (sideEffect) { is SignUpSideEffect.ShowToast -> context.toast(sideEffect.message) is SignUpSideEffect.NavigateToStartFiltering -> { - navController.navigateStartFiltering(signUpState.name) + navigateToStartFiltering(signUpState.name) } } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/navigation/SignUpNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/navigation/SignUpNavigation.kt index 8467ad045..479e02eda 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/navigation/SignUpNavigation.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/navigation/SignUpNavigation.kt @@ -7,11 +7,12 @@ import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.terning.core.navigation.Route +import com.terning.feature.filtering.filtering.navigation.navigateFilteringOne import com.terning.feature.onboarding.signup.SignUpRoute import kotlinx.serialization.Serializable fun NavController.navigateSignUp( - authId : String, + authId: String, navOptions: NavOptions? = null, ) { navigate( @@ -27,7 +28,8 @@ fun NavGraphBuilder.signUpNavGraph( val args = it.toRoute() SignUpRoute( authId = args.authId, - navController = navHostController, + navigateToStartFiltering = { name -> navHostController.navigateFilteringOne(name) } + ) } } From 32ade80fad6fda3b438bd6a223e1758da00d0b7e Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 17:48:19 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[FIX/#188]=20=EC=8A=A4=ED=94=8C=EB=9E=98?= =?UTF-8?q?=EC=8B=9C=20navigation=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/onboarding/splash/SplashScreen.kt | 37 +++++++++---------- .../splash/navigation/SplashNavigation.kt | 19 +++++++++- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt index 7d66dfeac..406764ec1 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt @@ -7,24 +7,22 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.flowWithLifecycle -import androidx.navigation.NavController -import androidx.navigation.NavOptions import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.theme.TerningMain +import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.feature.R -import com.terning.feature.home.home.navigation.navigateHome -import com.terning.feature.onboarding.signin.navigation.navigateSignIn -import com.terning.feature.onboarding.splash.navigation.Splash @Composable fun SplashScreen( - navController: NavController, + modifier: Modifier = Modifier, viewModel: SplashViewModel = hiltViewModel(), - modifier: Modifier = Modifier + navigateToHome: () -> Unit, + navigateToSignIn: () -> Unit ) { val systemUiController = rememberSystemUiController() SideEffect { @@ -47,22 +45,11 @@ fun SplashScreen( .collect { sideEffect -> when (sideEffect) { is SplashState.GetHasAccessToken -> { - if (sideEffect.hasAccessToken) navController.navigateHome( - navOptions = NavOptions.Builder().setPopUpTo( - route = Splash, - inclusive = true - ).build() - ) - else navController.navigateSignIn( - navOptions = NavOptions.Builder().setPopUpTo( - route = Splash, - inclusive = true - ).build() - ) + if (sideEffect.hasAccessToken) navigateToHome() + else navigateToSignIn() } } } - } Column( @@ -75,5 +62,15 @@ fun SplashScreen( modifier = Modifier.fillMaxSize() ) } +} +@Preview(showBackground = true) +@Composable +fun SplashScreenPreview() { + TerningPointTheme { + SplashScreen( + navigateToHome = {}, + navigateToSignIn = {} + ) + } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/splash/navigation/SplashNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/splash/navigation/SplashNavigation.kt index a24d639f5..be12ee8d9 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/splash/navigation/SplashNavigation.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/splash/navigation/SplashNavigation.kt @@ -8,6 +8,8 @@ import androidx.navigation.NavHostController import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.terning.core.navigation.Route +import com.terning.feature.home.home.navigation.navigateHome +import com.terning.feature.onboarding.signin.navigation.navigateSignIn import com.terning.feature.onboarding.splash.SplashScreen import kotlinx.serialization.Serializable @@ -36,7 +38,22 @@ fun NavGraphBuilder.splashNavGraph( } ) { SplashScreen( - navController = navHostController, + navigateToHome = { + navHostController.navigateHome( + navOptions = NavOptions.Builder().setPopUpTo( + route = Splash, + inclusive = true + ).build() + ) + }, + navigateToSignIn = { + navHostController.navigateSignIn( + navOptions = NavOptions.Builder().setPopUpTo( + route = Splash, + inclusive = true + ).build() + ) + } ) } } From 2e08d80feca85c740838ce052d36d20467336501 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 18:03:50 +0900 Subject: [PATCH 07/11] =?UTF-8?q?[FIX/#188]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=B7=B0=EB=AA=A8=EB=8D=B8=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/onboarding/signup/SignUpRoute.kt | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt index a4470f09d..f18bf4cf6 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner @@ -24,6 +25,7 @@ import androidx.lifecycle.flowWithLifecycle import com.terning.core.designsystem.component.bottomsheet.SignUpBottomSheet import com.terning.core.designsystem.component.button.RectangleButton import com.terning.core.designsystem.component.textfield.NameTextField +import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.extension.addFocusCleaner import com.terning.core.extension.noRippleClickable @@ -59,9 +61,14 @@ fun SignUpRoute( } SignUpScreen( - signUpViewModel = viewModel, signUpState = signUpState, - onSignUpClick = { viewModel.postSignUpWithServer() } + onSignUpClick = { viewModel.postSignUpWithServer() }, + onInputChange = { name -> + viewModel.isInputValid(name) + }, + onFetchCharacter = { index -> + viewModel.fetchCharacter(index) + } ) } @@ -69,8 +76,9 @@ fun SignUpRoute( fun SignUpScreen( modifier: Modifier = Modifier, signUpState: SignUpState, - signUpViewModel: SignUpViewModel, - onSignUpClick: () -> Unit + onSignUpClick: () -> Unit, + onInputChange: (String) -> Unit, + onFetchCharacter: (Int) -> Unit ) { val focusManager = LocalFocusManager.current var showBottomSheet by remember { mutableStateOf(false) } @@ -92,9 +100,9 @@ fun SignUpScreen( if (showBottomSheet) { SignUpBottomSheet( onDismiss = { showBottomSheet = false }, - onSaveClick = { + onSaveClick = { index -> showBottomSheet = false - signUpViewModel.fetchCharacter(it) + onFetchCharacter(index) }, initialSelectedOption = signUpState.character ) @@ -132,7 +140,7 @@ fun SignUpScreen( NameTextField( value = signUpState.name, onValueChange = { name -> - signUpViewModel.isInputValid(name) + onInputChange(name) }, hint = stringResource(id = R.string.sign_up_hint), drawLineColor = signUpState.drawLineColor, @@ -151,4 +159,17 @@ fun SignUpScreen( isEnabled = signUpState.isButtonValid ) } +} + +@Preview(showBackground = true) +@Composable +fun SignUpScreenPreview() { + TerningPointTheme { + SignUpScreen( + signUpState = SignUpState(), + onSignUpClick = {}, + onInputChange = {}, + onFetchCharacter = {} + ) + } } \ No newline at end of file From ab6e549a4d549941b1637ccfc7f6a3b53434d3a3 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 23:34:46 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[FIX/#188]=20=ED=95=84=ED=84=B0=EB=A7=81?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filtering/filtering/FilteringOneScreen.kt | 17 +++---- ...gThreeScreen.kt => FilteringThreeRoute.kt} | 44 ++++++++++++------- .../filtering/filtering/FilteringTwoScreen.kt | 15 +++---- .../navigation/FilteringOneNavigation.kt | 3 +- .../navigation/FilteringThreeNavigation.kt | 4 +- .../navigation/FilteringTwoNavigation.kt | 8 +++- .../startfiltering/StartFilteringScreen.kt | 8 ++-- .../filtering/starthome/StartHomeScreen.kt | 13 +++--- .../navigation/StartHomeNavigation.kt | 12 ++++- .../com/terning/feature/mypage/MyPageRoute.kt | 2 - .../mypage/navigation/MyPageNavigation.kt | 2 +- 11 files changed, 74 insertions(+), 54 deletions(-) rename feature/src/main/java/com/terning/feature/filtering/filtering/{FilteringThreeScreen.kt => FilteringThreeRoute.kt} (85%) diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringOneScreen.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringOneScreen.kt index e911c07b3..3f4a28c8c 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringOneScreen.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringOneScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.navigation.NavController import com.terning.core.designsystem.component.button.RectangleButton import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.component.topappbar.BackButtonTopAppBar @@ -24,14 +23,12 @@ import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R import com.terning.feature.filtering.filtering.component.StatusOneRadioGroup -import com.terning.feature.filtering.filtering.navigation.navigateFilteringTwo -import com.terning.feature.main.MainNavigator -import com.terning.feature.main.rememberMainNavigator @Composable fun FilteringOneScreen( name: String, - navController: NavController, + onNextClick: (Int) -> Unit, + navigateUp: () -> Unit, modifier: Modifier = Modifier, onButtonClick: (Int) -> Unit = {}, ) { @@ -43,7 +40,7 @@ fun FilteringOneScreen( modifier = modifier ) { BackButtonTopAppBar( - onBackButtonClick = { navController.navigateUp() } + onBackButtonClick = { navigateUp() } ) Column( modifier = Modifier.fillMaxSize() @@ -99,7 +96,7 @@ fun FilteringOneScreen( style = TerningTheme.typography.button0, paddingVertical = 20.dp, text = R.string.filtering_button, - onButtonClick = { navController.navigateFilteringTwo(grade) }, + onButtonClick = { onNextClick(grade) }, modifier = modifier.padding(bottom = 12.dp), isEnabled = isButtonValid.value ) @@ -110,12 +107,12 @@ fun FilteringOneScreen( @Preview(showBackground = true) @Composable fun FilteringOneScreenPreview() { - val navigator: MainNavigator = rememberMainNavigator() TerningPointTheme { FilteringOneScreen( name = "터닝이", - navController = navigator.navController, - onButtonClick = {} + onButtonClick = {}, + onNextClick = {}, + navigateUp = {} ) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeScreen.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt similarity index 85% rename from feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeScreen.kt rename to feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt index 75806f7a5..10d91b9d6 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeScreen.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt @@ -30,19 +30,16 @@ import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.extension.toast import com.terning.feature.R import com.terning.feature.filtering.starthome.navigation.navigateStartHome -import com.terning.feature.main.MainNavigator -import com.terning.feature.main.rememberMainNavigator import java.util.Calendar @Composable -fun FilteringThreeScreen( +fun FilteringThreeRoute( grade: Int, workingPeriod: Int, navController: NavController, - modifier: Modifier = Modifier, viewModel: FilteringViewModel = hiltViewModel(), + navigateUp: () -> Unit ) { - val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current @@ -72,11 +69,31 @@ fun FilteringThreeScreen( } } + FilteringThreeScreen( + navigateUp = { navigateUp() }, + chosenYear = chosenYear, + chosenMonth = chosenMonth, + onNextClick = { viewModel.postFilteringWithServer() }, + onYearChosen = { chosenYear = it }, + onMonthChosen = { chosenMonth = it } + ) +} + +@Composable +fun FilteringThreeScreen( + modifier: Modifier = Modifier, + navigateUp: () -> Unit, + chosenYear: Int, + chosenMonth: Int, + onYearChosen: (Int) -> Unit, + onMonthChosen: (Int) -> Unit, + onNextClick: () -> Unit, +) { Column( modifier = modifier, ) { BackButtonTopAppBar( - onBackButtonClick = { navController.navigateUp() } + onBackButtonClick = { navigateUp() } ) Column( modifier = Modifier.fillMaxSize() @@ -110,15 +127,15 @@ fun FilteringThreeScreen( DatePickerUI( chosenYear = chosenYear, chosenMonth = chosenMonth, - onYearChosen = { chosenYear = it }, - onMonthChosen = { chosenMonth = it }, + onYearChosen = { onYearChosen(it) }, + onMonthChosen = { onMonthChosen(it) }, ) Spacer(modifier = modifier.weight(3f)) RectangleButton( style = TerningTheme.typography.button0, paddingVertical = 20.dp, text = R.string.filtering_button, - onButtonClick = { viewModel.postFilteringWithServer() }, + onButtonClick = { onNextClick() }, modifier = modifier.padding(bottom = 12.dp), ) } @@ -128,12 +145,9 @@ fun FilteringThreeScreen( @Preview(showBackground = true) @Composable fun FilteringThreeScreenPreview() { - val navigator: MainNavigator = rememberMainNavigator() TerningPointTheme { - FilteringThreeScreen( - grade = 1, - workingPeriod = 1, - navController = navigator.navController - ) +// FilteringThreeScreen( +// +// ) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringTwoScreen.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringTwoScreen.kt index ad56eef53..e66df12e8 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringTwoScreen.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringTwoScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.navigation.NavController import com.terning.core.designsystem.component.button.RectangleButton import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.component.topappbar.BackButtonTopAppBar @@ -24,14 +23,12 @@ import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R import com.terning.feature.filtering.filtering.component.StatusTwoRadioGroup -import com.terning.feature.filtering.filtering.navigation.navigateFilteringThree -import com.terning.feature.main.MainNavigator -import com.terning.feature.main.rememberMainNavigator @Composable fun FilteringTwoScreen( grade: Int, - navController: NavController, + onNextClick: (Int, Int) -> Unit, + navigateUp: () -> Unit, modifier: Modifier = Modifier, onButtonClick: (Int) -> Unit = {}, ) { @@ -43,7 +40,7 @@ fun FilteringTwoScreen( modifier = modifier ) { BackButtonTopAppBar( - onBackButtonClick = { navController.navigateUp() } + onBackButtonClick = { navigateUp() } ) Column( modifier = Modifier.fillMaxSize() @@ -85,7 +82,7 @@ fun FilteringTwoScreen( style = TerningTheme.typography.button0, paddingVertical = 20.dp, text = R.string.filtering_button, - onButtonClick = { navController.navigateFilteringThree(grade, workingPeriod) }, + onButtonClick = { onNextClick(grade, workingPeriod) }, modifier = modifier.padding(bottom = 12.dp), isEnabled = isButtonValid.value ) @@ -96,11 +93,11 @@ fun FilteringTwoScreen( @Preview(showBackground = true) @Composable fun FilteringTwoScreenPreview() { - val navigator: MainNavigator = rememberMainNavigator() TerningPointTheme { FilteringTwoScreen( grade = 1, - navController = navigator.navController + onNextClick = { _, _ -> }, + navigateUp = { } ) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringOneNavigation.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringOneNavigation.kt index d0bff745a..266137688 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringOneNavigation.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringOneNavigation.kt @@ -27,7 +27,8 @@ fun NavGraphBuilder.filteringOneNavGraph( val args = it.toRoute() FilteringOneScreen( name = args.name, - navController = navHostController + onNextClick = { grade -> navHostController.navigateFilteringTwo(grade) }, + navigateUp = { navHostController.navigateUp() } ) } } diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt index 9aeae7c9a..584c8af00 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt @@ -7,6 +7,7 @@ import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.terning.core.navigation.Route +import com.terning.feature.filtering.filtering.FilteringThreeRoute import com.terning.feature.filtering.filtering.FilteringThreeScreen import kotlinx.serialization.Serializable @@ -25,9 +26,10 @@ fun NavGraphBuilder.filteringThreeNavGraph( ) { composable { val args = it.toRoute() - FilteringThreeScreen( + FilteringThreeRoute( grade = args.grade, workingPeriod = args.workingPeriod, + navigateUp = {navHostController.navigateUp()}, navController = navHostController ) } diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringTwoNavigation.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringTwoNavigation.kt index 93f4d36d7..0bde2ac5e 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringTwoNavigation.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringTwoNavigation.kt @@ -27,7 +27,13 @@ fun NavGraphBuilder.filteringTwoNavGraph( val args = it.toRoute() FilteringTwoScreen( grade = args.grade, - navController = navHostController + onNextClick = { _, workingPeriod -> + navHostController.navigateFilteringThree( + grade = args.grade, + workingPeriod = workingPeriod + ) + }, + navigateUp = { navHostController.navigateUp() } ) } } diff --git a/feature/src/main/java/com/terning/feature/filtering/startfiltering/StartFilteringScreen.kt b/feature/src/main/java/com/terning/feature/filtering/startfiltering/StartFilteringScreen.kt index 588c639ae..e8e1128b2 100644 --- a/feature/src/main/java/com/terning/feature/filtering/startfiltering/StartFilteringScreen.kt +++ b/feature/src/main/java/com/terning/feature/filtering/startfiltering/StartFilteringScreen.kt @@ -2,7 +2,6 @@ package com.terning.feature.filtering.startfiltering import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn -import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -20,12 +19,12 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme import com.terning.feature.R @@ -60,9 +59,8 @@ fun StartFilteringScreen( modifier = Modifier.padding(bottom = 35.dp), textAlign = TextAlign.Center ) - Image( - painter = painterResource(id = R.drawable.ic_terning_onboarding), - contentDescription = stringResource(id = R.string.start_filtering_main_image), + TerningImage( + painter = R.drawable.ic_terning_onboarding, modifier = Modifier .fillMaxWidth() .padding(horizontal = 24.dp) diff --git a/feature/src/main/java/com/terning/feature/filtering/starthome/StartHomeScreen.kt b/feature/src/main/java/com/terning/feature/filtering/starthome/StartHomeScreen.kt index 8debcd235..63b92593f 100644 --- a/feature/src/main/java/com/terning/feature/filtering/starthome/StartHomeScreen.kt +++ b/feature/src/main/java/com/terning/feature/filtering/starthome/StartHomeScreen.kt @@ -44,7 +44,7 @@ import kotlinx.coroutines.delay @Composable fun StartHomeScreen( modifier: Modifier = Modifier, - navController: NavController = rememberNavController() + navigateToHome: () -> Unit ) { var isVisible by remember { mutableStateOf(false) } @@ -87,12 +87,7 @@ fun StartHomeScreen( paddingVertical = 20.dp, text = R.string.start_home_next_button, onButtonClick = { - navController.navigateHome( - navOptions = NavOptions.Builder().setPopUpTo( - route = SignIn, - inclusive = true - ).build() - ) + navigateToHome() }, ) } @@ -126,6 +121,8 @@ fun StartHomeLottieAnimation( @Composable fun StartHomeScreenPreview() { TerningPointTheme { - StartHomeScreen() + StartHomeScreen( + navigateToHome = {} + ) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/filtering/starthome/navigation/StartHomeNavigation.kt b/feature/src/main/java/com/terning/feature/filtering/starthome/navigation/StartHomeNavigation.kt index ba97193c7..ed29bcf97 100644 --- a/feature/src/main/java/com/terning/feature/filtering/starthome/navigation/StartHomeNavigation.kt +++ b/feature/src/main/java/com/terning/feature/filtering/starthome/navigation/StartHomeNavigation.kt @@ -9,6 +9,8 @@ import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.terning.core.navigation.Route import com.terning.feature.filtering.starthome.StartHomeScreen +import com.terning.feature.home.home.navigation.navigateHome +import com.terning.feature.onboarding.signin.navigation.SignIn import kotlinx.serialization.Serializable fun NavController.navigateStartHome(navOptions: NavOptions? = null) { @@ -35,7 +37,15 @@ fun NavGraphBuilder.startHomeNavGraph( ExitTransition.None } ) { - StartHomeScreen(navController = navHostController) + StartHomeScreen(navigateToHome = { + navHostController.navigateHome( + navOptions = NavOptions.Builder().setPopUpTo( + route = SignIn, + inclusive = true + ).build() + ) + } + ) } } diff --git a/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt b/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt index 7bb803ea0..6608f3187 100644 --- a/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt +++ b/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt @@ -24,7 +24,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavHostController import com.terning.core.designsystem.component.bottomsheet.MyPageLogoutBottomSheet import com.terning.core.designsystem.component.bottomsheet.MyPageQuitBottomSheet import com.terning.core.designsystem.component.image.TerningImage @@ -42,7 +41,6 @@ import com.terning.feature.mypage.component.MyPageItem @Composable fun MyPageRoute( - navController: NavHostController, viewModel: MyPageViewModel = hiltViewModel(), ) { val state by viewModel.state.collectAsStateWithLifecycle() diff --git a/feature/src/main/java/com/terning/feature/mypage/navigation/MyPageNavigation.kt b/feature/src/main/java/com/terning/feature/mypage/navigation/MyPageNavigation.kt index a5997724f..c028d5967 100644 --- a/feature/src/main/java/com/terning/feature/mypage/navigation/MyPageNavigation.kt +++ b/feature/src/main/java/com/terning/feature/mypage/navigation/MyPageNavigation.kt @@ -35,7 +35,7 @@ fun NavGraphBuilder.myPageNavGraph( ExitTransition.None } ) { - MyPageRoute(navController = navHostController) + MyPageRoute() } } From 262512510cd806be7de779e0d9bdcd40d1502798 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Tue, 20 Aug 2024 23:58:05 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[FIX/#188]=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filtering/FilteringThreeRoute.kt | 19 +++++++++++-------- .../component/StatusOneRadioGroup.kt | 4 ++-- .../component/StatusTwoRadioGroup.kt | 2 +- .../navigation/FilteringThreeNavigation.kt | 15 ++++++++------- .../com/terning/feature/main/MainScreen.kt | 7 ------- .../com/terning/feature/mypage/MyPageRoute.kt | 4 ++-- .../feature/mypage/component/MyPageItem.kt | 4 ++-- .../feature/onboarding/signin/SignInRoute.kt | 11 ++++------- .../onboarding/signin/SignInViewModel.kt | 1 - .../signin/component/KakaoButton.kt | 10 ++++------ .../signin/navigation/SignInNavigation.kt | 5 ++++- .../feature/onboarding/signup/SignUpRoute.kt | 13 +++++++------ .../signup/component/SignUpProfile.kt | 8 +++----- .../feature/onboarding/splash/SplashRoute.kt | 4 ++-- 14 files changed, 50 insertions(+), 57 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt index 10d91b9d6..b51640a80 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/FilteringThreeRoute.kt @@ -19,7 +19,6 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.flowWithLifecycle -import androidx.navigation.NavController import com.terning.core.designsystem.component.button.RectangleButton import com.terning.core.designsystem.component.datepicker.DatePickerUI import com.terning.core.designsystem.component.image.TerningImage @@ -29,16 +28,15 @@ import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.extension.toast import com.terning.feature.R -import com.terning.feature.filtering.starthome.navigation.navigateStartHome import java.util.Calendar @Composable fun FilteringThreeRoute( grade: Int, workingPeriod: Int, - navController: NavController, + navigateUp: () -> Unit, + navigateToStartHome: () -> Unit, viewModel: FilteringViewModel = hiltViewModel(), - navigateUp: () -> Unit ) { val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current @@ -63,7 +61,7 @@ fun FilteringThreeRoute( viewModel.sideEffects.flowWithLifecycle(lifecycle = lifecycleOwner.lifecycle) .collect { sideEffect -> when (sideEffect) { - is FilteringSideEffect.NavigateToStartHome -> navController.navigateStartHome() + is FilteringSideEffect.NavigateToStartHome -> navigateToStartHome() is FilteringSideEffect.ShowToast -> context.toast(sideEffect.message) } } @@ -146,8 +144,13 @@ fun FilteringThreeScreen( @Composable fun FilteringThreeScreenPreview() { TerningPointTheme { -// FilteringThreeScreen( -// -// ) + FilteringThreeScreen( + navigateUp = { }, + chosenYear = 2024, + chosenMonth = 8, + onYearChosen = {}, + onMonthChosen = {}, + onNextClick = {} + ) } } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt index 9efc5cbf1..50a43b6fb 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt @@ -17,8 +17,8 @@ import com.terning.feature.R @Composable fun StatusOneRadioGroup( - onButtonClick: (Int) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + onButtonClick: (Int) -> Unit ) { val options = listOf( R.string.filtering_status1_button1, diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt index c97d92321..64fc070f7 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt @@ -17,8 +17,8 @@ import com.terning.feature.R @Composable fun StatusTwoRadioGroup( + modifier: Modifier = Modifier, onButtonClick: (Int) -> Unit, - modifier: Modifier = Modifier ) { val options = listOf( R.string.filtering_status2_button1, diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt index 584c8af00..759c65c4d 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/navigation/FilteringThreeNavigation.kt @@ -8,13 +8,14 @@ import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.terning.core.navigation.Route import com.terning.feature.filtering.filtering.FilteringThreeRoute -import com.terning.feature.filtering.filtering.FilteringThreeScreen +import com.terning.feature.filtering.starthome.navigation.navigateStartHome import kotlinx.serialization.Serializable fun NavController.navigateFilteringThree( - grade : Int, - workingPeriod : Int, - navOptions: NavOptions? = null) { + grade: Int, + workingPeriod: Int, + navOptions: NavOptions? = null +) { navigate( route = FilteringThree(grade = grade, workingPeriod = workingPeriod), navOptions = navOptions @@ -29,14 +30,14 @@ fun NavGraphBuilder.filteringThreeNavGraph( FilteringThreeRoute( grade = args.grade, workingPeriod = args.workingPeriod, - navigateUp = {navHostController.navigateUp()}, - navController = navHostController + navigateUp = { navHostController.navigateUp() }, + navigateToStartHome = { navHostController.navigateStartHome() } ) } } @Serializable data class FilteringThree( - val grade : Int, + val grade: Int, val workingPeriod: Int ) : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/main/MainScreen.kt b/feature/src/main/java/com/terning/feature/main/MainScreen.kt index 81bb56528..e5fbb5d02 100644 --- a/feature/src/main/java/com/terning/feature/main/MainScreen.kt +++ b/feature/src/main/java/com/terning/feature/main/MainScreen.kt @@ -1,14 +1,9 @@ package com.terning.feature.main import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.EnterTransition -import androidx.compose.animation.ExitTransition -import androidx.compose.animation.core.LinearOutSlowInEasing import androidx.compose.animation.core.tween import androidx.compose.animation.expandVertically -import androidx.compose.animation.fadeIn import androidx.compose.animation.shrinkVertically -import androidx.compose.animation.slideIn import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding @@ -22,7 +17,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.compose.NavHost @@ -131,7 +125,6 @@ private fun MainBottomBar( unselectedTextColor = Grey300, indicatorColor = White ) - ) } } diff --git a/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt b/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt index 6608f3187..c2a0dc1de 100644 --- a/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt +++ b/feature/src/main/java/com/terning/feature/mypage/MyPageRoute.kt @@ -113,11 +113,11 @@ fun MyPageRoute( fun MyPageScreen( onLogoutClick: () -> Unit, onQuitClick: () -> Unit, + onNoticeClick: () -> Unit, + onOpinionClick: () -> Unit, modifier: Modifier = Modifier, name: String = "", authType: String = "", - onNoticeClick: () -> Unit, - onOpinionClick: () -> Unit ) { Box( modifier = modifier.fillMaxSize(), diff --git a/feature/src/main/java/com/terning/feature/mypage/component/MyPageItem.kt b/feature/src/main/java/com/terning/feature/mypage/component/MyPageItem.kt index 4dd55e40c..277a31c2a 100644 --- a/feature/src/main/java/com/terning/feature/mypage/component/MyPageItem.kt +++ b/feature/src/main/java/com/terning/feature/mypage/component/MyPageItem.kt @@ -19,10 +19,10 @@ import com.terning.feature.R @Composable fun MyPageItem( - modifier: Modifier = Modifier, text: String, - version: String = "", icon: Int, + modifier: Modifier = Modifier, + version: String = "", onButtonClick: () -> Unit = {} ) { Row( diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index c904393b2..5deaa1b25 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -11,7 +11,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -19,21 +18,19 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.flowWithLifecycle -import androidx.navigation.NavHostController import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.White import com.terning.core.extension.toast import com.terning.feature.R -import com.terning.feature.home.home.navigation.navigateHome import com.terning.feature.onboarding.signin.component.KakaoButton -import com.terning.feature.onboarding.signup.navigation.navigateSignUp @Composable fun SignInRoute( + navigateToHome: () -> Unit, + navigateToSignUp: (String) -> Unit, viewModel: SignInViewModel = hiltViewModel(), - navController: NavHostController, ) { val systemUiController = rememberSystemUiController() @@ -53,8 +50,8 @@ fun SignInRoute( .collect { sideEffect -> when (sideEffect) { is SignInSideEffect.ShowToast -> context.toast(sideEffect.message) - is SignInSideEffect.NavigateToHome -> navController.navigateHome() - is SignInSideEffect.NavigateSignUp -> navController.navigateSignUp(sideEffect.authId) + is SignInSideEffect.NavigateToHome -> navigateToHome() + is SignInSideEffect.NavigateSignUp -> navigateToSignUp(sideEffect.authId) } } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt index 79a913646..5ea20f9fa 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt @@ -22,7 +22,6 @@ import javax.inject.Inject class SignInViewModel @Inject constructor( private val authRepository: AuthRepository, private val tokenRepository: TokenRepository, -//application context -> 앱 거 ) : ViewModel() { init { diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/component/KakaoButton.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/component/KakaoButton.kt index c5e7db06a..e7aaf09ed 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/component/KakaoButton.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/component/KakaoButton.kt @@ -1,6 +1,5 @@ package com.terning.feature.onboarding.signin.component -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -11,9 +10,9 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.theme.KakaoYellow import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.TerningTheme @@ -23,8 +22,8 @@ import com.terning.feature.R @Composable fun KakaoButton( title: String, + onSignInClick: () -> Unit, modifier: Modifier = Modifier, - onSignInClick: () -> Unit ) { Row( modifier = modifier @@ -38,9 +37,8 @@ fun KakaoButton( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center ) { - Image( - painter = painterResource(id = R.drawable.ic_signin_kakao), - contentDescription = null, + TerningImage( + painter = R.drawable.ic_signin_kakao, modifier = Modifier.padding(horizontal = 8.dp) ) Text( diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/navigation/SignInNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/navigation/SignInNavigation.kt index ca63583ef..f9ee42532 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/navigation/SignInNavigation.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/navigation/SignInNavigation.kt @@ -6,7 +6,9 @@ import androidx.navigation.NavHostController import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.terning.core.navigation.Route +import com.terning.feature.home.home.navigation.navigateHome import com.terning.feature.onboarding.signin.SignInRoute +import com.terning.feature.onboarding.signup.navigation.navigateSignUp import kotlinx.serialization.Serializable fun NavController.navigateSignIn(navOptions: NavOptions? = null) { @@ -21,7 +23,8 @@ fun NavGraphBuilder.signInNavGraph( ) { composable { SignInRoute( - navController = navHostController + navigateToHome = { navHostController.navigateHome() }, + navigateToSignUp = { authId -> navHostController.navigateSignUp(authId) } ) } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt index f18bf4cf6..61dce1b1d 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt @@ -36,8 +36,8 @@ import com.terning.feature.onboarding.signup.component.SignUpProfile @Composable fun SignUpRoute( authId: String, + navigateToStartFiltering: (String) -> Unit, viewModel: SignUpViewModel = hiltViewModel(), - navigateToStartFiltering: (String) -> Unit ) { val signUpState by viewModel.state.collectAsStateWithLifecycle() @@ -53,16 +53,17 @@ fun SignUpRoute( .collect { sideEffect -> when (sideEffect) { is SignUpSideEffect.ShowToast -> context.toast(sideEffect.message) - is SignUpSideEffect.NavigateToStartFiltering -> { + is SignUpSideEffect.NavigateToStartFiltering -> navigateToStartFiltering(signUpState.name) - } } } } SignUpScreen( signUpState = signUpState, - onSignUpClick = { viewModel.postSignUpWithServer() }, + onSignUpClick = { + viewModel.postSignUpWithServer() + }, onInputChange = { name -> viewModel.isInputValid(name) }, @@ -74,11 +75,11 @@ fun SignUpRoute( @Composable fun SignUpScreen( - modifier: Modifier = Modifier, signUpState: SignUpState, onSignUpClick: () -> Unit, onInputChange: (String) -> Unit, - onFetchCharacter: (Int) -> Unit + onFetchCharacter: (Int) -> Unit, + modifier: Modifier = Modifier, ) { val focusManager = LocalFocusManager.current var showBottomSheet by remember { mutableStateOf(false) } diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpProfile.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpProfile.kt index 28fca2bfe..b09d96245 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpProfile.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/component/SignUpProfile.kt @@ -15,12 +15,13 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.component.image.TerningImage import com.terning.feature.R @Composable fun SignUpProfile( + index: Int, modifier: Modifier = Modifier, - index: Int ) { val grade = when (index) { 0 -> R.drawable.ic_terning_profile_00 @@ -46,10 +47,7 @@ fun SignUpProfile( Box( modifier = modifier.align(Alignment.BottomEnd) ) { - Image( - painterResource(id = R.drawable.ic_sign_up_button), - contentDescription = stringResource(id = R.string.sign_up_profile_button), - ) + TerningImage(painter = R.drawable.ic_sign_up_button) } } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/splash/SplashRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/splash/SplashRoute.kt index 41179e37c..da523a392 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/splash/SplashRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/splash/SplashRoute.kt @@ -19,9 +19,9 @@ import com.terning.feature.R @Composable fun SplashRoute( - viewModel: SplashViewModel = hiltViewModel(), navigateToHome: () -> Unit, - navigateToSignIn: () -> Unit + navigateToSignIn: () -> Unit, + viewModel: SplashViewModel = hiltViewModel(), ) { val systemUiController = rememberSystemUiController() From d3491a9ff66e6727e3feb0baf798dd140b35e038 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 21 Aug 2024 00:00:00 +0900 Subject: [PATCH 10/11] =?UTF-8?q?[FIX/#188]=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filtering/filtering/component/StatusOneRadioGroup.kt | 2 +- .../filtering/filtering/component/StatusTwoRadioGroup.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt index 50a43b6fb..9aa695c6a 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusOneRadioGroup.kt @@ -17,8 +17,8 @@ import com.terning.feature.R @Composable fun StatusOneRadioGroup( + onButtonClick: (Int) -> Unit, modifier: Modifier = Modifier, - onButtonClick: (Int) -> Unit ) { val options = listOf( R.string.filtering_status1_button1, diff --git a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt index 64fc070f7..6d42ee42a 100644 --- a/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt +++ b/feature/src/main/java/com/terning/feature/filtering/filtering/component/StatusTwoRadioGroup.kt @@ -17,8 +17,8 @@ import com.terning.feature.R @Composable fun StatusTwoRadioGroup( - modifier: Modifier = Modifier, onButtonClick: (Int) -> Unit, + modifier: Modifier = Modifier, ) { val options = listOf( R.string.filtering_status2_button1, From b1a01273aa1954f94987303265fa47360be671fd Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Wed, 21 Aug 2024 00:59:46 +0900 Subject: [PATCH 11/11] =?UTF-8?q?[FIX/#188]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/onboarding/signin/SignInRoute.kt | 63 ++++++++++++++++++- .../onboarding/signin/SignInSideEffect.kt | 3 + .../onboarding/signin/SignInViewModel.kt | 32 +++------- 3 files changed, 72 insertions(+), 26 deletions(-) diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt index 5deaa1b25..43b79c8c6 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInRoute.kt @@ -1,5 +1,6 @@ package com.terning.feature.onboarding.signin +import android.content.Context import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -19,6 +20,8 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.flowWithLifecycle import com.google.accompanist.systemuicontroller.rememberSystemUiController +import com.kakao.sdk.auth.model.OAuthToken +import com.kakao.sdk.user.UserApiClient import com.terning.core.designsystem.component.image.TerningImage import com.terning.core.designsystem.theme.TerningPointTheme import com.terning.core.designsystem.theme.White @@ -52,12 +55,37 @@ fun SignInRoute( is SignInSideEffect.ShowToast -> context.toast(sideEffect.message) is SignInSideEffect.NavigateToHome -> navigateToHome() is SignInSideEffect.NavigateSignUp -> navigateToSignUp(sideEffect.authId) + is SignInSideEffect.StartKakaoTalkLogin -> startKakoTalkLogIn(context = context) { token, error -> + viewModel.signInResult(token = token, error = error) + } + + is SignInSideEffect.StartKakaoWebLogin -> startKakaoWebLogIn(context = context) { token, error -> + viewModel.signInResult(token = token, error = error) + } + + is SignInSideEffect.SignInFailure -> + signInFailure(context = context, + error = sideEffect.error, + signInResult = { token, error -> + viewModel.signInResult(token = token, error = error) + }, + sigInCancellationOrError = { error -> + viewModel.sigInCancellationOrError(error) + } + ) + } } } SignInScreen( - onSignInClick = { viewModel.startKakaoLogIn(context) } + onSignInClick = { + viewModel.startKakaoLogIn( + isKakaoAvailable = UserApiClient.instance.isKakaoTalkLoginAvailable( + context + ) + ) + } ) } @@ -89,6 +117,39 @@ fun SignInScreen( } } +private fun startKakoTalkLogIn( + context: Context, + signInResult: (OAuthToken?, Throwable?) -> Unit, +) { + UserApiClient.instance.loginWithKakaoTalk(context) { token, error -> + signInResult(token, error) + } +} + +private fun startKakaoWebLogIn( + context: Context, + signInResult: (OAuthToken?, Throwable?) -> Unit, +) { + UserApiClient.instance.loginWithKakaoAccount(context) { token, error -> + signInResult(token, error) + } +} + +private fun signInFailure( + context: Context, + error: Throwable, + signInResult: (OAuthToken?, Throwable?) -> Unit, + sigInCancellationOrError: (Throwable) -> Unit +) { + if (error.toString().contains(KAKAO_NOT_LOGGED_IN)) { + UserApiClient.instance.loginWithKakaoAccount(context) { token, error -> + signInResult(token, error) + } + } else sigInCancellationOrError(error) +} + +private const val KAKAO_NOT_LOGGED_IN = "statusCode=302" + @Preview(showBackground = true) @Composable fun SignInScreenPreview() { diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInSideEffect.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInSideEffect.kt index 37fcc821f..880b30f7c 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInSideEffect.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInSideEffect.kt @@ -6,4 +6,7 @@ sealed class SignInSideEffect { data object NavigateToHome : SignInSideEffect() data class NavigateSignUp(val authId: String) : SignInSideEffect() data class ShowToast(@StringRes val message: Int) : SignInSideEffect() + data object StartKakaoTalkLogin : SignInSideEffect() + data object StartKakaoWebLogin : SignInSideEffect() + data class SignInFailure(val error: Throwable) : SignInSideEffect() } \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt index 5ea20f9fa..7fb686355 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signin/SignInViewModel.kt @@ -1,12 +1,10 @@ package com.terning.feature.onboarding.signin -import android.content.Context import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.kakao.sdk.auth.model.OAuthToken import com.kakao.sdk.common.model.ClientError import com.kakao.sdk.common.model.ClientErrorCause -import com.kakao.sdk.user.UserApiClient import com.terning.domain.entity.onboarding.SignInRequest import com.terning.domain.repository.AuthRepository import com.terning.domain.repository.TokenRepository @@ -32,39 +30,24 @@ class SignInViewModel @Inject constructor( val signInSideEffects: SharedFlow get() = _signInSideEffects.asSharedFlow() - fun startKakaoLogIn(context: Context) { - if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) { - UserApiClient.instance.loginWithKakaoTalk(context) { token, error -> - signInResult(context, token, error) - } - } else { - UserApiClient.instance.loginWithKakaoAccount(context) { token, error -> - signInResult(context, token, error) - } + fun startKakaoLogIn(isKakaoAvailable: Boolean) { + viewModelScope.launch { + if (isKakaoAvailable) _signInSideEffects.emit(SignInSideEffect.StartKakaoTalkLogin) + else _signInSideEffects.emit(SignInSideEffect.StartKakaoWebLogin) } } - private fun signInResult(context: Context, token: OAuthToken?, error: Throwable?) { + fun signInResult(token: OAuthToken?, error: Throwable?) { viewModelScope.launch { if (error != null) { - signInFailure(context, error) + _signInSideEffects.emit(SignInSideEffect.SignInFailure(error)) } else if (token != null) { signInSuccess(token.accessToken) } } } - private fun signInFailure(context: Context, error: Throwable) { - if (error.toString().contains(KAKAO_NOT_LOGGED_IN)) { - UserApiClient.instance.loginWithKakaoAccount(context) { token, error -> - signInResult(context, token, error) - } - } else { - sigInCancellationOrError(error) - } - } - - private fun sigInCancellationOrError(error: Throwable?) { + fun sigInCancellationOrError(error: Throwable) { viewModelScope.launch { if (error is ClientError && error.reason == ClientErrorCause.Cancelled) { _signInSideEffects.emit(SignInSideEffect.ShowToast(R.string.sign_in_kakao_cancel)) @@ -105,7 +88,6 @@ class SignInViewModel @Inject constructor( } companion object { - private const val KAKAO_NOT_LOGGED_IN = "statusCode=302" private const val KAKAO = "KAKAO" } }