diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ef6623a7..bf21cfbf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -60,7 +60,9 @@ dependencies { implementation(projects.domain) implementation(projects.feature.login) implementation(projects.feature.main) - implementation(projects.feature.taskCertification) + implementation(projects.feature.photolog.capture) + implementation(projects.feature.photolog.detail) + implementation(projects.feature.photolog.editor) implementation(projects.feature.onboarding) implementation(projects.feature.goalEditor) implementation(projects.feature.goalManage) diff --git a/app/src/main/java/com/yapp/twix/di/FeatureModules.kt b/app/src/main/java/com/yapp/twix/di/FeatureModules.kt index 04f67aa2..b63b5a5c 100644 --- a/app/src/main/java/com/yapp/twix/di/FeatureModules.kt +++ b/app/src/main/java/com/yapp/twix/di/FeatureModules.kt @@ -7,11 +7,13 @@ import com.twix.login.di.loginModule import com.twix.main.di.mainModule import com.twix.notification.di.notificationFeatureModule import com.twix.onboarding.di.onBoardingModule +import com.twix.photolog.capture.di.photologCaptureModule +import com.twix.photolog.detail.di.photologDetailModule +import com.twix.photolog.editor.di.photologEditorModule import com.twix.settings.di.settingsModule import com.twix.splash.di.splashModule import com.twix.stats.detail.di.statsDetailModule import com.twix.stats.di.statsModule -import com.twix.task_certification.di.taskCertificationModule import org.koin.core.module.Module val featureModules: List = @@ -19,7 +21,9 @@ val featureModules: List = loginModule, mainModule, homeModule, - taskCertificationModule, + photologCaptureModule, + photologDetailModule, + photologEditorModule, goalEditorModule, goalManageModule, settingsModule, diff --git a/core/design-system/src/main/java/com/twix/designsystem/components/photolog/ForegroundCard.kt b/core/design-system/src/main/java/com/twix/designsystem/components/photolog/ForegroundCard.kt index 7bc42d08..38303e28 100644 --- a/core/design-system/src/main/java/com/twix/designsystem/components/photolog/ForegroundCard.kt +++ b/core/design-system/src/main/java/com/twix/designsystem/components/photolog/ForegroundCard.kt @@ -33,7 +33,7 @@ fun ForegroundCard( when (currentShow) { BetweenUs.ME -> stringResource(R.string.keep_it_up) BetweenUs.PARTNER -> - stringResource(R.string.partner_not_task_certification).format( + stringResource(R.string.partner_not_photolog).format( nickName, ) }, diff --git a/core/design-system/src/main/res/drawable/ic_keepi_singing.xml b/core/design-system/src/main/res/drawable/ic_keepi_singing.xml deleted file mode 100644 index b2a6ae27..00000000 --- a/core/design-system/src/main/res/drawable/ic_keepi_singing.xml +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core/design-system/src/main/res/values/strings.xml b/core/design-system/src/main/res/values/strings.xml index 67fdf85c..abf6eb67 100644 --- a/core/design-system/src/main/res/values/strings.xml +++ b/core/design-system/src/main/res/values/strings.xml @@ -58,7 +58,7 @@ 5글자로 코멘트를 남길 수 있어요 - %s님은\n아직… + %s님은\n아직… 목표 직접 만들기 @@ -130,28 +130,28 @@ * 언제든지 설정 > 알림 설정에서 변경 가능해요 - 업로드 - 이미지 캡처에 실패했습니다. 다시 시도해 주세요. - 이미지를 불러오는 데 실패했습니다. 다시 시도해 주세요. - 인증샷 찍기 - 인증샷 등록에 실패했습니다. - 이미지 변환에 실패했습니다. - 인증샷 업로드 중... - 잠시만 기다려 주세요. + 업로드 + 이미지 캡처에 실패했습니다. 다시 시도해 주세요. + 이미지를 불러오는 데 실패했습니다. 다시 시도해 주세요. + 인증샷 찍기 + 인증샷 등록에 실패했습니다. + 이미지 변환에 실패했습니다. + 인증샷 업로드 중... + 잠시만 기다려 주세요. 코멘트는 5글자로 입력해주세요! - 인증샷 조회에 실패했습니다. - 인증샷 수정에 실패했어요. + 인증샷 조회에 실패했습니다. + 인증샷 수정에 실패했어요. - 다시 찍기 - 코멘트가 수정 되었어요. - 코멘트가 수정되지 않았어요. - 코멘트 수정에 실패했어요. - 리액션 요청에 실패했어요. + 다시 찍기 + 코멘트가 수정 되었어요. + 코멘트가 수정되지 않았어요. + 코멘트 수정에 실패했어요. + 리액션 요청에 실패했어요. - 인증샷 촬영을 위해서 카메라 권한이 필요해요. + 인증샷 촬영을 위해서 카메라 권한이 필요해요. Google로 시작하기 diff --git a/core/navigation/src/main/java/com/twix/navigation/AppNavHost.kt b/core/navigation/src/main/java/com/twix/navigation/AppNavHost.kt index 660c55b1..6269880e 100644 --- a/core/navigation/src/main/java/com/twix/navigation/AppNavHost.kt +++ b/core/navigation/src/main/java/com/twix/navigation/AppNavHost.kt @@ -63,7 +63,7 @@ fun AppNavHost( ) { ensureMainStack(navController) navController.navigate( - NavRoutes.TaskCertificationDetailRoute.createRoute( + NavRoutes.PhotologDetailRoute.createRoute( goalId = goalId, date = date, betweenUs = BetweenUs.ME.name, @@ -79,7 +79,7 @@ fun AppNavHost( ) { ensureMainStack(navController) navController.navigate( - NavRoutes.TaskCertificationDetailRoute.createRoute( + NavRoutes.PhotologDetailRoute.createRoute( goalId = goalId, date = date, betweenUs = BetweenUs.PARTNER.name, diff --git a/core/navigation/src/main/java/com/twix/navigation/NavRoutes.kt b/core/navigation/src/main/java/com/twix/navigation/NavRoutes.kt index b3139b1f..850eb91f 100644 --- a/core/navigation/src/main/java/com/twix/navigation/NavRoutes.kt +++ b/core/navigation/src/main/java/com/twix/navigation/NavRoutes.kt @@ -30,12 +30,12 @@ sealed class NavRoutes( object MainRoute : NavRoutes("main") /** - * TaskCertificationGraph + * PhotologGraph * */ - object TaskCertificationGraph : NavRoutes("task_certification_graph") + object PhotologGraph : NavRoutes("photolog_graph") - object TaskCertificationDetailRoute : - NavRoutes("task_certification_detail/{goalId}/{date}/{betweenUs}?isCompleted={isCompleted}") { + object PhotologDetailRoute : + NavRoutes("photolog_detail/{goalId}/{date}/{betweenUs}?isCompleted={isCompleted}") { const val ARG_GOAL_ID = "goalId" const val ARG_DATE = "date" const val ARG_BETWEEN_US = "betweenUs" @@ -46,10 +46,10 @@ sealed class NavRoutes( date: LocalDate, betweenUs: String, isCompleted: Boolean = false, - ) = "task_certification_detail/$goalId/$date/$betweenUs?isCompleted=$isCompleted" + ) = "photolog_detail/$goalId/$date/$betweenUs?isCompleted=$isCompleted" } - object TaskCertificationRoute : NavRoutes("task_certification/{data}") { + object PhotologRoute : NavRoutes("photolog/{data}") { const val ARG_DATA = "data" enum class From { @@ -61,19 +61,19 @@ sealed class NavRoutes( fun createRoute(data: DetailNavArgs): String { val json = Json.encodeToString(data) val encoded = Uri.encode(json) - return "task_certification/$encoded" + return "photolog/$encoded" } } - object TaskCertificationEditorRoute : - NavRoutes("task_certification_editor/{goalId}/{date}") { + object PhotologEditorRoute : + NavRoutes("photolog_editor/{goalId}/{date}") { const val ARG_GOAL_ID = "goalId" const val ARG_DATE = "date" fun createRoute( goalId: Long, date: LocalDate, - ) = "task_certification_editor/$goalId/$date" + ) = "photolog_editor/$goalId/$date" } /** diff --git a/core/navigation/src/main/java/com/twix/navigation/args/DetailNavArgs.kt b/core/navigation/src/main/java/com/twix/navigation/args/DetailNavArgs.kt index b3824687..0bd01e02 100644 --- a/core/navigation/src/main/java/com/twix/navigation/args/DetailNavArgs.kt +++ b/core/navigation/src/main/java/com/twix/navigation/args/DetailNavArgs.kt @@ -6,7 +6,7 @@ import kotlinx.serialization.Serializable @Serializable data class DetailNavArgs( val goalId: Long, - val from: NavRoutes.TaskCertificationRoute.From, + val from: NavRoutes.PhotologRoute.From, val photologId: Long = -1, val selectedDate: String = "", val comment: String = "", diff --git a/core/util/src/main/java/com/twix/util/bus/TaskCertificationRefreshBus.kt b/core/util/src/main/java/com/twix/util/bus/PhotologRefreshBus.kt similarity index 93% rename from core/util/src/main/java/com/twix/util/bus/TaskCertificationRefreshBus.kt rename to core/util/src/main/java/com/twix/util/bus/PhotologRefreshBus.kt index 578d3a57..ebe91a64 100644 --- a/core/util/src/main/java/com/twix/util/bus/TaskCertificationRefreshBus.kt +++ b/core/util/src/main/java/com/twix/util/bus/PhotologRefreshBus.kt @@ -4,7 +4,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow -class TaskCertificationRefreshBus { +class PhotologRefreshBus { enum class Publisher { PHOTOLOG, EDITOR, diff --git a/core/util/src/main/java/com/twix/util/di/UtilModule.kt b/core/util/src/main/java/com/twix/util/di/UtilModule.kt index b870083d..2516d112 100644 --- a/core/util/src/main/java/com/twix/util/di/UtilModule.kt +++ b/core/util/src/main/java/com/twix/util/di/UtilModule.kt @@ -1,15 +1,15 @@ package com.twix.util.di import com.twix.util.bus.GoalRefreshBus +import com.twix.util.bus.PhotologRefreshBus import com.twix.util.bus.StatsDetailRefreshBus import com.twix.util.bus.StatsRefreshBus -import com.twix.util.bus.TaskCertificationRefreshBus import org.koin.dsl.module val utilModule = module { single { GoalRefreshBus() } - single { TaskCertificationRefreshBus() } + single { PhotologRefreshBus() } single { StatsRefreshBus() } single { StatsDetailRefreshBus() } } diff --git a/feature/main/src/main/java/com/twix/main/navigation/MainNavGraph.kt b/feature/main/src/main/java/com/twix/main/navigation/MainNavGraph.kt index 8d53efe0..315404d6 100644 --- a/feature/main/src/main/java/com/twix/main/navigation/MainNavGraph.kt +++ b/feature/main/src/main/java/com/twix/main/navigation/MainNavGraph.kt @@ -39,10 +39,10 @@ object MainNavGraph : NavGraphContributor { }, navigateToCertification = { goalId, date -> val destination = - NavRoutes.TaskCertificationRoute.createRoute( + NavRoutes.PhotologRoute.createRoute( DetailNavArgs( goalId = goalId, - from = NavRoutes.TaskCertificationRoute.From.HOME, + from = NavRoutes.PhotologRoute.From.HOME, selectedDate = date.toString(), ), ) @@ -52,7 +52,7 @@ object MainNavGraph : NavGraphContributor { }, navigateToCertificationDetail = { goalId, date, betweenUs -> val destination = - NavRoutes.TaskCertificationDetailRoute.createRoute( + NavRoutes.PhotologDetailRoute.createRoute( goalId, date, betweenUs.name, diff --git a/feature/notification/src/main/java/com/twix/notification/navigation/NotificationNavGraph.kt b/feature/notification/src/main/java/com/twix/notification/navigation/NotificationNavGraph.kt index eb6477da..0690a2f3 100644 --- a/feature/notification/src/main/java/com/twix/notification/navigation/NotificationNavGraph.kt +++ b/feature/notification/src/main/java/com/twix/notification/navigation/NotificationNavGraph.kt @@ -24,13 +24,13 @@ object NotificationNavGraph : NavGraphContributor { NotificationRoute( popBackStack = { navController.popBackStack() }, navigateToMyPhotolog = { goalId, date -> - navController.navigate(NavRoutes.TaskCertificationDetailRoute.createRoute(goalId, date, BetweenUs.ME.name)) { + navController.navigate(NavRoutes.PhotologDetailRoute.createRoute(goalId, date, BetweenUs.ME.name)) { launchSingleTop = true } }, navigateToPartnerPhotolog = { goalId, date -> navController.navigate( - NavRoutes.TaskCertificationDetailRoute.createRoute( + NavRoutes.PhotologDetailRoute.createRoute( goalId, date, BetweenUs.PARTNER.name, diff --git a/feature/photolog/capture/.gitignore b/feature/photolog/capture/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/feature/photolog/capture/.gitignore @@ -0,0 +1 @@ +/build diff --git a/feature/task-certification/build.gradle.kts b/feature/photolog/capture/build.gradle.kts similarity index 70% rename from feature/task-certification/build.gradle.kts rename to feature/photolog/capture/build.gradle.kts index eb6da430..e6503c7c 100644 --- a/feature/task-certification/build.gradle.kts +++ b/feature/photolog/capture/build.gradle.kts @@ -3,11 +3,10 @@ plugins { } android { - namespace = "com.twix.task_certification" + namespace = "com.twix.photolog.capture" } -dependencies { - implementation(projects.core.util) +dependencies { implementation(libs.bundles.cameraX) implementation(libs.guava) implementation(libs.kotlinx.serialization.json) diff --git a/feature/photolog/capture/consumer-rules.pro b/feature/photolog/capture/consumer-rules.pro new file mode 100644 index 00000000..fb164d66 --- /dev/null +++ b/feature/photolog/capture/consumer-rules.pro @@ -0,0 +1 @@ +# Add project specific ProGuard rules here. diff --git a/feature/photolog/capture/proguard-rules.pro b/feature/photolog/capture/proguard-rules.pro new file mode 100644 index 00000000..fb164d66 --- /dev/null +++ b/feature/photolog/capture/proguard-rules.pro @@ -0,0 +1 @@ +# Add project specific ProGuard rules here. diff --git a/feature/task-certification/src/main/AndroidManifest.xml b/feature/photolog/capture/src/main/AndroidManifest.xml similarity index 100% rename from feature/task-certification/src/main/AndroidManifest.xml rename to feature/photolog/capture/src/main/AndroidManifest.xml diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/TaskCertificationScreen.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/PhotologCaptureScreen.kt similarity index 75% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/TaskCertificationScreen.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/PhotologCaptureScreen.kt index bc3a87ae..ef71b8fc 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/TaskCertificationScreen.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/PhotologCaptureScreen.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification +package com.twix.photolog.capture import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.PickVisualMediaRequest @@ -37,16 +37,16 @@ import com.twix.designsystem.theme.GrayColor import com.twix.designsystem.theme.TwixTheme import com.twix.domain.model.enums.AppTextStyle import com.twix.domain.model.enums.BetweenUs -import com.twix.task_certification.certification.component.CameraControlBar -import com.twix.task_certification.certification.component.CameraPreviewBox -import com.twix.task_certification.certification.component.CommentErrorText -import com.twix.task_certification.certification.component.LoadingContent -import com.twix.task_certification.certification.component.TaskCertificationTopBar -import com.twix.task_certification.certification.contract.TaskCertificationIntent -import com.twix.task_certification.certification.contract.TaskCertificationSideEffect -import com.twix.task_certification.certification.contract.TaskCertificationUiState -import com.twix.task_certification.certification.model.camera.Camera -import com.twix.task_certification.certification.model.camera.CameraPreview +import com.twix.photolog.capture.component.CameraControlBar +import com.twix.photolog.capture.component.CameraPreviewBox +import com.twix.photolog.capture.component.CommentErrorText +import com.twix.photolog.capture.component.LoadingContent +import com.twix.photolog.capture.component.PhotologCaptureTopBar +import com.twix.photolog.capture.contract.PhotologCaptureIntent +import com.twix.photolog.capture.contract.PhotologCaptureSideEffect +import com.twix.photolog.capture.contract.PhotologCaptureUiState +import com.twix.photolog.capture.model.camera.Camera +import com.twix.photolog.capture.model.camera.CameraPreview import com.twix.ui.base.ObserveAsEvents import com.twix.ui.extension.noRippleClickable import kotlinx.coroutines.launch @@ -55,10 +55,10 @@ import org.koin.compose.koinInject import java.time.LocalDate @Composable -fun TaskCertificationRoute( +fun PhotologCaptureRoute( toastManager: ToastManager = koinInject(), camera: Camera = koinInject(), - viewModel: TaskCertificationViewModel = koinViewModel(), + viewModel: PhotologCaptureViewModel = koinViewModel(), navigateToBack: () -> Unit, navigateToDetail: (Long, LocalDate, BetweenUs) -> Unit, ) { @@ -71,7 +71,7 @@ fun TaskCertificationRoute( val pickMedia = rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> - viewModel.dispatch(TaskCertificationIntent.PickPicture(uri)) + viewModel.dispatch(PhotologCaptureIntent.PickPicture(uri)) } LaunchedEffect(uiState.lens) { @@ -90,7 +90,7 @@ fun TaskCertificationRoute( ObserveAsEvents(viewModel.sideEffect) { event -> when (event) { - is TaskCertificationSideEffect.ShowToast -> { + is PhotologCaptureSideEffect.ShowToast -> { toastManager.tryShow( ToastData( message = currentContext.getString(event.message), @@ -99,8 +99,8 @@ fun TaskCertificationRoute( ) } - TaskCertificationSideEffect.NavigateToBack -> navigateToBack() - is TaskCertificationSideEffect.NavigateToDetail -> + PhotologCaptureSideEffect.NavigateToBack -> navigateToBack() + is PhotologCaptureSideEffect.NavigateToDetail -> navigateToDetail( event.goalId, event.date, @@ -112,7 +112,7 @@ fun TaskCertificationRoute( if (uiState.isLoading) { LoadingContent() } else { - TaskCertificationScreen( + PhotologCaptureScreen( uiState = uiState, cameraPreview = cameraPreview, onClickClose = navigateToBack, @@ -121,40 +121,40 @@ fun TaskCertificationRoute( camera .takePicture() .onSuccess { - viewModel.dispatch(TaskCertificationIntent.TakePicture(it)) + viewModel.dispatch(PhotologCaptureIntent.TakePicture(it)) }.onFailure { - viewModel.dispatch(TaskCertificationIntent.TakePicture(null)) + viewModel.dispatch(PhotologCaptureIntent.TakePicture(null)) } } }, onToggleCameraClick = { - viewModel.dispatch(TaskCertificationIntent.ToggleLens) + viewModel.dispatch(PhotologCaptureIntent.ToggleLens) }, onClickFlash = { - viewModel.dispatch(TaskCertificationIntent.ToggleTorch) + viewModel.dispatch(PhotologCaptureIntent.ToggleTorch) }, onClickGallery = { pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) }, onClickRefresh = { - viewModel.dispatch(TaskCertificationIntent.RetakePicture) + viewModel.dispatch(PhotologCaptureIntent.RetakePicture) }, onCommentChanged = { - viewModel.dispatch(TaskCertificationIntent.UpdateComment(it)) + viewModel.dispatch(PhotologCaptureIntent.UpdateComment(it)) }, onFocusChanged = { - viewModel.dispatch(TaskCertificationIntent.CommentFocusChanged(it)) + viewModel.dispatch(PhotologCaptureIntent.CommentFocusChanged(it)) }, onClickUpload = { - viewModel.dispatch(TaskCertificationIntent.TryUpload) + viewModel.dispatch(PhotologCaptureIntent.TryUpload) }, ) } } @Composable -private fun TaskCertificationScreen( - uiState: TaskCertificationUiState, +private fun PhotologCaptureScreen( + uiState: PhotologCaptureUiState, cameraPreview: CameraPreview?, onClickClose: () -> Unit, onCaptureClick: () -> Unit, @@ -177,7 +177,7 @@ private fun TaskCertificationScreen( .noRippleClickable { focusManager.clearFocus() }, ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { - TaskCertificationTopBar(onClickClose = onClickClose) + PhotologCaptureTopBar(onClickClose = onClickClose) Spacer(modifier = Modifier.height(24.26.dp)) @@ -186,7 +186,7 @@ private fun TaskCertificationScreen( CommentErrorText() } else { AppText( - text = stringResource(R.string.task_certification_take_picture), + text = stringResource(R.string.photolog_take_picture), style = AppTextStyle.H2, color = GrayColor.C100, ) @@ -227,10 +227,10 @@ private fun TaskCertificationScreen( @Preview @Composable -fun TaskCertificationScreenPreview() { +fun PhotologCaptureScreenPreview() { TwixTheme { - TaskCertificationScreen( - uiState = TaskCertificationUiState(), + PhotologCaptureScreen( + uiState = PhotologCaptureUiState(), cameraPreview = null, onClickClose = {}, onCaptureClick = {}, diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/TaskCertificationViewModel.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/PhotologCaptureViewModel.kt similarity index 67% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/TaskCertificationViewModel.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/PhotologCaptureViewModel.kt index 82ff30fe..da1c8d1e 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/TaskCertificationViewModel.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/PhotologCaptureViewModel.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification +package com.twix.photolog.capture import android.net.Uri import androidx.lifecycle.SavedStateHandle @@ -11,57 +11,57 @@ import com.twix.domain.repository.PhotoLogRepository import com.twix.navigation.NavRoutes import com.twix.navigation.args.DetailNavArgs import com.twix.navigation.savedstate.decodeNavArgs -import com.twix.task_certification.certification.contract.TaskCertificationIntent -import com.twix.task_certification.certification.contract.TaskCertificationSideEffect -import com.twix.task_certification.certification.contract.TaskCertificationUiState -import com.twix.task_certification.certification.model.CaptureStatus +import com.twix.photolog.capture.contract.PhotologCaptureIntent +import com.twix.photolog.capture.contract.PhotologCaptureSideEffect +import com.twix.photolog.capture.contract.PhotologCaptureUiState +import com.twix.photolog.capture.model.CaptureStatus import com.twix.ui.base.BaseViewModel import com.twix.ui.image.ImageGenerator import com.twix.util.bus.GoalRefreshBus +import com.twix.util.bus.PhotologRefreshBus import com.twix.util.bus.StatsDetailRefreshBus -import com.twix.util.bus.TaskCertificationRefreshBus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.time.LocalDate -class TaskCertificationViewModel( +class PhotologCaptureViewModel( private val imageGenerator: ImageGenerator, private val photologRepository: PhotoLogRepository, - private val detailRefreshBus: TaskCertificationRefreshBus, + private val detailRefreshBus: PhotologRefreshBus, private val goalRefreshBus: GoalRefreshBus, private val statsDetailRefreshBus: StatsDetailRefreshBus, savedStateHandle: SavedStateHandle, -) : BaseViewModel( - TaskCertificationUiState(), +) : BaseViewModel( + PhotologCaptureUiState(), ) { private val navArgs: DetailNavArgs = - savedStateHandle.decodeNavArgs(NavRoutes.TaskCertificationRoute.ARG_DATA) + savedStateHandle.decodeNavArgs(NavRoutes.PhotologRoute.ARG_DATA) init { - if (navArgs.from == NavRoutes.TaskCertificationRoute.From.EDITOR) { + if (navArgs.from == NavRoutes.PhotologRoute.From.EDITOR) { reduceComment(navArgs.comment) } } - override suspend fun handleIntent(intent: TaskCertificationIntent) { + override suspend fun handleIntent(intent: PhotologCaptureIntent) { when (intent) { - is TaskCertificationIntent.TakePicture -> takePicture(intent.uri) - is TaskCertificationIntent.PickPicture -> pickPicture(intent.uri) - is TaskCertificationIntent.ToggleLens -> reduceLens() - is TaskCertificationIntent.ToggleTorch -> reduceTorch() - is TaskCertificationIntent.RetakePicture -> setupRetake() - is TaskCertificationIntent.UpdateComment -> reduceComment(intent.value) - is TaskCertificationIntent.CommentFocusChanged -> reduceCommentFocus(intent.isFocused) - is TaskCertificationIntent.TryUpload -> handleUploadIntent() - is TaskCertificationIntent.Upload -> upload(intent.image) + is PhotologCaptureIntent.TakePicture -> takePicture(intent.uri) + is PhotologCaptureIntent.PickPicture -> pickPicture(intent.uri) + is PhotologCaptureIntent.ToggleLens -> reduceLens() + is PhotologCaptureIntent.ToggleTorch -> reduceTorch() + is PhotologCaptureIntent.RetakePicture -> setupRetake() + is PhotologCaptureIntent.UpdateComment -> reduceComment(intent.value) + is PhotologCaptureIntent.CommentFocusChanged -> reduceCommentFocus(intent.isFocused) + is PhotologCaptureIntent.TryUpload -> handleUploadIntent() + is PhotologCaptureIntent.Upload -> upload(intent.image) } } private fun takePicture(uri: Uri?) { uri?.let { reducePicture(it) } ?: showToast( - R.string.task_certification_image_capture_fail, + R.string.photolog_image_capture_fail, ToastType.ERROR, ) } @@ -112,7 +112,7 @@ class TaskCertificationViewModel( if (imageBytes != null) { upload(imageBytes) } else { - showToast(R.string.task_certification_image_translate_fail, ToastType.ERROR) + showToast(R.string.photolog_image_translate_fail, ToastType.ERROR) } } } @@ -140,18 +140,18 @@ class TaskCertificationViewModel( onSuccess = { fileName -> handleUploadPhotologSuccess(fileName) }, onError = { reduce { copy(isLoading = false) } - showToast(R.string.task_certification_upload_fail, ToastType.ERROR) + showToast(R.string.photolog_upload_fail, ToastType.ERROR) }, ) } private fun handleUploadPhotologSuccess(fileName: String) { when (navArgs.from) { - NavRoutes.TaskCertificationRoute.From.DETAIL, - NavRoutes.TaskCertificationRoute.From.HOME, + NavRoutes.PhotologRoute.From.DETAIL, + NavRoutes.PhotologRoute.From.HOME, -> uploadPhotolog(fileName) - NavRoutes.TaskCertificationRoute.From.EDITOR -> modifyPhotolog(fileName) + NavRoutes.PhotologRoute.From.EDITOR -> modifyPhotolog(fileName) } } @@ -169,22 +169,22 @@ class TaskCertificationViewModel( }, onSuccess = { handleUploadPhotologSuccess() }, onError = { - showToast(R.string.task_certification_upload_fail, ToastType.ERROR) + showToast(R.string.photolog_upload_fail, ToastType.ERROR) }, ) } private fun handleUploadPhotologSuccess() { when (navArgs.from) { - NavRoutes.TaskCertificationRoute.From.HOME -> + NavRoutes.PhotologRoute.From.HOME -> goalRefreshBus.notifyGoalListChanged() - NavRoutes.TaskCertificationRoute.From.DETAIL -> - detailRefreshBus.notifyChanged(TaskCertificationRefreshBus.Publisher.PHOTOLOG) + NavRoutes.PhotologRoute.From.DETAIL -> + detailRefreshBus.notifyChanged(PhotologRefreshBus.Publisher.PHOTOLOG) - NavRoutes.TaskCertificationRoute.From.EDITOR -> Unit + NavRoutes.PhotologRoute.From.EDITOR -> Unit } - tryEmitSideEffect(TaskCertificationSideEffect.NavigateToBack) + tryEmitSideEffect(PhotologCaptureSideEffect.NavigateToBack) } private fun modifyPhotolog(fileName: String) { @@ -198,18 +198,18 @@ class TaskCertificationViewModel( }, onSuccess = { handleModifyPhotologSuccess() }, onError = { - showToast(R.string.task_certification_modify_fail, ToastType.ERROR) + showToast(R.string.photolog_modify_fail, ToastType.ERROR) }, ) } private fun handleModifyPhotologSuccess() { - detailRefreshBus.notifyChanged(TaskCertificationRefreshBus.Publisher.PHOTOLOG) + detailRefreshBus.notifyChanged(PhotologRefreshBus.Publisher.PHOTOLOG) goalRefreshBus.notifyGoalListChanged() statsDetailRefreshBus.notifyChanged() val selectedDate = LocalDate.parse(navArgs.selectedDate) tryEmitSideEffect( - TaskCertificationSideEffect.NavigateToDetail( + PhotologCaptureSideEffect.NavigateToDetail( goalId = navArgs.goalId, date = selectedDate, betweenUs = BetweenUs.ME, @@ -222,7 +222,7 @@ class TaskCertificationViewModel( type: ToastType, ) { viewModelScope.launch { - emitSideEffect(TaskCertificationSideEffect.ShowToast(message, type)) + emitSideEffect(PhotologCaptureSideEffect.ShowToast(message, type)) } } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CameraControlBar.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CameraControlBar.kt similarity index 96% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CameraControlBar.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CameraControlBar.kt index c8020dc3..5b5b9deb 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CameraControlBar.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CameraControlBar.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.component +package com.twix.photolog.capture.component import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement @@ -31,7 +31,7 @@ import com.twix.designsystem.theme.CommonColor import com.twix.designsystem.theme.GrayColor import com.twix.designsystem.theme.TwixTheme import com.twix.domain.model.enums.AppTextStyle -import com.twix.task_certification.certification.model.CaptureStatus +import com.twix.photolog.capture.model.CaptureStatus import com.twix.ui.extension.noRippleClickable @Composable @@ -145,7 +145,7 @@ private fun ImageCapturedBar( AppRoundButton( borderColor = CommonColor.White, backgroundColor = GrayColor.C500, - text = stringResource(R.string.task_certification_upload), + text = stringResource(R.string.photolog_upload), textStyle = AppTextStyle.T2, textColor = CommonColor.White, modifier = diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CameraPreviewBox.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CameraPreviewBox.kt similarity index 92% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CameraPreviewBox.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CameraPreviewBox.kt index d97d5d57..68668ea2 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CameraPreviewBox.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CameraPreviewBox.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.component +package com.twix.photolog.capture.component import androidx.camera.compose.CameraXViewfinder import androidx.compose.foundation.Image @@ -22,9 +22,9 @@ import coil3.compose.AsyncImage import com.twix.designsystem.R import com.twix.designsystem.theme.GrayColor import com.twix.designsystem.theme.TwixTheme -import com.twix.task_certification.certification.model.CaptureStatus -import com.twix.task_certification.certification.model.TorchStatus -import com.twix.task_certification.certification.model.camera.CameraPreview +import com.twix.photolog.capture.model.CaptureStatus +import com.twix.photolog.capture.model.TorchStatus +import com.twix.photolog.capture.model.camera.CameraPreview import com.twix.ui.extension.noRippleClickable @Composable diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CommentErrorText.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CommentErrorText.kt similarity index 96% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CommentErrorText.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CommentErrorText.kt index 51bf8783..4d1bc90e 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/CommentErrorText.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/CommentErrorText.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.component +package com.twix.photolog.capture.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/LoadingContent.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/LoadingContent.kt similarity index 93% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/component/LoadingContent.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/LoadingContent.kt index a1d5e576..d4758a75 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/LoadingContent.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/LoadingContent.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.component +package com.twix.photolog.capture.component import androidx.compose.animation.core.EaseInOut import androidx.compose.animation.core.LinearEasing @@ -45,7 +45,7 @@ internal fun LoadingContent() { Spacer(Modifier.height(6.dp)) AppText( - text = stringResource(R.string.task_certification_loading), + text = stringResource(R.string.photolog_loading), style = AppTextStyle.H1, color = GrayColor.C500, ) @@ -53,7 +53,7 @@ internal fun LoadingContent() { Spacer(Modifier.height(10.dp)) AppText( - text = stringResource(R.string.task_certification_plz_waiting), + text = stringResource(R.string.photolog_plz_waiting), style = AppTextStyle.T2, color = GrayColor.C300, ) diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/TaskCertificationTopBar.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/PhotologCaptureTopBar.kt similarity index 88% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/component/TaskCertificationTopBar.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/PhotologCaptureTopBar.kt index e5b962d5..63d577a2 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/component/TaskCertificationTopBar.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/component/PhotologCaptureTopBar.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.component +package com.twix.photolog.capture.component import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -18,7 +18,7 @@ import com.twix.designsystem.theme.GrayColor import com.twix.ui.extension.noRippleClickable @Composable -internal fun TaskCertificationTopBar( +internal fun PhotologCaptureTopBar( onClickClose: () -> Unit, modifier: Modifier = Modifier, ) { @@ -43,6 +43,6 @@ internal fun TaskCertificationTopBar( @Preview(showBackground = true) @Composable -private fun TaskCertificationTopBarPreview() { - TaskCertificationTopBar({}) +private fun PhotologCaptureTopBarPreview() { + PhotologCaptureTopBar({}) } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationIntent.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureIntent.kt similarity index 57% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationIntent.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureIntent.kt index cbf40808..62772d75 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationIntent.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureIntent.kt @@ -1,36 +1,36 @@ -package com.twix.task_certification.certification.contract +package com.twix.photolog.capture.contract import android.net.Uri import com.twix.ui.base.Intent -sealed interface TaskCertificationIntent : Intent { +sealed interface PhotologCaptureIntent : Intent { data class TakePicture( val uri: Uri?, - ) : TaskCertificationIntent + ) : PhotologCaptureIntent data class PickPicture( val uri: Uri?, - ) : TaskCertificationIntent + ) : PhotologCaptureIntent - data object ToggleLens : TaskCertificationIntent + data object ToggleLens : PhotologCaptureIntent - data object ToggleTorch : TaskCertificationIntent + data object ToggleTorch : PhotologCaptureIntent - data object RetakePicture : TaskCertificationIntent + data object RetakePicture : PhotologCaptureIntent data class UpdateComment( val value: String, - ) : TaskCertificationIntent + ) : PhotologCaptureIntent data class CommentFocusChanged( val isFocused: Boolean, - ) : TaskCertificationIntent + ) : PhotologCaptureIntent - data object TryUpload : TaskCertificationIntent + data object TryUpload : PhotologCaptureIntent data class Upload( val image: ByteArray, - ) : TaskCertificationIntent { + ) : PhotologCaptureIntent { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationSideEffect.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureSideEffect.kt similarity index 60% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationSideEffect.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureSideEffect.kt index bd558670..a0d014d5 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationSideEffect.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureSideEffect.kt @@ -1,21 +1,21 @@ -package com.twix.task_certification.certification.contract +package com.twix.photolog.capture.contract import com.twix.designsystem.components.toast.model.ToastType import com.twix.domain.model.enums.BetweenUs import com.twix.ui.base.SideEffect import java.time.LocalDate -sealed interface TaskCertificationSideEffect : SideEffect { +sealed interface PhotologCaptureSideEffect : SideEffect { data class ShowToast( val message: Int, val type: ToastType, - ) : TaskCertificationSideEffect + ) : PhotologCaptureSideEffect - data object NavigateToBack : TaskCertificationSideEffect + data object NavigateToBack : PhotologCaptureSideEffect data class NavigateToDetail( val goalId: Long, val date: LocalDate, val betweenUs: BetweenUs, - ) : TaskCertificationSideEffect + ) : PhotologCaptureSideEffect } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationUiState.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureUiState.kt similarity index 74% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationUiState.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureUiState.kt index 54aa4eed..3b7dfd92 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/contract/TaskCertificationUiState.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/contract/PhotologCaptureUiState.kt @@ -1,16 +1,16 @@ -package com.twix.task_certification.certification.contract +package com.twix.photolog.capture.contract import android.net.Uri import androidx.camera.core.CameraSelector import androidx.compose.runtime.Immutable import com.twix.designsystem.components.comment.model.CommentUiModel -import com.twix.task_certification.certification.model.CaptureStatus -import com.twix.task_certification.certification.model.TorchStatus -import com.twix.task_certification.certification.model.camera.CameraPreview +import com.twix.photolog.capture.model.CaptureStatus +import com.twix.photolog.capture.model.TorchStatus +import com.twix.photolog.capture.model.camera.CameraPreview import com.twix.ui.base.State @Immutable -data class TaskCertificationUiState( +data class PhotologCaptureUiState( val capture: CaptureStatus = CaptureStatus.NotCaptured, val torch: TorchStatus = TorchStatus.Off, val lens: CameraSelector = CameraSelector.DEFAULT_BACK_CAMERA, @@ -25,7 +25,7 @@ data class TaskCertificationUiState( val showTorch: Boolean get() = capture is CaptureStatus.NotCaptured && lens == CameraSelector.DEFAULT_BACK_CAMERA - fun toggleLens(): TaskCertificationUiState { + fun toggleLens(): PhotologCaptureUiState { val newLens = if (lens == CameraSelector.DEFAULT_BACK_CAMERA) { CameraSelector.DEFAULT_FRONT_CAMERA @@ -38,18 +38,18 @@ data class TaskCertificationUiState( ) } - fun toggleTorch(): TaskCertificationUiState { + fun toggleTorch(): PhotologCaptureUiState { val newFlashMode = TorchStatus.Companion.toggle(torch) return copy(torch = newFlashMode) } - fun updatePicture(uri: Uri): TaskCertificationUiState = + fun updatePicture(uri: Uri): PhotologCaptureUiState = copy( capture = CaptureStatus.Captured(uri), torch = TorchStatus.Off, ) - fun removePicture(): TaskCertificationUiState = copy(capture = CaptureStatus.NotCaptured) + fun removePicture(): PhotologCaptureUiState = copy(capture = CaptureStatus.NotCaptured) fun updateComment(newComment: String) = copy(comment = comment.updateComment(newComment)) diff --git a/feature/photolog/capture/src/main/java/com/twix/photolog/capture/di/PhotologCaptureModule.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/di/PhotologCaptureModule.kt new file mode 100644 index 00000000..3ca797e1 --- /dev/null +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/di/PhotologCaptureModule.kt @@ -0,0 +1,18 @@ +package com.twix.photolog.capture.di + +import com.twix.navigation.NavRoutes +import com.twix.navigation.base.NavGraphContributor +import com.twix.photolog.capture.PhotologCaptureViewModel +import com.twix.photolog.capture.model.camera.Camera +import com.twix.photolog.capture.model.camera.CaptureCamera +import com.twix.photolog.capture.navigation.PhotologCaptureNavGraph +import org.koin.core.module.dsl.viewModelOf +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val photologCaptureModule = + module { + viewModelOf(::PhotologCaptureViewModel) + factory { CaptureCamera(get()) } + single(named(NavRoutes.PhotologRoute.route)) { PhotologCaptureNavGraph } + } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/CaptureStatus.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/CaptureStatus.kt similarity index 80% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/model/CaptureStatus.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/CaptureStatus.kt index 3ad176f2..6d807aca 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/CaptureStatus.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/CaptureStatus.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.model +package com.twix.photolog.capture.model import android.net.Uri import androidx.compose.runtime.Immutable diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/TorchStatus.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/TorchStatus.kt similarity index 80% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/model/TorchStatus.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/TorchStatus.kt index e2ccd894..14b2ef6a 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/TorchStatus.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/TorchStatus.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.model +package com.twix.photolog.capture.model enum class TorchStatus { On, diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/Camera.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/Camera.kt similarity index 76% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/Camera.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/Camera.kt index bfd49e10..700328df 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/Camera.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/Camera.kt @@ -1,9 +1,9 @@ -package com.twix.task_certification.certification.model.camera +package com.twix.photolog.capture.model.camera import android.net.Uri import androidx.camera.core.CameraSelector import androidx.lifecycle.LifecycleOwner -import com.twix.task_certification.certification.model.TorchStatus +import com.twix.photolog.capture.model.TorchStatus import kotlinx.coroutines.flow.StateFlow interface Camera { diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/CameraPreview.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/CameraPreview.kt similarity index 71% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/CameraPreview.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/CameraPreview.kt index eca40459..169e077e 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/CameraPreview.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/CameraPreview.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.model.camera +package com.twix.photolog.capture.model.camera import androidx.camera.core.SurfaceRequest import androidx.compose.runtime.Immutable diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/CaptureCamera.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/CaptureCamera.kt similarity index 96% rename from feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/CaptureCamera.kt rename to feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/CaptureCamera.kt index 56f2a710..77b3c955 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/certification/model/camera/CaptureCamera.kt +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/model/camera/CaptureCamera.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.certification.model.camera +package com.twix.photolog.capture.model.camera import android.content.ContentValues import android.content.Context @@ -15,7 +15,7 @@ import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.lifecycle.awaitInstance import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner -import com.twix.task_certification.certification.model.TorchStatus +import com.twix.photolog.capture.model.TorchStatus import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -136,7 +136,7 @@ class CaptureCamera( private const val IMAGE_MIME_TYPE = "image/jpeg" private const val IMAGE_NAME = "task_%d" - private const val IMAGE_PATH = "Pictures/TaskCertification" + private const val IMAGE_PATH = "Pictures/Photolog" private const val URI_NOT_FOUND_EXCEPTION = "촬영한 이미지의 Uri를 찾을 수 없습니다" } diff --git a/feature/photolog/capture/src/main/java/com/twix/photolog/capture/navigation/PhotologCaptureNavGraph.kt b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/navigation/PhotologCaptureNavGraph.kt new file mode 100644 index 00000000..5e7d8938 --- /dev/null +++ b/feature/photolog/capture/src/main/java/com/twix/photolog/capture/navigation/PhotologCaptureNavGraph.kt @@ -0,0 +1,47 @@ +package com.twix.photolog.capture.navigation + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavType +import androidx.navigation.compose.composable +import androidx.navigation.navArgument +import com.twix.navigation.NavRoutes +import com.twix.navigation.base.NavGraphContributor +import com.twix.photolog.capture.PhotologCaptureRoute + +object PhotologCaptureNavGraph : NavGraphContributor { + override val graphRoute: NavRoutes + get() = NavRoutes.PhotologRoute + override val startDestination: String + get() = NavRoutes.PhotologRoute.route + + override fun NavGraphBuilder.registerGraph(navController: NavHostController) { + composable( + route = NavRoutes.PhotologRoute.route, + arguments = + listOf( + navArgument(NavRoutes.PhotologRoute.ARG_DATA) { + type = NavType.StringType + }, + ), + ) { + PhotologCaptureRoute( + navigateToBack = navController::popBackStack, + navigateToDetail = { goalId, date, betweenUs -> + navController.navigate( + NavRoutes.PhotologDetailRoute.createRoute( + goalId = goalId, + date = date, + betweenUs = betweenUs.name, + ), + ) { + popUpTo(NavRoutes.PhotologDetailRoute.route) { + inclusive = true + } + launchSingleTop = true + } + }, + ) + } + } +} diff --git a/feature/photolog/detail/.gitignore b/feature/photolog/detail/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/feature/photolog/detail/.gitignore @@ -0,0 +1 @@ +/build diff --git a/feature/photolog/detail/build.gradle.kts b/feature/photolog/detail/build.gradle.kts new file mode 100644 index 00000000..7d3565cf --- /dev/null +++ b/feature/photolog/detail/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + alias(libs.plugins.twix.feature) +} + +android { + namespace = "com.twix.photolog.detail" +} diff --git a/feature/photolog/detail/consumer-rules.pro b/feature/photolog/detail/consumer-rules.pro new file mode 100644 index 00000000..fb164d66 --- /dev/null +++ b/feature/photolog/detail/consumer-rules.pro @@ -0,0 +1 @@ +# Add project specific ProGuard rules here. diff --git a/feature/photolog/detail/proguard-rules.pro b/feature/photolog/detail/proguard-rules.pro new file mode 100644 index 00000000..fb164d66 --- /dev/null +++ b/feature/photolog/detail/proguard-rules.pro @@ -0,0 +1 @@ +# Add project specific ProGuard rules here. diff --git a/feature/photolog/detail/src/main/AndroidManifest.xml b/feature/photolog/detail/src/main/AndroidManifest.xml new file mode 100644 index 00000000..8072ee00 --- /dev/null +++ b/feature/photolog/detail/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/TaskCertificationDetail.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetail.kt similarity index 78% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/TaskCertificationDetail.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetail.kt index 07770dc7..a232fde8 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/TaskCertificationDetail.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetail.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail +package com.twix.photolog.detail import android.Manifest import androidx.activity.compose.rememberLauncherForActivityResult @@ -29,15 +29,15 @@ import com.twix.designsystem.extension.showCameraPermissionToastWithNavigateToSe import com.twix.designsystem.theme.CommonColor import com.twix.designsystem.theme.TwixTheme import com.twix.domain.model.enums.GoalReactionType -import com.twix.task_certification.detail.component.TaskCertificationCardContent -import com.twix.task_certification.detail.component.TaskCertificationDetailTopBar -import com.twix.task_certification.detail.component.reaction.ReactionContent -import com.twix.task_certification.detail.component.reaction.ReactionEffect -import com.twix.task_certification.detail.component.reaction.ReactionEffectSpec -import com.twix.task_certification.detail.contract.TaskCertificationDetailIntent -import com.twix.task_certification.detail.contract.TaskCertificationDetailSideEffect -import com.twix.task_certification.detail.contract.TaskCertificationDetailUiState -import com.twix.task_certification.detail.preview.TaskCertificationDetailPreviewProvider +import com.twix.photolog.detail.component.PhotologCardContent +import com.twix.photolog.detail.component.PhotologDetailTopBar +import com.twix.photolog.detail.component.reaction.ReactionContent +import com.twix.photolog.detail.component.reaction.ReactionEffect +import com.twix.photolog.detail.component.reaction.ReactionEffectSpec +import com.twix.photolog.detail.contract.PhotologDetailIntent +import com.twix.photolog.detail.contract.PhotologDetailSideEffect +import com.twix.photolog.detail.contract.PhotologDetailUiState +import com.twix.photolog.detail.preview.PhotologDetailPreviewProvider import com.twix.ui.base.ObserveAsEvents import com.twix.ui.extension.findActivity import com.twix.ui.extension.hasCameraPermission @@ -47,12 +47,12 @@ import org.koin.compose.koinInject import java.time.LocalDate @Composable -fun TaskCertificationDetailRoute( +fun PhotologDetailRoute( navigateToBack: () -> Unit, navigateToCertification: (Long, LocalDate) -> Unit, navigateToEditor: (Long, LocalDate) -> Unit, toastManager: ToastManager = koinInject(), - viewModel: TaskCertificationDetailViewModel = koinViewModel(), + viewModel: PhotologDetailViewModel = koinViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() val context = LocalContext.current @@ -61,13 +61,13 @@ fun TaskCertificationDetailRoute( ObserveAsEvents(viewModel.sideEffect) { sideEffect -> when (sideEffect) { - is TaskCertificationDetailSideEffect.ShowToast -> { + is PhotologDetailSideEffect.ShowToast -> { toastManager.tryShow( ToastData(currentContext.getString(sideEffect.message), sideEffect.type), ) } - is TaskCertificationDetailSideEffect.ShowPokeToast -> { + is PhotologDetailSideEffect.ShowPokeToast -> { toastManager.tryShow( ToastData(sideEffect.message, ToastType.SUCCESS), ) @@ -110,7 +110,7 @@ fun TaskCertificationDetailRoute( val density = LocalDensity.current val screenHeightPx = with(density) { maxHeight.toPx() } - TaskCertificationDetailScreen( + PhotologDetailScreen( uiState = uiState, onBack = navigateToBack, onClickModify = { @@ -119,7 +119,7 @@ fun TaskCertificationDetailRoute( uiState.selectedDate, ) }, - onClickReaction = { viewModel.dispatch(TaskCertificationDetailIntent.Reaction(it)) }, + onClickReaction = { viewModel.dispatch(PhotologDetailIntent.Reaction(it)) }, onClickUpload = { if (currentContext.hasCameraPermission()) { navigateToCertification(uiState.goalId, uiState.selectedDate) @@ -127,8 +127,8 @@ fun TaskCertificationDetailRoute( permissionLauncher.launch(Manifest.permission.CAMERA) } }, - onPoke = { viewModel.dispatch(TaskCertificationDetailIntent.Poke) }, - onSwipe = { viewModel.dispatch(TaskCertificationDetailIntent.SwipeCard) }, + onPoke = { viewModel.dispatch(PhotologDetailIntent.Poke) }, + onSwipe = { viewModel.dispatch(PhotologDetailIntent.SwipeCard) }, ) if (!uiState.hasShownMyReaction && uiState.isDisplayedMyPhotolog) { val model = uiState.myReaction @@ -143,7 +143,7 @@ fun TaskCertificationDetailRoute( travelDistanceRange = 500..screenHeightPx.toInt(), ), onFinished = { - viewModel.dispatch(TaskCertificationDetailIntent.MyReactionEffected) + viewModel.dispatch(PhotologDetailIntent.MyReactionEffected) }, ) } @@ -152,8 +152,8 @@ fun TaskCertificationDetailRoute( } @Composable -fun TaskCertificationDetailScreen( - uiState: TaskCertificationDetailUiState, +fun PhotologDetailScreen( + uiState: PhotologDetailUiState, onBack: () -> Unit, onClickModify: () -> Unit, onClickReaction: (GoalReactionType) -> Unit, @@ -166,7 +166,7 @@ fun TaskCertificationDetailScreen( .fillMaxSize() .background(color = CommonColor.White), ) { - TaskCertificationDetailTopBar( + PhotologDetailTopBar( title = uiState.goalName, canModify = uiState.canModify, onBack = onBack, @@ -175,7 +175,7 @@ fun TaskCertificationDetailScreen( Spacer(Modifier.height(103.dp)) if (uiState.isLoading) { - TaskCertificationCardContent( + PhotologCardContent( uiState = uiState, onSwipe = onSwipe, onClickUpload = onClickUpload, @@ -194,12 +194,12 @@ fun TaskCertificationDetailScreen( @Preview(showBackground = true) @Composable -private fun TaskCertificationDetailScreenPreview( - @PreviewParameter(TaskCertificationDetailPreviewProvider::class) - uiState: TaskCertificationDetailUiState, +private fun PhotologDetailScreenPreview( + @PreviewParameter(PhotologDetailPreviewProvider::class) + uiState: PhotologDetailUiState, ) { TwixTheme { - TaskCertificationDetailScreen( + PhotologDetailScreen( uiState = uiState, onBack = {}, onClickModify = {}, diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/TaskCertificationDetailViewModel.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetailViewModel.kt similarity index 71% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/TaskCertificationDetailViewModel.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetailViewModel.kt index d24a1e96..3c4cebdc 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/TaskCertificationDetailViewModel.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetailViewModel.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail +package com.twix.photolog.detail import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope @@ -9,13 +9,13 @@ import com.twix.domain.model.enums.GoalReactionType import com.twix.domain.repository.PhotoLogRepository import com.twix.domain.repository.PokeRepository import com.twix.navigation.NavRoutes -import com.twix.task_certification.detail.contract.TaskCertificationDetailIntent -import com.twix.task_certification.detail.contract.TaskCertificationDetailSideEffect -import com.twix.task_certification.detail.contract.TaskCertificationDetailUiState -import com.twix.task_certification.detail.contract.toUiState +import com.twix.photolog.detail.contract.PhotologDetailIntent +import com.twix.photolog.detail.contract.PhotologDetailSideEffect +import com.twix.photolog.detail.contract.PhotologDetailUiState +import com.twix.photolog.detail.contract.toUiState import com.twix.ui.base.BaseViewModel import com.twix.util.bus.GoalRefreshBus -import com.twix.util.bus.TaskCertificationRefreshBus +import com.twix.util.bus.PhotologRefreshBus import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow @@ -25,31 +25,31 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch import java.time.LocalDate -class TaskCertificationDetailViewModel( +class PhotologDetailViewModel( private val photologRepository: PhotoLogRepository, private val pokeRepository: PokeRepository, - private val detailRefreshBus: TaskCertificationRefreshBus, + private val detailRefreshBus: PhotologRefreshBus, private val goalRefreshBus: GoalRefreshBus, savedStateHandle: SavedStateHandle, -) : BaseViewModel( - TaskCertificationDetailUiState(), +) : BaseViewModel( + PhotologDetailUiState(), ) { private val argGoalId: Long = - savedStateHandle[NavRoutes.TaskCertificationDetailRoute.ARG_GOAL_ID] + savedStateHandle[NavRoutes.PhotologDetailRoute.ARG_GOAL_ID] ?: error(GOAL_ID_NOT_FOUND) private val argTargetDate: LocalDate = LocalDate.parse( - savedStateHandle[NavRoutes.TaskCertificationDetailRoute.ARG_DATE] + savedStateHandle[NavRoutes.PhotologDetailRoute.ARG_DATE] ?: error(TARGET_DATE_NOT_FOUND), ) private val argBetweenUs: String = - savedStateHandle[NavRoutes.TaskCertificationDetailRoute.ARG_BETWEEN_US] + savedStateHandle[NavRoutes.PhotologDetailRoute.ARG_BETWEEN_US] ?: error(BETWEEN_US_NOT_FOUND) private val argIsCompleted: Boolean = - savedStateHandle[NavRoutes.TaskCertificationDetailRoute.ARG_IS_COMPLETED] ?: false + savedStateHandle[NavRoutes.PhotologDetailRoute.ARG_IS_COMPLETED] ?: false private var lastReaction: GoalReactionType? = null @@ -79,7 +79,7 @@ class TaskCertificationDetailViewModel( } }, onError = { - showToast(R.string.task_certification_detail_fetch_photolog_fail, ToastType.ERROR) + showToast(R.string.photolog_detail_fetch_photolog_fail, ToastType.ERROR) }, onFinally = { reduce { copy(isLoading = true) } }, ) @@ -106,7 +106,7 @@ class TaskCertificationDetailViewModel( onSuccess = {}, onError = { rollbackReaction() - showToast(R.string.task_certification_detail_reaction_fail, ToastType.ERROR) + showToast(R.string.photolog_detail_reaction_fail, ToastType.ERROR) }, ) } @@ -121,23 +121,23 @@ class TaskCertificationDetailViewModel( viewModelScope.launch { detailRefreshBus.events.collect { publisher -> when (publisher) { - TaskCertificationRefreshBus.Publisher.PHOTOLOG -> { + PhotologRefreshBus.Publisher.PHOTOLOG -> { fetchPhotolog() goalRefreshBus.notifyGoalListChanged() } - TaskCertificationRefreshBus.Publisher.EDITOR -> fetchPhotolog() + PhotologRefreshBus.Publisher.EDITOR -> fetchPhotolog() } } } } - override suspend fun handleIntent(intent: TaskCertificationDetailIntent) { + override suspend fun handleIntent(intent: PhotologDetailIntent) { when (intent) { - is TaskCertificationDetailIntent.Reaction -> reduceReaction(intent.type) - TaskCertificationDetailIntent.Poke -> pokeToPartner() - TaskCertificationDetailIntent.SwipeCard -> reduceShownCard() - TaskCertificationDetailIntent.MyReactionEffected -> reduceMyReactionShown() + is PhotologDetailIntent.Reaction -> reduceReaction(intent.type) + PhotologDetailIntent.Poke -> pokeToPartner() + PhotologDetailIntent.SwipeCard -> reduceShownCard() + PhotologDetailIntent.MyReactionEffected -> reduceMyReactionShown() } } @@ -150,7 +150,7 @@ class TaskCertificationDetailViewModel( private fun pokeToPartner() { launchResult( block = { pokeRepository.pokeGoal(argGoalId) }, - onSuccess = { tryEmitSideEffect(TaskCertificationDetailSideEffect.ShowPokeToast(it.message)) }, + onSuccess = { tryEmitSideEffect(PhotologDetailSideEffect.ShowPokeToast(it.message)) }, onError = { showToast(R.string.toast_poke_goal_failed, ToastType.ERROR) }, ) } @@ -159,7 +159,7 @@ class TaskCertificationDetailViewModel( reduce { toggleBetweenUs() } } - private fun toggleBetweenUs(): TaskCertificationDetailUiState = + private fun toggleBetweenUs(): PhotologDetailUiState = currentState.copy( currentShow = when (currentState.currentShow) { @@ -176,7 +176,7 @@ class TaskCertificationDetailViewModel( message: Int, type: ToastType, ) { - emitSideEffect(TaskCertificationDetailSideEffect.ShowToast(message, type)) + emitSideEffect(PhotologDetailSideEffect.ShowToast(message, type)) } companion object { diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/TaskCertificationCardContent.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/PhotologCardContent.kt similarity index 80% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/TaskCertificationCardContent.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/PhotologCardContent.kt index 0f865749..d8768c55 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/TaskCertificationCardContent.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/PhotologCardContent.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component +package com.twix.photolog.detail.component import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box @@ -17,14 +17,14 @@ import com.twix.designsystem.components.photolog.BackgroundCard import com.twix.designsystem.components.photolog.ForegroundCard import com.twix.designsystem.theme.TwixTheme import com.twix.domain.model.enums.BetweenUs -import com.twix.task_certification.detail.component.reaction.ReactionUiModel -import com.twix.task_certification.detail.component.swipe.SwipeableCard -import com.twix.task_certification.detail.contract.TaskCertificationDetailUiState -import com.twix.task_certification.detail.preview.TaskCertificationDetailPreviewProvider +import com.twix.photolog.detail.component.reaction.ReactionUiModel +import com.twix.photolog.detail.component.swipe.SwipeableCard +import com.twix.photolog.detail.contract.PhotologDetailUiState +import com.twix.photolog.detail.preview.PhotologDetailPreviewProvider @Composable -internal fun TaskCertificationCardContent( - uiState: TaskCertificationDetailUiState, +internal fun PhotologCardContent( + uiState: PhotologDetailUiState, onSwipe: () -> Unit, onClickUpload: () -> Unit, onPoke: () -> Unit, @@ -34,7 +34,7 @@ internal fun TaskCertificationCardContent( uploadedAt = uiState.displayedGoalUpdateAt, actionLabel = when (uiState.currentShow) { - BetweenUs.ME -> stringResource(R.string.task_certification_take_picture) + BetweenUs.ME -> stringResource(R.string.photolog_take_picture) BetweenUs.PARTNER -> stringResource(R.string.action_poke) }, rotation = if (uiState.isDisplayedMyPhotolog) -8f else 0f, @@ -96,12 +96,12 @@ private fun MyReactionBadge( @Preview(showBackground = true) @Composable -private fun TaskCertificationCardContentPreview( - @PreviewParameter(TaskCertificationDetailPreviewProvider::class) - uiState: TaskCertificationDetailUiState, +private fun PhotologCardContentPreview( + @PreviewParameter(PhotologDetailPreviewProvider::class) + uiState: PhotologDetailUiState, ) { TwixTheme { - TaskCertificationCardContent( + PhotologCardContent( uiState = uiState.copy(isLoading = true), onSwipe = {}, onClickUpload = {}, diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/TaskCertificationDetailTopBar.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/PhotologDetailTopBar.kt similarity index 92% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/TaskCertificationDetailTopBar.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/PhotologDetailTopBar.kt index 4ee17ab4..4e14cc9c 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/TaskCertificationDetailTopBar.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/PhotologDetailTopBar.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component +package com.twix.photolog.detail.component import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -24,7 +24,7 @@ import com.twix.domain.model.enums.AppTextStyle import com.twix.ui.extension.noRippleClickable @Composable -internal fun TaskCertificationDetailTopBar( +internal fun PhotologDetailTopBar( title: String, canModify: Boolean, onBack: () -> Unit, @@ -67,17 +67,17 @@ internal fun TaskCertificationDetailTopBar( @Preview @Composable -fun TaskCertificationDetailTopBarPreview() { +fun PhotologDetailTopBarPreview() { TwixTheme { Column { - TaskCertificationDetailTopBar( + PhotologDetailTopBar( title = "목표 인증", canModify = true, onBack = {}, onClickModify = {}, ) - TaskCertificationDetailTopBar( + PhotologDetailTopBar( title = "목표 인증", canModify = false, onBack = {}, diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionBar.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionBar.kt similarity index 98% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionBar.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionBar.kt index cfdcf082..3d62265c 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionBar.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionBar.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.reaction +package com.twix.photolog.detail.component.reaction import androidx.compose.foundation.Image import androidx.compose.foundation.background diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionContent.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionContent.kt similarity index 96% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionContent.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionContent.kt index 75da1cad..c6f24ae1 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionContent.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionContent.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.reaction +package com.twix.photolog.detail.component.reaction import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionEffect.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionEffect.kt similarity index 99% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionEffect.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionEffect.kt index 95ecbf97..af7fb7f7 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionEffect.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionEffect.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.reaction +package com.twix.photolog.detail.component.reaction import androidx.compose.animation.core.FastOutLinearInEasing import androidx.compose.animation.core.LinearOutSlowInEasing diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionEffectSpec.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionEffectSpec.kt similarity index 91% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionEffectSpec.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionEffectSpec.kt index 455b1fdf..d0ceefbd 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionEffectSpec.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionEffectSpec.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.reaction +package com.twix.photolog.detail.component.reaction /** * ReactionEffect 애니메이션 설정 값 묶음. diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionParticle.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionParticle.kt similarity index 87% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionParticle.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionParticle.kt index 43b72f30..b9ca5557 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionParticle.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionParticle.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.reaction +package com.twix.photolog.detail.component.reaction import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationVector1D diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionUiModel.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionUiModel.kt similarity index 92% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionUiModel.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionUiModel.kt index 2961c377..72778711 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/reaction/ReactionUiModel.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/reaction/ReactionUiModel.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.reaction +package com.twix.photolog.detail.component.reaction import com.twix.designsystem.R import com.twix.domain.model.enums.GoalReactionType diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/swipe/SwipeCardSpec.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/swipe/SwipeCardSpec.kt similarity index 92% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/swipe/SwipeCardSpec.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/swipe/SwipeCardSpec.kt index 54a445bd..3ad087cd 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/swipe/SwipeCardSpec.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/swipe/SwipeCardSpec.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.swipe +package com.twix.photolog.detail.component.swipe import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/swipe/SwipeableCard.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/swipe/SwipeableCard.kt similarity index 99% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/component/swipe/SwipeableCard.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/swipe/SwipeableCard.kt index 90c4bd4b..f5483dca 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/component/swipe/SwipeableCard.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/component/swipe/SwipeableCard.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.detail.component.swipe +package com.twix.photolog.detail.component.swipe import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.spring diff --git a/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailIntent.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailIntent.kt new file mode 100644 index 00000000..67ef0f5d --- /dev/null +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailIntent.kt @@ -0,0 +1,16 @@ +package com.twix.photolog.detail.contract + +import com.twix.domain.model.enums.GoalReactionType +import com.twix.ui.base.Intent + +sealed interface PhotologDetailIntent : Intent { + data class Reaction( + val type: GoalReactionType, + ) : PhotologDetailIntent + + data object Poke : PhotologDetailIntent + + data object SwipeCard : PhotologDetailIntent + + data object MyReactionEffected : PhotologDetailIntent +} diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailSideEffect.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailSideEffect.kt similarity index 54% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailSideEffect.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailSideEffect.kt index 92532bfb..ccb60416 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailSideEffect.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailSideEffect.kt @@ -1,15 +1,15 @@ -package com.twix.task_certification.detail.contract +package com.twix.photolog.detail.contract import com.twix.designsystem.components.toast.model.ToastType import com.twix.ui.base.SideEffect -sealed interface TaskCertificationDetailSideEffect : SideEffect { +sealed interface PhotologDetailSideEffect : SideEffect { data class ShowToast( val message: Int, val type: ToastType, - ) : TaskCertificationDetailSideEffect + ) : PhotologDetailSideEffect data class ShowPokeToast( val message: String, - ) : TaskCertificationDetailSideEffect + ) : PhotologDetailSideEffect } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailUiState.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailUiState.kt similarity index 95% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailUiState.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailUiState.kt index f5d70449..097d5f20 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailUiState.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailUiState.kt @@ -1,17 +1,17 @@ -package com.twix.task_certification.detail.contract +package com.twix.photolog.detail.contract import androidx.compose.runtime.Immutable import com.twix.domain.model.enums.BetweenUs import com.twix.domain.model.enums.GoalIconType import com.twix.domain.model.photolog.PhotoLogs import com.twix.domain.model.photolog.PhotologDetail -import com.twix.task_certification.detail.component.reaction.ReactionUiModel +import com.twix.photolog.detail.component.reaction.ReactionUiModel import com.twix.ui.base.State import com.twix.util.RelativeTimeFormatter import java.time.LocalDate @Immutable -data class TaskCertificationDetailUiState( +data class PhotologDetailUiState( val goalId: Long = -1L, val currentShow: BetweenUs = BetweenUs.PARTNER, val selectedDate: LocalDate = LocalDate.now(), @@ -163,13 +163,13 @@ fun PhotoLogs.toUiState( betweenUs: String, selectedDate: LocalDate, isCompletedGoal: Boolean, -): TaskCertificationDetailUiState { +): PhotologDetailUiState { val currentGoalPhotolog = goals.firstOrNull { it.goalId == goalId - } ?: return TaskCertificationDetailUiState() + } ?: return PhotologDetailUiState() - return TaskCertificationDetailUiState( + return PhotologDetailUiState( goalId = goalId, currentShow = BetweenUs.valueOf(betweenUs), selectedDate = selectedDate, diff --git a/feature/photolog/detail/src/main/java/com/twix/photolog/detail/di/PhotologDetailModule.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/di/PhotologDetailModule.kt new file mode 100644 index 00000000..218f9c04 --- /dev/null +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/di/PhotologDetailModule.kt @@ -0,0 +1,15 @@ +package com.twix.photolog.detail.di + +import com.twix.navigation.NavRoutes +import com.twix.navigation.base.NavGraphContributor +import com.twix.photolog.detail.PhotologDetailViewModel +import com.twix.photolog.detail.navigation.PhotologDetailNavGraph +import org.koin.core.module.dsl.viewModelOf +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val photologDetailModule = + module { + viewModelOf(::PhotologDetailViewModel) + single(named(NavRoutes.PhotologDetailRoute.route)) { PhotologDetailNavGraph } + } diff --git a/feature/photolog/detail/src/main/java/com/twix/photolog/detail/navigation/PhotologDetailNavGraph.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/navigation/PhotologDetailNavGraph.kt new file mode 100644 index 00000000..a87681b1 --- /dev/null +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/navigation/PhotologDetailNavGraph.kt @@ -0,0 +1,63 @@ +package com.twix.photolog.detail.navigation + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavType +import androidx.navigation.compose.composable +import androidx.navigation.navArgument +import com.twix.navigation.NavRoutes +import com.twix.navigation.args.DetailNavArgs +import com.twix.navigation.base.NavGraphContributor +import com.twix.photolog.detail.PhotologDetailRoute + +object PhotologDetailNavGraph : NavGraphContributor { + override val graphRoute: NavRoutes + get() = NavRoutes.PhotologGraph + override val startDestination: String + get() = NavRoutes.PhotologDetailRoute.route + + override fun NavGraphBuilder.registerGraph(navController: NavHostController) { + composable( + route = NavRoutes.PhotologDetailRoute.route, + arguments = + listOf( + navArgument(NavRoutes.PhotologDetailRoute.ARG_GOAL_ID) { + type = NavType.LongType + }, + navArgument(NavRoutes.PhotologDetailRoute.ARG_DATE) { + type = NavType.StringType + }, + navArgument(NavRoutes.PhotologDetailRoute.ARG_BETWEEN_US) { + type = NavType.StringType + }, + navArgument(NavRoutes.PhotologDetailRoute.ARG_IS_COMPLETED) { + type = NavType.BoolType + defaultValue = false + }, + ), + ) { + PhotologDetailRoute( + navigateToBack = navController::popBackStack, + navigateToCertification = { goalId, date -> + val destination = + NavRoutes.PhotologRoute.createRoute( + DetailNavArgs( + goalId = goalId, + from = NavRoutes.PhotologRoute.From.DETAIL, + selectedDate = date.toString(), + ), + ) + navController.navigate(destination) + }, + navigateToEditor = { goalId, date -> + navController.navigate( + NavRoutes.PhotologEditorRoute.createRoute( + goalId = goalId, + date = date, + ), + ) + }, + ) + } + } +} diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/preview/TaskCertificationDetailPreviewProvider.kt b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/preview/PhotologDetailPreviewProvider.kt similarity index 85% rename from feature/task-certification/src/main/java/com/twix/task_certification/detail/preview/TaskCertificationDetailPreviewProvider.kt rename to feature/photolog/detail/src/main/java/com/twix/photolog/detail/preview/PhotologDetailPreviewProvider.kt index 03eebdbf..a4d06649 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/preview/TaskCertificationDetailPreviewProvider.kt +++ b/feature/photolog/detail/src/main/java/com/twix/photolog/detail/preview/PhotologDetailPreviewProvider.kt @@ -1,16 +1,16 @@ -package com.twix.task_certification.detail.preview +package com.twix.photolog.detail.preview import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.twix.domain.model.enums.BetweenUs import com.twix.domain.model.enums.GoalIconType import com.twix.domain.model.enums.GoalReactionType import com.twix.domain.model.photolog.PhotologDetail -import com.twix.task_certification.detail.contract.TaskCertificationDetailUiState +import com.twix.photolog.detail.contract.PhotologDetailUiState -class TaskCertificationDetailPreviewProvider : PreviewParameterProvider { +class PhotologDetailPreviewProvider : PreviewParameterProvider { override val values = sequenceOf( - TaskCertificationDetailUiState( + PhotologDetailUiState( goalId = 1, currentShow = BetweenUs.ME, myNickname = "나", @@ -30,7 +30,7 @@ class TaskCertificationDetailPreviewProvider : PreviewParameterProvider + diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/TaskCertificationEditorRoute.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorRoute.kt similarity index 85% rename from feature/task-certification/src/main/java/com/twix/task_certification/editor/TaskCertificationEditorRoute.kt rename to feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorRoute.kt index 998be202..8d7c48f1 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/TaskCertificationEditorRoute.kt +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorRoute.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.editor +package com.twix.photolog.editor import android.Manifest import androidx.activity.compose.rememberLauncherForActivityResult @@ -38,11 +38,11 @@ import com.twix.designsystem.components.toast.model.ToastType import com.twix.designsystem.extension.showCameraPermissionToastWithNavigateToSettingAction import com.twix.designsystem.theme.CommonColor import com.twix.designsystem.theme.TwixTheme -import com.twix.task_certification.editor.component.RetakeButton -import com.twix.task_certification.editor.component.TaskCertificationEditorTopBar -import com.twix.task_certification.editor.contract.TaskCertificationEditorIntent -import com.twix.task_certification.editor.contract.TaskCertificationEditorSideEffect -import com.twix.task_certification.editor.contract.TaskCertificationEditorUiState +import com.twix.photolog.editor.component.PhotologEditorTopBar +import com.twix.photolog.editor.component.RetakeButton +import com.twix.photolog.editor.contract.PhotologEditorIntent +import com.twix.photolog.editor.contract.PhotologEditorSideEffect +import com.twix.photolog.editor.contract.PhotologEditorUiState import com.twix.ui.base.ObserveAsEvents import com.twix.ui.extension.findActivity import com.twix.ui.extension.hasCameraPermission @@ -53,11 +53,11 @@ import org.koin.compose.koinInject import java.time.LocalDate @Composable -fun TaskCertificationEditorRoute( +fun PhotologEditorRoute( navigateToBack: () -> Unit, navigateToCertification: (Long, Long, String, LocalDate) -> Unit, toastManager: ToastManager = koinInject(), - viewModel: TaskCertificationEditorViewModel = koinViewModel(), + viewModel: PhotologEditorViewModel = koinViewModel(), ) { val context = LocalContext.current val currentContext by rememberUpdatedState(context) @@ -66,13 +66,18 @@ fun TaskCertificationEditorRoute( ObserveAsEvents(viewModel.sideEffect) { sideEffect -> when (sideEffect) { - is TaskCertificationEditorSideEffect.ShowToast -> + is PhotologEditorSideEffect.ShowToast -> toastManager.tryShow( ToastData( currentContext.getString(sideEffect.message), sideEffect.type, ), ) + is PhotologEditorSideEffect.ShowPokeToast -> { + toastManager.tryShow( + ToastData(sideEffect.message, ToastType.SUCCESS), + ) + } } } @@ -112,12 +117,12 @@ fun TaskCertificationEditorRoute( } } - TaskCertificationEditorScreen( + PhotologEditorScreen( uiState = uiState, onBack = navigateToBack, - onClickSave = { viewModel.dispatch(TaskCertificationEditorIntent.Save) }, - onFocusChanged = { viewModel.dispatch(TaskCertificationEditorIntent.CommentFocusChanged(it)) }, - onCommentChanged = { viewModel.dispatch(TaskCertificationEditorIntent.ModifyComment(it)) }, + onClickSave = { viewModel.dispatch(PhotologEditorIntent.Save) }, + onFocusChanged = { viewModel.dispatch(PhotologEditorIntent.CommentFocusChanged(it)) }, + onCommentChanged = { viewModel.dispatch(PhotologEditorIntent.ModifyComment(it)) }, onClickRetake = { if (currentContext.hasCameraPermission()) { navigateToCertification( @@ -134,8 +139,8 @@ fun TaskCertificationEditorRoute( } @Composable -fun TaskCertificationEditorScreen( - uiState: TaskCertificationEditorUiState, +fun PhotologEditorScreen( + uiState: PhotologEditorUiState, onBack: () -> Unit, onClickSave: () -> Unit, onCommentChanged: (String) -> Unit, @@ -153,7 +158,7 @@ fun TaskCertificationEditorScreen( .noRippleClickable { focusManager.clearFocus() }, ) { Column { - TaskCertificationEditorTopBar( + PhotologEditorTopBar( title = uiState.goalName, onBack = onBack, onClickSave = onClickSave, @@ -199,11 +204,11 @@ fun TaskCertificationEditorScreen( @Preview(showBackground = true) @Composable -private fun TaskCertificationEditorScreenPreview() { +private fun PhotologEditorScreenPreview() { TwixTheme { - TaskCertificationEditorScreen( + PhotologEditorScreen( uiState = - TaskCertificationEditorUiState( + PhotologEditorUiState( nickname = "페토", goalName = "아이스크림 먹기", ), diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/TaskCertificationEditorViewModel.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorViewModel.kt similarity index 57% rename from feature/task-certification/src/main/java/com/twix/task_certification/editor/TaskCertificationEditorViewModel.kt rename to feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorViewModel.kt index 1f60f83b..b7f0002d 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/TaskCertificationEditorViewModel.kt +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorViewModel.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.editor +package com.twix.photolog.editor import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope @@ -6,42 +6,42 @@ import com.twix.designsystem.R import com.twix.designsystem.components.toast.model.ToastType import com.twix.domain.repository.PhotoLogRepository import com.twix.navigation.NavRoutes +import com.twix.photolog.editor.contract.PhotologEditorIntent +import com.twix.photolog.editor.contract.PhotologEditorSideEffect +import com.twix.photolog.editor.contract.PhotologEditorUiState +import com.twix.photolog.editor.contract.toEditorUiState import com.twix.result.AppResult -import com.twix.task_certification.editor.contract.TaskCertificationEditorIntent -import com.twix.task_certification.editor.contract.TaskCertificationEditorSideEffect -import com.twix.task_certification.editor.contract.TaskCertificationEditorUiState -import com.twix.task_certification.editor.contract.toEditorUiState import com.twix.ui.base.BaseViewModel import com.twix.util.bus.GoalRefreshBus -import com.twix.util.bus.TaskCertificationRefreshBus +import com.twix.util.bus.PhotologRefreshBus import kotlinx.coroutines.launch import java.time.LocalDate -class TaskCertificationEditorViewModel( +class PhotologEditorViewModel( private val photologRepository: PhotoLogRepository, - private val detailRefreshBus: TaskCertificationRefreshBus, + private val detailRefreshBus: PhotologRefreshBus, private val goalRefreshBus: GoalRefreshBus, savedStateHandle: SavedStateHandle, -) : BaseViewModel( - TaskCertificationEditorUiState(), +) : BaseViewModel( + PhotologEditorUiState(), ) { private val argGoalId: Long = - requireNotNull(savedStateHandle[NavRoutes.TaskCertificationEditorRoute.ARG_GOAL_ID]) { GOAL_ID_NOT_FOUND } + requireNotNull(savedStateHandle[NavRoutes.PhotologEditorRoute.ARG_GOAL_ID]) { GOAL_ID_NOT_FOUND } private val argTargetDate: LocalDate = LocalDate.parse( - requireNotNull(savedStateHandle[NavRoutes.TaskCertificationEditorRoute.ARG_DATE]) { TARGET_DATE_NOT_FOUND }, + requireNotNull(savedStateHandle[NavRoutes.PhotologEditorRoute.ARG_DATE]) { TARGET_DATE_NOT_FOUND }, ) init { fetchPhotolog() } - override suspend fun handleIntent(intent: TaskCertificationEditorIntent) { + override suspend fun handleIntent(intent: PhotologEditorIntent) { when (intent) { - is TaskCertificationEditorIntent.CommentFocusChanged -> reduceCommentFocus(intent.isFocused) - is TaskCertificationEditorIntent.ModifyComment -> reduceComment(intent.value) - TaskCertificationEditorIntent.Save -> modifyComment() + is PhotologEditorIntent.CommentFocusChanged -> reduceCommentFocus(intent.isFocused) + is PhotologEditorIntent.ModifyComment -> reduceComment(intent.value) + PhotologEditorIntent.Save -> modifyComment() } } @@ -57,17 +57,17 @@ class TaskCertificationEditorViewModel( if (currentState.comment.canUpload.not()) { showToast(R.string.comment_error_message, ToastType.ERROR) } else if (currentState.isCommentNotChanged) { - showToast(R.string.task_certification_editor_not_modified, ToastType.ERROR) + showToast(R.string.photolog_editor_not_modified, ToastType.ERROR) } else { launchResult( block = { launchModifyComment() }, onSuccess = { - detailRefreshBus.notifyChanged(TaskCertificationRefreshBus.Publisher.EDITOR) + detailRefreshBus.notifyChanged(PhotologRefreshBus.Publisher.EDITOR) goalRefreshBus.notifyGoalListChanged() - showToast(R.string.task_certification_editor_modify_success, ToastType.SUCCESS) + showToast(R.string.photolog_editor_modify_success, ToastType.SUCCESS) }, onError = { - showToast(R.string.task_certification_editor_modify_fail, ToastType.ERROR) + showToast(R.string.photolog_editor_modify_fail, ToastType.ERROR) }, ) } @@ -79,7 +79,7 @@ class TaskCertificationEditorViewModel( ) { viewModelScope.launch { emitSideEffect( - TaskCertificationEditorSideEffect.ShowToast(message, type), + PhotologEditorSideEffect.ShowToast(message, type), ) } } @@ -89,7 +89,7 @@ class TaskCertificationEditorViewModel( block = { photologRepository.fetchPhotologs(argTargetDate, argGoalId) }, onSuccess = { reduce { it.toEditorUiState(argGoalId, argTargetDate) } }, onError = { - showToast(R.string.task_certification_detail_fetch_photolog_fail, ToastType.ERROR) + showToast(R.string.photolog_detail_fetch_photolog_fail, ToastType.ERROR) }, ) } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/component/TaskCertificationEditorTopBar.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/component/PhotologEditorTopBar.kt similarity index 91% rename from feature/task-certification/src/main/java/com/twix/task_certification/editor/component/TaskCertificationEditorTopBar.kt rename to feature/photolog/editor/src/main/java/com/twix/photolog/editor/component/PhotologEditorTopBar.kt index bd3c2084..1f7f8ac8 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/component/TaskCertificationEditorTopBar.kt +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/component/PhotologEditorTopBar.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.editor.component +package com.twix.photolog.editor.component import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -24,7 +24,7 @@ import com.twix.domain.model.enums.AppTextStyle import com.twix.ui.extension.noRippleClickable @Composable -internal fun TaskCertificationEditorTopBar( +internal fun PhotologEditorTopBar( title: String, onBack: () -> Unit, onClickSave: () -> Unit, @@ -64,16 +64,16 @@ internal fun TaskCertificationEditorTopBar( @Preview @Composable -fun TaskCertificationEditorTopBarPreview() { +fun PhotologEditorTopBarPreview() { TwixTheme { Column { - TaskCertificationEditorTopBar( + PhotologEditorTopBar( title = "목표 인증", onBack = {}, onClickSave = {}, ) - TaskCertificationEditorTopBar( + PhotologEditorTopBar( title = "목표 인증", onBack = {}, onClickSave = {}, diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/component/RetakeButton.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/component/RetakeButton.kt similarity index 90% rename from feature/task-certification/src/main/java/com/twix/task_certification/editor/component/RetakeButton.kt rename to feature/photolog/editor/src/main/java/com/twix/photolog/editor/component/RetakeButton.kt index c55390cb..7ea34426 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/component/RetakeButton.kt +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/component/RetakeButton.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.editor.component +package com.twix.photolog.editor.component import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -21,7 +21,7 @@ internal fun RetakeButton( modifier: Modifier = Modifier, ) { AppRoundButton( - text = stringResource(R.string.task_certification_editor_retake), + text = stringResource(R.string.photolog_editor_retake), textColor = GrayColor.C500, backgroundColor = CommonColor.White, modifier = diff --git a/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorIntent.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorIntent.kt new file mode 100644 index 00000000..b748f8ed --- /dev/null +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorIntent.kt @@ -0,0 +1,15 @@ +package com.twix.photolog.editor.contract + +import com.twix.ui.base.Intent + +sealed interface PhotologEditorIntent : Intent { + data object Save : PhotologEditorIntent + + data class CommentFocusChanged( + val isFocused: Boolean, + ) : PhotologEditorIntent + + data class ModifyComment( + val value: String, + ) : PhotologEditorIntent +} diff --git a/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorSideEffect.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorSideEffect.kt new file mode 100644 index 00000000..ea0ff1d6 --- /dev/null +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorSideEffect.kt @@ -0,0 +1,15 @@ +package com.twix.photolog.editor.contract + +import com.twix.designsystem.components.toast.model.ToastType +import com.twix.ui.base.SideEffect + +sealed interface PhotologEditorSideEffect : SideEffect { + data class ShowToast( + val message: Int, + val type: ToastType, + ) : PhotologEditorSideEffect + + data class ShowPokeToast( + val message: String, + ) : PhotologEditorSideEffect +} diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorUiState.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorUiState.kt similarity index 88% rename from feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorUiState.kt rename to feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorUiState.kt index 9155c52c..22099d68 100644 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorUiState.kt +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorUiState.kt @@ -1,4 +1,4 @@ -package com.twix.task_certification.editor.contract +package com.twix.photolog.editor.contract import androidx.compose.runtime.Immutable import com.twix.designsystem.components.comment.model.CommentUiModel @@ -7,7 +7,7 @@ import com.twix.ui.base.State import java.time.LocalDate @Immutable -data class TaskCertificationEditorUiState( +data class PhotologEditorUiState( val goalId: Long = -1, val photologId: Long = -1, val selectedDate: LocalDate = LocalDate.now(), @@ -31,11 +31,11 @@ data class TaskCertificationEditorUiState( internal fun PhotoLogs.toEditorUiState( goalId: Long, selectedDate: LocalDate, -): TaskCertificationEditorUiState { +): PhotologEditorUiState { val goalPhotolog = goals.firstOrNull { it.goalId == goalId } val myPhotolog = goalPhotolog?.myPhotolog - return TaskCertificationEditorUiState( + return PhotologEditorUiState( goalId = goalId, photologId = myPhotolog?.photologId ?: -1, selectedDate = selectedDate, diff --git a/feature/photolog/editor/src/main/java/com/twix/photolog/editor/di/PhotologEditorModule.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/di/PhotologEditorModule.kt new file mode 100644 index 00000000..0d6da520 --- /dev/null +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/di/PhotologEditorModule.kt @@ -0,0 +1,15 @@ +package com.twix.photolog.editor.di + +import com.twix.navigation.NavRoutes +import com.twix.navigation.base.NavGraphContributor +import com.twix.photolog.editor.PhotologEditorViewModel +import com.twix.photolog.editor.navigation.PhotologEditorNavGraph +import org.koin.core.module.dsl.viewModelOf +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val photologEditorModule = + module { + viewModelOf(::PhotologEditorViewModel) + single(named(NavRoutes.PhotologEditorRoute.route)) { PhotologEditorNavGraph } + } diff --git a/feature/photolog/editor/src/main/java/com/twix/photolog/editor/navigation/PhotologEditorNavGraph.kt b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/navigation/PhotologEditorNavGraph.kt new file mode 100644 index 00000000..2233dda2 --- /dev/null +++ b/feature/photolog/editor/src/main/java/com/twix/photolog/editor/navigation/PhotologEditorNavGraph.kt @@ -0,0 +1,50 @@ +package com.twix.photolog.editor.navigation + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavType +import androidx.navigation.compose.composable +import androidx.navigation.navArgument +import com.twix.navigation.NavRoutes +import com.twix.navigation.args.DetailNavArgs +import com.twix.navigation.base.NavGraphContributor +import com.twix.photolog.editor.PhotologEditorRoute + +object PhotologEditorNavGraph : NavGraphContributor { + override val graphRoute: NavRoutes + get() = NavRoutes.PhotologEditorRoute + override val startDestination: String + get() = NavRoutes.PhotologEditorRoute.route + + override fun NavGraphBuilder.registerGraph(navController: NavHostController) { + composable( + route = NavRoutes.PhotologEditorRoute.route, + arguments = + listOf( + navArgument(NavRoutes.PhotologEditorRoute.ARG_GOAL_ID) { + type = NavType.LongType + }, + navArgument(NavRoutes.PhotologEditorRoute.ARG_DATE) { + type = NavType.StringType + }, + ), + ) { + PhotologEditorRoute( + navigateToBack = navController::popBackStack, + navigateToCertification = { goalId, photologId, comment, selectedDate -> + val destination = + NavRoutes.PhotologRoute.createRoute( + DetailNavArgs( + goalId = goalId, + from = NavRoutes.PhotologRoute.From.EDITOR, + photologId = photologId, + selectedDate = selectedDate.toString(), + comment = comment, + ), + ) + navController.navigate(destination) + }, + ) + } + } +} diff --git a/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailScreen.kt b/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailScreen.kt index 35dd2e97..35996205 100644 --- a/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailScreen.kt +++ b/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailScreen.kt @@ -61,7 +61,7 @@ import java.time.LocalDate fun StatsDetailRoute( onBack: () -> Unit, navigateToGoalEditor: (Long) -> Unit, - navigateToTaskCertificationDetail: (Long, LocalDate, BetweenUs, Boolean) -> Unit, + navigateToPhotologDetail: (Long, LocalDate, BetweenUs, Boolean) -> Unit, toastManager: ToastManager = koinInject(), viewModel: StatsDetailViewModel = koinViewModel(), ) { @@ -74,8 +74,8 @@ fun StatsDetailRoute( when (sideEffect) { StatsDetailSideEffect.NavigateToBack -> onBack() is StatsDetailSideEffect.NavigateToGoalEditor -> navigateToGoalEditor(sideEffect.goalId) - is StatsDetailSideEffect.NavigateToTaskCertificationDetail -> - navigateToTaskCertificationDetail( + is StatsDetailSideEffect.NavigateToPhotologDetail -> + navigateToPhotologDetail( sideEffect.goalId, sideEffect.date, sideEffect.betweenUs, diff --git a/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailViewModel.kt b/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailViewModel.kt index 9e578d2e..aedbd4da 100644 --- a/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailViewModel.kt +++ b/feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailViewModel.kt @@ -193,7 +193,7 @@ class StatsDetailViewModel( override suspend fun handleIntent(intent: StatsDetailIntent) { when (intent) { - is StatsDetailIntent.SelectDate -> navigateToTaskCertificationDetail(intent.date) + is StatsDetailIntent.SelectDate -> navigateToPhotologDetail(intent.date) StatsDetailIntent.GoalEdit -> navigateToGoalEditor() StatsDetailIntent.PreviousMonth -> fetchPreviousMonth() StatsDetailIntent.NextMonth -> fetchNextMonth() @@ -202,12 +202,12 @@ class StatsDetailViewModel( } } - private suspend fun navigateToTaskCertificationDetail(selectedDate: LocalDate) { + private suspend fun navigateToPhotologDetail(selectedDate: LocalDate) { val completedDate = findCompletedDate(selectedDate) ?: return if (completedDate.myImageUrl == null && completedDate.partnerImageUrl == null) return emitSideEffect( - StatsDetailSideEffect.NavigateToTaskCertificationDetail( + StatsDetailSideEffect.NavigateToPhotologDetail( goalId = argGoalId, date = selectedDate, betweenUs = determineDisplayBetweenUs(completedDate.date), diff --git a/feature/stats/detail/src/main/java/com/twix/stats/detail/contract/StatsDetailSideEffect.kt b/feature/stats/detail/src/main/java/com/twix/stats/detail/contract/StatsDetailSideEffect.kt index d7c2d393..767685e8 100644 --- a/feature/stats/detail/src/main/java/com/twix/stats/detail/contract/StatsDetailSideEffect.kt +++ b/feature/stats/detail/src/main/java/com/twix/stats/detail/contract/StatsDetailSideEffect.kt @@ -17,7 +17,7 @@ sealed interface StatsDetailSideEffect : SideEffect { val goalId: Long, ) : StatsDetailSideEffect - data class NavigateToTaskCertificationDetail( + data class NavigateToPhotologDetail( val goalId: Long, val date: LocalDate, val betweenUs: BetweenUs, diff --git a/feature/stats/detail/src/main/java/com/twix/stats/detail/navigation/StatsDetailGraph.kt b/feature/stats/detail/src/main/java/com/twix/stats/detail/navigation/StatsDetailGraph.kt index ef12f777..e5b1f92b 100644 --- a/feature/stats/detail/src/main/java/com/twix/stats/detail/navigation/StatsDetailGraph.kt +++ b/feature/stats/detail/src/main/java/com/twix/stats/detail/navigation/StatsDetailGraph.kt @@ -36,9 +36,9 @@ object StatsDetailGraph : NavGraphContributor { launchSingleTop = true } }, - navigateToTaskCertificationDetail = { goalId, date, betweenUs, isCompleted -> + navigateToPhotologDetail = { goalId, date, betweenUs, isCompleted -> val destination = - NavRoutes.TaskCertificationDetailRoute.createRoute( + NavRoutes.PhotologDetailRoute.createRoute( goalId = goalId, date = date, betweenUs = betweenUs.name, diff --git a/feature/task-certification/.gitignore b/feature/task-certification/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/feature/task-certification/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/feature/task-certification/consumer-rules.pro b/feature/task-certification/consumer-rules.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/feature/task-certification/proguard-rules.pro b/feature/task-certification/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/feature/task-certification/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailIntent.kt b/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailIntent.kt deleted file mode 100644 index 00e57ece..00000000 --- a/feature/task-certification/src/main/java/com/twix/task_certification/detail/contract/TaskCertificationDetailIntent.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.twix.task_certification.detail.contract - -import com.twix.domain.model.enums.GoalReactionType -import com.twix.ui.base.Intent - -sealed interface TaskCertificationDetailIntent : Intent { - data class Reaction( - val type: GoalReactionType, - ) : TaskCertificationDetailIntent - - data object Poke : TaskCertificationDetailIntent - - data object SwipeCard : TaskCertificationDetailIntent - - data object MyReactionEffected : TaskCertificationDetailIntent -} diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/di/TaskCertificationModule.kt b/feature/task-certification/src/main/java/com/twix/task_certification/di/TaskCertificationModule.kt deleted file mode 100644 index fddd2a5a..00000000 --- a/feature/task-certification/src/main/java/com/twix/task_certification/di/TaskCertificationModule.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.twix.task_certification.di - -import com.twix.navigation.NavRoutes -import com.twix.navigation.base.NavGraphContributor -import com.twix.task_certification.certification.TaskCertificationViewModel -import com.twix.task_certification.certification.model.camera.Camera -import com.twix.task_certification.certification.model.camera.CaptureCamera -import com.twix.task_certification.detail.TaskCertificationDetailViewModel -import com.twix.task_certification.editor.TaskCertificationEditorViewModel -import com.twix.task_certification.navigation.TaskCertificationGraph -import org.koin.core.module.dsl.viewModelOf -import org.koin.core.qualifier.named -import org.koin.dsl.module - -val taskCertificationModule = - module { - viewModelOf(::TaskCertificationDetailViewModel) - viewModelOf(::TaskCertificationViewModel) - viewModelOf(::TaskCertificationEditorViewModel) - factory { CaptureCamera(get()) } - single(named(NavRoutes.TaskCertificationRoute.route)) { TaskCertificationGraph } - } diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorIntent.kt b/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorIntent.kt deleted file mode 100644 index 42bf9693..00000000 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorIntent.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.twix.task_certification.editor.contract - -import com.twix.ui.base.Intent - -sealed interface TaskCertificationEditorIntent : Intent { - data object Save : TaskCertificationEditorIntent - - data class CommentFocusChanged( - val isFocused: Boolean, - ) : TaskCertificationEditorIntent - - data class ModifyComment( - val value: String, - ) : TaskCertificationEditorIntent -} diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorSideEffect.kt b/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorSideEffect.kt deleted file mode 100644 index f46c5660..00000000 --- a/feature/task-certification/src/main/java/com/twix/task_certification/editor/contract/TaskCertificationEditorSideEffect.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.twix.task_certification.editor.contract - -import com.twix.designsystem.components.toast.model.ToastType -import com.twix.ui.base.SideEffect - -sealed interface TaskCertificationEditorSideEffect : SideEffect { - data class ShowToast( - val message: Int, - val type: ToastType, - ) : TaskCertificationEditorSideEffect -} diff --git a/feature/task-certification/src/main/java/com/twix/task_certification/navigation/TaskCertificationGraph.kt b/feature/task-certification/src/main/java/com/twix/task_certification/navigation/TaskCertificationGraph.kt deleted file mode 100644 index 30cb6ed1..00000000 --- a/feature/task-certification/src/main/java/com/twix/task_certification/navigation/TaskCertificationGraph.kt +++ /dev/null @@ -1,129 +0,0 @@ -package com.twix.task_certification.navigation - -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavHostController -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import androidx.navigation.navigation -import com.twix.navigation.NavRoutes -import com.twix.navigation.args.DetailNavArgs -import com.twix.navigation.base.NavGraphContributor -import com.twix.task_certification.certification.TaskCertificationRoute -import com.twix.task_certification.detail.TaskCertificationDetailRoute -import com.twix.task_certification.editor.TaskCertificationEditorRoute - -object TaskCertificationGraph : NavGraphContributor { - override val graphRoute: NavRoutes - get() = NavRoutes.TaskCertificationGraph - override val startDestination: String - get() = NavRoutes.TaskCertificationDetailRoute.route - - override fun NavGraphBuilder.registerGraph(navController: NavHostController) { - navigation( - route = graphRoute.route, - startDestination = startDestination, - ) { - composable( - route = NavRoutes.TaskCertificationDetailRoute.route, - arguments = - listOf( - navArgument(NavRoutes.TaskCertificationDetailRoute.ARG_GOAL_ID) { - type = NavType.LongType - }, - navArgument(NavRoutes.TaskCertificationDetailRoute.ARG_DATE) { - type = NavType.StringType - }, - navArgument(NavRoutes.TaskCertificationDetailRoute.ARG_BETWEEN_US) { - type = NavType.StringType - }, - navArgument(NavRoutes.TaskCertificationDetailRoute.ARG_IS_COMPLETED) { - type = NavType.BoolType - defaultValue = false - }, - ), - ) { - TaskCertificationDetailRoute( - navigateToBack = navController::popBackStack, - navigateToCertification = { goalId, date -> - val destination = - NavRoutes.TaskCertificationRoute.createRoute( - DetailNavArgs( - goalId = goalId, - from = NavRoutes.TaskCertificationRoute.From.DETAIL, - selectedDate = date.toString(), - ), - ) - navController.navigate(destination) - }, - navigateToEditor = { goalId, date -> - navController.navigate( - NavRoutes.TaskCertificationEditorRoute.createRoute( - goalId = goalId, - date = date, - ), - ) - }, - ) - } - - composable( - route = NavRoutes.TaskCertificationEditorRoute.route, - arguments = - listOf( - navArgument(NavRoutes.TaskCertificationEditorRoute.ARG_GOAL_ID) { - type = NavType.LongType - }, - navArgument(NavRoutes.TaskCertificationEditorRoute.ARG_DATE) { - type = NavType.StringType - }, - ), - ) { - TaskCertificationEditorRoute( - navigateToBack = navController::popBackStack, - navigateToCertification = { goalId, photologId, comment, selectedDate -> - val destination = - NavRoutes.TaskCertificationRoute.createRoute( - DetailNavArgs( - goalId = goalId, - from = NavRoutes.TaskCertificationRoute.From.EDITOR, - photologId = photologId, - selectedDate = selectedDate.toString(), - comment = comment, - ), - ) - navController.navigate(destination) - }, - ) - } - - composable( - route = NavRoutes.TaskCertificationRoute.route, - arguments = - listOf( - navArgument(NavRoutes.TaskCertificationRoute.ARG_DATA) { - type = NavType.StringType - }, - ), - ) { - TaskCertificationRoute( - navigateToBack = navController::popBackStack, - navigateToDetail = { goalId, date, betweenUs -> - navController.navigate( - NavRoutes.TaskCertificationDetailRoute.createRoute( - goalId = goalId, - date = date, - betweenUs = betweenUs.name, - ), - ) { - popUpTo(NavRoutes.TaskCertificationDetailRoute.route) { - inclusive = true - } - launchSingleTop = true - } - }, - ) - } - } - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 5db1e85a..818491b2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -40,7 +40,9 @@ include(":core:design-system") include(":core:network") include(":core:analytics") include(":feature:main") -include(":feature:task-certification") +include(":feature:photolog:capture") +include(":feature:photolog:detail") +include(":feature:photolog:editor") include(":feature:goal-editor") include(":feature:goal-manage") include(":feature:settings")