From 878bf7b59ecede7e1e5a18793c3406c3702b645f Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 1 Sep 2025 22:38:49 +0900 Subject: [PATCH 001/116] =?UTF-8?q?[BOOK-308]=20fix:=20Guest=20Mode?= =?UTF-8?q?=EB=A1=9C=20=EC=95=BD=EA=B4=80=EB=8F=99=EC=9D=98=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=A7=84=EC=9E=85=EC=8B=9C=20goTo=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 백스택이 다 빠져 약관동의 이후 앱이 종료되는 문제 해결 --- .../com/ninecraft/booket/feature/login/LoginPresenter.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt index f0f90cc6..34917f4e 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt @@ -53,7 +53,11 @@ class LoginPresenter @AssistedInject constructor( navigator.popUntil { it == screen.returnToScreen } } } else { - navigator.resetRoot(TermsAgreementScreen(screen.returnToScreen)) + if (screen.returnToScreen == null) { + navigator.resetRoot(TermsAgreementScreen()) + } else { + navigator.goTo(TermsAgreementScreen(screen.returnToScreen)) + } } }.onFailure { exception -> exception.message?.let { Logger.e(it) } From 41235782a8581bc890e9aae40975cf629bf0aee2 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 1 Sep 2025 23:51:48 +0900 Subject: [PATCH 002/116] =?UTF-8?q?[BOOK-308]=20feat:=20splash,=20login,?= =?UTF-8?q?=20termsAgreementScreen=20navigation=20animation=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resetRoot와 비슷한 조건이기 때문에 fadeIn-fadeOut 적용하여 애니메이션 통일성 확보 --- .../com/ninecraft/booket/di/CircuitModule.kt | 2 +- .../booket/di/CrossFadeNavDecorator.kt | 33 ++++++++++++++++++- .../com/ninecraft/booket/splash/SplashUi.kt | 1 - gradle/libs.versions.toml | 2 +- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/ninecraft/booket/di/CircuitModule.kt b/app/src/main/kotlin/com/ninecraft/booket/di/CircuitModule.kt index 87dc4e6f..23df4723 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/di/CircuitModule.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/di/CircuitModule.kt @@ -28,7 +28,7 @@ abstract class CircuitModule { ): Circuit = Circuit.Builder() .addPresenterFactories(presenterFactories) .addUiFactories(uiFactories) - // .setAnimatedNavDecoratorFactory(CrossFadeNavDecoratorFactory()) + .setAnimatedNavDecoratorFactory(CrossFadeNavDecoratorFactory()) .build() } } diff --git a/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt b/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt index a79f90f6..e3808b8c 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt @@ -6,6 +6,9 @@ import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.togetherWith +import com.ninecraft.booket.feature.screens.LoginScreen +import com.ninecraft.booket.feature.screens.SplashScreen +import com.ninecraft.booket.feature.screens.TermsAgreementScreen import com.slack.circuit.backstack.NavArgument import com.slack.circuit.foundation.NavigatorDefaults import com.slack.circuit.foundation.animation.AnimatedNavDecorator @@ -24,6 +27,34 @@ class CrossFadeNavDecorator(private val durationMillis: Int) : override fun AnimatedContentTransitionScope.transitionSpec( animatedNavEvent: AnimatedNavEvent, ): ContentTransform { - return fadeIn(tween(durationMillis)) togetherWith fadeOut(tween(durationMillis)) + val shouldUseFade = shouldUseFadeAnimation(initialState, targetState) + + return if (shouldUseFade) { + fadeIn(tween(durationMillis)) togetherWith fadeOut(tween(durationMillis)) + } else { + // Circuit 기본 애니메이션 사용 + with(NavigatorDefaults.DefaultDecorator()) { + transitionSpec(animatedNavEvent) + } + } + } + + private fun shouldUseFadeAnimation( + initialState: AnimatedNavState, + targetState: AnimatedNavState, + ): Boolean { + val fadeScreens = setOf( + SplashScreen::class, + LoginScreen::class, + TermsAgreementScreen::class, + ) + + val initialScreenClass = initialState.top.screen::class + val targetScreenClass = targetState.top.screen::class + + // 앱 시작시 SplashScreen이 첫 화면인 경우 처리 + val isAppLaunchToSplash = targetScreenClass == SplashScreen::class + + return isAppLaunchToSplash || initialScreenClass in fadeScreens || targetScreenClass in fadeScreens } } diff --git a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt index dd7f9d80..6880687d 100644 --- a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt +++ b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt @@ -1,6 +1,5 @@ package com.ninecraft.booket.splash -import android.R.attr.description import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bf731c1e..a6677fa2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -43,7 +43,7 @@ okhttp = "5.1.0" retrofit = "3.0.0" ## Circuit -circuit = "0.29.1" +circuit = "0.30.0" ## Logging logger = "2.2.0" From 4c4ca06ddaf4ee0491772d87925f5813d5eabafa Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 1 Sep 2025 23:53:45 +0900 Subject: [PATCH 003/116] [BOOK-308] chore: app version code update 7 -> 8 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a6677fa2..0bf3eff7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ minSdk = "28" targetSdk = "35" compileSdk = "35" versionName = "1.2.0" -versionCode = "7" +versionCode = "8" packageName = "com.ninecraft.booket" ## Android gradle plugin From 5c248ee85104ff274fcac8788859bef07435af82 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 2 Sep 2025 00:04:59 +0900 Subject: [PATCH 004/116] =?UTF-8?q?[BOOK-308]=20chore:=20fadeIn-fadeOut=20?= =?UTF-8?q?=EC=A7=80=EC=86=8D=20=EC=8B=9C=EA=B0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 300 -> 500 역시 500이 최고야 --- .../kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt b/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt index e3808b8c..a782cd7c 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/di/CrossFadeNavDecorator.kt @@ -15,7 +15,7 @@ import com.slack.circuit.foundation.animation.AnimatedNavDecorator import com.slack.circuit.foundation.animation.AnimatedNavEvent import com.slack.circuit.foundation.animation.AnimatedNavState -data class CrossFadeNavDecoratorFactory(val durationMillis: Int = 300) : +data class CrossFadeNavDecoratorFactory(val durationMillis: Int = 500) : AnimatedNavDecorator.Factory { override fun create(): AnimatedNavDecorator = CrossFadeNavDecorator(durationMillis) From 99fabe9f90f3d5262308a7bb57ca8a21b2232308 Mon Sep 17 00:00:00 2001 From: DOYEON KIM <80318425+doyeonk429@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:19:53 +0900 Subject: [PATCH 005/116] Update create-jira-issue.yml --- .github/workflows/create-jira-issue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-jira-issue.yml b/.github/workflows/create-jira-issue.yml index c878dcff..5ee7675b 100644 --- a/.github/workflows/create-jira-issue.yml +++ b/.github/workflows/create-jira-issue.yml @@ -85,7 +85,7 @@ jobs: uses: atlassian/gajira-create@v3 with: project: BOOK - issuetype: Task + issuetype: 하위 작업 summary: '${{ steps.clean.outputs.title }}' description: '${{ steps.md2jira.outputs.output-text }}' fields: | From a4807d292bb82858bcebcfba48f849318a70f5c5 Mon Sep 17 00:00:00 2001 From: DOYEON KIM <80318425+doyeonk429@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:20:52 +0900 Subject: [PATCH 006/116] Create close-jira-issue.yml --- .github/workflows/close-jira-issue.yml | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/close-jira-issue.yml diff --git a/.github/workflows/close-jira-issue.yml b/.github/workflows/close-jira-issue.yml new file mode 100644 index 00000000..a72b0cb1 --- /dev/null +++ b/.github/workflows/close-jira-issue.yml @@ -0,0 +1,41 @@ +name: Close Jira issue + +on: + issues: + types: + - closed + +jobs: + close-issue: + runs-on: ubuntu-latest + + steps: + - name: Login to Jira + uses: atlassian/gajira-login@v3 + env: + JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} + JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} + JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} + + - name: Extract Jira issue key from GitHub issue title + id: extract-key + run: | + ISSUE_TITLE="${{ github.event.issue.title }}" + JIRA_KEY=$(echo "$ISSUE_TITLE" | grep -oE '[A-Z]+-[0-9]+' || true) + echo "JIRA_KEY=$JIRA_KEY" >> $GITHUB_ENV + + - name: Get available transitions + if: ${{ env.JIRA_KEY != '' }} + run: | + curl -u ${{ secrets.JIRA_USER_EMAIL }}:${{ secrets.JIRA_API_TOKEN }} \ + -X GET \ + -H "Content-Type: application/json" \ + "${{ secrets.JIRA_BASE_URL }}/rest/api/3/issue/${{ env.JIRA_KEY }}/transitions" \ + | jq '.transitions[] | {id, name, to: .to.name}' + + - name: Close Jira issue + if: ${{ env.JIRA_KEY != '' }} + uses: atlassian/gajira-transition@v3 + with: + issue: ${{ env.JIRA_KEY }} + transition: 개발 완료 From 3228fe49fc7fc33e9a3ac1739d093f6007935448 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 21:12:20 +0900 Subject: [PATCH 007/116] =?UTF-8?q?[BOOK-351]=20chore:=20Atomic=20Green=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/designsystem/theme/Color.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Color.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Color.kt index 1ee3847d..61997cc9 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Color.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Color.kt @@ -21,14 +21,14 @@ val Black = Color(0xFF000000) val Green50 = Color(0xFFF2FFF6) val Green100 = Color(0xFFE3F8E9) -val Green200 = Color(0xFFC1E8CA) -val Green300 = Color(0xFF82C090) -val Green400 = Color(0xFF40BF5D) -val Green500 = Color(0xFF2F9647) -val Green600 = Color(0xFF257838) -val Green700 = Color(0xFF1C5A2A) -val Green800 = Color(0xFF123C1C) -val Green900 = Color(0xFF091D0E) +val Green200 = Color(0xFFC4ECCD) +val Green300 = Color(0xFF9CE0AD) +val Green400 = Color(0xFF6BD184) +val Green500 = Color(0xFF3BC25B) +val Green600 = Color(0xFF33A94F) +val Green700 = Color(0xFF247938) +val Green800 = Color(0xFF174822) +val Green900 = Color(0xFF07180B) val Red50 = Color(0xFFFFECEF) val Red100 = Color(0xFFFFCED4) From 1f88cb665aaddb5b2ba6fffe983cdd1b7b7e9902 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 16 Oct 2025 21:17:35 +0900 Subject: [PATCH 008/116] =?UTF-8?q?[BOOK-354]=20feat:=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=EC=97=90=20=EC=95=8C=EB=A6=BC=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/feature/screens/Screens.kt | 3 +++ .../booket/feature/settings/SettingsPresenter.kt | 5 +++++ .../ninecraft/booket/feature/settings/SettingsUi.kt | 13 +++++++++++++ .../booket/feature/settings/SettingsUiState.kt | 1 + feature/settings/src/main/res/values/strings.xml | 1 + 5 files changed, 23 insertions(+) diff --git a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt index 05f01d7b..5b1bff0b 100644 --- a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt +++ b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt @@ -33,6 +33,9 @@ data object SettingsScreen : ReedScreen(name = ScreenNames.SETTINGS) @Parcelize data object OssLicensesScreen : ReedScreen(name = "OssLicenses()") +@Parcelize +data object NotificationScreen: ReedScreen(name = "Notification()") + @Parcelize data class RecordScreen(val userBookId: String) : ReedScreen(name = ScreenNames.RECORD) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt index 007b1aa0..eb296d45 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt @@ -12,6 +12,7 @@ import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository import com.ninecraft.booket.core.model.UserState import com.ninecraft.booket.feature.screens.LoginScreen +import com.ninecraft.booket.feature.screens.NotificationScreen import com.ninecraft.booket.feature.screens.OssLicensesScreen import com.ninecraft.booket.feature.screens.SettingsScreen import com.ninecraft.booket.feature.screens.WebViewScreen @@ -153,6 +154,10 @@ class SettingsPresenter @AssistedInject constructor( navigator.goTo(WebViewScreen(url = policy.url, title = policy.title)) } + is SettingsUiEvent.OnNotificationClick -> { + navigator.goTo(NotificationScreen) + } + is SettingsUiEvent.OnTermClick -> { val terms = WebViewConstants.TERMS_OF_SERVICE navigator.goTo(WebViewScreen(url = terms.url, title = terms.title)) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt index b5989fdd..cc14a049 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt @@ -98,6 +98,19 @@ internal fun SettingsUi( ) }, ) + SettingItem( + title = stringResource(R.string.settings_notification), + onItemClick = { + state.eventSink(SettingsUiEvent.OnNotificationClick) + }, + action = { + Icon( + imageVector = ImageVector.vectorResource(id = designR.drawable.ic_chevron_right), + contentDescription = "Right Chevron Icon", + tint = Color.Unspecified, + ) + }, + ) SettingItem( title = stringResource(R.string.settings_terms_of_service), onItemClick = { diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt index 43b50cb2..be20e619 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt @@ -32,6 +32,7 @@ sealed interface SettingsUiEvent : CircuitUiEvent { data object InitSideEffect : SettingsUiEvent data object OnBackClick : SettingsUiEvent data object OnPolicyClick : SettingsUiEvent + data object OnNotificationClick : SettingsUiEvent data object OnTermClick : SettingsUiEvent data object OnOssLicensesClick : SettingsUiEvent data object OnLogoutClick : SettingsUiEvent diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml index 7051c68a..6202028b 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/main/res/values/strings.xml @@ -19,4 +19,5 @@ 최적의 사용 환경을 위해 업데이트해주세요. 업데이트하기 로그인 + 알림 From 22073c50abc96104c12f12d3f9979c0d20661863 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 16 Oct 2025 21:19:01 +0900 Subject: [PATCH 009/116] =?UTF-8?q?[BOOK-354]=20feat:=20=EC=BB=A4=EC=8A=A4?= =?UTF-8?q?=ED=85=80=20ReedSwitch=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/settings/component/ReedSwitch.kt | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt new file mode 100644 index 00000000..e3f660f4 --- /dev/null +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt @@ -0,0 +1,78 @@ +package com.ninecraft.booket.feature.settings.component + +import android.annotation.SuppressLint +import androidx.compose.animation.animateColor +import androidx.compose.animation.core.animateDp +import androidx.compose.animation.core.updateTransition +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.common.extensions.noRippleClickable +import com.ninecraft.booket.core.designsystem.DevicePreview +import com.ninecraft.booket.core.designsystem.theme.ReedTheme + +@SuppressLint("UseOfNonLambdaOffsetOverload") +@Composable +internal fun ReedSwitch( + checked: Boolean, + onCheckedChange: (Boolean) -> Unit, + modifier: Modifier = Modifier, +) { + val transition = updateTransition(checked, label = "switchTransition") + + val trackColor by transition.animateColor(label = "trackColor") { + if (it) ReedTheme.colors.contentBrand else Color(0xFFE9E9EB) + } + + val thumbOffset by transition.animateDp(label = "thumbOffset") { + if (it) 22.dp else 2.dp + } + + Box( + modifier = modifier + .width(51.dp) + .height(31.dp) + .clip(RoundedCornerShape(ReedTheme.radius.full)) + .background(trackColor) + .noRippleClickable { onCheckedChange(!checked) }, + contentAlignment = Alignment.CenterStart, + ) { + Box( + modifier = Modifier + .offset(x = thumbOffset) + .size(27.dp) + .shadow(elevation = 1.dp, shape = CircleShape) + .clip(CircleShape) + .background(ReedTheme.colors.contentInverse), + ) + } +} + +@DevicePreview +@Composable +private fun ReedSwitchPreview() { + var isChecked by remember { mutableStateOf(true) } + + ReedTheme { + ReedSwitch( + checked = isChecked, + onCheckedChange = { isChecked = it }, + ) + } +} From 753a62b95621b605118bbe450e9be89b8d223a0d Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 21:36:51 +0900 Subject: [PATCH 010/116] =?UTF-8?q?[BOOK-351]=20chore:=20=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=ED=94=BD=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존 Green500을 사용하던 곳들 전부 색상 변경 --- .../src/main/res/values/colors.xml | 2 +- .../src/main/res/values/splash.xml | 2 +- .../src/main/res/drawable/img_reed_logo.webp | Bin 1238 -> 1304 bytes .../main/res/drawable/img_reed_logo_big.webp | Bin 3348 -> 3430 bytes .../res/drawable/img_onboarding_first.webp | Bin 71808 -> 75594 bytes .../res/drawable/img_onboarding_second.webp | Bin 33942 -> 34268 bytes .../res/drawable/img_onboarding_third.webp | Bin 179596 -> 189338 bytes 7 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/designsystem/src/main/res/values/colors.xml b/core/designsystem/src/main/res/values/colors.xml index 2fe46cd5..94292d9f 100644 --- a/core/designsystem/src/main/res/values/colors.xml +++ b/core/designsystem/src/main/res/values/colors.xml @@ -7,5 +7,5 @@ #FF018786 #FF000000 #FFFFFFFF - #FF2F9647 + #FF3BC25B diff --git a/core/designsystem/src/main/res/values/splash.xml b/core/designsystem/src/main/res/values/splash.xml index 83ffcd93..4b492d5d 100644 --- a/core/designsystem/src/main/res/values/splash.xml +++ b/core/designsystem/src/main/res/values/splash.xml @@ -2,7 +2,7 @@ diff --git a/feature/home/src/main/res/drawable/img_reed_logo.webp b/feature/home/src/main/res/drawable/img_reed_logo.webp index 00a0355f2e01c16cac736e98da1c3a39c9fa2fe3..5a03058f5b2feac3aa8da514eb89f9db92a559cd 100644 GIT binary patch literal 1304 zcmV+z1?T!wNk&Ex1pok7MM6+kP&iBk1pojq!oU#_kD-u}B&qg(f1y)4f*TD6Z6i7I z^@H{N5%nJiZ6i7I^@I2Pk@O!1jU5N6m`5&Ih`zCSpZ$$qm01v);tM~NSsfw;2xqd;z4_yC24`2U5 zk6%HLUq+8#XPbYE!;c}Nef^W2AC4Vo zY?X~t6^*X52cwZAD$ck55ZChhi%QcpP1Gr@{*DmEUdLv~e3;=W=6lU!hzk3Svz{tq&D?X$63!tD-7vnlhp(dj`>xq<&VFln1 zh5I_HqF|fzm?QbFVpsv__5n3+L`DHuBRaajZ4Lkh3AUS3>+(y07PmSp(H2_kjS(Pq z>;L<+odQ5d{8mpeI9u}QeB(&`t-^3-c-1X?XH2OuSn%p8M&`V7$XQ;Av1=BoAw{BJ zrPg{IQdw@l%yv_z7u@WKZ6+9e4d?r+BX-6?&YE9!#9v|bDH=!YDGM7;bCt0S*skFeR|&5K zQ^%694EQOBUH}xVl7}V7UaeVX!hwlIvkC#nngjS`DS@0r4#0+$ft^RPVcANMRRSRP zN5!|S7XY8EDbGdn$qKOmPP`E302)pW!Cf3p1n+=~g}C1m>o_RF8c1W%fMaQiG>Taa zHl7)4E|EN3iG=!x-jzzG0WA+e6*lZPN@ zJclqX$4cztSh92&Xjm_Sd~#^Y>nM(#RRywR%>!AoR=g|{#cEs_YgQGAW;KpwBSFKV zOyI1TX8?-TI040V01_4zoFm1uVOar7%mjdIIJDv^;sSu<(P7*#MWa}>U>%9;0AR_Y z6Q{SF_bXT)9mc4AJg#BUE8|GqcU&u;J&)@P;${PD0kUeSUr?|T&^$Vf=@-P#2C!q1 z&Bmw?VowK@1d;vGx~M5&5!dj@=BKM(z3qu@Fsyh)Rd&AWlZyBSh8vOaMW6+)jWHye z-M~(Oi1xl3r1oZ`K_1QuqnE+7(=pEY z`Y#^nP*xc4>QEF$D^IIgM9^WZz;$&P8JM}38c`t+VFkf;0PPFd+Jl+GMTMF1)&7NO zZhUR05Y%F33Lq{(H(tsKgl9`HZ4TMIk=agh2QXV2skWHH<7_F`>ItN0OMy1WU~~Yo zO)Id?C-6MWwgPRT;B~fSw0eT!t>G%ci8lZ$FSlRqRcp3It|ka_qV#5K+ACu=WqyMH ONm6dVTB6o$N(GNPE@h4Y literal 1238 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 IafMd_0NHPUAOHXW literal 3348 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 diff --git a/feature/onboarding/src/main/res/drawable/img_onboarding_first.webp b/feature/onboarding/src/main/res/drawable/img_onboarding_first.webp index 58bcd00476785ff770e8060455b1524e7f864056..08000efb0c5512387466b049af362cb3d3b91d14 100644 GIT binary patch literal 75594 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 W-v4v|*Lc%^_3!`xB0`b|@P7a}_zp$@ literal 71808 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 *V#?F7xXjk=rQ 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 yalXPfOf8-(m;xmlfZPZ%KG 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 z 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 literal 33942 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 diff --git a/feature/onboarding/src/main/res/drawable/img_onboarding_third.webp b/feature/onboarding/src/main/res/drawable/img_onboarding_third.webp index 2cbbd72c4f82449401f1b1f07c1d0558f7be05d5..d401228d418065cc1a9cf34453f9593dccacd188 100644 GIT binary patch literal 189338 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�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

o(3C$&PnBEGZjc6FC% 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 From 58675908fd0da60bbd4304b73c3358adde8731ee Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 21:37:41 +0900 Subject: [PATCH 011/116] =?UTF-8?q?[BOOK-351]=20fix:=20=EC=98=A8=EB=B3=B4?= =?UTF-8?q?=EB=94=A9=20=EA=B7=B8=EB=9E=98=ED=94=BD=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=96=91=EC=AA=BD=EC=97=90=20=ED=8C=A8=EB=94=A9?= =?UTF-8?q?=EC=9D=B4=20=EC=A1=B4=EC=9E=AC=ED=95=98=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ContentScale 지정 및 fillMaxWidth을 통해 양쪽을 꽉 채우도록 조정 --- .../feature/onboarding/component/OnboardingPage.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/OnboardingPage.kt b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/OnboardingPage.kt index b596f463..0d451bd0 100644 --- a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/OnboardingPage.kt +++ b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/OnboardingPage.kt @@ -4,11 +4,13 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -25,16 +27,20 @@ internal fun OnboardingPage( titleRes: Int, highlightTextRes: Int, descriptionRes: Int, + modifier: Modifier = Modifier, ) { Column( - modifier = Modifier.fillMaxSize(), + modifier = modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, ) { Spacer(modifier = Modifier.weight(1f)) Image( painter = painterResource(imageRes), contentDescription = "Onboarding Graphic", - modifier = Modifier.height(274.dp), + contentScale = ContentScale.FillWidth, + modifier = Modifier + .fillMaxWidth() + .height(274.dp), ) Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing8)) Text( From 453ccdfa9dfd6fc000c972c141637c87c723e7e5 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 16 Oct 2025 21:48:49 +0900 Subject: [PATCH 012/116] =?UTF-8?q?[BOOK-354]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=20UI=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notification/NotificationPresenter.kt | 46 ++++++ .../settings/notification/NotificationUi.kt | 133 ++++++++++++++++++ .../notification/NotificationUiState.kt | 14 ++ .../settings/src/main/res/values/strings.xml | 4 + 4 files changed, 197 insertions(+) create mode 100644 feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt create mode 100644 feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt create mode 100644 feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt new file mode 100644 index 00000000..6cafac2d --- /dev/null +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -0,0 +1,46 @@ +package com.ninecraft.booket.feature.settings.notification + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import com.ninecraft.booket.feature.screens.NotificationScreen +import com.slack.circuit.codegen.annotations.CircuitInject +import com.slack.circuit.retained.rememberRetained +import com.slack.circuit.runtime.Navigator +import com.slack.circuit.runtime.presenter.Presenter +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject +import dagger.hilt.android.components.ActivityRetainedComponent + +class NotificationPresenter @AssistedInject constructor( + @Assisted val navigator: Navigator, +) : Presenter { + @Composable + override fun present(): NotificationUiState { + var isNotificationEnabled by rememberRetained { mutableStateOf(false) } + + fun handleEvent(event: NotificationUiEvent) { + when (event) { + is NotificationUiEvent.OnBackClick -> { + navigator.pop() + } + + is NotificationUiEvent.OnNotificationToggle -> { + isNotificationEnabled = !isNotificationEnabled + } + } + } + return NotificationUiState( + isNotificationEnabled = isNotificationEnabled, + eventSink = ::handleEvent, + ) + } + + @CircuitInject(NotificationScreen::class, ActivityRetainedComponent::class) + @AssistedFactory + fun interface Factory { + fun create(navigator: Navigator): NotificationPresenter + } +} diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt new file mode 100644 index 00000000..d2443de2 --- /dev/null +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -0,0 +1,133 @@ +package com.ninecraft.booket.feature.settings.notification + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import com.ninecraft.booket.core.designsystem.DevicePreview +import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.ninecraft.booket.core.designsystem.theme.White +import com.ninecraft.booket.core.ui.ReedScaffold +import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar +import com.ninecraft.booket.feature.screens.NotificationScreen +import com.ninecraft.booket.feature.settings.R +import com.ninecraft.booket.feature.settings.component.ReedSwitch +import com.slack.circuit.codegen.annotations.CircuitInject +import dagger.hilt.android.components.ActivityRetainedComponent +import com.ninecraft.booket.core.designsystem.R as designR + +@CircuitInject(NotificationScreen::class, ActivityRetainedComponent::class) +@Composable +internal fun NotificationUi( + state: NotificationUiState, + modifier: Modifier = Modifier, +) { + ReedScaffold( + modifier = modifier.fillMaxSize(), + containerColor = White, + ) { innerPadding -> + Column( + modifier = modifier + .fillMaxSize() + .padding(innerPadding), + ) { + ReedBackTopAppBar( + modifier = modifier.fillMaxWidth(), + title = stringResource(R.string.settings_notification), + onBackClick = { + state.eventSink(NotificationUiEvent.OnBackClick) + }, + ) + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2)) + Row( + modifier = modifier + .padding(horizontal = ReedTheme.spacing.spacing5) + .fillMaxWidth() + .background( + color = ReedTheme.colors.baseSecondary, + shape = RoundedCornerShape(ReedTheme.radius.md), + ) + .padding( + vertical = ReedTheme.spacing.spacing6, + horizontal = ReedTheme.spacing.spacing5, + ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Column { + Text( + text = stringResource(R.string.notification_enable_title), + color = ReedTheme.colors.contentBrand, + style = ReedTheme.typography.body1SemiBold, + ) + Text( + text = stringResource(R.string.notification_enable_description), + color = ReedTheme.colors.contentTertiary, + style = ReedTheme.typography.label2Regular, + ) + } + Icon( + imageVector = ImageVector.vectorResource(designR.drawable.ic_chevron_right), + contentDescription = "Chevron Right Icon", + tint = ReedTheme.colors.contentBrand, + ) + } + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4)) + Row( + modifier = modifier + .fillMaxWidth() + .padding( + vertical = ReedTheme.spacing.spacing4, + horizontal = ReedTheme.spacing.spacing5, + ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Column { + Text( + text = stringResource(R.string.notification_toggle_title), + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.body1Medium, + ) + Text( + text = stringResource(R.string.notification_toggle_description), + color = ReedTheme.colors.contentTertiary, + style = ReedTheme.typography.label1Medium, + ) + } + ReedSwitch( + checked = state.isNotificationEnabled, + onCheckedChange = { + state.eventSink(NotificationUiEvent.OnNotificationToggle) + }, + ) + } + } + } +} + +@DevicePreview +@Composable +private fun NotificationUiPreview() { + ReedTheme { + NotificationUi( + state = NotificationUiState( + eventSink = {}, + ), + ) + } +} diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt new file mode 100644 index 00000000..c248a333 --- /dev/null +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt @@ -0,0 +1,14 @@ +package com.ninecraft.booket.feature.settings.notification + +import com.slack.circuit.runtime.CircuitUiEvent +import com.slack.circuit.runtime.CircuitUiState + +data class NotificationUiState( + val isNotificationEnabled: Boolean = false, + val eventSink: (NotificationUiEvent) -> Unit, +) : CircuitUiState + +sealed interface NotificationUiEvent : CircuitUiEvent { + data object OnBackClick : NotificationUiEvent + data object OnNotificationToggle : NotificationUiEvent +} diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml index 6202028b..33ef609d 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/main/res/values/strings.xml @@ -20,4 +20,8 @@ 업데이트하기 로그인 알림 + 알림을 켜주세요. + 기기 설정에서 Reed 알림을 설정하세요.\n독서 기록에 도움되는 알림을 받을 수 있어요. + 알림 받기 + 리드에서 알림을 보내드려요. From 38e6a2700a583b427159382aea2d854a3d2000e9 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 16 Oct 2025 21:51:19 +0900 Subject: [PATCH 013/116] [BOOK-354] chore: code style check success --- .../main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt index 5b1bff0b..fd45b617 100644 --- a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt +++ b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt @@ -34,7 +34,7 @@ data object SettingsScreen : ReedScreen(name = ScreenNames.SETTINGS) data object OssLicensesScreen : ReedScreen(name = "OssLicenses()") @Parcelize -data object NotificationScreen: ReedScreen(name = "Notification()") +data object NotificationScreen : ReedScreen(name = "Notification()") @Parcelize data class RecordScreen(val userBookId: String) : ReedScreen(name = ScreenNames.RECORD) From 2d89bc5ba57f5789483731f59a77a930823fc88c Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 22:15:59 +0900 Subject: [PATCH 014/116] =?UTF-8?q?[BOOK-352]=20feat:=20=EC=B1=85=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EB=B6=84=EA=B8=B0=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search/book/BookSearchPresenter.kt | 3 + .../feature/search/book/BookSearchUi.kt | 35 +++--- .../feature/search/book/BookSearchUiState.kt | 1 + .../BookRegisterSuccessBottomSheet.kt | 113 ++++++++++++++---- .../search/src/main/res/values/strings.xml | 4 + 5 files changed, 119 insertions(+), 37 deletions(-) diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt index d6e890ec..b945e7e0 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt @@ -71,6 +71,7 @@ class BookSearchPresenter @AssistedInject constructor( var registeredUserBookId by rememberRetained { mutableStateOf("") } var isBookRegisterBottomSheetVisible by rememberRetained { mutableStateOf(false) } var selectedBookStatus by rememberRetained { mutableStateOf(null) } + var upsertedBookStatus by rememberRetained { mutableStateOf(null) } var isBookRegisterSuccessBottomSheetVisible by rememberRetained { mutableStateOf(false) } var sideEffect by rememberRetained { mutableStateOf(null) } @@ -137,6 +138,7 @@ class BookSearchPresenter @AssistedInject constructor( analyticsHelper.logEvent(REGISTER_BOOK_COMPLETE) selectedBookIsbn = "" + upsertedBookStatus = selectedBookStatus selectedBookStatus = null isBookRegisterBottomSheetVisible = false isBookRegisterSuccessBottomSheetVisible = true @@ -262,6 +264,7 @@ class BookSearchPresenter @AssistedInject constructor( selectedBookIsbn = selectedBookIsbn, isBookRegisterBottomSheetVisible = isBookRegisterBottomSheetVisible, selectedBookStatus = selectedBookStatus, + upsertedBookStatus = upsertedBookStatus, isBookRegisterSuccessBottomSheetVisible = isBookRegisterSuccessBottomSheetVisible, isGuestMode = userState is UserState.Guest, sideEffect = sideEffect, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt index ad1fd7ec..9cf11050 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt @@ -265,22 +265,25 @@ internal fun BookSearchContent( } if (state.isBookRegisterSuccessBottomSheetVisible) { - BookRegisterSuccessBottomSheet( - onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) }, - sheetState = bookRegisterSuccessBottomSheetState, - onCancelButtonClick = { - coroutineScope.launch { - bookRegisterSuccessBottomSheetState.hide() - state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) - } - }, - onOKButtonClick = { - coroutineScope.launch { - bookRegisterSuccessBottomSheetState.hide() - state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick) - } - }, - ) + state.upsertedBookStatus?.let { upsertedBookStatus -> + BookRegisterSuccessBottomSheet( + onDismissRequest = { state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) }, + sheetState = bookRegisterSuccessBottomSheetState, + upsertedBookStatus = upsertedBookStatus, + onCancelButtonClick = { + coroutineScope.launch { + bookRegisterSuccessBottomSheetState.hide() + state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss) + } + }, + onOKButtonClick = { + coroutineScope.launch { + bookRegisterSuccessBottomSheetState.hide() + state.eventSink(BookSearchUiEvent.OnBookRegisterSuccessOkButtonClick) + } + }, + ) + } } } } diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt index 09641b05..17e15a45 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt @@ -31,6 +31,7 @@ data class BookSearchUiState( val selectedBookIsbn: String = "", val isBookRegisterBottomSheetVisible: Boolean = false, val selectedBookStatus: BookStatus? = null, + val upsertedBookStatus: BookStatus? = null, val isBookRegisterSuccessBottomSheetVisible: Boolean = false, val isGuestMode: Boolean = false, val sideEffect: BookSearchSideEffect? = null, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt index dd34726a..6e6057a5 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.common.constants.BookStatus import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle @@ -33,8 +34,10 @@ import com.ninecraft.booket.feature.search.R fun BookRegisterSuccessBottomSheet( onDismissRequest: () -> Unit, sheetState: SheetState, + upsertedBookStatus: BookStatus, onCancelButtonClick: () -> Unit, onOKButtonClick: () -> Unit, + modifier: Modifier = Modifier, ) { ReedBottomSheet( onDismissRequest = { @@ -43,7 +46,7 @@ fun BookRegisterSuccessBottomSheet( sheetState = sheetState, ) { Column( - modifier = Modifier + modifier = modifier .padding( start = ReedTheme.spacing.spacing5, top = ReedTheme.spacing.spacing5, @@ -67,38 +70,63 @@ fun BookRegisterSuccessBottomSheet( ) Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing1)) Text( - text = stringResource(R.string.book_register_success_description), + text = stringResource( + when (upsertedBookStatus) { + BookStatus.BEFORE_READING -> R.string.book_register_success_description_before_reading + BookStatus.READING -> R.string.book_register_success_description + BookStatus.COMPLETED -> R.string.book_register_success_description_completed + }, + ), modifier = Modifier.fillMaxWidth(), color = ReedTheme.colors.contentSecondary, textAlign = TextAlign.Center, style = ReedTheme.typography.body1Medium, ) Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3)) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = ReedTheme.spacing.spacing4), - horizontalArrangement = Arrangement.SpaceBetween, - ) { + + if (upsertedBookStatus == BookStatus.BEFORE_READING) { ReedButton( onClick = { onCancelButtonClick() }, sizeStyle = largeButtonStyle, - colorStyle = ReedButtonColorStyle.SECONDARY, - modifier = Modifier.weight(1f), - text = stringResource(R.string.book_register_success_cancel), - ) - Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2)) - ReedButton( - onClick = { - onOKButtonClick() - }, - sizeStyle = largeButtonStyle, colorStyle = ReedButtonColorStyle.PRIMARY, - modifier = Modifier.weight(1f), - text = stringResource(R.string.book_register_success_ok), + modifier = Modifier + .fillMaxWidth() + .padding(vertical = ReedTheme.spacing.spacing4), + text = stringResource(R.string.book_register_success_ok_before_reading), ) + } else { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = ReedTheme.spacing.spacing4), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + ReedButton( + onClick = { + onCancelButtonClick() + }, + sizeStyle = largeButtonStyle, + colorStyle = ReedButtonColorStyle.SECONDARY, + modifier = Modifier.weight(1f), + text = stringResource(R.string.book_register_success_cancel), + ) + Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing2)) + ReedButton( + onClick = { + onOKButtonClick() + }, + sizeStyle = largeButtonStyle, + colorStyle = ReedButtonColorStyle.PRIMARY, + modifier = Modifier.weight(1f), + text = if (upsertedBookStatus == BookStatus.READING) { + stringResource(R.string.book_register_success_ok) + } else { + stringResource(R.string.book_register_success_ok_completed) + }, + ) + } } } } @@ -107,7 +135,49 @@ fun BookRegisterSuccessBottomSheet( @OptIn(ExperimentalMaterial3Api::class) @ComponentPreview @Composable -private fun BookRegisterSuccessBottomSheetPreview() { +private fun BookRegisterSuccessBeforeReadingBottomSheetPreview() { + val sheetState = SheetState( + skipPartiallyExpanded = true, + initialValue = SheetValue.Expanded, + positionalThreshold = { 0f }, + velocityThreshold = { 0f }, + ) + ReedTheme { + BookRegisterSuccessBottomSheet( + onDismissRequest = {}, + sheetState = sheetState, + upsertedBookStatus = BookStatus.BEFORE_READING, + onCancelButtonClick = {}, + onOKButtonClick = {}, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@ComponentPreview +@Composable +private fun BookRegisterSuccessReadingBottomSheetPreview() { + val sheetState = SheetState( + skipPartiallyExpanded = true, + initialValue = SheetValue.Expanded, + positionalThreshold = { 0f }, + velocityThreshold = { 0f }, + ) + ReedTheme { + BookRegisterSuccessBottomSheet( + onDismissRequest = {}, + sheetState = sheetState, + upsertedBookStatus = BookStatus.READING, + onCancelButtonClick = {}, + onOKButtonClick = {}, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@ComponentPreview +@Composable +private fun BookRegisterSuccessCompletedBottomSheetPreview() { val sheetState = SheetState( skipPartiallyExpanded = true, initialValue = SheetValue.Expanded, @@ -118,6 +188,7 @@ private fun BookRegisterSuccessBottomSheetPreview() { BookRegisterSuccessBottomSheet( onDismissRequest = {}, sheetState = sheetState, + upsertedBookStatus = BookStatus.COMPLETED, onCancelButtonClick = {}, onOKButtonClick = {}, ) diff --git a/feature/search/src/main/res/values/strings.xml b/feature/search/src/main/res/values/strings.xml index d8f946d7..c27ec69f 100644 --- a/feature/search/src/main/res/values/strings.xml +++ b/feature/search/src/main/res/values/strings.xml @@ -9,8 +9,12 @@ 등록 옵션 도서가 등록되었어요! 독서 기록을 바로 시작할까요? + 책을 읽으면서 독서 기록을 남길 수 있어요 + 기억에 남는 문장이나 감상을 기록해보세요 나중에 하기 기록 시작하기 + 확인 + 기록 남기기 도서 등록 최근 검색어 내역이 없습니다. 이미 등록된 책입니다 From 92ac48f6d41b76f288659d742fea14682e7466f6 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 22:26:19 +0900 Subject: [PATCH 015/116] =?UTF-8?q?[BOOK-353]=20feat:=20OCR=EB=A1=9C=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=ED=95=9C=20=EB=AC=B8=EC=9E=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A4=91=20=EC=84=A0=ED=83=9D=ED=95=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=A5=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=BB=AC=EB=9F=AC=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/feature/record/ocr/component/SentenceBox.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt index 07b39d8f..237d59ff 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt @@ -25,7 +25,6 @@ fun SentenceBox( ) { val bgColor = if (isSelected) ReedTheme.colors.bgTertiary else ReedTheme.colors.bgSecondary val borderColor = if (isSelected) ReedTheme.colors.borderBrand else Color.Transparent - val textColor = if (isSelected) ReedTheme.colors.contentBrand else ReedTheme.colors.contentPrimary val textStyle = if (isSelected) ReedTheme.typography.body1Medium else ReedTheme.typography.body1Regular Box( @@ -51,7 +50,7 @@ fun SentenceBox( ) { Text( text = sentence, - color = textColor, + color = ReedTheme.colors.contentPrimary, style = textStyle, ) } From b7e3b0d308ff7368c9c8d855871514300405d0e9 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 22:26:53 +0900 Subject: [PATCH 016/116] =?UTF-8?q?[BOOK-353]=20feat:=20=EA=B0=90=EC=83=81?= =?UTF-8?q?=ED=8F=89=20=EB=82=A8=EA=B8=B0=EB=8A=94=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=ED=95=AD=EC=83=81=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 감상평은 꼭 남기지 않아도 되는 것으로 변경 --- .../booket/feature/record/register/RecordRegisterPresenter.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt index 26a58a92..ee80e3dc 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt @@ -99,9 +99,7 @@ class RecordRegisterPresenter @AssistedInject constructor( selectedEmotion != null } - RecordStep.IMPRESSION -> { - impressionState.text.isNotEmpty() - } + RecordStep.IMPRESSION -> true } } } From 945bcc6f461e55bdf863e438f34921674b9f82b5 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 16 Oct 2025 22:46:50 +0900 Subject: [PATCH 017/116] =?UTF-8?q?[BOOK-353]=20feat:=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20=EB=B1=83=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/designsystem/theme/Typography.kt | 1 + .../feature/record/step/ImpressionStep.kt | 38 ++++++++++++++++--- .../record/src/main/res/values/strings.xml | 1 + 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Typography.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Typography.kt index 9882936e..70347c5b 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Typography.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Typography.kt @@ -75,6 +75,7 @@ data class ReedTypography( val label2Regular: TextStyle = style(13, 18, -0.13f, FontWeight.Normal), // Caption + val caption1Medium: TextStyle = style(12, 16, -0.12f, FontWeight.Medium), val caption1Regular: TextStyle = style(12, 16, -0.12f, FontWeight.Normal), val caption2Regular: TextStyle = style(11, 14, -0.11f, FontWeight.Normal), diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt index 948ac648..5eb006c2 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt @@ -2,7 +2,9 @@ package com.ninecraft.booket.feature.record.step import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -10,9 +12,11 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.relocation.BringIntoViewRequester import androidx.compose.foundation.relocation.bringIntoViewRequester import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api @@ -28,6 +32,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged @@ -90,11 +95,34 @@ fun ImpressionStep( .padding(bottom = 16.dp) .verticalScroll(scrollState), ) { - Text( - text = stringResource(R.string.impression_step_title), - color = ReedTheme.colors.contentPrimary, - style = ReedTheme.typography.heading1Bold, - ) + FlowRow( + itemVerticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth(), + ) { + Text( + text = stringResource(R.string.impression_step_title), + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.heading1Bold, + ) + Spacer(modifier = Modifier.width(10.dp)) + Box( + modifier = Modifier + .clip(RoundedCornerShape(ReedTheme.radius.xs)) + .background(ReedTheme.colors.bgTertiary), + ) { + Text( + text = stringResource(R.string.select), + modifier = Modifier.padding( + start = ReedTheme.spacing.spacing2, + top = ReedTheme.spacing.spacing05, + end = ReedTheme.spacing.spacing2, + bottom = ReedTheme.spacing.spacing05, + ), + color = ReedTheme.colors.contentBrand, + style = ReedTheme.typography.caption1Regular, + ) + } + } Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing1)) Text( text = stringResource(R.string.impression_step_description), diff --git a/feature/record/src/main/res/values/strings.xml b/feature/record/src/main/res/values/strings.xml index 093c7da1..981d5653 100644 --- a/feature/record/src/main/res/values/strings.xml +++ b/feature/record/src/main/res/values/strings.xml @@ -40,4 +40,5 @@ 해당 책의 마지막 페이지 수를 초과했습니다 예시 문장을 알려드려요 스캔으로 빠르게 입력해요 + 선택 From 129e58d2f127f9a18caf196821d72595c144bc87 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Fri, 17 Oct 2025 00:24:34 +0900 Subject: [PATCH 018/116] =?UTF-8?q?[BOOK-353]=20fix:=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20=EB=B1=83=EC=A7=80=20TextStyle=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/feature/record/step/ImpressionStep.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt index 5eb006c2..b9a6e275 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt @@ -119,7 +119,7 @@ fun ImpressionStep( bottom = ReedTheme.spacing.spacing05, ), color = ReedTheme.colors.contentBrand, - style = ReedTheme.typography.caption1Regular, + style = ReedTheme.typography.caption1Medium, ) } } From 5fcdf205e07f634cb0e35a0e0761c329b3612b1e Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 00:26:11 +0900 Subject: [PATCH 019/116] =?UTF-8?q?[BOOK-354]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EB=88=8C=EB=A0=80=EC=9D=84=20?= =?UTF-8?q?=EB=95=8C=20=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/settings/build.gradle.kts | 2 + .../settings/notification/NotificationUi.kt | 89 ++++++++++++------- .../settings/src/main/res/values/strings.xml | 4 +- 3 files changed, 60 insertions(+), 35 deletions(-) diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index 456eaf80..9ecba147 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -17,5 +17,7 @@ ksp { dependencies { implementations( libs.logger, + + libs.androidx.activity.compose, ) } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index d2443de2..dd3b9c84 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -1,5 +1,10 @@ package com.ninecraft.booket.feature.settings.notification +import android.content.Intent +import android.net.Uri +import android.provider.Settings +import androidx.activity.result.contract.ActivityResultContracts +import androidx.activity.compose.rememberLauncherForActivityResult import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -16,8 +21,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White @@ -53,39 +60,7 @@ internal fun NotificationUi( }, ) Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2)) - Row( - modifier = modifier - .padding(horizontal = ReedTheme.spacing.spacing5) - .fillMaxWidth() - .background( - color = ReedTheme.colors.baseSecondary, - shape = RoundedCornerShape(ReedTheme.radius.md), - ) - .padding( - vertical = ReedTheme.spacing.spacing6, - horizontal = ReedTheme.spacing.spacing5, - ), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Column { - Text( - text = stringResource(R.string.notification_enable_title), - color = ReedTheme.colors.contentBrand, - style = ReedTheme.typography.body1SemiBold, - ) - Text( - text = stringResource(R.string.notification_enable_description), - color = ReedTheme.colors.contentTertiary, - style = ReedTheme.typography.label2Regular, - ) - } - Icon( - imageVector = ImageVector.vectorResource(designR.drawable.ic_chevron_right), - contentDescription = "Chevron Right Icon", - tint = ReedTheme.colors.contentBrand, - ) - } + NotificationGuideItem() Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4)) Row( modifier = modifier @@ -120,6 +95,54 @@ internal fun NotificationUi( } } +@Composable +internal fun NotificationGuideItem() { + val context = LocalContext.current + val settingsLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + ) { _ -> } + + Row( + modifier = Modifier + .padding(horizontal = ReedTheme.spacing.spacing5) + .fillMaxWidth() + .background( + color = ReedTheme.colors.baseSecondary, + shape = RoundedCornerShape(ReedTheme.radius.md), + ) + .noRippleClickable { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + data = Uri.fromParts("package", context.packageName, null) + } + settingsLauncher.launch(intent) + } + .padding( + vertical = ReedTheme.spacing.spacing6, + horizontal = ReedTheme.spacing.spacing5, + ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Column { + Text( + text = stringResource(R.string.notification_guide_title), + color = ReedTheme.colors.contentBrand, + style = ReedTheme.typography.body1SemiBold, + ) + Text( + text = stringResource(R.string.notification_guide_description), + color = ReedTheme.colors.contentTertiary, + style = ReedTheme.typography.label2Regular, + ) + } + Icon( + imageVector = ImageVector.vectorResource(designR.drawable.ic_chevron_right), + contentDescription = "Chevron Right Icon", + tint = ReedTheme.colors.contentBrand, + ) + } +} + @DevicePreview @Composable private fun NotificationUiPreview() { diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml index 33ef609d..bda599a7 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/main/res/values/strings.xml @@ -20,8 +20,8 @@ 업데이트하기 로그인 알림 - 알림을 켜주세요. - 기기 설정에서 Reed 알림을 설정하세요.\n독서 기록에 도움되는 알림을 받을 수 있어요. + 알림을 켜주세요. + 기기 설정에서 Reed 알림을 설정하세요.\n독서 기록에 도움되는 알림을 받을 수 있어요. 알림 받기 리드에서 알림을 보내드려요. From 5fe9d705d64cc07381b796b8860d31d37ed94769 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Fri, 17 Oct 2025 00:28:49 +0900 Subject: [PATCH 020/116] =?UTF-8?q?[BOOK-351]=20chore:=20=EC=95=B1=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/ic_launcher-playstore.png | Bin 0 -> 8752 bytes .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 840 -> 840 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 402 -> 392 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2500 -> 2582 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 748 -> 722 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 306 -> 290 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1632 -> 1668 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1206 -> 1204 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 506 -> 504 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3580 -> 3606 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 1900 -> 1908 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 730 -> 718 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5460 -> 5652 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 2588 -> 2574 bytes .../ic_launcher_foreground.webp | Bin 994 -> 972 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7776 -> 7994 bytes 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/designsystem/src/main/ic_launcher-playstore.png diff --git a/core/designsystem/src/main/ic_launcher-playstore.png b/core/designsystem/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..afe083288f085b2dfb6b2c3e2e2b9bc73c81ab93 GIT binary patch literal 8752 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 T`~mtW2<*fWx5I`1^1J#!T1w(6 literal 0 HcmV?d00001 diff --git a/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher.webp index 66649c8cad8151fbc46187b69b44ec4836177940..5e2980e0ed4387dd1b1da28dc4fcdfad8f65e9e6 100644 GIT binary patch delta 828 zcmV-C1H=5t2FM1G8Gqm8sF5T`%I=xfy)A&_Z~%@!8SihVlZK;6l4Yg-Zh{j^(SaKL z?3{?Wm6Dt^y96*_Qe*`>PtKQI0ZQFS5GvI~I@A|fLa z7~r4KA`plKIq?^OX=uT~HS1A6&xF7z;Ud^S!B7KgK)_7+h-n-!BN=r2-{$G1hl^z% z3k>^ALzSU|pMNop17-xHS6}yxxs@kRe$M~NLxk6nOoT8YFa;v)3`ap^xc#}7gd)K- zMDTaM@A|tutIfBk!|CCBI2c+6V>_L#&$qI_pL4oVxZrrb^#1C}+O}V6t(o4~9`i<< zhJPO1ubAtd<-o_`hBnEAUK8HJ%w)>R#-J=S1Rf3Tt`zijW(M(1@FBq^oRvTItUlwHU3Qj)f( zmABcmBqVp6QmMPzd*z8NW$6d)S++wZ9~x~eO0q81_RQF#G8^hr8TR)AQdK!g))}Wj zrKd3L>;T1DT;J;sWoM)t=)%Lz(za!rviI$%+<$ZAbd%(FTuF-*Enw!qi~i%7`R}4# zW63pU{>5}v@3yXM2PH>YrE^w9X~Mn;5)rC*ndSQynO!X$x}pphDd}+ zNHvH=h=hnph(w5lgh+%)NRQR?mkH574bH%)$k@1e#|Kr!XOD+y>&w?~j`wKG5E=kT G|55>5)TI6Z delta 828 zcmV-C1H=5t2FM1G8Gi@mD3WbgnfLxL*s{d{YVd?Mgdid3@a`EKjvGl*q#Tg$MP8hn zXWF^LOaoozHj*Sos-tJ^wfEn)SD9|13s!C0s+)OUn8^r}ihM;&Y{V0`{Q@P-?Y#j2 z0tg_00NOwe2q1s}3ZMa0fdIXk}E@t0*!WtSD3cd{yOw|7<6n&m zLxhppXz9pkKuSs=3>8{f0u10!Ai|UzXbEL$71C(txGYm@X~|+zok8 z@^z3dG8$t9kbg3cA%^niZ$_kK8FGlGA&Pu|l+!KN!6EL4fApBzF#p-oU(;i`7vJ~t zIy2|hhWd0rzi+pP?IItV>&0mbG#Ug9NF)*kj7XTof82{jo}W4#=RBpBh7HhYX$TmR z!EC}9M<4c^hHb*10xMD*W* z+enJ!EWojlSY|^|}j8}KNK@G-WO;KKMVP&(Crjq2C$i%FQR{8Zsc_N}; zNI|Dge^rDx>hn+PlIE=_;hqNhruV37bubzg-YxNUD+PL$4z$Liv4jDME0SPPOR*0@ z&IBOL3qxapwV(pL3DSB&h$*g7Rffcd2_*=KE`MuRC3`DTXm)B!W_ewkET4N4#dpZ~ z`S9TKPBGpp=d=fx_Yc9>ZGV1-am78bzXJyd4c@@t+i!23-^ni(^S|ab-2b%=nip{Y zA9rb{k8^`7G;SqpLeB0T^Lm*Xecd<1yIWBu+rkzW>C4t-%C->9i zy*0yq&iN7Nh@2zg28g{ecwjkZ?oN*d3ac{*7gsmgv!MOC6{B|j^y-o9G4)yyl^Gy* GkBR|)zm|Rg diff --git a/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/core/designsystem/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp index 2025215b86b4a7b2e4546086c08308db903713e0..0dc42b7efc5801f11542a2f864a3f4420ea92524 100644 GIT binary patch literal 392 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 s5TN+sB3B+xpC(oT?%jv0E`Lip8x;= literal 2500 zcmV;#2|M;uNk&Gz2><|BMM6+kP&iDl2><{uN5Byf=1|bKjTG~zz1_ngA|@csnpMyU z!%s{zU0K^!S;~*QySuwfv<8VK!PMvnE~n+y0Nv`=vZdIf$i z0GE+XMpX~axaKFtcTpR6;?9X7oXOBbb%@K4%PAU34>?sE{c1?ZC!8G5$hzvUMmO$G zx{*tmB67HeDN>?8n`q(*C-s;Za%9`8l{NY9?)LoJIbZL`VM+j`NSu&t+g798PPx0g z7fu9A@}uvCMax@mrIWx$z%b}BLLf-CZQ8MI+qP}nwr$(V6l~kJrts|_+sVtB065jQ zEpPk_2=m0u%*@OrASp9!f8Ot}h}x*1td+(zR?%;v3hL$+Ra22w6CGbaa3ugBQ2kQ2 zx!bNyYmK%w*)=xV^%=J7+3yaH0{{f0=hZf5+ius6wrx+g`v{w7U(){x0HO2o( zoheFH1qrM9{(hO)|9NL|K@44Xmnw-kdmKdG`1gl>!=HDNO}@TmH-7t4F8%!(dqU(m zdz{#o`nzVf1Hd|QExg8a=D1dzm96=l4X^dJI$i5+fn77s?$(I2_ch|%_s9RO5odR6 z#u;|4x5epN->cy@X8RKr+nlp?Y%{smBk6A~ehkYe7mKg}6Z8Eq_6MAo1NBqj>9 z&`n|mun6Z{l|PwGWfV}RGFp|tJ_0B%NO4%`=JH#VR~Y6|`bEJV$Sgvub)mQb#UZbd zj#Zh!92$yHbD%|;kSDmhP~2t;3vW2i#4n3>g^WDbnA7zkA1u?8mHBIKEPY%PT>1_2>5ILxV*XMFBTDpk#7 z{yiFv3Xg-JL-(^{&WMQuVS((pjIr<4YFEF%*Z==S*MEP9=WDN4wMqmMFo;6}0>w|mDA4is9yS_I9?t}wbO#bJ7=+$% z@gQ@dWrGsQWkd)qFe=n$Z@VYxpF<@@I7O2cYXmS=1Au(|GeU^F7BUObQ49i@( zNMyDu{}swm9Mu_i0GE6D`_nLr=IZxvIbBqesoPIvr+PM{O}eXrsuIAw%E$az45NBG zWH97HzCt{_^=h>`I`s>ArOaf-IRR{{s=^4zHpgmjZ)o%ix557(ppahfXDw`(L?I&W{SK#o4p;g1r4Q&3dFBY2oT#ZM8W2Kv`Nc z4-WRnl-o_cNY?UJebZp_&4zxY(Be{Q)%f~?nzS??A0u!b10hgVl>qJ)pD!m!rA1lxQokgCPgTK10OwM#Pot94 zGvSDvb$?G0)(;~eHf{9Jb8p5MWRlh zHL2TRgD9(2nS3+$Nn)~8WFF{k7<1MMsiH&$V`hDJ0whe<*hMN8is|yhV*(^EglH84 zcqiFRLklrk8Zr-bHjFjz$JTo^I@pl_sVwEmqVAAJa#D&^Su3$4#Bfrsnd=QPs@lBB zG$}Z_$%>Z&hGoZkBVe+`1a|yxj^lnqcyPfZ0o@bq9hh#v(f-|V+d3!2*yv}P=OsWX zQ+d3Zlq@>kqWqhbB2#w>P);yn28{_2?6elpH(3LVj##|T24iU4V&ccaGFK$sffGyoU4^o2hhhnzP2 zvX&aIkmeMFQ!A9IIKd4*sRv$sj~i_59-yBTB0#?VTEH|_rfgN^$+A##GOwBNr2h_{i6H)iL?^nEYP{fX)C9P>)XtiNUH<%3m)56Ze)PK&3fo1gb9!%KzpQR zH!)SN9{y8^Ta^)yQ;v=7q?htS|CAkh)=B=kh|vs$CxEe0*PWPnJOO&cPnt1vpQNdr z#<&Xc4(ObFJk*;fFyeGNop*Yv$HTcE5*+xV=J1ndY^(TP8yO(VN_~#Ae3j#W?xCA@ zoMN|8ne^dg|R!Z3QY68>=(Cw<3 zupM>LNtynz-92w2&!#I5&$E^~Dwj2AK33fOS?l?^%}iF%vQ;|jlKB&P_T*zKwEDG3 z*PWPnLM0HjyHCJ={jRS!AVA}hwrT;xwrT;>3VjZ;Zhemmo(~kO&{i#AveP44gV%Sx z{%bdg-#q|eOBkSE7wV&166>lHlORCy^&$-$7J2>77Z0kRaFZJ(Yq&?iWVvii`s^dn O=GgU{%Nn~45EuZ}*}3ch diff --git a/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher.webp index e2217fd03a20cf4e8ecba8dfe5ed49f185cdc3ac..51938070739d715a388f9855a2d29ece9504d5ae 100644 GIT binary patch literal 722 zcmV;@0xkVgNk&G>0ssJ4MM6+kP&iDz0ssInFTe{BCj>dRZB^02-CbtP$v-b>?{`lc zu4`L$l*41job}rVY|-^5N~ZRHQz;St?@xdCJJQ$r zDw*p0MXCs-#9t((WTF(1|6d|Rs?W#Y<%X09sgwv6L8bQoNc`3Rk3xZ7#|jJ` zz@VW=`PY!22oU-CQ)c@Vle8l3TJdkbkKMVy=Dg3|HU^$$A9SitGHK$mJZ>D$;fUw- zH0)aOpLpBtKxkc< z%o?Cw+omWP8oRqY5nFog1e+HBQ#^?8q=)VKEkrc^U#^d_~`70f6a|dik zKm>HmdTa==v%d!i0J7tDfjW=zI1u)C2ploSt&Kz+ARGsP2mnA70U#D-JdSWIo=B~b zW7#&6wn-wIR~^w;Bb)1z%i-hFe2u)D>@|fJkreVPQp5K-`ER&=qIm-15BcwT zLV`T})y-|?R88Ux4^rW;`dwWU{X4(p737X~NM4dQ5&u*6saqNxYZk`rHslO&{9P;m z-&CKz&CN^$R|vBoC+Z_28?=V=s|&iz3t8Vij;k|+mi5Pfbgk2K2RBEA+4d`UNd8Cw E0P*x(!2kdN literal 748 zcmV%Ez2x(ae++p4N{1$X8YF_Ro2Fn7M(a~2%gwpB&zy^p)Q#>|nF zkdZ*nWT0KL?#$m001$u(6oCLlAOreYaV0V$G9nO=WDuWU)ds9`_`iPWRBia(-#+&z zD_!?DI>qOgQT+o^wZTXyE0IKy|9{njQM`YAE)QCus$eBhwUBMlDPBLahWZaiL|Pyt zN&*lnFv)<9KVwN0$xl*#3!|8|DIv)JzUry1-M%+oWTWxwebu{#DZYRDE^##Bp;bI1 zH1JPKYC19mR3J1E5l~5p2qi(0Edv%9=+Uq8E#<6;t!ipM)8n>3KC`BFhmUhVZ4dga z@j>GrTukzAdwOBG=IqcdFT1g3Y1U6CKv;~YReJP6&{5bO+Jyo8`(ZH~FKa!O97oJ) z&FBA?Ub-I|`Jb_HS)9KVumylEBz1YVZQER(ZQHhOfA(ExZYGE4NfOb22W}%NlCzA* z_XqJ;I^5PBsyiYC=$OaJe9{`5Tn2&m2q=@WsJsWh=}IKiD(ju zXab3d=f{X>#-NqeL2<0uhHDNdM4cv*uO_xeoege}&d6}IbP4HV+qg00^q}t8(flH| zW&Mjl9#sqjc~I(`2J);j8G@Sp7L_FhrFD|B?DX7n014jA;b~5+jtll?4$RVY$n5vn zKgE?8;Qh%rL(?I{8gNKnnD>{Ue25jPNMA{GEdCLMA-!z}TcC@#Vu8{cs#C#+agVpQo>V~c_nE8^w e%V1_gx;ppznk$Dpn_YK!dn8ob?$More3$y&R4W$RA*_EHka}i(IE~I9m*Jy o!3zhFC(0H%)mp=QLiGD)wmd%JDpWIwg^!v}A}f_B{~rJD1eH?|*N5pA-Yo!btqi4WK@= z+j9VnA_YX8zg(lyvhPbVQhP6`=yz@am9g*90#GRl01BLzz0d!-&i{o(82~^jQW7b+ zwryKUq}%Q!Y_Yo&&;NfDk{;f~5z+q%NW`cEn(;o*joE2;r)O6yqms{+b@PJHkod@y zCJv`6;mFtCND&0pc-am~!lh)PMG$oWxTOfU3Lr*|093+t0X5}u6x?a35&b6NevVsK zbeFMk^T@3sI_MrmhcJN1Ad5RdkLGM_T3vwuh{)IFc(%VopqM}i|Hs<4TpQSh|Myv3 EIA8&iN&o-= diff --git a/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 24696838d9fb88fc1738568c52bc7304dd980341..22b904c7ab0b6520d13a2985c44fc8384f8c27b1 100644 GIT binary patch literal 1668 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 diff --git a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher.webp b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher.webp index 900e618b5bbbfee7a64bf3472f1e4f1f21f82684..6e12b7cdb98315538ba17bff8bf9e6f7c6a78608 100644 GIT binary patch literal 1204 zcmV;l1WWr;Nk&Gj1ONb6MM6+kP&iDW1ONapU%(d-X9u^oZPm)WPyhc!5IOWe=!1+R zXuw_W*+>(RBHMPYtaINdrx6CQfNV_Qhfxmq-m@3n*tT6Y`{F&M%G7^78fuUU@#x*N z;nudTTAAnK?i#yOh(|P{C6c*@P{4N=ZUP|wK>`5=K!5-VOoA~GU=Rct?An8ZwLJdX`nTlCyIA`B?)tdF`QL)HuL^{=^mUdZYId) z*4xwK!3!=Q&to5h(+;MivICgXZ-W_JYtp-O^gh<}_r;#=R;`oiVQ!yxm($i zfo=M=t{VX)RNZ@li$$^9xM~d#qIIRqO$6~Ial77~2hyECb%%?W5=#Qt^Y&0+e!8qS_HwOc9jZj*mbzYp;^I0;j$Dxz zuf5!(cZb4VJ^e`Jw>&r2mq)4eY9 zU%6=%qAykXyYZc#R-+e>~c}Rrs zQzHC;5<#jFVM>WGCWMfC+3#7|e5(!xDO5b?ZMpIl6t7xnPVqtnt*&T^Pq}&d3df9U SMO6;DTDVA2#bZt7ek}!sh(+B1 literal 1206 zcmV;n1WEf+Nk&Gl1ONb6MM6+kP&iDX1ONapU%(d-e+M~|Bt=qm_wM0~UnJ)#c)!zw z8E1AY<3I`6kt8`*YWC357;M2`{Nd|qu{&Lm8%c8HVu)z!zU9M^wVC zZCkZ6_x*xP$oMf%MiDf`pb$!-6en_Wce(c_0LVX3fB*v^K!5_w12aH?ArN3#J&#cW zlo1G_La9vHp^-JIOdvoigsN_h2@{CbVT4kdKxIuTlmKA@gwU`fnGm%G6iQ%% zNB}~B5C{QKg$^`G8U-*yx&VlP;-8e#0OfOo4otNw4d}ox@F)NRes)SrvD>z)hn=Zs zX?O~p7mn36gdpZa0Q^W9$NULnFp)n8mC7>eS+nuB zcAmlQgzrbZ04|+hAMW}84S%$&pRd8??x#FH|Mj=q|LQu&xoFnb!UK3j&OP6j->uR1 zL$XopPv3HIy=z~0VC6_p-y3624=(B`I)kv$VL>0=UC&qFWO;>U>3FSK9;PZSkWr;I zN}tBDM&nxMtxSY$T(~^`_$U|0??-;&kg#o=VK*DwwrexB5!E(h+clCJX=*DyZJgA$ zZMUiQBbwcvp7Yh3o!vPb(fMf*~@ZPfWqKoas}iNh(bxIfoQ5pOEY(b7#cHr9ddpoX6}& zaFlGHB`0Ra14tx!;WdV$*czLZngXJzp1%dbadL9D9G?PYe9GGEe(Z3 zcqFHo0quR8HTCTf6bwOdL(6JCTJ~cb)YuwV@7iLt>P>7=9kz056ZTndcOOfR_I}Dz zqzo9_w~9&;ga8jqt`31n&Z8(+4s6#cMi^JmlC#qgWl<;zt}!a5qb)bjP$cJ62)7+u z8*^_WKvS!o9XH3W;Mllh?)5{!;p^2m1vWQ-0k%3pxuAKs9+R5_QB5x=2WOwU%{z~b zNI{IMM0vUl?cZnMu<_9X`s~=e3n&Ver}A5vztIXyWQhBSH6RiiS(&*0IT3^^e?OXX>%j5j_tJjGAr zhVjGoOHyJ1j9a|vw((63enk6~$>Yl#R;^qisWg#R<10^0UTZT5McpbBi?_G#-KCU1 zpzQYvWhVk<6$oV~0%a$ZQhEo!Q=3%jiYSPt-pe!>`IMdsI10LAAzD*ylh diff --git a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp index 009475e4f7f5952afc6eb0b91447784c0941fc30..d99fe7eb1b0b854aa4282f97b9b8d123282f9f54 100644 GIT binary patch literal 504 zcmV+qMm(|4-f;bNIj}P)~Qd6YBiDcgH4l$JjkaJ)s@~kO0%D^Z6UQ2S|p% z-XnB}1P}-W*!L+R(1r*`04M!`RmmS#(AGQZbbhl zpo00I4I1gm{KxW;@;{y*9bdnMIU;fC*E9FR%;eP$A@oN1%GwTy^-ex{wiy~;{L*In}AQvBDDY{W3k_5CM3Y`AiV$@gTG03 z1K%SQgWBLv+yL-CO)_Xo{NM)umuUv$+&3O$0d|QdIs2v$_?J8p4Qf(|crPh{Ax<^e zK>X-{0=6RADl_;XFT@hv-~fA|fGQ8+x&rD#baI5#k3s>JcStyp7Ge}hSIDY}K+)c! zFwyLzFwyLxFtMDXAQ3gcqad+uW>J8MovTqSe)=dHW^XcBiX@p^>8-b$%{Eut(Aq`x u6HAmNJBav^Oy;n($x;TH|Cs++7A_qHJfz)cx_}?FEC0-Y{|_<$GqM7B^Y16^0n9VA0-$d5dtYB1yX2ylQ4-*fdmL7{GazLfMFBf`JM27IyMmYo&f&`bZow_ z0m=InAQ(EJpQMod&hPsj(1DN$?)xVE4$1s~%Eqb z^nU{4g#X2$k)FbTA`fp@2U{zv-sAfqk%Av58#BZG-Q9gdbKX0N+2wF~x&uOuN%;+v zN52HxOMqxig*^e8#Z`+9V$B^qCC?hfYOdT3#v;$B0!!BjwE#>VPtkpL8G&sRy#PvX zqIs5f3L4UsBN<7pzxpYpUA>awt~yFlRg!cXs7?efBz2&{|mAL0IrVin*aa+ diff --git a/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/core/designsystem/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index f334bce11eb84255eabd05cfea12f1b7fde3fca0..038fd48da539fe24e38a83e7ff158efc38bb4d94 100644 GIT binary patch literal 3606 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 literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&iCi2LJ#skH8}kHPN-Uf03m8lEvL2axTE#-Q6X0 zcZYS?W~$cR-K7P0cXxMp7`Li_cmE29KTgy!7Hx!kYspTd@#!d8><0f|IntiVY z8S|Jv6v4dLD2iUQ1sRErQaVQ4f6=Jzw)PRbo!w)!*}A+p#(>;4M!(!uT%a)qw5~Dw z9m)dkg&f{8%>z-EPexsGRe`+P} zsFk>b_w+g%^lCYLCy>Fwf=)$((ETu&MbOHn@SX21xR=n~(kV$;SLlA&^m-b;^Hz~< zcfbA)kI8M6;Tg8c(exQl5vt136oypwgI+nYjpjDOa11%5svJ#|6GIb6(SIC8{v*im z(@#~7CZgE+QQ~Ezd#EZ$lgQ9?g&KopLizoBXz;N>9@!1i*mNeJqv><6L9|#nr~aze z%TX~6BH9HYlTGe9sh-SG#Zx3j5ft4;f~S=?h#ran$jvEr-&a4yR*A{#5m=+OnO%8vqn?BatbL znp&!?T7w5G1tc`1(P@mDT&}E1DgcUba?GZq@fN1_S`wv(#*v=Zt36SAj-HDcj-g_* zOl+QuXICV4>5_OYiCnt4HX#m!rMm?X)RZNM^3jz{4G{fu-%vk@BeapG^bN7EqJSGgXq+{-oeQTEH&je3< z*>edzP55@HjLC>8KCWC^Ke9m1fYHup(2?aC$kRZpO&|Kevy`rqb(1XI=obqJ$ul>; z2HWV^)td{mr9 z>r`?y8F~7@r>{K4;+Ua#`$Ua%3;LcZ!+1cJ6 z!%keA0x#$0*V3ZAo;{bqurOB6&7Z;6+XAG;(j%Qr#CK?zq}YAr)0sq09g`Ht4ZSyz zz@cGMV)rROE_xfwS%XQ4gQoht8hEv7ImVD%-k|l;@MS|5zRGl`Mcr>YTZ#Uu!0=ux#H-#=V zulHFxnG{XTEZ_Id?UYt7MXB-hp3-yl+}%BO2+t=bFUBX7$Nb&UT4Tl0Hl4{Auf-s89SyDyTe8cgj|ZdspI{H6z}Kp-R(+0o z#*il-06DeJj*0=O&7h%M2Xi#d;=)rT8-wFIO-3F7Q1{}Q1R7eOms&KG|B4e$-Hb|} zo5Q#bt&iugTk6?fl@U;?K0+Y?)fIj``op-5_j#NcmM{%R(^RnYWaLX3|Igt|DnCP! zLcm__?YRzs_Lip0r$W0;c^1lpXVmV)0gbIT&mB?O=c&$4;uiqQ%KN>w0Wi?kc>ZcH zey{&;z8S~=xNp9>V0V$A7Us&gmn!e~*8cV{1n8L#OWA+-UI0d$UaFnzA{qG-%43So zaR;jydLfj@)JZ1#wbAwV$`&s@_O{nyk{v4mRRFZE z1i)A@U@90eQ}O#{M|Ee@y)_+<4px6MJ!tM#cQ)B~U@&0zTmZ&a`Z>^gCMBY5;s^ww zrDTG>a=%|=rGLLB0GJ2{Od;rxqYLB*pe4|;i9(4N02Kh#1JDLQcgX~UWqdt{3z&WD zmrO9QKLBkP74|m73xEOuN(x&5Xm|{O=79WWT|mHNJ6Qmz^gqdK$d|H--3malKLDlc mylvL4vyT7$R{JK3*BE8bnP+Z-pfk@@6l%m21kt%DMF9Yvrnb`n diff --git a/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/core/designsystem/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp index e6ecea6ebb17d68e5b4630c83c5e1934ca621c95..688a3402219c67f47607b0f99613ec4984925b7c 100644 GIT binary patch literal 718 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 literal 5460 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 literal 2588 zcmV+%3gh)sNk&E#3IG6CMM6+kP&iBo3IG5vzrZgL6$gU0ZIke)ef8Z&AR;D!>jGBB zRXat~mpO5k13!cTH*G%p)){s&$F((2>Dsnamh-l4jWx6T7x18M+lrmE?XJD!M(kO} z=MVHh$ZG$P&B9b2DWsXWQoUys>TDHl}h-J4Mw5TaskcR^9*q3hQvzwqoyN+rGAa?|y-^ zZQJqYh^^Xo8>dE4TXVM@N8QPG|A2OTYB$@qCVP&P8xA8$iloeL!5p>D!+&3nwr$7e z?0*5aZQHhO+qUO@=lJIyufRsoxlL_9Pd1P}q_VLMC)K}!EFx{Hl&O-^>2gfvK$0ZW zdiTG=>^}3`wr$(C{T&7XST_Cto3OU6*|zQVpOM>0id@Td9opRouvNFwQv$(rE6T9g26$1TdG-TjNYjQ;nw%3OaZR+$l@Y~}jtn2#N$+b+w@ABMM=?h6C3>uOfm zb=?%UmnDSPNU;5?DeSuL3)?Rwgi@AizbeA6yS}jff(WH7^Ytg)r7Uyg`_odE8Mw=V z*974HYcL=6&{W%kXl88o$Baf`H6W7gicj()QdTFDm_!nzk$Y4m(XYGaBjbIa2V@qr zB}k0vNF|9R>mmvKD6oRD%YD6JL&i44PJyJ8b1srt?i5&A2v8tpwOH=toVO5K7jBpt zdxY~5B4up?3&>C)v5nx?CQ5S%0D+nD?#--v_aceyPAe%|wre5RP*-R710a|^C0hh6 zJhpRWwW-2Taqg4E1aGLZFr6!xsd{YZ$XJyDAPOWKA_+zaEFi}b%@jJSo4kDh6xCA# z0joBXYpLFKGCh26ucLP`g|}3w&dDtb5&%docd*c?8(6PeIw(zr9VjQ+B%2>@dqCUFxnxzm}8EC>{ zuVM5IQ#xAeM=OPvGz?nYENB3zOYJ(beYlP^D@6qI>So_u$=^#mp_=-XuF6xZsZZ$u z=!@^WaRQ6UP88KFzPWs`pYh8Swo3*I02m7$`w4VWCOpi#ABADZ%zqjr(naaWF#DL& z{u?F&$}j+|Hs@gyU6hIpbGnUFCPCvUqeN_!+pSRaj)j0au3M|iP)Qg7*pt=qpe@&@ zbmNAp&8Mm;>7qs7tjMYef}oC3dS}}G|MRG6dwq)L+rW6$KoC>_iqNJ>XsX_Lz4Msq z_T-oB*${b6CPkC%xeD_Xz7e4?T>Ah_fE3rti;KHglTHQgR8PN~mvl&fuo z!+g4q(vaX=c4k`zz%W`g%^NRSLe>8KPtp1fT0K^j1_f7a4!SHithDqAW?lckjQq)3 z4Iqfa!imVW9uLyzh3egjWyF?ygiXu+X{J($E{7y*Qghe$=jltp;rQA>6(KSdgilhG zrizSC!{u%wOB9r-y_S+cUj0C)n_vRsRXvU`TOXw6&fm``kPw`Ye zWrD8#^Ig15(A{;i zdzT5hh1}87T%)Q0B;Xc4`$bD_niApG@%iotCu)Y0c$t8DJw{u+>HaKT?PH1^N1J>4 z1rboMlNzIh`mkiVt36$Bwmjdh&sWRirK~+(_p=AH$b8Gg6Pc@34HByWRP=HGR-&Rb zIJ$oS>!gm69>*EWvV}&o(CX%D)ku=`SZ?>PV86Gb^&8A*>L?A6i8k)v>an7vixSCE zF4{3&9I$FI(EqxX{`U=#-nYT!WNo8WNqgS_yc=IX!tXbjPgInv$oIa%;iUSo?tGI- z?eXI5@DZYKniP?VDnj`G`!SOU|9{)?|2Gf+e+%*7Hcx`U%1k@CN|y|6?#o=F_>|QX zg?%=2U?>qDWNYq?YbFLo)2H-qGg_JvErs^MX+oaPng7YuT*Lrizk&b&V!{E`ZU7vc zDfCm4kOflK%ct;_?*O=WOYj0sK>z?b?ei1YQODqo+G(P$&Oym|Yr%1d6NQv-FFZ%t zNUfxWTmu(KY!v<9oSEzqvX=+dj$|LNd<;})oFOa#4gh>=8r+lqIw2+gP%;QxB8FW62M0RW`?;}1Wb0C*NmceHhN4s@&#NX}VHprwvx`~U<4 z5EV}}r)G3S@V?gI!Gi-SaPVMzJ)MK8yhY^C_vQhJ-+SwI0IWw9#!yB8JOD0{{{Mpj zgoOfP*VeqYe7Jf);_}8S6aB5+=oMJul_n|!wGA$&cjiz!R)0v>Ti3s|`qs~E;b+Dv z0PF#Hg#ITa^gqIvLV-w^*1V}`y0cUvRDG`MFaOWrh>SDZbCww$q1nit!I85}@5-B| z@)ZBehilJ;Gu`D(&3Q{G5cN{fO#nRB@l$aM02%;}V`P}Wzo4kISp0Y>APog%Awg`a zx7%Wu#+lZoby^yL?w!+8_s)6g9a3~}o|d}z&P(r*qD$wZbbFW1X{nTD{@mVrhZMJe z`9UP_U2%thU0SDQE{%=jc`BbEE{$g{C1P~DVpYW)&SQ2X%OG5$4 z?&An>_j8|%I{TM?blpgY?H8xYuuy#BbpUR69RwgG=$|Oxu`K2&md6~$3jfCZjupr5 z7=WnD=zH%Yzv~}#(Ls0hd)+4$l_7>n10Vq41i&4DHvr%34gwHl^d5BG;otwg&*hrQ zPa?*yC)|JY<*)Apz_s7sMsL5<_j&#Do9{niSAU6lc)~B;G}{&c_#c0Kxe@#E#~*KD y)4Kg~g5Oi*P?cSskDg#M{bJ;rOeZ|*+*MJ1Qy-0@>`H)&;@jy@l>pf)T*v?cCPM1~ diff --git a/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/core/designsystem/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp index ad071e6a231ae51532e339e9aa998e0b9c9ef385..694e55a6e36357c138e016c2f89c30a81e644ef2 100644 GIT binary patch delta 965 zcmV;$13LWT2h0b5Qb|Te!~*~TS4BclR!}%hw*vqGFR#IC5D&+ok)$w#s`@w9O?W^9 zgSKr1<@kd+fPY`3ZQC~bf9$=fIsXRIwlT1$m!U)=5<#;0Rh2= zRCdmbV+dkXfssIkOeBZ|RtZ1~0>f$8kPH!(B}MN$EAB^}WpEsTK!At}*_3nXyALD^ z0A$!rCoi^bJE>zEwQbwBZQHhO#7-nTw9P^V-wbU_1#*~cpUmHM?-G|Q2ZJ)gMd>qXy+P$@^{l2ba?n{r|m%bh8GA8(kg!CWef=DaGlZ& zM`?dfJH|kSkVljTmPdZ>j4OzkTtsTn<;Bl5=75krwX_Bkbw9DqNQ_xXY;Ko+^f4a9 zJVF&e8?S-O2hb*0loR97PJeo84}xn z#(_I;b=bmEiR~#w-TRw|w=9`6b?Vd(Sqs1;W$4 nc`o9sdcte_7G&`;RBa{%8NQ|JncSfA&B7|DWRkfhf*2 literal 994 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 From a8a6addaa51ac91ee089c7d5122146f5ba34529d Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 00:37:53 +0900 Subject: [PATCH 021/116] =?UTF-8?q?[BOOK-354]=20refactor:=20ToggleItem=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20Toggle=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/settings/component/ToggleItem.kt | 65 +++++++++++++++++++ .../notification/NotificationPresenter.kt | 2 +- .../settings/notification/NotificationUi.kt | 41 +++--------- .../notification/NotificationUiState.kt | 2 +- 4 files changed, 77 insertions(+), 33 deletions(-) create mode 100644 feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt new file mode 100644 index 00000000..6eb4e449 --- /dev/null +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt @@ -0,0 +1,65 @@ +package com.ninecraft.booket.feature.settings.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.ninecraft.booket.core.designsystem.DevicePreview +import com.ninecraft.booket.core.designsystem.theme.ReedTheme + +@Composable +internal fun ToggleItem( + title: String, + description: String, + isChecked: Boolean, + onCheckedChange: (Boolean) -> Unit, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier + .fillMaxWidth() + .padding( + vertical = ReedTheme.spacing.spacing4, + horizontal = ReedTheme.spacing.spacing5, + ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Column { + Text( + text = title, + color = ReedTheme.colors.contentPrimary, + style = ReedTheme.typography.body1Medium, + ) + Text( + text = description, + color = ReedTheme.colors.contentTertiary, + style = ReedTheme.typography.label1Medium, + ) + } + ReedSwitch( + checked = isChecked, + onCheckedChange = { + onCheckedChange(!isChecked) + }, + ) + } +} + +@DevicePreview +@Composable +private fun ToggleItemPreview() { + ReedTheme { + ToggleItem( + title = "알림 받기", + description = "리드에서 알림을 보내드려요", + isChecked = true, + onCheckedChange = {}, + ) + } +} diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index 6cafac2d..6b868357 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -28,7 +28,7 @@ class NotificationPresenter @AssistedInject constructor( } is NotificationUiEvent.OnNotificationToggle -> { - isNotificationEnabled = !isNotificationEnabled + isNotificationEnabled = event.enabled } } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index dd3b9c84..3c1d475a 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -3,8 +3,8 @@ package com.ninecraft.booket.feature.settings.notification import android.content.Intent import android.net.Uri import android.provider.Settings -import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -32,7 +32,7 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.feature.screens.NotificationScreen import com.ninecraft.booket.feature.settings.R -import com.ninecraft.booket.feature.settings.component.ReedSwitch +import com.ninecraft.booket.feature.settings.component.ToggleItem import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR @@ -62,35 +62,14 @@ internal fun NotificationUi( Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2)) NotificationGuideItem() Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4)) - Row( - modifier = modifier - .fillMaxWidth() - .padding( - vertical = ReedTheme.spacing.spacing4, - horizontal = ReedTheme.spacing.spacing5, - ), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Column { - Text( - text = stringResource(R.string.notification_toggle_title), - color = ReedTheme.colors.contentPrimary, - style = ReedTheme.typography.body1Medium, - ) - Text( - text = stringResource(R.string.notification_toggle_description), - color = ReedTheme.colors.contentTertiary, - style = ReedTheme.typography.label1Medium, - ) - } - ReedSwitch( - checked = state.isNotificationEnabled, - onCheckedChange = { - state.eventSink(NotificationUiEvent.OnNotificationToggle) - }, - ) - } + ToggleItem( + title = stringResource(R.string.notification_toggle_title), + description = stringResource(R.string.notification_toggle_description), + isChecked = state.isNotificationEnabled, + onCheckedChange = { enabled -> + state.eventSink(NotificationUiEvent.OnNotificationToggle(enabled)) + }, + ) } } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt index c248a333..db521d29 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt @@ -10,5 +10,5 @@ data class NotificationUiState( sealed interface NotificationUiEvent : CircuitUiEvent { data object OnBackClick : NotificationUiEvent - data object OnNotificationToggle : NotificationUiEvent + data class OnNotificationToggle(val enabled: Boolean) : NotificationUiEvent } From 7ac5be1c08c559854e0f30c860286a408e06b1cf Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 03:59:54 +0900 Subject: [PATCH 022/116] =?UTF-8?q?[BOOK-355]=20feat:=20Notification=20Dat?= =?UTF-8?q?astore=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/datasource/NotificationDataSource.kt | 8 +++++ .../DefaultNotificationDataSource.kt | 32 +++++++++++++++++++ .../core/datastore/impl/di/DataStoreModule.kt | 17 ++++++++++ .../datastore/impl/di/DataStoreQualifier.kt | 4 +++ 4 files changed, 61 insertions(+) create mode 100644 core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt create mode 100644 core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt diff --git a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt new file mode 100644 index 00000000..6b0d1483 --- /dev/null +++ b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt @@ -0,0 +1,8 @@ +package com.ninecraft.booket.core.datastore.api.datasource + +import kotlinx.coroutines.flow.Flow + +interface NotificationDataSource { + val isNotificationEnabled: Flow + suspend fun setNotificationEnabled(isEnabled: Boolean) +} diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt new file mode 100644 index 00000000..a6ff06ea --- /dev/null +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt @@ -0,0 +1,32 @@ +package com.ninecraft.booket.core.datastore.impl.datasource + +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource +import com.ninecraft.booket.core.datastore.impl.di.NotificationDataStore +import com.ninecraft.booket.core.datastore.impl.util.handleIOException +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import javax.inject.Inject + +class DefaultNotificationDataSource @Inject constructor( + @NotificationDataStore private val dataStore: DataStore, +) : NotificationDataSource { + override val isNotificationEnabled: Flow = dataStore.data + .handleIOException() + .map { prefs -> + prefs[NOTIFICATION_ENABLED] ?: false + } + + override suspend fun setNotificationEnabled(isEnabled: Boolean) { + dataStore.edit { prefs -> + prefs[NOTIFICATION_ENABLED] = isEnabled + } + } + + companion object Companion { + private val NOTIFICATION_ENABLED = booleanPreferencesKey("NOTIFICATION_ENABLED") + } +} diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreModule.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreModule.kt index 08e11837..88a2c3cc 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreModule.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreModule.kt @@ -6,11 +6,13 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.preferencesDataStore import com.ninecraft.booket.core.datastore.api.datasource.BookRecentSearchDataSource import com.ninecraft.booket.core.datastore.api.datasource.LibraryRecentSearchDataSource +import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource import com.ninecraft.booket.core.datastore.impl.datasource.DefaultLibraryRecentSearchDataSource import com.ninecraft.booket.core.datastore.impl.datasource.DefaultOnboardingDataSource import com.ninecraft.booket.core.datastore.impl.datasource.DefaultBookRecentSearchDataSource +import com.ninecraft.booket.core.datastore.impl.datasource.DefaultNotificationDataSource import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenDataSource import dagger.Binds import dagger.Module @@ -27,11 +29,13 @@ object DataStoreModule { private const val BOOK_RECENT_SEARCH_DATASTORE_NAME = "BOOK_RECENT_SEARCH_DATASTORE" private const val LIBRARY_RECENT_SEARCH_DATASTORE_NAME = "LIBRARY_RECENT_SEARCH_DATASTORE" private const val ONBOARDING_DATASTORE_NAME = "ONBOARDING_DATASTORE" + private const val NOTIFICATION_DATASTORE_NAME = "NOTIFICATION_DATASTORE" private val Context.tokenDataStore by preferencesDataStore(name = TOKEN_DATASTORE_NAME) private val Context.bookRecentSearchDataStore by preferencesDataStore(name = BOOK_RECENT_SEARCH_DATASTORE_NAME) private val Context.libraryRecentSearchDataStore by preferencesDataStore(name = LIBRARY_RECENT_SEARCH_DATASTORE_NAME) private val Context.onboardingDataStore by preferencesDataStore(name = ONBOARDING_DATASTORE_NAME) + private val Context.notificationDataStore by preferencesDataStore(name = NOTIFICATION_DATASTORE_NAME) @TokenDataStore @Provides @@ -60,6 +64,13 @@ object DataStoreModule { fun provideOnboardingDataStore( @ApplicationContext context: Context, ): DataStore = context.onboardingDataStore + + @NotificationDataStore + @Provides + @Singleton + fun provideNotificationDataStore( + @ApplicationContext context: Context, + ): DataStore = context.notificationDataStore } @Module @@ -89,4 +100,10 @@ abstract class DataStoreBindModule { abstract fun bindOnboardingDataSource( defaultOnboardingDataSource: DefaultOnboardingDataSource, ): OnboardingDataSource + + @Binds + @Singleton + abstract fun bindNotificationDataSource( + defaultNotificationDataSource: DefaultNotificationDataSource, + ): NotificationDataSource } diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreQualifier.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreQualifier.kt index 49262242..8a65ab8c 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreQualifier.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/di/DataStoreQualifier.kt @@ -17,3 +17,7 @@ annotation class LibraryRecentSearchDataStore @Qualifier @Retention(AnnotationRetention.BINARY) annotation class OnboardingDataStore + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class NotificationDataStore From 86f97bcab4200abb8392d1022db5e520c95b0736 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 04:23:44 +0900 Subject: [PATCH 023/116] =?UTF-8?q?[BOOK-355]=20feat:=20=ED=99=88=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=97=90=20=EC=95=8C=EB=A6=BC=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EC=9A=94=EC=B2=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + feature/home/build.gradle.kts | 1 + .../ninecraft/booket/feature/home/HomeUi.kt | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7a93c3d6..5e60c23b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + = Build.VERSION_CODES.TIRAMISU) { + val permission = android.Manifest.permission.POST_NOTIFICATIONS + val permissionLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission(), + ) { granted -> + if (!granted) { + Logger.d("Notification permission not granted") + } + } + + LaunchedEffect(Unit) { + permissionLauncher.launch(permission) + } + } + ReedScaffold( modifier = modifier.fillMaxSize(), bottomBar = { From 1190e03498ef7cb65d8dfb94cfac261eada02dcb Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 11:08:00 +0900 Subject: [PATCH 024/116] =?UTF-8?q?[BOOK-355]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=20=EC=9A=94=EC=B2=AD=EC=97=90=EC=84=9C=20?= =?UTF-8?q?Guest=20Mode=20=EB=B6=84=EA=B8=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/feature/home/HomePresenter.kt | 6 +++- .../ninecraft/booket/feature/home/HomeUi.kt | 30 ++++++++++++------- .../booket/feature/home/HomeUiState.kt | 1 + 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 175b1804..3bfb3f5c 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -11,9 +11,9 @@ import com.ninecraft.booket.core.data.api.repository.BookRepository import com.ninecraft.booket.core.model.RecentBookModel import com.ninecraft.booket.core.model.UserState import com.ninecraft.booket.feature.screens.BookDetailScreen +import com.ninecraft.booket.feature.screens.BookSearchScreen import com.ninecraft.booket.feature.screens.HomeScreen import com.ninecraft.booket.feature.screens.RecordScreen -import com.ninecraft.booket.feature.screens.BookSearchScreen import com.ninecraft.booket.feature.screens.SettingsScreen import com.skydoves.compose.effects.RememberedEffect import com.slack.circuit.codegen.annotations.CircuitInject @@ -89,6 +89,10 @@ class HomePresenter @AssistedInject constructor( restoreState = true, ) } + + is HomeUiEvent.OnNotificationPermissionResult -> { + // TODO: 서버 동기화, FCM 토큰 전송 + } } } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 9f0b9dc6..3f729ff7 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -1,5 +1,6 @@ package com.ninecraft.booket.feature.home +import android.content.pm.PackageManager import android.os.Build import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -25,8 +26,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.core.content.ContextCompat import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.HomeBg import com.ninecraft.booket.core.designsystem.theme.ReedTheme @@ -53,18 +56,25 @@ internal fun HomeUi( ) { HandleHomeSideEffects(state = state) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - val permission = android.Manifest.permission.POST_NOTIFICATIONS - val permissionLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.RequestPermission(), - ) { granted -> - if (!granted) { - Logger.d("Notification permission not granted") - } - } + val context = LocalContext.current + val permissionLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission(), + ) { granted -> + state.eventSink(HomeUiEvent.OnNotificationPermissionResult(granted)) + } + if (!state.isGuestMode) { LaunchedEffect(Unit) { - permissionLauncher.launch(permission) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + val permission = android.Manifest.permission.POST_NOTIFICATIONS + val isGranted = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED + + if (!isGranted) { + permissionLauncher.launch(permission) + } + } else { + state.eventSink(HomeUiEvent.OnNotificationPermissionResult(true)) + } } } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt index c90d001a..39377b53 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt @@ -43,4 +43,5 @@ sealed interface HomeUiEvent : CircuitUiEvent { ) : HomeUiEvent data object OnRetryClick : HomeUiEvent data class OnTabSelected(val tab: MainTab) : HomeUiEvent + data class OnNotificationPermissionResult(val isGranted: Boolean) : HomeUiEvent } From 39b097d0ca748380afda7cb502d00b12ad1d533a Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 11:08:20 +0900 Subject: [PATCH 025/116] =?UTF-8?q?[BOOK-355]=20feat:=20NOTIFICATION=5FENA?= =?UTF-8?q?BLED=20default=EA=B0=92=20true=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datastore/impl/datasource/DefaultNotificationDataSource.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt index a6ff06ea..24db08c0 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt @@ -17,7 +17,7 @@ class DefaultNotificationDataSource @Inject constructor( override val isNotificationEnabled: Flow = dataStore.data .handleIOException() .map { prefs -> - prefs[NOTIFICATION_ENABLED] ?: false + prefs[NOTIFICATION_ENABLED] ?: true } override suspend fun setNotificationEnabled(isEnabled: Boolean) { From 40695489f6894ba5ab4ac69d7e5630ec5707a99e Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 14:47:20 +0900 Subject: [PATCH 026/116] =?UTF-8?q?[BOOK-355]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=ED=86=A0=EA=B8=80=20=EC=83=81=ED=83=9C=EB=A5=BC=20dataStore?= =?UTF-8?q?=EC=97=90=20=EB=8F=99=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/api/repository/UserRepository.kt | 4 + .../impl/repository/DefaultUserRepository.kt | 8 ++ .../notification/NotificationPresenter.kt | 15 ++-- .../settings/notification/NotificationUi.kt | 89 +++++++++++++++---- 4 files changed, 92 insertions(+), 24 deletions(-) diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 049c19b3..00a34c9a 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -13,4 +13,8 @@ interface UserRepository { val onboardingState: Flow suspend fun setOnboardingCompleted(isCompleted: Boolean) + + val isNotificationEnabled: Flow + + suspend fun setNotificationEnabled(isEnabled: Boolean) } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index f9cf7741..14531cfe 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -3,6 +3,7 @@ package com.ninecraft.booket.core.data.impl.repository import com.ninecraft.booket.core.common.utils.runSuspendCatching import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.core.data.impl.mapper.toModel +import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource import com.ninecraft.booket.core.network.request.TermsAgreementRequest import com.ninecraft.booket.core.network.service.ReedService @@ -11,6 +12,7 @@ import javax.inject.Inject internal class DefaultUserRepository @Inject constructor( private val service: ReedService, private val onboardingDataSource: OnboardingDataSource, + private val notificationDataSource: NotificationDataSource, ) : UserRepository { override suspend fun agreeTerms(termsAgreed: Boolean) = runSuspendCatching { service.agreeTerms(TermsAgreementRequest(termsAgreed)).toModel() @@ -25,4 +27,10 @@ internal class DefaultUserRepository @Inject constructor( override suspend fun setOnboardingCompleted(isCompleted: Boolean) { onboardingDataSource.setOnboardingCompleted(isCompleted) } + + override val isNotificationEnabled = notificationDataSource.isNotificationEnabled + + override suspend fun setNotificationEnabled(isEnabled: Boolean) { + notificationDataSource.setNotificationEnabled(isEnabled) + } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index 6b868357..706b8488 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -2,24 +2,27 @@ package com.ninecraft.booket.feature.settings.notification import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.setValue +import androidx.compose.runtime.rememberCoroutineScope +import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.feature.screens.NotificationScreen import com.slack.circuit.codegen.annotations.CircuitInject -import com.slack.circuit.retained.rememberRetained +import com.slack.circuit.retained.collectAsRetainedState import com.slack.circuit.runtime.Navigator import com.slack.circuit.runtime.presenter.Presenter import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.components.ActivityRetainedComponent +import kotlinx.coroutines.launch class NotificationPresenter @AssistedInject constructor( @Assisted val navigator: Navigator, + private val userRepository: UserRepository, ) : Presenter { @Composable override fun present(): NotificationUiState { - var isNotificationEnabled by rememberRetained { mutableStateOf(false) } + val scope = rememberCoroutineScope() + val isNotificationEnabled by userRepository.isNotificationEnabled.collectAsRetainedState(initial = false) fun handleEvent(event: NotificationUiEvent) { when (event) { @@ -28,7 +31,9 @@ class NotificationPresenter @AssistedInject constructor( } is NotificationUiEvent.OnNotificationToggle -> { - isNotificationEnabled = event.enabled + scope.launch { + userRepository.setNotificationEnabled(event.enabled) + } } } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 3c1d475a..1b8c6ef0 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -1,10 +1,13 @@ package com.ninecraft.booket.feature.settings.notification +import android.content.Context import android.content.Intent -import android.net.Uri +import android.content.pm.PackageManager +import android.os.Build import android.provider.Settings import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.RequiresApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -18,12 +21,19 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.produceState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import androidx.core.content.ContextCompat +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.compose.LocalLifecycleOwner import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme @@ -43,6 +53,33 @@ internal fun NotificationUi( state: NotificationUiState, modifier: Modifier = Modifier, ) { + val context = LocalContext.current + val lifecycleOwner = LocalLifecycleOwner.current + + val isGranted by produceState( + initialValue = checkNotificationPermission(context), + key1 = lifecycleOwner, + ) { + // 포그라운드 복귀 시 OS 권한 동기화 + val observer = LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_RESUME) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + value = checkNotificationPermission(context) + } + } + } + lifecycleOwner.lifecycle.addObserver(observer) + awaitDispose { lifecycleOwner.lifecycle.removeObserver(observer) } + } + + val settingsLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + ) { _ -> } + + val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply { + putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) + } + ReedScaffold( modifier = modifier.fillMaxSize(), containerColor = White, @@ -59,15 +96,24 @@ internal fun NotificationUi( state.eventSink(NotificationUiEvent.OnBackClick) }, ) + if (!isGranted) { + NotificationGuideItem( + onClick = { + settingsLauncher.launch(intent) + }, + ) + } Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2)) - NotificationGuideItem() - Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4)) ToggleItem( title = stringResource(R.string.notification_toggle_title), description = stringResource(R.string.notification_toggle_description), - isChecked = state.isNotificationEnabled, + isChecked = isGranted && state.isNotificationEnabled, onCheckedChange = { enabled -> - state.eventSink(NotificationUiEvent.OnNotificationToggle(enabled)) + if (isGranted) { + state.eventSink(NotificationUiEvent.OnNotificationToggle(enabled)) + } else { + settingsLauncher.launch(intent) + } }, ) } @@ -75,26 +121,22 @@ internal fun NotificationUi( } @Composable -internal fun NotificationGuideItem() { - val context = LocalContext.current - val settingsLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.StartActivityForResult(), - ) { _ -> } - +internal fun NotificationGuideItem( + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { Row( - modifier = Modifier - .padding(horizontal = ReedTheme.spacing.spacing5) + modifier = modifier + .padding( + vertical = ReedTheme.spacing.spacing2, + horizontal = ReedTheme.spacing.spacing5, + ) .fillMaxWidth() .background( color = ReedTheme.colors.baseSecondary, shape = RoundedCornerShape(ReedTheme.radius.md), ) - .noRippleClickable { - val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { - data = Uri.fromParts("package", context.packageName, null) - } - settingsLauncher.launch(intent) - } + .noRippleClickable { onClick() } .padding( vertical = ReedTheme.spacing.spacing6, horizontal = ReedTheme.spacing.spacing5, @@ -122,6 +164,15 @@ internal fun NotificationGuideItem() { } } +private fun checkNotificationPermission(context: Context): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + ContextCompat.checkSelfPermission(context, android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED + } else { + true + } +} + +@RequiresApi(Build.VERSION_CODES.TIRAMISU) @DevicePreview @Composable private fun NotificationUiPreview() { From 94aaa4cbf1a1cf009ee206fb9fc5bed201cc073f Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 14:50:26 +0900 Subject: [PATCH 027/116] =?UTF-8?q?[BOOK-355]=20feat:=20Guest=20Mode?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=84=A4=EC=A0=95=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EB=B9=84=EB=85=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/feature/settings/SettingsUi.kt | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt index cc14a049..d2b13b71 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt @@ -98,19 +98,21 @@ internal fun SettingsUi( ) }, ) - SettingItem( - title = stringResource(R.string.settings_notification), - onItemClick = { - state.eventSink(SettingsUiEvent.OnNotificationClick) - }, - action = { - Icon( - imageVector = ImageVector.vectorResource(id = designR.drawable.ic_chevron_right), - contentDescription = "Right Chevron Icon", - tint = Color.Unspecified, - ) - }, - ) + if (!state.isGuestMode) { + SettingItem( + title = stringResource(R.string.settings_notification), + onItemClick = { + state.eventSink(SettingsUiEvent.OnNotificationClick) + }, + action = { + Icon( + imageVector = ImageVector.vectorResource(id = designR.drawable.ic_chevron_right), + contentDescription = "Right Chevron Icon", + tint = Color.Unspecified, + ) + }, + ) + } SettingItem( title = stringResource(R.string.settings_terms_of_service), onItemClick = { From e9969fd36c72178f115f97927784df6b738a43d3 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 15:10:02 +0900 Subject: [PATCH 028/116] [BOOK-355] chore: code style check success --- .../src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt | 1 - .../booket/feature/settings/notification/NotificationUi.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 3f729ff7..8219946c 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -43,7 +43,6 @@ import com.ninecraft.booket.feature.home.component.HomeHeader import com.ninecraft.booket.feature.screens.HomeScreen import com.ninecraft.booket.feature.screens.component.MainBottomBar import com.ninecraft.booket.feature.screens.component.MainTab -import com.orhanobut.logger.Logger import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 1b8c6ef0..72963bdb 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.ui.Alignment From c0a83f15edd4884753648f04d314963bb16f0081 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 17 Oct 2025 18:02:36 +0900 Subject: [PATCH 029/116] =?UTF-8?q?[BOOK-355]=20fix:=20Android=2013=20?= =?UTF-8?q?=EB=AF=B8=EB=A7=8C=EC=97=90=EC=84=9C=20=EC=8B=9C=EC=8A=A4?= =?UTF-8?q?=ED=85=9C=20=EC=95=8C=EB=A6=BC=20=EB=B9=84=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94=20=EC=8B=9C=20=EB=8F=99=EA=B8=B0=ED=99=94=20=EC=95=88?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../settings/notification/NotificationUi.kt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 72963bdb..39377518 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -2,7 +2,6 @@ package com.ninecraft.booket.feature.settings.notification import android.content.Context import android.content.Intent -import android.content.pm.PackageManager import android.os.Build import android.provider.Settings import androidx.activity.compose.rememberLauncherForActivityResult @@ -29,7 +28,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource -import androidx.core.content.ContextCompat +import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner @@ -62,9 +61,7 @@ internal fun NotificationUi( // 포그라운드 복귀 시 OS 권한 동기화 val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - value = checkNotificationPermission(context) - } + value = checkNotificationPermission(context) } } lifecycleOwner.lifecycle.addObserver(observer) @@ -164,11 +161,8 @@ internal fun NotificationGuideItem( } private fun checkNotificationPermission(context: Context): Boolean { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - ContextCompat.checkSelfPermission(context, android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED - } else { - true - } + val notificationManager = NotificationManagerCompat.from(context) + return notificationManager.areNotificationsEnabled() } @RequiresApi(Build.VERSION_CODES.TIRAMISU) From 46a039f38362a6eb847e74cb1d3a0cd635053a62 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Sat, 18 Oct 2025 20:20:24 +0900 Subject: [PATCH 030/116] =?UTF-8?q?[BOOK-364]=20chore:=20firebase-messagin?= =?UTF-8?q?g=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt | 1 + gradle/libs.versions.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt b/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt index fa0b0972..dc9423db 100644 --- a/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt +++ b/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt @@ -19,6 +19,7 @@ internal class AndroidFirebaseConventionPlugin : Plugin { implementation(platform(libs.firebase.bom)) implementation(libs.firebase.analytics) implementation(libs.firebase.crashlytics) + implementation(libs.firebase.messaging) } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0bf3eff7..b4cc76a0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -149,6 +149,7 @@ androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom" } firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics" } firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" } +firebase-messaging = { group = "com.google.firebase", name = "firebase-messaging" } firebase-remote-config = { group = "com.google.firebase", name = "firebase-config" } [plugins] From ef67f21e32602554a1d7398cc795081fbd3eb759 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 20 Oct 2025 16:51:28 +0900 Subject: [PATCH 031/116] =?UTF-8?q?[BOOK-367]=20fix:=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20API=20=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 누락된 ErrorScope.Login + Dialog 에러 처리 적용 --- .../booket/feature/login/LoginPresenter.kt | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt index 34917f4e..c75d6b2b 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt @@ -6,6 +6,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper +import com.ninecraft.booket.core.common.constants.ErrorScope +import com.ninecraft.booket.core.common.utils.postErrorDialog import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.feature.screens.HomeScreen @@ -60,10 +62,11 @@ class LoginPresenter @AssistedInject constructor( } } }.onFailure { exception -> - exception.message?.let { Logger.e(it) } - sideEffect = exception.message?.let { - LoginSideEffect.ShowToast(it) - } + Logger.e(exception.message ?: "Failed to get user profile") + postErrorDialog( + errorScope = ErrorScope.LOGIN, + exception = exception, + ) } } } @@ -89,11 +92,12 @@ class LoginPresenter @AssistedInject constructor( .onSuccess { navigateAfterLogin() }.onFailure { exception -> - exception.message?.let { Logger.e(it) } + Logger.e(exception.message ?: "Login failed") analyticsHelper.logEvent(EVENT_ERROR_LOGIN) - sideEffect = exception.message?.let { - LoginSideEffect.ShowToast(it) - } + postErrorDialog( + errorScope = ErrorScope.LOGIN, + exception = exception, + ) } } finally { isLoading = false From c8ab3887b934150f05889b2f14674cdb1461ccab Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 20 Oct 2025 21:59:13 +0900 Subject: [PATCH 032/116] =?UTF-8?q?[BOOK-367]=20feat:=20=EC=A0=84=EC=97=AD?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=20=EB=8B=A4=EC=9D=B4=EC=96=BC=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=97=90=20=ED=83=80=EC=9D=B4=ED=8B=80=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/common/constants/ErrorDialogSpec.kt | 1 + .../core/common/utils/HandleException.kt | 42 ++++++++----------- .../booket/feature/main/MainActivity.kt | 1 + 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt index 270ea48e..2d1d9544 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt @@ -3,6 +3,7 @@ package com.ninecraft.booket.core.common.constants import androidx.annotation.StringRes data class ErrorDialogSpec( + val title: String? = null, val message: String, @StringRes val buttonLabelResId: Int, val action: () -> Unit, diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index ed84d6e8..f9a2a42f 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -51,53 +51,45 @@ fun postErrorDialog( @StringRes buttonLabelResId: Int = R.string.confirm, action: () -> Unit = {}, ) { - val spec = buildDialog( - scope = errorScope, - exception = exception, - buttonLabelResId = buttonLabelResId, - action = action, - ) - - ErrorEventHelper.sendError(event = ErrorEvent.ShowDialog(spec)) -} - -private fun buildDialog( - scope: ErrorScope, - exception: Throwable, - @StringRes buttonLabelResId: Int, - action: () -> Unit, -): ErrorDialogSpec { - val message = when { + val (title, message) = when { exception.isNetworkError() -> { - "네트워크 연결이 불안정합니다.\n인터넷 연결을 확인해주세요" + null to "네트워크 연결이 불안정합니다.\n인터넷 연결을 확인해주세요" } exception is HttpException -> { - when (scope) { + when (errorScope) { ErrorScope.GLOBAL -> { - "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" + null to "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" } ErrorScope.LOGIN -> { - "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." + val loginErrorTitle = "로그인 오류" + loginErrorTitle to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." } ErrorScope.BOOK_REGISTER -> { - "도서 등록 중 오류가 발생했어요.\n다시 시도해주세요" + null to "도서 등록 중 오류가 발생했어요.\n다시 시도해주세요" } ErrorScope.RECORD_REGISTER -> { - "기록 저장에 실패했어요.\n다시 시도해주세요" + null to "기록 저장에 실패했어요.\n다시 시도해주세요" } } } else -> { - "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" + null to "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" } } - return ErrorDialogSpec(message = message, buttonLabelResId = buttonLabelResId, action = action) + val spec = ErrorDialogSpec( + title = title, + message = message, + buttonLabelResId = buttonLabelResId, + action = action, + ) + + ErrorEventHelper.sendError(event = ErrorEvent.ShowDialog(spec)) } @Suppress("TooGenericExceptionCaught") diff --git a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt index 93ad9fcc..b1d44684 100644 --- a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt +++ b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt @@ -70,6 +70,7 @@ class MainActivity : ComponentActivity() { dialogSpec.value?.let { spec -> ReedDialog( + title = spec.title, description = spec.message, confirmButtonText = stringResource(spec.buttonLabelResId), From 125fc7aaea14337764cb5b1898f4c4c55afac3cb Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 21 Oct 2025 05:07:40 +0900 Subject: [PATCH 033/116] =?UTF-8?q?[BOOK-367]=20chore:=20=EB=AF=B8?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20ErrorScope=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ninecraft/booket/core/common/constants/ErrorScope.kt | 2 +- .../ninecraft/booket/core/common/utils/HandleException.kt | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt index 9fa2c258..c435b457 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt @@ -1,5 +1,5 @@ package com.ninecraft.booket.core.common.constants enum class ErrorScope { - GLOBAL, LOGIN, BOOK_REGISTER, RECORD_REGISTER + GLOBAL, LOGIN } diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index f9a2a42f..0d7f8cd5 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -66,14 +66,6 @@ fun postErrorDialog( val loginErrorTitle = "로그인 오류" loginErrorTitle to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." } - - ErrorScope.BOOK_REGISTER -> { - null to "도서 등록 중 오류가 발생했어요.\n다시 시도해주세요" - } - - ErrorScope.RECORD_REGISTER -> { - null to "기록 저장에 실패했어요.\n다시 시도해주세요" - } } } From b604d9c95d835e6a6f5cf18063f53f033e8ed7cd Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 21 Oct 2025 05:17:23 +0900 Subject: [PATCH 034/116] =?UTF-8?q?[BOOK-367]=20feat:=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=84=B8=EC=85=98=20=EB=A7=8C=EB=A3=8C=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=ED=95=B8=EB=93=A4=EB=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/common/constants/ErrorScope.kt | 2 +- .../booket/core/common/utils/HandleException.kt | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt index c435b457..bae8788c 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorScope.kt @@ -1,5 +1,5 @@ package com.ninecraft.booket.core.common.constants enum class ErrorScope { - GLOBAL, LOGIN + GLOBAL, LOGIN, AUTH_SESSION_EXPIRED, } diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index 0d7f8cd5..e467e021 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -23,7 +23,13 @@ fun handleException( ) { when { exception is HttpException && exception.code() == 401 -> { - onLoginRequired() + postErrorDialog( + errorScope = ErrorScope.AUTH_SESSION_EXPIRED, + exception = exception, + action = { + onLoginRequired() + } + ) } exception is HttpException -> { @@ -66,6 +72,10 @@ fun postErrorDialog( val loginErrorTitle = "로그인 오류" loginErrorTitle to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." } + + ErrorScope.AUTH_SESSION_EXPIRED -> { + null to "세션이 만료되었어요.\n다시 로그인 해주세요" + } } } From 24954eb24dda207aaa1d6b1bacb11dd9c3f8c24e Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 21 Oct 2025 05:57:08 +0900 Subject: [PATCH 035/116] =?UTF-8?q?[BOOK-367]=20fix:=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=ED=9B=84=20=EC=9E=AC=EC=8B=9C=EB=8F=84=20=ED=95=98=EB=A9=B4=20?= =?UTF-8?q?=EB=AC=B4=ED=95=9C=EB=A1=9C=EB=94=A9=20=EB=9C=A8=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/core/common/utils/HandleException.kt | 2 +- .../kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt | 2 +- .../kotlin/com/ninecraft/booket/feature/login/LoginUiState.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index e467e021..ee7a4147 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -28,7 +28,7 @@ fun handleException( exception = exception, action = { onLoginRequired() - } + }, ) } diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt index c75d6b2b..8eb0bfc2 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt @@ -75,7 +75,7 @@ class LoginPresenter @AssistedInject constructor( when (event) { is LoginUiEvent.OnKakaoLoginButtonClick -> { isLoading = true - sideEffect = LoginSideEffect.KakaoLogin + sideEffect = LoginSideEffect.KakaoLogin() } is LoginUiEvent.LoginFailure -> { diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUiState.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUiState.kt index 731e2bcb..1f58e248 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUiState.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUiState.kt @@ -15,7 +15,7 @@ data class LoginUiState( @Immutable sealed interface LoginSideEffect { - data object KakaoLogin : LoginSideEffect + data class KakaoLogin(private val key: String = UUID.randomUUID().toString()) : LoginSideEffect data class ShowToast( val message: String, private val key: String = UUID.randomUUID().toString(), From 1914ff22b704b479bf336b4655a80cf2c91d117f Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 21 Oct 2025 06:31:32 +0900 Subject: [PATCH 036/116] =?UTF-8?q?[BOOK-367]=20feat:=20=ED=99=88,=20?= =?UTF-8?q?=EB=82=B4=EC=84=9C=EC=9E=AC=EC=97=90=EC=84=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=84=B8=EC=85=98=20=EB=A7=8C=EB=A3=8C=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ninecraft/booket/feature/home/HomePresenter.kt | 10 ++++++++++ .../booket/feature/library/LibraryPresenter.kt | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 3bfb3f5c..f587d82c 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper +import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.BookRepository import com.ninecraft.booket.core.model.RecentBookModel @@ -13,6 +14,7 @@ import com.ninecraft.booket.core.model.UserState import com.ninecraft.booket.feature.screens.BookDetailScreen import com.ninecraft.booket.feature.screens.BookSearchScreen import com.ninecraft.booket.feature.screens.HomeScreen +import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.RecordScreen import com.ninecraft.booket.feature.screens.SettingsScreen import com.skydoves.compose.effects.RememberedEffect @@ -56,6 +58,14 @@ class HomePresenter @AssistedInject constructor( recentBooks = result.recentBooks.toPersistentList() }.onFailure { exception -> uiState = UiState.Error(exception) + + handleException( + exception = exception, + onError = {}, + onLoginRequired = { + navigator.resetRoot(LoginScreen()) + }, + ) } } } diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt index 712d21d0..20150362 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.utils.UiText +import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.BookRepository import com.ninecraft.booket.core.model.LibraryBookSummaryModel @@ -16,6 +17,7 @@ import com.ninecraft.booket.core.ui.component.FooterState import com.ninecraft.booket.feature.screens.BookDetailScreen import com.ninecraft.booket.feature.screens.LibraryScreen import com.ninecraft.booket.feature.screens.LibrarySearchScreen +import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.SettingsScreen import com.ninecraft.booket.feature.screens.extensions.redirectToLogin import com.orhanobut.logger.Logger @@ -105,6 +107,16 @@ class LibraryPresenter @AssistedInject constructor( } else { footerState = FooterState.Error(errorMessage) } + + if (userState !is UserState.Guest) { + handleException( + exception = exception, + onError = {}, + onLoginRequired = { + navigator.resetRoot(LoginScreen()) + }, + ) + } } } } From b68ed25206ba0111e5f85b152ea0e4172ed5613e Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 21 Oct 2025 07:35:13 +0900 Subject: [PATCH 037/116] =?UTF-8?q?[BOOK-367]=20refactor:=20Guest=20Mode?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=82=B4=EC=84=9C=EC=9E=AC=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=EB=A7=81=20=EC=8B=9C=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20API=EA=B0=80=20=ED=98=B8=EC=B6=9C=EB=90=98=EB=8A=94?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/library/LibraryPresenter.kt | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt index 20150362..c49b0106 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt @@ -108,15 +108,13 @@ class LibraryPresenter @AssistedInject constructor( footerState = FooterState.Error(errorMessage) } - if (userState !is UserState.Guest) { - handleException( - exception = exception, - onError = {}, - onLoginRequired = { - navigator.resetRoot(LoginScreen()) - }, - ) - } + handleException( + exception = exception, + onError = {}, + onLoginRequired = { + navigator.resetRoot(LoginScreen()) + }, + ) } } } @@ -148,7 +146,10 @@ class LibraryPresenter @AssistedInject constructor( } currentFilter = event.filterOption - filterLibraryBooks(status = currentFilter.getApiValue(), page = START_INDEX, size = PAGE_SIZE) + + if (userState !is UserState.Guest) { + filterLibraryBooks(status = currentFilter.getApiValue(), page = START_INDEX, size = PAGE_SIZE) + } } is LibraryUiEvent.OnBookClick -> { From 61910e27fb76ef69dd87cc053fb4c6658cef7855 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 21 Oct 2025 13:10:24 +0900 Subject: [PATCH 038/116] =?UTF-8?q?[BOOK-367]=20refactor:=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=ED=86=B5=EC=9D=BC=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/core/common/utils/HandleException.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index ee7a4147..e8e9ee56 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -69,8 +69,7 @@ fun postErrorDialog( } ErrorScope.LOGIN -> { - val loginErrorTitle = "로그인 오류" - loginErrorTitle to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." + "로그인 오류" to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." } ErrorScope.AUTH_SESSION_EXPIRED -> { From 574e36cfd9e103e5d79ad7ecbe6ba7619377d802 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 23 Oct 2025 09:17:47 +0900 Subject: [PATCH 039/116] =?UTF-8?q?[BOOK-364]=20feat:=20UserProfileRespons?= =?UTF-8?q?e=EC=97=90=20notificationEnabled=20=ED=94=84=EB=A1=9C=ED=8D=BC?= =?UTF-8?q?=ED=8B=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt | 1 + .../kotlin/com/ninecraft/booket/core/model/UserProfileModel.kt | 1 + .../booket/core/network/response/UserProfileResponse.kt | 2 ++ 3 files changed, 4 insertions(+) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt index ba0e0e96..cc38ad00 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt @@ -49,6 +49,7 @@ internal fun UserProfileResponse.toModel(): UserProfileModel { nickname = nickname, provider = provider, termsAgreed = termsAgreed, + notificationEnabled = notificationEnabled, ) } diff --git a/core/model/src/main/kotlin/com/ninecraft/booket/core/model/UserProfileModel.kt b/core/model/src/main/kotlin/com/ninecraft/booket/core/model/UserProfileModel.kt index b7e712d0..f972caf8 100644 --- a/core/model/src/main/kotlin/com/ninecraft/booket/core/model/UserProfileModel.kt +++ b/core/model/src/main/kotlin/com/ninecraft/booket/core/model/UserProfileModel.kt @@ -9,4 +9,5 @@ data class UserProfileModel( val nickname: String, val provider: String, val termsAgreed: Boolean, + val notificationEnabled: Boolean, ) diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/UserProfileResponse.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/UserProfileResponse.kt index a60374d3..3b871550 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/UserProfileResponse.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/UserProfileResponse.kt @@ -15,4 +15,6 @@ data class UserProfileResponse( val provider: String, @SerialName("termsAgreed") val termsAgreed: Boolean, + @SerialName("notificationEnabled") + val notificationEnabled: Boolean, ) From f264a63b0c64d27c9fb0e851c177f0a38ab5712d Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 23 Oct 2025 09:19:36 +0900 Subject: [PATCH 040/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=8C=EB=9E=8C?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20API=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/data/api/repository/UserRepository.kt | 4 ++++ .../data/impl/repository/DefaultUserRepository.kt | 13 +++++++++++++ .../booket/core/network/request/FcmTokenRequest.kt | 10 ++++++++++ .../network/request/NotificationSettingsRequest.kt | 10 ++++++++++ .../booket/core/network/service/ReedService.kt | 8 ++++++++ 5 files changed, 45 insertions(+) create mode 100644 core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt create mode 100644 core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/NotificationSettingsRequest.kt diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 00a34c9a..8eb7062f 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -17,4 +17,8 @@ interface UserRepository { val isNotificationEnabled: Flow suspend fun setNotificationEnabled(isEnabled: Boolean) + + suspend fun updateFcmToken(fcmToken: String): Result + + suspend fun updateNotificationSettings(notificationEnabled: Boolean): Result } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 14531cfe..53838a18 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -1,18 +1,23 @@ package com.ninecraft.booket.core.data.impl.repository +import com.google.firebase.messaging.FirebaseMessaging import com.ninecraft.booket.core.common.utils.runSuspendCatching import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.core.data.impl.mapper.toModel import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource +import com.ninecraft.booket.core.network.request.FcmTokenRequest +import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.TermsAgreementRequest import com.ninecraft.booket.core.network.service.ReedService +import com.orhanobut.logger.Logger import javax.inject.Inject internal class DefaultUserRepository @Inject constructor( private val service: ReedService, private val onboardingDataSource: OnboardingDataSource, private val notificationDataSource: NotificationDataSource, + private val firebaseMessaging: FirebaseMessaging, ) : UserRepository { override suspend fun agreeTerms(termsAgreed: Boolean) = runSuspendCatching { service.agreeTerms(TermsAgreementRequest(termsAgreed)).toModel() @@ -33,4 +38,12 @@ internal class DefaultUserRepository @Inject constructor( override suspend fun setNotificationEnabled(isEnabled: Boolean) { notificationDataSource.setNotificationEnabled(isEnabled) } + + override suspend fun updateFcmToken(fcmToken: String) = runSuspendCatching { + service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() + } + + override suspend fun updateNotificationSettings(notificationEnabled: Boolean) = runSuspendCatching { + service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel() + } } diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt new file mode 100644 index 00000000..7ad8220a --- /dev/null +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt @@ -0,0 +1,10 @@ +package com.ninecraft.booket.core.network.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class FcmTokenRequest( + @SerialName("fcmToken") + val fcmToken: String, +) diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/NotificationSettingsRequest.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/NotificationSettingsRequest.kt new file mode 100644 index 00000000..b2dc87cc --- /dev/null +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/NotificationSettingsRequest.kt @@ -0,0 +1,10 @@ +package com.ninecraft.booket.core.network.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class NotificationSettingsRequest( + @SerialName("notificationEnabled") + val notificationEnabled: Boolean, +) diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt index 00dc717b..79039967 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt @@ -1,7 +1,9 @@ package com.ninecraft.booket.core.network.service import com.ninecraft.booket.core.network.request.BookUpsertRequest +import com.ninecraft.booket.core.network.request.FcmTokenRequest import com.ninecraft.booket.core.network.request.LoginRequest +import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.RecordRegisterRequest import com.ninecraft.booket.core.network.request.RefreshTokenRequest import com.ninecraft.booket.core.network.request.TermsAgreementRequest @@ -51,6 +53,12 @@ interface ReedService { @GET("api/v1/users/me") suspend fun getUserProfile(): UserProfileResponse + @PUT("api/v1/users/me/fcm-token") + suspend fun updateFcmToken(@Body fcmTokenRequest: FcmTokenRequest): UserProfileResponse + + @PUT("api/v1/users/me/notification-settings") + suspend fun updateNotificationSettings(@Body notificationSettingsRequest: NotificationSettingsRequest): UserProfileResponse + // Book endpoints (no auth required) @GET("api/v1/books/guest/search") suspend fun searchBookAsGuest( From 48835f40037c7360cc425c2267236134c87743bb Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 23 Oct 2025 09:25:37 +0900 Subject: [PATCH 041/116] =?UTF-8?q?[BOOK-364]=20feat:=20FirebaseMessagingS?= =?UTF-8?q?ervice=20=EC=84=B8=ED=8C=85=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../booket/ReedFirebaseMessagingService.kt | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5e60c23b..2e277476 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -73,6 +73,7 @@ tools:replace="android:resource" /> + diff --git a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt new file mode 100644 index 00000000..6ed6e2e5 --- /dev/null +++ b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt @@ -0,0 +1,18 @@ +package com.ninecraft.booket + +import com.google.firebase.messaging.FirebaseMessagingService +import com.google.firebase.messaging.RemoteMessage +import com.orhanobut.logger.Logger + +class ReedFirebaseMessagingService : FirebaseMessagingService() { + + override fun onNewToken(token: String) { + super.onNewToken(token) + Logger.d("onNewToken: $token") + // TODO: 토큰 update + } + + override fun onMessageReceived(message: RemoteMessage) { + super.onMessageReceived(message) + } +} From d612f6ba76eb6633cf77ed1465b980e448232233 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 23 Oct 2025 09:26:55 +0900 Subject: [PATCH 042/116] =?UTF-8?q?[BOOK-364]=20feat:=20FirebaseMessaging?= =?UTF-8?q?=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/data/impl/build.gradle.kts | 1 + .../com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/core/data/impl/build.gradle.kts b/core/data/impl/build.gradle.kts index f894b8ed..c24e3f2e 100644 --- a/core/data/impl/build.gradle.kts +++ b/core/data/impl/build.gradle.kts @@ -28,6 +28,7 @@ dependencies { platform(libs.firebase.bom), libs.firebase.remote.config, + libs.firebase.messaging, libs.logger, ) } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt index 2a6f28a5..0ab51c82 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt @@ -1,6 +1,7 @@ package com.ninecraft.booket.core.data.impl.di import com.google.firebase.Firebase +import com.google.firebase.messaging.FirebaseMessaging import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.remoteConfig import com.google.firebase.remoteconfig.remoteConfigSettings @@ -26,4 +27,8 @@ internal object FirebaseModule { setConfigSettingsAsync(configSettings) } } + + @Singleton + @Provides + fun provideFirebaseMessaging(): FirebaseMessaging = FirebaseMessaging.getInstance() } From a073f33552b04351c118214032d9f0d3ea68fd0c Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 01:09:47 +0900 Subject: [PATCH 043/116] =?UTF-8?q?[BOOK-378]=20chore:=20compose-stability?= =?UTF-8?q?-analyzer=20plugin=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 1 + gradle/libs.versions.toml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 49baa4fb..0076e34f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.booket.android.application.compose) alias(libs.plugins.booket.android.hilt) alias(libs.plugins.booket.android.firebase) + alias(libs.plugins.compose.stability.analyzer) } android { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0bf3eff7..eca1f14a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,6 +24,7 @@ androidx-compose-material3 = "1.4.0-alpha18" compose-stable-marker = "1.0.6" compose-effects = "0.1.1" compose-shadow = "2.0.4" +compose-stability-analyzer = "0.2.20" ## Kotlin Symbol Processing ksp = "2.2.0-2.0.2" @@ -172,6 +173,8 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } google-service = { id = "com.google.gms.google-services", version.ref = "google-service" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" } +compose-stability-analyzer = { id = "com.github.skydoves.compose.stability.analyzer", version.ref = "compose-stability-analyzer"} + # Plugins defined by this project booket-android-application = { id = "booket.android.application", version = "unspecified" } booket-android-application-compose = { id = "booket.android.application.compose", version = "unspecified" } From e94bb49a480df9bbd5a3c751ce497b80b5e69f88 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 01:28:59 +0900 Subject: [PATCH 044/116] =?UTF-8?q?[BOOK-378]=20refactor:=20OcrUiState=20S?= =?UTF-8?q?et=20->=20ImmutableSet=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8A=94?= =?UTF-8?q?=20=EB=B0=A9=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/feature/record/ocr/OcrPresenter.kt | 12 ++++++------ .../booket/feature/record/ocr/OcrUiState.kt | 4 +++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrPresenter.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrPresenter.kt index 7ddb581d..84389369 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrPresenter.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrPresenter.kt @@ -6,9 +6,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.ocr.recognizer.CloudOcrRecognizer -import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.feature.screens.OcrScreen import com.orhanobut.logger.Logger import com.slack.circuit.codegen.annotations.CircuitInject @@ -21,7 +21,9 @@ import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toPersistentSet import kotlinx.coroutines.launch class OcrPresenter @AssistedInject constructor( @@ -40,8 +42,7 @@ class OcrPresenter @AssistedInject constructor( var currentUi by rememberRetained { mutableStateOf(OcrUi.CAMERA) } var isPermissionDialogVisible by rememberRetained { mutableStateOf(false) } var sentenceList by rememberRetained { mutableStateOf(persistentListOf()) } - var recognizedText by rememberRetained { mutableStateOf("") } - var selectedIndices by rememberRetained { mutableStateOf(setOf()) } + var selectedIndices by rememberRetained { mutableStateOf(persistentSetOf()) } var mergedSentence by rememberRetained { mutableStateOf("") } var isTextDetectionFailed by rememberRetained { mutableStateOf(false) } var isRecaptureDialogVisible by rememberRetained { mutableStateOf(false) } @@ -55,7 +56,6 @@ class OcrPresenter @AssistedInject constructor( recognizer.recognizeText(imageUri) .onSuccess { val text = it.responses.firstOrNull()?.fullTextAnnotation?.text.orEmpty() - recognizedText = text if (text.isNotBlank()) { isTextDetectionFailed = false @@ -136,11 +136,11 @@ class OcrPresenter @AssistedInject constructor( selectedIndices - event.index } else { selectedIndices + event.index - } + }.toPersistentSet() } is OcrUiEvent.OnRecaptureDialogConfirmed -> { - selectedIndices = emptySet() + selectedIndices = persistentSetOf() isRecaptureDialogVisible = false currentUi = OcrUi.CAMERA } diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUiState.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUiState.kt index 812fc57e..7b932e0b 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUiState.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUiState.kt @@ -5,14 +5,16 @@ import androidx.compose.runtime.Immutable import com.slack.circuit.runtime.CircuitUiEvent import com.slack.circuit.runtime.CircuitUiState import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.persistentSetOf import java.util.UUID data class OcrUiState( val currentUi: OcrUi = OcrUi.CAMERA, val isPermissionDialogVisible: Boolean = false, val sentenceList: ImmutableList = persistentListOf(), - val selectedIndices: Set = emptySet(), + val selectedIndices: ImmutableSet = persistentSetOf(), val isTextDetectionFailed: Boolean = false, val isRecaptureDialogVisible: Boolean = false, val isLoading: Boolean = false, From 08ce48c0ed4701d8a12fe6bec9e5f46385a34484 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 01:31:49 +0900 Subject: [PATCH 045/116] =?UTF-8?q?[BOOK-378]=20refactor:=20LibrarySearchS?= =?UTF-8?q?ideEffect=20@Immutable=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/feature/search/library/LibrarySearchUiState.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUiState.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUiState.kt index 96b576a0..3df1d404 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUiState.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUiState.kt @@ -28,6 +28,7 @@ data class LibrarySearchUiState( val eventSink: (LibrarySearchUiEvent) -> Unit, ) : CircuitUiState +@Immutable sealed interface LibrarySearchSideEffect { data class ShowToast( val message: String, From e341a3473c63e8fb616668e43f5045cb93e18855 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 01:44:53 +0900 Subject: [PATCH 046/116] =?UTF-8?q?[BOOK-378]=20refactor:=20ReedErrorUi=20?= =?UTF-8?q?Throwable=20=ED=83=80=EC=9E=85=20=EB=A7=A4=EA=B0=9C=EB=B3=80?= =?UTF-8?q?=EC=88=98=20ErrorType=20sealed=20interface=20=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ErrorType sealed interface 에 @Immutable 어노테이션 적용 --- .../booket/core/ui/component/ReedErrorUi.kt | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt index 083b39db..f3f18dc0 100644 --- a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt @@ -7,11 +7,11 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign -import com.ninecraft.booket.core.common.utils.isNetworkError import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle @@ -19,12 +19,22 @@ import com.ninecraft.booket.core.designsystem.component.button.mediumButtonStyle import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.R +@Immutable +sealed interface ErrorType { + data object NetworkError : ErrorType + data object ServerError : ErrorType +} + @Composable fun ReedErrorUi( - exception: Throwable, + errorType: ErrorType, onRetryClick: () -> Unit, ) { - val message = if (exception.isNetworkError()) stringResource(R.string.network_error_message) else stringResource(R.string.server_error_message) + val message = when (errorType) { + ErrorType.NetworkError -> stringResource(R.string.network_error_message) + ErrorType.ServerError -> stringResource(R.string.server_error_message) + } + Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center, @@ -52,7 +62,7 @@ fun ReedErrorUi( private fun ReedNetworkErrorUiPreview() { ReedTheme { ReedErrorUi( - exception = java.io.IOException("네트워크 오류"), + errorType = ErrorType.NetworkError, onRetryClick = {}, ) } @@ -63,7 +73,7 @@ private fun ReedNetworkErrorUiPreview() { private fun ReedServerErrorUiPreview() { ReedTheme { ReedErrorUi( - exception = Exception("알 수 없는 문제"), + errorType = ErrorType.ServerError, onRetryClick = {}, ) } From e815c1a7cf7976f34df8fa69ecfa68b23ccbaa77 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 01:51:23 +0900 Subject: [PATCH 047/116] =?UTF-8?q?[BOOK-378]=20refactor:=20common=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20util,=20utils=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20utils=20=EB=A1=9C=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/common/{util => utils}/EmotionAnalyzer.kt | 2 +- .../com/ninecraft/booket/core/common/utils/ErrorType.kt | 9 +++++++++ .../booket/core/common/{util => utils}/VersionUtils.kt | 2 +- .../impl/repository/DefaultRemoteConfigRepository.kt | 2 +- .../ninecraft/booket/core/ui/component/ReedErrorUi.kt | 8 +------- .../detail/book/component/EmotionAnalysisResultText.kt | 4 ++-- .../com/ninecraft/booket/feature/settings/SettingsUi.kt | 2 +- 7 files changed, 16 insertions(+), 13 deletions(-) rename core/common/src/main/kotlin/com/ninecraft/booket/core/common/{util => utils}/EmotionAnalyzer.kt (95%) create mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt rename core/common/src/main/kotlin/com/ninecraft/booket/core/common/{util => utils}/VersionUtils.kt (96%) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/util/EmotionAnalyzer.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/EmotionAnalyzer.kt similarity index 95% rename from core/common/src/main/kotlin/com/ninecraft/booket/core/common/util/EmotionAnalyzer.kt rename to core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/EmotionAnalyzer.kt index 5844fd66..06be275c 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/util/EmotionAnalyzer.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/EmotionAnalyzer.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.common.util +package com.ninecraft.booket.core.common.utils import com.ninecraft.booket.core.model.EmotionModel diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt new file mode 100644 index 00000000..7775656d --- /dev/null +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt @@ -0,0 +1,9 @@ +package com.ninecraft.booket.core.common.utils + +import androidx.compose.runtime.Immutable + +@Immutable +sealed interface ErrorType { + data object NetworkError : ErrorType + data object ServerError : ErrorType +} diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/util/VersionUtils.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/VersionUtils.kt similarity index 96% rename from core/common/src/main/kotlin/com/ninecraft/booket/core/common/util/VersionUtils.kt rename to core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/VersionUtils.kt index c91a6811..5a9a9329 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/util/VersionUtils.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/VersionUtils.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.common.util +package com.ninecraft.booket.core.common.utils import com.orhanobut.logger.Logger diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt index ea9733f6..a2292c31 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt @@ -2,7 +2,7 @@ package com.ninecraft.booket.core.data.impl.repository import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.get -import com.ninecraft.booket.core.common.util.isUpdateRequired +import com.ninecraft.booket.core.common.utils.isUpdateRequired import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository import com.ninecraft.booket.core.data.impl.BuildConfig import com.orhanobut.logger.Logger diff --git a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt index f3f18dc0..366b3e69 100644 --- a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedErrorUi.kt @@ -7,11 +7,11 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.Immutable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import com.ninecraft.booket.core.common.utils.ErrorType import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle @@ -19,12 +19,6 @@ import com.ninecraft.booket.core.designsystem.component.button.mediumButtonStyle import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.R -@Immutable -sealed interface ErrorType { - data object NetworkError : ErrorType - data object ServerError : ErrorType -} - @Composable fun ReedErrorUi( errorType: ErrorType, diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/EmotionAnalysisResultText.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/EmotionAnalysisResultText.kt index 98cd894b..a0cd832b 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/EmotionAnalysisResultText.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/EmotionAnalysisResultText.kt @@ -15,8 +15,8 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp -import com.ninecraft.booket.core.common.util.EmotionDisplayType -import com.ninecraft.booket.core.common.util.analyzeEmotions +import com.ninecraft.booket.core.common.utils.EmotionDisplayType +import com.ninecraft.booket.core.common.utils.analyzeEmotions import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.model.Emotion diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt index d2b13b71..2657c4b8 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource -import com.ninecraft.booket.core.common.util.compareVersions +import com.ninecraft.booket.core.common.utils.compareVersions import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.component.ReedDivider import com.ninecraft.booket.core.designsystem.theme.ReedTheme From 3e3fc2e8318b979194ed108725add223afe64051 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Sat, 25 Oct 2025 11:54:50 +0900 Subject: [PATCH 048/116] =?UTF-8?q?[BOOK-378]=20refactor:=20RecordEditArgs?= =?UTF-8?q?=20Parcelable=20=EA=B0=9D=EC=B2=B4=EC=97=90=20@Immutable=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compose 컴파일러가 Parcelable 객체를 runtime stability로 분류하는 문제를 해결하기 위함. RecordEditArgs는 런타임 중 값이 변경되지 않는 논리적 불변 객체이므로, @Immutable 선언을 통해 Compose에서 안정성(stability)을 명시적으로 보장할 수 있도록 수정. --- .../booket/feature/screens/arguments/RecordEditArgs.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/arguments/RecordEditArgs.kt b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/arguments/RecordEditArgs.kt index c4917736..d068dd9b 100644 --- a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/arguments/RecordEditArgs.kt +++ b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/arguments/RecordEditArgs.kt @@ -1,8 +1,10 @@ package com.ninecraft.booket.feature.screens.arguments import android.os.Parcelable +import androidx.compose.runtime.Immutable import kotlinx.parcelize.Parcelize +@Immutable @Parcelize data class RecordEditArgs( val id: String, From fa6ff4afbe7c8cb7e869b72e9bbf6c2b7d61065b Mon Sep 17 00:00:00 2001 From: seoyoon Date: Sat, 25 Oct 2025 16:57:38 +0900 Subject: [PATCH 049/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EB=B0=8F=20=EC=8A=A4=ED=94=8C=EB=9E=98=EC=8B=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20FCM=20=ED=86=A0=ED=81=B0=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/api/repository/UserRepository.kt | 4 ++- .../impl/repository/DefaultUserRepository.kt | 28 ++++++++++++++++++- .../booket/feature/login/LoginPresenter.kt | 1 + .../booket/splash/SplashPresenter.kt | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 8eb7062f..63c5e185 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -18,7 +18,9 @@ interface UserRepository { suspend fun setNotificationEnabled(isEnabled: Boolean) - suspend fun updateFcmToken(fcmToken: String): Result + suspend fun getFcmToken(): String + + suspend fun updateFcmToken(): Result suspend fun updateNotificationSettings(notificationEnabled: Boolean): Result } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 53838a18..04ffad32 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -11,7 +11,10 @@ import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.TermsAgreementRequest import com.ninecraft.booket.core.network.service.ReedService import com.orhanobut.logger.Logger +import kotlinx.coroutines.suspendCancellableCoroutine import javax.inject.Inject +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException internal class DefaultUserRepository @Inject constructor( private val service: ReedService, @@ -39,7 +42,30 @@ internal class DefaultUserRepository @Inject constructor( notificationDataSource.setNotificationEnabled(isEnabled) } - override suspend fun updateFcmToken(fcmToken: String) = runSuspendCatching { + override suspend fun getFcmToken(): String { + return try { + suspendCancellableCoroutine { continuation -> + firebaseMessaging.token.addOnCompleteListener { task -> + if (task.isSuccessful) { + continuation.resume(task.result ?: "") + Logger.d("getFcmToken: ${task.result}") + } else { + task.exception?.let { exception -> + continuation.resumeWithException(exception) + } ?: continuation.resumeWithException( + Exception("Unknown error occurred while fetching FCM token"), + ) + } + } + } + } catch (e: Exception) { + Logger.e(e, "Failed to get FCM token") + "" + } + } + + override suspend fun updateFcmToken() = runSuspendCatching { + val fcmToken = getFcmToken() service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() } diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt index 34917f4e..856045e0 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt @@ -87,6 +87,7 @@ class LoginPresenter @AssistedInject constructor( isLoading = true authRepository.login(event.accessToken) .onSuccess { + userRepository.updateFcmToken() navigateAfterLogin() }.onFailure { exception -> exception.message?.let { Logger.e(it) } diff --git a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt index 6af98e78..220ee3a2 100644 --- a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt +++ b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt @@ -54,6 +54,7 @@ class SplashPresenter @AssistedInject constructor( userRepository.getUserProfile() .onSuccess { userProfile -> if (userProfile.termsAgreed) { + userRepository.updateFcmToken() navigator.resetRoot(HomeScreen) } else { navigator.resetRoot(LoginScreen()) From e31938ee88bd9b54efa42bae0b4324a795c0fd88 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Sat, 25 Oct 2025 17:20:31 +0900 Subject: [PATCH 050/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=EC=83=81=ED=83=9C=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=20=EB=8F=99=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용자가 알림 권한을 허용/거부했을 때 서버와 상태를 동기화하는 기능 추가 - 설정 화면에서 알림 토글 시 서버와 상태를 동기화하도록 수정 --- .../booket/feature/home/HomePresenter.kt | 17 ++++++++++++++++- .../notification/NotificationPresenter.kt | 18 +++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 3bfb3f5c..768e4ae5 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.BookRepository +import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.core.model.RecentBookModel import com.ninecraft.booket.core.model.UserState import com.ninecraft.booket.feature.screens.BookDetailScreen @@ -15,6 +16,7 @@ import com.ninecraft.booket.feature.screens.BookSearchScreen import com.ninecraft.booket.feature.screens.HomeScreen import com.ninecraft.booket.feature.screens.RecordScreen import com.ninecraft.booket.feature.screens.SettingsScreen +import com.orhanobut.logger.Logger import com.skydoves.compose.effects.RememberedEffect import com.slack.circuit.codegen.annotations.CircuitInject import com.slack.circuit.retained.collectAsRetainedState @@ -34,6 +36,7 @@ class HomePresenter @AssistedInject constructor( @Assisted private val navigator: Navigator, private val bookRepository: BookRepository, private val authRepository: AuthRepository, + private val userRepository: UserRepository, private val analyticsHelper: AnalyticsHelper, ) : Presenter { @@ -60,6 +63,18 @@ class HomePresenter @AssistedInject constructor( } } + fun updateNotificationSettings(isGranted: Boolean) { + scope.launch { + userRepository.updateNotificationSettings(isGranted) + .onSuccess { + Logger.d("Notification settings updated successfully") + } + .onFailure { exception -> + Logger.d(exception.message.toString()) + } + } + } + fun handleEvent(event: HomeUiEvent) { when (event) { is HomeUiEvent.OnSettingsClick -> { @@ -91,7 +106,7 @@ class HomePresenter @AssistedInject constructor( } is HomeUiEvent.OnNotificationPermissionResult -> { - // TODO: 서버 동기화, FCM 토큰 전송 + updateNotificationSettings(event.isGranted) } } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index 706b8488..11f181ab 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.feature.screens.NotificationScreen +import com.orhanobut.logger.Logger import com.slack.circuit.codegen.annotations.CircuitInject import com.slack.circuit.retained.collectAsRetainedState import com.slack.circuit.runtime.Navigator @@ -24,6 +25,19 @@ class NotificationPresenter @AssistedInject constructor( val scope = rememberCoroutineScope() val isNotificationEnabled by userRepository.isNotificationEnabled.collectAsRetainedState(initial = false) + fun updateNotificationSettings(enabled: Boolean) { + scope.launch { + userRepository.setNotificationEnabled(enabled) + userRepository.updateNotificationSettings(enabled) + .onSuccess { + Logger.d("Notification settings updated successfully") + } + .onFailure { exception -> + Logger.d(exception.message.toString()) + } + } + } + fun handleEvent(event: NotificationUiEvent) { when (event) { is NotificationUiEvent.OnBackClick -> { @@ -31,9 +45,7 @@ class NotificationPresenter @AssistedInject constructor( } is NotificationUiEvent.OnNotificationToggle -> { - scope.launch { - userRepository.setNotificationEnabled(event.enabled) - } + updateNotificationSettings(event.enabled) } } } From b3df0853eead1ab3d96bb17cafc2abd42b468714 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 19:54:18 +0900 Subject: [PATCH 051/116] =?UTF-8?q?[BOOK-378]=20chore:=20toErrorType()=20E?= =?UTF-8?q?xception=20=ED=99=95=EC=9E=A5=20=ED=95=A8=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/common/extensions/Throwable.kt | 12 ++++++++++++ .../ninecraft/booket/core/common/utils/ErrorType.kt | 1 + .../booket/feature/detail/book/BookDetailUi.kt | 3 ++- .../booket/feature/detail/record/RecordDetailUi.kt | 3 ++- .../com/ninecraft/booket/feature/home/HomeUi.kt | 3 ++- .../ninecraft/booket/feature/library/LibraryUi.kt | 3 ++- .../booket/feature/search/book/BookSearchUi.kt | 3 ++- .../booket/feature/search/library/LibrarySearchUi.kt | 3 ++- 8 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Throwable.kt diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Throwable.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Throwable.kt new file mode 100644 index 00000000..2b0014a8 --- /dev/null +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Throwable.kt @@ -0,0 +1,12 @@ +package com.ninecraft.booket.core.common.extensions + +import com.ninecraft.booket.core.common.utils.ErrorType +import com.ninecraft.booket.core.common.utils.isNetworkError + +fun Throwable.toErrorType(): ErrorType { + return if (this.isNetworkError()) { + ErrorType.NetworkError + } else { + ErrorType.ServerError + } +} diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt index 7775656d..1a5b45a8 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt @@ -7,3 +7,4 @@ sealed interface ErrorType { data object NetworkError : ErrorType data object ServerError : ErrorType } + diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt index cc27a011..bece26b4 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.constants.BookStatus +import com.ninecraft.booket.core.common.extensions.toErrorType import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.ReedDivider import com.ninecraft.booket.core.designsystem.component.button.ReedButton @@ -352,7 +353,7 @@ internal fun BookDetailContent( is UiState.Error -> { ReedErrorUi( - exception = state.uiState.exception, + errorType = state.uiState.exception.toErrorType(), onRetryClick = { state.eventSink(BookDetailUiEvent.OnRetryClick) }, ) } diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt index 48248dd9..a8f0b2f0 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import com.ninecraft.booket.core.common.extensions.toErrorType import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.ReedDivider import com.ninecraft.booket.core.designsystem.theme.ReedTheme @@ -169,7 +170,7 @@ private fun RecordDetailContent( is UiState.Error -> { ReedErrorUi( - exception = state.uiState.exception, + errorType = state.uiState.exception.toErrorType(), onRetryClick = { }, ) } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 8219946c..a89ecb7d 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat +import com.ninecraft.booket.core.common.extensions.toErrorType import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.HomeBg import com.ninecraft.booket.core.designsystem.theme.ReedTheme @@ -223,7 +224,7 @@ internal fun HomeContent( is UiState.Error -> { ReedErrorUi( - exception = state.uiState.exception, + errorType = state.uiState.exception.toErrorType(), onRetryClick = { state.eventSink(HomeUiEvent.OnRetryClick) }, ) } diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt index c69c74bd..e016bc50 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.common.extensions.toErrorType import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle @@ -177,7 +178,7 @@ internal fun LibraryContent( is UiState.Error -> { ReedErrorUi( - exception = state.uiState.exception, + errorType = state.uiState.exception.toErrorType(), onRetryClick = { state.eventSink(LibraryUiEvent.OnRetryClick) }, ) } diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt index 9cf11050..88f6b7fc 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.constants.BookStatus +import com.ninecraft.booket.core.common.extensions.toErrorType import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.component.ReedDivider import com.ninecraft.booket.core.designsystem.component.textfield.ReedTextField @@ -117,7 +118,7 @@ internal fun BookSearchContent( is UiState.Error -> { ReedErrorUi( - exception = state.uiState.exception, + errorType = state.uiState.exception.toErrorType(), onRetryClick = { state.eventSink(BookSearchUiEvent.OnRetryClick) }, ) } diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt index 148c12fc..afb19cf9 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.ninecraft.booket.core.common.extensions.toErrorType import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.component.ReedDivider import com.ninecraft.booket.core.designsystem.component.textfield.ReedTextField @@ -96,7 +97,7 @@ internal fun LibrarySearchContent( is UiState.Error -> { ReedErrorUi( - exception = state.uiState.exception, + errorType = state.uiState.exception.toErrorType(), onRetryClick = { state.eventSink(LibrarySearchUiEvent.OnRetryClick) }, ) } From 11859b2ac420105b4e01807cc52d527f4b11bf54 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sat, 25 Oct 2025 23:02:37 +0900 Subject: [PATCH 052/116] =?UTF-8?q?[BOOK-378]=20chore:=20compose-stability?= =?UTF-8?q?-analyzer=20plugin=20=EC=BB=A8=EB=B2=A4=EC=85=98=20=ED=94=8C?= =?UTF-8?q?=EB=9F=AC=EA=B7=B8=EC=9D=B8=20=EB=82=B4=EC=97=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 1 - .../src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt | 1 + .../src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt | 2 ++ build.gradle.kts | 1 + .../kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt | 1 - gradle/libs.versions.toml | 2 +- 6 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0076e34f..49baa4fb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,7 +8,6 @@ plugins { alias(libs.plugins.booket.android.application.compose) alias(libs.plugins.booket.android.hilt) alias(libs.plugins.booket.android.firebase) - alias(libs.plugins.compose.stability.analyzer) } android { diff --git a/build-logic/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 8096e831..2a912fcf 100644 --- a/build-logic/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -12,6 +12,7 @@ class AndroidLibraryComposeConventionPlugin : Plugin { applyPlugins( Plugins.ANDROID_LIBRARY, Plugins.KOTLIN_COMPOSE, + Plugins.COMPOSE_STABILITY_ANALYZER, ) extensions.configure { diff --git a/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt b/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt index e525f7b6..e8dc9812 100644 --- a/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt +++ b/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt @@ -11,6 +11,8 @@ object Plugins { const val ANDROID_APPLICATION = "com.android.application" const val ANDROID_LIBRARY = "com.android.library" + const val COMPOSE_STABILITY_ANALYZER = "com.github.skydoves.compose.stability.analyzer" + const val HILT = "dagger.hilt.android.plugin" const val KSP = "com.google.devtools.ksp" const val GOOGLE_SERVICES = "com.google.gms.google-services" diff --git a/build.gradle.kts b/build.gradle.kts index 63b471a7..6d346c9a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,6 +5,7 @@ plugins { alias(libs.plugins.gradle.dependency.handler.extensions) alias(libs.plugins.kotlin.detekt) alias(libs.plugins.kotlin.ktlint) + alias(libs.plugins.compose.stability.analyzer) apply false alias(libs.plugins.kotlin.parcelize) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt index 1a5b45a8..7775656d 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/ErrorType.kt @@ -7,4 +7,3 @@ sealed interface ErrorType { data object NetworkError : ErrorType data object ServerError : ErrorType } - diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eca1f14a..b516895e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ androidx-compose-material3 = "1.4.0-alpha18" compose-stable-marker = "1.0.6" compose-effects = "0.1.1" compose-shadow = "2.0.4" -compose-stability-analyzer = "0.2.20" +compose-stability-analyzer = "0.3.0" ## Kotlin Symbol Processing ksp = "2.2.0-2.0.2" From ae063d267497ded894e76d8e6eda08fabae722e5 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sun, 26 Oct 2025 18:39:29 +0900 Subject: [PATCH 053/116] =?UTF-8?q?[BOOK-381]=20chore:=20@TraceRecompositi?= =?UTF-8?q?on=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EC=A0=80=EB=B8=94=20=ED=95=A8=EC=88=98=EC=97=90=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적인 컴포저블 외에 동적인(리컴포지션이 런타임에 발생할 수 있는) 컴포저블에 @TraceRecomposition 어노테이션 추가 --- .../core/ui/component/InfinityLazyColumn.kt | 2 ++ .../booket/feature/detail/book/BookDetailUi.kt | 3 +++ .../book/component/BookUpdateBottomSheet.kt | 2 ++ .../detail/book/component/ReadingRecordsHeader.kt | 15 +++++++++++++++ .../booket/feature/detail/card/RecordCardUi.kt | 2 ++ .../feature/detail/record/RecordDetailUi.kt | 3 +++ .../booket/feature/edit/emotion/EmotionEditUi.kt | 3 +++ .../booket/feature/edit/record/RecordEditUi.kt | 9 ++++++--- .../com/ninecraft/booket/feature/home/HomeUi.kt | 2 ++ .../booket/feature/home/component/HomeBanner.kt | 2 ++ .../booket/feature/home/component/HomeHeader.kt | 2 +- .../ninecraft/booket/feature/library/LibraryUi.kt | 4 ++++ .../feature/library/component/FilterChip.kt | 2 ++ .../feature/library/component/FilterChipGroup.kt | 2 ++ .../com/ninecraft/booket/feature/login/LoginUi.kt | 2 ++ .../feature/termsagreement/TermsAgreementUi.kt | 2 ++ .../feature/termsagreement/component/TermsItem.kt | 2 ++ .../booket/feature/onboarding/OnboardingUi.kt | 2 ++ .../onboarding/component/PagerIndicator.kt | 2 ++ .../component/ImpressionGuideBottomSheet.kt | 2 ++ .../record/component/ImpressionGuideBox.kt | 2 ++ .../ninecraft/booket/feature/record/ocr/OcrUi.kt | 4 ++++ .../feature/record/ocr/component/SentenceBox.kt | 2 ++ .../feature/record/register/RecordRegisterUi.kt | 2 ++ .../booket/feature/record/step/EmotionStep.kt | 2 ++ .../booket/feature/record/step/ImpressionStep.kt | 2 ++ .../booket/feature/record/step/QuoteStep.kt | 2 ++ .../booket/feature/search/book/BookSearchUi.kt | 3 +++ .../feature/search/book/component/BookItem.kt | 2 ++ .../feature/search/library/LibrarySearchUi.kt | 3 +++ .../booket/feature/settings/SettingsUi.kt | 2 ++ .../feature/settings/component/ReedSwitch.kt | 2 ++ .../feature/settings/component/ToggleItem.kt | 2 ++ .../settings/notification/NotificationUi.kt | 2 ++ .../feature/settings/osslicenses/OssLicensesUi.kt | 2 ++ .../com/ninecraft/booket/splash/SplashUi.kt | 2 ++ 36 files changed, 97 insertions(+), 4 deletions(-) diff --git a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt index 6805f4fc..b0798ffd 100644 --- a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt @@ -35,10 +35,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.skydoves.compose.effects.RememberedEffect +import com.skydoves.compose.stability.runtime.TraceRecomposition // 기기에서 평균적으로 한 화면에 보이는 아이템 개수 private const val LIMIT_COUNT = 6 +@TraceRecomposition @Composable fun InfinityLazyColumn( modifier: Modifier = Modifier, diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt index bece26b4..6ce7d6f7 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt @@ -54,12 +54,14 @@ import com.ninecraft.booket.feature.detail.book.component.RecordItem import com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet import com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet import com.ninecraft.booket.feature.screens.BookDetailScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @CircuitInject(BookDetailScreen::class, ActivityRetainedComponent::class) @Composable @@ -195,6 +197,7 @@ internal fun BookDetailUi( } } +@TraceRecomposition @Composable internal fun BookDetailContent( state: BookDetailUiState, diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt index 35b6554f..7d7789ee 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt @@ -37,10 +37,12 @@ import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedBottomSheet import com.ninecraft.booket.feature.detail.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable internal fun BookUpdateBottomSheet( diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt index 57c25d97..7dfdefb2 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt @@ -14,11 +14,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.detail.R import com.ninecraft.booket.feature.detail.book.RecordSort +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable internal fun ReadingRecordsHeader( totalCount: Int, @@ -62,3 +65,15 @@ internal fun ReadingRecordsHeader( } } } + +@ComponentPreview +@Composable +private fun ReadingRecordsHeaderPreview() { + ReedTheme { + ReadingRecordsHeader( + totalCount = 4, + currentRecordSort = RecordSort.PAGE_NUMBER_ASC, + onReadingRecordClick = {}, + ) + } +} diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt index 97e39ca7..49144940 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt @@ -36,10 +36,12 @@ import com.ninecraft.booket.core.ui.component.ReedTopAppBar import com.ninecraft.booket.feature.detail.R import com.ninecraft.booket.feature.detail.card.component.RecordCard import com.ninecraft.booket.feature.screens.RecordCardScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(RecordCardScreen::class, ActivityRetainedComponent::class) @Composable internal fun RecordCardUi( diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt index a8f0b2f0..93f671da 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt @@ -31,11 +31,13 @@ import com.ninecraft.booket.feature.detail.record.component.QuoteItem import com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet import com.ninecraft.booket.feature.detail.record.component.ReviewItem import com.ninecraft.booket.feature.screens.RecordDetailScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @CircuitInject(RecordDetailScreen::class, ActivityRetainedComponent::class) @Composable @@ -116,6 +118,7 @@ internal fun RecordDetailUi( } } +@TraceRecomposition @Composable private fun RecordDetailContent( state: RecordDetailUiState, diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt index 0ddc68c2..a9ff1ec8 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt @@ -36,10 +36,12 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.feature.edit.R import com.ninecraft.booket.feature.screens.EmotionEditScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toPersistentList +@TraceRecomposition @CircuitInject(EmotionEditScreen::class, ActivityRetainedComponent::class) @Composable internal fun EmotionEditUi( @@ -65,6 +67,7 @@ internal fun EmotionEditUi( } } +@TraceRecomposition @Composable private fun EmotionEditContent( state: EmotionEditUiState, diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt index 9f1257eb..84ee03c6 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt @@ -5,14 +5,13 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.exclude import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.exclude import androidx.compose.foundation.layout.ime import androidx.compose.foundation.layout.imePadding -import androidx.compose.material3.ScaffoldDefaults import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState @@ -21,6 +20,7 @@ import androidx.compose.foundation.text.input.TextFieldLineLimits import androidx.compose.foundation.verticalScroll import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon +import androidx.compose.material3.ScaffoldDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -45,10 +45,12 @@ import com.ninecraft.booket.feature.edit.R import com.ninecraft.booket.feature.edit.record.component.BookItem import com.ninecraft.booket.feature.screens.RecordEditScreen import com.ninecraft.booket.feature.screens.arguments.RecordEditArgs +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(RecordEditScreen::class, ActivityRetainedComponent::class) @Composable internal fun RecordEditUi( @@ -83,6 +85,7 @@ internal fun RecordEditUi( } } +@TraceRecomposition @Composable private fun ColumnScope.RecordEditContent(state: RecordEditUiState) { Column( diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index a89ecb7d..05dc09db 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -44,10 +44,12 @@ import com.ninecraft.booket.feature.home.component.HomeHeader import com.ninecraft.booket.feature.screens.HomeScreen import com.ninecraft.booket.feature.screens.component.MainBottomBar import com.ninecraft.booket.feature.screens.component.MainTab +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList +@TraceRecomposition @CircuitInject(HomeScreen::class, ActivityRetainedComponent::class) @Composable internal fun HomeUi( diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt index 3b140709..678c2052 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt @@ -29,8 +29,10 @@ import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.HomeBg import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.home.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable fun HomeBanner( onBookRegisterClick: () -> Unit, diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt index 72835dab..a193a689 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt @@ -17,10 +17,10 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.R as designR import com.ninecraft.booket.core.designsystem.theme.HomeBg import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.home.R +import com.ninecraft.booket.core.designsystem.R as designR @Composable fun HomeHeader( diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt index e016bc50..aac44e11 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt @@ -34,11 +34,13 @@ import com.ninecraft.booket.feature.library.component.LibraryHeader import com.ninecraft.booket.feature.screens.LibraryScreen import com.ninecraft.booket.feature.screens.component.MainBottomBar import com.ninecraft.booket.feature.screens.component.MainTab +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList +@TraceRecomposition @CircuitInject(LibraryScreen::class, ActivityRetainedComponent::class) @Composable internal fun LibraryUi( @@ -84,6 +86,7 @@ internal fun LibraryUi( } } +@TraceRecomposition @Composable internal fun LibraryContent( state: LibraryUiState, @@ -187,6 +190,7 @@ internal fun LibraryContent( } } +@TraceRecomposition @Composable private fun EmptyResult() { Box( diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt index 0e9f1a65..08236f8d 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt @@ -20,7 +20,9 @@ import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.library.LibraryFilterOption +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable fun FilterChip( option: LibraryFilterOption, diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt index 6f7c2213..c0b0a975 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt @@ -13,9 +13,11 @@ import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.library.LibraryFilterChip import com.ninecraft.booket.feature.library.LibraryFilterOption +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList +@TraceRecomposition @Composable fun FilterChipGroup( filterList: ImmutableList, diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt index 359989bf..4e6bcd93 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt @@ -33,9 +33,11 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.core.ui.component.ReedCloseTopAppBar import com.ninecraft.booket.core.ui.component.ReedLoadingIndicator import com.ninecraft.booket.feature.screens.LoginScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(LoginScreen::class, ActivityRetainedComponent::class) @Composable internal fun LoginUi( diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt index f017165f..2443ce0b 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt @@ -29,10 +29,12 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.feature.login.R import com.ninecraft.booket.feature.screens.TermsAgreementScreen import com.ninecraft.booket.feature.termsagreement.component.TermItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.persistentListOf +@TraceRecomposition @CircuitInject(TermsAgreementScreen::class, ActivityRetainedComponent::class) @Composable internal fun TermsAgreementUi( diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt index f8f18caa..f163c417 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt @@ -17,8 +17,10 @@ import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCheckBox import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable internal fun TermItem( title: String, diff --git a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt index c32f2b80..444d9c4b 100644 --- a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt +++ b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt @@ -23,9 +23,11 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.feature.onboarding.component.OnboardingPage import com.ninecraft.booket.feature.onboarding.component.PagerIndicator import com.ninecraft.booket.feature.screens.OnboardingScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(OnboardingScreen::class, ActivityRetainedComponent::class) @Composable internal fun OnboardingUi( diff --git a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt index 20ef8632..19d70951 100644 --- a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt +++ b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt @@ -18,7 +18,9 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable internal fun PagerIndicator( pageCount: Int, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt index a97890b6..599b6dbd 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt @@ -28,10 +28,12 @@ import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedBottomSheet import com.ninecraft.booket.feature.record.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable fun ImpressionGuideBottomSheet( diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt index bc0f85b0..641d2cde 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt @@ -20,7 +20,9 @@ import com.ninecraft.booket.core.designsystem.theme.Blank import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.record.R +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable fun ImpressionGuideBox( onClick: () -> Unit, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt index 76af3913..82b9c56c 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt @@ -68,12 +68,14 @@ import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.ocr.component.CameraFrame import com.ninecraft.booket.feature.record.ocr.component.SentenceBox import com.ninecraft.booket.feature.screens.OcrScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController import java.io.File import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(OcrScreen::class, ActivityRetainedComponent::class) @Composable internal fun OcrUi( @@ -88,6 +90,7 @@ internal fun OcrUi( } } +@TraceRecomposition @Composable private fun CameraPreview( state: OcrUiState, @@ -312,6 +315,7 @@ private fun CameraPreview( } } +@TraceRecomposition @Composable private fun TextScanResult( state: OcrUiState, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt index 237d59ff..ddc188bf 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt @@ -15,7 +15,9 @@ import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable fun SentenceBox( onClick: () -> Unit, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt index ac3a7278..255338ce 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt @@ -31,9 +31,11 @@ import com.ninecraft.booket.feature.record.step.EmotionStep import com.ninecraft.booket.feature.record.step.ImpressionStep import com.ninecraft.booket.feature.record.step.QuoteStep import com.ninecraft.booket.feature.screens.RecordScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(RecordScreen::class, ActivityRetainedComponent::class) @Composable internal fun RecordRegisterUi( diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt index 36b7b33e..468e3ea2 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt @@ -35,8 +35,10 @@ import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.toPersistentList +@TraceRecomposition @Composable fun EmotionStep( state: RecordRegisterUiState, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt index b9a6e275..18a85680 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt @@ -55,11 +55,13 @@ import com.ninecraft.booket.feature.record.component.CustomTooltipBox import com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheet import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.coroutines.delay import kotlinx.coroutines.launch import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable fun ImpressionStep( diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt index b9318765..eee038da 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt @@ -48,10 +48,12 @@ import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.component.CustomTooltipBox import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.coroutines.delay import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable internal fun QuoteStep( state: RecordRegisterUiState, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt index 88f6b7fc..5904f258 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt @@ -40,12 +40,14 @@ import com.ninecraft.booket.feature.search.book.component.BookRegisterBottomShee import com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessBottomSheet import com.ninecraft.booket.feature.search.common.component.RecentSearchTitle import com.ninecraft.booket.feature.search.common.component.SearchItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(BookSearchScreen::class, ActivityRetainedComponent::class) @Composable internal fun BookSearchUi( @@ -80,6 +82,7 @@ internal fun BookSearchUi( } } +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable internal fun BookSearchContent( diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt index 59dcdba8..53c538c2 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt @@ -31,8 +31,10 @@ import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.core.model.BookSummaryModel import com.ninecraft.booket.feature.search.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable fun BookItem( book: BookSummaryModel, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt index afb19cf9..227d3ad0 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt @@ -33,9 +33,11 @@ import com.ninecraft.booket.feature.search.R import com.ninecraft.booket.feature.search.common.component.RecentSearchTitle import com.ninecraft.booket.feature.search.common.component.SearchItem import com.ninecraft.booket.feature.search.library.component.LibraryBookItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(LibrarySearchScreen::class, ActivityRetainedComponent::class) @Composable internal fun LibrarySearchUi( @@ -55,6 +57,7 @@ internal fun LibrarySearchUi( } } +@TraceRecomposition @Composable internal fun LibrarySearchContent( state: LibrarySearchUiState, diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt index 2657c4b8..8977e64b 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt @@ -35,11 +35,13 @@ import com.ninecraft.booket.core.ui.component.ReedLoadingIndicator import com.ninecraft.booket.feature.screens.SettingsScreen import com.ninecraft.booket.feature.settings.component.SettingItem import com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheet +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @CircuitInject(SettingsScreen::class, ActivityRetainedComponent::class) @Composable diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt index e3f660f4..a7a8db08 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt @@ -26,7 +26,9 @@ import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @SuppressLint("UseOfNonLambdaOffsetOverload") @Composable internal fun ReedSwitch( diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt index 6eb4e449..7a8ef025 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt @@ -11,7 +11,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable internal fun ToggleItem( title: String, diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 39377518..cc7443eb 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -41,10 +41,12 @@ import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.feature.screens.NotificationScreen import com.ninecraft.booket.feature.settings.R import com.ninecraft.booket.feature.settings.component.ToggleItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(NotificationScreen::class, ActivityRetainedComponent::class) @Composable internal fun NotificationUi( diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt index dc804a52..e6380a55 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt @@ -37,6 +37,7 @@ import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.settings.R import com.ninecraft.booket.feature.screens.OssLicensesScreen import com.orhanobut.logger.Logger +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.coroutines.Dispatchers @@ -44,6 +45,7 @@ import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json import java.io.IOException +@TraceRecomposition @CircuitInject(OssLicensesScreen::class, ActivityRetainedComponent::class) @Composable internal fun OssLicenses( diff --git a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt index 6880687d..d60631d0 100644 --- a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt +++ b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt @@ -24,10 +24,12 @@ import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedDialog import com.ninecraft.booket.feature.screens.SplashScreen import com.ninecraft.booket.feature.splash.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController +@TraceRecomposition @CircuitInject(SplashScreen::class, ActivityRetainedComponent::class) @Composable fun SplashUi( From 225d3223e5c6a678f39b28a3cab293299018bff2 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sun, 26 Oct 2025 18:40:17 +0900 Subject: [PATCH 054/116] =?UTF-8?q?[BOOK-381]=20chore:=20Kotlin,=20KSP=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EC=B5=9C=EC=8B=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kotlin: @TraceRecomposition 어노테이션이 정상 동작하기 위함 KSP: 2.3.0 버전 부터 Kotlin 버전과 독립적 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b516895e..5c4725a2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,10 +27,10 @@ compose-shadow = "2.0.4" compose-stability-analyzer = "0.3.0" ## Kotlin Symbol Processing -ksp = "2.2.0-2.0.2" +ksp = "2.3.0" ## Kotlin -kotlin = "2.2.0" +kotlin = "2.2.21" kotlinx-coroutines = "1.10.2" kotlinx-serialization-json = "1.9.0" kotlinx-collections-immutable = "0.4.0" From eb2f579bca15d4af159b3a82d0f60703fa8c3e00 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 02:23:43 +0900 Subject: [PATCH 055/116] =?UTF-8?q?[BOOK-348]=20feat:=20=EB=82=B4=20?= =?UTF-8?q?=EC=84=9C=EC=9E=AC=20=EC=A0=95=EB=A0=AC=20=EA=B8=B0=EC=A4=80=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(CREATED=5FDATE=5FDESC=20->=20UPDATED=5FDA?= =?UTF-8?q?TE=5FDESC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/core/network/service/ReedService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt index 00dc717b..ab543432 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt @@ -91,7 +91,7 @@ interface ReedService { @Query("title") title: String? = null, @Query("page") page: Int, @Query("size") size: Int, - @Query("sort") sort: String = "CREATED_DATE_DESC", + @Query("sort") sort: String = "UPDATED_DATE_DESC", ): LibraryResponse @DELETE("api/v1/books/my-library/{userBookId}") From d858e1377c1d3d44d6c47c7b775c3816f06c4338 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 04:47:01 +0900 Subject: [PATCH 056/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=20=EC=84=9C=EB=B2=84=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 시스템 알림 권한과 서버에 마지막으로 동기화된 상태가 다를 경우에만 동기화 진행 --- .../data/api/repository/UserRepository.kt | 10 +++++-- .../impl/repository/DefaultUserRepository.kt | 17 +++++++++--- .../api/datasource/NotificationDataSource.kt | 7 +++-- .../DefaultNotificationDataSource.kt | 23 ++++++++++++---- .../booket/feature/home/HomePresenter.kt | 26 +++++++++++-------- .../ninecraft/booket/feature/home/HomeUi.kt | 25 ++++++++++++------ 6 files changed, 77 insertions(+), 31 deletions(-) diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 63c5e185..f12becec 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -14,9 +14,15 @@ interface UserRepository { suspend fun setOnboardingCompleted(isCompleted: Boolean) - val isNotificationEnabled: Flow + val isUserNotificationEnabled: Flow - suspend fun setNotificationEnabled(isEnabled: Boolean) + suspend fun setUserNotificationEnabled(isEnabled: Boolean) + + val lastSyncedNotificationEnabled: Flow + + suspend fun getLastSyncedNotificationEnabled(): Boolean? + + suspend fun setLastNotificationSyncedEnabled(isEnabled: Boolean) suspend fun getFcmToken(): String diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 04ffad32..ed9a3113 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -11,6 +11,8 @@ import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.TermsAgreementRequest import com.ninecraft.booket.core.network.service.ReedService import com.orhanobut.logger.Logger +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.suspendCancellableCoroutine import javax.inject.Inject import kotlin.coroutines.resume @@ -36,10 +38,19 @@ internal class DefaultUserRepository @Inject constructor( onboardingDataSource.setOnboardingCompleted(isCompleted) } - override val isNotificationEnabled = notificationDataSource.isNotificationEnabled + override val isUserNotificationEnabled = notificationDataSource.isUserNotificationEnabled - override suspend fun setNotificationEnabled(isEnabled: Boolean) { - notificationDataSource.setNotificationEnabled(isEnabled) + override suspend fun setUserNotificationEnabled(isEnabled: Boolean) { + notificationDataSource.setUserNotificationEnabled(isEnabled) + } + + override val lastSyncedNotificationEnabled: Flow = notificationDataSource.lastSyncedNotificationEnabled + + override suspend fun getLastSyncedNotificationEnabled(): Boolean? = + notificationDataSource.lastSyncedNotificationEnabled.firstOrNull() + + override suspend fun setLastNotificationSyncedEnabled(isEnabled: Boolean) { + notificationDataSource.setLastSyncedNotificationEnabled(isEnabled) } override suspend fun getFcmToken(): String { diff --git a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt index 6b0d1483..c4acb610 100644 --- a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt +++ b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt @@ -3,6 +3,9 @@ package com.ninecraft.booket.core.datastore.api.datasource import kotlinx.coroutines.flow.Flow interface NotificationDataSource { - val isNotificationEnabled: Flow - suspend fun setNotificationEnabled(isEnabled: Boolean) + val isUserNotificationEnabled: Flow + suspend fun setUserNotificationEnabled(isEnabled: Boolean) + + val lastSyncedNotificationEnabled: Flow + suspend fun setLastSyncedNotificationEnabled(isEnabled: Boolean) } diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt index 24db08c0..593a2187 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt @@ -14,19 +14,32 @@ import javax.inject.Inject class DefaultNotificationDataSource @Inject constructor( @NotificationDataStore private val dataStore: DataStore, ) : NotificationDataSource { - override val isNotificationEnabled: Flow = dataStore.data + override val isUserNotificationEnabled: Flow = dataStore.data .handleIOException() .map { prefs -> - prefs[NOTIFICATION_ENABLED] ?: true + prefs[USER_NOTIFICATION_ENABLED] ?: true } - override suspend fun setNotificationEnabled(isEnabled: Boolean) { + override suspend fun setUserNotificationEnabled(isEnabled: Boolean) { dataStore.edit { prefs -> - prefs[NOTIFICATION_ENABLED] = isEnabled + prefs[USER_NOTIFICATION_ENABLED] = isEnabled + } + } + + override val lastSyncedNotificationEnabled: Flow = dataStore.data + .handleIOException() + .map { prefs -> + prefs[LAST_SYNCED_NOTIFICATION_ENABLED] + } + + override suspend fun setLastSyncedNotificationEnabled(isEnabled: Boolean) { + dataStore.edit { prefs -> + prefs[LAST_SYNCED_NOTIFICATION_ENABLED] = isEnabled } } companion object Companion { - private val NOTIFICATION_ENABLED = booleanPreferencesKey("NOTIFICATION_ENABLED") + private val USER_NOTIFICATION_ENABLED = booleanPreferencesKey("USER_NOTIFICATION_ENABLED") + private val LAST_SYNCED_NOTIFICATION_ENABLED = booleanPreferencesKey("LAST_SYNCED_NOTIFICATION_ENABLED") } } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 768e4ae5..028e0c14 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -63,16 +63,13 @@ class HomePresenter @AssistedInject constructor( } } - fun updateNotificationSettings(isGranted: Boolean) { - scope.launch { - userRepository.updateNotificationSettings(isGranted) - .onSuccess { - Logger.d("Notification settings updated successfully") - } - .onFailure { exception -> - Logger.d(exception.message.toString()) - } - } + suspend fun syncNotificationSettings(isGranted: Boolean) { + userRepository.updateNotificationSettings(isGranted) + .onSuccess { + userRepository.setLastNotificationSyncedEnabled(isGranted) + }.onFailure { exception -> + Logger.e("Failed to update notification settings: $exception") + } } fun handleEvent(event: HomeUiEvent) { @@ -106,7 +103,14 @@ class HomePresenter @AssistedInject constructor( } is HomeUiEvent.OnNotificationPermissionResult -> { - updateNotificationSettings(event.isGranted) + scope.launch { + val isPermissionGranted = event.isGranted + val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() + + if (lastSyncedServerEnabled == null || isPermissionGranted != lastSyncedServerEnabled) { + syncNotificationSettings(isPermissionGranted) + } + } } } } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 8219946c..33f6066c 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -1,5 +1,7 @@ package com.ninecraft.booket.feature.home +import android.Manifest +import android.content.Context import android.content.pm.PackageManager import android.os.Build import androidx.activity.compose.rememberLauncherForActivityResult @@ -29,6 +31,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.HomeBg @@ -64,15 +67,13 @@ internal fun HomeUi( if (!state.isGuestMode) { LaunchedEffect(Unit) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - val permission = android.Manifest.permission.POST_NOTIFICATIONS - val isGranted = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED + val isGranted = checkSystemNotificationEnabled(context) - if (!isGranted) { - permissionLauncher.launch(permission) - } - } else { - state.eventSink(HomeUiEvent.OnNotificationPermissionResult(true)) + if (isGranted) { + state.eventSink(HomeUiEvent.OnNotificationPermissionResult(isGranted)) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + val permission = Manifest.permission.POST_NOTIFICATIONS + permissionLauncher.launch(permission) } } } @@ -232,6 +233,14 @@ internal fun HomeContent( } } +private fun checkSystemNotificationEnabled(context: Context): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED + } else { + NotificationManagerCompat.from(context).areNotificationsEnabled() + } +} + @DevicePreview @Composable private fun HomePreview() { From 3160f5d0e05244282528a3b0749f1c974532eeca Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 05:16:58 +0900 Subject: [PATCH 057/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=ED=86=A0=EA=B8=80=20=EB=B3=80=EA=B2=BD=20=EC=8B=9C=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EB=8F=99=EA=B8=B0=ED=99=94=20=EC=83=81?= =?UTF-8?q?=ED=83=9C(lastSynced)=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=8F=20=EC=97=90=EB=9F=AC=20=ED=95=B8=EB=93=A4=EB=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HandleNotificationSideEffects.kt | 28 +++++++++++++++++ .../notification/NotificationPresenter.kt | 30 ++++++++++++++++--- .../settings/notification/NotificationUi.kt | 21 +++++++++---- .../notification/NotificationUiState.kt | 13 ++++++++ 4 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/HandleNotificationSideEffects.kt diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/HandleNotificationSideEffects.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/HandleNotificationSideEffects.kt new file mode 100644 index 00000000..53523b3f --- /dev/null +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/HandleNotificationSideEffects.kt @@ -0,0 +1,28 @@ +package com.ninecraft.booket.feature.settings.notification + +import android.widget.Toast +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import com.skydoves.compose.effects.RememberedEffect + +@Composable +internal fun HandleNotificationSideEffects( + state: NotificationUiState, + eventSink: (NotificationUiEvent) -> Unit, +) { + val context = LocalContext.current + + RememberedEffect(state.sideEffect) { + when (state.sideEffect) { + is NotificationSideEffect.ShowToast -> { + Toast.makeText(context, state.sideEffect.message, Toast.LENGTH_SHORT).show() + } + + else -> {} + } + + if (state.sideEffect != null) { + eventSink(NotificationUiEvent.InitSideEffect) + } + } +} diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index 11f181ab..a2af46f7 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -2,12 +2,17 @@ package com.ninecraft.booket.feature.settings.notification import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.UserRepository +import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.NotificationScreen import com.orhanobut.logger.Logger import com.slack.circuit.codegen.annotations.CircuitInject import com.slack.circuit.retained.collectAsRetainedState +import com.slack.circuit.retained.rememberRetained import com.slack.circuit.runtime.Navigator import com.slack.circuit.runtime.presenter.Presenter import dagger.assisted.Assisted @@ -23,23 +28,39 @@ class NotificationPresenter @AssistedInject constructor( @Composable override fun present(): NotificationUiState { val scope = rememberCoroutineScope() - val isNotificationEnabled by userRepository.isNotificationEnabled.collectAsRetainedState(initial = false) + val isNotificationEnabled by userRepository.isUserNotificationEnabled.collectAsRetainedState(initial = false) + var sideEffect by rememberRetained { mutableStateOf(null) } fun updateNotificationSettings(enabled: Boolean) { scope.launch { - userRepository.setNotificationEnabled(enabled) userRepository.updateNotificationSettings(enabled) .onSuccess { - Logger.d("Notification settings updated successfully") + userRepository.setUserNotificationEnabled(enabled) + userRepository.setLastNotificationSyncedEnabled(enabled) } .onFailure { exception -> - Logger.d(exception.message.toString()) + val handleErrorMessage = { message: String -> + Logger.e(message) + sideEffect = NotificationSideEffect.ShowToast(message) + } + + handleException( + exception = exception, + onError = handleErrorMessage, + onLoginRequired = { + navigator.resetRoot(LoginScreen()) + }, + ) } } } fun handleEvent(event: NotificationUiEvent) { when (event) { + is NotificationUiEvent.InitSideEffect -> { + sideEffect = null + } + is NotificationUiEvent.OnBackClick -> { navigator.pop() } @@ -51,6 +72,7 @@ class NotificationPresenter @AssistedInject constructor( } return NotificationUiState( isNotificationEnabled = isNotificationEnabled, + sideEffect = sideEffect, eventSink = ::handleEvent, ) } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 39377518..4a37b7a1 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -1,7 +1,9 @@ package com.ninecraft.booket.feature.settings.notification +import android.Manifest import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.os.Build import android.provider.Settings import androidx.activity.compose.rememberLauncherForActivityResult @@ -29,6 +31,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.core.app.NotificationManagerCompat +import androidx.core.content.ContextCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner @@ -51,17 +54,22 @@ internal fun NotificationUi( state: NotificationUiState, modifier: Modifier = Modifier, ) { + HandleNotificationSideEffects( + state = state, + eventSink = state.eventSink, + ) + val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current val isGranted by produceState( - initialValue = checkNotificationPermission(context), + initialValue = checkSystemNotificationEnabled(context), key1 = lifecycleOwner, ) { // 포그라운드 복귀 시 OS 권한 동기화 val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { - value = checkNotificationPermission(context) + value = checkSystemNotificationEnabled(context) } } lifecycleOwner.lifecycle.addObserver(observer) @@ -160,9 +168,12 @@ internal fun NotificationGuideItem( } } -private fun checkNotificationPermission(context: Context): Boolean { - val notificationManager = NotificationManagerCompat.from(context) - return notificationManager.areNotificationsEnabled() +private fun checkSystemNotificationEnabled(context: Context): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED + } else { + NotificationManagerCompat.from(context).areNotificationsEnabled() + } } @RequiresApi(Build.VERSION_CODES.TIRAMISU) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt index db521d29..7a7d70d6 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt @@ -1,14 +1,27 @@ package com.ninecraft.booket.feature.settings.notification +import androidx.compose.runtime.Immutable +import com.ninecraft.booket.core.common.utils.UiText import com.slack.circuit.runtime.CircuitUiEvent import com.slack.circuit.runtime.CircuitUiState +import java.util.UUID data class NotificationUiState( val isNotificationEnabled: Boolean = false, + val sideEffect: NotificationSideEffect? = null, val eventSink: (NotificationUiEvent) -> Unit, ) : CircuitUiState +@Immutable +sealed interface NotificationSideEffect { + data class ShowToast( + val message: String, + private val key: String = UUID.randomUUID().toString(), + ) : NotificationSideEffect +} + sealed interface NotificationUiEvent : CircuitUiEvent { + data object InitSideEffect : NotificationUiEvent data object OnBackClick : NotificationUiEvent data class OnNotificationToggle(val enabled: Boolean) : NotificationUiEvent } From 5105ac19edf677207249a6825fac95eb3db72e5a Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 05:22:39 +0900 Subject: [PATCH 058/116] =?UTF-8?q?[BOOK-364]=20refactor:=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EC=84=A4=EC=A0=95=20=ED=86=A0=EA=B8=80=EC=97=90=20?= =?UTF-8?q?Optimistic=20Update=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/settings/notification/NotificationPresenter.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index a2af46f7..1415a065 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -33,9 +33,10 @@ class NotificationPresenter @AssistedInject constructor( fun updateNotificationSettings(enabled: Boolean) { scope.launch { + userRepository.setUserNotificationEnabled(enabled) + userRepository.updateNotificationSettings(enabled) .onSuccess { - userRepository.setUserNotificationEnabled(enabled) userRepository.setLastNotificationSyncedEnabled(enabled) } .onFailure { exception -> @@ -51,6 +52,7 @@ class NotificationPresenter @AssistedInject constructor( navigator.resetRoot(LoginScreen()) }, ) + userRepository.setUserNotificationEnabled(!enabled) } } } From 78ec9c44eb9d7a5b4fbefffe148b7e4b74fc7b5d Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 08:53:06 +0900 Subject: [PATCH 059/116] =?UTF-8?q?[BOOK-364]=20feat:=20FCM=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=EB=8F=99=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로컬 토큰과 원격 토큰을 비교하여 변경되었을 때만 서버에 업데이트 요청 -`FirebaseMessagingService`의 `onNewToken` 콜백에서 `syncFcmToken`을 호출하여 토큰 갱신 시 자동으로 동기화되도록 처리 --- .../booket/ReedFirebaseMessagingService.kt | 15 ++++- .../data/api/repository/UserRepository.kt | 8 +-- .../impl/repository/DefaultUserRepository.kt | 58 ++++++++++--------- .../api/datasource/NotificationDataSource.kt | 3 + .../DefaultNotificationDataSource.kt | 14 +++++ .../booket/feature/login/LoginPresenter.kt | 2 +- .../booket/splash/SplashPresenter.kt | 2 +- 7 files changed, 64 insertions(+), 38 deletions(-) diff --git a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt index 6ed6e2e5..d94950b4 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt @@ -2,14 +2,23 @@ package com.ninecraft.booket import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage -import com.orhanobut.logger.Logger +import com.ninecraft.booket.core.data.api.repository.UserRepository +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import javax.inject.Inject class ReedFirebaseMessagingService : FirebaseMessagingService() { + @Inject + lateinit var userRepository: UserRepository + override fun onNewToken(token: String) { super.onNewToken(token) - Logger.d("onNewToken: $token") - // TODO: 토큰 update + + CoroutineScope(Dispatchers.IO).launch { + userRepository.syncFcmToken() + } } override fun onMessageReceived(message: RemoteMessage) { diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index f12becec..1abce33e 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -14,19 +14,15 @@ interface UserRepository { suspend fun setOnboardingCompleted(isCompleted: Boolean) + suspend fun syncFcmToken(): Result + val isUserNotificationEnabled: Flow suspend fun setUserNotificationEnabled(isEnabled: Boolean) - val lastSyncedNotificationEnabled: Flow - suspend fun getLastSyncedNotificationEnabled(): Boolean? suspend fun setLastNotificationSyncedEnabled(isEnabled: Boolean) - suspend fun getFcmToken(): String - - suspend fun updateFcmToken(): Result - suspend fun updateNotificationSettings(notificationEnabled: Boolean): Result } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index ed9a3113..55da6f07 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -11,7 +11,7 @@ import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.TermsAgreementRequest import com.ninecraft.booket.core.network.service.ReedService import com.orhanobut.logger.Logger -import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.suspendCancellableCoroutine import javax.inject.Inject @@ -38,14 +38,25 @@ internal class DefaultUserRepository @Inject constructor( onboardingDataSource.setOnboardingCompleted(isCompleted) } + override suspend fun syncFcmToken() = runSuspendCatching { + val newToken = getRemoteFcmToken() + val localToken = getLocalFcmToken() + + if (newToken == localToken) { + Logger.d("Skip FCM token sync (already up-to-date)") + return@runSuspendCatching + } + + service.updateFcmToken(FcmTokenRequest(newToken)).toModel() + setFcmToken(newToken) + } + override val isUserNotificationEnabled = notificationDataSource.isUserNotificationEnabled override suspend fun setUserNotificationEnabled(isEnabled: Boolean) { notificationDataSource.setUserNotificationEnabled(isEnabled) } - override val lastSyncedNotificationEnabled: Flow = notificationDataSource.lastSyncedNotificationEnabled - override suspend fun getLastSyncedNotificationEnabled(): Boolean? = notificationDataSource.lastSyncedNotificationEnabled.firstOrNull() @@ -53,34 +64,27 @@ internal class DefaultUserRepository @Inject constructor( notificationDataSource.setLastSyncedNotificationEnabled(isEnabled) } - override suspend fun getFcmToken(): String { - return try { - suspendCancellableCoroutine { continuation -> - firebaseMessaging.token.addOnCompleteListener { task -> - if (task.isSuccessful) { - continuation.resume(task.result ?: "") - Logger.d("getFcmToken: ${task.result}") - } else { - task.exception?.let { exception -> - continuation.resumeWithException(exception) - } ?: continuation.resumeWithException( - Exception("Unknown error occurred while fetching FCM token"), - ) - } - } + override suspend fun updateNotificationSettings(notificationEnabled: Boolean) = runSuspendCatching { + service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel() + } + + private suspend fun getRemoteFcmToken(): String = suspendCancellableCoroutine { continuation -> + firebaseMessaging.token.addOnCompleteListener { task -> + if (task.isSuccessful) { + continuation.resume(task.result) + } else { + task.exception?.let { exception -> + continuation.resumeWithException(exception) + } ?: continuation.resumeWithException( + Exception("Unknown error occurred while fetching FCM token") + ) } - } catch (e: Exception) { - Logger.e(e, "Failed to get FCM token") - "" } } - override suspend fun updateFcmToken() = runSuspendCatching { - val fcmToken = getFcmToken() - service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() - } + private suspend fun getLocalFcmToken(): String = notificationDataSource.fcmToken.first() - override suspend fun updateNotificationSettings(notificationEnabled: Boolean) = runSuspendCatching { - service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel() + private suspend fun setFcmToken(fcmToken: String) { + notificationDataSource.setFcmToken(fcmToken) } } diff --git a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt index c4acb610..f0f20019 100644 --- a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt +++ b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt @@ -3,6 +3,9 @@ package com.ninecraft.booket.core.datastore.api.datasource import kotlinx.coroutines.flow.Flow interface NotificationDataSource { + val fcmToken: Flow + suspend fun setFcmToken(fcmToken: String) + val isUserNotificationEnabled: Flow suspend fun setUserNotificationEnabled(isEnabled: Boolean) diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt index 593a2187..b4b117cb 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt @@ -4,6 +4,7 @@ import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.impl.di.NotificationDataStore import com.ninecraft.booket.core.datastore.impl.util.handleIOException @@ -14,6 +15,18 @@ import javax.inject.Inject class DefaultNotificationDataSource @Inject constructor( @NotificationDataStore private val dataStore: DataStore, ) : NotificationDataSource { + override val fcmToken: Flow = dataStore.data + .handleIOException() + .map { prefs -> + prefs[FCM_TOKEN] ?: "" + } + + override suspend fun setFcmToken(fcmToken: String) { + dataStore.edit { prefs -> + prefs[FCM_TOKEN] = fcmToken + } + } + override val isUserNotificationEnabled: Flow = dataStore.data .handleIOException() .map { prefs -> @@ -39,6 +52,7 @@ class DefaultNotificationDataSource @Inject constructor( } companion object Companion { + private val FCM_TOKEN = stringPreferencesKey("FCM_TOKEN") private val USER_NOTIFICATION_ENABLED = booleanPreferencesKey("USER_NOTIFICATION_ENABLED") private val LAST_SYNCED_NOTIFICATION_ENABLED = booleanPreferencesKey("LAST_SYNCED_NOTIFICATION_ENABLED") } diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt index 856045e0..e201fac8 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt @@ -87,7 +87,7 @@ class LoginPresenter @AssistedInject constructor( isLoading = true authRepository.login(event.accessToken) .onSuccess { - userRepository.updateFcmToken() + userRepository.syncFcmToken() navigateAfterLogin() }.onFailure { exception -> exception.message?.let { Logger.e(it) } diff --git a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt index 220ee3a2..a27d3d08 100644 --- a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt +++ b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt @@ -54,7 +54,7 @@ class SplashPresenter @AssistedInject constructor( userRepository.getUserProfile() .onSuccess { userProfile -> if (userProfile.termsAgreed) { - userRepository.updateFcmToken() + userRepository.syncFcmToken() navigator.resetRoot(HomeScreen) } else { navigator.resetRoot(LoginScreen()) From 6817b341a383147594b7826be5ea7be93a57b599 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 28 Oct 2025 09:14:54 +0900 Subject: [PATCH 060/116] =?UTF-8?q?[BOOK-382]=20feat:=20DTO=20=EB=82=B4=20?= =?UTF-8?q?review=20=ED=94=84=EB=A1=9C=ED=8D=BC=ED=8B=B0=20not-null=20->?= =?UTF-8?q?=20nullable=20=EC=8A=A4=ED=8E=99=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/data/impl/mapper/ResponseToModel.kt | 6 +++--- .../booket/core/network/response/ReadingRecordsResponse.kt | 2 +- .../booket/core/network/response/RecordDetailResponse.kt | 2 +- .../booket/core/network/response/RecordRegisterResponse.kt | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt index ba0e0e96..9ed28eb9 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt @@ -193,7 +193,7 @@ internal fun RecordRegisterResponse.toModel(): RecordRegisterModel { pageNumber = pageNumber, quote = quote, emotionTags = emotionTags, - review = review, + review = review ?: "", createdAt = createdAt, updatedAt = updatedAt, ) @@ -215,7 +215,7 @@ internal fun ReadingRecord.toModel(): ReadingRecordModel { userBookId = userBookId, pageNumber = pageNumber, quote = quote, - review = review, + review = review ?: "", emotionTags = emotionTags, createdAt = createdAt, updatedAt = updatedAt, @@ -232,7 +232,7 @@ internal fun RecordDetailResponse.toModel(): RecordDetailModel { userBookId = userBookId, pageNumber = pageNumber, quote = quote, - review = review, + review = review ?: "", emotionTags = emotionTags, createdAt = createdAt.toFormattedDate(), updatedAt = updatedAt.toFormattedDate(), diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/ReadingRecordsResponse.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/ReadingRecordsResponse.kt index 324c5784..f1148819 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/ReadingRecordsResponse.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/ReadingRecordsResponse.kt @@ -28,7 +28,7 @@ data class ReadingRecord( @SerialName("quote") val quote: String, @SerialName("review") - val review: String = "", + val review: String?, @SerialName("emotionTags") val emotionTags: List = emptyList(), @SerialName("createdAt") diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordDetailResponse.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordDetailResponse.kt index 1c5441f7..c78a219b 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordDetailResponse.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordDetailResponse.kt @@ -14,7 +14,7 @@ data class RecordDetailResponse( @SerialName("quote") val quote: String, @SerialName("review") - val review: String, + val review: String?, @SerialName("emotionTags") val emotionTags: List, @SerialName("createdAt") diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordRegisterResponse.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordRegisterResponse.kt index b83b33d9..a6a4c2b5 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordRegisterResponse.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/RecordRegisterResponse.kt @@ -16,7 +16,7 @@ data class RecordRegisterResponse( @SerialName("emotionTags") val emotionTags: List, @SerialName("review") - val review: String, + val review: String?, @SerialName("createdAt") val createdAt: String, @SerialName("updatedAt") From 8877838dc5984f24d75bbb2e2d1d20fe1cae50b4 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 28 Oct 2025 09:59:29 +0900 Subject: [PATCH 061/116] =?UTF-8?q?[BOOK-382]=20feat:=20=EA=B8=B0=EB=A1=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=ED=99=94=EB=A9=B4=EB=82=B4=20=EA=B0=90?= =?UTF-8?q?=EC=83=81=ED=8F=89=20=EB=B3=80=EA=B2=BD=20=EB=B9=88=20=EA=B0=92?= =?UTF-8?q?=20validation=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ninecraft/booket/feature/edit/record/RecordEditPresenter.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditPresenter.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditPresenter.kt index 427ce11e..0c1b7220 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditPresenter.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditPresenter.kt @@ -67,7 +67,6 @@ class RecordEditPresenter @AssistedInject constructor( derivedStateOf { recordPageState.text.isNotEmpty() && recordQuoteState.text.isNotEmpty() && - recordImpressionState.text.isNotEmpty() && !isPageError && hasChanges } From 420ed4b1da3c10aef5f0aa82fb53cf600406dc76 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 28 Oct 2025 10:06:07 +0900 Subject: [PATCH 062/116] =?UTF-8?q?[BOOK-382]=20chore:=20detekt=20TooGener?= =?UTF-8?q?icExceptionCaught=20lint=20=EC=98=B5=EC=85=98=20=EB=B9=84?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit try catch 구문을 쓰면 필히 붙혀야 하는 구조임 --- .../com/ninecraft/booket/core/common/extensions/Context.kt | 2 -- .../com/ninecraft/booket/core/common/utils/HandleException.kt | 1 - .../ninecraft/booket/core/common/utils/RunSuspendCatching.kt | 2 +- .../impl/datasource/DefaultBookRecentSearchDataSource.kt | 3 --- .../impl/datasource/DefaultLibraryRecentSearchDataSource.kt | 3 --- .../com/ninecraft/booket/core/network/TokenAuthenticator.kt | 1 - detekt-config.yml | 4 ++++ .../booket/feature/detail/book/BookDetailPresenter.kt | 1 - 8 files changed, 5 insertions(+), 12 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Context.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Context.kt index d1fa560b..17b29ffa 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Context.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Context.kt @@ -16,7 +16,6 @@ import androidx.core.content.FileProvider import com.orhanobut.logger.Logger import java.io.File -@Suppress("TooGenericExceptionCaught") fun Context.externalShareForBitmap(bitmap: ImageBitmap) { try { val file = File(bitmap.saveToDisk(this)) @@ -31,7 +30,6 @@ fun Context.externalShareForBitmap(bitmap: ImageBitmap) { } } -@Suppress("TooGenericExceptionCaught") fun Context.saveImageToGallery(bitmap: ImageBitmap) { try { val fileName = "reed_record_${System.currentTimeMillis()}.png" diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index e8e9ee56..7474fcb8 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -93,7 +93,6 @@ fun postErrorDialog( ErrorEventHelper.sendError(event = ErrorEvent.ShowDialog(spec)) } -@Suppress("TooGenericExceptionCaught") private fun HttpException.parseErrorMessage(): String? { return try { val errorBody = response()?.errorBody()?.string() diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/RunSuspendCatching.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/RunSuspendCatching.kt index b0152b27..59853c23 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/RunSuspendCatching.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/RunSuspendCatching.kt @@ -14,7 +14,7 @@ import kotlin.contracts.ExperimentalContracts */ @OptIn(ExperimentalContracts::class) -@Suppress("WRONG_INVOCATION_KIND", "TooGenericExceptionCaught") +@Suppress("WRONG_INVOCATION_KIND") inline fun runSuspendCatching(block: () -> T): Result { // 계약(contract): 컴파일러에게 'block' 람다의 실행 시점과 횟수를 명시적으로 알림 // 'callsInPlace'와 'EXACTLY_ONCE'는 'block'이 이 함수 내에서 즉시, 그리고 정확히 한 번만 실행됨을 보장 diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultBookRecentSearchDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultBookRecentSearchDataSource.kt index 2694b2a9..457ea401 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultBookRecentSearchDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultBookRecentSearchDataSource.kt @@ -17,7 +17,6 @@ import javax.inject.Inject class DefaultBookRecentSearchDataSource @Inject constructor( @BookRecentSearchDataStore private val dataStore: DataStore, ) : BookRecentSearchDataSource { - @Suppress("TooGenericExceptionCaught") override val recentSearches: Flow> = dataStore.data .handleIOException() .map { prefs -> @@ -34,7 +33,6 @@ class DefaultBookRecentSearchDataSource @Inject constructor( } ?: emptyList() } - @Suppress("TooGenericExceptionCaught") override suspend fun addRecentSearch(query: String) { if (query.isBlank()) return @@ -66,7 +64,6 @@ class DefaultBookRecentSearchDataSource @Inject constructor( } } - @Suppress("TooGenericExceptionCaught") override suspend fun deleteRecentSearch(query: String) { dataStore.edit { prefs -> val currentSearches = prefs[BOOK_RECENT_SEARCHES]?.let { jsonString -> diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultLibraryRecentSearchDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultLibraryRecentSearchDataSource.kt index b666c888..97cd15d7 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultLibraryRecentSearchDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultLibraryRecentSearchDataSource.kt @@ -17,7 +17,6 @@ import javax.inject.Inject class DefaultLibraryRecentSearchDataSource @Inject constructor( @LibraryRecentSearchDataStore private val dataStore: DataStore, ) : LibraryRecentSearchDataSource { - @Suppress("TooGenericExceptionCaught") override val recentSearches: Flow> = dataStore.data .handleIOException() .map { prefs -> @@ -34,7 +33,6 @@ class DefaultLibraryRecentSearchDataSource @Inject constructor( } ?: emptyList() } - @Suppress("TooGenericExceptionCaught") override suspend fun addRecentSearch(query: String) { if (query.isBlank()) return @@ -66,7 +64,6 @@ class DefaultLibraryRecentSearchDataSource @Inject constructor( } } - @Suppress("TooGenericExceptionCaught") override suspend fun deleteRecentSearch(query: String) { dataStore.edit { prefs -> val currentSearches = prefs[LIBRARY_RECENT_SEARCHES]?.let { jsonString -> diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/TokenAuthenticator.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/TokenAuthenticator.kt index 1300b8b3..011ab824 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/TokenAuthenticator.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/TokenAuthenticator.kt @@ -12,7 +12,6 @@ import okhttp3.Route import javax.inject.Inject import javax.inject.Provider -@Suppress("TooGenericExceptionCaught") class TokenAuthenticator @Inject constructor( private val tokenDataSource: TokenDataSource, private val serviceProvider: Provider, diff --git a/detekt-config.yml b/detekt-config.yml index 36951a0c..e37e154c 100644 --- a/detekt-config.yml +++ b/detekt-config.yml @@ -68,6 +68,10 @@ style: MaxLineLength: active: false +exceptions: + TooGenericExceptionCaught: + active: false + naming: TopLevelPropertyNaming: constantPattern: '[A-Z][A-Za-z0-9_]*' diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt index 67d3e962..ce5bf499 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt @@ -87,7 +87,6 @@ class BookDetailPresenter @AssistedInject constructor( var isBookDeleteDialogVisible by rememberRetained { mutableStateOf(false) } var sideEffect by rememberRetained { mutableStateOf(null) } - @Suppress("TooGenericExceptionCaught") fun initialLoad() { uiState = UiState.Loading From cebcb313292f8a0ee1f2fe5580c22618725c994c Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 10:43:52 +0900 Subject: [PATCH 063/116] =?UTF-8?q?[BOOK-364]=20feat:=20notification=20ico?= =?UTF-8?q?n=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/drawable/ic_notification.xml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 core/designsystem/src/main/res/drawable/ic_notification.xml diff --git a/core/designsystem/src/main/res/drawable/ic_notification.xml b/core/designsystem/src/main/res/drawable/ic_notification.xml new file mode 100644 index 00000000..01204e1b --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_notification.xml @@ -0,0 +1,9 @@ + + + From 4d4f40f547f57c714f5f8d8993118c7d6c0f7ca6 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 10:48:29 +0900 Subject: [PATCH 064/116] =?UTF-8?q?[BOOK-364]=20feat:=20FirebaseMessagingS?= =?UTF-8?q?ervice=20=EA=B5=AC=ED=98=84=20(=ED=86=A0=ED=81=B0=20=EA=B0=B1?= =?UTF-8?q?=EC=8B=A0=20=EB=B0=8F=20=ED=91=B8=EC=8B=9C=20=EC=88=98=EC=8B=A0?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 18 ++++- .../booket/ReedFirebaseMessagingService.kt | 70 ++++++++++++++++++- .../data/api/repository/UserRepository.kt | 2 + .../impl/repository/DefaultUserRepository.kt | 6 +- 4 files changed, 90 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2e277476..91ffac8f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ - + - + + + + + + + + - diff --git a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt index d94950b4..ca8a8f45 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt @@ -1,27 +1,93 @@ package com.ninecraft.booket +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage import com.ninecraft.booket.core.data.api.repository.UserRepository +import com.ninecraft.booket.core.designsystem.R +import com.ninecraft.booket.feature.main.MainActivity +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import javax.inject.Inject +@AndroidEntryPoint class ReedFirebaseMessagingService : FirebaseMessagingService() { @Inject lateinit var userRepository: UserRepository + private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob()) + override fun onNewToken(token: String) { super.onNewToken(token) - CoroutineScope(Dispatchers.IO).launch { - userRepository.syncFcmToken() + scope.launch { + userRepository.updateFcmToken(token) } } override fun onMessageReceived(message: RemoteMessage) { super.onMessageReceived(message) + + val title = message.notification?.title ?: "Reed" + val body = message.notification?.body ?: "" + + val intent = Intent(this, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + } + + val pendingIntent = PendingIntent.getActivity( + this, + 0, + intent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, + ) + + val builder = NotificationCompat.Builder(this, REED_CHANNEL_ID) + .setSmallIcon(R.drawable.ic_notification) + .setColor(ContextCompat.getColor(this, R.color.green_500)) + .setContentTitle(title) + .setContentText(body) + .setContentIntent(pendingIntent) + .setAutoCancel(true) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + + val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + manager.notify(System.currentTimeMillis().toInt(), builder.build()) + } + + override fun onDestroy() { + super.onDestroy() + scope.cancel() + } + + companion object { + private const val REED_CHANNEL_ID = "REED_PUSH_CHANNEL" + private const val REED_CHANNEL_NAME = "리드 푸시 알림" + private const val REED_CHANNEL_DESC = "리드 앱에서 보내는 푸시 알림을 관리합니다." + + // Android 8.0 이상 필수 채널 생성 + fun createNotificationChannel(context: Context) { + val channel = NotificationChannel( + REED_CHANNEL_ID, + REED_CHANNEL_NAME, + NotificationManager.IMPORTANCE_DEFAULT, + ).apply { + description = REED_CHANNEL_DESC + } + + val manager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager + manager.createNotificationChannel(channel) + } } } diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 1abce33e..b430596e 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -14,6 +14,8 @@ interface UserRepository { suspend fun setOnboardingCompleted(isCompleted: Boolean) + suspend fun updateFcmToken(fcmToken: String): Result + suspend fun syncFcmToken(): Result val isUserNotificationEnabled: Flow diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 55da6f07..e7d7897d 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -38,6 +38,10 @@ internal class DefaultUserRepository @Inject constructor( onboardingDataSource.setOnboardingCompleted(isCompleted) } + override suspend fun updateFcmToken(fcmToken: String) = runSuspendCatching { + service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() + } + override suspend fun syncFcmToken() = runSuspendCatching { val newToken = getRemoteFcmToken() val localToken = getLocalFcmToken() @@ -47,7 +51,7 @@ internal class DefaultUserRepository @Inject constructor( return@runSuspendCatching } - service.updateFcmToken(FcmTokenRequest(newToken)).toModel() + updateFcmToken(newToken) setFcmToken(newToken) } From 4e75d7fc6c6d8922eae721d00e61e660d8df799f Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 10:54:57 +0900 Subject: [PATCH 065/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=B1=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20NotificationChannel=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 ++++ .../NotificationChannelInitializer.kt | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 app/src/main/kotlin/com/ninecraft/booket/initializer/NotificationChannelInitializer.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 91ffac8f..f9074ce9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -41,6 +41,10 @@ android:name="com.ninecraft.booket.initializer.FirebaseCrashlyticsInitializer" android:value="androidx.startup" /> + + { + + override fun create(context: Context) { + createNotificationChannel(context) + } + + override fun dependencies(): List>> { + return emptyList() + } +} From a407c1241a8fd0b75b0511f78e955f130851ce79 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 11:06:59 +0900 Subject: [PATCH 066/116] =?UTF-8?q?[BOOK-364]=20refactor:=20onNewToken()?= =?UTF-8?q?=20=EC=97=90=EC=84=9C=20=EC=A4=91=EB=B3=B5=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=20=EB=B0=A9=EC=A7=80=EB=A5=BC=20=EC=9C=84=ED=95=9C=20syncFcmTo?= =?UTF-8?q?ken=20=EC=98=A4=EB=B2=84=EB=A1=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/ReedFirebaseMessagingService.kt | 2 +- .../core/data/api/repository/UserRepository.kt | 4 ++-- .../data/impl/repository/DefaultUserRepository.kt | 13 +++++++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt index ca8a8f45..af88e2b6 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt @@ -32,7 +32,7 @@ class ReedFirebaseMessagingService : FirebaseMessagingService() { super.onNewToken(token) scope.launch { - userRepository.updateFcmToken(token) + userRepository.syncFcmToken(token) } } diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index b430596e..6c9d4d7b 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -14,10 +14,10 @@ interface UserRepository { suspend fun setOnboardingCompleted(isCompleted: Boolean) - suspend fun updateFcmToken(fcmToken: String): Result - suspend fun syncFcmToken(): Result + suspend fun syncFcmToken(fcmToken: String): Result + val isUserNotificationEnabled: Flow suspend fun setUserNotificationEnabled(isEnabled: Boolean) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index e7d7897d..808f00d3 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -38,10 +38,6 @@ internal class DefaultUserRepository @Inject constructor( onboardingDataSource.setOnboardingCompleted(isCompleted) } - override suspend fun updateFcmToken(fcmToken: String) = runSuspendCatching { - service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() - } - override suspend fun syncFcmToken() = runSuspendCatching { val newToken = getRemoteFcmToken() val localToken = getLocalFcmToken() @@ -55,6 +51,11 @@ internal class DefaultUserRepository @Inject constructor( setFcmToken(newToken) } + override suspend fun syncFcmToken(fcmToken: String): Result = runSuspendCatching { + updateFcmToken(fcmToken) + setFcmToken(fcmToken) + } + override val isUserNotificationEnabled = notificationDataSource.isUserNotificationEnabled override suspend fun setUserNotificationEnabled(isEnabled: Boolean) { @@ -91,4 +92,8 @@ internal class DefaultUserRepository @Inject constructor( private suspend fun setFcmToken(fcmToken: String) { notificationDataSource.setFcmToken(fcmToken) } + + private suspend fun updateFcmToken(fcmToken: String) = runSuspendCatching { + service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() + } } From 4cb00dda2a6bd6f368a26e1077d7ae049cd2634a Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 28 Oct 2025 11:12:51 +0900 Subject: [PATCH 067/116] =?UTF-8?q?[BOOK-381]=20chore:=20CI=20Compose=20St?= =?UTF-8?q?ability=20Check=20job=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 5a4e56c9..7804f4f5 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -50,3 +50,18 @@ jobs: - name: Run build run: ./gradlew buildDebug --stacktrace + + stability_check: + name: Compose Stability Check + runs-on: macos-latest + needs: build + steps: + - name: Check out code + uses: actions/checkout@v5.0.0 + - name: Set up JDK + uses: actions/setup-java@v5.0.0 + with: + distribution: 'zulu' + java-version: 21 + - name: compose stability check + run: ./gradlew stabilityCheck From c7777f07a286baebfdb3de90ff08b40c763997db Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 28 Oct 2025 11:26:53 +0900 Subject: [PATCH 068/116] =?UTF-8?q?[BOOK-381]=20chore:=20=ED=86=A0?= =?UTF-8?q?=EB=81=BC=20=EC=BD=94=EB=A6=AC=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 7804f4f5..25bec907 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -54,12 +54,12 @@ jobs: stability_check: name: Compose Stability Check runs-on: macos-latest - needs: build + needs: ci-build steps: - name: Check out code - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v5 - name: Set up JDK - uses: actions/setup-java@v5.0.0 + uses: actions/setup-java@v5 with: distribution: 'zulu' java-version: 21 From 2ce8b80da7d503f0ebd5b93d62da315bd492b678 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 12:45:59 +0900 Subject: [PATCH 069/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B6=8C=ED=95=9C=20=EB=B3=80=EA=B2=BD=20=EC=8B=9C=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EB=8F=99=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/api/repository/UserRepository.kt | 2 ++ .../impl/repository/DefaultUserRepository.kt | 2 ++ .../booket/feature/home/HomePresenter.kt | 2 +- .../booket/feature/home/HomeUiState.kt | 2 +- .../notification/NotificationPresenter.kt | 36 +++++++++++++++++++ .../settings/notification/NotificationUi.kt | 1 + .../notification/NotificationUiState.kt | 1 + 7 files changed, 44 insertions(+), 2 deletions(-) diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 6c9d4d7b..f2040ee7 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -20,6 +20,8 @@ interface UserRepository { val isUserNotificationEnabled: Flow + suspend fun getUserNotificationEnabled(): Boolean + suspend fun setUserNotificationEnabled(isEnabled: Boolean) suspend fun getLastSyncedNotificationEnabled(): Boolean? diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 808f00d3..42f57675 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -58,6 +58,8 @@ internal class DefaultUserRepository @Inject constructor( override val isUserNotificationEnabled = notificationDataSource.isUserNotificationEnabled + override suspend fun getUserNotificationEnabled(): Boolean = isUserNotificationEnabled.first() + override suspend fun setUserNotificationEnabled(isEnabled: Boolean) { notificationDataSource.setUserNotificationEnabled(isEnabled) } diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 028e0c14..3516c301 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -104,7 +104,7 @@ class HomePresenter @AssistedInject constructor( is HomeUiEvent.OnNotificationPermissionResult -> { scope.launch { - val isPermissionGranted = event.isGranted + val isPermissionGranted = event.granted val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() if (lastSyncedServerEnabled == null || isPermissionGranted != lastSyncedServerEnabled) { diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt index 39377b53..2f7b61a3 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUiState.kt @@ -43,5 +43,5 @@ sealed interface HomeUiEvent : CircuitUiEvent { ) : HomeUiEvent data object OnRetryClick : HomeUiEvent data class OnTabSelected(val tab: MainTab) : HomeUiEvent - data class OnNotificationPermissionResult(val isGranted: Boolean) : HomeUiEvent + data class OnNotificationPermissionResult(val granted: Boolean) : HomeUiEvent } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index 1415a065..a89ff94e 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -57,6 +57,27 @@ class NotificationPresenter @AssistedInject constructor( } } + suspend fun syncNotificationSettings(enabled: Boolean) { + userRepository.updateNotificationSettings(enabled) + .onSuccess { + userRepository.setLastNotificationSyncedEnabled(enabled) + } + .onFailure { exception -> + val handleErrorMessage = { message: String -> + Logger.e(message) + sideEffect = NotificationSideEffect.ShowToast(message) + } + + handleException( + exception = exception, + onError = handleErrorMessage, + onLoginRequired = { + navigator.resetRoot(LoginScreen()) + }, + ) + } + } + fun handleEvent(event: NotificationUiEvent) { when (event) { is NotificationUiEvent.InitSideEffect -> { @@ -67,6 +88,21 @@ class NotificationPresenter @AssistedInject constructor( navigator.pop() } + is NotificationUiEvent.OnNotificationPermissionResult -> { + scope.launch { + val isPermissionGranted = event.granted + val userEnabled = userRepository.getUserNotificationEnabled() + val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() + + val shouldSync = (!isPermissionGranted && lastSyncedServerEnabled != false) + || (userEnabled && (lastSyncedServerEnabled == null || lastSyncedServerEnabled != isPermissionGranted)) + + if (shouldSync) { + syncNotificationSettings(isPermissionGranted) + } + } + } + is NotificationUiEvent.OnNotificationToggle -> { updateNotificationSettings(event.enabled) } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 4a37b7a1..07ff107c 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -70,6 +70,7 @@ internal fun NotificationUi( val observer = LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { value = checkSystemNotificationEnabled(context) + state.eventSink(NotificationUiEvent.OnNotificationPermissionResult(value)) } } lifecycleOwner.lifecycle.addObserver(observer) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt index 7a7d70d6..c728f47d 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt @@ -23,5 +23,6 @@ sealed interface NotificationSideEffect { sealed interface NotificationUiEvent : CircuitUiEvent { data object InitSideEffect : NotificationUiEvent data object OnBackClick : NotificationUiEvent + data class OnNotificationPermissionResult(val granted: Boolean) : NotificationUiEvent data class OnNotificationToggle(val enabled: Boolean) : NotificationUiEvent } From 3f06f9c92db557e451a5647326adab24bb465f4a Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 12:49:37 +0900 Subject: [PATCH 070/116] [BOOK-364] chore: code style check success --- .../booket/core/data/impl/repository/DefaultUserRepository.kt | 2 +- .../feature/settings/notification/NotificationPresenter.kt | 4 ++-- .../feature/settings/notification/NotificationUiState.kt | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 42f57675..1dbd37db 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -83,7 +83,7 @@ internal class DefaultUserRepository @Inject constructor( task.exception?.let { exception -> continuation.resumeWithException(exception) } ?: continuation.resumeWithException( - Exception("Unknown error occurred while fetching FCM token") + Exception("Unknown error occurred while fetching FCM token"), ) } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index a89ff94e..7c76ef54 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -94,8 +94,8 @@ class NotificationPresenter @AssistedInject constructor( val userEnabled = userRepository.getUserNotificationEnabled() val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() - val shouldSync = (!isPermissionGranted && lastSyncedServerEnabled != false) - || (userEnabled && (lastSyncedServerEnabled == null || lastSyncedServerEnabled != isPermissionGranted)) + val shouldSync = (!isPermissionGranted && lastSyncedServerEnabled != false) || + (userEnabled && (lastSyncedServerEnabled == null || lastSyncedServerEnabled != isPermissionGranted)) if (shouldSync) { syncNotificationSettings(isPermissionGranted) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt index c728f47d..7956e7e1 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt @@ -1,7 +1,6 @@ package com.ninecraft.booket.feature.settings.notification import androidx.compose.runtime.Immutable -import com.ninecraft.booket.core.common.utils.UiText import com.slack.circuit.runtime.CircuitUiEvent import com.slack.circuit.runtime.CircuitUiState import java.util.UUID From a9bd7e635d9f0ad52ae72445b08a57ea99247377 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 14:50:49 +0900 Subject: [PATCH 071/116] =?UTF-8?q?[BOOK-364]=20fix:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=84=A4=EC=A0=95=20Off=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=EB=A5=BC=20=ED=99=88=EC=97=90=EC=84=9C=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?On=EC=9C=BC=EB=A1=9C=20=EB=8F=99=EA=B8=B0=ED=99=94=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/feature/home/HomePresenter.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 3516c301..44dbff8a 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -105,9 +105,13 @@ class HomePresenter @AssistedInject constructor( is HomeUiEvent.OnNotificationPermissionResult -> { scope.launch { val isPermissionGranted = event.granted + val userEnabled = userRepository.getUserNotificationEnabled() val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() - if (lastSyncedServerEnabled == null || isPermissionGranted != lastSyncedServerEnabled) { + val shouldSync = (!isPermissionGranted && lastSyncedServerEnabled != false) || + (userEnabled && (lastSyncedServerEnabled == null || lastSyncedServerEnabled != isPermissionGranted)) + + if (shouldSync) { syncNotificationSettings(isPermissionGranted) } } From fad03d2324659a7d28efaae6fd8a4feca1d27a33 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 28 Oct 2025 16:05:05 +0900 Subject: [PATCH 072/116] =?UTF-8?q?[BOOK-382]=20feat:=20=EA=B0=90=EC=83=81?= =?UTF-8?q?=ED=8F=89=20=EC=9E=91=EC=84=B1=20=ED=99=94=EB=A9=B4=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20"=EB=8B=A4=EC=9D=8C"->"=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C"=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/feature/record/step/EmotionStep.kt | 2 +- .../com/ninecraft/booket/feature/record/step/ImpressionStep.kt | 2 +- .../com/ninecraft/booket/feature/record/step/QuoteStep.kt | 2 +- feature/record/src/main/res/values/strings.xml | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt index 36b7b33e..bb49fec0 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt @@ -111,7 +111,7 @@ fun EmotionStep( .padding(horizontal = ReedTheme.spacing.spacing5) .padding(bottom = ReedTheme.spacing.spacing4), enabled = state.isNextButtonEnabled, - text = stringResource(R.string.record_next_button), + text = stringResource(R.string.record_next_button_text), multipleEventsCutterEnabled = false, ) } diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt index b9a6e275..4a1dd16b 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt @@ -189,7 +189,7 @@ fun ImpressionStep( vertical = ReedTheme.spacing.spacing4, ), enabled = state.isNextButtonEnabled, - text = stringResource(R.string.record_next_button), + text = stringResource(R.string.record_finish_button_text), multipleEventsCutterEnabled = true, ) } diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt index b9318765..42a76fa6 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt @@ -176,7 +176,7 @@ internal fun QuoteStep( vertical = ReedTheme.spacing.spacing4, ), enabled = state.isNextButtonEnabled, - text = stringResource(R.string.record_next_button), + text = stringResource(R.string.record_next_button_text), multipleEventsCutterEnabled = false, ) } diff --git a/feature/record/src/main/res/values/strings.xml b/feature/record/src/main/res/values/strings.xml index 981d5653..29c6c553 100644 --- a/feature/record/src/main/res/values/strings.xml +++ b/feature/record/src/main/res/values/strings.xml @@ -16,7 +16,8 @@ 카메라 권한이 필요해요 문장 인식을 위해 설정에서 권한을 허용해주세요. 설정으로 이동하기 - 다음 + 다음 + 기록 완료 기록하고 싶은 페이지와\n문장을 등록해보세요 책 페이지 문장 기록 From fc249abe5527b48841868358bb677a6b370360ec Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 22:56:29 +0900 Subject: [PATCH 073/116] =?UTF-8?q?[BOOK-364]=20fix:=20syncFcmToken?= =?UTF-8?q?=EC=97=90=EC=84=9C=20updateFcmToken=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=EA=B0=80=20=EC=A0=84=ED=8C=8C=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - runSuspendCatching으로 감싸지 않고 예외를 그대로 던지도록 수정 --- .../booket/core/data/impl/repository/DefaultUserRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 1dbd37db..d95a74d7 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -95,7 +95,7 @@ internal class DefaultUserRepository @Inject constructor( notificationDataSource.setFcmToken(fcmToken) } - private suspend fun updateFcmToken(fcmToken: String) = runSuspendCatching { - service.updateFcmToken(FcmTokenRequest(fcmToken)).toModel() + private suspend fun updateFcmToken(fcmToken: String) { + service.updateFcmToken(FcmTokenRequest(fcmToken)) } } From 7dec07a76c1a75371cf105e042dcbdb135ec6d2a Mon Sep 17 00:00:00 2001 From: seoyoon Date: Tue, 28 Oct 2025 23:03:09 +0900 Subject: [PATCH 074/116] =?UTF-8?q?[BOOK-364]=20fix:=20Android=2013=20?= =?UTF-8?q?=EB=AF=B8=EB=A7=8C=EC=97=90=EC=84=9C=20=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20=EB=88=84=EB=9D=BD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/feature/home/HomeUi.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 33f6066c..d290dc62 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -69,11 +69,15 @@ internal fun HomeUi( LaunchedEffect(Unit) { val isGranted = checkSystemNotificationEnabled(context) - if (isGranted) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (isGranted) { + state.eventSink(HomeUiEvent.OnNotificationPermissionResult(isGranted)) + } else { + val permission = Manifest.permission.POST_NOTIFICATIONS + permissionLauncher.launch(permission) + } + } else { state.eventSink(HomeUiEvent.OnNotificationPermissionResult(isGranted)) - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - val permission = Manifest.permission.POST_NOTIFICATIONS - permissionLauncher.launch(permission) } } } From f05cad2f765a9f43342a6d0fd5b3f233041f902d Mon Sep 17 00:00:00 2001 From: seoyoon Date: Wed, 29 Oct 2025 00:53:25 +0900 Subject: [PATCH 075/116] =?UTF-8?q?[BOOK-364]=20fix:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20Optimistic=20Update=20=EA=B2=BD?= =?UTF-8?q?=EC=9F=81=20=EC=A1=B0=EA=B1=B4=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/settings/notification/NotificationPresenter.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index 7c76ef54..aa8fd1a9 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -33,6 +33,7 @@ class NotificationPresenter @AssistedInject constructor( fun updateNotificationSettings(enabled: Boolean) { scope.launch { + val prevNotificationEnabled = userRepository.getUserNotificationEnabled() userRepository.setUserNotificationEnabled(enabled) userRepository.updateNotificationSettings(enabled) @@ -52,7 +53,7 @@ class NotificationPresenter @AssistedInject constructor( navigator.resetRoot(LoginScreen()) }, ) - userRepository.setUserNotificationEnabled(!enabled) + userRepository.setUserNotificationEnabled(prevNotificationEnabled) } } } From 70770ed6c509650f77a173d2057e2720066e1ace Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 30 Oct 2025 13:15:18 +0900 Subject: [PATCH 076/116] =?UTF-8?q?[BOOK-364]=20refactor:=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/ReedFirebaseMessagingService.kt | 2 +- .../core/data/impl/di/FirebaseModule.kt | 3 ++- .../impl/repository/DefaultUserRepository.kt | 21 +++++++------------ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt index af88e2b6..5efc4928 100644 --- a/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt +++ b/app/src/main/kotlin/com/ninecraft/booket/ReedFirebaseMessagingService.kt @@ -67,8 +67,8 @@ class ReedFirebaseMessagingService : FirebaseMessagingService() { } override fun onDestroy() { - super.onDestroy() scope.cancel() + super.onDestroy() } companion object { diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt index 0ab51c82..525dce21 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt @@ -2,6 +2,7 @@ package com.ninecraft.booket.core.data.impl.di import com.google.firebase.Firebase import com.google.firebase.messaging.FirebaseMessaging +import com.google.firebase.messaging.messaging import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.remoteConfig import com.google.firebase.remoteconfig.remoteConfigSettings @@ -30,5 +31,5 @@ internal object FirebaseModule { @Singleton @Provides - fun provideFirebaseMessaging(): FirebaseMessaging = FirebaseMessaging.getInstance() + fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index d95a74d7..3d915d61 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -13,10 +13,8 @@ import com.ninecraft.booket.core.network.service.ReedService import com.orhanobut.logger.Logger import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.firstOrNull -import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.tasks.await import javax.inject.Inject -import kotlin.coroutines.resume -import kotlin.coroutines.resumeWithException internal class DefaultUserRepository @Inject constructor( private val service: ReedService, @@ -75,17 +73,12 @@ internal class DefaultUserRepository @Inject constructor( service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel() } - private suspend fun getRemoteFcmToken(): String = suspendCancellableCoroutine { continuation -> - firebaseMessaging.token.addOnCompleteListener { task -> - if (task.isSuccessful) { - continuation.resume(task.result) - } else { - task.exception?.let { exception -> - continuation.resumeWithException(exception) - } ?: continuation.resumeWithException( - Exception("Unknown error occurred while fetching FCM token"), - ) - } + private suspend fun getRemoteFcmToken(): String { + return try { + firebaseMessaging.token.await() + } catch (e: Exception) { + Logger.e("Failed to fetch FCM token: ${e.message}") + throw e } } From 651c7dfc83bbd5b99fa82bac67a402f678864338 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 30 Oct 2025 14:19:53 +0900 Subject: [PATCH 077/116] =?UTF-8?q?[BOOK-364]=20feat:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=20=ED=83=88=ED=87=B4=20=EC=8B=9C=20Notification=20DataStore=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/data/impl/repository/DefaultAuthRepository.kt | 7 +++++++ .../datastore/api/datasource/NotificationDataSource.kt | 2 ++ .../impl/datasource/DefaultNotificationDataSource.kt | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt index 9e560650..08cce48c 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt @@ -2,6 +2,7 @@ package com.ninecraft.booket.core.data.impl.repository import com.ninecraft.booket.core.common.utils.runSuspendCatching import com.ninecraft.booket.core.data.api.repository.AuthRepository +import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource import com.ninecraft.booket.core.model.AutoLoginState import com.ninecraft.booket.core.model.UserState @@ -15,6 +16,7 @@ private const val KAKAO_PROVIDER_TYPE = "KAKAO" internal class DefaultAuthRepository @Inject constructor( private val service: ReedService, private val tokenDataSource: TokenDataSource, + private val notificationDataSource: NotificationDataSource, ) : AuthRepository { override suspend fun login(accessToken: String) = runSuspendCatching { val response = service.login( @@ -29,6 +31,7 @@ internal class DefaultAuthRepository @Inject constructor( override suspend fun logout() = runSuspendCatching { service.logout() clearTokens() + clearNotificationDataStore() } override suspend fun withdraw() = runSuspendCatching { @@ -61,4 +64,8 @@ internal class DefaultAuthRepository @Inject constructor( val accessToken = tokenDataSource.getAccessToken() return if (accessToken.isBlank()) UserState.Guest else UserState.LoggedIn } + + private suspend fun clearNotificationDataStore() { + notificationDataSource.clearNotificationDataStore() + } } diff --git a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt index f0f20019..c659aaca 100644 --- a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt +++ b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt @@ -11,4 +11,6 @@ interface NotificationDataSource { val lastSyncedNotificationEnabled: Flow suspend fun setLastSyncedNotificationEnabled(isEnabled: Boolean) + + suspend fun clearNotificationDataStore() } diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt index b4b117cb..c314e19b 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt @@ -51,6 +51,12 @@ class DefaultNotificationDataSource @Inject constructor( } } + override suspend fun clearNotificationDataStore() { + dataStore.edit { prefs -> + prefs.clear() + } + } + companion object Companion { private val FCM_TOKEN = stringPreferencesKey("FCM_TOKEN") private val USER_NOTIFICATION_ENABLED = booleanPreferencesKey("USER_NOTIFICATION_ENABLED") From 1e0795bf899db5f53c24edb1e3f0c06daace40e1 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 30 Oct 2025 16:45:11 +0900 Subject: [PATCH 078/116] =?UTF-8?q?[BOOK-364]=20feat:=20=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=20=ED=99=94=EB=A9=B4=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=ED=81=AC=EA=B8=B0=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ninecraft/booket/feature/settings/component/ToggleItem.kt | 4 +--- .../booket/feature/settings/notification/NotificationUi.kt | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt index 6eb4e449..00046359 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt @@ -1,6 +1,5 @@ package com.ninecraft.booket.feature.settings.component -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth @@ -28,9 +27,8 @@ internal fun ToggleItem( horizontal = ReedTheme.spacing.spacing5, ), verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, ) { - Column { + Column(modifier = Modifier.weight(1f)) { Text( text = title, color = ReedTheme.colors.contentPrimary, diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index 07ff107c..f704f7e1 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -10,7 +10,6 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.RequiresApi import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -147,9 +146,8 @@ internal fun NotificationGuideItem( horizontal = ReedTheme.spacing.spacing5, ), verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, ) { - Column { + Column(modifier = Modifier.weight(1f)) { Text( text = stringResource(R.string.notification_guide_title), color = ReedTheme.colors.contentBrand, From 241381ebfdd03c8742e48fdb8e37c20376df658c Mon Sep 17 00:00:00 2001 From: easyhooon Date: Fri, 31 Oct 2025 16:59:46 +0900 Subject: [PATCH 079/116] =?UTF-8?q?[BOOK-381]=20chore:=20Compose=20Stabili?= =?UTF-8?q?ty=20Check=20CI=20=EB=82=B4=EC=97=90=20Generate=20keystore.prop?= =?UTF-8?q?erties=20step=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 25bec907..8cc2b794 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -58,10 +58,15 @@ jobs: steps: - name: Check out code uses: actions/checkout@v5 + + - name: Generate keystore.properties + run: echo '${{ secrets.KEYSTORE_PROPERTIES }}' | base64 -d > ./keystore.properties + - name: Set up JDK uses: actions/setup-java@v5 with: distribution: 'zulu' java-version: 21 + - name: compose stability check run: ./gradlew stabilityCheck From 7dcedf38314ab143bc6a01ce67ea6ff5d1f4c4f7 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Fri, 31 Oct 2025 17:15:38 +0900 Subject: [PATCH 080/116] =?UTF-8?q?[BOOK-381]=20chore:=20Compose=20Stabili?= =?UTF-8?q?ty=20Check=20CI=20=EB=82=B4=EC=97=90=20Generate=20local.propert?= =?UTF-8?q?ies,=20Generate=20google-services.json=20step=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 8cc2b794..bd0ab539 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -59,9 +59,15 @@ jobs: - name: Check out code uses: actions/checkout@v5 + - name: Generate local.properties + run: echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 -d > ./local.properties + - name: Generate keystore.properties run: echo '${{ secrets.KEYSTORE_PROPERTIES }}' | base64 -d > ./keystore.properties + - name: Generate google-services.json + run: echo '${{ secrets.GOOGLE_SERVICES }}' | base64 -d > ./app/google-services.json + - name: Set up JDK uses: actions/setup-java@v5 with: From 9e507ffa7b7f84a792f6bf1570d05c1e95db62da Mon Sep 17 00:00:00 2001 From: easyhooon Date: Fri, 31 Oct 2025 17:56:29 +0900 Subject: [PATCH 081/116] =?UTF-8?q?[BOOK-381]=20chore:=20=EB=A1=9C?= =?UTF-8?q?=EC=BB=AC=EC=97=90=EC=84=9C=20Compose=20Stability=20Check=20?= =?UTF-8?q?=EC=84=B1=EA=B3=B5=ED=95=9C=20stability=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=93=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-ci.yml | 2 +- app/build.gradle.kts | 4 + ...droidApplicationComposeConventionPlugin.kt | 1 + core/common/stability/common.stability | 33 ++ .../stability/designsystem.stability | 316 +++++++++++++++ core/ui/stability/ui.stability | 199 +++++++++ feature/detail/stability/detail.stability | 380 ++++++++++++++++++ feature/edit/stability/edit.stability | 95 +++++ feature/home/stability/home.stability | 99 +++++ feature/library/stability/library.stability | 111 +++++ feature/login/stability/login.stability | 79 ++++ 11 files changed, 1318 insertions(+), 1 deletion(-) create mode 100644 core/common/stability/common.stability create mode 100644 core/designsystem/stability/designsystem.stability create mode 100644 core/ui/stability/ui.stability create mode 100644 feature/detail/stability/detail.stability create mode 100644 feature/edit/stability/edit.stability create mode 100644 feature/home/stability/home.stability create mode 100644 feature/library/stability/library.stability create mode 100644 feature/login/stability/login.stability diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index bd0ab539..ff12fe67 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -74,5 +74,5 @@ jobs: distribution: 'zulu' java-version: 21 - - name: compose stability check + - name: Compose Stability Check run: ./gradlew stabilityCheck diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 49baa4fb..3790c539 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -59,6 +59,10 @@ android { } } +composeStabilityAnalyzer { + enabled.set(true) +} + ksp { arg("circuit.codegen.mode", "hilt") } diff --git a/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index 310243b4..7c90de29 100644 --- a/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -12,6 +12,7 @@ internal class AndroidApplicationComposeConventionPlugin : Plugin { applyPlugins( Plugins.ANDROID_APPLICATION, Plugins.KOTLIN_COMPOSE, + Plugins.COMPOSE_STABILITY_ANALYZER, ) extensions.configure { diff --git a/core/common/stability/common.stability b/core/common/stability/common.stability new file mode 100644 index 00000000..6de75f09 --- /dev/null +++ b/core/common/stability/common.stability @@ -0,0 +1,33 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :common:stabilityDump + +@Composable +public fun com.ninecraft.booket.core.common.utils.HighlightedText(fullText: kotlin.String, highlightText: kotlin.String, highlightColor: androidx.compose.ui.graphics.Color): androidx.compose.ui.text.AnnotatedString + skippable: true + restartable: true + params: + - fullText: STABLE (String is immutable) + - highlightText: STABLE (String is immutable) + - highlightColor: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.core.common.utils.UiText.DirectString.asString(): kotlin.String + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.common.utils.UiText.StringResource.asString(): kotlin.String + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.common.utils.UiText.asString(): kotlin.String + skippable: true + restartable: true + params: + diff --git a/core/designsystem/stability/designsystem.stability b/core/designsystem/stability/designsystem.stability new file mode 100644 index 00000000..e3399e9a --- /dev/null +++ b/core/designsystem/stability/designsystem.stability @@ -0,0 +1,316 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :designsystem:stabilityDump + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.NetworkImage(imageUrl: kotlin.String, contentDescription: kotlin.String, modifier: androidx.compose.ui.Modifier, placeholder: androidx.compose.ui.graphics.painter.Painter?, contentScale: androidx.compose.ui.layout.ContentScale): kotlin.Unit + skippable: false + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - contentDescription: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - placeholder: RUNTIME (requires runtime check) + - contentScale: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.NetworkImagePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.RecordProgressBar(currentStep: com.ninecraft.booket.core.designsystem.RecordStep, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - currentStep: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.ReedDivider(modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.ReedDividerPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.ResourceImage(imageRes: kotlin.Int, contentDescription: kotlin.String, modifier: androidx.compose.ui.Modifier, placeholder: androidx.compose.ui.graphics.painter.Painter?, contentScale: androidx.compose.ui.layout.ContentScale): kotlin.Unit + skippable: false + restartable: true + params: + - imageRes: STABLE (primitive type) + - contentDescription: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - placeholder: RUNTIME (requires runtime check) + - contentScale: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.ResourceImagePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButton(onClick: kotlin.Function0, text: kotlin.String, sizeStyle: com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle, colorStyle: com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle, modifier: androidx.compose.ui.Modifier, enabled: kotlin.Boolean, leadingIcon: @[Composable] androidx.compose.runtime.internal.ComposableFunction0?, trailingIcon: @[Composable] androidx.compose.runtime.internal.ComposableFunction0?, multipleEventsCutterEnabled: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - text: STABLE (String is immutable) + - sizeStyle: STABLE + - colorStyle: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + - enabled: STABLE (primitive type) + - leadingIcon: STABLE (composable function type) + - trailingIcon: STABLE (composable function type) + - multipleEventsCutterEnabled: STABLE (primitive type) + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.borderStroke(): androidx.compose.foundation.BorderStroke? + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.containerColor(isPressed: kotlin.Boolean): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + - isPressed: STABLE (primitive type) + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.contentColor(): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.disabledContainerColor(): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.disabledContentColor(): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonDisabledPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedLargeButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedMediumButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedSmallButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedTextButton(onClick: kotlin.Function0, text: kotlin.String, sizeStyle: com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle, colorStyle: com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle, modifier: androidx.compose.ui.Modifier, enabled: kotlin.Boolean, multipleEventsCutterEnabled: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - text: STABLE (String is immutable) + - sizeStyle: STABLE + - colorStyle: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + - enabled: STABLE (primitive type) + - multipleEventsCutterEnabled: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedTextButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.checkbox.CircleCheckBox(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.checkbox.CircleCheckboxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.checkbox.SquareCheckBox(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.checkbox.SquareCheckboxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCheckBox(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCheckBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecordTextField(recordState: androidx.compose.foundation.text.input.TextFieldState, recordHintRes: kotlin.Int, modifier: androidx.compose.ui.Modifier, inputTransformation: androidx.compose.foundation.text.input.InputTransformation?, keyboardOptions: androidx.compose.foundation.text.KeyboardOptions, lineLimits: androidx.compose.foundation.text.input.TextFieldLineLimits, isError: kotlin.Boolean, errorMessage: kotlin.String, onClear: kotlin.Function0?, onNext: kotlin.Function0, backgroundColor: androidx.compose.ui.graphics.Color, textColor: androidx.compose.ui.graphics.Color, cornerShape: androidx.compose.foundation.shape.RoundedCornerShape, borderStroke: androidx.compose.foundation.BorderStroke): kotlin.Unit + skippable: false + restartable: true + params: + - recordState: STABLE (marked @Stable or @Immutable) + - recordHintRes: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + - inputTransformation: STABLE (marked @Stable or @Immutable) + - keyboardOptions: STABLE (marked @Stable or @Immutable) + - lineLimits: STABLE (marked @Stable or @Immutable) + - isError: STABLE (primitive type) + - errorMessage: STABLE (String is immutable) + - onClear: STABLE (function type) + - onNext: STABLE (function type) + - backgroundColor: STABLE (marked @Stable or @Immutable) + - textColor: STABLE (marked @Stable or @Immutable) + - cornerShape: RUNTIME (requires runtime check) + - borderStroke: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecordTextFieldPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextField(queryState: androidx.compose.foundation.text.input.TextFieldState, queryHintRes: kotlin.Int, onSearch: kotlin.Function1, onClear: kotlin.Function0, modifier: androidx.compose.ui.Modifier, backgroundColor: androidx.compose.ui.graphics.Color, textColor: androidx.compose.ui.graphics.Color, cornerShape: androidx.compose.foundation.shape.RoundedCornerShape, borderStroke: androidx.compose.foundation.BorderStroke?, searchIconTint: androidx.compose.ui.graphics.Color): kotlin.Unit + skippable: false + restartable: true + params: + - queryState: STABLE (marked @Stable or @Immutable) + - queryHintRes: STABLE (primitive type) + - onSearch: STABLE (function type) + - onClear: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - backgroundColor: STABLE (marked @Stable or @Immutable) + - textColor: STABLE (marked @Stable or @Immutable) + - cornerShape: RUNTIME (requires runtime check) + - borderStroke: STABLE (marked @Stable or @Immutable) + - searchIconTint: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextFieldPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme(content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - content: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedBorder + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedColorScheme + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedRadius + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedSpacing + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedTypography + skippable: true + restartable: true + params: + diff --git a/core/ui/stability/ui.stability b/core/ui/stability/ui.stability new file mode 100644 index 00000000..44d5e658 --- /dev/null +++ b/core/ui/stability/ui.stability @@ -0,0 +1,199 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :ui:stabilityDump + +@Composable +public fun com.ninecraft.booket.core.ui.ReedScaffold(modifier: androidx.compose.ui.Modifier, topBar: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, bottomBar: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, snackbarHost: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, floatingActionButton: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, containerColor: androidx.compose.ui.graphics.Color, contentWindowInsets: androidx.compose.foundation.layout.WindowInsets, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction1): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - topBar: STABLE (composable function type) + - bottomBar: STABLE (composable function type) + - snackbarHost: STABLE (composable function type) + - floatingActionButton: STABLE (composable function type) + - containerColor: STABLE (marked @Stable or @Immutable) + - contentWindowInsets: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.InfinityLazyColumn(modifier: androidx.compose.ui.Modifier, state: androidx.compose.foundation.lazy.LazyListState, contentPadding: androidx.compose.foundation.layout.PaddingValues, reverseLayout: kotlin.Boolean, verticalArrangement: androidx.compose.foundation.layout.Arrangement.Vertical, horizontalAlignment: androidx.compose.ui.Alignment.Horizontal, flingBehavior: androidx.compose.foundation.gestures.FlingBehavior, userScrollEnabled: kotlin.Boolean, loadMoreLimitCount: kotlin.Int, loadMore: kotlin.Function0, content: @[ExtensionFunctionType] kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - state: STABLE (marked @Stable or @Immutable) + - contentPadding: STABLE (marked @Stable or @Immutable) + - reverseLayout: STABLE (primitive type) + - verticalArrangement: STABLE (marked @Stable or @Immutable) + - horizontalAlignment: STABLE (marked @Stable or @Immutable) + - flingBehavior: STABLE (marked @Stable or @Immutable) + - userScrollEnabled: STABLE (primitive type) + - loadMoreLimitCount: STABLE (primitive type) + - loadMore: STABLE (function type) + - content: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.InfinityLazyColumnPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.LoadStateFooter(footerState: com.ninecraft.booket.core.ui.component.FooterState, onRetryClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - footerState: STABLE (marked @Stable or @Immutable) + - onRetryClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedBackTopAppBar(modifier: androidx.compose.ui.Modifier, isDark: kotlin.Boolean, title: kotlin.String, onBackClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - isDark: STABLE (primitive type) + - title: STABLE (String is immutable) + - onBackClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedBackTopAppBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedBottomSheet(onDismissRequest: kotlin.Function0, modifier: androidx.compose.ui.Modifier, sheetState: androidx.compose.material3.SheetState, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - sheetState: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedChoiceDialogPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedCloseTopAppBar(modifier: androidx.compose.ui.Modifier, isDark: kotlin.Boolean, title: kotlin.String, onClose: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - isDark: STABLE (primitive type) + - title: STABLE (String is immutable) + - onClose: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedCloseTopAppBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedConfirmDialogPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedDialog(confirmButtonText: kotlin.String, onConfirmRequest: kotlin.Function0, modifier: androidx.compose.ui.Modifier, title: kotlin.String?, description: kotlin.String?, dismissButtonText: kotlin.String?, onDismissRequest: kotlin.Function0, headerContent: @[Composable] androidx.compose.runtime.internal.ComposableFunction0?): kotlin.Unit + skippable: true + restartable: true + params: + - confirmButtonText: STABLE (String is immutable) + - onConfirmRequest: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - title: STABLE + - description: STABLE + - dismissButtonText: STABLE + - onDismissRequest: STABLE (function type) + - headerContent: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedErrorUi(errorType: com.ninecraft.booket.core.common.utils.ErrorType, onRetryClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - errorType: STABLE (marked @Stable or @Immutable) + - onRetryClick: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedFullScreen(modifier: androidx.compose.ui.Modifier, backgroundColor: androidx.compose.ui.graphics.Color, content: @[Composable] @[ExtensionFunctionType] androidx.compose.runtime.internal.ComposableFunction1): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - backgroundColor: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedLoadingIndicator(modifier: androidx.compose.ui.Modifier, delayMillis: kotlin.Long): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - delayMillis: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedLoadingIndicatorPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedNetworkErrorUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedServerErrorUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedTopAppBar(modifier: androidx.compose.ui.Modifier, isDark: kotlin.Boolean, title: kotlin.String, startIconRes: kotlin.Int?, startIconDescription: kotlin.String, startIconOnClick: kotlin.Function0, endIconRes: kotlin.Int?, endIconDescription: kotlin.String, endIconOnClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - isDark: STABLE (primitive type) + - title: STABLE (String is immutable) + - startIconRes: STABLE + - startIconDescription: STABLE (String is immutable) + - startIconOnClick: STABLE (function type) + - endIconRes: STABLE + - endIconDescription: STABLE (String is immutable) + - endIconOnClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedTopAppBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.onLoadMore(limitCount: kotlin.Int, loadOnBottom: kotlin.Boolean, action: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - limitCount: STABLE (primitive type) + - loadOnBottom: STABLE (primitive type) + - action: STABLE (function type) + diff --git a/feature/detail/stability/detail.stability b/feature/detail/stability/detail.stability new file mode 100644 index 00000000..eb8cb1a8 --- /dev/null +++ b/feature/detail/stability/detail.stability @@ -0,0 +1,380 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :detail:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.BookDetailContent(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier, lazyListState: androidx.compose.foundation.lazy.LazyListState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - lazyListState: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.detail.book.BookDetailPresenter.present(): com.ninecraft.booket.feature.detail.book.BookDetailUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.BookDetailPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.BookDetailUi(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.HandleBookDetailSideEffects(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.BookItem(bookDetail: com.ninecraft.booket.core.model.BookDetailModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - bookDetail: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.detail.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, bookStatuses: kotlinx.collections.immutable.ImmutableList, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, selectedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onItemSelected: kotlin.Function1, onBookUpdateButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - bookStatuses: STABLE (known stable type) + - currentBookStatus: STABLE + - selectedBookStatus: STABLE + - onItemSelected: STABLE (function type) + - onBookUpdateButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.ChoiceBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.CollectedSeedPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.CollectedSeeds(seedsStats: kotlinx.collections.immutable.ImmutableList, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - seedsStats: STABLE (known stable type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.DetailMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onDeleteBookClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onDeleteBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.DetailMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - iconResId: STABLE (primitive type) + - iconDescription: STABLE (String is immutable) + - label: STABLE (String is immutable) + - color: STABLE (marked @Stable or @Immutable) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.EmotionAnalysisResultText(emotions: kotlinx.collections.immutable.ImmutableList, brandColor: androidx.compose.ui.graphics.Color, secondaryColor: androidx.compose.ui.graphics.Color, emotionTextStyle: androidx.compose.ui.text.TextStyle, regularTextStyle: androidx.compose.ui.text.TextStyle): androidx.compose.ui.text.AnnotatedString? + skippable: true + restartable: true + params: + - emotions: STABLE (known stable type) + - brandColor: STABLE (marked @Stable or @Immutable) + - secondaryColor: STABLE (marked @Stable or @Immutable) + - emotionTextStyle: STABLE (marked @Stable or @Immutable) + - regularTextStyle: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.EmotionTextAllCasesPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeader(totalCount: kotlin.Int, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onReadingRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - totalCount: STABLE (primitive type) + - currentRecordSort: STABLE + - onReadingRecordClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.RecordItem(recordInfo: com.ninecraft.booket.core.model.ReadingRecordModel, onRecordMenuClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - recordInfo: STABLE (marked @Stable or @Immutable) + - onRecordMenuClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.RecordItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, recordSortItems: kotlinx.collections.immutable.ImmutableList, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onItemSelected: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - recordSortItems: STABLE (known stable type) + - currentRecordSort: STABLE + - onItemSelected: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.detail.book.component.RecordSortItem(item: com.ninecraft.booket.feature.detail.book.RecordSort, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.SeedItem(emotion: com.ninecraft.booket.core.model.EmotionModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotion: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.SeedItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.HandleRecordCardSideEffects(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, recordCardGraphicsLayer: androidx.compose.ui.graphics.layer.GraphicsLayer, eventSink: kotlin.Function1): kotlin.Unit + skippable: false + restartable: true + params: + - state: STABLE + - recordCardGraphicsLayer: UNSTABLE (has mutable properties or unstable members) + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.detail.card.RecordCardPresenter.present(): com.ninecraft.booket.feature.detail.card.RecordCardUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.RecordCardUi(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.card.RecordCardUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.component.RecordCard(quote: kotlin.String, bookTitle: kotlin.String, emotionTag: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - quote: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - emotionTag: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.card.component.RecordCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.HandleRecordDetailSideEffects(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +private fun com.ninecraft.booket.feature.detail.record.RecordDetailContent(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.detail.record.RecordDetailPresenter.present(): com.ninecraft.booket.feature.detail.record.RecordDetailUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.RecordDetailUi(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.ReviewDetailPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - author: STABLE (String is immutable) + - publisher: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.ChoiceBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.QuoteBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.QuoteItem(quote: kotlin.String, page: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - quote: STABLE (String is immutable) + - page: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onShareRecordClick: kotlin.Function0, onEditRecordClick: kotlin.Function0, onDeleteRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onShareRecordClick: STABLE (function type) + - onEditRecordClick: STABLE (function type) + - onDeleteRecordClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.RecordMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - iconResId: STABLE (primitive type) + - iconDescription: STABLE (String is immutable) + - label: STABLE (String is immutable) + - color: STABLE (marked @Stable or @Immutable) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.ReviewBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.ReviewItem(emotion: kotlin.String, createdAt: kotlin.String, review: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotion: STABLE (String is immutable) + - createdAt: STABLE (String is immutable) + - review: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + diff --git a/feature/edit/stability/edit.stability b/feature/edit/stability/edit.stability new file mode 100644 index 00000000..c3591cda --- /dev/null +++ b/feature/edit/stability/edit.stability @@ -0,0 +1,95 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :edit:stabilityDump + +@Composable +private fun com.ninecraft.booket.feature.edit.emotion.EmotionEditContent(state: com.ninecraft.booket.feature.edit.emotion.EmotionEditUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.edit.emotion.EmotionEditPresenter.present(): com.ninecraft.booket.feature.edit.emotion.EmotionEditUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.edit.emotion.EmotionEditUi(state: com.ninecraft.booket.feature.edit.emotion.EmotionEditUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.edit.emotion.EmotionEditUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.edit.emotion.EmotionItem(emotionTag: com.ninecraft.booket.core.designsystem.EmotionTag, onClick: kotlin.Function0, isSelected: kotlin.Boolean, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotionTag: STABLE + - onClick: STABLE (function type) + - isSelected: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.edit.record.HandleRecordEditSideEffects(state: com.ninecraft.booket.feature.edit.record.RecordEditUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +private fun com.ninecraft.booket.feature.edit.record.RecordEditContent(state: com.ninecraft.booket.feature.edit.record.RecordEditUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.edit.record.RecordEditPresenter.present(): com.ninecraft.booket.feature.edit.record.RecordEditUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.edit.record.RecordEditUi(state: com.ninecraft.booket.feature.edit.record.RecordEditUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.edit.record.RecordEditUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.edit.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - author: STABLE (String is immutable) + - publisher: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.edit.record.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/home/stability/home.stability b/feature/home/stability/home.stability new file mode 100644 index 00000000..c66b0bb9 --- /dev/null +++ b/feature/home/stability/home.stability @@ -0,0 +1,99 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :home:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.home.HandleHomeSideEffects(state: com.ninecraft.booket.feature.home.HomeUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +internal fun com.ninecraft.booket.feature.home.HomeContent(state: com.ninecraft.booket.feature.home.HomeUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.home.HomePresenter.present(): com.ninecraft.booket.feature.home.HomeUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.home.HomePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.home.HomeUi(state: com.ninecraft.booket.feature.home.HomeUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.home.component.BookCard(recentBookInfo: com.ninecraft.booket.core.model.RecentBookModel, onBookDetailClick: kotlin.Function0, onRecordButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - recentBookInfo: STABLE (marked @Stable or @Immutable) + - onBookDetailClick: STABLE (function type) + - onRecordButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.BookCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.home.component.EmptyBookCard(onBookRegisterClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onBookRegisterClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.EmptyBookCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.home.component.HomeBanner(onBookRegisterClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onBookRegisterClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.HomeBannerPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.home.component.HomeHeader(onSettingsClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onSettingsClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.HomeHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/library/stability/library.stability b/feature/library/stability/library.stability new file mode 100644 index 00000000..edab8a55 --- /dev/null +++ b/feature/library/stability/library.stability @@ -0,0 +1,111 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :library:stabilityDump + +@Composable +private fun com.ninecraft.booket.feature.library.EmptyResult(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.library.HandleLibrarySideEffects(state: com.ninecraft.booket.feature.library.LibraryUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.library.LibraryContent(state: com.ninecraft.booket.feature.library.LibraryUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.library.LibraryPresenter.present(): com.ninecraft.booket.feature.library.LibraryUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.library.LibraryPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.library.LibraryUi(state: com.ninecraft.booket.feature.library.LibraryUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.ChipPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.library.component.FilterChip(option: com.ninecraft.booket.feature.library.LibraryFilterOption, count: kotlin.Int, isSelected: kotlin.Boolean, onChipClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - option: STABLE + - count: STABLE (primitive type) + - isSelected: STABLE (primitive type) + - onChipClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.library.component.FilterChipGroup(filterList: kotlinx.collections.immutable.ImmutableList, selectedChipOption: com.ninecraft.booket.feature.library.LibraryFilterOption, onChipClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - filterList: STABLE (known stable type) + - selectedChipOption: STABLE + - onChipClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.FilterChipGroupPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.library.component.LibraryBookItem(book: com.ninecraft.booket.core.model.LibraryBookSummaryModel, onBookClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - book: STABLE (marked @Stable or @Immutable) + - onBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.LibraryBookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.library.component.LibraryHeader(onSearchClick: kotlin.Function0, onSettingClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onSearchClick: STABLE (function type) + - onSettingClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.LibraryHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/login/stability/login.stability b/feature/login/stability/login.stability new file mode 100644 index 00000000..0d5e7076 --- /dev/null +++ b/feature/login/stability/login.stability @@ -0,0 +1,79 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :login:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.login.HandleLoginSideEffects(state: com.ninecraft.booket.feature.login.LoginUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.login.LoginPresenter.present(): com.ninecraft.booket.feature.login.LoginUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.login.LoginPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.login.LoginUi(state: com.ninecraft.booket.feature.login.LoginUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.termsagreement.HandleTermsAgreementSideEffects(state: com.ninecraft.booket.feature.termsagreement.TermsAgreementUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.termsagreement.TermsAgreementPresenter.present(): com.ninecraft.booket.feature.termsagreement.TermsAgreementUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.termsagreement.TermsAgreementPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.termsagreement.TermsAgreementUi(state: com.ninecraft.booket.feature.termsagreement.TermsAgreementUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.termsagreement.component.TermItem(title: kotlin.String, onCheckClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier, checked: kotlin.Boolean, hasDetailAction: kotlin.Boolean, onDetailClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - title: STABLE (String is immutable) + - onCheckClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - checked: STABLE (primitive type) + - hasDetailAction: STABLE (primitive type) + - onDetailClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.termsagreement.component.TermItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + From db2e68df100abe1a64f659a711628307ce64dc83 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sun, 2 Nov 2025 08:46:12 +0900 Subject: [PATCH 082/116] [BOOK-381] chore: compose-stability-analyzer version update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI 실패 문제 해결 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 13c5db1b..b086333d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ androidx-compose-material3 = "1.4.0-alpha18" compose-stable-marker = "1.0.6" compose-effects = "0.1.1" compose-shadow = "2.0.4" -compose-stability-analyzer = "0.3.0" +compose-stability-analyzer = "0.4.0" ## Kotlin Symbol Processing ksp = "2.3.0" From 365c5f9995c42978fcc5cf30c781e1b248132890 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sun, 2 Nov 2025 09:14:45 +0900 Subject: [PATCH 083/116] =?UTF-8?q?[BOOK-381]=20chore:=20=EB=88=84?= =?UTF-8?q?=EB=9D=BD=EB=90=9C=20.stability=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .stability 파일은 ./gradlew stabilityDump 명령어로 생성할 수 있다. --- app/stability/app.stability | 21 ++ .../onboarding/stability/onboarding.stability | 58 +++++ feature/record/stability/record.stability | 213 ++++++++++++++++++ feature/screens/stability/screens.stability | 31 +++ feature/search/stability/search.stability | 198 ++++++++++++++++ feature/settings/stability/settings.stability | 168 ++++++++++++++ feature/splash/stability/splash.stability | 34 +++ feature/webview/stability/webview.stability | 35 +++ 8 files changed, 758 insertions(+) create mode 100644 app/stability/app.stability create mode 100644 feature/onboarding/stability/onboarding.stability create mode 100644 feature/record/stability/record.stability create mode 100644 feature/screens/stability/screens.stability create mode 100644 feature/search/stability/search.stability create mode 100644 feature/settings/stability/settings.stability create mode 100644 feature/splash/stability/splash.stability create mode 100644 feature/webview/stability/webview.stability diff --git a/app/stability/app.stability b/app/stability/app.stability new file mode 100644 index 00000000..dc1f99ee --- /dev/null +++ b/app/stability/app.stability @@ -0,0 +1,21 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :app:stabilityDump + +@Composable +public fun com.ninecraft.booket.di.CrossFadeNavDecorator.Decoration(targetState: com.slack.circuit.foundation.NavigatorDefaults.DefaultDecorator.DefaultAnimatedState, innerContent: @[Composable] androidx.compose.runtime.internal.ComposableFunction1): kotlin.Unit + skippable: false + restartable: true + params: + - targetState: RUNTIME (requires runtime check) + - innerContent: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.di.CrossFadeNavDecorator.updateTransition(args: kotlinx.collections.immutable.ImmutableList): androidx.compose.animation.core.Transition> + skippable: true + restartable: true + params: + - args: STABLE (known stable type) + diff --git a/feature/onboarding/stability/onboarding.stability b/feature/onboarding/stability/onboarding.stability new file mode 100644 index 00000000..f01b11fc --- /dev/null +++ b/feature/onboarding/stability/onboarding.stability @@ -0,0 +1,58 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :onboarding:stabilityDump + +@Composable +public fun com.ninecraft.booket.feature.onboarding.OnboardingPresenter.present(): com.ninecraft.booket.feature.onboarding.OnboardingUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.onboarding.OnboardingScreenPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.onboarding.OnboardingUi(state: com.ninecraft.booket.feature.onboarding.OnboardingUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.onboarding.component.OnboardingPage(imageRes: kotlin.Int, titleRes: kotlin.Int, highlightTextRes: kotlin.Int, descriptionRes: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageRes: STABLE (primitive type) + - titleRes: STABLE (primitive type) + - highlightTextRes: STABLE (primitive type) + - descriptionRes: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.onboarding.component.OnboardingPagePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.onboarding.component.PagerIndicator(pageCount: kotlin.Int, pagerState: androidx.compose.foundation.pager.PagerState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - pageCount: STABLE (primitive type) + - pagerState: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.onboarding.component.PagerIndicatorPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/record/stability/record.stability b/feature/record/stability/record.stability new file mode 100644 index 00000000..21fb836f --- /dev/null +++ b/feature/record/stability/record.stability @@ -0,0 +1,213 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :record:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.record.component.CustomTooltipBox(messageResId: kotlin.Int): kotlin.Unit + skippable: true + restartable: true + params: + - messageResId: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.record.component.CustomTooltipBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, impressionState: androidx.compose.foundation.text.input.TextFieldState, impressionGuideList: kotlinx.collections.immutable.ImmutableList, beforeSelectedImpressionGuide: kotlin.String, selectedImpressionGuide: kotlin.String, onGuideClick: kotlin.Function1, onCloseButtonClick: kotlin.Function0, onSelectionConfirmButtonClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - impressionState: STABLE (marked @Stable or @Immutable) + - impressionGuideList: STABLE (known stable type) + - beforeSelectedImpressionGuide: STABLE (String is immutable) + - selectedImpressionGuide: STABLE (String is immutable) + - onGuideClick: STABLE (function type) + - onCloseButtonClick: STABLE (function type) + - onSelectionConfirmButtonClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.record.component.ImpressionGuideBox(onClick: kotlin.Function0, impressionText: kotlin.String, modifier: androidx.compose.ui.Modifier, isSelected: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - impressionText: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - isSelected: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.record.component.ImpressionGuideBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.CameraPreview(state: com.ninecraft.booket.feature.record.ocr.OcrUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.CameraPreviewPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.ocr.HandleOcrSideEffects(state: com.ninecraft.booket.feature.record.ocr.OcrUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.record.ocr.OcrPresenter.present(): com.ninecraft.booket.feature.record.ocr.OcrUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.ocr.OcrUi(state: com.ninecraft.booket.feature.record.ocr.OcrUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.TextRecognitionResultPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.TextScanResult(state: com.ninecraft.booket.feature.record.ocr.OcrUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.record.ocr.component.CameraFrame(modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.component.CameraFramePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.record.ocr.component.SentenceBox(onClick: kotlin.Function0, sentence: kotlin.String, modifier: androidx.compose.ui.Modifier, isSelected: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - sentence: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - isSelected: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.component.SentenceBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.register.HandleRecordRegisterSideEffects(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.record.register.RecordRegisterPresenter.present(): com.ninecraft.booket.feature.record.register.RecordRegisterUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.register.RecordRegisterPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.register.RecordRegisterUi(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.step.EmotionItem(emotionTag: com.ninecraft.booket.core.designsystem.EmotionTag, onClick: kotlin.Function0, isSelected: kotlin.Boolean, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotionTag: STABLE + - onClick: STABLE (function type) + - isSelected: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.record.step.EmotionStep(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.record.step.ImpressionStep(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.step.ImpressionStepPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.step.QuoteStep(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.step.QuoteStepPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.step.RecordRegisterPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/screens/stability/screens.stability b/feature/screens/stability/screens.stability new file mode 100644 index 00000000..aaa1f6b6 --- /dev/null +++ b/feature/screens/stability/screens.stability @@ -0,0 +1,31 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :screens:stabilityDump + +@Composable +public fun com.ninecraft.booket.feature.screens.component.MainBottomBar(tabs: kotlinx.collections.immutable.ImmutableList, currentTab: com.ninecraft.booket.feature.screens.component.MainTab?, onTabSelected: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - tabs: STABLE (known stable type) + - currentTab: STABLE + - onTabSelected: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.screens.component.MainBottomBarItem(tab: com.ninecraft.booket.feature.screens.component.MainTab, selected: kotlin.Boolean, onClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - tab: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.screens.component.MainBottomBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/search/stability/search.stability b/feature/search/stability/search.stability new file mode 100644 index 00000000..b2786505 --- /dev/null +++ b/feature/search/stability/search.stability @@ -0,0 +1,198 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :search:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.search.book.BookSearchContent(state: com.ninecraft.booket.feature.search.book.BookSearchUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.search.book.BookSearchPresenter.present(): com.ninecraft.booket.feature.search.book.BookSearchUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.book.BookSearchPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.search.book.BookSearchUi(state: com.ninecraft.booket.feature.search.book.BookSearchUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.search.book.HandleBookSearchSideEffects(state: com.ninecraft.booket.feature.search.book.BookSearchUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookItem(book: com.ninecraft.booket.core.model.BookSummaryModel, onBookClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier, enabled: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - book: STABLE (marked @Stable or @Immutable) + - onBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - enabled: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookRegisterBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, bookStatuses: kotlinx.collections.immutable.ImmutableList, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, onItemSelected: kotlin.Function1, onBookRegisterButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - bookStatuses: STABLE (known stable type) + - currentBookStatus: STABLE + - onItemSelected: STABLE (function type) + - onBookRegisterButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessBeforeReadingBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, upsertedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onCancelButtonClick: kotlin.Function0, onOKButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - upsertedBookStatus: STABLE + - onCancelButtonClick: STABLE (function type) + - onOKButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessCompletedBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessReadingBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.search.common.component.RecentSearchTitle(modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.common.component.RecentSearchTitlePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.common.component.SearchItem(query: kotlin.String, onQueryClick: kotlin.Function1, onDeleteIconClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - query: STABLE (String is immutable) + - onQueryClick: STABLE (function type) + - onDeleteIconClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.common.component.SearchItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.search.library.HandlingLibrarySearchSideEffect(state: com.ninecraft.booket.feature.search.library.LibrarySearchUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +internal fun com.ninecraft.booket.feature.search.library.LibrarySearchContent(state: com.ninecraft.booket.feature.search.library.LibrarySearchUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.search.library.LibrarySearchPresenter.present(): com.ninecraft.booket.feature.search.library.LibrarySearchUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.library.LibrarySearchPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.search.library.LibrarySearchUi(state: com.ninecraft.booket.feature.search.library.LibrarySearchUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.search.library.component.LibraryBookItem(book: com.ninecraft.booket.core.model.LibraryBookSummaryModel, onBookClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - book: STABLE (marked @Stable or @Immutable) + - onBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.library.component.LibraryBookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/settings/stability/settings.stability b/feature/settings/stability/settings.stability new file mode 100644 index 00000000..bb954ee0 --- /dev/null +++ b/feature/settings/stability/settings.stability @@ -0,0 +1,168 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :settings:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.settings.HandleSettingsSideEffects(state: com.ninecraft.booket.feature.settings.SettingsUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.settings.SettingsPresenter.present(): com.ninecraft.booket.feature.settings.SettingsUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.settings.SettingsScreenPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.SettingsUi(state: com.ninecraft.booket.feature.settings.SettingsUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.settings.component.ReedSwitch(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.ReedSwitchPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.component.SettingItem(title: kotlin.String, modifier: androidx.compose.ui.Modifier, isClickable: kotlin.Boolean, onItemClick: kotlin.Function0, action: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, description: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - title: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - isClickable: STABLE (primitive type) + - onItemClick: STABLE (function type) + - action: STABLE (composable function type) + - description: STABLE (composable function type) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.SettingItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.component.ToggleItem(title: kotlin.String, description: kotlin.String, isChecked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - title: STABLE (String is immutable) + - description: STABLE (String is immutable) + - isChecked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.ToggleItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, isCheckBoxChecked: kotlin.Boolean, onCheckBoxCheckedChange: kotlin.Function0, onCancelButtonClick: kotlin.Function0, onWithdrawButtonClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - isCheckBoxChecked: STABLE (primitive type) + - onCheckBoxCheckedChange: STABLE (function type) + - onCancelButtonClick: STABLE (function type) + - onWithdrawButtonClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.notification.HandleNotificationSideEffects(state: com.ninecraft.booket.feature.settings.notification.NotificationUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.settings.notification.NotificationGuideItem(onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.settings.notification.NotificationPresenter.present(): com.ninecraft.booket.feature.settings.notification.NotificationUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.notification.NotificationUi(state: com.ninecraft.booket.feature.settings.notification.NotificationUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.settings.notification.NotificationUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.settings.osslicenses.OssLicenseItem(name: kotlin.String, license: kotlin.String, url: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - name: STABLE (String is immutable) + - license: STABLE (String is immutable) + - url: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.settings.osslicenses.OssLicenses(state: com.ninecraft.booket.feature.settings.osslicenses.OssLicensesUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.settings.osslicenses.OssLicensesPresenter.present(): com.ninecraft.booket.feature.settings.osslicenses.OssLicensesUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.settings.osslicenses.OssLicensesScreenPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/splash/stability/splash.stability b/feature/splash/stability/splash.stability new file mode 100644 index 00000000..f00ec242 --- /dev/null +++ b/feature/splash/stability/splash.stability @@ -0,0 +1,34 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :splash:stabilityDump + +@Composable +internal fun com.ninecraft.booket.splash.HandleSplashSideEffects(state: com.ninecraft.booket.splash.SplashUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.splash.SplashPresenter.present(): com.ninecraft.booket.splash.SplashUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.splash.SplashPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.splash.SplashUi(state: com.ninecraft.booket.splash.SplashUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + diff --git a/feature/webview/stability/webview.stability b/feature/webview/stability/webview.stability new file mode 100644 index 00000000..936e51ef --- /dev/null +++ b/feature/webview/stability/webview.stability @@ -0,0 +1,35 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :webview:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.webview.WebViewContent(state: com.ninecraft.booket.feature.webview.WebViewUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.webview.WebViewPresenter.present(): com.ninecraft.booket.feature.webview.WebViewUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.webview.WebViewUi(state: com.ninecraft.booket.feature.webview.WebViewUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.webview.WebViewUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + From 0ad113af488c432051138141c3298ad8db3899a1 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Sun, 2 Nov 2025 18:26:49 +0900 Subject: [PATCH 084/116] =?UTF-8?q?[BOOK-381]=20chore:=20CI=20=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 병렬 실행, OS 통일, JDK 버전 통일, 설정 일관 --- .github/workflows/android-ci.yml | 34 +++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index ff12fe67..f3e8862f 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -21,11 +21,11 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup JDK 17 + - name: Setup JDK 21 uses: actions/setup-java@v4 with: distribution: 'corretto' - java-version: 17 + java-version: 21 - name: Setup Android SDK uses: android-actions/setup-android@v2 @@ -53,11 +53,27 @@ jobs: stability_check: name: Compose Stability Check - runs-on: macos-latest - needs: ci-build + runs-on: ubuntu-latest + + if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }} + steps: - - name: Check out code - uses: actions/checkout@v5 + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'corretto' + java-version: 21 + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-home-cache-cleanup: true - name: Generate local.properties run: echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 -d > ./local.properties @@ -68,11 +84,5 @@ jobs: - name: Generate google-services.json run: echo '${{ secrets.GOOGLE_SERVICES }}' | base64 -d > ./app/google-services.json - - name: Set up JDK - uses: actions/setup-java@v5 - with: - distribution: 'zulu' - java-version: 21 - - name: Compose Stability Check run: ./gradlew stabilityCheck From 6e9c43ea17c926a907eaf313f6dd44514c80dcb4 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 3 Nov 2025 06:19:36 +0900 Subject: [PATCH 085/116] =?UTF-8?q?[BOOK-418]=20chore:=20QA=EC=9A=A9=20?= =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/qa-task.yml | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/qa-task.yml diff --git a/.github/ISSUE_TEMPLATE/qa-task.yml b/.github/ISSUE_TEMPLATE/qa-task.yml new file mode 100644 index 00000000..be5c5bda --- /dev/null +++ b/.github/ISSUE_TEMPLATE/qa-task.yml @@ -0,0 +1,42 @@ +name: QA Task +description: QA용 이슈 템플릿입니다.(기존 JIRA의 이슈와 연동됩니다) +title: "fix] " +labels: ["🐞 fix", "qa"] +body: + - type: input + id: parentKey + attributes: + label: '🎟️ 작업 (Ticket Number)' + description: '연동할 작업의 Ticket Number를 기입해주세요' + placeholder: 'BOOK-00' + validations: + required: true + + - type: input + id: description + attributes: + label: "🐞 버그 설명" + description: "어떤 버그인지 명확히 작성해주세요" + validations: + required: true + + - type: textarea + id: tasks + attributes: + label: "🔧 수정할 작업 목록" + description: "수정해야 할 항목들을 체크리스트로 작성해주세요" + value: | + - [ ] 버그 재현 + - [ ] 원인 분석 + - [ ] 수정 및 테스트 + validations: + required: true + + - type: input + id: links + attributes: + label: "🔗 참고 링크" + description: "관련 문서, 스크린샷, 로그 등이 있다면 첨부해주세요 (선택)" + placeholder: "https://..." + validations: + required: false From aa98379275ca6099d0a100648d735e99b113ba8b Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 3 Nov 2025 06:20:34 +0900 Subject: [PATCH 086/116] =?UTF-8?q?[BOOK-418]=20chore:=20QA=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20Jira=20=EC=97=B0=EB=8F=99=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=ED=94=8C=EB=A1=9C=EC=9A=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/create-jira-issue.yml | 302 +++++++++--------- .../workflows/link-existing-jira-issue.yml | 97 ++++++ 2 files changed, 249 insertions(+), 150 deletions(-) create mode 100644 .github/workflows/link-existing-jira-issue.yml diff --git a/.github/workflows/create-jira-issue.yml b/.github/workflows/create-jira-issue.yml index 5ee7675b..dd646175 100644 --- a/.github/workflows/create-jira-issue.yml +++ b/.github/workflows/create-jira-issue.yml @@ -1,154 +1,156 @@ name: Create Jira Issue on: - issues: - types: - - opened + issues: + types: + - opened jobs: - create-issue: - name: Create Jira issue - runs-on: ubuntu-latest - - steps: - - name: Determine Issue Type - id: type - run: | - if echo "${{ toJson(github.event.issue.labels) }}" | grep -q '✨ feat'; then - echo "type=feature" >> $GITHUB_OUTPUT - echo "template=feature-task.yml" >> $GITHUB_OUTPUT - elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '🐞 fix'; then - echo "type=fix" >> $GITHUB_OUTPUT - echo "template=fix-task.yml" >> $GITHUB_OUTPUT - elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '🔨 refactor'; then - echo "type=refactor" >> $GITHUB_OUTPUT - echo "template=refactor-task.yml" >> $GITHUB_OUTPUT - elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '📃 docs'; then - echo "type=docs" >> $GITHUB_OUTPUT - echo "template=docs-task.yml" >> $GITHUB_OUTPUT - elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '⚙️ chore'; then - echo "type=chore" >> $GITHUB_OUTPUT - echo "template=chore-task.yml" >> $GITHUB_OUTPUT - elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '✅ test'; then - echo "type=test" >> $GITHUB_OUTPUT - echo "template=test-task.yml" >> $GITHUB_OUTPUT - else - echo "type=feature" >> $GITHUB_OUTPUT - echo "template=feature-task.yml" >> $GITHUB_OUTPUT - fi - - - name: Clean Issue Title (for Jira Summary) - id: clean - run: | - raw="${{ github.event.issue.title }}" - # Remove prefix like 'feat]', 'fix]', 'chore]', etc. - clean_title=$(echo "$raw" | sed -E 's/^[a-z]+\]\s*//I') - echo "title=$clean_title" >> $GITHUB_OUTPUT - - - name: Jira Login - uses: atlassian/gajira-login@v3 - env: - JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} - JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} - JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} - - - name: Checkout main code - uses: actions/checkout@v4 - with: - ref: develop - - - name: Parse Issue - uses: stefanbuck/github-issue-parser@v3 - id: issue-parser - with: - template-path: .github/ISSUE_TEMPLATE/${{ steps.type.outputs.template }} - - - name: Convert markdown to Jira Syntax - uses: peter-evans/jira2md@v1 - id: md2jira - with: - input-text: | - ### Github Issue Link - - ${{ github.event.issue.html_url }} - - ### 기능 설명 - ${{ steps.issue-parser.outputs.issueparser_description }} - - ### 작업 목록 - ${{ steps.issue-parser.outputs.issueparser_tasks }} - - ### 참고 링크 - ${{ steps.issue-parser.outputs.issueparser_links }} - mode: md2jira - - - name: Create Issue - id: create - uses: atlassian/gajira-create@v3 - with: - project: BOOK - issuetype: 하위 작업 - summary: '${{ steps.clean.outputs.title }}' - description: '${{ steps.md2jira.outputs.output-text }}' - fields: | - { - "parent": { - "key": "${{ steps.issue-parser.outputs.issueparser_parentKey }}" - } - } - - - name: Checkout both branches - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Switch to develop - run: | - git fetch origin develop - git checkout develop - - - name: Generate Branch Name - id: branch - run: | - issue_number=${{ github.event.issue.number }} - issue_title="${{ github.event.issue.title }}" - slug=$(echo "$issue_title" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g' | sed 's/[^a-z0-9\-]//g') - ticket_key="${{ steps.create.outputs.issue }}" - branch_name="${ticket_key}-${{ steps.type.outputs.type }}/#${issue_number}" - echo "branch=${branch_name}" >> $GITHUB_OUTPUT - - - name: Create and push branch - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git checkout -b "${{ steps.branch.outputs.branch }}" - git push origin "${{ steps.branch.outputs.branch }}" - - - name: Update issue title - uses: actions-cool/issues-helper@v3 - with: - actions: 'update-issue' - token: ${{ secrets.PAT_TOKEN }} - title: '[${{ steps.create.outputs.issue }}/${{ github.event.issue.title }}' - - - name: Add comment with Jira issue link - uses: actions-cool/issues-helper@v3 - with: - actions: 'create-comment' - token: ${{ secrets.PAT_TOKEN }} - issue-number: ${{ github.event.issue.number }} - body: 'Jira Issue Created: [${{ steps.create.outputs.issue }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.create.outputs.issue }})' - - - name: Add comment with Branch Name - uses: actions-cool/issues-helper@v3 - with: - actions: 'create-comment' - token: ${{ secrets.PAT_TOKEN }} - issue-number: ${{ github.event.issue.number }} - body: '🔀 Branch Created: `${{ steps.branch.outputs.branch }}`' - - - name: Assign issue author - uses: actions-cool/issues-helper@v3 - with: - actions: 'add-assignees' - token: ${{ secrets.PAT_TOKEN }} - issue-number: ${{ github.event.issue.number }} - assignees: ${{ github.event.issue.user.login }} + create-issue: + # qa 라벨이 없을 때만 Jira issue 생성 + if: contains(github.event.issue.labels.*.name, 'qa') == false + name: Create Jira issue + runs-on: ubuntu-latest + + steps: + - name: Determine Issue Type + id: type + run: | + if echo "${{ toJson(github.event.issue.labels) }}" | grep -q '✨ feat'; then + echo "type=feature" >> $GITHUB_OUTPUT + echo "template=feature-task.yml" >> $GITHUB_OUTPUT + elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '🐞 fix'; then + echo "type=fix" >> $GITHUB_OUTPUT + echo "template=fix-task.yml" >> $GITHUB_OUTPUT + elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '🔨 refactor'; then + echo "type=refactor" >> $GITHUB_OUTPUT + echo "template=refactor-task.yml" >> $GITHUB_OUTPUT + elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '📃 docs'; then + echo "type=docs" >> $GITHUB_OUTPUT + echo "template=docs-task.yml" >> $GITHUB_OUTPUT + elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '⚙️ chore'; then + echo "type=chore" >> $GITHUB_OUTPUT + echo "template=chore-task.yml" >> $GITHUB_OUTPUT + elif echo "${{ toJson(github.event.issue.labels) }}" | grep -q '✅ test'; then + echo "type=test" >> $GITHUB_OUTPUT + echo "template=test-task.yml" >> $GITHUB_OUTPUT + else + echo "type=feature" >> $GITHUB_OUTPUT + echo "template=feature-task.yml" >> $GITHUB_OUTPUT + fi + + - name: Clean Issue Title (for Jira Summary) + id: clean + run: | + raw="${{ github.event.issue.title }}" + # Remove prefix like 'feat]', 'fix]', 'chore]', etc. + clean_title=$(echo "$raw" | sed -E 's/^[a-z]+\]\s*//I') + echo "title=$clean_title" >> $GITHUB_OUTPUT + + - name: Jira Login + uses: atlassian/gajira-login@v3 + env: + JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} + JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} + JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} + + - name: Checkout main code + uses: actions/checkout@v4 + with: + ref: develop + + - name: Parse Issue + uses: stefanbuck/github-issue-parser@v3 + id: issue-parser + with: + template-path: .github/ISSUE_TEMPLATE/${{ steps.type.outputs.template }} + + - name: Convert markdown to Jira Syntax + uses: peter-evans/jira2md@v1 + id: md2jira + with: + input-text: | + ### Github Issue Link + - ${{ github.event.issue.html_url }} + + ### 기능 설명 + ${{ steps.issue-parser.outputs.issueparser_description }} + + ### 작업 목록 + ${{ steps.issue-parser.outputs.issueparser_tasks }} + + ### 참고 링크 + ${{ steps.issue-parser.outputs.issueparser_links }} + mode: md2jira + + - name: Create Issue + id: create + uses: atlassian/gajira-create@v3 + with: + project: BOOK + issuetype: 하위 작업 + summary: '${{ steps.clean.outputs.title }}' + description: '${{ steps.md2jira.outputs.output-text }}' + fields: | + { + "parent": { + "key": "${{ steps.issue-parser.outputs.issueparser_parentKey }}" + } + } + + - name: Checkout both branches + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Switch to develop + run: | + git fetch origin develop + git checkout develop + + - name: Generate Branch Name + id: branch + run: | + issue_number=${{ github.event.issue.number }} + issue_title="${{ github.event.issue.title }}" + slug=$(echo "$issue_title" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g' | sed 's/[^a-z0-9\-]//g') + ticket_key="${{ steps.create.outputs.issue }}" + branch_name="${ticket_key}-${{ steps.type.outputs.type }}/#${issue_number}" + echo "branch=${branch_name}" >> $GITHUB_OUTPUT + + - name: Create and push branch + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b "${{ steps.branch.outputs.branch }}" + git push origin "${{ steps.branch.outputs.branch }}" + + - name: Update issue title + uses: actions-cool/issues-helper@v3 + with: + actions: 'update-issue' + token: ${{ secrets.PAT_TOKEN }} + title: '[${{ steps.create.outputs.issue }}/${{ github.event.issue.title }}' + + - name: Add comment with Jira issue link + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.PAT_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: 'Jira Issue Created: [${{ steps.create.outputs.issue }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.create.outputs.issue }})' + + - name: Add comment with Branch Name + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.PAT_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: '🔀 Branch Created: `${{ steps.branch.outputs.branch }}`' + + - name: Assign issue author + uses: actions-cool/issues-helper@v3 + with: + actions: 'add-assignees' + token: ${{ secrets.PAT_TOKEN }} + issue-number: ${{ github.event.issue.number }} + assignees: ${{ github.event.issue.user.login }} diff --git a/.github/workflows/link-existing-jira-issue.yml b/.github/workflows/link-existing-jira-issue.yml new file mode 100644 index 00000000..257024a9 --- /dev/null +++ b/.github/workflows/link-existing-jira-issue.yml @@ -0,0 +1,97 @@ +name: Link Existing Jira Issue +on: + issues: + types: + - opened + +jobs: + link-jira: + # qa 라벨이 있을 때만 Jira 연동 로직 실행 + if: contains(github.event.issue.labels.*.name, 'qa') + name: Link Existing Jira Issue + runs-on: ubuntu-latest + + steps: + - name: Extract Jira Key + id: extract + run: | + title="${{ github.event.issue.title }}" + body="${{ github.event.issue.body }}" + jira_key=$(echo "$title" "$body" | grep -oE '([A-Z]+-[0-9]+)' | head -1) + + if [ -z "$jira_key" ]; then + echo "❌ Jira key not found in issue." + echo "jira_key=" >> $GITHUB_OUTPUT + else + echo "✅ Found Jira key: $jira_key" + echo "jira_key=$jira_key" >> $GITHUB_OUTPUT + fi + + - name: Stop if no Jira key + if: steps.extract.outputs.jira_key == '' + run: | + echo "No Jira key found. Exiting workflow." + exit 0 + + - name: Jira Login + uses: atlassian/gajira-login@v3 + env: + JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} + JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} + JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} + + - name: Checkout both branches + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Switch to develop + run: | + git fetch origin develop + git checkout develop + + - name: Generate Branch Name + id: branch + run: | + issue_number=${{ github.event.issue.number }} + jira_key="${{ steps.extract.outputs.jira_key }}" + branch_name="${jira_key}-fix/#${issue_number}" + echo "branch=${branch_name}" >> $GITHUB_OUTPUT + + - name: Create and push branch + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b "${{ steps.branch.outputs.branch }}" + git push origin "${{ steps.branch.outputs.branch }}" + + - name: Update GitHub issue title + uses: actions-cool/issues-helper@v3 + with: + actions: 'update-issue' + token: ${{ secrets.PAT_TOKEN }} + title: '[${{ steps.extract.outputs.jira_key }}] ${{ github.event.issue.title }}' + - name: Add Jira link comment to GitHub issue + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.PAT_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: | + 🧩 Linked to Jira Issue: [${{ steps.extract.outputs.jira_key }}](${{ secrets.JIRA_BASE_URL }}/browse/${{ steps.extract.outputs.jira_key }}) + + - name: Add comment with Branch Name + uses: actions-cool/issues-helper@v3 + with: + actions: 'create-comment' + token: ${{ secrets.PAT_TOKEN }} + issue-number: ${{ github.event.issue.number }} + body: '🔀 Branch Created: `${{ steps.branch.outputs.branch }}`' + + - name: Assign issue author + uses: actions-cool/issues-helper@v3 + with: + actions: 'add-assignees' + token: ${{ secrets.PAT_TOKEN }} + issue-number: ${{ github.event.issue.number }} + assignees: ${{ github.event.issue.user.login }} From 8f8fcbc9d04ffd1474a42667539c266389d8de08 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 3 Nov 2025 06:54:19 +0900 Subject: [PATCH 087/116] =?UTF-8?q?[BOOK-418]=20chore:=20QA=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=85=9C=ED=94=8C=EB=A6=BF=EC=97=90=EC=84=9C=20fix?= =?UTF-8?q?=20=EB=9D=BC=EB=B2=A8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/qa-task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/qa-task.yml b/.github/ISSUE_TEMPLATE/qa-task.yml index be5c5bda..38c04b7f 100644 --- a/.github/ISSUE_TEMPLATE/qa-task.yml +++ b/.github/ISSUE_TEMPLATE/qa-task.yml @@ -1,7 +1,7 @@ name: QA Task description: QA용 이슈 템플릿입니다.(기존 JIRA의 이슈와 연동됩니다) title: "fix] " -labels: ["🐞 fix", "qa"] +labels: ["qa"] body: - type: input id: parentKey From a41b748225f5c815ef57f82c3312a6da2978a670 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 3 Nov 2025 07:17:47 +0900 Subject: [PATCH 088/116] =?UTF-8?q?[BOOK-418]=20chore:=20QA=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=85=9C=ED=94=8C=EB=A6=BF=EC=97=90=EC=84=9C=20fix?= =?UTF-8?q?=20=EB=9D=BC=EB=B2=A8=20=EC=A0=9C=EA=B1=B0=20=EB=A1=A4=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/qa-task.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/qa-task.yml b/.github/ISSUE_TEMPLATE/qa-task.yml index 38c04b7f..be5c5bda 100644 --- a/.github/ISSUE_TEMPLATE/qa-task.yml +++ b/.github/ISSUE_TEMPLATE/qa-task.yml @@ -1,7 +1,7 @@ name: QA Task description: QA용 이슈 템플릿입니다.(기존 JIRA의 이슈와 연동됩니다) title: "fix] " -labels: ["qa"] +labels: ["🐞 fix", "qa"] body: - type: input id: parentKey From 01625adc821d560c4746db2de96fbe10c6ff7258 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 3 Nov 2025 07:45:45 +0900 Subject: [PATCH 089/116] =?UTF-8?q?[BOOK-418]=20chore:=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=EC=A0=9C=EB=AA=A9=20=EA=B8=B0=EC=A1=B4=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=EA=B3=BC=20=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/link-existing-jira-issue.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/link-existing-jira-issue.yml b/.github/workflows/link-existing-jira-issue.yml index 257024a9..54a3b847 100644 --- a/.github/workflows/link-existing-jira-issue.yml +++ b/.github/workflows/link-existing-jira-issue.yml @@ -70,7 +70,8 @@ jobs: with: actions: 'update-issue' token: ${{ secrets.PAT_TOKEN }} - title: '[${{ steps.extract.outputs.jira_key }}] ${{ github.event.issue.title }}' + title: '[${{ steps.extract.outputs.jira_key }}/${{ github.event.issue.title }}' + - name: Add Jira link comment to GitHub issue uses: actions-cool/issues-helper@v3 with: From 91a4fa72908909eeb8561057c320cb5c17ddb851 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Mon, 3 Nov 2025 08:44:01 +0900 Subject: [PATCH 090/116] =?UTF-8?q?[BOOK-415]=20fix:=20=EA=B0=90=EC=83=81?= =?UTF-8?q?=ED=8F=89=20=EA=B8=B0=EB=A1=9D=20=ED=99=94=EB=A9=B4=20subtitle?= =?UTF-8?q?=20=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/record/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/record/src/main/res/values/strings.xml b/feature/record/src/main/res/values/strings.xml index 29c6c553..c24a72f7 100644 --- a/feature/record/src/main/res/values/strings.xml +++ b/feature/record/src/main/res/values/strings.xml @@ -27,7 +27,7 @@ 문장에 대해 어떤 감정이 드셨나요? 대표 감정을 한 가지 선택해주세요 문장에 대한 감상을 남겨주세요 - 감상평 가이드로 쉽게 남길 수 있어요 + 떠오르는 생각이 있다면 자유롭게 작성해 주세요. 내용을 입력해주세요. 감상평 가이드 아래 문장 중 하나를 선택해 이어서 감상을 적어보세요 From 4ec05ef5dd388d3fe43308ba239953e60c039959 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 3 Nov 2025 10:58:14 +0900 Subject: [PATCH 091/116] =?UTF-8?q?[BOOK-419]=20chore:=20ComposeStabilityA?= =?UTF-8?q?nalyzerInitializer=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit release 환경에서 Recomposition 추적 로그가 출력되지 않도록 설정 --- app/src/main/AndroidManifest.xml | 4 ++++ .../ComposeStabilityAnalyzerInitializer.kt | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 app/src/main/kotlin/com/ninecraft/booket/initializer/ComposeStabilityAnalyzerInitializer.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f9074ce9..4cc12899 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,10 @@ android:name="com.ninecraft.booket.initializer.NotificationChannelInitializer" android:value="androidx.startup" /> + + { + override fun create(context: Context) { + ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG) + } + + override fun dependencies(): List>> { + return emptyList() + } +} From cb64c1fa3a42a837a67a75f9557ae9aed7d8b76f Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 3 Nov 2025 14:43:02 +0900 Subject: [PATCH 092/116] =?UTF-8?q?[BOOK-417]=20fix:=20=EA=B0=90=EC=A0=95?= =?UTF-8?q?=EB=B3=84=20=EB=B0=B0=EA=B2=BD/=ED=85=8D=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=83=89=EC=83=81=20=EB=A7=A4=EC=B9=AD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 슬픔과 깨달음이 반대로 되어있었음... --- .../ninecraft/booket/core/common/extensions/Emotion.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt index 653a2bf8..5f3fa422 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt @@ -7,8 +7,8 @@ fun Emotion.toTextColor(): Color { return when (this) { Emotion.WARM -> Color(0xFFE3931B) Emotion.JOY -> Color(0xFFEE6B33) - Emotion.SAD -> Color(0xFF9A55E4) - Emotion.INSIGHT -> Color(0xFF2872E9) + Emotion.SAD -> Color(0xFF2872E9) + Emotion.INSIGHT -> Color(0xFF9A55E4) } } @@ -16,7 +16,7 @@ fun Emotion.toBackgroundColor(): Color { return when (this) { Emotion.WARM -> Color(0xFFFFF5D3) Emotion.JOY -> Color(0xFFFFEBE3) - Emotion.SAD -> Color(0xFFF3E8FF) - Emotion.INSIGHT -> Color(0xFFE1ECFF) + Emotion.SAD -> Color(0xFFE1ECFF) + Emotion.INSIGHT -> Color(0xFFF3E8FF) } } From fb6e59833a5419e55561cdead48e8d41d22cc25e Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 3 Nov 2025 15:03:35 +0900 Subject: [PATCH 093/116] =?UTF-8?q?[BOOK-417]=20chore:=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20indent=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/core/common/extensions/Emotion.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt index 5f3fa422..e9f5069e 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt @@ -8,7 +8,7 @@ fun Emotion.toTextColor(): Color { Emotion.WARM -> Color(0xFFE3931B) Emotion.JOY -> Color(0xFFEE6B33) Emotion.SAD -> Color(0xFF2872E9) - Emotion.INSIGHT -> Color(0xFF9A55E4) + Emotion.INSIGHT -> Color(0xFF9A55E4) } } From 66b52abef3a4040584777fd5de043549f223a5f4 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 3 Nov 2025 15:41:47 +0900 Subject: [PATCH 094/116] =?UTF-8?q?fix:=20=EB=8F=85=EC=84=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=20=ED=99=94=EB=A9=B4=20=EA=B0=90=EC=83=81=ED=8F=89=20?= =?UTF-8?q?=EB=B9=88=20=EA=B0=92=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=20=ED=95=98?= =?UTF-8?q?=EB=8B=A8=20=ED=8C=A8=EB=94=A9=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ""로 들어가도 Text의 높이를 그대로 차지함, 감상푱아 빈 값일 경우 Text Composable 사용 X --- .../feature/detail/record/RecordDetailUi.kt | 27 ++++++++++++++++++ .../detail/record/component/ReviewItem.kt | 28 ++++++++++++++----- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt index 93f671da..8bedd731 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt @@ -206,3 +206,30 @@ private fun ReviewDetailPreview() { ) } } + +@ComponentPreview +@Composable +private fun ReviewDetailEmptyPreview() { + ReedTheme { + RecordDetailUi( + state = RecordDetailUiState( + uiState = UiState.Success, + recordDetailInfo = RecordDetailModel( + id = "", + userBookId = "", + pageNumber = 90, + quote = "소설가들은 늘 소재를 찾아 떠도는 존재 같지만, 실은 그 반대인 경우가 더 잦다.", + review = "", + emotionTags = listOf("따뜻함"), + createdAt = "2023.10.10", + updatedAt = "", + bookTitle = "여름은 오래 그곳에 남아", + bookPublisher = "비채 비채 비채 비채", + bookCoverImageUrl = "", + author = "미쓰이에 마사시, 미쓰이에 마사시, 미쓰이에 마사시, 미쓰이에 마사시", + ), + eventSink = {}, + ), + ) + } +} diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/ReviewItem.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/ReviewItem.kt index 8c2fa6e5..6a1c14db 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/ReviewItem.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/ReviewItem.kt @@ -39,7 +39,7 @@ internal fun ReviewItem( ) .padding( horizontal = ReedTheme.spacing.spacing4, - vertical = ReedTheme.spacing.spacing3, + vertical = ReedTheme.spacing.spacing4, ), ) { Column { @@ -68,12 +68,14 @@ internal fun ReviewItem( style = ReedTheme.typography.label2Regular, ) } - Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3)) - Text( - text = review, - color = ReedTheme.colors.contentSecondary, - style = ReedTheme.typography.label1Medium, - ) + if (review.isNotBlank()) { + Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing3)) + Text( + text = review, + color = ReedTheme.colors.contentSecondary, + style = ReedTheme.typography.label1Medium, + ) + } } } } @@ -89,3 +91,15 @@ private fun ReviewBoxPreview() { ) } } + +@ComponentPreview +@Composable +private fun ReviewBoxEmptyPreview() { + ReedTheme { + ReviewItem( + emotion = "따뜻함", + review = "", + createdAt = "2025.06.25", + ) + } +} From aeea6fa248f48c65ce254834f993907845e2ba9e Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 3 Nov 2025 16:05:57 +0900 Subject: [PATCH 095/116] =?UTF-8?q?[BOOK-416]=20chore:=20detail.stability?= =?UTF-8?q?=20=EC=B5=9C=EC=8B=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit preview Composable 추가는 설정에서 제외하고 싶은데... --- feature/detail/stability/detail.stability | 338 +--------------------- 1 file changed, 7 insertions(+), 331 deletions(-) diff --git a/feature/detail/stability/detail.stability b/feature/detail/stability/detail.stability index eb8cb1a8..d9d8bbc5 100644 --- a/feature/detail/stability/detail.stability +++ b/feature/detail/stability/detail.stability @@ -4,363 +4,39 @@ // Do not edit this file directly. To update it, run: // ./gradlew :detail:stabilityDump -@Composable -internal fun com.ninecraft.booket.feature.detail.book.BookDetailContent(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier, lazyListState: androidx.compose.foundation.lazy.LazyListState): kotlin.Unit - skippable: true - restartable: true - params: - - state: STABLE - - innerPadding: STABLE (marked @Stable or @Immutable) - - modifier: STABLE (marked @Stable or @Immutable) - - lazyListState: STABLE (marked @Stable or @Immutable) - -@Composable -public fun com.ninecraft.booket.feature.detail.book.BookDetailPresenter.present(): com.ninecraft.booket.feature.detail.book.BookDetailUiState - skippable: true - restartable: true - params: - -@Composable -private fun com.ninecraft.booket.feature.detail.book.BookDetailPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.BookDetailUi(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - state: STABLE - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.HandleBookDetailSideEffects(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, eventSink: kotlin.Function1): kotlin.Unit - skippable: true - restartable: true - params: - - state: STABLE - - eventSink: STABLE (function type) - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.BookItem(bookDetail: com.ninecraft.booket.core.model.BookDetailModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - bookDetail: STABLE (marked @Stable or @Immutable) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.BookItemPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -public fun com.ninecraft.booket.feature.detail.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - item: STABLE - - selected: STABLE (primitive type) - - onClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, bookStatuses: kotlinx.collections.immutable.ImmutableList, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, selectedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onItemSelected: kotlin.Function1, onBookUpdateButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - onDismissRequest: STABLE (function type) - - sheetState: STABLE (marked @Stable or @Immutable) - - onCloseButtonClick: STABLE (function type) - - bookStatuses: STABLE (known stable type) - - currentBookStatus: STABLE - - selectedBookStatus: STABLE - - onItemSelected: STABLE (function type) - - onBookUpdateButtonClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheetPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.ChoiceBottomSheetPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.CollectedSeedPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.CollectedSeeds(seedsStats: kotlinx.collections.immutable.ImmutableList, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - seedsStats: STABLE (known stable type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.DetailMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onDeleteBookClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - onDismissRequest: STABLE (function type) - - sheetState: STABLE (marked @Stable or @Immutable) - - onDeleteBookClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.DetailMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - iconResId: STABLE (primitive type) - - iconDescription: STABLE (String is immutable) - - label: STABLE (String is immutable) - - color: STABLE (marked @Stable or @Immutable) - - onClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.EmotionAnalysisResultText(emotions: kotlinx.collections.immutable.ImmutableList, brandColor: androidx.compose.ui.graphics.Color, secondaryColor: androidx.compose.ui.graphics.Color, emotionTextStyle: androidx.compose.ui.text.TextStyle, regularTextStyle: androidx.compose.ui.text.TextStyle): androidx.compose.ui.text.AnnotatedString? - skippable: true - restartable: true - params: - - emotions: STABLE (known stable type) - - brandColor: STABLE (marked @Stable or @Immutable) - - secondaryColor: STABLE (marked @Stable or @Immutable) - - emotionTextStyle: STABLE (marked @Stable or @Immutable) - - regularTextStyle: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.EmotionTextAllCasesPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeader(totalCount: kotlin.Int, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onReadingRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - totalCount: STABLE (primitive type) - - currentRecordSort: STABLE - - onReadingRecordClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeaderPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.RecordItem(recordInfo: com.ninecraft.booket.core.model.ReadingRecordModel, onRecordMenuClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - recordInfo: STABLE (marked @Stable or @Immutable) - - onRecordMenuClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.RecordItemPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, recordSortItems: kotlinx.collections.immutable.ImmutableList, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onItemSelected: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - onDismissRequest: STABLE (function type) - - sheetState: STABLE (marked @Stable or @Immutable) - - onCloseButtonClick: STABLE (function type) - - recordSortItems: STABLE (known stable type) - - currentRecordSort: STABLE - - onItemSelected: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheetPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -public fun com.ninecraft.booket.feature.detail.book.component.RecordSortItem(item: com.ninecraft.booket.feature.detail.book.RecordSort, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - item: STABLE - - selected: STABLE (primitive type) - - onClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -internal fun com.ninecraft.booket.feature.detail.book.component.SeedItem(emotion: com.ninecraft.booket.core.model.EmotionModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - emotion: STABLE (marked @Stable or @Immutable) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.book.component.SeedItemPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.card.HandleRecordCardSideEffects(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, recordCardGraphicsLayer: androidx.compose.ui.graphics.layer.GraphicsLayer, eventSink: kotlin.Function1): kotlin.Unit - skippable: false - restartable: true - params: - - state: STABLE - - recordCardGraphicsLayer: UNSTABLE (has mutable properties or unstable members) - - eventSink: STABLE (function type) - -@Composable -public fun com.ninecraft.booket.feature.detail.card.RecordCardPresenter.present(): com.ninecraft.booket.feature.detail.card.RecordCardUiState - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.card.RecordCardUi(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - state: STABLE - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.card.RecordCardUiPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.card.component.RecordCard(quote: kotlin.String, bookTitle: kotlin.String, emotionTag: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - quote: STABLE (String is immutable) - - bookTitle: STABLE (String is immutable) - - emotionTag: STABLE (String is immutable) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.card.component.RecordCardPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.record.HandleRecordDetailSideEffects(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState): kotlin.Unit - skippable: true - restartable: true - params: - - state: STABLE - @Composable private fun com.ninecraft.booket.feature.detail.record.RecordDetailContent(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true + skippable: false restartable: true params: - - state: STABLE + - state: RUNTIME (requires runtime check) - modifier: STABLE (marked @Stable or @Immutable) -@Composable -public fun com.ninecraft.booket.feature.detail.record.RecordDetailPresenter.present(): com.ninecraft.booket.feature.detail.record.RecordDetailUiState - skippable: true - restartable: true - params: - @Composable internal fun com.ninecraft.booket.feature.detail.record.RecordDetailUi(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - state: STABLE - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -private fun com.ninecraft.booket.feature.detail.record.ReviewDetailPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true + skippable: false restartable: true params: - - imageUrl: STABLE (String is immutable) - - bookTitle: STABLE (String is immutable) - - author: STABLE (String is immutable) - - publisher: STABLE (String is immutable) + - state: RUNTIME (requires runtime check) - modifier: STABLE (marked @Stable or @Immutable) @Composable -private fun com.ninecraft.booket.feature.detail.record.component.BookItemPreview(): kotlin.Unit +private fun com.ninecraft.booket.feature.detail.record.ReviewDetailEmptyPreview(): kotlin.Unit skippable: true restartable: true params: @Composable -private fun com.ninecraft.booket.feature.detail.record.component.ChoiceBottomSheetPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -private fun com.ninecraft.booket.feature.detail.record.component.QuoteBoxPreview(): kotlin.Unit - skippable: true - restartable: true - params: - -@Composable -internal fun com.ninecraft.booket.feature.detail.record.component.QuoteItem(quote: kotlin.String, page: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: true - restartable: true - params: - - quote: STABLE (String is immutable) - - page: STABLE (primitive type) - - modifier: STABLE (marked @Stable or @Immutable) - -@Composable -internal fun com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onShareRecordClick: kotlin.Function0, onEditRecordClick: kotlin.Function0, onDeleteRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit +private fun com.ninecraft.booket.feature.detail.record.ReviewDetailPreview(): kotlin.Unit skippable: true restartable: true params: - - onDismissRequest: STABLE (function type) - - sheetState: STABLE (marked @Stable or @Immutable) - - onShareRecordClick: STABLE (function type) - - onEditRecordClick: STABLE (function type) - - onDeleteRecordClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) @Composable -private fun com.ninecraft.booket.feature.detail.record.component.RecordMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit +private fun com.ninecraft.booket.feature.detail.record.component.ReviewBoxEmptyPreview(): kotlin.Unit skippable: true restartable: true params: - - iconResId: STABLE (primitive type) - - iconDescription: STABLE (String is immutable) - - label: STABLE (String is immutable) - - color: STABLE (marked @Stable or @Immutable) - - onClick: STABLE (function type) - - modifier: STABLE (marked @Stable or @Immutable) @Composable private fun com.ninecraft.booket.feature.detail.record.component.ReviewBoxPreview(): kotlin.Unit From 0a43a7d4f08d713533e9d46b51f4d7e3adc03a2f Mon Sep 17 00:00:00 2001 From: easyhooon Date: Mon, 3 Nov 2025 16:24:55 +0900 Subject: [PATCH 096/116] [BOOK-416] chore: upgrade compose-stability-analyzer version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .stability 파일 최신화 --- .../stability/designsystem.stability | 8 +- feature/detail/stability/detail.stability | 344 +++++++++++++++++- gradle/libs.versions.toml | 2 +- 3 files changed, 345 insertions(+), 9 deletions(-) diff --git a/core/designsystem/stability/designsystem.stability b/core/designsystem/stability/designsystem.stability index e3399e9a..319a7836 100644 --- a/core/designsystem/stability/designsystem.stability +++ b/core/designsystem/stability/designsystem.stability @@ -231,7 +231,7 @@ private fun com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCh @Composable public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecordTextField(recordState: androidx.compose.foundation.text.input.TextFieldState, recordHintRes: kotlin.Int, modifier: androidx.compose.ui.Modifier, inputTransformation: androidx.compose.foundation.text.input.InputTransformation?, keyboardOptions: androidx.compose.foundation.text.KeyboardOptions, lineLimits: androidx.compose.foundation.text.input.TextFieldLineLimits, isError: kotlin.Boolean, errorMessage: kotlin.String, onClear: kotlin.Function0?, onNext: kotlin.Function0, backgroundColor: androidx.compose.ui.graphics.Color, textColor: androidx.compose.ui.graphics.Color, cornerShape: androidx.compose.foundation.shape.RoundedCornerShape, borderStroke: androidx.compose.foundation.BorderStroke): kotlin.Unit - skippable: false + skippable: true restartable: true params: - recordState: STABLE (marked @Stable or @Immutable) @@ -246,7 +246,7 @@ public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecord - onNext: STABLE (function type) - backgroundColor: STABLE (marked @Stable or @Immutable) - textColor: STABLE (marked @Stable or @Immutable) - - cornerShape: RUNTIME (requires runtime check) + - cornerShape: STABLE (known stable type) - borderStroke: STABLE (marked @Stable or @Immutable) @Composable @@ -257,7 +257,7 @@ private fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecor @Composable public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextField(queryState: androidx.compose.foundation.text.input.TextFieldState, queryHintRes: kotlin.Int, onSearch: kotlin.Function1, onClear: kotlin.Function0, modifier: androidx.compose.ui.Modifier, backgroundColor: androidx.compose.ui.graphics.Color, textColor: androidx.compose.ui.graphics.Color, cornerShape: androidx.compose.foundation.shape.RoundedCornerShape, borderStroke: androidx.compose.foundation.BorderStroke?, searchIconTint: androidx.compose.ui.graphics.Color): kotlin.Unit - skippable: false + skippable: true restartable: true params: - queryState: STABLE (marked @Stable or @Immutable) @@ -267,7 +267,7 @@ public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextFi - modifier: STABLE (marked @Stable or @Immutable) - backgroundColor: STABLE (marked @Stable or @Immutable) - textColor: STABLE (marked @Stable or @Immutable) - - cornerShape: RUNTIME (requires runtime check) + - cornerShape: STABLE (known stable type) - borderStroke: STABLE (marked @Stable or @Immutable) - searchIconTint: STABLE (marked @Stable or @Immutable) diff --git a/feature/detail/stability/detail.stability b/feature/detail/stability/detail.stability index d9d8bbc5..7b658259 100644 --- a/feature/detail/stability/detail.stability +++ b/feature/detail/stability/detail.stability @@ -5,19 +5,293 @@ // ./gradlew :detail:stabilityDump @Composable -private fun com.ninecraft.booket.feature.detail.record.RecordDetailContent(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit +internal fun com.ninecraft.booket.feature.detail.book.BookDetailContent(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier, lazyListState: androidx.compose.foundation.lazy.LazyListState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - lazyListState: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.detail.book.BookDetailPresenter.present(): com.ninecraft.booket.feature.detail.book.BookDetailUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.BookDetailPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.BookDetailUi(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.HandleBookDetailSideEffects(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.BookItem(bookDetail: com.ninecraft.booket.core.model.BookDetailModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - bookDetail: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.detail.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, bookStatuses: kotlinx.collections.immutable.ImmutableList, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, selectedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onItemSelected: kotlin.Function1, onBookUpdateButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - bookStatuses: STABLE (known stable type) + - currentBookStatus: STABLE + - selectedBookStatus: STABLE + - onItemSelected: STABLE (function type) + - onBookUpdateButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.ChoiceBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.CollectedSeedPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.CollectedSeeds(seedsStats: kotlinx.collections.immutable.ImmutableList, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - seedsStats: STABLE (known stable type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.DetailMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onDeleteBookClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onDeleteBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.DetailMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - iconResId: STABLE (primitive type) + - iconDescription: STABLE (String is immutable) + - label: STABLE (String is immutable) + - color: STABLE (marked @Stable or @Immutable) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.EmotionAnalysisResultText(emotions: kotlinx.collections.immutable.ImmutableList, brandColor: androidx.compose.ui.graphics.Color, secondaryColor: androidx.compose.ui.graphics.Color, emotionTextStyle: androidx.compose.ui.text.TextStyle, regularTextStyle: androidx.compose.ui.text.TextStyle): androidx.compose.ui.text.AnnotatedString? + skippable: true + restartable: true + params: + - emotions: STABLE (known stable type) + - brandColor: STABLE (marked @Stable or @Immutable) + - secondaryColor: STABLE (marked @Stable or @Immutable) + - emotionTextStyle: STABLE (marked @Stable or @Immutable) + - regularTextStyle: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.EmotionTextAllCasesPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeader(totalCount: kotlin.Int, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onReadingRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - totalCount: STABLE (primitive type) + - currentRecordSort: STABLE + - onReadingRecordClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.RecordItem(recordInfo: com.ninecraft.booket.core.model.ReadingRecordModel, onRecordMenuClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - recordInfo: STABLE (marked @Stable or @Immutable) + - onRecordMenuClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.RecordItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, recordSortItems: kotlinx.collections.immutable.ImmutableList, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onItemSelected: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - recordSortItems: STABLE (known stable type) + - currentRecordSort: STABLE + - onItemSelected: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.detail.book.component.RecordSortItem(item: com.ninecraft.booket.feature.detail.book.RecordSort, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.SeedItem(emotion: com.ninecraft.booket.core.model.EmotionModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotion: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.SeedItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.HandleRecordCardSideEffects(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, recordCardGraphicsLayer: androidx.compose.ui.graphics.layer.GraphicsLayer, eventSink: kotlin.Function1): kotlin.Unit skippable: false restartable: true params: - - state: RUNTIME (requires runtime check) + - state: STABLE + - recordCardGraphicsLayer: UNSTABLE (has mutable properties or unstable members) + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.detail.card.RecordCardPresenter.present(): com.ninecraft.booket.feature.detail.card.RecordCardUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.RecordCardUi(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.card.RecordCardUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.component.RecordCard(quote: kotlin.String, bookTitle: kotlin.String, emotionTag: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - quote: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - emotionTag: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.card.component.RecordCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.HandleRecordDetailSideEffects(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +private fun com.ninecraft.booket.feature.detail.record.RecordDetailContent(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE - modifier: STABLE (marked @Stable or @Immutable) +@Composable +public fun com.ninecraft.booket.feature.detail.record.RecordDetailPresenter.present(): com.ninecraft.booket.feature.detail.record.RecordDetailUiState + skippable: true + restartable: true + params: + @Composable internal fun com.ninecraft.booket.feature.detail.record.RecordDetailUi(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit - skippable: false + skippable: true restartable: true params: - - state: RUNTIME (requires runtime check) + - state: STABLE - modifier: STABLE (marked @Stable or @Immutable) @Composable @@ -32,6 +306,68 @@ private fun com.ninecraft.booket.feature.detail.record.ReviewDetailPreview(): ko restartable: true params: +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - author: STABLE (String is immutable) + - publisher: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.ChoiceBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.QuoteBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.QuoteItem(quote: kotlin.String, page: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - quote: STABLE (String is immutable) + - page: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onShareRecordClick: kotlin.Function0, onEditRecordClick: kotlin.Function0, onDeleteRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onShareRecordClick: STABLE (function type) + - onEditRecordClick: STABLE (function type) + - onDeleteRecordClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.RecordMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - iconResId: STABLE (primitive type) + - iconDescription: STABLE (String is immutable) + - label: STABLE (String is immutable) + - color: STABLE (marked @Stable or @Immutable) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + @Composable private fun com.ninecraft.booket.feature.detail.record.component.ReviewBoxEmptyPreview(): kotlin.Unit skippable: true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b086333d..22d562d0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ androidx-compose-material3 = "1.4.0-alpha18" compose-stable-marker = "1.0.6" compose-effects = "0.1.1" compose-shadow = "2.0.4" -compose-stability-analyzer = "0.4.0" +compose-stability-analyzer = "0.4.1" ## Kotlin Symbol Processing ksp = "2.3.0" From 3d04ed5b050a90e6988a5ca846b71ba96ebe4e52 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 4 Nov 2025 14:57:41 +0900 Subject: [PATCH 097/116] =?UTF-8?q?[BOOK-417]=20refactor:=20Emotion.kt=20d?= =?UTF-8?q?esignsystem=20=EB=AA=A8=EB=93=88=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit emotionTag 사용하지 않는 프로퍼티(textColor, bgColor) 제거 --- .../booket/core/common/extensions/Emotion.kt | 22 --------------- core/designsystem/build.gradle.kts | 1 + .../booket/core/designsystem/Emotion.kt | 28 +++++++++++++++++++ .../booket/core/designsystem/EmotionTag.kt | 20 ++++--------- .../feature/detail/book/component/SeedItem.kt | 8 +++--- 5 files changed, 38 insertions(+), 41 deletions(-) delete mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt create mode 100644 core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt deleted file mode 100644 index e9f5069e..00000000 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Emotion.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.ninecraft.booket.core.common.extensions - -import androidx.compose.ui.graphics.Color -import com.ninecraft.booket.core.model.Emotion - -fun Emotion.toTextColor(): Color { - return when (this) { - Emotion.WARM -> Color(0xFFE3931B) - Emotion.JOY -> Color(0xFFEE6B33) - Emotion.SAD -> Color(0xFF2872E9) - Emotion.INSIGHT -> Color(0xFF9A55E4) - } -} - -fun Emotion.toBackgroundColor(): Color { - return when (this) { - Emotion.WARM -> Color(0xFFFFF5D3) - Emotion.JOY -> Color(0xFFFFEBE3) - Emotion.SAD -> Color(0xFFE1ECFF) - Emotion.INSIGHT -> Color(0xFFF3E8FF) - } -} diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts index 70c840be..ba6696b4 100644 --- a/core/designsystem/build.gradle.kts +++ b/core/designsystem/build.gradle.kts @@ -12,6 +12,7 @@ android { dependencies { implementations( projects.core.common, + projects.core.model, libs.androidx.splash, diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt new file mode 100644 index 00000000..d7cfb4c6 --- /dev/null +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt @@ -0,0 +1,28 @@ +package com.ninecraft.booket.core.designsystem + +import androidx.compose.ui.graphics.Color +import com.ninecraft.booket.core.designsystem.theme.InsightBgColor +import com.ninecraft.booket.core.designsystem.theme.InsightTextColor +import com.ninecraft.booket.core.designsystem.theme.JoyBgColor +import com.ninecraft.booket.core.designsystem.theme.JoyTextColor +import com.ninecraft.booket.core.designsystem.theme.SadnessBgColor +import com.ninecraft.booket.core.designsystem.theme.SadnessTextColor +import com.ninecraft.booket.core.designsystem.theme.WarmthBgColor +import com.ninecraft.booket.core.designsystem.theme.WarmthTextColor +import com.ninecraft.booket.core.model.Emotion + +val Emotion.bgColor: Color + get() = when (this) { + Emotion.WARM -> WarmthBgColor + Emotion.JOY -> JoyBgColor + Emotion.SAD -> SadnessBgColor + Emotion.INSIGHT -> InsightBgColor + } + +val Emotion.textColor: Color + get() = when (this) { + Emotion.WARM -> WarmthTextColor + Emotion.JOY -> JoyTextColor + Emotion.SAD -> SadnessTextColor + Emotion.INSIGHT -> InsightTextColor + } diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt index 9f306a2b..5911556c 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt @@ -1,18 +1,8 @@ package com.ninecraft.booket.core.designsystem -import androidx.compose.ui.graphics.Color -import com.ninecraft.booket.core.designsystem.theme.JoyBgColor -import com.ninecraft.booket.core.designsystem.theme.JoyTextColor -import com.ninecraft.booket.core.designsystem.theme.SadnessBgColor -import com.ninecraft.booket.core.designsystem.theme.SadnessTextColor -import com.ninecraft.booket.core.designsystem.theme.InsightBgColor -import com.ninecraft.booket.core.designsystem.theme.InsightTextColor -import com.ninecraft.booket.core.designsystem.theme.WarmthBgColor -import com.ninecraft.booket.core.designsystem.theme.WarmthTextColor - -enum class EmotionTag(val label: String, val bgColor: Color, val textColor: Color, val graphic: Int) { - WARMTH("따뜻함", WarmthBgColor, WarmthTextColor, R.drawable.img_emotion_warmth), - JOY("즐거움", JoyBgColor, JoyTextColor, R.drawable.img_emotion_joy), - SADNESS("슬픔", SadnessBgColor, SadnessTextColor, R.drawable.img_emotion_sadness), - INSIGHT("깨달음", InsightBgColor, InsightTextColor, R.drawable.img_emotion_insight), +enum class EmotionTag(val label: String, val graphic: Int) { + WARMTH("따뜻함", R.drawable.img_emotion_warmth), + JOY("즐거움", R.drawable.img_emotion_joy), + SADNESS("슬픔", R.drawable.img_emotion_sadness), + INSIGHT("깨달음", R.drawable.img_emotion_insight), } diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/SeedItem.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/SeedItem.kt index ac9d84d1..ebeaf2a4 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/SeedItem.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/SeedItem.kt @@ -16,9 +16,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import com.ninecraft.booket.core.common.extensions.toBackgroundColor -import com.ninecraft.booket.core.common.extensions.toTextColor import com.ninecraft.booket.core.designsystem.ComponentPreview +import com.ninecraft.booket.core.designsystem.bgColor +import com.ninecraft.booket.core.designsystem.textColor import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.model.Emotion import com.ninecraft.booket.core.model.EmotionModel @@ -42,7 +42,7 @@ internal fun SeedItem( Box( modifier = Modifier .clip(RoundedCornerShape(ReedTheme.radius.full)) - .background(emotion.name.toBackgroundColor()) + .background(emotion.name.bgColor) .padding( horizontal = ReedTheme.spacing.spacing2, vertical = ReedTheme.spacing.spacing1, @@ -51,7 +51,7 @@ internal fun SeedItem( ) { Text( text = emotion.name.displayName, - color = emotion.name.toTextColor(), + color = emotion.name.textColor, style = ReedTheme.typography.label2SemiBold, ) } From cd7107cfbea4a6677db76b5884ad2786e8890295 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 4 Nov 2025 15:04:24 +0900 Subject: [PATCH 098/116] [BOOK-417] chore: compose-stability-analyzer version upgrade --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 22d562d0..8f3b7db8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ androidx-compose-material3 = "1.4.0-alpha18" compose-stable-marker = "1.0.6" compose-effects = "0.1.1" compose-shadow = "2.0.4" -compose-stability-analyzer = "0.4.1" +compose-stability-analyzer = "0.4.2" ## Kotlin Symbol Processing ksp = "2.3.0" From a8b5f54f3ceb9bedcee2022c366e6368b94b8213 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Wed, 5 Nov 2025 09:02:44 +0900 Subject: [PATCH 099/116] =?UTF-8?q?[BOOK-417]=20refactor:=20EmotionTag?= =?UTF-8?q?=EB=A5=BC=20core:model=EC=9D=98=20Emotion=EC=9C=BC=20=EB=8C=80?= =?UTF-8?q?=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/designsystem/Emotion.kt | 8 ++++++++ .../booket/core/designsystem/EmotionTag.kt | 8 -------- .../detail/book/BookDetailPresenter.kt | 2 +- .../detail/card/RecordCardPresenter.kt | 2 +- .../feature/detail/card/RecordCardUi.kt | 2 +- .../feature/detail/card/RecordCardUiState.kt | 2 +- .../detail/card/component/RecordCard.kt | 20 +++++++++---------- .../detail/record/RecordDetailPresenter.kt | 2 +- .../edit/emotion/EmotionEditPresenter.kt | 6 +++--- .../feature/edit/emotion/EmotionEditUi.kt | 19 +++++++++--------- .../edit/emotion/EmotionEditUiState.kt | 4 ++-- .../register/RecordRegisterPresenter.kt | 10 +++++----- .../record/register/RecordRegisterUiState.kt | 8 ++++---- .../booket/feature/record/step/EmotionStep.kt | 15 +++++++------- .../booket/feature/screens/Screens.kt | 2 +- 15 files changed, 56 insertions(+), 54 deletions(-) delete mode 100644 core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt index d7cfb4c6..5a4f72a3 100644 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt +++ b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt @@ -26,3 +26,11 @@ val Emotion.textColor: Color Emotion.SAD -> SadnessTextColor Emotion.INSIGHT -> InsightTextColor } + +val Emotion.graphicRes: Int + get() = when (this) { + Emotion.WARM -> R.drawable.img_emotion_warmth + Emotion.JOY -> R.drawable.img_emotion_joy + Emotion.SAD -> R.drawable.img_emotion_sadness + Emotion.INSIGHT -> R.drawable.img_emotion_insight + } diff --git a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt b/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt deleted file mode 100644 index 5911556c..00000000 --- a/core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/EmotionTag.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.ninecraft.booket.core.designsystem - -enum class EmotionTag(val label: String, val graphic: Int) { - WARMTH("따뜻함", R.drawable.img_emotion_warmth), - JOY("즐거움", R.drawable.img_emotion_joy), - SADNESS("슬픔", R.drawable.img_emotion_sadness), - INSIGHT("깨달음", R.drawable.img_emotion_insight), -} diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt index ce5bf499..07833fe8 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt @@ -306,7 +306,7 @@ class BookDetailPresenter @AssistedInject constructor( RecordCardScreen( quote = selectedRecordInfo.quote, bookTitle = selectedRecordInfo.bookTitle, - emotionTag = selectedRecordInfo.emotionTags[0], + emotion = selectedRecordInfo.emotionTags[0], ), ) } diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardPresenter.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardPresenter.kt index 19958164..1ab1de37 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardPresenter.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardPresenter.kt @@ -74,7 +74,7 @@ class RecordCardPresenter @AssistedInject constructor( isLoading = isLoading, quote = screen.quote, bookTitle = screen.bookTitle, - emotionTag = screen.emotionTag, + emotion = screen.emotion, isCapturing = isCapturing, isSharing = isSharing, sideEffect = sideEffect, diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt index 49144940..3e3813be 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt @@ -83,7 +83,7 @@ internal fun RecordCardUi( RecordCard( quote = state.quote, bookTitle = state.bookTitle, - emotionTag = state.emotionTag, + emotion = state.emotion, modifier = Modifier .padding(top = ReedTheme.spacing.spacing5) .clip(RoundedCornerShape(ReedTheme.radius.md)) diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUiState.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUiState.kt index c9880356..43c2c71a 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUiState.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUiState.kt @@ -11,7 +11,7 @@ data class RecordCardUiState( val quote: String = "", val bookTitle: String = "", val author: String = "", - val emotionTag: String = "", + val emotion: String = "", val isCapturing: Boolean = false, val isSharing: Boolean = false, val sideEffect: RecordCardSideEffect? = null, diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/component/RecordCard.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/component/RecordCard.kt index 2f9b7bcc..4c055930 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/component/RecordCard.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/component/RecordCard.kt @@ -19,20 +19,20 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.sp import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.EmotionTag import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.ninecraft.booket.core.model.Emotion import com.ninecraft.booket.feature.detail.R @Composable internal fun RecordCard( quote: String, bookTitle: String, - emotionTag: String, + emotion: String, modifier: Modifier = Modifier, ) { Box(modifier = modifier.fillMaxWidth()) { Image( - painter = painterResource(getEmotionCardImage(emotionTag)), + painter = painterResource(getEmotionCardImage(emotion)), contentDescription = "Record Card Image", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop, @@ -74,12 +74,12 @@ internal fun RecordCard( } } -private fun getEmotionCardImage(emotionTag: String): Int { - return when (emotionTag) { - EmotionTag.WARMTH.label -> R.drawable.img_record_card_warm - EmotionTag.JOY.label -> R.drawable.img_record_card_joy - EmotionTag.SADNESS.label -> R.drawable.img_record_card_sad - EmotionTag.INSIGHT.label -> R.drawable.img_record_card_insight +private fun getEmotionCardImage(emotion: String): Int { + return when (emotion) { + Emotion.WARM.displayName -> R.drawable.img_record_card_warm + Emotion.JOY.displayName -> R.drawable.img_record_card_joy + Emotion.SAD.displayName -> R.drawable.img_record_card_sad + Emotion.INSIGHT.displayName -> R.drawable.img_record_card_insight else -> R.drawable.img_record_card_warm } } @@ -91,7 +91,7 @@ private fun RecordCardPreview() { RecordCard( quote = "이 세상에 집이라 이름 붙일 수 없는 것이 있다면 그건 바로 여기, 내가 앉아 있는 이곳일 것이다.", bookTitle = "샤이닝", - emotionTag = EmotionTag.WARMTH.label, + emotion = Emotion.WARM.displayName, ) } } diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailPresenter.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailPresenter.kt index 151eeb03..fbc0723d 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailPresenter.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailPresenter.kt @@ -127,7 +127,7 @@ class RecordDetailPresenter @AssistedInject constructor( RecordCardScreen( quote = recordDetailInfo.quote, bookTitle = recordDetailInfo.bookTitle, - emotionTag = recordDetailInfo.emotionTags[0], + emotion = recordDetailInfo.emotionTags[0], ), ) } diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditPresenter.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditPresenter.kt index d97243a5..cf132671 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditPresenter.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditPresenter.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import com.ninecraft.booket.core.designsystem.EmotionTag +import com.ninecraft.booket.core.model.Emotion import com.ninecraft.booket.feature.screens.EmotionEditScreen import com.slack.circuit.codegen.annotations.CircuitInject import com.slack.circuit.retained.rememberRetained @@ -25,7 +25,7 @@ class EmotionEditPresenter @AssistedInject constructor( @Composable override fun present(): EmotionEditUiState { var selectedEmotion by rememberRetained { mutableStateOf(screen.emotion) } - val emotionTags by rememberRetained { mutableStateOf(EmotionTag.entries.toPersistentList()) } + val emotions by rememberRetained { mutableStateOf(Emotion.entries.toPersistentList()) } val isEditButtonEnabled by remember { derivedStateOf { selectedEmotion != screen.emotion @@ -50,7 +50,7 @@ class EmotionEditPresenter @AssistedInject constructor( return EmotionEditUiState( selectedEmotion = selectedEmotion, - emotionTags = emotionTags, + emotions = emotions, isEditButtonEnabled = isEditButtonEnabled, eventSink = ::handleEvent, ) diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt index a9ff1ec8..d425dba8 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt @@ -26,12 +26,13 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.extensions.clickableSingle import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.EmotionTag import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle +import com.ninecraft.booket.core.designsystem.graphicRes import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White +import com.ninecraft.booket.core.model.Emotion import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.feature.edit.R @@ -100,13 +101,13 @@ private fun EmotionEditContent( verticalArrangement = Arrangement.spacedBy(ReedTheme.spacing.spacing3), horizontalArrangement = Arrangement.spacedBy(ReedTheme.spacing.spacing3), content = { - items(state.emotionTags) { tag -> + items(state.emotions) { tag -> EmotionItem( - emotionTag = tag, + emotion = tag, onClick = { - state.eventSink(EmotionEditUiEvent.OnSelectEmotion(tag.label)) + state.eventSink(EmotionEditUiEvent.OnSelectEmotion(tag.displayName)) }, - isSelected = state.selectedEmotion == tag.label, + isSelected = state.selectedEmotion == tag.displayName, modifier = Modifier.fillMaxWidth(), ) } @@ -129,7 +130,7 @@ private fun EmotionEditContent( @Composable private fun EmotionItem( - emotionTag: EmotionTag, + emotion: Emotion, onClick: () -> Unit, isSelected: Boolean, modifier: Modifier = Modifier, @@ -156,7 +157,7 @@ private fun EmotionItem( contentAlignment = Alignment.Center, ) { Image( - painter = painterResource(emotionTag.graphic), + painter = painterResource(emotion.graphicRes), contentDescription = "Emotion Image", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop, @@ -168,11 +169,11 @@ private fun EmotionItem( @Composable private fun EmotionEditUiPreview() { ReedTheme { - val emotionTags = EmotionTag.entries.toPersistentList() + val emotions = Emotion.entries.toPersistentList() EmotionEditUi( state = EmotionEditUiState( - emotionTags = emotionTags, + emotions = emotions, eventSink = {}, ), ) diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUiState.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUiState.kt index 9849988e..4a4bb399 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUiState.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUiState.kt @@ -1,6 +1,6 @@ package com.ninecraft.booket.feature.edit.emotion -import com.ninecraft.booket.core.designsystem.EmotionTag +import com.ninecraft.booket.core.model.Emotion import com.slack.circuit.runtime.CircuitUiEvent import com.slack.circuit.runtime.CircuitUiState import kotlinx.collections.immutable.ImmutableList @@ -9,7 +9,7 @@ import kotlinx.collections.immutable.persistentListOf data class EmotionEditUiState( val selectedEmotion: String = "", val isEditButtonEnabled: Boolean = false, - val emotionTags: ImmutableList = persistentListOf(), + val emotions: ImmutableList = persistentListOf(), val eventSink: (EmotionEditUiEvent) -> Unit, ) : CircuitUiState diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt index ee80e3dc..16abd5ca 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt @@ -13,8 +13,8 @@ import androidx.compose.ui.text.TextRange import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.RecordRepository -import com.ninecraft.booket.core.designsystem.EmotionTag import com.ninecraft.booket.core.designsystem.RecordStep +import com.ninecraft.booket.core.model.Emotion import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.OcrScreen import com.ninecraft.booket.feature.screens.RecordDetailScreen @@ -73,8 +73,8 @@ class RecordRegisterPresenter @AssistedInject constructor( ).toPersistentList(), ) } - val emotionTags by rememberRetained { mutableStateOf(EmotionTag.entries.toPersistentList()) } - var selectedEmotion by rememberRetained { mutableStateOf(null) } + val emotions by rememberRetained { mutableStateOf(Emotion.entries.toPersistentList()) } + var selectedEmotion by rememberRetained { mutableStateOf(null) } var selectedImpressionGuide by rememberRetained { mutableStateOf("") } var beforeSelectedImpressionGuide by rememberRetained { mutableStateOf(selectedImpressionGuide) } val impressionState = rememberTextFieldState() @@ -254,7 +254,7 @@ class RecordRegisterPresenter @AssistedInject constructor( userBookId = screen.userBookId, pageNumber = recordPageState.text.toString().toIntOrNull() ?: 0, quote = recordSentenceState.text.toString(), - emotionTags = selectedEmotion?.let { listOf(it.label) } ?: emptyList(), + emotionTags = selectedEmotion?.let { listOf(it.displayName) } ?: emptyList(), impression = impressionState.text.toString(), ) } @@ -292,7 +292,7 @@ class RecordRegisterPresenter @AssistedInject constructor( recordPageState = recordPageState, recordSentenceState = recordSentenceState, isPageError = isPageError, - emotionTags = emotionTags, + emotions = emotions, selectedEmotion = selectedEmotion, impressionState = impressionState, impressionGuideList = impressionGuideList, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt index 9641f987..16732566 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt @@ -2,8 +2,8 @@ package com.ninecraft.booket.feature.record.register import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.runtime.Immutable -import com.ninecraft.booket.core.designsystem.EmotionTag import com.ninecraft.booket.core.designsystem.RecordStep +import com.ninecraft.booket.core.model.Emotion import com.slack.circuit.runtime.CircuitUiEvent import com.slack.circuit.runtime.CircuitUiState import kotlinx.collections.immutable.ImmutableList @@ -16,8 +16,8 @@ data class RecordRegisterUiState( val recordPageState: TextFieldState = TextFieldState(), val recordSentenceState: TextFieldState = TextFieldState(), val isPageError: Boolean = false, - val emotionTags: ImmutableList = persistentListOf(), - val selectedEmotion: EmotionTag? = null, + val emotions: ImmutableList = persistentListOf(), + val selectedEmotion: Emotion? = null, val impressionState: TextFieldState = TextFieldState(), val impressionGuideList: ImmutableList = persistentListOf(), val selectedImpressionGuide: String = "", @@ -46,7 +46,7 @@ sealed interface RecordRegisterUiEvent : CircuitUiEvent { data object OnClearClick : RecordRegisterUiEvent data object OnNextButtonClick : RecordRegisterUiEvent data object OnSentenceScanButtonClick : RecordRegisterUiEvent - data class OnSelectEmotion(val emotion: EmotionTag) : RecordRegisterUiEvent + data class OnSelectEmotion(val emotion: Emotion) : RecordRegisterUiEvent data object OnImpressionGuideButtonClick : RecordRegisterUiEvent data object OnImpressionGuideBottomSheetDismiss : RecordRegisterUiEvent data class OnSelectImpressionGuide(val index: Int) : RecordRegisterUiEvent diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt index 67f98766..c6b97c24 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt @@ -26,12 +26,13 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.extensions.clickableSingle import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.EmotionTag import com.ninecraft.booket.core.designsystem.component.button.ReedButton import com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle +import com.ninecraft.booket.core.designsystem.graphicRes import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White +import com.ninecraft.booket.core.model.Emotion import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState @@ -44,7 +45,7 @@ fun EmotionStep( state: RecordRegisterUiState, modifier: Modifier = Modifier, ) { - val emotionPairs = remember(state.emotionTags) { state.emotionTags.chunked(2) } + val emotionPairs = remember(state.emotions) { state.emotions.chunked(2) } Box( modifier = modifier @@ -85,7 +86,7 @@ fun EmotionStep( ) { pair.forEach { tag -> EmotionItem( - emotionTag = tag, + emotion = tag, onClick = { state.eventSink(RecordRegisterUiEvent.OnSelectEmotion(tag)) }, @@ -121,7 +122,7 @@ fun EmotionStep( @Composable private fun EmotionItem( - emotionTag: EmotionTag, + emotion: Emotion, onClick: () -> Unit, isSelected: Boolean, modifier: Modifier = Modifier, @@ -148,7 +149,7 @@ private fun EmotionItem( contentAlignment = Alignment.Center, ) { Image( - painter = painterResource(emotionTag.graphic), + painter = painterResource(emotion.graphicRes), contentDescription = "Emotion Image", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop, @@ -159,12 +160,12 @@ private fun EmotionItem( @ComponentPreview @Composable private fun RecordRegisterPreview() { - val emotionTags = EmotionTag.entries.toPersistentList() + val emotions = Emotion.entries.toPersistentList() ReedTheme { EmotionStep( state = RecordRegisterUiState( - emotionTags = emotionTags, + emotions = emotions, eventSink = {}, ), ) diff --git a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt index fd45b617..2d057b3b 100644 --- a/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt +++ b/feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt @@ -79,5 +79,5 @@ data object SplashScreen : ReedScreen(name = ScreenNames.SPLASH) data class RecordCardScreen( val quote: String, val bookTitle: String, - val emotionTag: String, + val emotion: String, ) : ReedScreen(name = ScreenNames.RECORD_CARD) From 90cdc8b3f2f31b7f7b44ed5900a5d26fd23f9645 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Wed, 5 Nov 2025 17:26:12 +0900 Subject: [PATCH 100/116] =?UTF-8?q?[BOOK-420]=20refactor:=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=A0=84=EC=9A=A9=20=EC=9D=B4=EB=B2=A4=ED=8A=B8/?= =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EC=96=BC=EB=A1=9C=EA=B7=B8=20=EC=8A=A4?= =?UTF-8?q?=ED=8E=99=EC=9D=84=20=EB=B2=94=EC=9A=A9=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=EB=A1=9C=20=ED=99=95=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/common/constants/DialogSpec.kt | 10 +++++++++ .../core/common/constants/ErrorDialogSpec.kt | 10 --------- .../core/common/event/ErrorEventHelper.kt | 22 ------------------- .../booket/core/common/event/EventHelper.kt | 22 +++++++++++++++++++ .../booket/feature/main/MainActivity.kt | 19 ++++++++-------- 5 files changed, 41 insertions(+), 42 deletions(-) create mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt delete mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt delete mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/ErrorEventHelper.kt create mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt new file mode 100644 index 00000000..ed2c89ae --- /dev/null +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt @@ -0,0 +1,10 @@ +package com.ninecraft.booket.core.common.constants + +data class DialogSpec( + val message: String, + val confirmLabel: String, + val onConfirm: () -> Unit, + val title: String? = null, + val dismissLabel: String? = null, + val onDismissRequest: () -> Unit = {}, +) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt deleted file mode 100644 index 2d1d9544..00000000 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.ninecraft.booket.core.common.constants - -import androidx.annotation.StringRes - -data class ErrorDialogSpec( - val title: String? = null, - val message: String, - @StringRes val buttonLabelResId: Int, - val action: () -> Unit, -) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/ErrorEventHelper.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/ErrorEventHelper.kt deleted file mode 100644 index 2daee82e..00000000 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/ErrorEventHelper.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.ninecraft.booket.core.common.event - -import com.ninecraft.booket.core.common.constants.ErrorDialogSpec -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.flow.receiveAsFlow -import java.util.UUID - -object ErrorEventHelper { - private val _errorEvent = Channel(Channel.BUFFERED) - val errorEvent = _errorEvent.receiveAsFlow() - - fun sendError(event: ErrorEvent) { - _errorEvent.trySend(event) - } -} - -sealed interface ErrorEvent { - data class ShowDialog( - val spec: ErrorDialogSpec, - val key: String = UUID.randomUUID().toString(), - ) : ErrorEvent -} diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt new file mode 100644 index 00000000..ef5ef47a --- /dev/null +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt @@ -0,0 +1,22 @@ +package com.ninecraft.booket.core.common.event + +import com.ninecraft.booket.core.common.constants.DialogSpec +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.receiveAsFlow +import java.util.UUID + +object EventHelper { + private val _eventFlow = Channel(Channel.BUFFERED) + val eventFlow = _eventFlow.receiveAsFlow() + + fun sendEvent(event: ReedEvent) { + _eventFlow.trySend(event) + } +} + +sealed interface ReedEvent { + data class ShowDialog( + val spec: DialogSpec, + val key: String = UUID.randomUUID().toString(), + ) : ReedEvent +} diff --git a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt index b1d44684..e010ee2c 100644 --- a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt +++ b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt @@ -11,11 +11,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen -import com.ninecraft.booket.core.common.constants.ErrorDialogSpec -import com.ninecraft.booket.core.common.event.ErrorEvent -import com.ninecraft.booket.core.common.event.ErrorEventHelper +import com.ninecraft.booket.core.common.constants.DialogSpec +import com.ninecraft.booket.core.common.event.EventHelper +import com.ninecraft.booket.core.common.event.ReedEvent import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedDialog import com.ninecraft.booket.feature.screens.SplashScreen @@ -55,13 +54,13 @@ class MainActivity : ComponentActivity() { val backStack = rememberSaveableBackStack(root = SplashScreen) val navigator = rememberCircuitNavigator(backStack) - val dialogSpec = remember { mutableStateOf(null) } + val dialogSpec = remember { mutableStateOf(null) } // 전역 에러 수신 LaunchedEffect(Unit) { - ErrorEventHelper.errorEvent.collect { event -> + EventHelper.eventFlow.collect { event -> when (event) { - is ErrorEvent.ShowDialog -> { + is ReedEvent.ShowDialog -> { dialogSpec.value = event.spec } } @@ -72,10 +71,10 @@ class MainActivity : ComponentActivity() { ReedDialog( title = spec.title, description = spec.message, - confirmButtonText = stringResource(spec.buttonLabelResId), - + confirmButtonText = spec.confirmLabel, + dismissButtonText = spec.dismissLabel, onConfirmRequest = { - spec.action() + spec.onConfirm() dialogSpec.value = null }, onDismissRequest = { From 8c29fbeb3c34f4153c466d8843a22aefbac60acf Mon Sep 17 00:00:00 2001 From: seoyoon Date: Wed, 5 Nov 2025 17:27:29 +0900 Subject: [PATCH 101/116] [BOOK-420] refactor: Move postErrorDialog to DialogEvents --- .../booket/core/common/event/DialogEvents.kt | 48 ++++++++++++++++++ .../core/common/utils/HandleException.kt | 50 +------------------ .../booket/feature/login/LoginPresenter.kt | 2 +- .../booket/splash/SplashPresenter.kt | 7 ++- 4 files changed, 54 insertions(+), 53 deletions(-) create mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt new file mode 100644 index 00000000..b69ac450 --- /dev/null +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt @@ -0,0 +1,48 @@ +package com.ninecraft.booket.core.common.event + +import com.ninecraft.booket.core.common.constants.DialogSpec +import com.ninecraft.booket.core.common.constants.ErrorScope +import com.ninecraft.booket.core.common.utils.isNetworkError +import retrofit2.HttpException + +fun postErrorDialog( + errorScope: ErrorScope, + exception: Throwable, + confirmLabel: String = "확인", + onConfirm: () -> Unit = {}, +) { + val (title, message) = when { + exception.isNetworkError() -> { + null to "네트워크 연결이 불안정합니다.\n인터넷 연결을 확인해주세요" + } + + exception is HttpException -> { + when (errorScope) { + ErrorScope.GLOBAL -> { + null to "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" + } + + ErrorScope.LOGIN -> { + "로그인 오류" to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." + } + + ErrorScope.AUTH_SESSION_EXPIRED -> { + null to "세션이 만료되었어요.\n다시 로그인 해주세요" + } + } + } + + else -> { + null to "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" + } + } + + val spec = DialogSpec( + title = title, + message = message, + confirmLabel = confirmLabel, + onConfirm = onConfirm, + ) + + EventHelper.sendEvent(event = ReedEvent.ShowDialog(spec)) +} diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt index 7474fcb8..9e43d3b4 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/HandleException.kt @@ -1,11 +1,7 @@ package com.ninecraft.booket.core.common.utils -import androidx.annotation.StringRes -import com.ninecraft.booket.core.common.R -import com.ninecraft.booket.core.common.constants.ErrorDialogSpec import com.ninecraft.booket.core.common.constants.ErrorScope -import com.ninecraft.booket.core.common.event.ErrorEvent -import com.ninecraft.booket.core.common.event.ErrorEventHelper +import com.ninecraft.booket.core.common.event.postErrorDialog import com.ninecraft.booket.core.network.response.ErrorResponse import com.orhanobut.logger.Logger import kotlinx.serialization.SerializationException @@ -26,7 +22,7 @@ fun handleException( postErrorDialog( errorScope = ErrorScope.AUTH_SESSION_EXPIRED, exception = exception, - action = { + onConfirm = { onLoginRequired() }, ) @@ -51,48 +47,6 @@ fun handleException( } } -fun postErrorDialog( - errorScope: ErrorScope, - exception: Throwable, - @StringRes buttonLabelResId: Int = R.string.confirm, - action: () -> Unit = {}, -) { - val (title, message) = when { - exception.isNetworkError() -> { - null to "네트워크 연결이 불안정합니다.\n인터넷 연결을 확인해주세요" - } - - exception is HttpException -> { - when (errorScope) { - ErrorScope.GLOBAL -> { - null to "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" - } - - ErrorScope.LOGIN -> { - "로그인 오류" to "예기치 않은 오류가 발생했습니다.\n다시 로그인 해주세요." - } - - ErrorScope.AUTH_SESSION_EXPIRED -> { - null to "세션이 만료되었어요.\n다시 로그인 해주세요" - } - } - } - - else -> { - null to "알 수 없는 문제가 발생했어요.\n다시 시도해주세요" - } - } - - val spec = ErrorDialogSpec( - title = title, - message = message, - buttonLabelResId = buttonLabelResId, - action = action, - ) - - ErrorEventHelper.sendError(event = ErrorEvent.ShowDialog(spec)) -} - private fun HttpException.parseErrorMessage(): String? { return try { val errorBody = response()?.errorBody()?.string() diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt index 30fbfb8b..0bb0de32 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.constants.ErrorScope -import com.ninecraft.booket.core.common.utils.postErrorDialog +import com.ninecraft.booket.core.common.event.postErrorDialog import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.feature.screens.HomeScreen diff --git a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt index a27d3d08..02a0761e 100644 --- a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt +++ b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashPresenter.kt @@ -8,13 +8,12 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.constants.ErrorScope -import com.ninecraft.booket.core.common.utils.postErrorDialog +import com.ninecraft.booket.core.common.event.postErrorDialog import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.core.model.AutoLoginState import com.ninecraft.booket.core.model.OnboardingState -import com.ninecraft.booket.core.ui.R import com.ninecraft.booket.feature.screens.HomeScreen import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.OnboardingScreen @@ -64,8 +63,8 @@ class SplashPresenter @AssistedInject constructor( postErrorDialog( errorScope = ErrorScope.GLOBAL, exception = exception, - buttonLabelResId = R.string.retry, - action = { checkTermsAgreement() }, + confirmLabel = "다시 시도하기", + onConfirm = { checkTermsAgreement() }, ) } } From 8be56c3d4e9ca07fac9abbc3cc03dc1b34695639 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Wed, 5 Nov 2025 17:48:23 +0900 Subject: [PATCH 102/116] =?UTF-8?q?[BOOK-420]=20feat:=20=ED=86=A0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=8F=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=9D=B4=EB=8F=99=20=EB=A1=9C=EC=A7=81=EC=9D=84=20?= =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EB=8B=A4=EC=9D=B4=EC=96=BC=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/common/event/DialogEvents.kt | 11 +++++++++++ .../booket/feature/library/LibraryPresenter.kt | 14 ++++++++------ .../feature/search/book/BookSearchPresenter.kt | 18 ++++++++++++------ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt index b69ac450..d735e8a0 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt @@ -46,3 +46,14 @@ fun postErrorDialog( EventHelper.sendEvent(event = ReedEvent.ShowDialog(spec)) } + +fun postLoginRequiredDialog(onConfirm: () -> Unit) { + val spec = DialogSpec( + message = "로그인이 필요한 기능입니다.\n로그인 해주세요.", + confirmLabel = "로그인 하기", + onConfirm = onConfirm, + dismissLabel = "닫기" + ) + + EventHelper.sendEvent(event = ReedEvent.ShowDialog(spec)) +} diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt index c49b0106..e557f31c 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper -import com.ninecraft.booket.core.common.utils.UiText +import com.ninecraft.booket.core.common.event.postLoginRequiredDialog import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.BookRepository @@ -35,7 +35,6 @@ import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch -import com.ninecraft.booket.core.designsystem.R as designR class LibraryPresenter @AssistedInject constructor( @Assisted private val navigator: Navigator, @@ -127,10 +126,13 @@ class LibraryPresenter @AssistedInject constructor( is LibraryUiEvent.OnLibrarySearchClick -> { if (userState is UserState.Guest) { - scope.launch { - sideEffect = LibrarySideEffect.ShowToast(UiText.StringResource(designR.string.login_required)) - navigator.redirectToLogin() - } + postLoginRequiredDialog( + onConfirm = { + scope.launch { + navigator.redirectToLogin() + } + }, + ) } else { navigator.goTo(LibrarySearchScreen) } diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt index b945e7e0..c9691371 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt @@ -10,6 +10,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.constants.BookStatus +import com.ninecraft.booket.core.common.event.postLoginRequiredDialog import com.ninecraft.booket.core.common.utils.UiText import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.AuthRepository @@ -120,13 +121,18 @@ class BookSearchPresenter @AssistedInject constructor( } fun upsertBook(isbn13: String, bookStatus: String) { - scope.launch { - if (userState is UserState.Guest) { - sideEffect = BookSearchSideEffect.ShowToast(UiText.StringResource(designR.string.login_required)) - navigator.redirectToLogin() - return@launch - } + if (userState is UserState.Guest) { + postLoginRequiredDialog( + onConfirm = { + scope.launch { + navigator.redirectToLogin() + } + }, + ) + return + } + scope.launch { repository.upsertBook(isbn13, bookStatus) .onSuccess { registeredUserBookId = it.userBookId From 4d50515aeb7edac9870f41d7d7ff1d54f36d7f12 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Wed, 5 Nov 2025 17:59:43 +0900 Subject: [PATCH 103/116] [BOOK-420] chore: code style check success --- .../com/ninecraft/booket/core/common/event/DialogEvents.kt | 2 +- .../ninecraft/booket/feature/search/book/BookSearchPresenter.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt index d735e8a0..bd03de21 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt @@ -52,7 +52,7 @@ fun postLoginRequiredDialog(onConfirm: () -> Unit) { message = "로그인이 필요한 기능입니다.\n로그인 해주세요.", confirmLabel = "로그인 하기", onConfirm = onConfirm, - dismissLabel = "닫기" + dismissLabel = "닫기", ) EventHelper.sendEvent(event = ReedEvent.ShowDialog(spec)) diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt index c9691371..e78e03f7 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt @@ -39,7 +39,6 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch -import com.ninecraft.booket.core.designsystem.R as designR class BookSearchPresenter @AssistedInject constructor( @Assisted private val navigator: Navigator, From cafd74c537c5d2237ab42e31c2efcd96a195f1e8 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 6 Nov 2025 00:36:48 +0900 Subject: [PATCH 104/116] =?UTF-8?q?[BOOK-420]=20refactor:=20DialogSpec?= =?UTF-8?q?=EC=9D=84=20constants=20->=20event=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/core/common/event/DialogEvents.kt | 1 - .../booket/core/common/{constants => event}/DialogSpec.kt | 2 +- .../com/ninecraft/booket/core/common/event/EventHelper.kt | 1 - .../kotlin/com/ninecraft/booket/feature/main/MainActivity.kt | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) rename core/common/src/main/kotlin/com/ninecraft/booket/core/common/{constants => event}/DialogSpec.kt (81%) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt index bd03de21..b19347be 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogEvents.kt @@ -1,6 +1,5 @@ package com.ninecraft.booket.core.common.event -import com.ninecraft.booket.core.common.constants.DialogSpec import com.ninecraft.booket.core.common.constants.ErrorScope import com.ninecraft.booket.core.common.utils.isNetworkError import retrofit2.HttpException diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogSpec.kt similarity index 81% rename from core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt rename to core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogSpec.kt index ed2c89ae..db1866f1 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/DialogSpec.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/DialogSpec.kt @@ -1,4 +1,4 @@ -package com.ninecraft.booket.core.common.constants +package com.ninecraft.booket.core.common.event data class DialogSpec( val message: String, diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt index ef5ef47a..eaa9f3a3 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt @@ -1,6 +1,5 @@ package com.ninecraft.booket.core.common.event -import com.ninecraft.booket.core.common.constants.DialogSpec import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.receiveAsFlow import java.util.UUID diff --git a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt index e010ee2c..031852ce 100644 --- a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt +++ b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt @@ -12,7 +12,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen -import com.ninecraft.booket.core.common.constants.DialogSpec +import com.ninecraft.booket.core.common.event.DialogSpec import com.ninecraft.booket.core.common.event.EventHelper import com.ninecraft.booket.core.common.event.ReedEvent import com.ninecraft.booket.core.designsystem.theme.ReedTheme From 82e4da2d4ae9778a55f1f7e397bf24da051323d6 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 6 Nov 2025 07:58:40 +0900 Subject: [PATCH 105/116] =?UTF-8?q?[BOOK-420]=20refactor:=20ReedEvent.Show?= =?UTF-8?q?Dialog=EC=97=90=EC=84=9C=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20key=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ninecraft/booket/core/common/event/EventHelper.kt | 6 +----- .../com/ninecraft/booket/feature/main/MainActivity.kt | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt index eaa9f3a3..3ba55163 100644 --- a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/EventHelper.kt @@ -2,7 +2,6 @@ package com.ninecraft.booket.core.common.event import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.receiveAsFlow -import java.util.UUID object EventHelper { private val _eventFlow = Channel(Channel.BUFFERED) @@ -14,8 +13,5 @@ object EventHelper { } sealed interface ReedEvent { - data class ShowDialog( - val spec: DialogSpec, - val key: String = UUID.randomUUID().toString(), - ) : ReedEvent + data class ShowDialog(val spec: DialogSpec) : ReedEvent } diff --git a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt index 031852ce..cdc440cb 100644 --- a/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt +++ b/feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt @@ -56,7 +56,7 @@ class MainActivity : ComponentActivity() { val dialogSpec = remember { mutableStateOf(null) } - // 전역 에러 수신 + // 전역 이벤트 수신 LaunchedEffect(Unit) { EventHelper.eventFlow.collect { event -> when (event) { From 276a4d550c99e21ca789e66150f01737a9dbca0d Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 6 Nov 2025 16:44:05 +0900 Subject: [PATCH 106/116] =?UTF-8?q?[BOOK-427]=20fix:=20=EB=AA=A8=EB=93=A0?= =?UTF-8?q?=20=EC=B1=85=20=EC=8D=B8=EB=84=A4=EC=9D=BC=EC=97=90=20border=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/feature/detail/record/component/BookItem.kt | 8 +++++++- .../booket/feature/library/component/LibraryBookItem.kt | 8 +++++++- .../booket/feature/search/book/component/BookItem.kt | 8 +++++++- .../feature/search/library/component/LibraryBookItem.kt | 8 +++++++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/BookItem.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/BookItem.kt index 98e6d98d..033283d4 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/BookItem.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/component/BookItem.kt @@ -1,5 +1,6 @@ package com.ninecraft.booket.feature.detail.record.component +import androidx.compose.foundation.border import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -48,7 +49,12 @@ internal fun BookItem( .padding(end = ReedTheme.spacing.spacing4) .width(46.dp) .height(68.dp) - .clip(RoundedCornerShape(size = ReedTheme.radius.xs)), + .clip(RoundedCornerShape(size = ReedTheme.radius.xs)) + .border( + width = 1.dp, + color = ReedTheme.colors.borderPrimary, + shape = RoundedCornerShape(ReedTheme.radius.xs), + ), placeholder = painterResource(R.drawable.ic_placeholder), ) Column(modifier = Modifier.weight(1f)) { diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/LibraryBookItem.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/LibraryBookItem.kt index 12c6cff7..fc3afd3f 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/LibraryBookItem.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/LibraryBookItem.kt @@ -1,5 +1,6 @@ package com.ninecraft.booket.feature.library.component +import androidx.compose.foundation.border import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -52,7 +53,12 @@ fun LibraryBookItem( ) .width(68.dp) .height(100.dp) - .clip(RoundedCornerShape(size = ReedTheme.radius.sm)), + .clip(RoundedCornerShape(size = ReedTheme.radius.sm)) + .border( + width = 1.dp, + color = ReedTheme.colors.borderPrimary, + shape = RoundedCornerShape(ReedTheme.radius.sm), + ), placeholder = painterResource(designR.drawable.ic_placeholder), ) Column(modifier = Modifier.weight(1f)) { diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt index 53c538c2..3db9ef4e 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt @@ -1,6 +1,7 @@ package com.ninecraft.booket.feature.search.book.component import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxWithConstraints @@ -65,7 +66,12 @@ fun BookItem( ) .width(68.dp) .height(100.dp) - .clip(RoundedCornerShape(size = ReedTheme.radius.sm)), + .clip(RoundedCornerShape(size = ReedTheme.radius.sm)) + .border( + width = 1.dp, + color = ReedTheme.colors.borderPrimary, + shape = RoundedCornerShape(ReedTheme.radius.sm), + ), ) { NetworkImage( imageUrl = book.coverImageUrl, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/component/LibraryBookItem.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/component/LibraryBookItem.kt index 8b30433a..14265931 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/component/LibraryBookItem.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/component/LibraryBookItem.kt @@ -1,5 +1,6 @@ package com.ninecraft.booket.feature.search.library.component +import androidx.compose.foundation.border import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -52,7 +53,12 @@ fun LibraryBookItem( ) .width(68.dp) .height(100.dp) - .clip(RoundedCornerShape(size = ReedTheme.radius.sm)), + .clip(RoundedCornerShape(size = ReedTheme.radius.sm)) + .border( + width = 1.dp, + color = ReedTheme.colors.borderPrimary, + shape = RoundedCornerShape(ReedTheme.radius.sm), + ), placeholder = painterResource(designR.drawable.ic_placeholder), ) Column(modifier = Modifier.weight(1f)) { From 198a605a2b24497a43cd83504babaf5b95d6fb08 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Thu, 6 Nov 2025 16:57:49 +0900 Subject: [PATCH 107/116] =?UTF-8?q?[BOOK-427]=20fix:=20=EC=A2=8C=EC=9A=B0?= =?UTF-8?q?=20=EB=B0=98=EC=A0=84=EB=90=9C=20=EC=94=A8=EC=95=97=20=EB=A6=AC?= =?UTF-8?q?=EC=86=8C=EC=8A=A4=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/drawable/img_insight.webp | Bin 13608 -> 80258 bytes .../detail/src/main/res/drawable/img_joy.webp | Bin 13698 -> 83206 bytes .../detail/src/main/res/drawable/img_sad.webp | Bin 13542 -> 77154 bytes .../src/main/res/drawable/img_warm.webp | Bin 13740 -> 84038 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/feature/detail/src/main/res/drawable/img_insight.webp b/feature/detail/src/main/res/drawable/img_insight.webp index 235bad8ef33f5537e8f8c0c8ac7f800bd8577b0a..77d816fdbf4b5198b146478ef756cf65fa3fb418 100644 GIT binary patch literal 80258 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 F6cyBU7h_bwxPb&q%d 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 A#{d8T literal 13608 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 uXOPDqk}3BXEQ-qZEi3!&ig?BdfsMRR;j*G2B`J diff --git a/feature/detail/src/main/res/drawable/img_joy.webp b/feature/detail/src/main/res/drawable/img_joy.webp index afa54b1e340d40668ea482660487226708a69e56..00414f16c88a72f1e345158d9d9fc982dd94ec97 100644 GIT binary patch literal 83206 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 literal 13698 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 literal 13542 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 diff --git a/feature/detail/src/main/res/drawable/img_warm.webp b/feature/detail/src/main/res/drawable/img_warm.webp index a94574e60330f099f6e91cc9a93f00235ce2ab50..a432f9e6fc65408792d58f641339802e014bf539 100644 GIT binary patch literal 84038 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�uvTXObTs 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 literal 13740 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 Date: Fri, 7 Nov 2025 12:49:54 +0900 Subject: [PATCH 108/116] [BOOK-427] refactor: suspendCancellableCoroutine -> await --- .../DefaultRemoteConfigRepository.kt | 40 ++++++++----------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt index a2292c31..7f47a519 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRemoteConfigRepository.kt @@ -3,40 +3,32 @@ package com.ninecraft.booket.core.data.impl.repository import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.get import com.ninecraft.booket.core.common.utils.isUpdateRequired +import com.ninecraft.booket.core.common.utils.runSuspendCatching import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository import com.ninecraft.booket.core.data.impl.BuildConfig import com.orhanobut.logger.Logger -import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.tasks.await import javax.inject.Inject -import kotlin.coroutines.resume class DefaultRemoteConfigRepository @Inject constructor( private val remoteConfig: FirebaseRemoteConfig, ) : RemoteConfigRepository { - override suspend fun getLatestVersion(): Result = suspendCancellableCoroutine { continuation -> - remoteConfig.fetchAndActivate().addOnCompleteListener { task -> - if (task.isSuccessful) { - val latestVersion = remoteConfig[KEY_LATEST_VERSION].asString() - Logger.d("LatestVersion: $latestVersion") - continuation.resume(Result.success(latestVersion)) - } else { - Logger.e(task.exception, "getLatestVersion failed") - continuation.resume(Result.failure(task.exception ?: Exception("Unknown error"))) - } - } + override suspend fun getLatestVersion(): Result = runSuspendCatching { + remoteConfig.fetchAndActivate().await() + val latestVersion = remoteConfig[KEY_LATEST_VERSION].asString() + Logger.d("LatestVersion: $latestVersion") + latestVersion + }.onFailure { exception -> + Logger.e(exception, "getLatestVersion failed") } - override suspend fun shouldUpdate(): Result = suspendCancellableCoroutine { continuation -> - remoteConfig.fetchAndActivate().addOnCompleteListener { task -> - if (task.isSuccessful) { - val minVersion = remoteConfig[KEY_MIN_VERSION].asString() - val currentVersion = BuildConfig.APP_VERSION - continuation.resume(Result.success(isUpdateRequired(currentVersion, minVersion))) - } else { - Logger.e(task.exception, "shouldUpdate: getMinVersion failed") - continuation.resume(Result.failure(task.exception ?: Exception("Unknown error"))) - } - } + override suspend fun shouldUpdate(): Result = runSuspendCatching { + remoteConfig.fetchAndActivate().await() + val minVersion = remoteConfig[KEY_MIN_VERSION].asString() + val currentVersion = BuildConfig.APP_VERSION + isUpdateRequired(currentVersion, minVersion) + }.onFailure { exception -> + Logger.e(exception, "shouldUpdate: getMinVersion failed") } companion object { From fdd3317daa2a32181a0bed1e7301d56706282386 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 7 Nov 2025 18:46:57 +0900 Subject: [PATCH 109/116] =?UTF-8?q?[BOOK-430]=20feat:=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=20=EC=8A=A4=ED=8E=99=20=EB=B3=80=EA=B2=BD=20=EC=82=AC=ED=95=AD?= =?UTF-8?q?=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{FcmTokenRequest.kt => DeviceRegistrationRequest.kt} | 4 +++- .../ninecraft/booket/core/network/service/ReedService.kt | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) rename core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/{FcmTokenRequest.kt => DeviceRegistrationRequest.kt} (68%) diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/DeviceRegistrationRequest.kt similarity index 68% rename from core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt rename to core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/DeviceRegistrationRequest.kt index 7ad8220a..be82c4cd 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/FcmTokenRequest.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/request/DeviceRegistrationRequest.kt @@ -4,7 +4,9 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class FcmTokenRequest( +data class DeviceRegistrationRequest( + @SerialName("deviceId") + val deviceId: String, @SerialName("fcmToken") val fcmToken: String, ) diff --git a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt index b6247a64..f3926e64 100644 --- a/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt +++ b/core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt @@ -1,7 +1,7 @@ package com.ninecraft.booket.core.network.service import com.ninecraft.booket.core.network.request.BookUpsertRequest -import com.ninecraft.booket.core.network.request.FcmTokenRequest +import com.ninecraft.booket.core.network.request.DeviceRegistrationRequest import com.ninecraft.booket.core.network.request.LoginRequest import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.RecordRegisterRequest @@ -53,8 +53,8 @@ interface ReedService { @GET("api/v1/users/me") suspend fun getUserProfile(): UserProfileResponse - @PUT("api/v1/users/me/fcm-token") - suspend fun updateFcmToken(@Body fcmTokenRequest: FcmTokenRequest): UserProfileResponse + @PUT("api/v1/users/me/devices") + suspend fun upsertDevice(@Body deviceRegistrationRequest: DeviceRegistrationRequest): UserProfileResponse @PUT("api/v1/users/me/notification-settings") suspend fun updateNotificationSettings(@Body notificationSettingsRequest: NotificationSettingsRequest): UserProfileResponse From 402b547dd401a922f646bfb70768b62ccf04aa9a Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 7 Nov 2025 18:53:11 +0900 Subject: [PATCH 110/116] =?UTF-8?q?[BOOK-430]=20feat:=20deviceId,=20fcmTok?= =?UTF-8?q?en=20=EC=84=9C=EB=B2=84=20=EB=93=B1=EB=A1=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FID(Firebase Installation ID)를 기기 ID로 사용하여 FCM 토큰과 함께 서버에 등록하도록 `upsertDevice` API를 호출하는 로직 추가 --- .../core/data/impl/di/FirebaseModule.kt | 6 +++++ .../impl/repository/DefaultUserRepository.kt | 22 ++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt index 525dce21..9c5f5f65 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/FirebaseModule.kt @@ -1,6 +1,8 @@ package com.ninecraft.booket.core.data.impl.di import com.google.firebase.Firebase +import com.google.firebase.installations.FirebaseInstallations +import com.google.firebase.installations.installations import com.google.firebase.messaging.FirebaseMessaging import com.google.firebase.messaging.messaging import com.google.firebase.remoteconfig.FirebaseRemoteConfig @@ -32,4 +34,8 @@ internal object FirebaseModule { @Singleton @Provides fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging + + @Singleton + @Provides + fun provideFirebaseInstallation(): FirebaseInstallations = Firebase.installations } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 3d915d61..a9c183d8 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -1,12 +1,13 @@ package com.ninecraft.booket.core.data.impl.repository +import com.google.firebase.installations.FirebaseInstallations import com.google.firebase.messaging.FirebaseMessaging import com.ninecraft.booket.core.common.utils.runSuspendCatching import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.core.data.impl.mapper.toModel import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource -import com.ninecraft.booket.core.network.request.FcmTokenRequest +import com.ninecraft.booket.core.network.request.DeviceRegistrationRequest import com.ninecraft.booket.core.network.request.NotificationSettingsRequest import com.ninecraft.booket.core.network.request.TermsAgreementRequest import com.ninecraft.booket.core.network.service.ReedService @@ -21,6 +22,7 @@ internal class DefaultUserRepository @Inject constructor( private val onboardingDataSource: OnboardingDataSource, private val notificationDataSource: NotificationDataSource, private val firebaseMessaging: FirebaseMessaging, + private val firebaseInstallations: FirebaseInstallations, ) : UserRepository { override suspend fun agreeTerms(termsAgreed: Boolean) = runSuspendCatching { service.agreeTerms(TermsAgreementRequest(termsAgreed)).toModel() @@ -45,12 +47,12 @@ internal class DefaultUserRepository @Inject constructor( return@runSuspendCatching } - updateFcmToken(newToken) + registerDevice(newToken) setFcmToken(newToken) } override suspend fun syncFcmToken(fcmToken: String): Result = runSuspendCatching { - updateFcmToken(fcmToken) + registerDevice(fcmToken) setFcmToken(fcmToken) } @@ -88,7 +90,17 @@ internal class DefaultUserRepository @Inject constructor( notificationDataSource.setFcmToken(fcmToken) } - private suspend fun updateFcmToken(fcmToken: String) { - service.updateFcmToken(FcmTokenRequest(fcmToken)) + private suspend fun getDeviceId(): String { + return try { + firebaseInstallations.id.await() + } catch (e: Exception) { + Logger.e("Failed to fetch device ID: ${e.message}") + throw e + } + } + + private suspend fun registerDevice(fcmToken: String) { + val deviceId = getDeviceId() + service.upsertDevice(DeviceRegistrationRequest(deviceId, fcmToken)) } } From 61072dbaa9b13d030cef551025964139c6fe4cd3 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Sat, 8 Nov 2025 18:42:56 +0900 Subject: [PATCH 111/116] =?UTF-8?q?[BOOK-430]=20feat:=20notification=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=A1=9C=EC=A7=81=EC=9D=84=20UserReposito?= =?UTF-8?q?ry=EC=97=90=EC=84=9C=20=EB=8B=B4=EB=8B=B9,=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=95=84=EC=9B=83/=ED=9A=8C=EC=9B=90=ED=83=88=ED=87=B4=20?= =?UTF-8?q?=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EA=B4=80=EB=A0=A8=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=A7=84?= =?UTF-8?q?=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/data/api/repository/UserRepository.kt | 2 ++ .../impl/repository/DefaultAuthRepository.kt | 7 ------- .../impl/repository/DefaultUserRepository.kt | 17 +++++++++++++++++ .../feature/settings/SettingsPresenter.kt | 4 ++++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index f2040ee7..5b17e2fb 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -28,5 +28,7 @@ interface UserRepository { suspend fun setLastNotificationSyncedEnabled(isEnabled: Boolean) + suspend fun resetNotificationData() + suspend fun updateNotificationSettings(notificationEnabled: Boolean): Result } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt index 08cce48c..9e560650 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt @@ -2,7 +2,6 @@ package com.ninecraft.booket.core.data.impl.repository import com.ninecraft.booket.core.common.utils.runSuspendCatching import com.ninecraft.booket.core.data.api.repository.AuthRepository -import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource import com.ninecraft.booket.core.model.AutoLoginState import com.ninecraft.booket.core.model.UserState @@ -16,7 +15,6 @@ private const val KAKAO_PROVIDER_TYPE = "KAKAO" internal class DefaultAuthRepository @Inject constructor( private val service: ReedService, private val tokenDataSource: TokenDataSource, - private val notificationDataSource: NotificationDataSource, ) : AuthRepository { override suspend fun login(accessToken: String) = runSuspendCatching { val response = service.login( @@ -31,7 +29,6 @@ internal class DefaultAuthRepository @Inject constructor( override suspend fun logout() = runSuspendCatching { service.logout() clearTokens() - clearNotificationDataStore() } override suspend fun withdraw() = runSuspendCatching { @@ -64,8 +61,4 @@ internal class DefaultAuthRepository @Inject constructor( val accessToken = tokenDataSource.getAccessToken() return if (accessToken.isBlank()) UserState.Guest else UserState.LoggedIn } - - private suspend fun clearNotificationDataStore() { - notificationDataSource.clearNotificationDataStore() - } } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index a9c183d8..d14db1c4 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -71,6 +71,11 @@ internal class DefaultUserRepository @Inject constructor( notificationDataSource.setLastSyncedNotificationEnabled(isEnabled) } + override suspend fun resetNotificationData() { + deleteRemoteFcmToken() + clearNotificationDataStore() + } + override suspend fun updateNotificationSettings(notificationEnabled: Boolean) = runSuspendCatching { service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel() } @@ -103,4 +108,16 @@ internal class DefaultUserRepository @Inject constructor( val deviceId = getDeviceId() service.upsertDevice(DeviceRegistrationRequest(deviceId, fcmToken)) } + + private suspend fun deleteRemoteFcmToken() { + try { + firebaseMessaging.deleteToken().await() + } catch (e: Exception) { + Logger.e("Failed to delete FCM token: ${e.message}") + } + } + + private suspend fun clearNotificationDataStore() { + notificationDataSource.clearNotificationDataStore() + } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt index eb296d45..003a09bc 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt @@ -10,6 +10,7 @@ import com.ninecraft.booket.core.common.constants.WebViewConstants import com.ninecraft.booket.core.common.utils.handleException import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository +import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.core.model.UserState import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.NotificationScreen @@ -34,6 +35,7 @@ import kotlinx.coroutines.launch class SettingsPresenter @AssistedInject constructor( @Assisted val navigator: Navigator, private val authRepository: AuthRepository, + private val userRepository: UserRepository, private val remoteConfigRepository: RemoteConfigRepository, private val analyticsHelper: AnalyticsHelper, ) : Presenter { @@ -62,6 +64,7 @@ class SettingsPresenter @AssistedInject constructor( isLoading = true authRepository.logout() .onSuccess { + userRepository.resetNotificationData() analyticsHelper.logEvent(SETTINGS_LOGOUT_COMPLETE) navigator.resetRoot(LoginScreen()) } @@ -91,6 +94,7 @@ class SettingsPresenter @AssistedInject constructor( isLoading = true authRepository.withdraw() .onSuccess { + userRepository.resetNotificationData() analyticsHelper.logEvent(SETTINGS_WITHDRAWAL_COMPLETE) navigator.resetRoot(LoginScreen()) } From 962f1c43b0bd8be7fc68a2f2a172d1568f3463ef Mon Sep 17 00:00:00 2001 From: seoyoon Date: Sat, 8 Nov 2025 18:56:03 +0900 Subject: [PATCH 112/116] =?UTF-8?q?[BOOK-430]=20refactor:=20resetNotificat?= =?UTF-8?q?ionData=20=ED=95=A8=EC=88=98=20=EB=82=B4=EB=B6=80=EB=A5=BC=20tr?= =?UTF-8?q?y-catch=EB=A1=9C=20=EA=B0=90=EC=8B=B8=EC=84=9C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=A0=84=ED=8C=8C=20=EB=A7=89=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/api/repository/UserRepository.kt | 4 ++-- .../impl/repository/DefaultUserRepository.kt | 20 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt index 5b17e2fb..20618cc1 100644 --- a/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt +++ b/core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt @@ -28,7 +28,7 @@ interface UserRepository { suspend fun setLastNotificationSyncedEnabled(isEnabled: Boolean) - suspend fun resetNotificationData() - suspend fun updateNotificationSettings(notificationEnabled: Boolean): Result + + suspend fun resetNotificationData() } diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index d14db1c4..8efe5d8f 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -71,15 +71,19 @@ internal class DefaultUserRepository @Inject constructor( notificationDataSource.setLastSyncedNotificationEnabled(isEnabled) } - override suspend fun resetNotificationData() { - deleteRemoteFcmToken() - clearNotificationDataStore() - } - override suspend fun updateNotificationSettings(notificationEnabled: Boolean) = runSuspendCatching { service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel() } + override suspend fun resetNotificationData() { + try { + deleteRemoteFcmToken() + clearNotificationDataStore() + } catch (e: Exception) { + Logger.e("Failed to reset notification data: ${e.message}") + } + } + private suspend fun getRemoteFcmToken(): String { return try { firebaseMessaging.token.await() @@ -110,11 +114,7 @@ internal class DefaultUserRepository @Inject constructor( } private suspend fun deleteRemoteFcmToken() { - try { - firebaseMessaging.deleteToken().await() - } catch (e: Exception) { - Logger.e("Failed to delete FCM token: ${e.message}") - } + firebaseMessaging.deleteToken().await() } private suspend fun clearNotificationDataStore() { From 154724b4604ed3497faffce878b2053688837015 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Thu, 13 Nov 2025 22:48:35 +0900 Subject: [PATCH 113/116] [BOOK-436] chore: app version update versionName: 1.2.0 -> 1.3.0 versionCode: 8 -> 9 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8f3b7db8..53eb5898 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,8 +3,8 @@ minSdk = "28" targetSdk = "35" compileSdk = "35" -versionName = "1.2.0" -versionCode = "8" +versionName = "1.3.0" +versionCode = "9" packageName = "com.ninecraft.booket" ## Android gradle plugin From 329d6dc29b93f81f76ff396edfe89f8e843b62a6 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 14 Nov 2025 13:37:31 +0900 Subject: [PATCH 114/116] =?UTF-8?q?[BOOK-437]=20refactor:=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20sync=20=EC=8B=9C=20=EB=A1=9C=EC=BB=AC=20FCM=20?= =?UTF-8?q?=EA=B0=92=EA=B3=BC=20=EB=B9=84=EA=B5=90=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/repository/DefaultUserRepository.kt | 19 +++++-------------- .../api/datasource/NotificationDataSource.kt | 3 --- .../DefaultNotificationDataSource.kt | 14 -------------- 3 files changed, 5 insertions(+), 31 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index 8efe5d8f..e133f766 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -40,20 +40,11 @@ internal class DefaultUserRepository @Inject constructor( override suspend fun syncFcmToken() = runSuspendCatching { val newToken = getRemoteFcmToken() - val localToken = getLocalFcmToken() - - if (newToken == localToken) { - Logger.d("Skip FCM token sync (already up-to-date)") - return@runSuspendCatching - } - registerDevice(newToken) - setFcmToken(newToken) } override suspend fun syncFcmToken(fcmToken: String): Result = runSuspendCatching { registerDevice(fcmToken) - setFcmToken(fcmToken) } override val isUserNotificationEnabled = notificationDataSource.isUserNotificationEnabled @@ -93,11 +84,11 @@ internal class DefaultUserRepository @Inject constructor( } } - private suspend fun getLocalFcmToken(): String = notificationDataSource.fcmToken.first() - - private suspend fun setFcmToken(fcmToken: String) { - notificationDataSource.setFcmToken(fcmToken) - } +// private suspend fun getLocalFcmToken(): String = notificationDataSource.fcmToken.first() +// +// private suspend fun setFcmToken(fcmToken: String) { +// notificationDataSource.setFcmToken(fcmToken) +// } private suspend fun getDeviceId(): String { return try { diff --git a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt index c659aaca..1298ec07 100644 --- a/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt +++ b/core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/NotificationDataSource.kt @@ -3,9 +3,6 @@ package com.ninecraft.booket.core.datastore.api.datasource import kotlinx.coroutines.flow.Flow interface NotificationDataSource { - val fcmToken: Flow - suspend fun setFcmToken(fcmToken: String) - val isUserNotificationEnabled: Flow suspend fun setUserNotificationEnabled(isEnabled: Boolean) diff --git a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt index c314e19b..22c6d3b4 100644 --- a/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt +++ b/core/datastore/impl/src/main/kotlin/com/ninecraft/booket/core/datastore/impl/datasource/DefaultNotificationDataSource.kt @@ -4,7 +4,6 @@ import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit -import androidx.datastore.preferences.core.stringPreferencesKey import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource import com.ninecraft.booket.core.datastore.impl.di.NotificationDataStore import com.ninecraft.booket.core.datastore.impl.util.handleIOException @@ -15,18 +14,6 @@ import javax.inject.Inject class DefaultNotificationDataSource @Inject constructor( @NotificationDataStore private val dataStore: DataStore, ) : NotificationDataSource { - override val fcmToken: Flow = dataStore.data - .handleIOException() - .map { prefs -> - prefs[FCM_TOKEN] ?: "" - } - - override suspend fun setFcmToken(fcmToken: String) { - dataStore.edit { prefs -> - prefs[FCM_TOKEN] = fcmToken - } - } - override val isUserNotificationEnabled: Flow = dataStore.data .handleIOException() .map { prefs -> @@ -58,7 +45,6 @@ class DefaultNotificationDataSource @Inject constructor( } companion object Companion { - private val FCM_TOKEN = stringPreferencesKey("FCM_TOKEN") private val USER_NOTIFICATION_ENABLED = booleanPreferencesKey("USER_NOTIFICATION_ENABLED") private val LAST_SYNCED_NOTIFICATION_ENABLED = booleanPreferencesKey("LAST_SYNCED_NOTIFICATION_ENABLED") } From 74ea1457fcd76b9eb4c81bc84275eb865c097801 Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 14 Nov 2025 19:57:19 +0900 Subject: [PATCH 115/116] =?UTF-8?q?[BOOK-437]=20refactor:=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EC=84=A4=EC=A0=95=20=EB=8F=99=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=8B=A8=EC=88=9C=ED=99=94=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9C=A0=ED=8B=B8=20=ED=95=A8=EC=88=98=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../booket/core/common/utils/NotificationSyncUtils.kt | 4 ++++ .../com/ninecraft/booket/feature/home/HomePresenter.kt | 10 ++++++---- .../settings/notification/NotificationPresenter.kt | 10 ++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/NotificationSyncUtils.kt diff --git a/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/NotificationSyncUtils.kt b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/NotificationSyncUtils.kt new file mode 100644 index 00000000..213be15e --- /dev/null +++ b/core/common/src/main/kotlin/com/ninecraft/booket/core/common/utils/NotificationSyncUtils.kt @@ -0,0 +1,4 @@ +package com.ninecraft.booket.core.common.utils + +fun shouldSyncNotification(effectiveEnabled: Boolean, lastSynced: Boolean?): Boolean = + lastSynced == null || lastSynced != effectiveEnabled diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt index 62bb118f..3ad31023 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomePresenter.kt @@ -7,6 +7,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.analytics.AnalyticsHelper import com.ninecraft.booket.core.common.utils.handleException +import com.ninecraft.booket.core.common.utils.shouldSyncNotification import com.ninecraft.booket.core.data.api.repository.AuthRepository import com.ninecraft.booket.core.data.api.repository.BookRepository import com.ninecraft.booket.core.data.api.repository.UserRepository @@ -115,14 +116,15 @@ class HomePresenter @AssistedInject constructor( is HomeUiEvent.OnNotificationPermissionResult -> { scope.launch { val isPermissionGranted = event.granted - val userEnabled = userRepository.getUserNotificationEnabled() + val userSettingEnabled = userRepository.getUserNotificationEnabled() val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() - val shouldSync = (!isPermissionGranted && lastSyncedServerEnabled != false) || - (userEnabled && (lastSyncedServerEnabled == null || lastSyncedServerEnabled != isPermissionGranted)) + val effectiveNotificationEnabled = userSettingEnabled && isPermissionGranted + + val shouldSync = shouldSyncNotification(effectiveNotificationEnabled, lastSyncedServerEnabled) if (shouldSync) { - syncNotificationSettings(isPermissionGranted) + syncNotificationSettings(effectiveNotificationEnabled) } } } diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt index aa8fd1a9..7152080b 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.ninecraft.booket.core.common.utils.handleException +import com.ninecraft.booket.core.common.utils.shouldSyncNotification import com.ninecraft.booket.core.data.api.repository.UserRepository import com.ninecraft.booket.feature.screens.LoginScreen import com.ninecraft.booket.feature.screens.NotificationScreen @@ -92,14 +93,15 @@ class NotificationPresenter @AssistedInject constructor( is NotificationUiEvent.OnNotificationPermissionResult -> { scope.launch { val isPermissionGranted = event.granted - val userEnabled = userRepository.getUserNotificationEnabled() + val userSettingEnabled = userRepository.getUserNotificationEnabled() val lastSyncedServerEnabled = userRepository.getLastSyncedNotificationEnabled() - val shouldSync = (!isPermissionGranted && lastSyncedServerEnabled != false) || - (userEnabled && (lastSyncedServerEnabled == null || lastSyncedServerEnabled != isPermissionGranted)) + val effectiveNotificationEnabled = userSettingEnabled && isPermissionGranted + + val shouldSync = shouldSyncNotification(effectiveNotificationEnabled, lastSyncedServerEnabled) if (shouldSync) { - syncNotificationSettings(isPermissionGranted) + syncNotificationSettings(effectiveNotificationEnabled) } } } From f54d6e0209bdb285e219557b8b039741c2c171ff Mon Sep 17 00:00:00 2001 From: seoyoon Date: Fri, 14 Nov 2025 21:26:00 +0900 Subject: [PATCH 116/116] =?UTF-8?q?[BOOK-437]=20chore:=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=B2=98=EB=A6=AC=EB=90=9C=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/data/impl/repository/DefaultUserRepository.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt index e133f766..22954832 100644 --- a/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt +++ b/core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt @@ -84,12 +84,6 @@ internal class DefaultUserRepository @Inject constructor( } } -// private suspend fun getLocalFcmToken(): String = notificationDataSource.fcmToken.first() -// -// private suspend fun setFcmToken(fcmToken: String) { -// notificationDataSource.setFcmToken(fcmToken) -// } - private suspend fun getDeviceId(): String { return try { firebaseInstallations.id.await()