diff --git a/app/src/main/java/com/example/slowclock/navigation/AppNavigation.kt b/app/src/main/java/com/example/slowclock/navigation/AppNavigation.kt index ba4bc152..7c45c652 100644 --- a/app/src/main/java/com/example/slowclock/navigation/AppNavigation.kt +++ b/app/src/main/java/com/example/slowclock/navigation/AppNavigation.kt @@ -165,6 +165,7 @@ fun AppNavigation( } entry { RecommendationScreen( + onNavigateBack = { backStack.popBack() }, onSelectRecommendation = { title -> recommendation = ScheduleRecommendation.selected(backStack, title) backStack.popBack() diff --git a/feature/main/src/main/java/com/example/slowclock/ui/main/MainScreen.kt b/feature/main/src/main/java/com/example/slowclock/ui/main/MainScreen.kt index e61a7665..88426d57 100644 --- a/feature/main/src/main/java/com/example/slowclock/ui/main/MainScreen.kt +++ b/feature/main/src/main/java/com/example/slowclock/ui/main/MainScreen.kt @@ -221,7 +221,7 @@ internal fun MainContent( IconButton(onClick = onNavigateToSettings, modifier = Modifier.size(56.dp)) { Icon( Icons.Outlined.Settings, - contentDescription = "설정", + contentDescription = stringResource(R.string.share_code_settings_description), tint = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.size(30.dp), ) diff --git a/feature/main/src/main/java/com/example/slowclock/ui/settings/SettingsScreenShareCode.kt b/feature/main/src/main/java/com/example/slowclock/ui/settings/SettingsScreenShareCode.kt index 4d8f09de..35c5d0c4 100644 --- a/feature/main/src/main/java/com/example/slowclock/ui/settings/SettingsScreenShareCode.kt +++ b/feature/main/src/main/java/com/example/slowclock/ui/settings/SettingsScreenShareCode.kt @@ -4,22 +4,27 @@ import androidx.compose.foundation.layout.Arrangement 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.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment 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 androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.example.slowclock.feature.main.R import com.example.slowclock.ui.mvi.ObserveSignal /** 공유 코드 입력 화면(stateful). 저장이 끝나면 [onReturn] 으로 돌아간다. */ @@ -37,7 +42,7 @@ fun SettingsScreenShareCode( onIntent = viewModel::onIntent, ) { onReturn() } - ShareCodeContent(state = state, onIntent = viewModel::onIntent, modifier = modifier) + ShareCodeContent(state = state, onIntent = viewModel::onIntent, onReturn = onReturn, modifier = modifier) } /** 공유 코드 입력 화면(stateless). */ @@ -45,6 +50,7 @@ fun SettingsScreenShareCode( internal fun ShareCodeContent( state: ShareCodeUiState, onIntent: (ShareCodeIntent) -> Unit, + onReturn: () -> Unit, modifier: Modifier = Modifier, ) { Column( @@ -86,6 +92,13 @@ internal fun ShareCodeContent( }, ) } + Spacer(modifier = Modifier.height(12.dp)) + OutlinedButton( + onClick = onReturn, + modifier = Modifier.fillMaxWidth().heightIn(min = 56.dp), + ) { + Text(stringResource(R.string.share_code_back_without_saving), textAlign = TextAlign.Center) + } // 등록이 곧 읽기 권한이라, 실패를 알리지 않으면 가족 일정이 왜 비어 있는지 알 수 없다(#174). if (state.saveError != null) { Spacer(modifier = Modifier.height(16.dp)) diff --git a/feature/main/src/main/res/values/navigation_strings.xml b/feature/main/src/main/res/values/navigation_strings.xml new file mode 100644 index 00000000..95b81caa --- /dev/null +++ b/feature/main/src/main/res/values/navigation_strings.xml @@ -0,0 +1,4 @@ + + 공유 코드 설정 + 저장하지 않고 돌아가기 + diff --git a/feature/main/src/screenshotTest/java/com/example/slowclock/ui/settings/ShareCodeScreenshotTest.kt b/feature/main/src/screenshotTest/java/com/example/slowclock/ui/settings/ShareCodeScreenshotTest.kt index bf16e773..07e6fe13 100644 --- a/feature/main/src/screenshotTest/java/com/example/slowclock/ui/settings/ShareCodeScreenshotTest.kt +++ b/feature/main/src/screenshotTest/java/com/example/slowclock/ui/settings/ShareCodeScreenshotTest.kt @@ -10,7 +10,7 @@ import com.example.slowclock.ui.theme.SlowClockTheme @Composable internal fun ShareCodeClearScreenshot() { SlowClockTheme(darkTheme = false) { - ShareCodeContent(state = ShareCodeUiState(hasRegisteredCode = true), onIntent = {}) + ShareCodeContent(state = ShareCodeUiState(hasRegisteredCode = true), onIntent = {}, onReturn = {}) } } @@ -26,6 +26,7 @@ internal fun ShareCodeClearFailedScreenshot() { saveError = "공유 설정을 해제하지 못했습니다. 기존 코드는 유지됩니다. 인터넷에 연결한 뒤 다시 눌러 주세요.", ), onIntent = {}, + onReturn = {}, ) } } diff --git "a/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearFailedScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234 \354\213\244\355\214\250_ffe4b9c0_0.png" "b/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearFailedScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234 \354\213\244\355\214\250_ffe4b9c0_0.png" index c9a42968..2455e164 100644 Binary files "a/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearFailedScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234 \354\213\244\355\214\250_ffe4b9c0_0.png" and "b/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearFailedScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234 \354\213\244\355\214\250_ffe4b9c0_0.png" differ diff --git "a/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234_3c55fac3_0.png" "b/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234_3c55fac3_0.png" index 4ed5e5dd..3ba13581 100644 Binary files "a/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234_3c55fac3_0.png" and "b/feature/main/src/screenshotTestDebug/reference/com/example/slowclock/ui/settings/ShareCodeScreenshotTestKt/ShareCodeClearScreenshot_\352\263\265\354\234\240 \354\275\224\353\223\234 \355\225\264\354\240\234_3c55fac3_0.png" differ diff --git a/feature/recommendation/src/main/java/com/example/slowclock/ui/recommendation/RecommendationScreen.kt b/feature/recommendation/src/main/java/com/example/slowclock/ui/recommendation/RecommendationScreen.kt index b8c46371..155e3252 100644 --- a/feature/recommendation/src/main/java/com/example/slowclock/ui/recommendation/RecommendationScreen.kt +++ b/feature/recommendation/src/main/java/com/example/slowclock/ui/recommendation/RecommendationScreen.kt @@ -2,7 +2,7 @@ package com.example.slowclock.ui.recommendation import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -17,8 +18,11 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue 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.example.slowclock.data.model.Recommendation +import com.example.slowclock.feature.recommendation.R import com.example.slowclock.ui.common.components.ScreenHeader import com.example.slowclock.ui.recommendation.components.RecommendationList @@ -63,6 +67,7 @@ private val allRecommendations = @Composable fun RecommendationScreen( onSelectRecommendation: (String) -> Unit, + onNavigateBack: () -> Unit, modifier: Modifier = Modifier, ) { var group by rememberSaveable { mutableStateOf(RecommendationGroup.ELDERLY) } @@ -76,9 +81,17 @@ fun RecommendationScreen( ) { ScreenHeader(title = "추천 일정", subtitle = "고르면 일정 제목으로 들어갑니다") - Row( + OutlinedButton( + onClick = onNavigateBack, + modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp).heightIn(min = 56.dp), + ) { + Text(stringResource(R.string.recommendation_back_without_selection), textAlign = TextAlign.Center) + } + + FlowRow( modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), ) { RecommendationGroup.entries.forEach { entry -> FilterChip( diff --git a/feature/recommendation/src/main/res/values/navigation_strings.xml b/feature/recommendation/src/main/res/values/navigation_strings.xml new file mode 100644 index 00000000..81c474a7 --- /dev/null +++ b/feature/recommendation/src/main/res/values/navigation_strings.xml @@ -0,0 +1,3 @@ + + 고르지 않고 돌아가기 +