From 499916e44627fa437ed73b222f27715cfb8ebfff Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:04:34 +0900 Subject: [PATCH 01/41] =?UTF-8?q?[MOD/#260]=20ClodyApp=20->=20ClodyApplica?= =?UTF-8?q?tion=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../java/com/sopt/clody/{ClodyApp.kt => ClodyApplication.kt} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename app/src/main/java/com/sopt/clody/{ClodyApp.kt => ClodyApplication.kt} (93%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ff9e0c90..e3e223b2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ Date: Wed, 7 May 2025 01:05:21 +0900 Subject: [PATCH 02/41] =?UTF-8?q?[ADD/#260]=20=EC=95=B1=20=EB=82=B4?= =?UTF-8?q?=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B2=BD=EB=A1=9C?= =?UTF-8?q?=EB=A5=BC=20sealed=20interface=EB=A1=9C=20=EC=A0=95=EC=9D=98?= =?UTF-8?q?=ED=95=98=EC=97=AC=20type-safe=ED=95=9C=20=EC=9D=B8=EC=9E=90=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=20=EA=B5=AC=EC=A1=B0=20=EB=8F=84=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/utils/navigation/Route.kt | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt new file mode 100644 index 00000000..4ae1aa8f --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt @@ -0,0 +1,85 @@ +package com.sopt.clody.presentation.utils.navigation + +import kotlinx.serialization.Serializable + +/** + * sealed interface로 정의한 앱 내 네비게이션 Route + * @Serializable을 활용해 arguments를 type-safe하게 전달. + */ + +@Serializable +sealed interface Route { + + @Serializable + data object Splash : Route + + @Serializable + data object Login : Route + + @Serializable + data object TermsOfService : Route + + @Serializable + data object Nickname : Route + + @Serializable + data object TimeReminder : Route + + @Serializable + data object Guide : Route + + @Serializable + data class Home( + val selectedYear: Int, + val selectedMonth: Int, + val selectedDay: Int? = null, + ) : Route + + @Serializable + data class DiaryList( + val selectedYearFromHome: Int, + val selectedMonthFromHome: Int, + ) : Route + + @Serializable + data class WriteDiary( + val year: Int, + val month: Int, + val date: Int, + ) : Route + + @Serializable + data class ReplyLoading( + val year: Int, + val month: Int, + val date: Int, + val from: ReplyLoadingFrom = ReplyLoadingFrom.HOME, + val replyStatus: ReplyStatus = ReplyStatus.UNREADY, + ) : Route { + @Serializable + enum class ReplyLoadingFrom { + HOME, + DIARY_LIST, + } + } + + @Serializable + data class ReplyDiary( + val year: Int, + val month: Int, + val date: Int, + val replyStatus: ReplyStatus = ReplyStatus.UNREADY, + ) : Route + + @Serializable + data object Setting : Route + + @Serializable + data object AccountManagement : Route + + @Serializable + data object NotificationSetting : Route + + @Serializable + data class WebView(val encodedUrl: String) : Route +} From 00be1288557461bcc3b127804ba13ccd0922e79d Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:05:58 +0900 Subject: [PATCH 03/41] =?UTF-8?q?[ADD/#260]=20safePopBackStack=20=ED=97=AC?= =?UTF-8?q?=ED=8D=BC=20=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/navigation/NavControllerExtensions.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/utils/navigation/NavControllerExtensions.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/NavControllerExtensions.kt b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/NavControllerExtensions.kt new file mode 100644 index 00000000..982bbdd9 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/NavControllerExtensions.kt @@ -0,0 +1,12 @@ +package com.sopt.clody.presentation.utils.navigation + +import androidx.navigation.NavController + +/** + * 현재 backStack 상단에서 popBackStack 동작을 수행하는 helper 함수. + */ +fun NavController.safePopBackStack() { + if (currentBackStackEntry?.lifecycle?.currentState == androidx.lifecycle.Lifecycle.State.RESUMED) { + popBackStack() + } +} From 4fdf85b725dc5420be42bee37eb139fb7b8bfc51 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:07:45 +0900 Subject: [PATCH 04/41] =?UTF-8?q?[ADD/#260]=20ClodyNavHost=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=EC=B6=94=EA=B0=80(=EC=95=B1=20?= =?UTF-8?q?=EC=A0=84=EC=97=AD=20=EB=82=B4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/main/ClodyNavHost.kt | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt new file mode 100644 index 00000000..a8c43e60 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt @@ -0,0 +1,130 @@ +package com.sopt.clody.presentation.ui.main + +import android.content.Intent +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import com.sopt.clody.presentation.ui.auth.guide.guideScreen +import com.sopt.clody.presentation.ui.auth.guide.navigateToGuide +import com.sopt.clody.presentation.ui.auth.login.navigation.loginScreen +import com.sopt.clody.presentation.ui.auth.login.navigation.navigateToLogin +import com.sopt.clody.presentation.ui.auth.signup.navigation.navigateToNickname +import com.sopt.clody.presentation.ui.auth.signup.navigation.navigateToTermsOfService +import com.sopt.clody.presentation.ui.auth.signup.navigation.nicknameScreen +import com.sopt.clody.presentation.ui.auth.signup.navigation.termsOfServiceScreen +import com.sopt.clody.presentation.ui.auth.timereminder.navigateToTimeReminder +import com.sopt.clody.presentation.ui.auth.timereminder.timeReminderScreen +import com.sopt.clody.presentation.ui.diarylist.navigation.diaryListScreen +import com.sopt.clody.presentation.ui.diarylist.navigation.navigateToDiaryList +import com.sopt.clody.presentation.ui.home.navigation.homeScreen +import com.sopt.clody.presentation.ui.home.navigation.navigateToHome +import com.sopt.clody.presentation.ui.replydiary.navigation.navigateToReplyDiary +import com.sopt.clody.presentation.ui.replydiary.navigation.replyDiaryScreen +import com.sopt.clody.presentation.ui.replyloading.navigation.navigateToReplyLoading +import com.sopt.clody.presentation.ui.replyloading.navigation.replyLoadingScreen +import com.sopt.clody.presentation.ui.setting.navigation.accountManagementScreen +import com.sopt.clody.presentation.ui.setting.navigation.navigateToAccountManagement +import com.sopt.clody.presentation.ui.setting.navigation.navigateToNotificationSetting +import com.sopt.clody.presentation.ui.setting.navigation.navigateToSetting +import com.sopt.clody.presentation.ui.setting.navigation.navigateToWebView +import com.sopt.clody.presentation.ui.setting.navigation.notificationSettingScreen +import com.sopt.clody.presentation.ui.setting.navigation.settingScreen +import com.sopt.clody.presentation.ui.setting.navigation.webViewScreen +import com.sopt.clody.presentation.ui.splash.navigation.splashScreen +import com.sopt.clody.presentation.ui.writediary.navigation.navigateToWriteDiary +import com.sopt.clody.presentation.ui.writediary.navigation.writeDiaryScreen +import com.sopt.clody.presentation.utils.navigation.safePopBackStack + +/** + * 앱 전역의 Navigation Host. + * + * 각 기능? 화면?의 navigation graph를 이곳에 연결. + * [NavHost]를 사용하여 화면 전환을 구성하고, + * startIntent 등을 통해 초기 경로 조건 처리도 할 수 있음. + * + * @param appState 앱 상태를 포함한 네비게이션 컨트롤러 + * @param modifier Compose UI Modifier + * @param startIntent 외부에서 전달된 인텐트 (푸시 처리 등) + */ +@Composable +fun ClodyNavHost( + appState: ClodyAppState, + modifier: Modifier = Modifier, + startIntent: Intent, +) { + val navController: NavHostController = appState.navController + + Box(modifier = modifier.fillMaxSize()) { + NavHost( + navController = navController, + startDestination = appState.startDestination, + ) { + splashScreen( + startIntent = startIntent, + navigateToLogin = navController::navigateToLogin, + navigateToHome = navController::navigateToHome, + ) + + loginScreen( + navigateToTerms = navController::navigateToTermsOfService, + navigateToHome = navController::navigateToHome, + ) + termsOfServiceScreen( + navigateToNickname = navController::navigateToNickname, + navigateToLogin = navController::navigateToLogin, + ) + nicknameScreen( + navigateToReminder = navController::navigateToTimeReminder, + navigateToPrevious = navController::safePopBackStack, + ) + timeReminderScreen( + navigateToGuide = navController::navigateToGuide, + ) + guideScreen( + navigateToHome = navController::navigateToHome, + ) + homeScreen( + navigateToDiaryList = navController::navigateToDiaryList, + navigateToSetting = navController::navigateToSetting, + navigateToWriteDiary = navController::navigateToWriteDiary, + navigateToReplyLoading = navController::navigateToReplyLoading, + ) + diaryListScreen( + navigateToHome = navController::navigateToHome, + navigateToReplyLoading = navController::navigateToReplyLoading, + ) + writeDiaryScreen( + navigateToReplyLoading = navController::navigateToReplyLoading, + navigateToHome = navController::navigateToHome, + navigateToPrevious = navController::safePopBackStack, + ) + replyLoadingScreen( + navigateToReplyDiary = navController::navigateToReplyDiary, + navigateToHome = navController::navigateToHome, + navigateToDiaryList = navController::navigateToDiaryList, + ) + replyDiaryScreen( + navigateToHome = navController::navigateToHome, + ) + settingScreen( + navigateToAccountManagement = navController::navigateToAccountManagement, + navigateToNotification = navController::navigateToNotificationSetting, + navigateToPrevious = navController::safePopBackStack, + navigateToWebView = navController::navigateToWebView, + ) + accountManagementScreen( + navigateToPrevious = navController::safePopBackStack, + navigateToLogin = navController::navigateToLogin, + ) + notificationSettingScreen( + navigateToPrevious = navController::safePopBackStack, + ) + webViewScreen( + navigateToPrevious = navController::safePopBackStack, + ) + } + } +} From 5618202ddd464dba3952d0bb1fad87e8bcab3d64 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:08:29 +0900 Subject: [PATCH 05/41] =?UTF-8?q?[ADD/#260]=20ClodyAppState=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=B0=8F=20rememberClodyAppState=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80(=EC=95=B1=EC=9D=98=20?= =?UTF-8?q?=EC=A0=84=EC=97=AD=20=EC=83=81=ED=83=9C=20=EA=B4=80=EB=A6=AC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/main/ClodyAppState.kt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyAppState.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyAppState.kt b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyAppState.kt new file mode 100644 index 00000000..ecbb4abf --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyAppState.kt @@ -0,0 +1,29 @@ +package com.sopt.clody.presentation.ui.main + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.remember +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController +import com.sopt.clody.presentation.utils.navigation.Route + +/** + * 앱의 전역 상태를 관리하는 클래스. + * 현재는 네비게이션 컨트롤러만 포함되어 있으며, + * 추후 다른 상태(예: 사용자 인증 상태, 테마 설정 등) 추가 가능. + */ +@Stable +class ClodyAppState( + val navController: NavHostController, +) { + val startDestination = Route.Splash +} + +/** + * [ClodyAppState]를 기억하고 유지하는 Composable 함수. + * [rememberNavController]를 활용해 NavController를 생성. + */ +@Composable +fun rememberClodyAppState( + navController: NavHostController = rememberNavController(), +): ClodyAppState = remember { ClodyAppState(navController) } From 38808ca8062b63c3f782d46add3016e341381f9c Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:08:38 +0900 Subject: [PATCH 06/41] =?UTF-8?q?[ADD/#260]=20ClodyApp=20=EB=A3=A8?= =?UTF-8?q?=ED=8A=B8=20Composable=20=ED=95=A8=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80(=EC=95=B1=20=ED=85=8C=EB=A7=88=20=EB=B0=8F=20?= =?UTF-8?q?=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clody/presentation/ui/main/ClodyApp.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyApp.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyApp.kt b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyApp.kt new file mode 100644 index 00000000..8907a986 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyApp.kt @@ -0,0 +1,39 @@ +package com.sopt.clody.presentation.ui.main + +import android.content.Intent +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints +import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils + +/** + * 루트 Composable 함수. + * 앱 전반의 테마와 시스템 UI 설정, Scaffold 레이아웃을 관리하고 + * [ClodyNavHost]를 통해 실제 네비게이션 경로를 구성. + */ +@Composable +fun ClodyApp( + appState: ClodyAppState, + startIntent: Intent, +) { + LaunchedEffect(startIntent) { + if (startIntent.hasExtra("google.message_id")) { + AmplitudeUtils.trackEvent(AmplitudeConstraints.ALARM) + } + } + + Scaffold( + modifier = Modifier.fillMaxSize(), + content = { innerPadding -> + ClodyNavHost( + appState = appState, + modifier = Modifier.padding(innerPadding), + startIntent = startIntent, + ) + }, + ) +} From 1a85489845c484942095f9e98153eb29b4138e2a Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:08:55 +0900 Subject: [PATCH 07/41] =?UTF-8?q?[REFACTOR/#260]=20MainActivity=EC=97=90?= =?UTF-8?q?=EC=84=9C=20ClodyApp=EC=9C=BC=EB=A1=9C=20=EC=A0=84=ED=99=98?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=95=B1=20=EC=83=81=ED=83=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20=EB=82=B4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/main/MainActivity.kt | 77 +------------------ 1 file changed, 4 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/main/MainActivity.kt b/app/src/main/java/com/sopt/clody/presentation/ui/main/MainActivity.kt index bc1e827f..adcf751f 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/main/MainActivity.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/main/MainActivity.kt @@ -1,31 +1,12 @@ package com.sopt.clody.presentation.ui.main import android.annotation.SuppressLint -import android.content.Intent import android.content.pm.ActivityInfo import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.SideEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState -import androidx.compose.runtime.setValue -import androidx.navigation.compose.rememberNavController -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator -import com.sopt.clody.presentation.ui.diarylist.navigation.DiaryListNavigator -import com.sopt.clody.presentation.ui.home.navigation.HomeNavigator -import com.sopt.clody.presentation.ui.navigatior.MainNavHost -import com.sopt.clody.presentation.ui.replydiary.navigation.ReplyDiaryNavigator -import com.sopt.clody.presentation.ui.replyloading.navigation.ReplyLoadingNavigator -import com.sopt.clody.presentation.ui.setting.navigation.SettingNavigator -import com.sopt.clody.presentation.ui.writediary.navigation.WriteDiaryNavigator -import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints -import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.ui.theme.CLODYTheme import dagger.hilt.android.AndroidEntryPoint @@ -36,6 +17,7 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + enableEdgeToEdge( statusBarStyle = SystemBarStyle.light( android.graphics.Color.TRANSPARENT, @@ -46,63 +28,12 @@ class MainActivity : ComponentActivity() { android.graphics.Color.WHITE, ), ) + setContent { CLODYTheme { - val navController = rememberNavController() - val currentIntent by rememberUpdatedState(newValue = intent) - var processedIntent by remember { mutableStateOf(null) } - - LaunchedEffect(key1 = currentIntent) { - if (processedIntent != currentIntent) { - handleIntent(currentIntent) - processedIntent = currentIntent - } - } - - SideEffect { - if (processedIntent != intent) { - handleIntent(intent) - processedIntent = intent - } - } - - LaunchedEffect(key1 = intent.getBooleanExtra("NAVIGATE_TO_LOGIN", false)) { - if (intent.getBooleanExtra("NAVIGATE_TO_LOGIN", false)) { - navController.navigate("register_graph") { - popUpTo(0) { inclusive = true } - } - } - } - - val authNavigator = remember(navController) { AuthNavigator(navController) } - val homeNavigator = remember(navController) { HomeNavigator(navController) } - val diaryListNavigator = remember(navController) { DiaryListNavigator(navController) } - val writeDiaryNavigator = remember(navController) { WriteDiaryNavigator(navController) } - val settingNavigator = remember(navController) { SettingNavigator(navController) } - val replyLoadingNavigator = remember(navController) { ReplyLoadingNavigator(navController) } - val replyDiaryNavigator = remember(navController) { ReplyDiaryNavigator(navController) } - - MainNavHost( - navController = navController, - authNavigator = authNavigator, - homeNavigator = homeNavigator, - diaryListNavigator = diaryListNavigator, - writeDiaryNavigator = writeDiaryNavigator, - settingNavigator = settingNavigator, - replyLoadingNavigator = replyLoadingNavigator, - replyDiaryNavigator = replyDiaryNavigator, - ) + val appState = rememberClodyAppState() + ClodyApp(appState = appState, startIntent = intent) } } } - - private fun handleIntent(intent: Intent?) { - if (intent?.extras?.containsKey("google.message_id") == true) { - logPushClickEvent() - } - } - - private fun logPushClickEvent() { - AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.ALARM) - } } From 2c7732cdd924eec766ddc991b7451520ba1b2bf8 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:09:23 +0900 Subject: [PATCH 08/41] =?UTF-8?q?[DEL/#260]=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EB=84=A4=EB=B9=84=ED=98=B8=EC=8A=A4=ED=8A=B8=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/navigatior/MainNavHost.kt | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/navigatior/MainNavHost.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/navigatior/MainNavHost.kt b/app/src/main/java/com/sopt/clody/presentation/ui/navigatior/MainNavHost.kt deleted file mode 100644 index 385666f8..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/navigatior/MainNavHost.kt +++ /dev/null @@ -1,66 +0,0 @@ -package com.sopt.clody.presentation.ui.navigatior - -import androidx.compose.foundation.layout.Box -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator -import com.sopt.clody.presentation.ui.auth.navigation.guidNavGraph -import com.sopt.clody.presentation.ui.auth.navigation.nicknameNavGraph -import com.sopt.clody.presentation.ui.auth.navigation.registerNavGraph -import com.sopt.clody.presentation.ui.auth.navigation.termsOfServiceNavGraph -import com.sopt.clody.presentation.ui.auth.navigation.timeReminderNavGraph -import com.sopt.clody.presentation.ui.diarylist.navigation.DiaryListNavigator -import com.sopt.clody.presentation.ui.diarylist.navigation.diaryListNavGraph -import com.sopt.clody.presentation.ui.home.navigation.HomeNavigator -import com.sopt.clody.presentation.ui.home.navigation.homeNavGraph -import com.sopt.clody.presentation.ui.replydiary.navigation.ReplyDiaryNavigator -import com.sopt.clody.presentation.ui.replyloading.navigation.ReplyLoadingNavigator -import com.sopt.clody.presentation.ui.replyloading.navigation.replyLoadingNavGraph -import com.sopt.clody.presentation.ui.setting.navigation.SettingNavigator -import com.sopt.clody.presentation.ui.setting.navigation.accountManagementNavGraph -import com.sopt.clody.presentation.ui.setting.navigation.notificationSettingNavGraph -import com.sopt.clody.presentation.ui.setting.navigation.settingNavGraph -import com.sopt.clody.presentation.ui.setting.navigation.webViewNavGraph -import com.sopt.clody.presentation.ui.splash.SplashRoute -import com.sopt.clody.presentation.ui.writediary.navigation.WriteDiaryNavigator -import com.sopt.clody.presentation.ui.writediary.navigation.writeDiaryNavGraph - -@Composable -fun MainNavHost( - navController: NavHostController, - modifier: Modifier = Modifier, - authNavigator: AuthNavigator, - homeNavigator: HomeNavigator, - diaryListNavigator: DiaryListNavigator, - writeDiaryNavigator: WriteDiaryNavigator, - settingNavigator: SettingNavigator, - replyLoadingNavigator: ReplyLoadingNavigator, - replyDiaryNavigator: ReplyDiaryNavigator, -) { - Box( - modifier = modifier, - ) { - NavHost( - navController = navController, - startDestination = "splash", - ) { - composable("splash") { SplashRoute(navigator = authNavigator) } - registerNavGraph(authNavigator) - termsOfServiceNavGraph(authNavigator) - nicknameNavGraph(authNavigator) - guidNavGraph(authNavigator) - timeReminderNavGraph(authNavigator) - homeNavGraph(homeNavigator) - diaryListNavGraph(diaryListNavigator) - writeDiaryNavGraph(writeDiaryNavigator) - settingNavGraph(settingNavigator) - accountManagementNavGraph(settingNavigator) - notificationSettingNavGraph(settingNavigator) - webViewNavGraph(settingNavigator) - replyLoadingNavGraph(replyLoadingNavigator, replyDiaryNavigator) - } - } -} From ccda88c2e8d7283dc6d86a6b8188a70ff751a411 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:10:09 +0900 Subject: [PATCH 09/41] =?UTF-8?q?[ADD/#260]=20=EC=9D=BC=EA=B8=B0=EB=8B=B5?= =?UTF-8?q?=EC=9E=A5=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?enum=20class=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clody/presentation/utils/navigation/ReplyStatus.kt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt new file mode 100644 index 00000000..d50e0e9c --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt @@ -0,0 +1,8 @@ +package com.sopt.clody.presentation.utils.navigation + +import kotlinx.serialization.Serializable + +@Serializable +enum class ReplyStatus { + UNREADY, READY_READ, READY_NOT_READ +} From de54c4934a9c089d3354245732119bb9567b0beb Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:11:15 +0900 Subject: [PATCH 10/41] =?UTF-8?q?[ADD/#260]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/login/navigation/LoginNavigation.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt new file mode 100644 index 00000000..9d728d7a --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt @@ -0,0 +1,26 @@ +package com.sopt.clody.presentation.ui.auth.login.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import com.sopt.clody.presentation.ui.auth.login.LoginRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.loginScreen( + navigateToTerms: () -> Unit, + navigateToHome: () -> Unit, +) { + composable { + LoginRoute( + navigateToTerms = navigateToTerms, + navigateToHome = navigateToHome, + ) + } +} + +fun NavController.navigateToLogin( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.Login, navOptions) +} From ea13105b2a8063cb9f61968f84b7a11bc3fa2485 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:12:18 +0900 Subject: [PATCH 11/41] =?UTF-8?q?[REFACTOR/#260]=20SignUpScreen=20->=20Log?= =?UTF-8?q?inScreen=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SignUpScreen.kt => login/LoginScreen.kt} | 86 +++++++++---------- .../ui/auth/{signup => login}/SignInState.kt | 2 +- 2 files changed, 41 insertions(+), 47 deletions(-) rename app/src/main/java/com/sopt/clody/presentation/ui/auth/{signup/SignUpScreen.kt => login/LoginScreen.kt} (60%) rename app/src/main/java/com/sopt/clody/presentation/ui/auth/{signup => login}/SignInState.kt (71%) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt similarity index 60% rename from app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpScreen.kt rename to app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt index 8736d01f..96542b5f 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt @@ -1,4 +1,4 @@ -package com.sopt.clody.presentation.ui.auth.signup +package com.sopt.clody.presentation.ui.auth.login import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -25,42 +25,37 @@ import androidx.hilt.navigation.compose.hiltViewModel import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.sopt.clody.R import com.sopt.clody.presentation.ui.auth.component.button.KaKaoButton -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator +import com.sopt.clody.presentation.ui.auth.signup.SignUpViewModel import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.utils.base.UiState import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage import com.sopt.clody.ui.theme.ClodyTheme @Composable -fun SignUpRoute( - authNavigator: AuthNavigator, +fun LoginRoute( + navigateToTerms: () -> Unit, + navigateToHome: () -> Unit, ) { val viewModel: SignUpViewModel = hiltViewModel() val signInState by viewModel.signInState.collectAsState() val context = LocalContext.current - LaunchedEffect(signInState) { + LaunchedEffect(signInState.uiState) { when (signInState.uiState) { - is UiState.Success -> { - authNavigator.navigateHome() - } - - is UiState.Failure -> { - authNavigator.navigateTermsOfService() - } - - else -> {} + is UiState.Success -> navigateToHome() + is UiState.Failure -> navigateToTerms() + else -> Unit } } - SignUpScreen( + LoginScreen( isLoading = signInState.uiState is UiState.Loading, onSignInClick = { viewModel.signInWithKakao(context) }, ) } @Composable -fun SignUpScreen( +fun LoginScreen( isLoading: Boolean, onSignInClick: () -> Unit, ) { @@ -85,34 +80,33 @@ fun SignUpScreen( .padding(bottom = 40.dp), ) }, - content = { innerPadding -> - Column( - modifier = Modifier - .fillMaxSize() - .background(color = backgroundColor) - .padding(innerPadding), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Spacer(modifier = Modifier.heightForScreenPercentage(0.38f)) - Image( - painter = painterResource(id = R.drawable.ic_signup_logo), - contentDescription = null, - contentScale = ContentScale.Crop, - ) - Spacer(modifier = Modifier.heightForScreenPercentage(0.02f)) - Image( - painter = painterResource(id = R.drawable.ic__signup_title), - contentDescription = null, - ) - Spacer(modifier = Modifier.heightForScreenPercentage(0.01f)) - Image( - painter = painterResource(id = R.drawable.ic_signup_logotitle), - contentDescription = null, - contentScale = ContentScale.Crop, - ) - } - }, - ) + ) { innerPadding -> + Column( + modifier = Modifier + .fillMaxSize() + .background(color = backgroundColor) + .padding(innerPadding), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Spacer(modifier = Modifier.heightForScreenPercentage(0.38f)) + Image( + painter = painterResource(id = R.drawable.ic_signup_logo), + contentDescription = null, + contentScale = ContentScale.Crop, + ) + Spacer(modifier = Modifier.heightForScreenPercentage(0.02f)) + Image( + painter = painterResource(id = R.drawable.ic__signup_title), + contentDescription = null, + ) + Spacer(modifier = Modifier.heightForScreenPercentage(0.01f)) + Image( + painter = painterResource(id = R.drawable.ic_signup_logotitle), + contentDescription = null, + contentScale = ContentScale.Crop, + ) + } + } if (isLoading) { LoadingScreen() @@ -121,8 +115,8 @@ fun SignUpScreen( @Preview(showBackground = true) @Composable -fun RegisterScreenPreview() { - SignUpScreen( +fun LoginScreenPreview() { + LoginScreen( isLoading = false, onSignInClick = {}, ) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignInState.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/SignInState.kt similarity index 71% rename from app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignInState.kt rename to app/src/main/java/com/sopt/clody/presentation/ui/auth/login/SignInState.kt index f3201b61..17fe8cce 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignInState.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/SignInState.kt @@ -1,4 +1,4 @@ -package com.sopt.clody.presentation.ui.auth.signup +package com.sopt.clody.presentation.ui.auth.login import com.sopt.clody.presentation.utils.base.UiState From 7057285e708b595042f1cac50ba220aff3518651 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:13:02 +0900 Subject: [PATCH 12/41] =?UTF-8?q?[ADD/#260]=20SignUpNavigation=20=EA=B5=AC?= =?UTF-8?q?=EC=84=B1(=EC=95=BD=EA=B4=80=20=EB=B0=8F=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=ED=99=94=EB=A9=B4=20=EB=82=B4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../signup/navigation/SignUpNavigation.kt | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt new file mode 100644 index 00000000..da91b80e --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt @@ -0,0 +1,46 @@ +package com.sopt.clody.presentation.ui.auth.signup.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import com.sopt.clody.presentation.ui.auth.signup.NicknameRoute +import com.sopt.clody.presentation.ui.auth.signup.TermsOfServiceRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.termsOfServiceScreen( + navigateToNickname: () -> Unit, + navigateToLogin: () -> Unit, +) { + composable { + TermsOfServiceRoute( + navigateToNickname = navigateToNickname, + navigateToLogin = navigateToLogin, + ) + } +} + +fun NavGraphBuilder.nicknameScreen( + navigateToReminder: () -> Unit, + navigateToPrevious: () -> Unit, +) { + composable { + NicknameRoute( + navigateToReminder = navigateToReminder, + navigateToPrevious = navigateToPrevious, + ) + } +} + +fun NavHostController.navigateToNickname( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.Nickname, navOptions) +} + +fun NavController.navigateToTermsOfService( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.TermsOfService, navOptions) +} From ac64caccb742859a935cfdb7683d99849986ac23 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:14:38 +0900 Subject: [PATCH 13/41] =?UTF-8?q?[REFACTOR/#260]=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B4=80=EB=A0=A8=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nickname 및 TermsOfService 화면 내 네비게이션 함수명을 새로운 구조에 맞게 수정 --- .../ui/auth/{screen => signup}/NicknameScreen.kt | 11 +++++------ .../presentation/ui/auth/signup/SignUpViewModel.kt | 1 + .../{screen => signup}/TermsOfServiceScreen.kt | 14 +++++++------- 3 files changed, 13 insertions(+), 13 deletions(-) rename app/src/main/java/com/sopt/clody/presentation/ui/auth/{screen => signup}/NicknameScreen.kt (96%) rename app/src/main/java/com/sopt/clody/presentation/ui/auth/{screen => signup}/TermsOfServiceScreen.kt (95%) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/NicknameScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/NicknameScreen.kt similarity index 96% rename from app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/NicknameScreen.kt rename to app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/NicknameScreen.kt index b5626c91..dc17277e 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/NicknameScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/NicknameScreen.kt @@ -1,4 +1,4 @@ -package com.sopt.clody.presentation.ui.auth.screen +package com.sopt.clody.presentation.ui.auth.signup import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -41,8 +41,6 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.sopt.clody.R import com.sopt.clody.presentation.ui.auth.component.textfield.NickNameTextField -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator -import com.sopt.clody.presentation.ui.auth.signup.SignUpViewModel import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.ui.component.button.ClodyButton import com.sopt.clody.presentation.ui.component.dialog.FailureDialog @@ -52,7 +50,8 @@ import com.sopt.clody.ui.theme.ClodyTheme @Composable fun NicknameRoute( - navigator: AuthNavigator, + navigateToReminder: () -> Unit, + navigateToPrevious: () -> Unit, viewModel: SignUpViewModel = hiltViewModel(), ) { val nickname by viewModel.nickname.collectAsState() @@ -67,7 +66,7 @@ fun NicknameRoute( nickname = nickname, onNicknameChange = viewModel::setNickname, onCompleteClick = { viewModel.proceedWithSignUp(context) }, - onBackClick = { navigator.navigateBack() }, + onBackClick = navigateToPrevious, isLoading = signUpState.uiState is UiState.Loading, isValidNickname = isValidNickname, nicknameMessage = nicknameMessage, @@ -76,7 +75,7 @@ fun NicknameRoute( LaunchedEffect(signUpState) { when (val result = signUpState.uiState) { is UiState.Success -> { - navigator.navigateTimeReminder() + navigateToReminder() } is UiState.Failure -> { diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpViewModel.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpViewModel.kt index a8b29806..11d3cfe6 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpViewModel.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/SignUpViewModel.kt @@ -11,6 +11,7 @@ import com.sopt.clody.data.remote.dto.request.SignUpRequestDto import com.sopt.clody.data.remote.util.NetworkUtil import com.sopt.clody.domain.repository.AuthRepository import com.sopt.clody.domain.repository.TokenRepository +import com.sopt.clody.presentation.ui.auth.login.SignInState import com.sopt.clody.presentation.utils.base.UiState import com.sopt.clody.presentation.utils.network.ErrorMessages.FAILURE_NETWORK_MESSAGE import com.sopt.clody.presentation.utils.network.ErrorMessages.FAILURE_TEMPORARY_MESSAGE diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/TermsOfServiceScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/TermsOfServiceScreen.kt similarity index 95% rename from app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/TermsOfServiceScreen.kt rename to app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/TermsOfServiceScreen.kt index 7c1dd556..d9a5fffa 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/TermsOfServiceScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/TermsOfServiceScreen.kt @@ -1,4 +1,4 @@ -package com.sopt.clody.presentation.ui.auth.screen +package com.sopt.clody.presentation.ui.auth.signup import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image @@ -30,7 +30,6 @@ import androidx.compose.ui.unit.dp import com.sopt.clody.R import com.sopt.clody.presentation.ui.auth.component.button.NextButton import com.sopt.clody.presentation.ui.auth.component.checkbox.CustomCheckbox -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator import com.sopt.clody.presentation.ui.component.button.ClodyButton import com.sopt.clody.presentation.ui.home.calendar.component.HorizontalDivider import com.sopt.clody.presentation.ui.setting.screen.SettingOptionUrls @@ -41,27 +40,28 @@ import kotlinx.coroutines.delay @Composable fun TermsOfServiceRoute( - navigator: AuthNavigator, + navigateToNickname: () -> Unit, + navigateToLogin: () -> Unit, ) { var backPressCount by remember { mutableStateOf(0) } LaunchedEffect(backPressCount) { if (backPressCount > 0) { - delay(2000) // 2 seconds delay + delay(2000) backPressCount = 0 } } BackHandler { if (backPressCount == 1) { - navigator.navigateToSignupScreen() + navigateToLogin() } else { backPressCount++ } } TermsOfServiceScreen( - onAgreeClick = { navigator.navigateNickname() }, - onBackClick = { navigator.navigateToSignupScreen() }, + onAgreeClick = navigateToNickname, + onBackClick = navigateToLogin, ) } From 2007896764d243a79fc218f09e2530160cddddc4 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:15:49 +0900 Subject: [PATCH 14/41] =?UTF-8?q?[ADD/#260]=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../timereminder/TimeReminderNavigation.kt | 23 +++++++++++++++++++ .../auth/timereminder/TimeReminderScreen.kt | 9 ++------ 2 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderNavigation.kt new file mode 100644 index 00000000..ac9bf056 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderNavigation.kt @@ -0,0 +1,23 @@ +package com.sopt.clody.presentation.ui.auth.timereminder + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.timeReminderScreen( + navigateToGuide: () -> Unit, +) { + composable { + TimeReminderRoute( + navigateToGuide = navigateToGuide, + ) + } +} + +fun NavHostController.navigateToTimeReminder( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.TimeReminder, navOptions) +} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt index 67b254da..44726859 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/timereminder/TimeReminderScreen.kt @@ -37,7 +37,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import com.sopt.clody.R import com.sopt.clody.presentation.ui.auth.component.container.PickerBox import com.sopt.clody.presentation.ui.auth.component.timepicker.BottomSheetTimePicker -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.ui.component.button.ClodyButton import com.sopt.clody.presentation.ui.component.dialog.FailureDialog @@ -49,7 +48,7 @@ import com.sopt.clody.ui.theme.ClodyTheme @Composable fun TimeReminderRoute( - navigator: AuthNavigator, + navigateToGuide: () -> Unit, viewModel: TimeReminderViewModel = hiltViewModel(), ) { val timeReminderState by viewModel.timeReminderState.collectAsState() @@ -81,15 +80,11 @@ fun TimeReminderRoute( // 알림 권한 요청 결과에 따른 처리 LaunchedEffect(timeReminderState) { when (val result = timeReminderState) { - is TimeReminderState.Success -> { - navigator.navigateGuide() - } - + is TimeReminderState.Success -> navigateToGuide() is TimeReminderState.Failure -> { showDialog = true dialogMessage = result.error } - else -> {} } } From 979260171765f74e2bc030a553e6f027c31983ae Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:16:10 +0900 Subject: [PATCH 15/41] =?UTF-8?q?[ADD/#260]=20=EA=B0=80=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=84=B1=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/auth/{screen => guide}/GuideScreen.kt | 7 +++--- .../auth/guide/navigation/GuideNavigation.kt | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) rename app/src/main/java/com/sopt/clody/presentation/ui/auth/{screen => guide}/GuideScreen.kt (97%) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/navigation/GuideNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/GuideScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt similarity index 97% rename from app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/GuideScreen.kt rename to app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt index 7a21c233..6611a7b8 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/screen/GuideScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/GuideScreen.kt @@ -1,4 +1,4 @@ -package com.sopt.clody.presentation.ui.auth.screen +package com.sopt.clody.presentation.ui.auth.guide import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween @@ -38,7 +38,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.sopt.clody.R -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator import com.sopt.clody.presentation.ui.component.button.ClodyButton import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage import com.sopt.clody.ui.theme.ClodyTheme @@ -47,9 +46,9 @@ import kotlinx.coroutines.launch @Composable fun GuideRoute( - navigator: AuthNavigator, + navigateToHome: () -> Unit, ) { - GuideScreen(onNextButtonClick = { navigator.navigateHome() }) + GuideScreen(onNextButtonClick = navigateToHome) } @OptIn(ExperimentalFoundationApi::class) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/navigation/GuideNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/navigation/GuideNavigation.kt new file mode 100644 index 00000000..65f9590e --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/guide/navigation/GuideNavigation.kt @@ -0,0 +1,24 @@ +package com.sopt.clody.presentation.ui.auth.guide.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import com.sopt.clody.presentation.ui.auth.guide.GuideRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.guideScreen( + navigateToHome: () -> Unit, +) { + composable { + GuideRoute( + navigateToHome = navigateToHome, + ) + } +} + +fun NavController.navigateToGuide( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.Guide, navOptions) +} From ed1d67272fe98e80d76948480b5898f308a1a792 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:16:30 +0900 Subject: [PATCH 16/41] =?UTF-8?q?[DEL/#260]=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EC=A0=9C=EA=B1=B0(Auth=EB=B6=80=EB=B6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/auth/navigation/AuthNavGraph.kt | 52 ------------------- .../ui/auth/navigation/AuthNavigator.kt | 36 ------------- 2 files changed, 88 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavGraph.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavGraph.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavGraph.kt deleted file mode 100644 index 563ec440..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavGraph.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.sopt.clody.presentation.ui.auth.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import androidx.navigation.navigation -import com.sopt.clody.presentation.ui.auth.screen.GuideRoute -import com.sopt.clody.presentation.ui.auth.screen.NicknameRoute -import com.sopt.clody.presentation.ui.auth.screen.TermsOfServiceRoute -import com.sopt.clody.presentation.ui.auth.signup.SignUpRoute -import com.sopt.clody.presentation.ui.auth.timereminder.TimeReminderRoute - -fun NavGraphBuilder.registerNavGraph( - navigator: AuthNavigator, -) { - navigation(startDestination = "register", route = "register_graph") { - composable("register") { - SignUpRoute(navigator) - } - } -} - -fun NavGraphBuilder.termsOfServiceNavGraph( - navigator: AuthNavigator, -) { - composable("terms_of_service") { - TermsOfServiceRoute(navigator) - } -} - -fun NavGraphBuilder.nicknameNavGraph( - navigator: AuthNavigator, -) { - composable("nickname") { - NicknameRoute(navigator) - } -} - -fun NavGraphBuilder.guidNavGraph( - navigator: AuthNavigator, -) { - composable("guide") { - GuideRoute(navigator) - } -} - -fun NavGraphBuilder.timeReminderNavGraph( - navigator: AuthNavigator, -) { - composable("time_reminder") { - TimeReminderRoute(navigator) - } -} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavigator.kt deleted file mode 100644 index 693ceaaa..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/navigation/AuthNavigator.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.sopt.clody.presentation.ui.auth.navigation - -import androidx.navigation.NavHostController -import java.time.LocalDate - -class AuthNavigator( - val navController: NavHostController, -) { - val startDestination = "register_graph" - fun navigateTermsOfService() { - navController.navigate("terms_of_service") - } - fun navigateNickname() { - navController.navigate("nickname") - } - fun navigateGuide() { - navController.navigate("guide") - } - - fun navigateTimeReminder() { - navController.navigate("time_reminder") - } - - fun navigateHome(selectedYear: Int = LocalDate.now().year, selectedMonth: Int = LocalDate.now().monthValue) { - navController.navigate("home/$selectedYear/$selectedMonth") - } - - fun navigateBack() { - navController.navigateUp() - } - fun navigateToSignupScreen() { - navController.navigate("register") { - popUpTo(navController.graph.startDestinationId) { inclusive = true } - } - } -} From 3fd2b8c6070c6b8d728ed61e7e954951ae1a03d0 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:18:15 +0900 Subject: [PATCH 17/41] =?UTF-8?q?[ADD/#260]=20=EC=8A=A4=ED=94=8C=EB=9E=98?= =?UTF-8?q?=EC=8B=9C=20=ED=99=94=EB=A9=B4=20=EB=84=A4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20SplashRoute=EC=97=90=20=EC=A0=84=EB=8B=AC=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=9D=B8=EC=9E=90=EB=A5=BC=20=EC=B5=9C=EC=8B=A0=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/splash/SplashScreen.kt | 28 +++++++++++-------- .../ui/splash/navigation/SplashNavigation.kt | 21 ++++++++++++++ 2 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/splash/navigation/SplashNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt index 10505c0b..94fdc967 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/splash/SplashScreen.kt @@ -1,6 +1,7 @@ package com.sopt.clody.presentation.ui.splash import android.app.Activity +import android.content.Intent import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -23,15 +24,17 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.sopt.clody.R import com.sopt.clody.domain.model.AppUpdateState -import com.sopt.clody.presentation.ui.auth.navigation.AuthNavigator +import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints +import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.appupdate.AppUpdateUtils import com.sopt.clody.ui.theme.ClodyTheme import kotlinx.coroutines.delay -import java.time.LocalDate @Composable fun SplashRoute( - navigator: AuthNavigator, + startIntent: Intent, + onLoginRequired: () -> Unit, + onAlreadyLoggedIn: () -> Unit, viewModel: SplashViewModel = hiltViewModel(), ) { val isUserLoggedIn by viewModel.isUserLoggedIn.collectAsStateWithLifecycle() @@ -39,17 +42,20 @@ fun SplashRoute( val context = LocalContext.current val activity = context as Activity + // Push 클릭 추적 + LaunchedEffect(startIntent) { + if (startIntent.hasExtra("google.message_id")) { + AmplitudeUtils.trackEvent(AmplitudeConstraints.ALARM) + } + } + LaunchedEffect(isUserLoggedIn, updateState) { if (isUserLoggedIn != null && updateState == AppUpdateState.Latest) { delay(1000) - navigator.navController.navigate( - if (isUserLoggedIn == true) { - "home/${LocalDate.now().year}/${LocalDate.now().monthValue}" - } else { - "register_graph" - }, - ) { - popUpTo("splash") { inclusive = true } + if (isUserLoggedIn == true) { + onAlreadyLoggedIn() + } else { + onLoginRequired() } } } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/splash/navigation/SplashNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/splash/navigation/SplashNavigation.kt new file mode 100644 index 00000000..e6ed33a2 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/splash/navigation/SplashNavigation.kt @@ -0,0 +1,21 @@ +package com.sopt.clody.presentation.ui.splash.navigation + +import android.content.Intent +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import com.sopt.clody.presentation.ui.splash.SplashRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.splashScreen( + startIntent: Intent, + navigateToLogin: () -> Unit, + navigateToHome: () -> Unit, +) { + composable { + SplashRoute( + startIntent = startIntent, + onLoginRequired = navigateToLogin, + onAlreadyLoggedIn = navigateToHome, + ) + } +} From 12f384e2146f623bfdffb4762a6d304be7fb3061 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:18:50 +0900 Subject: [PATCH 18/41] =?UTF-8?q?[ADD/#260]=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../setting/navigation/SettingNavigation.kt | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigation.kt new file mode 100644 index 00000000..e2228bc8 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigation.kt @@ -0,0 +1,86 @@ +package com.sopt.clody.presentation.ui.setting.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute +import com.sopt.clody.presentation.ui.setting.notificationsetting.screen.NotificationSettingRoute +import com.sopt.clody.presentation.ui.setting.screen.AccountManagementRoute +import com.sopt.clody.presentation.ui.setting.screen.SettingRoute +import com.sopt.clody.presentation.ui.setting.screen.WebViewRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.settingScreen( + navigateToAccountManagement: () -> Unit, + navigateToNotification: () -> Unit, + navigateToPrevious: () -> Unit, + navigateToWebView: (String) -> Unit, +) { + composable { + SettingRoute( + navigateToAccountManagement = navigateToAccountManagement, + navigateToNotification = navigateToNotification, + navigateToPrevious = navigateToPrevious, + navigateToWebView = navigateToWebView, + ) + } +} + +fun NavGraphBuilder.accountManagementScreen( + navigateToPrevious: () -> Unit, + navigateToLogin: () -> Unit, +) { + composable { + AccountManagementRoute( + navigateToPrevious = navigateToPrevious, + navigateToLogin = navigateToLogin, + ) + } +} + +fun NavGraphBuilder.notificationSettingScreen( + navigateToPrevious: () -> Unit, +) { + composable { + NotificationSettingRoute(navigateToPrevious = navigateToPrevious) + } +} + +fun NavGraphBuilder.webViewScreen( + navigateToPrevious: () -> Unit, +) { + composable { backStackEntry -> + backStackEntry.toRoute().apply { + WebViewRoute( + encodedUrl = encodedUrl, + navigateToPrevious = navigateToPrevious, + ) + } + } +} + +fun NavController.navigateToSetting( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.Setting, navOptions) +} + +fun NavController.navigateToAccountManagement( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.AccountManagement, navOptions) +} + +fun NavController.navigateToNotificationSetting( + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.NotificationSetting, navOptions) +} + +fun NavController.navigateToWebView( + encodedUrl: String, + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.WebView(encodedUrl), navOptions) +} From 9a83ecdb741e5018602006a87428bdc8b926f656 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:19:01 +0900 Subject: [PATCH 19/41] =?UTF-8?q?[DEL/#260]=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/setting/navigation/SettingNavGraph.kt | 48 ------------------- .../ui/setting/navigation/SettingNavigator.kt | 27 ----------- 2 files changed, 75 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavGraph.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavGraph.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavGraph.kt deleted file mode 100644 index 471df2f5..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavGraph.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.sopt.clody.presentation.ui.setting.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import com.sopt.clody.presentation.ui.setting.notificationsetting.screen.NotificationSettingRoute -import com.sopt.clody.presentation.ui.setting.screen.AccountManagementRoute -import com.sopt.clody.presentation.ui.setting.screen.SettingRoute -import com.sopt.clody.presentation.ui.setting.screen.WebViewRoute - -fun NavGraphBuilder.settingNavGraph( - navigator: SettingNavigator, -) { - composable("setting") { - SettingRoute(navigator) - } -} - -fun NavGraphBuilder.accountManagementNavGraph( - navigator: SettingNavigator, -) { - composable("account_management") { - AccountManagementRoute(navigator) - } -} - -fun NavGraphBuilder.notificationSettingNavGraph( - navigator: SettingNavigator, -) { - composable("notification_setting") { - NotificationSettingRoute(navigator) - } -} - -fun NavGraphBuilder.webViewNavGraph( - navigator: SettingNavigator, -) { - composable( - route = "web_view/{encodedUrl}", - arguments = listOf(navArgument("encodedUrl") { type = NavType.StringType }), - ) { backStackEntry -> - val encodedUrl = backStackEntry.arguments?.getString("encodedUrl") - encodedUrl?.let { - WebViewRoute(navigator, it) - } - } -} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigator.kt deleted file mode 100644 index 4a317454..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/navigation/SettingNavigator.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.sopt.clody.presentation.ui.setting.navigation - -import androidx.navigation.NavHostController -import java.net.URLEncoder - -class SettingNavigator( - val navController: NavHostController, -) { - fun navigateAccountManagement() { - navController.navigate("account_management") - } - - fun navigateNotificationSetting() { - navController.navigate("notification_setting") - } - - fun navigateWebView(url: String) { - val encodedUrl = URLEncoder.encode(url, "UTF-8") - navController.navigate("web_view/$encodedUrl") - } - - fun navigateBack() { - if (navController.currentBackStackEntry?.lifecycle?.currentState == androidx.lifecycle.Lifecycle.State.RESUMED) { - navController.popBackStack() - } - } -} From bd3671260d89d20ab0344c64509fc613f8877f94 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:21:16 +0900 Subject: [PATCH 20/41] =?UTF-8?q?[REFACTOR/#260]=20=EC=84=B8=ED=8C=85?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=9D=98=20=EA=B0=81=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20=EC=A0=84=EB=8B=AC=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=20=EC=88=98=EC=A0=95(=EB=84=A4=EB=B9=84=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/NotificationSettingScreen.kt | 5 ++--- .../ui/setting/screen/AccountManagementScreen.kt | 14 +++++--------- .../ui/setting/screen/SettingScreen.kt | 14 ++++++++------ .../ui/setting/screen/WebViewScreen.kt | 5 ++--- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt index bf70651b..68848d9c 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/notificationsetting/screen/NotificationSettingScreen.kt @@ -29,7 +29,6 @@ import com.sopt.clody.presentation.ui.component.dialog.FailureDialog import com.sopt.clody.presentation.ui.component.popup.ClodyPopupBottomSheet import com.sopt.clody.presentation.ui.component.toast.ClodyToastMessage import com.sopt.clody.presentation.ui.setting.component.SettingTopAppBar -import com.sopt.clody.presentation.ui.setting.navigation.SettingNavigator import com.sopt.clody.presentation.ui.setting.notificationsetting.component.DiaryAlarmSwitch import com.sopt.clody.presentation.ui.setting.notificationsetting.component.NotificationSettingTime import com.sopt.clody.presentation.ui.setting.notificationsetting.component.NotificationSettingTimePicker @@ -38,7 +37,7 @@ import com.sopt.clody.ui.theme.ClodyTheme @Composable fun NotificationSettingRoute( - navigator: SettingNavigator, + navigateToPrevious: () -> Unit, notificationSettingViewModel: NotificationSettingViewModel = hiltViewModel(), ) { val context = LocalContext.current @@ -75,7 +74,7 @@ fun NotificationSettingRoute( updateNotificationTimePicker = { state -> showNotificationTimePicker = state }, showFailureDialog = showFailureDialog, failureDialogMessage = failureDialogMessage, - onClickBack = { navigator.navigateBack() }, + onClickBack = navigateToPrevious, onNotificationInfoAvailable = { notificationInfo = it }, ) } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt index 5f4a6adf..a7dba39a 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/AccountManagementScreen.kt @@ -30,14 +30,14 @@ import com.sopt.clody.presentation.ui.setting.component.LogoutDialog import com.sopt.clody.presentation.ui.setting.component.NicknameChangeBottomSheet import com.sopt.clody.presentation.ui.setting.component.SettingSeparateLine import com.sopt.clody.presentation.ui.setting.component.SettingTopAppBar -import com.sopt.clody.presentation.ui.setting.navigation.SettingNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.ui.theme.ClodyTheme @Composable fun AccountManagementRoute( - navigator: SettingNavigator, + navigateToPrevious: () -> Unit, + navigateToLogin: () -> Unit, accountManagementViewModel: AccountManagementViewModel = hiltViewModel(), ) { val userInfoState by accountManagementViewModel.userInfoState.collectAsState() @@ -64,17 +64,13 @@ fun AccountManagementRoute( LaunchedEffect(revokeAccountState) { if (revokeAccountState is RevokeAccountState.Success) { - navigator.navController.navigate("register_graph") { - popUpTo("home") { inclusive = true } - } + navigateToLogin() } } LaunchedEffect(logOutState) { if (logOutState is LogOutState.Success) { - navigator.navController.navigate("register_graph") { - popUpTo("home") { inclusive = true } - } + navigateToLogin() } } @@ -92,7 +88,7 @@ fun AccountManagementRoute( updateRevokeDialog = { state -> showRevokeDialog = state }, showFailureDialog = showFailureDialog, failureDialogMessage = failureDialogMessage, - onBackClick = { navigator.navigateBack() }, + onBackClick = navigateToPrevious, ) } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt index fff76bd5..13edf99e 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/SettingScreen.kt @@ -21,14 +21,16 @@ import com.sopt.clody.presentation.ui.setting.component.SettingOption import com.sopt.clody.presentation.ui.setting.component.SettingSeparateLine import com.sopt.clody.presentation.ui.setting.component.SettingTopAppBar import com.sopt.clody.presentation.ui.setting.component.SettingVersionInfo -import com.sopt.clody.presentation.ui.setting.navigation.SettingNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.ui.theme.ClodyTheme @Composable fun SettingRoute( - navigator: SettingNavigator, + navigateToAccountManagement: () -> Unit, + navigateToNotification: () -> Unit, + navigateToPrevious: () -> Unit, + navigateToWebView: (String) -> Unit, settingViewModel: SettingViewModel = hiltViewModel(), ) { val versionInfo by settingViewModel::versionInfo @@ -40,10 +42,10 @@ fun SettingRoute( SettingScreen( versionInfo = versionInfo ?: stringResource(R.string.setting_version_info_failure), - onClickBack = { navigator.navigateBack() }, - onClickAccountManagement = { navigator.navigateAccountManagement() }, - onClickNotificationSetting = { navigator.navigateNotificationSetting() }, - onClickInquiriesSuggestions = { navigator.navigateWebView(SettingOptionUrls.INQUIRIES_SUGGESTIONS_URL) }, + onClickBack = navigateToPrevious, + onClickAccountManagement = navigateToAccountManagement, + onClickNotificationSetting = navigateToNotification, + onClickInquiriesSuggestions = { navigateToWebView(SettingOptionUrls.INQUIRIES_SUGGESTIONS_URL) }, ) } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/WebViewScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/WebViewScreen.kt index 7cfed543..c2e12e04 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/WebViewScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/setting/screen/WebViewScreen.kt @@ -16,16 +16,15 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.AndroidView -import com.sopt.clody.presentation.ui.setting.navigation.SettingNavigator @Composable fun WebViewRoute( - navigator: SettingNavigator, + navigateToPrevious: () -> Unit, encodedUrl: String, ) { WebViewScreen( encodedUrl = encodedUrl, - onClickBack = { navigator.navigateBack() }, + onClickBack = navigateToPrevious, ) } From ec256f9fed8262d76ef5c0bbe7549d4b66eb19cb Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:21:57 +0900 Subject: [PATCH 21/41] =?UTF-8?q?[ADD/#260]=20=EC=9D=BC=EA=B8=B0=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/WriteDiaryNavigation.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigation.kt new file mode 100644 index 00000000..bdce0660 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigation.kt @@ -0,0 +1,37 @@ +package com.sopt.clody.presentation.ui.writediary.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute +import com.sopt.clody.presentation.ui.writediary.screen.WriteDiaryRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.writeDiaryScreen( + navigateToReplyLoading: (year: Int, month: Int, day: Int) -> Unit, + navigateToHome: (year: Int, month: Int) -> Unit, + navigateToPrevious: () -> Unit, +) { + composable { backStackEntry -> + backStackEntry.toRoute().apply { + WriteDiaryRoute( + year = year, + month = month, + date = date, + navigateToReplyLoading = navigateToReplyLoading, + navigateToHome = navigateToHome, + navigateToPrevious = navigateToPrevious, + ) + } + } +} + +fun NavController.navigateToWriteDiary( + year: Int, + month: Int, + day: Int, + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.WriteDiary(year, month, day), navOptions) +} From 85fd18b4e8c8151d78ad1659ea817b8e52aa27c2 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:22:12 +0900 Subject: [PATCH 22/41] =?UTF-8?q?[DEL/#260]=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EC=9D=BC=EA=B8=B0=EC=9E=91=EC=84=B1=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/WriteDiaryNavGraph.kt | 27 ------------------- .../navigation/WriteDiaryNavigator.kt | 17 ------------ 2 files changed, 44 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavGraph.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavGraph.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavGraph.kt deleted file mode 100644 index 26703461..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavGraph.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.sopt.clody.presentation.ui.writediary.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import com.sopt.clody.presentation.ui.writediary.screen.WriteDiaryRoute -import java.time.LocalDate - -fun NavGraphBuilder.writeDiaryNavGraph( - writeDiaryNavigator: WriteDiaryNavigator, -) { - composable( - "write_diary/{year}/{month}/{day}", - arguments = listOf( - navArgument("year") { type = NavType.IntType }, - navArgument("month") { type = NavType.IntType }, - navArgument("day") { type = NavType.IntType }, - ), - ) { backStackEntry -> - val currentDate = LocalDate.now() - val year = backStackEntry.arguments?.getInt("year") ?: currentDate.year - val month = backStackEntry.arguments?.getInt("month") ?: currentDate.monthValue - val day = backStackEntry.arguments?.getInt("day") ?: currentDate.dayOfMonth - WriteDiaryRoute(writeDiaryNavigator, year, month, day) - } -} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigator.kt deleted file mode 100644 index 9450a6cc..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/navigation/WriteDiaryNavigator.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.sopt.clody.presentation.ui.writediary.navigation - -import androidx.navigation.NavHostController - -class WriteDiaryNavigator( - val navController: NavHostController, -) { - fun navigateReplyLoading(year: Int, month: Int, day: Int, replyStatus: String = "READY_NOT_READ") { - navController.navigate("reply_loading/$year/$month/$day?from=write_diary&replyStatus=$replyStatus") - } - fun navigateHome(selectedYear: Int, selectedMonth: Int) { - navController.navigate("home/$selectedYear/$selectedMonth") - } - fun navigateBack() { - navController.navigateUp() - } -} From 158c52189fa710829c5e81cd3eb09a1a6b2f13cc Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:23:07 +0900 Subject: [PATCH 23/41] =?UTF-8?q?[REFACTOR/#260]=20=EB=84=A4=EB=B9=84=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=EC=9D=BC=EA=B8=B0=EC=9E=91=EC=84=B1=20=EB=9D=BC?= =?UTF-8?q?=EC=9A=B0=ED=8A=B8=20=EC=9D=B8=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/writediary/screen/WriteDiaryScreen.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt index 31db1810..a931a59e 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/writediary/screen/WriteDiaryScreen.kt @@ -44,7 +44,6 @@ import com.sopt.clody.presentation.ui.writediary.component.bottomsheet.DeleteWri import com.sopt.clody.presentation.ui.writediary.component.text.DiaryTitleText import com.sopt.clody.presentation.ui.writediary.component.textfield.WriteDiaryTextField import com.sopt.clody.presentation.ui.writediary.component.tooltip.TooltipIcon -import com.sopt.clody.presentation.ui.writediary.navigation.WriteDiaryNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.getDayOfWeek @@ -53,10 +52,12 @@ import com.sopt.clody.ui.theme.ClodyTheme @Composable fun WriteDiaryRoute( - navigator: WriteDiaryNavigator, year: Int, month: Int, - day: Int, + date: Int, + navigateToReplyLoading: (year: Int, month: Int, date: Int) -> Unit, + navigateToHome: (year: Int, month: Int) -> Unit, + navigateToPrevious: () -> Unit, viewModel: WriteDiaryViewModel = hiltViewModel(), ) { val entries = viewModel.entries @@ -76,8 +77,8 @@ fun WriteDiaryRoute( LaunchedEffect(writeDiaryState) { when (writeDiaryState) { - is WriteDiaryState.Success -> navigator.navigateReplyLoading(year, month, day) - is WriteDiaryState.NoReply -> navigator.navigateHome(year, month) + is WriteDiaryState.Success -> navigateToReplyLoading(year, month, date) + is WriteDiaryState.NoReply -> navigateToHome(year, month) is WriteDiaryState.Failure -> viewModel.updateShowDialog(false) else -> {} } @@ -96,12 +97,12 @@ fun WriteDiaryRoute( showDialog = showDialog, onClickBack = { AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.WRITING_DIARY_BACK) - navigator.navigateHome(year, month) + navigateToPrevious() }, - onCompleteClick = { viewModel.writeDiary(year, month, day, entries) }, + onCompleteClick = { viewModel.writeDiary(year, month, date, entries) }, year = year, month = month, - day = day, + day = date, ) if (showFailureDialog) { From 7354894fa680528a827642586b72daa1a6e55fa3 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:23:35 +0900 Subject: [PATCH 24/41] =?UTF-8?q?[ADD/#260]=20=EC=9D=BC=EA=B8=B0=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=EB=A1=9C=EB=94=A9=20=EB=84=A4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/ReplyLoadingNavigation.kt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt new file mode 100644 index 00000000..e793b3c0 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt @@ -0,0 +1,45 @@ +package com.sopt.clody.presentation.ui.replyloading.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute +import com.sopt.clody.presentation.ui.replyloading.screen.ReplyLoadingRoute +import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.replyLoadingScreen( + navigateToReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, + navigateToHome: (year: Int, month: Int, day: Int) -> Unit, + navigateToDiaryList: (Int, Int) -> Unit, +) { + composable { backStackEntry -> + backStackEntry.toRoute().apply { + ReplyLoadingRoute( + year = year, + month = month, + date = date, + from = from, + replyStatus = replyStatus, + navigateToReplyDiary = navigateToReplyDiary, + navigateToHome = navigateToHome, + navigateToDiaryList = navigateToDiaryList, + ) + } + } +} + +fun NavController.navigateToReplyLoading( + year: Int, + month: Int, + day: Int, + from: Route.ReplyLoading.ReplyLoadingFrom = Route.ReplyLoading.ReplyLoadingFrom.HOME, + replyStatus: ReplyStatus = ReplyStatus.UNREADY, + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate( + Route.ReplyLoading(year, month, day, from, replyStatus), + navOptions, + ) +} From e12a55627251acc627fcf933792b6bd3880215f1 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:23:44 +0900 Subject: [PATCH 25/41] =?UTF-8?q?[DEL/#260]=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EC=9D=BC=EA=B8=B0=EC=9D=91=EB=8B=B5=EB=A1=9C=EB=94=A9=20?= =?UTF-8?q?=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/ReplyLoadingNavGraph.kt | 49 ------------------- .../navigation/ReplyLoadingNavigator.kt | 47 ------------------ 2 files changed, 96 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavGraph.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavGraph.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavGraph.kt deleted file mode 100644 index 243d1d6e..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavGraph.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.sopt.clody.presentation.ui.replyloading.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import com.sopt.clody.presentation.ui.replydiary.ReplyDiaryRoute -import com.sopt.clody.presentation.ui.replydiary.navigation.ReplyDiaryNavigator -import com.sopt.clody.presentation.ui.replyloading.screen.ReplyLoadingRoute -import java.time.LocalDate - -fun NavGraphBuilder.replyLoadingNavGraph( - replyLoadingNavigator: ReplyLoadingNavigator, - replyDiaryNavigator: ReplyDiaryNavigator, -) { - val currentDate = LocalDate.now() - composable( - "reply_loading/{year}/{month}/{day}?from={from}&replyStatus={replyStatus}", - arguments = listOf( - navArgument("year") { type = NavType.IntType }, - navArgument("month") { type = NavType.IntType }, - navArgument("day") { type = NavType.IntType }, - navArgument("from") { defaultValue = "home" }, - navArgument("replyStatus") { defaultValue = "UNREADY" }, - ), - ) { backStackEntry -> - val year = backStackEntry.arguments?.getInt("year") ?: currentDate.year - val month = backStackEntry.arguments?.getInt("month") ?: currentDate.monthValue - val day = backStackEntry.arguments?.getInt("day") ?: currentDate.dayOfMonth - val from = backStackEntry.arguments?.getString("from") ?: "home" - val replyStatus = backStackEntry.arguments?.getString("replyStatus") ?: "UNREADY" - ReplyLoadingRoute(replyLoadingNavigator, year, month, day, from, replyStatus) - } - composable( - "reply_diary/{year}/{month}/{day}?replyStatus={replyStatus}", - arguments = listOf( - navArgument("year") { type = NavType.IntType }, - navArgument("month") { type = NavType.IntType }, - navArgument("day") { type = NavType.IntType }, - navArgument("replyStatus") { defaultValue = "UNREADY" }, - ), - ) { backStackEntry -> - val year = backStackEntry.arguments?.getInt("year") ?: currentDate.year - val month = backStackEntry.arguments?.getInt("month") ?: currentDate.monthValue - val day = backStackEntry.arguments?.getInt("day") ?: currentDate.dayOfMonth - val replyStatus = backStackEntry.arguments?.getString("replyStatus") ?: "UNREADY" - ReplyDiaryRoute(replyDiaryNavigator, year, month, day, replyStatus) - } -} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigator.kt deleted file mode 100644 index 1653ca08..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigator.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.sopt.clody.presentation.ui.replyloading.navigation - -import androidx.navigation.NavHostController - -class ReplyLoadingNavigator( - private val navController: NavHostController, -) { - fun navigateHome(selectedYear: Int, selectedMonth: Int) { - navController.navigate("home/$selectedYear/$selectedMonth") { - popUpTo(navController.graph.startDestinationId) { - inclusive = true - } - } - } - - fun navigateReplyDiary(year: Int, month: Int, day: Int, replyStatus: String) { - navController.navigate("reply_diary/$year/$month/$day?replyStatus=$replyStatus") - } - - private fun navigateWithPopUp(route: String, inclusive: Boolean = false) { - navController.navigate(route) { - popUpTo(navController.graph.startDestinationId) { - this.inclusive = inclusive - } - } - } - - fun navigateBack(selectedYear: Int, selectedMonth: Int, from: String) { - when (from) { - "diary_list" -> { - navigateWithPopUp("diary_list/$selectedYear/$selectedMonth") - } - - "home" -> { - navigateWithPopUp("home/$selectedYear/$selectedMonth") - } - - "write_diary" -> { - navigateWithPopUp("home/$selectedYear/$selectedMonth") // 예외적으로 홈으로 - } - - else -> { - navController.navigateUp() - } - } - } -} From 6f045a4f8659253ff2f282dd4227cecb89872967 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:24:40 +0900 Subject: [PATCH 26/41] =?UTF-8?q?[ADD/#260]=20=EB=84=A4=EB=B9=84=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=EC=9D=BC=EA=B8=B0=EC=9D=91=EB=8B=B5=EB=A1=9C?= =?UTF-8?q?=EB=94=A9=20=ED=99=94=EB=A9=B4=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../replyloading/screen/ReplyLoadingScreen.kt | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt index 400dfb9c..f9d0e939 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt @@ -43,22 +43,25 @@ import com.sopt.clody.presentation.ui.component.button.ClodyButton import com.sopt.clody.presentation.ui.component.toast.ClodyToastMessage import com.sopt.clody.presentation.ui.replyloading.component.LottieAnimation import com.sopt.clody.presentation.ui.replyloading.component.QuickReplyAdButton -import com.sopt.clody.presentation.ui.replyloading.navigation.ReplyLoadingNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage +import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme import kotlinx.coroutines.delay import java.time.LocalDateTime @Composable fun ReplyLoadingRoute( - navigator: ReplyLoadingNavigator, year: Int, month: Int, - day: Int, - from: String, - replyStatus: String, + date: Int, + from: Route.ReplyLoading.ReplyLoadingFrom, + replyStatus: ReplyStatus, + navigateToReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, + navigateToHome: (Int, Int, Int) -> Unit, + navigateToDiaryList: (Int, Int) -> Unit, viewModel: ReplyLoadingViewModel = hiltViewModel(), ) { val replyLoadingState by viewModel.replyLoadingState.collectAsState() @@ -71,16 +74,24 @@ fun ReplyLoadingRoute( LaunchedEffect(Unit) { AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.WAITING_DIARY) - viewModel.getDiaryTime(year, month, day) + viewModel.getDiaryTime(year, month, date) } var backPressedTime by remember { mutableStateOf(0L) } val backPressThreshold = 2000 + val handleBackNavigation = { + when (from) { + Route.ReplyLoading.ReplyLoadingFrom.HOME -> navigateToHome(year, month, date) + + Route.ReplyLoading.ReplyLoadingFrom.DIARY_LIST -> navigateToDiaryList(year, month) + } + } + BackHandler { val currentTime = System.currentTimeMillis() if (currentTime - backPressedTime <= backPressThreshold) { - navigator.navigateHome(year, month) + handleBackNavigation() } else { backPressedTime = currentTime } @@ -94,8 +105,10 @@ fun ReplyLoadingRoute( is ReplyLoadingState.Success -> { val successState = replyLoadingState as ReplyLoadingState.Success ReplyLoadingScreen( - onCompleteClick = { navigator.navigateReplyDiary(year, month, day, replyStatus) }, - onBackClick = { navigator.navigateBack(year, month, from) }, + onCompleteClick = { + navigateToReplyDiary(year, month, date, replyStatus) + }, + onBackClick = { handleBackNavigation() }, replyLoadingState = successState, onShowAdClick = { viewModel.loadAndShowRewardedAd(activity) From d30643b1674e117f8ef02a78843539090d7acfb0 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:25:52 +0900 Subject: [PATCH 27/41] =?UTF-8?q?[REFACTOR/#260]=20=EC=9D=BC=EA=B8=B0?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../navigation/ReplyDiaryNavigation.kt | 36 +++++++++++++++++++ .../navigation/ReplyDiaryNavigator.kt | 19 ---------- 2 files changed, 36 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt new file mode 100644 index 00000000..e06469bb --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt @@ -0,0 +1,36 @@ +package com.sopt.clody.presentation.ui.replydiary.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute +import com.sopt.clody.presentation.ui.replydiary.ReplyDiaryRoute +import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.replyDiaryScreen( + navigateToHome: (year: Int, month: Int, date: Int) -> Unit, +) { + composable { backStackEntry -> + backStackEntry.toRoute().apply { + ReplyDiaryRoute( + year = year, + month = month, + date = date, + replyStatus = replyStatus, + navigateToHome = navigateToHome, + ) + } + } +} + +fun NavController.navigateToReplyDiary( + year: Int, + month: Int, + day: Int, + replyStatus: ReplyStatus = ReplyStatus.UNREADY, + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.ReplyDiary(year, month, day, replyStatus), navOptions) +} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigator.kt deleted file mode 100644 index 419dd1af..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigator.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.sopt.clody.presentation.ui.replydiary.navigation - -import androidx.navigation.NavHostController - -class ReplyDiaryNavigator( - val navController: NavHostController, -) { - fun navigateHome(selectedYear: Int, selectedMonth: Int) { - navController.navigate("home/$selectedYear/$selectedMonth") { - popUpTo(navController.graph.startDestinationId) { - inclusive = true - } - } - } - - fun navigateBack() { - navController.navigateUp() - } -} From 6fa98c99a897d1db8638386d09c043dcb77cb458 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:26:10 +0900 Subject: [PATCH 28/41] =?UTF-8?q?[REFACTOR/#260]=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=8A=B8=20=EC=9D=B8=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/replydiary/ReplyDiaryScreen.kt | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt index f68ddafb..b83c8a01 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt @@ -37,19 +37,19 @@ import androidx.hilt.navigation.compose.hiltViewModel import com.sopt.clody.R import com.sopt.clody.presentation.ui.component.FailureScreen import com.sopt.clody.presentation.ui.component.LoadingScreen -import com.sopt.clody.presentation.ui.replydiary.navigation.ReplyDiaryNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage +import com.sopt.clody.presentation.utils.navigation.ReplyStatus import com.sopt.clody.ui.theme.ClodyTheme @Composable fun ReplyDiaryRoute( - navigator: ReplyDiaryNavigator, year: Int, month: Int, date: Int, - replyStatus: String, + replyStatus: ReplyStatus, + navigateToHome: (year: Int, month: Int, date: Int) -> Unit, viewModel: ReplyDiaryViewModel = hiltViewModel(), ) { val replyDiaryState by viewModel.replyDiaryState.collectAsState() @@ -65,7 +65,7 @@ fun ReplyDiaryRoute( BackHandler { val currentTime = System.currentTimeMillis() if (currentTime - backPressedTime <= backPressThreshold) { - navigator.navigateHome(year, month) + navigateToHome(year, month, date) } else { backPressedTime = currentTime } @@ -79,7 +79,7 @@ fun ReplyDiaryRoute( is ReplyDiaryState.Success -> { val successState = replyDiaryState as ReplyDiaryState.Success ReplyDiaryScreen( - onClickBack = { navigator.navigateHome(year, month) }, + navigateToHome = { navigateToHome(year, month, date) }, replyStatus = replyStatus, replyDiaryState = successState, ) @@ -99,18 +99,17 @@ fun ReplyDiaryRoute( @OptIn(ExperimentalMaterial3Api::class) @Composable fun ReplyDiaryScreen( - onClickBack: () -> Unit, - replyStatus: String, + navigateToHome: () -> Unit, + replyStatus: ReplyStatus, replyDiaryState: ReplyDiaryState.Success, ) { var showDialog by remember { mutableStateOf(false) } LaunchedEffect(replyDiaryState) { - if (replyStatus == "READY_NOT_READ") { + if (replyStatus == ReplyStatus.READY_NOT_READ) { showDialog = true } } - Scaffold( topBar = { val month = replyDiaryState.month @@ -125,7 +124,7 @@ fun ReplyDiaryScreen( ) }, navigationIcon = { - IconButton(onClick = onClickBack) { + IconButton(onClick = navigateToHome) { Image( painterResource(id = R.drawable.ic_nickname_back), contentDescription = "back", From f470601d8757a6c25153325bd36a4673e865f4ce Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:26:28 +0900 Subject: [PATCH 29/41] =?UTF-8?q?[REFACTOR/#260]=20=ED=99=88=20=EB=84=A4?= =?UTF-8?q?=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=EC=A1=B0=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 --- .../ui/home/navigation/HomeNavGraph.kt | 29 ------------ .../ui/home/navigation/HomeNavigation.kt | 47 +++++++++++++++++++ .../ui/home/navigation/HomeNavigator.kt | 27 ----------- 3 files changed, 47 insertions(+), 56 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavGraph.kt create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavGraph.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavGraph.kt deleted file mode 100644 index 3ef284b8..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavGraph.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sopt.clody.presentation.ui.home.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import com.sopt.clody.presentation.ui.home.screen.HomeRoute -import java.time.LocalDate - -fun NavGraphBuilder.homeNavGraph( - navigator: HomeNavigator, -) { - composable( - route = "home/{selectedYear}/{selectedMonth}", - arguments = listOf( - navArgument("selectedYear") { type = NavType.IntType }, - navArgument("selectedMonth") { type = NavType.IntType }, - ), - ) { backStackEntry -> - val currentDate = LocalDate.now() - val selectedYear = backStackEntry.arguments?.getInt("selectedYear") ?: currentDate.year - val selectedMonth = backStackEntry.arguments?.getInt("selectedMonth") ?: currentDate.monthValue - HomeRoute( - navigator = navigator, - selectedYear = selectedYear, - selectedMonth = selectedMonth, - ) - } -} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt new file mode 100644 index 00000000..1d002b15 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt @@ -0,0 +1,47 @@ +package com.sopt.clody.presentation.ui.home.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptionsBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute +import com.sopt.clody.presentation.ui.home.screen.HomeRoute +import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.presentation.utils.navigation.Route +import java.time.LocalDate + +fun NavGraphBuilder.homeScreen( + navigateToDiaryList: (year: Int, month: Int) -> Unit, + navigateToSetting: () -> Unit, + navigateToWriteDiary: (year: Int, month: Int, date: Int) -> Unit, + navigateToReplyLoading: ( + year: Int, + month: Int, + date: Int, + from: Route.ReplyLoading.ReplyLoadingFrom, + replyStatus: ReplyStatus, + ) -> Unit, +) { + composable { backStackEntry -> + backStackEntry.toRoute().apply { + HomeRoute( + selectedYear = selectedYear, + selectedMonth = selectedMonth, + selectedDay = selectedDay, + navigateToDiaryList = navigateToDiaryList, + navigateToSetting = navigateToSetting, + navigateToWriteDiary = navigateToWriteDiary, + navigateToReplyLoading = navigateToReplyLoading, + ) + } + } +} + +fun NavController.navigateToHome( + selectedYear: Int = LocalDate.now().year, + selectedMonth: Int = LocalDate.now().monthValue, + selectedDay: Int? = LocalDate.now().dayOfMonth, + navOptions: NavOptionsBuilder.() -> Unit = {}, +) { + navigate(Route.Home(selectedYear, selectedMonth, selectedDay), navOptions) +} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigator.kt deleted file mode 100644 index 80428b26..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigator.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.sopt.clody.presentation.ui.home.navigation - -import androidx.navigation.NavController - -class HomeNavigator( - val navController: NavController, -) { - fun navigateDiaryList(selectedYear: Int, selectedMonth: Int) { - navController.navigate("diary_list/$selectedYear/$selectedMonth") - } - - fun navigateSetting() { - navController.navigate("setting") - } - - fun navigateWriteDiary(year: Int, month: Int, day: Int) { - navController.navigate("write_diary/$year/$month/$day") - } - - fun navigateReplyLoading(year: Int, month: Int, day: Int, replyStatus: String) { - navController.navigate("reply_loading/$year/$month/$day?from=home&replyStatus=$replyStatus") - } - - fun navigateBack() { - navController.navigateUp() - } -} From 799bbd84a4d36c8fa51151b9021fd66dc35610a9 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:27:11 +0900 Subject: [PATCH 30/41] =?UTF-8?q?[REFACTOR/#260]=20=ED=99=88=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/home/screen/HomeScreen.kt | 62 +++++++++++++------ 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt index 1e9ef2c9..1271ae2a 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt @@ -29,20 +29,33 @@ import com.sopt.clody.presentation.ui.component.timepicker.YearMonthPicker import com.sopt.clody.presentation.ui.home.component.DiaryStateButton import com.sopt.clody.presentation.ui.home.component.HomeTopAppBar import com.sopt.clody.presentation.ui.home.model.DiaryDateData -import com.sopt.clody.presentation.ui.home.navigation.HomeNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils +import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme +import java.time.LocalDate @Composable fun HomeRoute( - navigator: HomeNavigator, - homeViewModel: HomeViewModel = hiltViewModel(), selectedYear: Int, selectedMonth: Int, + selectedDay: Int?, + navigateToDiaryList: (year: Int, month: Int) -> Unit, + navigateToSetting: () -> Unit, + navigateToWriteDiary: (year: Int, month: Int, date: Int) -> Unit, + navigateToReplyLoading: ( + year: Int, + month: Int, + date: Int, + from: Route.ReplyLoading.ReplyLoadingFrom, + replyStatus: ReplyStatus, + ) -> Unit, + homeViewModel: HomeViewModel = hiltViewModel(), ) { val calendarState by homeViewModel.calendarState.collectAsStateWithLifecycle() val dailyDiariesState by homeViewModel.dailyDiariesState.collectAsStateWithLifecycle() + val replyStatus by homeViewModel.replyStatus.collectAsStateWithLifecycle() val isError = calendarState is CalendarState.Error || dailyDiariesState is DailyDiariesState.Error val errorMessage = when { @@ -55,10 +68,17 @@ fun HomeRoute( AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.HOME) } - LaunchedEffect(selectedYear, selectedMonth) { + LaunchedEffect(selectedYear, selectedMonth, selectedDay) { homeViewModel.refreshCalendarDataCalendarData(selectedYear, selectedMonth) - val selectedDate = homeViewModel.selectedDate.value - homeViewModel.loadDailyDiariesData(selectedYear, selectedMonth, selectedDate.dayOfMonth) + + if (selectedDay != null) { + homeViewModel.updateSelectedDate(LocalDate.of(selectedYear, selectedMonth, selectedDay)) + homeViewModel.loadDailyDiariesData(selectedYear, selectedMonth, selectedDay) + } else { + val today = LocalDate.now() + homeViewModel.updateSelectedDate(today) + homeViewModel.loadDailyDiariesData(today.year, today.monthValue, today.dayOfMonth) + } } if (isError) { @@ -73,20 +93,21 @@ fun HomeRoute( } else { HomeScreen( homeViewModel = homeViewModel, - onClickDiaryList = { selectedYearFromHome, selectedMonthFromHome -> - navigator.navigateDiaryList( - selectedYearFromHome, - selectedMonthFromHome, - ) - }, - onClickSetting = { navigator.navigateSetting() }, + onClickDiaryList = navigateToDiaryList, + onClickSetting = navigateToSetting, onClickWriteDiary = { year, month, day -> AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.HOME_WRITING_DIARY) - navigator.navigateWriteDiary(year, month, day) + navigateToWriteDiary(year, month, day) }, - onClickReplyDiary = { year, month, day, replyStatus -> + onClickReplyDiary = { year, month, day, _ -> AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.HOME_REPLY) - navigator.navigateReplyLoading(year, month, day, replyStatus) + navigateToReplyLoading( + year, + month, + day, + Route.ReplyLoading.ReplyLoadingFrom.HOME, + ReplyStatus.valueOf(replyStatus), + ) }, selectedYear = selectedYear, selectedMonth = selectedMonth, @@ -100,7 +121,12 @@ fun HomeScreen( onClickDiaryList: (Int, Int) -> Unit, onClickSetting: () -> Unit, onClickWriteDiary: (Int, Int, Int) -> Unit, - onClickReplyDiary: (Int, Int, Int, String) -> Unit, + onClickReplyDiary: ( + year: Int, + month: Int, + date: Int, + replyStatus: Route.ReplyLoading.ReplyLoadingFrom, + ) -> Unit, selectedYear: Int, selectedMonth: Int, ) { @@ -218,7 +244,7 @@ fun HomeScreen( selectedDate.year, selectedDate.monthValue, selectedDate.dayOfMonth, - replyStatus, + Route.ReplyLoading.ReplyLoadingFrom.HOME, ) }, ) From 633ad43e0b87874eb8bd8de6556d8e36a2150cf1 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:27:24 +0900 Subject: [PATCH 31/41] =?UTF-8?q?[REFACTOR/#260]=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=84=A4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diarylist/navigation/DiaryListNavGraph.kt | 29 ----------------- .../navigation/DiaryListNavigation.kt | 31 +++++++++++++++++++ .../navigation/DiaryListNavigator.kt | 19 ------------ 3 files changed, 31 insertions(+), 48 deletions(-) delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavGraph.kt create mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt delete mode 100644 app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigator.kt diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavGraph.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavGraph.kt deleted file mode 100644 index 46ef810d..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavGraph.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sopt.clody.presentation.ui.diarylist.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListRoute -import java.time.LocalDate - -fun NavGraphBuilder.diaryListNavGraph( - diaryListNavigator: DiaryListNavigator, -) { - composable( - route = "diary_list/{selectedYearFromHome}/{selectedMonthFromHome}", - arguments = listOf( - navArgument("selectedYearFromHome") { type = NavType.IntType }, - navArgument("selectedMonthFromHome") { type = NavType.IntType }, - ), - ) { backStackEntry -> - val currentDate = LocalDate.now() - val selectedYearFromHome = backStackEntry.arguments?.getInt("selectedYearFromHome") ?: currentDate.year - val selectedMonthFromHome = backStackEntry.arguments?.getInt("selectedMonthFromHome") ?: currentDate.monthValue - DiaryListRoute( - navigator = diaryListNavigator, - selectedYearFromHome = selectedYearFromHome, - selectedMonthFromHome = selectedMonthFromHome, - ) - } -} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt new file mode 100644 index 00000000..add30750 --- /dev/null +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt @@ -0,0 +1,31 @@ +package com.sopt.clody.presentation.ui.diarylist.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import androidx.navigation.toRoute +import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListRoute +import com.sopt.clody.presentation.utils.navigation.Route + +fun NavGraphBuilder.diaryListScreen( + navigateToHome: (year: Int, month: Int) -> Unit, + navigateToReplyLoading: (year: Int, month: Int, date: Int, replyStatus: Route.ReplyLoading.ReplyLoadingFrom) -> Unit, +) { + composable { backStackEntry -> + backStackEntry.toRoute().apply { + DiaryListRoute( + selectedYearFromHome = selectedYearFromHome, + selectedMonthFromHome = selectedMonthFromHome, + navigateToHome = navigateToHome, + navigateToReplyLoading = navigateToReplyLoading, + ) + } + } +} + +fun NavController.navigateToDiaryList( + selectedYearFromHome: Int, + selectedMonthFromHome: Int, +) { + navigate(Route.DiaryList(selectedYearFromHome, selectedMonthFromHome)) +} diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigator.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigator.kt deleted file mode 100644 index c3546037..00000000 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigator.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.sopt.clody.presentation.ui.diarylist.navigation - -import androidx.navigation.NavController - -class DiaryListNavigator( - val navController: NavController, -) { - fun navigateHome(selectedYear: Int, selectedMonth: Int) { - navController.navigate("home/$selectedYear/$selectedMonth") - } - - fun navigateReplyLoading(year: Int, month: Int, day: Int, replyStatus: String) { - navController.navigate("reply_loading/$year/$month/$day?from=diary_list&replyStatus=$replyStatus") - } - - fun navigateBack() { - navController.navigateUp() - } -} From a565415e0bc580ae843b0b4096ab49c799a95d8f Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:27:57 +0900 Subject: [PATCH 32/41] =?UTF-8?q?[REFACTOR/#260]=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=9D=BC=EA=B8=B0?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/diarylist/screen/DiaryListScreen.kt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt index 086e56a0..8e35a464 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt @@ -22,17 +22,18 @@ import com.sopt.clody.presentation.ui.component.timepicker.YearMonthPicker import com.sopt.clody.presentation.ui.diarylist.component.DiaryListTopAppBar import com.sopt.clody.presentation.ui.diarylist.component.EmptyDiaryList import com.sopt.clody.presentation.ui.diarylist.component.MonthlyDiaryList -import com.sopt.clody.presentation.ui.diarylist.navigation.DiaryListNavigator import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils +import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme @Composable fun DiaryListRoute( - navigator: DiaryListNavigator, - diaryListViewModel: DiaryListViewModel = hiltViewModel(), selectedYearFromHome: Int, selectedMonthFromHome: Int, + navigateToHome: (Int, Int) -> Unit, + navigateToReplyLoading: (year: Int, month: Int, date: Int, replyStatus: Route.ReplyLoading.ReplyLoadingFrom) -> Unit, + diaryListViewModel: DiaryListViewModel = hiltViewModel(), ) { var selectedYearInDiaryList by remember { mutableIntStateOf(selectedYearFromHome) } var selectedMonthInDiaryList by remember { mutableIntStateOf(selectedMonthFromHome) } @@ -81,10 +82,11 @@ fun DiaryListRoute( }, dismissDiaryDeleteDialog = { diaryDeleteDialogState = false }, onClickDiaryDelete = { year, month, day -> diaryListViewModel.deleteDailyDiary(year, month, day) }, - onClickCalendar = { navigator.navigateHome(selectedYearInDiaryList, selectedMonthInDiaryList) }, - onClickReplyDiary = { year, month, day, replyStatus -> - navigator.navigateReplyLoading(year, month, day, replyStatus) - AmplitudeUtils.trackEvent(eventName = AmplitudeConstraints.LIST_REPLY) + onClickCalendar = { + navigateToHome(selectedYearInDiaryList, selectedMonthInDiaryList) + }, + onClickReplyDiary = { year, month, day, _ -> + navigateToReplyLoading(year, month, day, Route.ReplyLoading.ReplyLoadingFrom.DIARY_LIST) }, ) } From 4e9df39144696f8a3b2f45192cd41dd6522f22e1 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 7 May 2025 01:28:18 +0900 Subject: [PATCH 33/41] =?UTF-8?q?[MOVE/#260]=20=EB=84=A4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=20=ED=99=94=EB=A9=B4=20=EC=9E=84?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt index a8c43e60..cc0ef3c3 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt @@ -7,8 +7,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost -import com.sopt.clody.presentation.ui.auth.guide.guideScreen -import com.sopt.clody.presentation.ui.auth.guide.navigateToGuide +import com.sopt.clody.presentation.ui.auth.guide.navigation.guideScreen +import com.sopt.clody.presentation.ui.auth.guide.navigation.navigateToGuide import com.sopt.clody.presentation.ui.auth.login.navigation.loginScreen import com.sopt.clody.presentation.ui.auth.login.navigation.navigateToLogin import com.sopt.clody.presentation.ui.auth.signup.navigation.navigateToNickname From 7045a8e26fd11e58553b0e3571e458ee405e2af5 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Fri, 23 May 2025 18:12:04 +0900 Subject: [PATCH 34/41] =?UTF-8?q?[REFACTOR/#260]=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=ED=99=94=EB=A9=B4=20=EB=82=B4=20=EC=95=BD=EA=B4=80?= =?UTF-8?q?=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=20=EC=9D=B8?= =?UTF-8?q?=EC=9E=90=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt | 4 ++-- .../presentation/ui/auth/login/navigation/LoginNavigation.kt | 4 ++-- .../java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt index 96542b5f..edd916bd 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/LoginScreen.kt @@ -33,7 +33,7 @@ import com.sopt.clody.ui.theme.ClodyTheme @Composable fun LoginRoute( - navigateToTerms: () -> Unit, + navigateToTermsOfService: () -> Unit, navigateToHome: () -> Unit, ) { val viewModel: SignUpViewModel = hiltViewModel() @@ -43,7 +43,7 @@ fun LoginRoute( LaunchedEffect(signInState.uiState) { when (signInState.uiState) { is UiState.Success -> navigateToHome() - is UiState.Failure -> navigateToTerms() + is UiState.Failure -> navigateToTermsOfService() else -> Unit } } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt index 9d728d7a..2eff62a1 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/login/navigation/LoginNavigation.kt @@ -8,12 +8,12 @@ import com.sopt.clody.presentation.ui.auth.login.LoginRoute import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.loginScreen( - navigateToTerms: () -> Unit, + navigateToTermsOfService: () -> Unit, navigateToHome: () -> Unit, ) { composable { LoginRoute( - navigateToTerms = navigateToTerms, + navigateToTermsOfService = navigateToTermsOfService, navigateToHome = navigateToHome, ) } diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt index cc0ef3c3..68f732c7 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/main/ClodyNavHost.kt @@ -69,7 +69,7 @@ fun ClodyNavHost( ) loginScreen( - navigateToTerms = navController::navigateToTermsOfService, + navigateToTermsOfService = navController::navigateToTermsOfService, navigateToHome = navController::navigateToHome, ) termsOfServiceScreen( From af4805688b1f83e1c106bd03c76b6c78e6e2d3b9 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Fri, 23 May 2025 18:12:12 +0900 Subject: [PATCH 35/41] =?UTF-8?q?[REFACTOR/#260]=20SignUpNavigation?= =?UTF-8?q?=EC=97=90=EC=84=9C=20NavHostController=EB=A5=BC=20NavController?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/auth/signup/navigation/SignUpNavigation.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt index da91b80e..35b29501 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/auth/signup/navigation/SignUpNavigation.kt @@ -2,7 +2,6 @@ package com.sopt.clody.presentation.ui.auth.signup.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavHostController import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import com.sopt.clody.presentation.ui.auth.signup.NicknameRoute @@ -33,7 +32,7 @@ fun NavGraphBuilder.nicknameScreen( } } -fun NavHostController.navigateToNickname( +fun NavController.navigateToNickname( navOptions: NavOptionsBuilder.() -> Unit = {}, ) { navigate(Route.Nickname, navOptions) From 1166d54d61d8b521503b63333db1c37dfe778e53 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Fri, 23 May 2025 18:13:29 +0900 Subject: [PATCH 36/41] =?UTF-8?q?[REFACTOR/#260]=20=EB=82=B4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EC=9D=B4=EB=A6=84=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/diarylist/screen/DiaryListScreen.kt | 2 +- .../ui/replyloading/navigation/ReplyLoadingNavigation.kt | 4 ++-- .../ui/replyloading/screen/ReplyLoadingScreen.kt | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt index 8e35a464..6522156d 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt @@ -31,7 +31,7 @@ import com.sopt.clody.ui.theme.ClodyTheme fun DiaryListRoute( selectedYearFromHome: Int, selectedMonthFromHome: Int, - navigateToHome: (Int, Int) -> Unit, + navigateToHome: (year: Int, month: Int) -> Unit, navigateToReplyLoading: (year: Int, month: Int, date: Int, replyStatus: Route.ReplyLoading.ReplyLoadingFrom) -> Unit, diaryListViewModel: DiaryListViewModel = hiltViewModel(), ) { diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt index e793b3c0..aa42a929 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt @@ -10,9 +10,9 @@ import com.sopt.clody.presentation.utils.navigation.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.replyLoadingScreen( - navigateToReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, + navigateToReplyDiary: (year: Int, month: Int, day: Int, status: ReplyStatus) -> Unit, navigateToHome: (year: Int, month: Int, day: Int) -> Unit, - navigateToDiaryList: (Int, Int) -> Unit, + navigateToDiaryList: (year: Int, month: Int) -> Unit, ) { composable { backStackEntry -> backStackEntry.toRoute().apply { diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt index f9d0e939..a3fd0b64 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt @@ -59,9 +59,9 @@ fun ReplyLoadingRoute( date: Int, from: Route.ReplyLoading.ReplyLoadingFrom, replyStatus: ReplyStatus, - navigateToReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, - navigateToHome: (Int, Int, Int) -> Unit, - navigateToDiaryList: (Int, Int) -> Unit, + navigateToReplyDiary: (year: Int, month: Int, day: Int, status: ReplyStatus) -> Unit, + navigateToHome: (year: Int, month: Int, day: Int) -> Unit, + navigateToDiaryList: (year: Int, month: Int) -> Unit, viewModel: ReplyLoadingViewModel = hiltViewModel(), ) { val replyLoadingState by viewModel.replyLoadingState.collectAsState() From 308a9bb5365481f94dab34ba9f85af93b671aae9 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Fri, 23 May 2025 18:13:51 +0900 Subject: [PATCH 37/41] =?UTF-8?q?[ADD/#260]=20Clover=20Dialog=EB=A5=BC=20?= =?UTF-8?q?=EB=9D=84=EC=9A=B0=EB=8A=94=20=EC=83=81=ED=83=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt index b83c8a01..75d92bd1 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt @@ -106,7 +106,7 @@ fun ReplyDiaryScreen( var showDialog by remember { mutableStateOf(false) } LaunchedEffect(replyDiaryState) { - if (replyStatus == ReplyStatus.READY_NOT_READ) { + if (replyStatus == ReplyStatus.READY_NOT_READ || replyStatus == ReplyStatus.UNREADY) { showDialog = true } } From 9adfea26b03157bee9acdc5fe0e9b6f1ab1f336c Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Sun, 25 May 2025 16:37:58 +0900 Subject: [PATCH 38/41] =?UTF-8?q?[REFACTOR/#260]=20DailyDiary=EC=9D=98=20r?= =?UTF-8?q?eplyStatus=20=ED=83=80=EC=9E=85=EC=9D=84=20ReplyStatus=20enum?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt b/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt index 27b0883a..35533c1d 100644 --- a/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt +++ b/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt @@ -1,5 +1,6 @@ package com.sopt.clody.data.remote.dto.response +import com.sopt.clody.presentation.utils.navigation.ReplyStatus import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -11,7 +12,7 @@ data class MonthlyDiaryResponseDto( @Serializable data class DailyDiary( @SerialName("diaryCount") val diaryCount: Int, - @SerialName("replyStatus") val replyStatus: String, + @SerialName("replyStatus") val replyStatus: ReplyStatus, @SerialName("date") val date: String, @SerialName("diary") val diary: List, @SerialName("isDeleted") val isDeleted: Boolean, From cb09b1edc48cc7289792f2d954c44f544950e0ef Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Sun, 25 May 2025 16:41:08 +0900 Subject: [PATCH 39/41] =?UTF-8?q?[REFACTOR/#260]=20diary=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=EC=84=9C=20replyStatus=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=EC=9D=84=20ReplyStatus=20enum=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/diarylist/component/DailyDiaryCard.kt | 11 +++++----- .../diarylist/component/MonthlyDiaryList.kt | 3 ++- .../navigation/DiaryListNavigation.kt | 9 +++++++- .../ui/diarylist/screen/DiaryListScreen.kt | 21 +++++++++++++++---- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt index 63e10649..df96bff7 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.unit.dp import com.sopt.clody.R import com.sopt.clody.data.remote.dto.response.MonthlyDiaryResponseDto import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel +import com.sopt.clody.presentation.utils.navigation.ReplyStatus import com.sopt.clody.ui.theme.ClodyTheme @Composable @@ -41,11 +42,11 @@ fun DailyDiaryCard( day: Int, dayOfWeek: String, showDiaryDeleteBottomSheet: () -> Unit, - onClickReplyDiary: (Int, Int, Int, String) -> Unit, + onClickReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, ) { val iconRes = when { - dailyDiary.replyStatus == "READY_NOT_READ" && dailyDiary.diaryCount > 0 -> R.drawable.ic_home_ungiven_clover - dailyDiary.replyStatus == "UNREADY" && dailyDiary.diaryCount > 0 -> R.drawable.ic_home_ungiven_clover + dailyDiary.replyStatus == ReplyStatus.READY_NOT_READ && dailyDiary.diaryCount > 0 -> R.drawable.ic_home_ungiven_clover + dailyDiary.replyStatus == ReplyStatus.UNREADY && dailyDiary.diaryCount > 0 -> R.drawable.ic_home_ungiven_clover dailyDiary.diaryCount == 0 -> R.drawable.ic_home_ungiven_clover dailyDiary.diaryCount in 1..2 -> R.drawable.ic_home_bottom_clover dailyDiary.diaryCount in 3..4 -> R.drawable.ic_home_mid_clover @@ -120,7 +121,7 @@ fun ReplyDiaryButton( year: Int, month: Int, day: Int, - onClickReplyDiary: (Int, Int, Int, String) -> Unit, + onClickReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, ) { Box( contentAlignment = Alignment.TopEnd, @@ -147,7 +148,7 @@ fun ReplyDiaryButton( style = ClodyTheme.typography.detail1SemiBold, ) } - if (dailyDiary.replyStatus == "READY_NOT_READ") { + if (dailyDiary.replyStatus == ReplyStatus.READY_NOT_READ) { Image( painter = painterResource(id = R.drawable.ic_reply_diary_new), modifier = Modifier diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt index 49f8bdbc..aa7f4c29 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt @@ -11,6 +11,7 @@ import androidx.compose.ui.unit.dp import com.sopt.clody.data.remote.dto.response.MonthlyDiaryResponseDto import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel import com.sopt.clody.presentation.utils.extension.getDayOfWeek +import com.sopt.clody.presentation.utils.navigation.ReplyStatus @Composable fun MonthlyDiaryList( @@ -18,7 +19,7 @@ fun MonthlyDiaryList( diaryListViewModel: DiaryListViewModel, diaries: List, showDiaryDeleteBottomSheet: () -> Unit, - onClickReplyDiary: (Int, Int, Int, String) -> Unit, + onClickReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, ) { LazyColumn( modifier = Modifier diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt index add30750..3b5c1235 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt @@ -5,11 +5,18 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListRoute +import com.sopt.clody.presentation.utils.navigation.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.diaryListScreen( navigateToHome: (year: Int, month: Int) -> Unit, - navigateToReplyLoading: (year: Int, month: Int, date: Int, replyStatus: Route.ReplyLoading.ReplyLoadingFrom) -> Unit, + navigateToReplyLoading: ( + year: Int, + month: Int, + date: Int, + from: Route.ReplyLoading.ReplyLoadingFrom, + replyStatus: ReplyStatus, + ) -> Unit, ) { composable { backStackEntry -> backStackEntry.toRoute().apply { diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt index 6522156d..78b5edf9 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt @@ -24,6 +24,7 @@ import com.sopt.clody.presentation.ui.diarylist.component.EmptyDiaryList import com.sopt.clody.presentation.ui.diarylist.component.MonthlyDiaryList import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils +import com.sopt.clody.presentation.utils.navigation.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme @@ -32,7 +33,13 @@ fun DiaryListRoute( selectedYearFromHome: Int, selectedMonthFromHome: Int, navigateToHome: (year: Int, month: Int) -> Unit, - navigateToReplyLoading: (year: Int, month: Int, date: Int, replyStatus: Route.ReplyLoading.ReplyLoadingFrom) -> Unit, + navigateToReplyLoading: ( + year: Int, + month: Int, + date: Int, + from: Route.ReplyLoading.ReplyLoadingFrom, + replyStatus: ReplyStatus, + ) -> Unit, diaryListViewModel: DiaryListViewModel = hiltViewModel(), ) { var selectedYearInDiaryList by remember { mutableIntStateOf(selectedYearFromHome) } @@ -85,8 +92,14 @@ fun DiaryListRoute( onClickCalendar = { navigateToHome(selectedYearInDiaryList, selectedMonthInDiaryList) }, - onClickReplyDiary = { year, month, day, _ -> - navigateToReplyLoading(year, month, day, Route.ReplyLoading.ReplyLoadingFrom.DIARY_LIST) + onClickReplyDiary = { year, month, day, replyStatus -> + navigateToReplyLoading( + year, + month, + day, + Route.ReplyLoading.ReplyLoadingFrom.DIARY_LIST, + replyStatus, + ) }, ) } @@ -112,7 +125,7 @@ fun DiaryListScreen( dismissDiaryDeleteDialog: () -> Unit, onClickDiaryDelete: (Int, Int, Int) -> Unit, onClickCalendar: () -> Unit, - onClickReplyDiary: (Int, Int, Int, String) -> Unit, + onClickReplyDiary: (Int, Int, Int, ReplyStatus) -> Unit, ) { Scaffold( topBar = { From aebfde9babd94a9ab846fd15b382506265ae1ebd Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 28 May 2025 17:25:23 +0900 Subject: [PATCH 40/41] [REFACTOR/#260] ReplyStatus -> Domain Layer --- .../clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt | 2 +- .../utils/navigation => domain/model}/ReplyStatus.kt | 2 +- .../clody/presentation/ui/diarylist/component/DailyDiaryCard.kt | 2 +- .../presentation/ui/diarylist/component/MonthlyDiaryList.kt | 2 +- .../presentation/ui/diarylist/navigation/DiaryListNavigation.kt | 2 +- .../clody/presentation/ui/diarylist/screen/DiaryListScreen.kt | 2 +- .../clody/presentation/ui/home/navigation/HomeNavigation.kt | 2 +- .../com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt | 2 +- .../sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt | 2 +- .../ui/replydiary/navigation/ReplyDiaryNavigation.kt | 2 +- .../ui/replyloading/navigation/ReplyLoadingNavigation.kt | 2 +- .../presentation/ui/replyloading/screen/ReplyLoadingScreen.kt | 2 +- .../java/com/sopt/clody/presentation/utils/navigation/Route.kt | 1 + 13 files changed, 13 insertions(+), 12 deletions(-) rename app/src/main/java/com/sopt/clody/{presentation/utils/navigation => domain/model}/ReplyStatus.kt (70%) diff --git a/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt b/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt index 35533c1d..695d959c 100644 --- a/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt +++ b/app/src/main/java/com/sopt/clody/data/remote/dto/response/MonthlyDiaryResponseDto.kt @@ -1,6 +1,6 @@ package com.sopt.clody.data.remote.dto.response -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt b/app/src/main/java/com/sopt/clody/domain/model/ReplyStatus.kt similarity index 70% rename from app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt rename to app/src/main/java/com/sopt/clody/domain/model/ReplyStatus.kt index d50e0e9c..bf97c6af 100644 --- a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/ReplyStatus.kt +++ b/app/src/main/java/com/sopt/clody/domain/model/ReplyStatus.kt @@ -1,4 +1,4 @@ -package com.sopt.clody.presentation.utils.navigation +package com.sopt.clody.domain.model import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt index df96bff7..bab9dad6 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.unit.dp import com.sopt.clody.R import com.sopt.clody.data.remote.dto.response.MonthlyDiaryResponseDto import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.ui.theme.ClodyTheme @Composable diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt index aa7f4c29..940fbc66 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.unit.dp import com.sopt.clody.data.remote.dto.response.MonthlyDiaryResponseDto import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel import com.sopt.clody.presentation.utils.extension.getDayOfWeek -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus @Composable fun MonthlyDiaryList( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt index 3b5c1235..dd111388 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt @@ -5,7 +5,7 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListRoute -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.diaryListScreen( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt index 78b5edf9..6830b3c7 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt @@ -24,7 +24,7 @@ import com.sopt.clody.presentation.ui.diarylist.component.EmptyDiaryList import com.sopt.clody.presentation.ui.diarylist.component.MonthlyDiaryList import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt index 1d002b15..fda47228 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt @@ -6,7 +6,7 @@ import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.sopt.clody.presentation.ui.home.screen.HomeRoute -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import java.time.LocalDate diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt index 1271ae2a..d8692133 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt @@ -31,7 +31,7 @@ import com.sopt.clody.presentation.ui.home.component.HomeTopAppBar import com.sopt.clody.presentation.ui.home.model.DiaryDateData import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme import java.time.LocalDate diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt index 75d92bd1..c5f9ad63 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt @@ -40,7 +40,7 @@ import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.ui.theme.ClodyTheme @Composable diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt index e06469bb..15a29792 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt @@ -6,7 +6,7 @@ import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.sopt.clody.presentation.ui.replydiary.ReplyDiaryRoute -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.replyDiaryScreen( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt index aa42a929..31490532 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt @@ -6,7 +6,7 @@ import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.sopt.clody.presentation.ui.replyloading.screen.ReplyLoadingRoute -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.replyLoadingScreen( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt index a3fd0b64..6f463472 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt @@ -46,7 +46,7 @@ import com.sopt.clody.presentation.ui.replyloading.component.QuickReplyAdButton import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage -import com.sopt.clody.presentation.utils.navigation.ReplyStatus +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme import kotlinx.coroutines.delay diff --git a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt index 4ae1aa8f..2240904d 100644 --- a/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt +++ b/app/src/main/java/com/sopt/clody/presentation/utils/navigation/Route.kt @@ -1,5 +1,6 @@ package com.sopt.clody.presentation.utils.navigation +import com.sopt.clody.domain.model.ReplyStatus import kotlinx.serialization.Serializable /** From 2b8d331e5597775893ea54b26cd32e3e25fb45d4 Mon Sep 17 00:00:00 2001 From: MoonsuKang Date: Wed, 28 May 2025 17:29:01 +0900 Subject: [PATCH 41/41] [FIX/#260] Ktlint formatting --- .../clody/presentation/ui/diarylist/component/DailyDiaryCard.kt | 2 +- .../presentation/ui/diarylist/component/MonthlyDiaryList.kt | 2 +- .../presentation/ui/diarylist/navigation/DiaryListNavigation.kt | 2 +- .../clody/presentation/ui/diarylist/screen/DiaryListScreen.kt | 2 +- .../clody/presentation/ui/home/navigation/HomeNavigation.kt | 2 +- .../com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt | 2 +- .../sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt | 2 +- .../ui/replydiary/navigation/ReplyDiaryNavigation.kt | 2 +- .../ui/replyloading/navigation/ReplyLoadingNavigation.kt | 2 +- .../presentation/ui/replyloading/screen/ReplyLoadingScreen.kt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt index bab9dad6..5872a044 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/DailyDiaryCard.kt @@ -28,8 +28,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.sopt.clody.R import com.sopt.clody.data.remote.dto.response.MonthlyDiaryResponseDto -import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel import com.sopt.clody.domain.model.ReplyStatus +import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel import com.sopt.clody.ui.theme.ClodyTheme @Composable diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt index 940fbc66..401257a1 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/component/MonthlyDiaryList.kt @@ -9,9 +9,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.sopt.clody.data.remote.dto.response.MonthlyDiaryResponseDto +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListViewModel import com.sopt.clody.presentation.utils.extension.getDayOfWeek -import com.sopt.clody.domain.model.ReplyStatus @Composable fun MonthlyDiaryList( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt index dd111388..fa10a207 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/navigation/DiaryListNavigation.kt @@ -4,8 +4,8 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListRoute import com.sopt.clody.domain.model.ReplyStatus +import com.sopt.clody.presentation.ui.diarylist.screen.DiaryListRoute import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.diaryListScreen( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt index 6830b3c7..15de33b5 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/diarylist/screen/DiaryListScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import androidx.hilt.navigation.compose.hiltViewModel import com.sopt.clody.R +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.ui.component.FailureScreen import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.ui.component.bottomsheet.DiaryDeleteSheet @@ -24,7 +25,6 @@ import com.sopt.clody.presentation.ui.diarylist.component.EmptyDiaryList import com.sopt.clody.presentation.ui.diarylist.component.MonthlyDiaryList import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils -import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt index fda47228..6cc39e2d 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/navigation/HomeNavigation.kt @@ -5,8 +5,8 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.sopt.clody.presentation.ui.home.screen.HomeRoute import com.sopt.clody.domain.model.ReplyStatus +import com.sopt.clody.presentation.ui.home.screen.HomeRoute import com.sopt.clody.presentation.utils.navigation.Route import java.time.LocalDate diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt index d8692133..b60c4983 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/home/screen/HomeScreen.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.ui.component.FailureScreen import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.ui.component.bottomsheet.DiaryDeleteSheet @@ -31,7 +32,6 @@ import com.sopt.clody.presentation.ui.home.component.HomeTopAppBar import com.sopt.clody.presentation.ui.home.model.DiaryDateData import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils -import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme import java.time.LocalDate diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt index c5f9ad63..c4aa168e 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/ReplyDiaryScreen.kt @@ -35,12 +35,12 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.sopt.clody.R +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.ui.component.FailureScreen import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage -import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.ui.theme.ClodyTheme @Composable diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt index 15a29792..f1e5b161 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replydiary/navigation/ReplyDiaryNavigation.kt @@ -5,8 +5,8 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.sopt.clody.presentation.ui.replydiary.ReplyDiaryRoute import com.sopt.clody.domain.model.ReplyStatus +import com.sopt.clody.presentation.ui.replydiary.ReplyDiaryRoute import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.replyDiaryScreen( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt index 31490532..be1af5f9 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/navigation/ReplyLoadingNavigation.kt @@ -5,8 +5,8 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.sopt.clody.presentation.ui.replyloading.screen.ReplyLoadingRoute import com.sopt.clody.domain.model.ReplyStatus +import com.sopt.clody.presentation.ui.replyloading.screen.ReplyLoadingRoute import com.sopt.clody.presentation.utils.navigation.Route fun NavGraphBuilder.replyLoadingScreen( diff --git a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt index 6f463472..cf221aad 100644 --- a/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt +++ b/app/src/main/java/com/sopt/clody/presentation/ui/replyloading/screen/ReplyLoadingScreen.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.airbnb.lottie.compose.LottieConstants import com.sopt.clody.R +import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.ui.component.FailureScreen import com.sopt.clody.presentation.ui.component.LoadingScreen import com.sopt.clody.presentation.ui.component.button.ClodyButton @@ -46,7 +47,6 @@ import com.sopt.clody.presentation.ui.replyloading.component.QuickReplyAdButton import com.sopt.clody.presentation.utils.amplitude.AmplitudeConstraints import com.sopt.clody.presentation.utils.amplitude.AmplitudeUtils import com.sopt.clody.presentation.utils.extension.heightForScreenPercentage -import com.sopt.clody.domain.model.ReplyStatus import com.sopt.clody.presentation.utils.navigation.Route import com.sopt.clody.ui.theme.ClodyTheme import kotlinx.coroutines.delay