From cec7bc3e5333885c3eb4e1b9b885131e45d6ed61 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sun, 23 Aug 2026 03:55:37 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat(setting):=20FAQ=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EB=B0=8F=20=ED=8E=BC=EC=B9=A8=20=ED=95=AD=EB=AA=A9=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../setting/presentation/screen/FaqScreen.kt | 129 ++++++++++++++++++ .../src/main/res/values/strings.xml | 2 + 2 files changed, 131 insertions(+) create mode 100644 feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreen.kt diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreen.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreen.kt new file mode 100644 index 0000000000..882a7b0fe5 --- /dev/null +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreen.kt @@ -0,0 +1,129 @@ +package com.afternote.feature.setting.presentation.screen + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.afternote.core.ui.theme.AfternoteDesign +import com.afternote.core.ui.theme.AfternoteTheme +import com.afternote.core.ui.topbar.DetailTopBar +import com.afternote.feature.setting.presentation.R +import com.afternote.core.ui.R as CoreUiR + +@Composable +fun FaqScreen( + onBackClick: () -> Unit, + modifier: Modifier = Modifier, +) { + var expanded by rememberSaveable { mutableStateOf(false) } + + Scaffold( + modifier = modifier, + topBar = { + DetailTopBar( + title = stringResource(R.string.settings_support_faq), + onBackClick = onBackClick, + ) + }, + containerColor = AfternoteDesign.colors.gray1, + ) { innerPadding -> + LazyColumn( + modifier = + Modifier + .fillMaxSize() + .padding(innerPadding), + ) { + item { + FaqItem( + question = stringResource(R.string.faq_default_question), + answer = stringResource(R.string.faq_default_answer), + expanded = expanded, + onClick = { expanded = !expanded }, + ) + } + } + } +} + +@Composable +private fun FaqItem( + question: String, + answer: String, + expanded: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Column( + modifier = + modifier + .fillMaxWidth() + .background(AfternoteDesign.colors.white), + ) { + Row( + modifier = + Modifier + .fillMaxWidth() + .clickable(onClick = onClick) + .padding(horizontal = 20.dp, vertical = 18.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = question, + modifier = Modifier.weight(1f), + style = AfternoteDesign.typography.bodyBase, + color = AfternoteDesign.colors.gray9, + ) + Icon( + painter = painterResource(CoreUiR.drawable.core_ui_arrowdown), + contentDescription = null, + modifier = + Modifier + .size(24.dp) + .rotate(if (expanded) 180f else 0f), + tint = AfternoteDesign.colors.gray7, + ) + } + if (expanded) { + Text( + text = answer, + modifier = + Modifier + .fillMaxWidth() + .background(AfternoteDesign.colors.gray1) + .padding(horizontal = 20.dp, vertical = 18.dp), + style = AfternoteDesign.typography.bodySmallR, + color = AfternoteDesign.colors.gray7, + ) + } + HorizontalDivider(color = AfternoteDesign.colors.gray2) + } +} + +@Preview(showBackground = true) +@Composable +private fun FaqScreenPreview() { + AfternoteTheme { + FaqScreen(onBackClick = {}) + } +} diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index 94824b058f..c5c2ab58ab 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -22,6 +22,8 @@ 앱 잠금 설정 FAQ + 비밀번호를 잊어버렸어요. + 로그인 화면의 '비밀번호 찾기'를 통해 재설정할 수 있습니다. 고객센터 공지사항 등록된 공지사항이 없어요. From 9f0e31490a82823acf403bf7559fa46b581c75b0 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sat, 5 Sep 2026 15:09:25 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix(setting):=20FAQ=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=9D=84=20=EC=8B=A4=EC=A0=9C=20=EB=82=B4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=EC=97=90=20=EC=97=B0=EA=B2=B0=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EC=9D=B4=EC=8A=A4?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=ED=94=84=EB=A5=BC=20=EA=B3=A0=EC=B9=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - develop의 SettingNavGraph는 FaqScreen이 없어 onFaqClick = {} 로 죽은 버튼 상태였다 (NoOpCallbackDefaultKonsistTest #1388 이 경계하는 패턴). SettingRoute.FaqRoute를 추가하고 실제 네비게이션으로 연결한다. - faq_default_answer의 이스케이프되지 않은 작은따옴표가 aapt2 리소스 컴파일을 깨뜨리고 있어 \' 로 이스케이프한다. Co-Authored-By: Claude Sonnet 5 --- .../afternote_fe/navigation/AppNavigationActions.kt | 8 ++++++++ .../setting/presentation/navigation/SettingNavActions.kt | 4 ++++ .../setting/presentation/navigation/SettingNavGraph.kt | 9 ++++++++- .../setting/presentation/navigation/SettingRoute.kt | 3 +++ .../setting/presentation/src/main/res/values/strings.xml | 2 +- 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt b/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt index 29ade94ed6..35925f82e9 100644 --- a/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt +++ b/app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigationActions.kt @@ -356,6 +356,14 @@ fun rememberSettingNavActions(appState: AppState): SettingNavActions = override fun onNoticeBack() { appState.navController.popBackStack() } + + override fun onNavigateToFaq() { + appState.navController.navigate(SettingRoute.FaqRoute) + } + + override fun onFaqBack() { + appState.navController.popBackStack() + } } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt index 44bef11258..b2c2e27079 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavActions.kt @@ -64,4 +64,8 @@ interface SettingNavActions { fun onNavigateToNotice() fun onNoticeBack() + + fun onNavigateToFaq() + + fun onFaqBack() } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt index c47d60b995..2c4781c962 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingNavGraph.kt @@ -14,6 +14,7 @@ import com.afternote.feature.setting.presentation.component.PinSetupStep import com.afternote.feature.setting.presentation.screen.AppLockSetupScreen import com.afternote.feature.setting.presentation.screen.ConnectedAccountsScreen import com.afternote.feature.setting.presentation.screen.DeliveryConditionScreen +import com.afternote.feature.setting.presentation.screen.FaqScreen import com.afternote.feature.setting.presentation.screen.NoticeListScreen import com.afternote.feature.setting.presentation.screen.PassKeyListScreen import com.afternote.feature.setting.presentation.screen.PassKeyMakingScreen @@ -51,7 +52,7 @@ fun NavGraphBuilder.settingNavGraph( }, onPasskeyClick = actions::onNavigateToPasskey, onAppLockClick = actions::onNavigateToAppLock, - onFaqClick = {}, + onFaqClick = actions::onNavigateToFaq, onInquiryClick = {}, onNoticeClick = actions::onNavigateToNotice, onTermsClick = {}, @@ -187,5 +188,11 @@ fun NavGraphBuilder.settingNavGraph( onBackClick = actions::onNoticeBack, ) } + + composable { + FaqScreen( + onBackClick = actions::onFaqBack, + ) + } } } diff --git a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt index 898cb15077..8abba3f9fa 100644 --- a/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt +++ b/feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/navigation/SettingRoute.kt @@ -53,4 +53,7 @@ sealed interface SettingRoute { @Serializable data object NoticeRoute : SettingRoute + + @Serializable + data object FaqRoute : SettingRoute } diff --git a/feature/setting/presentation/src/main/res/values/strings.xml b/feature/setting/presentation/src/main/res/values/strings.xml index 1a29fe7e53..f8295b975e 100644 --- a/feature/setting/presentation/src/main/res/values/strings.xml +++ b/feature/setting/presentation/src/main/res/values/strings.xml @@ -22,7 +22,7 @@ FAQ 비밀번호를 잊어버렸어요. - 로그인 화면의 '비밀번호 찾기'를 통해 재설정할 수 있습니다. + 로그인 화면의 \'비밀번호 찾기\'를 통해 재설정할 수 있습니다. 고객센터 공지사항 등록된 공지사항이 없어요. From 870ec90d9b0c7562bc6fc44d2129d09a35be65fe Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sat, 5 Sep 2026 15:40:19 +0900 Subject: [PATCH 3/5] =?UTF-8?q?test(setting):=20FaqScreen=EC=97=90=20?= =?UTF-8?q?=EC=83=81=ED=98=B8=EC=9E=91=EC=9A=A9=C2=B7=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=B0=EC=83=B7=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 질문 클릭 시 답변 토글, 뒤로가기 콜백 호출을 검증하는 Robolectric 테스트. - 다른 setting 화면들과 동일하게 기본/컴팩트 스크린샷 테스트도 추가한다. Co-Authored-By: Claude Sonnet 5 --- .../screen/FaqScreenScreenshotTest.kt | 28 +++++++++ .../setting/presentation/FaqScreenTest.kt | 60 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTest.kt create mode 100644 feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/FaqScreenTest.kt diff --git a/feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTest.kt b/feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTest.kt new file mode 100644 index 0000000000..826e6b3061 --- /dev/null +++ b/feature/setting/presentation/src/screenshotTest/kotlin/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTest.kt @@ -0,0 +1,28 @@ +package com.afternote.feature.setting.presentation.screen + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import com.afternote.core.ui.theme.AfternoteTheme +import com.afternote.feature.setting.presentation.COMPACT_DEVICE_SPEC +import com.android.tools.screenshot.PreviewTest + +@PreviewTest +@Preview(showBackground = true) +@Composable +internal fun faqScreenScreenshot() { + FaqScreenScreenshotContent() +} + +@PreviewTest +@Preview(showBackground = true, device = COMPACT_DEVICE_SPEC) +@Composable +internal fun faqScreenCompactScreenshot() { + FaqScreenScreenshotContent() +} + +@Composable +private fun FaqScreenScreenshotContent() { + AfternoteTheme { + FaqScreen(onBackClick = {}) + } +} diff --git a/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/FaqScreenTest.kt b/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/FaqScreenTest.kt new file mode 100644 index 0000000000..495f0a4a36 --- /dev/null +++ b/feature/setting/presentation/src/test/kotlin/com/afternote/feature/setting/presentation/FaqScreenTest.kt @@ -0,0 +1,60 @@ +package com.afternote.feature.setting.presentation + +import androidx.compose.ui.test.assertCountEquals +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.v2.createComposeRule +import androidx.compose.ui.test.onAllNodesWithText +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import com.afternote.core.ui.theme.AfternoteTheme +import com.afternote.feature.setting.presentation.screen.FaqScreen +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode + +private const val QUESTION = "비밀번호를 잊어버렸어요." +private const val ANSWER = "로그인 화면의 '비밀번호 찾기'를 통해 재설정할 수 있습니다." + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(sdk = [35]) +class FaqScreenTest { + @get:Rule + val composeRule = createComposeRule() + + @Test + fun answer_isHiddenUntilQuestionRowIsClicked_thenToggleHidesItAgain() { + composeRule.setContent { + AfternoteTheme { + FaqScreen(onBackClick = {}) + } + } + + composeRule.onAllNodesWithText(ANSWER).assertCountEquals(0) + + composeRule.onNodeWithText(QUESTION).performClick() + composeRule.onNodeWithText(ANSWER).assertIsDisplayed() + + composeRule.onNodeWithText(QUESTION).performClick() + composeRule.onAllNodesWithText(ANSWER).assertCountEquals(0) + } + + @Test + fun backClick_invokesOnBackClick() { + var backClicked = false + composeRule.setContent { + AfternoteTheme { + FaqScreen(onBackClick = { backClicked = true }) + } + } + + composeRule.onNodeWithContentDescription("뒤로가기").performClick() + + assertTrue(backClicked) + } +} From d25788aa7eadd9b050bdc4d840ed38b369b0dd35 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sat, 5 Sep 2026 16:19:47 +0900 Subject: [PATCH 4/5] =?UTF-8?q?test(setting):=20FaqScreen=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=B0=EC=83=B7=20=EB=A0=88=ED=8D=BC=EB=9F=B0?= =?UTF-8?q?=EC=8A=A4=20=EC=9D=B4=EB=AF=B8=EC=A7=80=EB=A5=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI Screenshot 검증이 새 FaqScreenScreenshotTest의 레퍼런스 이미지가 없어 ScreenshotImageNotFoundException으로 실패했다. updateDebugScreenshotTest로 생성한 기본/컴팩트 baseline을 커밋한다. Co-Authored-By: Claude Sonnet 5 --- .../faqScreenCompactScreenshot_c2abd7e6_0.png | Bin 0 -> 13886 bytes .../faqScreenScreenshot_748aa731_0.png | Bin 0 -> 23404 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTestKt/faqScreenCompactScreenshot_c2abd7e6_0.png create mode 100644 feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTestKt/faqScreenScreenshot_748aa731_0.png diff --git a/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTestKt/faqScreenCompactScreenshot_c2abd7e6_0.png b/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTestKt/faqScreenCompactScreenshot_c2abd7e6_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d92c23b5f4ebfbf442459d25930bce4638771e68 GIT binary patch literal 13886 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 J>^=F<{{k7qhaCU_ literal 0 HcmV?d00001 diff --git a/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTestKt/faqScreenScreenshot_748aa731_0.png b/feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/FaqScreenScreenshotTestKt/faqScreenScreenshot_748aa731_0.png new file mode 100644 index 0000000000000000000000000000000000000000..0347f3c74675b67b7431a22421e937c5bb8ef6f0 GIT binary patch literal 23404 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 literal 0 HcmV?d00001 From 661b7f07e09a9614e43414d9d03daf71f16bd8b6 Mon Sep 17 00:00:00 2001 From: kyungmin Date: Sat, 5 Sep 2026 16:28:19 +0900 Subject: [PATCH 5/5] =?UTF-8?q?test(app):=20FAQ=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EB=B0=B0=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EC=8B=A4=EC=A0=9C=20NavHost=EB=A1=9C=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SettingNavGraph.kt·AppNavigationActions.kt가 navigation 패키지 파일이라 CI 정책상 androidTest.mode=selected가 필요하다. FAQ 메뉴 클릭 시 SettingRoute.FaqRoute로 이동하고 뒤로가기로 SettingHomeRoute에 복귀하는지 검증하는 계측 테스트를 추가한다. Co-Authored-By: Claude Sonnet 5 --- .../SettingImplementedCoverageAndroidTest.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt b/app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt index e1234b7ca5..5d8dc29f72 100644 --- a/app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt +++ b/app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.test.captureToImage import androidx.compose.ui.test.hasScrollAction import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onRoot import androidx.compose.ui.test.performClick @@ -144,6 +145,27 @@ class SettingImplementedCoverageAndroidTest { .assertIsDisplayed() } + @Test + fun actualSettingNavHost_faqRowNavigatesToFaqScreenAndBackReturnsHome() { + waitForSettingHomeContent() + composeRule + .onNode(hasScrollAction()) + .performScrollToNode(hasText("FAQ")) + composeRule + .onNodeWithText("FAQ") + .performClick() + + waitForRoute() + composeRule + .onNodeWithText("비밀번호를 잊어버렸어요.") + .assertIsDisplayed() + + composeRule + .onNodeWithContentDescription("뒤로가기") + .performClick() + waitForRoute() + } + private fun openWithdrawGuide() { waitForSettingHomeContent() composeRule