From b70c7b076bd4fc97158f8a24461ea0afe65928d2 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Thu, 13 Aug 2026 00:54:48 +0900 Subject: [PATCH 01/34] =?UTF-8?q?feat:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20archive?= =?UTF-8?q?=20=EB=AA=A8=EB=93=88=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../com/gamss/android/app/main/MainScreen.kt | 8 +- .../app/navigation/TopLevelDestination.kt | 4 +- feature/calendar/build.gradle.kts | 6 +- .../ExampleInstrumentedTest.kt | 6 +- .../android/feature/archive/ArchiveScreen.kt | 152 ++++++++++++++++++ .../navigation/ArchiveKey.kt} | 4 +- .../feature/calendar/CalendarScreen.kt | 50 ------ .../feature/calendar/CalendarSideEffect.kt | 3 - .../android/feature/calendar/CalendarState.kt | 8 - .../feature/calendar/CalendarViewModel.kt | 23 --- .../calendar/component/CalendarDayCell.kt | 77 --------- .../component/CalendarMonthNavigator.kt | 56 ------- .../calendar/component/CalendarText.kt | 22 --- .../calendar/component/DaysOfWeekHeader.kt | 44 ----- .../calendar/component/MonthCalendar.kt | 75 --------- .../drawable-nodpi/worry_bin_anger_body.png | Bin 0 -> 14252 bytes .../drawable-nodpi/worry_bin_anger_note.png | Bin 0 -> 17610 bytes .../drawable-nodpi/worry_bin_anxiety_body.png | Bin 0 -> 14066 bytes .../drawable-nodpi/worry_bin_anxiety_note.png | Bin 0 -> 16367 bytes .../res/drawable-nodpi/worry_bin_joy_body.png | Bin 0 -> 14583 bytes .../res/drawable-nodpi/worry_bin_joy_note.png | Bin 0 -> 12475 bytes .../drawable-nodpi/worry_bin_prickly_body.png | Bin 0 -> 14859 bytes .../drawable-nodpi/worry_bin_prickly_note.png | Bin 0 -> 16281 bytes .../drawable-nodpi/worry_bin_quirky_body.png | Bin 0 -> 14384 bytes .../drawable-nodpi/worry_bin_quirky_note.png | Bin 0 -> 16606 bytes .../res/drawable-nodpi/worry_bin_sad_body.png | Bin 0 -> 14181 bytes .../res/drawable-nodpi/worry_bin_sad_note.png | Bin 0 -> 12736 bytes .../{calendar => archive}/ExampleUnitTest.kt | 2 +- .../drawable-nodpi/worry_bin_anger_body.png | Bin 0 -> 14252 bytes .../drawable-nodpi/worry_bin_anger_note.png | Bin 0 -> 17610 bytes .../drawable-nodpi/worry_bin_anxiety_body.png | Bin 0 -> 14066 bytes .../drawable-nodpi/worry_bin_anxiety_note.png | Bin 0 -> 16367 bytes .../res/drawable-nodpi/worry_bin_joy_body.png | Bin 0 -> 14583 bytes .../res/drawable-nodpi/worry_bin_joy_note.png | Bin 0 -> 12475 bytes .../drawable-nodpi/worry_bin_prickly_body.png | Bin 0 -> 14859 bytes .../drawable-nodpi/worry_bin_prickly_note.png | Bin 0 -> 16281 bytes .../drawable-nodpi/worry_bin_quirky_body.png | Bin 0 -> 14384 bytes .../drawable-nodpi/worry_bin_quirky_note.png | Bin 0 -> 16606 bytes .../res/drawable-nodpi/worry_bin_sad_body.png | Bin 0 -> 14181 bytes .../res/drawable-nodpi/worry_bin_sad_note.png | Bin 0 -> 12736 bytes .../src/main/res/raw/worry_bin_anger_body.svg | 6 + .../src/main/res/raw/worry_bin_anger_note.svg | 9 ++ .../main/res/raw/worry_bin_anxiety_body.svg | 6 + .../main/res/raw/worry_bin_anxiety_note.svg | 9 ++ .../src/main/res/raw/worry_bin_joy_body.svg | 6 + .../src/main/res/raw/worry_bin_joy_note.svg | 8 + .../main/res/raw/worry_bin_prickly_body.svg | 6 + .../main/res/raw/worry_bin_prickly_note.svg | 9 ++ .../main/res/raw/worry_bin_quirky_body.svg | 6 + .../main/res/raw/worry_bin_quirky_note.svg | 9 ++ .../src/main/res/raw/worry_bin_sad_body.svg | 6 + .../src/main/res/raw/worry_bin_sad_note.svg | 6 + settings.gradle.kts | 4 +- 54 files changed, 256 insertions(+), 376 deletions(-) rename feature/calendar/src/androidTest/java/com/gamss/android/feature/{calendar => archive}/ExampleInstrumentedTest.kt (81%) create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt rename feature/calendar/src/main/java/com/gamss/android/feature/{calendar/navigation/CalendarKey.kt => archive/navigation/ArchiveKey.kt} (53%) delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarScreen.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarSideEffect.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarState.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarViewModel.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarDayCell.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarMonthNavigator.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarText.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/DaysOfWeekHeader.kt delete mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/MonthCalendar.kt create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_body.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_body.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_body.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_body.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_body.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_note.png rename feature/calendar/src/test/java/com/gamss/android/feature/{calendar => archive}/ExampleUnitTest.kt (88%) create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anger_body.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anger_note.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_note.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_joy_body.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_joy_note.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_body.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_note.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_body.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_note.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_sad_body.png create mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_sad_note.png create mode 100644 feature/home/src/main/res/raw/worry_bin_anger_body.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_anger_note.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_anxiety_body.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_anxiety_note.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_joy_body.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_joy_note.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_prickly_body.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_prickly_note.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_quirky_body.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_quirky_note.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_sad_body.svg create mode 100644 feature/home/src/main/res/raw/worry_bin_sad_note.svg diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f8a45a23..7c8eaf6f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,7 +89,7 @@ dependencies { implementation(projects.core.designsystem) implementation(projects.feature.home) implementation(projects.feature.chat) - implementation(projects.feature.calendar) + implementation(projects.feature.archive) implementation(projects.feature.login) implementation(projects.feature.setting) implementation(projects.feature.webview) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index 90dc8f2d..925ae1d0 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -26,8 +26,8 @@ import com.gamss.android.app.navigation.visibleIn import com.gamss.android.core.designsystem.component.GamssBottomBar import com.gamss.android.core.designsystem.component.GamssPaperBackground import com.gamss.android.core.designsystem.theme.GamssTheme -import com.gamss.android.feature.calendar.CalendarScreen -import com.gamss.android.feature.calendar.navigation.CalendarKey +import com.gamss.android.feature.archive.ArchiveScreen +import com.gamss.android.feature.archive.navigation.ArchiveKey import com.gamss.android.feature.chat.ChatRoomScreen import com.gamss.android.feature.chat.ChattingListScreen import com.gamss.android.feature.chat.navigation.ChatKey @@ -99,7 +99,9 @@ private fun mainEntryProvider(navigator: Navigator) = entryProvider { onOpenConversation = { conversationId -> navigator.navigate(ChatRoomKey(conversationId)) }, ) } - entry { CalendarScreen() } + entry { + ArchiveScreen(onNavigateToSetting = { navigator.navigate(SettingKey) }) + } entry { SettingScreen( onBackClick = navigator::goBack, diff --git a/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt index 394cdd55..f5da2e47 100644 --- a/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt @@ -8,7 +8,7 @@ import androidx.navigation3.runtime.NavKey import com.gamss.android.app.R import com.gamss.android.core.designsystem.component.GamssBottomBarItem import com.gamss.android.core.designsystem.component.GamssIcons -import com.gamss.android.feature.calendar.navigation.CalendarKey +import com.gamss.android.feature.archive.navigation.ArchiveKey import com.gamss.android.feature.chat.navigation.ChatKey import com.gamss.android.feature.home.navigation.HomeKey @@ -29,7 +29,7 @@ data class TopLevelDestination( */ fun topLevelDestinations(): List = listOf( TopLevelDestination( - key = CalendarKey, + key = ArchiveKey, iconRes = GamssIcons.TabArchive, labelRes = R.string.tab_archive, requiresCardFeature = true, diff --git a/feature/calendar/build.gradle.kts b/feature/calendar/build.gradle.kts index 3c16e441..97c71ddf 100644 --- a/feature/calendar/build.gradle.kts +++ b/feature/calendar/build.gradle.kts @@ -3,14 +3,10 @@ plugins { } android { - namespace = "com.gamss.android.feature.calendar" + namespace = "com.gamss.android.feature.archive" } dependencies { implementation(projects.core.ui) - - implementation(libs.calendar.compose) { - exclude(group = "androidx.compose.ui", module = "ui-tooling") - } implementation(libs.compose.material.icons.core) } diff --git a/feature/calendar/src/androidTest/java/com/gamss/android/feature/calendar/ExampleInstrumentedTest.kt b/feature/calendar/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt similarity index 81% rename from feature/calendar/src/androidTest/java/com/gamss/android/feature/calendar/ExampleInstrumentedTest.kt rename to feature/calendar/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt index 5e78716e..e82b17c5 100644 --- a/feature/calendar/src/androidTest/java/com/gamss/android/feature/calendar/ExampleInstrumentedTest.kt +++ b/feature/calendar/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package com.gamss.android.feature.calendar +package com.gamss.android.feature.archive import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -19,6 +19,6 @@ class ExampleInstrumentedTest { fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.gamss.android.feature.calendar.test", appContext.packageName) + assertEquals("com.gamss.android.feature.archive.test", appContext.packageName) } -} \ No newline at end of file +} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt new file mode 100644 index 00000000..af4d442f --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -0,0 +1,152 @@ +package com.gamss.android.feature.archive + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.GridItemSpan +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Menu +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.gamss.android.core.designsystem.theme.GamssTheme + +private val archiveItems = listOf( + ArchiveItem("분노", R.drawable.worry_bin_anger_body, R.drawable.worry_bin_anger_note, 0f), + ArchiveItem("기쁨", R.drawable.worry_bin_joy_body, R.drawable.worry_bin_joy_note, 45f), + ArchiveItem("슬픔", R.drawable.worry_bin_sad_body, R.drawable.worry_bin_sad_note, -15f), + ArchiveItem("까칠", R.drawable.worry_bin_prickly_body, R.drawable.worry_bin_prickly_note, -7f), + ArchiveItem("불안", R.drawable.worry_bin_anxiety_body, R.drawable.worry_bin_anxiety_note, 11f), + ArchiveItem("엉뚱", R.drawable.worry_bin_quirky_body, R.drawable.worry_bin_quirky_note, -12f), +) + +@Composable +fun ArchiveScreen( + onNavigateToSetting: () -> Unit, +) { + Scaffold( + containerColor = GamssTheme.colors.white, + topBar = { ArchiveTopBar(onMenuClick = onNavigateToSetting) }, + ) { innerPadding -> + LazyVerticalGrid( + columns = GridCells.Fixed(2), + modifier = Modifier.padding(innerPadding), + contentPadding = androidx.compose.foundation.layout.PaddingValues( + start = 32.dp, + end = 32.dp, + top = 28.dp, + bottom = 24.dp, + ), + horizontalArrangement = Arrangement.spacedBy(24.dp), + verticalArrangement = Arrangement.spacedBy(24.dp), + ) { + item(span = { GridItemSpan(maxLineSpan) }) { + Text( + text = "다시 보고 싶은 쓰레기통을 열어보세요", + modifier = Modifier.fillMaxWidth(), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray950, + ) + } + items(items = archiveItems, key = { it.title }) { item -> + ArchiveCard(item = item) + } + } + } +} + +@Composable +private fun ArchiveTopBar( + onMenuClick: () -> Unit, +) { + Row( + modifier = Modifier + .fillMaxWidth() + .statusBarsPadding() + .padding(horizontal = 20.dp, vertical = 14.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = "GAMSS", + style = GamssTheme.typography.title4.copy( + fontWeight = FontWeight.Bold, + fontFamily = FontFamily.Cursive, + ), + color = GamssTheme.colors.gray950, + ) + IconButton(onClick = onMenuClick) { + Icon( + imageVector = Icons.Filled.Menu, + contentDescription = "설정", + tint = GamssTheme.colors.gray700, + ) + } + } +} + +@Composable +private fun ArchiveCard( + item: ArchiveItem, +) { + Box( + modifier = Modifier + .fillMaxWidth() + .size(width = 140.dp, height = 164.dp), + contentAlignment = Alignment.TopCenter, + ) { + Image( + painter = painterResource(item.bodyRes), + contentDescription = item.title, + modifier = Modifier + .fillMaxWidth() + .align(Alignment.TopCenter), + contentScale = ContentScale.FillWidth, + ) + Text( + text = item.title, + modifier = Modifier.padding(top = 16.dp), + style = GamssTheme.typography.title5, + color = GamssTheme.colors.gray900, + ) + Box( + modifier = Modifier + .padding(top = 52.dp) + .size(width = 60.dp, height = 58.dp) + .rotate(item.noteRotation), + ) { + Image( + painter = painterResource(item.noteRes), + contentDescription = null, + modifier = Modifier.size(width = 60.dp, height = 58.dp), + ) + } + } +} + +private data class ArchiveItem( + val title: String, + @param:DrawableRes val bodyRes: Int, + @param:DrawableRes val noteRes: Int, + val noteRotation: Float, +) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/navigation/CalendarKey.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt similarity index 53% rename from feature/calendar/src/main/java/com/gamss/android/feature/calendar/navigation/CalendarKey.kt rename to feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt index d21aa69e..28f6c2fe 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/navigation/CalendarKey.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt @@ -1,7 +1,7 @@ -package com.gamss.android.feature.calendar.navigation +package com.gamss.android.feature.archive.navigation import androidx.navigation3.runtime.NavKey import kotlinx.serialization.Serializable @Serializable -data object CalendarKey : NavKey +data object ArchiveKey : NavKey diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarScreen.kt deleted file mode 100644 index 9ad0eaa8..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarScreen.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.gamss.android.feature.calendar - -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import com.gamss.android.feature.calendar.component.CalendarDayCell -import com.gamss.android.feature.calendar.component.MonthCalendar -import com.kizitonwose.calendar.core.DayPosition -import org.orbitmvi.orbit.compose.collectAsState -import java.time.YearMonth - -private const val PAST_MONTH_COUNT = 60L -private const val FUTURE_MONTH_COUNT = 12L - -@Composable -fun CalendarScreen( - viewModel: CalendarViewModel = hiltViewModel(), -) { - val state by viewModel.collectAsState() - - val anchorMonth = remember(state.today) { YearMonth.from(state.today) } - val monthRange = remember(anchorMonth) { - anchorMonth.minusMonths(PAST_MONTH_COUNT)..anchorMonth.plusMonths(FUTURE_MONTH_COUNT) - } - - Scaffold { innerPadding -> - MonthCalendar( - monthRange = monthRange, - initialMonth = anchorMonth, - modifier = Modifier - .fillMaxSize() - .padding(innerPadding) - .padding(horizontal = 16.dp), - ) { day -> - val isInCurrentMonth = day.position == DayPosition.MonthDate - CalendarDayCell( - day = day, - isSelected = isInCurrentMonth && day.date == state.selectedDate, - isToday = isInCurrentMonth && day.date == state.today, - onClick = viewModel::selectDate, - ) - } - } -} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarSideEffect.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarSideEffect.kt deleted file mode 100644 index 104161b1..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarSideEffect.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.gamss.android.feature.calendar - -sealed interface CalendarSideEffect diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarState.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarState.kt deleted file mode 100644 index b266ae0e..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarState.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.gamss.android.feature.calendar - -import java.time.LocalDate - -data class CalendarState( - val today: LocalDate, - val selectedDate: LocalDate? = null, -) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarViewModel.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarViewModel.kt deleted file mode 100644 index 41027a02..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/CalendarViewModel.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.gamss.android.feature.calendar - -import androidx.lifecycle.ViewModel -import dagger.hilt.android.lifecycle.HiltViewModel -import org.orbitmvi.orbit.ContainerHost -import org.orbitmvi.orbit.viewmodel.container -import java.time.LocalDate -import javax.inject.Inject - -@HiltViewModel -class CalendarViewModel @Inject constructor() : - ViewModel(), - ContainerHost { - - override val container = container( - CalendarState(today = LocalDate.now()), - ) - - fun selectDate(date: LocalDate) = intent { - val nextSelectedDate = date.takeIf { it != state.selectedDate } - reduce { state.copy(selectedDate = nextSelectedDate) } - } -} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarDayCell.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarDayCell.kt deleted file mode 100644 index 09b40982..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarDayCell.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.gamss.android.feature.calendar.component - -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.aspectRatio -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.selection.selectable -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.semantics.contentDescription -import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.unit.dp -import com.kizitonwose.calendar.core.CalendarDay -import com.kizitonwose.calendar.core.DayPosition -import java.time.LocalDate - -private const val OUT_DATE_ALPHA = 0.4f - -@Composable -internal fun CalendarDayCell( - day: CalendarDay, - isSelected: Boolean, - isToday: Boolean, - onClick: (LocalDate) -> Unit, - modifier: Modifier = Modifier, -) { - val isInCurrentMonth = day.position == DayPosition.MonthDate - val backgroundColor = if (isSelected) { - MaterialTheme.colorScheme.primary - } else { - Color.Transparent - } - val textColor = when { - isSelected -> MaterialTheme.colorScheme.onPrimary - isInCurrentMonth -> MaterialTheme.colorScheme.onSurface - else -> MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = OUT_DATE_ALPHA) - } - val borderModifier = if (isToday && !isSelected) { - Modifier.border( - width = 1.dp, - color = MaterialTheme.colorScheme.primary, - shape = CircleShape, - ) - } else { - Modifier - } - val dayDescription = day.date.dateDescription(isToday) - - Box( - modifier = modifier - .aspectRatio(1f) - .padding(2.dp) - .clip(CircleShape) - .background(backgroundColor) - .then(borderModifier) - .selectable( - selected = isSelected, - enabled = isInCurrentMonth, - onClick = { onClick(day.date) }, - ) - .semantics(mergeDescendants = true) { contentDescription = dayDescription }, - contentAlignment = Alignment.Center, - ) { - Text( - text = day.date.dayOfMonth.toString(), - style = MaterialTheme.typography.bodyMedium, - color = textColor, - ) - } -} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarMonthNavigator.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarMonthNavigator.kt deleted file mode 100644 index 0a1cef9a..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarMonthNavigator.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.gamss.android.feature.calendar.component - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import com.gamss.android.feature.calendar.R -import java.time.YearMonth - -@Composable -internal fun CalendarMonthNavigator( - currentMonth: YearMonth, - monthRange: ClosedRange, - onPreviousMonthClick: () -> Unit, - onNextMonthClick: () -> Unit, - modifier: Modifier = Modifier, -) { - Row( - modifier = modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - ) { - IconButton( - onClick = onPreviousMonthClick, - enabled = currentMonth > monthRange.start, - ) { - Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowLeft, - contentDescription = stringResource(R.string.calendar_previous_month), - ) - } - Text( - text = currentMonth.monthTitle(), - style = MaterialTheme.typography.titleLarge, - ) - IconButton( - onClick = onNextMonthClick, - enabled = currentMonth < monthRange.endInclusive, - ) { - Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, - contentDescription = stringResource(R.string.calendar_next_month), - ) - } - } -} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarText.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarText.kt deleted file mode 100644 index 3c5faef0..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CalendarText.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.gamss.android.feature.calendar.component - -import androidx.compose.runtime.Composable -import androidx.compose.ui.res.stringResource -import com.gamss.android.feature.calendar.R -import java.time.LocalDate -import java.time.YearMonth - -@Composable -internal fun YearMonth.monthTitle(): String = stringResource( - R.string.calendar_month_title, - year, - monthValue, -) - -@Composable -internal fun LocalDate.dateDescription(isToday: Boolean): String = stringResource( - if (isToday) R.string.calendar_date_description_today else R.string.calendar_date_description, - year, - monthValue, - dayOfMonth, -) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/DaysOfWeekHeader.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/DaysOfWeekHeader.kt deleted file mode 100644 index 51f984fb..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/DaysOfWeekHeader.kt +++ /dev/null @@ -1,44 +0,0 @@ -package com.gamss.android.feature.calendar.component - -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.semantics.contentDescription -import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.text.style.TextAlign -import java.time.DayOfWeek -import java.time.format.TextStyle -import java.util.Locale - -@Composable -internal fun DaysOfWeekHeader( - daysOfWeek: List, - modifier: Modifier = Modifier, - locale: Locale = LocalConfiguration.current.locales[0], -) { - val dayLabels = remember(daysOfWeek, locale) { - daysOfWeek.map { dayOfWeek -> - dayOfWeek.getDisplayName(TextStyle.NARROW, locale) to - dayOfWeek.getDisplayName(TextStyle.FULL, locale) - } - } - - Row(modifier = modifier.fillMaxWidth()) { - dayLabels.forEach { (narrowLabel, fullLabel) -> - Text( - modifier = Modifier - .weight(1f) - .semantics { contentDescription = fullLabel }, - text = narrowLabel, - textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } - } -} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/MonthCalendar.kt b/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/MonthCalendar.kt deleted file mode 100644 index 6e4ec5bc..00000000 --- a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/MonthCalendar.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.gamss.android.feature.calendar.component - -import androidx.compose.foundation.layout.BoxScope -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.height -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshotFlow -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import com.kizitonwose.calendar.compose.HorizontalCalendar -import com.kizitonwose.calendar.compose.rememberCalendarState -import com.kizitonwose.calendar.core.CalendarDay -import com.kizitonwose.calendar.core.daysOfWeek -import kotlinx.coroutines.launch -import java.time.DayOfWeek -import java.time.YearMonth - -private val CalendarFirstDayOfWeek = DayOfWeek.SUNDAY - -@Composable -fun MonthCalendar( - monthRange: ClosedRange, - initialMonth: YearMonth, - modifier: Modifier = Modifier, - dayContent: @Composable BoxScope.(CalendarDay) -> Unit, -) { - val monthPagerState = rememberCalendarState( - startMonth = monthRange.start, - endMonth = monthRange.endInclusive, - firstVisibleMonth = initialMonth, - firstDayOfWeek = CalendarFirstDayOfWeek, - ) - val daysOfWeek = remember { daysOfWeek(firstDayOfWeek = CalendarFirstDayOfWeek) } - val visibleMonth = monthPagerState.firstVisibleMonth.yearMonth - - var targetMonth by remember(monthPagerState) { mutableStateOf(visibleMonth) } - LaunchedEffect(monthPagerState) { - snapshotFlow { monthPagerState.isScrollInProgress to monthPagerState.firstVisibleMonth.yearMonth } - .collect { (isScrollInProgress, month) -> - if (!isScrollInProgress) targetMonth = month - } - } - - val coroutineScope = rememberCoroutineScope() - val scrollToMonth = remember(monthPagerState, monthRange, coroutineScope) { - fun(month: YearMonth) { - val target = month.coerceIn(monthRange) - targetMonth = target - coroutineScope.launch { monthPagerState.animateScrollToMonth(target) } - } - } - - Column(modifier = modifier) { - CalendarMonthNavigator( - currentMonth = visibleMonth, - monthRange = monthRange, - onPreviousMonthClick = { scrollToMonth(targetMonth.minusMonths(1)) }, - onNextMonthClick = { scrollToMonth(targetMonth.plusMonths(1)) }, - ) - Spacer(modifier = Modifier.height(8.dp)) - DaysOfWeekHeader(daysOfWeek = daysOfWeek) - Spacer(modifier = Modifier.height(4.dp)) - HorizontalCalendar( - state = monthPagerState, - dayContent = dayContent, - ) - } -} diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_body.png new file mode 100644 index 0000000000000000000000000000000000000000..8903fe28882667a7e9e179b3136cb26d787a5331 GIT binary patch literal 14252 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_note.png new file mode 100644 index 0000000000000000000000000000000000000000..1c564865604b727419436ed470fbacad0267ca6d GIT binary patch literal 17610 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 RPJUBFQ&mr;?2+}m{{fv6rtts( literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png new file mode 100644 index 0000000000000000000000000000000000000000..2787202d15c928a06c29ed57b88a870d26d37536 GIT binary patch literal 14066 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_note.png new file mode 100644 index 0000000000000000000000000000000000000000..09469ce84dc3c6f29c52305937874be4ed1ab689 GIT binary patch literal 12475 zcmeI3{Xdg?{Kw}eDxq>t?n0f;sZ)rf6Edt+oK#3f%w4Azm6>9u%{FpMx15e5$8AZ- z%}N+%8#!^J+|RPvW)x;-Zg$6P*LQNhkMED)f4~oWT-UB$cc0Ja{eHe*ulM7zyFOkX zy6a8WgFqnNW4|5o1%cF6yXv5|TB?mGzJF1*QH$~Qa069#Zsn=IIKs{yyL9p-Xpd@t zEl4fpGDvgz6xGK>^-*0~p#Hx{)IkLr|F^&VDJTVuOw=!YyQ60*y!oT&01@-l79U2&!@KQw)by0P+#}# zR>)NM*07-_`!^4Re)Ruv#V_-xifRV=>tp9GOw=Gv!XnL0D{$;Al60zmym4HC#o-${ z^BLp3lYC$M8(ChvU~^wsuqye0-Qa0_UR~jd3=8YN51u@+p(kE`v`HFeFkIXrdpr}ZHCuEx1xQhU5KrQ^#i)6-Z8-kHstDYwHfT7I#O9`b>3&Q5j1joV(=XnHw;PPBEv77VB% z?ow(!j-R)+yf2>sW?1qaW;#4eIig}q?~D&48pvX7IPb|rx^%2__dLC^a)ZqcaWg-@ zeP8#@z=Z*tS}$Tm9e)AZU4dLVgBwpe;&haE96r48f?hlj#5mG$(@<{M&^B7?=( zwO3LWBb?Ax4=iwq0Lr*`yXXUE0ALe@S@;2trD8r0%AtqiDJ~J=mhSqLLMx7>qv(NO zn(c<#C-uiePcM=}LLkD$!#F=F+vH4Z8q3#Rzp(;*y*t;U1V16Hdv4V@9NItpx{UnM zEpd6uf6(-D1gRF&^1j8AHyjn8C3~##6a#M`=PWm7uq!# z8jNP{E$574Se({0eB)#EtMhQU!nLnc@6Q*DIQl+CAclzojjjU0y>;` z9$X$7)OWZ}qe(Uk?HKt4+)!*>8h+ljN2hB+(l8H^*#dX(oMe2jV7>ptqI6s!4AnIj zuRZ8Og&1_6pg!T`!Bs=YlJk>e8Ty(<#aBc<=qr*9QGd2igN zdQwuwkI_MD1uOzW8R}Q_`I9aeX)z=^_k4b%)PXT^Hul3e~8+XS=f@#7N8s z{&76_=DxZgvc0}7L8?_ZWG>%9=~Ut0ZG)XMw2xELafh?0lUF-sx%jf^={cLJE0@!l zM(P5+d-vGjFIgt(y$8K_b33{C%wVK?4@G;fA^IPXtr>lA-Y>kHPvfE-uJT^aRS+2!L(;Kc_btwh z-Vn~1`O|5Le^U=Tb~9d>j}RjIVs^VCdUtMXnE5Jrwh{}G#z{NO)gsQ;4$2sI!3lM8 ztQ}B|kh6Zq$OTKxMXhm;4@x8?;N?PonT5;DfRjLI^W;OJMG$9!2&q-O*^llHx@sT!V@k) zdfs8?!Tf&m_+#G1(vL3l9em^(n?0i`9Htq}C?^Ka({

;|b&4vuf8RqFd0j-23eX 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_body.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2270c00e518672fa621a7b58e52ab9c6217331 GIT binary patch literal 14859 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

    B`AN@v|shLwHmaq?e_%7K&WMSKEMv5CwN&pD? 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_note.png new file mode 100644 index 0000000000000000000000000000000000000000..de1b64e72d781d6aca62b3f1250fc17e209cfb8d GIT binary patch literal 16606 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_note.png new file mode 100644 index 0000000000000000000000000000000000000000..504ce8f887b6089bafa1bc5622be520e949e4085 GIT binary patch literal 12736 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/calendar/ExampleUnitTest.kt b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt similarity index 88% rename from feature/calendar/src/test/java/com/gamss/android/feature/calendar/ExampleUnitTest.kt rename to feature/calendar/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt index 27615f52..1ccb0fa6 100644 --- a/feature/calendar/src/test/java/com/gamss/android/feature/calendar/ExampleUnitTest.kt +++ b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt @@ -1,4 +1,4 @@ -package com.gamss.android.feature.calendar +package com.gamss.android.feature.archive import org.junit.Assert.assertEquals import org.junit.Test diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_body.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_body.png new file mode 100644 index 0000000000000000000000000000000000000000..8903fe28882667a7e9e179b3136cb26d787a5331 GIT binary patch literal 14252 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 literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_note.png new file mode 100644 index 0000000000000000000000000000000000000000..1c564865604b727419436ed470fbacad0267ca6d GIT binary patch literal 17610 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 RPJUBFQ&mr;?2+}m{{fv6rtts( literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png new file mode 100644 index 0000000000000000000000000000000000000000..2787202d15c928a06c29ed57b88a870d26d37536 GIT binary patch literal 14066 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 literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_joy_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_joy_note.png new file mode 100644 index 0000000000000000000000000000000000000000..09469ce84dc3c6f29c52305937874be4ed1ab689 GIT binary patch literal 12475 zcmeI3{Xdg?{Kw}eDxq>t?n0f;sZ)rf6Edt+oK#3f%w4Azm6>9u%{FpMx15e5$8AZ- z%}N+%8#!^J+|RPvW)x;-Zg$6P*LQNhkMED)f4~oWT-UB$cc0Ja{eHe*ulM7zyFOkX zy6a8WgFqnNW4|5o1%cF6yXv5|TB?mGzJF1*QH$~Qa069#Zsn=IIKs{yyL9p-Xpd@t zEl4fpGDvgz6xGK>^-*0~p#Hx{)IkLr|F^&VDJTVuOw=!YyQ60*y!oT&01@-l79U2&!@KQw)by0P+#}# zR>)NM*07-_`!^4Re)Ruv#V_-xifRV=>tp9GOw=Gv!XnL0D{$;Al60zmym4HC#o-${ z^BLp3lYC$M8(ChvU~^wsuqye0-Qa0_UR~jd3=8YN51u@+p(kE`v`HFeFkIXrdpr}ZHCuEx1xQhU5KrQ^#i)6-Z8-kHstDYwHfT7I#O9`b>3&Q5j1joV(=XnHw;PPBEv77VB% z?ow(!j-R)+yf2>sW?1qaW;#4eIig}q?~D&48pvX7IPb|rx^%2__dLC^a)ZqcaWg-@ zeP8#@z=Z*tS}$Tm9e)AZU4dLVgBwpe;&haE96r48f?hlj#5mG$(@<{M&^B7?=( zwO3LWBb?Ax4=iwq0Lr*`yXXUE0ALe@S@;2trD8r0%AtqiDJ~J=mhSqLLMx7>qv(NO zn(c<#C-uiePcM=}LLkD$!#F=F+vH4Z8q3#Rzp(;*y*t;U1V16Hdv4V@9NItpx{UnM zEpd6uf6(-D1gRF&^1j8AHyjn8C3~##6a#M`=PWm7uq!# z8jNP{E$574Se({0eB)#EtMhQU!nLnc@6Q*DIQl+CAclzojjjU0y>;` z9$X$7)OWZ}qe(Uk?HKt4+)!*>8h+ljN2hB+(l8H^*#dX(oMe2jV7>ptqI6s!4AnIj zuRZ8Og&1_6pg!T`!Bs=YlJk>e8Ty(<#aBc<=qr*9QGd2igN zdQwuwkI_MD1uOzW8R}Q_`I9aeX)z=^_k4b%)PXT^Hul3e~8+XS=f@#7N8s z{&76_=DxZgvc0}7L8?_ZWG>%9=~Ut0ZG)XMw2xELafh?0lUF-sx%jf^={cLJE0@!l zM(P5+d-vGjFIgt(y$8K_b33{C%wVK?4@G;fA^IPXtr>lA-Y>kHPvfE-uJT^aRS+2!L(;Kc_btwh z-Vn~1`O|5Le^U=Tb~9d>j}RjIVs^VCdUtMXnE5Jrwh{}G#z{NO)gsQ;4$2sI!3lM8 ztQ}B|kh6Zq$OTKxMXhm;4@x8?;N?PonT5;DfRjLI^W;OJMG$9!2&q-O*^llHx@sT!V@k) zdfs8?!Tf&m_+#G1(vL3l9em^(n?0i`9Htq}C?^Ka({

    ;|b&4vuf8RqFd0j-23eX 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 literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_body.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_body.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2270c00e518672fa621a7b58e52ab9c6217331 GIT binary patch literal 14859 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

      B`AN@v|shLwHmaq?e_%7K&WMSKEMv5CwN&pD? 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 literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_note.png new file mode 100644 index 0000000000000000000000000000000000000000..de1b64e72d781d6aca62b3f1250fc17e209cfb8d GIT binary patch literal 16606 zcmeHvXIK+mw{}2~swkjH?@gN0dytNFP>_xqigXANN+6&V5v3RD(nSyyM0ycaN+~>S3vEArs<(HO*jY?hX z7lPi}VF(>E#WE7;P*3GN$ZW`AZquLNpBGCBxPz(A-@hLT+^3IJ zH|9!7Nr@Ov8b+0l>E72}@{CDH7^lQFa9#gGoyT-l?Zu1yx;immU;ikBzS?)Emd3fVPdAZthZ|@ytX*QhugH}%{R556DY%J>MPpKUjYS*kxRSOG? zTPcI7U@Ee!EaYS~td!AL*(h5=S|0mK?kg*$7Zen9H5Y(IMB@g`*MC@!e@#i#?8=e% zyG?!NimsJb=Xb37TSX?z+Bf+N zgTyoRcTy`R+t`JYuCSJ+I^=gg&=TeIaJ^*P-SvDs@mB_krarUD3W zAg{pU%ug3q(IMy)aG)64f{W-1n=RI=jS;`%Im<>$rt8ZD6(J_)2x}L=`N+GUF3;!q zdko#K$MaeDD$CmYqS{hE<90WCLBCYcFUdfX?+mwGPL7YC&xWt(G|eWKZXxzP8U=hI z5H0R&5;+lUZI3&nKDkegArOdbEn+u0hP~eM)kd~_kOO(H1mRb$255wp)l|VyY(^`rwQVG}HclWVJsn;y%;X@) zx&-sVZ|lYn`G3$zef<`-EmUr%i7a#9q|Hm_H|%xp{?;v_T)H_`7bzC9P2~giI~5A$ z3Im*VFdLk?(RbxR$_0DAKAmxM1~^0j)Qk_o>%B4 zugMP$(_TI%>qwv;cWp1Y7ojZvlFg!fkt)P3e-i;7(;`1M)zt{p*n3&1$>vvK+ae$I ztlh-UjzKB3yX$D}5dVh(64};ywSI!(YFZ{d{^V%E|#Fz>v zC5h7!VCb~*NV=z~ly>kCx|L@dJlG;WSRg(Po0}PeMlVls4X~U$f&FJvS_g;XA;=nu zRPW9;L{Gd}z_;DPpH|4(7SW}efdXtc15MiJC1*B z7ptP0{_WWiFEnMD``s?>pCrATT@U|j*eA7m4@L@V76jp1D*VnrHOwCvoq69`?cEw2 z`4XeGs6GN7kGGzMf7TUvr^~#k3b>|=p*wFKhgGUekQJyMUx?Q5jxHv!?+B(#|i_(bWF zT+*r)NhD{ytZy~M@M2>w9Oh$K(Mn!#e--nZQCf7EM-5B*xBUG2Uc>V@iAbtxwSD~z zm4IV5C;_+@M~0pzzk;X&hsl3BKIBut3xMVIt**n>;~c!cW^$e?V!bQb#&w0$TB= z-{|pqa#08=Zvtvvx0vv;tnzA6ipcxcjD64_K-l##i!#}B%c$6Asyq>I+4CfYB#t;! zp5%GAtyq9L^1 zXTE+mBv48o*ZxW$B_*XZDA_+cJ$-&$agdnk1q$F{VP(6jWtc;GazfUr7INwF?;;h^ zWM01?F*ovIZi7D`=9PjQA6CEDxM}|J*{*OZ?h4>J~=++98T6;J=S`n3m zv*Nye%lGoq4!uepdFe%GzFPE7Y3c`%u`JBN;kN)C`+n`m0d^K78mH`0&ar-&%OQS3_ys$6YNX;Ef_N z0x)kAd=PDD=dJTzL{NFX>vhkkW@Y*M@=`J1?x)d~a_Rit(C4L z`bOC!EBL$F&jyQ#WSUCRk>uTd(X_}1QAajk{NfsUS4hsD*G zL(8XoJU{)BHBybVL{b|L%5CJlPB37Cy& z|DICy)jy)PSp35$cT=oX;B-QKl3odM;$7)Wy=43sfLKqfeXw7`MuggcDbzp(>3wAh zuKZJ-@k>vdthTm-9k^!q3K&j>Tt0LrudjEE`bj-*u}0B3>P+t~?rwYLcpb*EA|uzg z8iA+p3KgIqYef`G@76+xLt87k>R0oX9=q-M(!W%!^7i}95ziC{kLawr-*f6t5OKO;tuEC1D&JoZD4H4G8|;Y7 zWPr_Ljab4!V~N+|L4STX37=TnTu94Dr64q{&M(3^P!BU}!|>fRZ)7koZU7ZhzP66s z3!RO)h#2M^7Rk1k-zO7E<@cFP>*G&`78e$y<1||^a36ER^Af2Ap9XkU*0ROP6G&Di zJ=Vj?9BXFf6hJ5>>-@-oerfQyuCHTUfnb_sIv?pe9+5RLwNr0uYR)S4n-hE;zY(rg zz#9eJTDxkPl=!-V{>rrPL`m9ZY41!bPV_l~TT}6@t+{XmTCh_T;jzU#BbB+B?UllN zyOS-rj?D$N^bP7ZQHDv?CTtg*=X5Ktr4)uv&a)+KeW!z&?Kf-G(jUTf$>_oxr28A1 zobA#9V{GA@GHWWk#4cj6h`V^^wRG96r>CC(2BSM!DjlLYSJ%A8_k9OHp{F6%QQru7 zd$43I;n+Q^vt~IXFh4!>&mT=1CY5|FIH}zUTHXq7h98PeLN{fqtn49k~M5WR*I7=hs9}! zhS#U`FM|IJ&hwx5B}^<_-O9?U%-K1!5rXx7>HicD)3d&mC&-H%WR2G1oT8Ohh8_!E4NrthF?Atiq({pOF-Ug)$o5! zB}yDaCnA!u$N=W%(BA>8ZawkaWwn8~(Q6<%njv%FoL6%V!2)bDa zuu1xAPDh-o`{}dp0qyVHp+KI+1^!ft3E93E;BY+Hi1)8_SiWo9$j z#9^Ab$-h}rDg1*HTdblcXu5O!)2#){9SRnu_N5k5#X)w!&fT4IkU(gTVpKp&1u`Ct zC7f*2EwGEtNG)#PG-79HHl`&^bHs%Cc5?Ka)tmZXQ#3vLyhMZ8;mJ_DllO$3h{vIZ z^FPc4#8)+?mcH6feURL+02$ln}zY$BiAv6Y9=JW2m}r z>lb3RUn1LrKy!?3YcEc+3S$YP4FT&Q6`S0ElkKvj>rT+Z(*+luk|GFxafe(5j9ZV3 zl(>;|h~d5h;8`ECmH_B;H(t`lm)TcJRT~E5(jDSH3n^hbdc;9PUCV`BU#U*k+pkf=R>4 zxK0E*?IDpws=`#$b7jkV%V8Fo%n%YsdH=6-`rU=E>V=n02CyvuaK2B?B(&QIn3j`^ zKK@BI{!%qM>}LOA-k^z4@`6VLszcym)mHa-fz{4^60gMRQ9@)9CImeo;n`ZF+>(Zm zM~B>js+!QPpX6q#IjZIuy-y}{19s4|@9X1h z${ZMWB77N|qj^Xxt;ITdeY&#I1!`D3XveZK$Gfb3>oz|yDkTuWE*~Jn2gs&nt&4k2*0X4eooqc>56c|TfM%K$AKd9a+s&9He{RImgDUUXi)I1m>t*wJN+;{Qujl7Cx1Lk zyg%;5MAsGZ;M+usQ_uTvqe=5xNZC{P!mq2*?mIa4gpYBx&5rOWBa$OXrtf2C3|##1;X63)7`W)G+3FMF z6ISOZ?>u{Qj@Lm=v+1XQT2aRB=?**dB0k%pKW1n^#4!`CCndXenmrM|fATBu2XxKi zhQ6z?K1PUy?;4MN%(3(cC|FikR!$nc$XvX5608MJM!FnS4r=YX3m6vB@C~R)+t?=; z&bHgf8-6|uRVm+>vFAMin_{}ogw%)Po37c+{NllMN!pGW~6rJx3iRwg2{=ir*e^zb1pWHKr2&$H{ zV}~Oz(l6QT+G+3~w?&U{*>l2`lDxFgy;31tK@GBEzC+;$a~9+D$|7nviA zKq!2(-Z^eLRT$fb$L&u^>!f{?s8W5qDlu@-B;{J7NxKnx)hU<;rgo87aNN{3=ysI$ z7VPb;S;f{k9tWBm-d;sKaU=xS@(>!-xBkS^#h@md9SI`^&w>dW;@A)q6ReA4>n;!b zw|$?)F)5s7=+F$Ea>y6n>73bmEm)~8m7l>kEr-(fiC(6LMOdPnH#8a=b(wa2CGdOU zQ=BUOiDF&0B4#m;}iMDBfuI9;% zv=Qt(k1_pYaR|Y9Kr5dvATPaZ8Kyz|!1+!gQTwVezrcWR-09VGlGk3UQeCQ$nrxS4 zXIk?q@W_vjMWm6~z6@?|HCbqi#qcT=UVlEwqHtXqyaC#KuR?eSC$i(3z=i6HPTmmr zt+KdW`wRJL+n|<&Mn>mJex3H^j`&{j@BE|V1DTex$4SC?@O`tJdL?3~Hv;=g-u^HL zlb;9eb~%m&H<`{ZZFY76amWWu#@}h;&rj4TJAkedHzTTnz9bFsWaiIQ06U@sf z?O4B`2%!TLn?lfs+C*(gHN;m^V+}1XzmKQ-qA1dpe_Gnx2V)IKEUB<71@N4{;i2l) ziaGQ`41TD1ds6xQNR~nQ(nU6TM8RWaWh&8K{^0{iVgAVGtrQwB10u&wvF3 z!E*d@8t0CP5lK+YuvH!V^;_17B1bbI+FAg}OSg8Jha6D=8I=E3<%+5G?FM7Uh7z5V zS#xfcF8c?LRl;}h$Imw(FLG5-zHF7m<)w;ORE-cxMbGLwytgwaa}FygB%X6yf4M@2 z;#0L8NT)i;>jrg{cF&wz_gYd^*b2Z8l!f5bZ32Z9X9`ejapBY3qnNd*sH0F8wAOjE zy!a9nCxXOXe4dU>6NiO1*yEQwgF8c7RvGa=WVkF><`=Uf>l=rw8tFs0I%|6vALM&~ zXXnCWoxVcIRIH6{jlaI_VDW_)E)w9 zuXZmf>-+9XHzbcg#?{=IaWS{!bc_4CmXiSAR4pb^o(e?G?N!<#1*gTn>1K=8tEU~? zh%o$`OX-0fZ-llo;IS-Y#q3qz=jaHbl|ZfGLb_vo^`53C7$-a%eUWk)a>%{S&9Hk+ zOY8v0#3{vVGQe6)@t-Q*R1JFD9Tx{2cutvdH4rKLuZjjL&oM`x$%@9J!}8Nra+h{& z;^K>vgqN#d&ATD(FNK-tJW#*TfmApc!a-2Zo_$f1^gUcrIX`Nt)yjct)>;hTkiDeJ zRz8T!6hYN1}eV_wkH-cYELt9gmgodvE`;A^iT`XT^eC48~Gl*b;2YVVr53%pOky zn(Di2F;J>8zHd4p>{Y54aQeE!A0gR+o(jB&7$rLr@b6hk*pSu!Pt(}!AXHqAN z#inG|cYQ<-dmQCcGDz7HZ;+xVARNbw`crj|wK0gkyglsPq)t|j+`-Hu@Xg#s1PGwh zuCS^Tb=lpfYuFU5N?!Km#MMnT71Zv|&O5q#mJ16(YlP!}eb;IfL{Nc%;n17RfF-8p z%(+t{f({Jy)mp3d22L<`KeD-K&8v8K{hiv30WKkVauc|RytjOq7vDrF_$FDfMPP)xPMA-{<60a7&$bYI<+EEkgV;&IK9J=lV zi8h}(F~YVbi3dv3WYFyYVIQ1BZEh;1>pWw=KuBV8p0O&syrbV~X%FJ?ePY$`o9}B9 zG4WjQ4`~TmkVrBc2g~u)Y>pXI=kE3hFECGn*u!NMvD#l&hrrCt9ads`?kD9B3Tiz>%G)+o}OuitJ}={Vgt`#a9l-sh7W7wHx0HDp(YAr;7YkOK zIgfpxY|9*3yfR=(j6Jd2nq`<-wi7%dZ$3J8&lo`<35^GKS~|Ip>==}x+XF_t4Ro!e zV~lUeL060Z$=aSw>+!XKU>Iud`5R3H5f)Z8pwV1XG~K+RvgX9pSbRe=A2a zKg6cqX8Gv7+Kf%ShsasTJk?tsUp4xxrp2z=jc1 zoMtxR>}0~%#!BO`b7bD*5zd~_a%mvdr^#*mBqy%Yi1%CESD~ycaiLH5KL`M@t1Md9 zPnu+dpHgHI{opyh5QV!AC~YJ1agim&&k)wA|cZ z8-&Tp$eBLpN@UkR*&(GlN8op1Tr8M)Y0)?MrwPN?*mAR|^xn&|~13g#a_ zb0Y3pSy|Cbu5+8nE*q?)wOip=a~a{lDYCK(2wJ@SBD78)|^WN{p zlv%Ogzq3TAg})_HjG1T<`C92YO;8~J^FYO;_baedgJfypm(16ICPYUZ!A~{$K_)iti1j}ZdHGKKw{LE<)xvQ{T`SxRgdP&Dnb|`e zgWXy7(~ymoaR{D=bfdx*<;cf9rzDY^;hW@PGq(iN!3&QrCRrPCOd4I;2J8rmugYF` zP@SgAWGbA&*n-iW_r$XK9lD`%4DOw!@!8}$F>ZLXty4&4pF71ItVeflq7VFN zeQGBjAEDF9cVgF|cf07q0vrjkDn5FAHO~a$os?m#cBfJ9Sq>EQ0a$jOph5o`r2HcqR+-%1_J*wb{aRggd+??h2?SUKb9TDy}guqZHeFK8TX2} z9~te~o;!E3ijQ~>8OPm07J$TRDm`yU6DTlycGX2WjF7m1_Pl?`%PH6#kxgWnZa?qR zlWlG@ALAA(uzm{Uj0yHdb{=jj0u?O=l%@(Sh&==MjIfrjYZ(M9(cetDBlUb!b$Q$M z^>ce+1qDlt@ryM73~Jw5uEHs?Tl<@;SC4D}326cezH2?F5!jU1B&Xv&V;H4|_iMUH z3Y5_?-MVXM@^WR6*286J>uof8GsW-tECAg>)#J`2wyTEExLfaD?gi#*Y6EzrPZ!~Y zc`WkeiANOy0NgN`DPFP=j3*6&6Vx*3lNn1JP0DRM&C3TF#B#4SX* zTMYy-00ng7l)bUe*yaja#0D7?rrBrrSU{pcS-IQk^8}%>v2o{U2zv8EF1r-IR9{p$ zYLd-H@dzai(K%?8QEHY!{V+iSnm3cqivYVAb9+<3S3pBN3skIrfNr&(;1bUBB4-HX&Mh2upk zWS}g&oN-K^2)|m}7u{Xr(_9iMm@orjc#k`+A-5}Iwk~LYtuId=RL1+?#fQ>ic+a1f zWpLoGbsVmUdKUr*`-R-Z53nMYJRt2k;^r!LGTnMdWW2ZPYd&(H#*!Zg8-RBrjeDc#)}Hd#lgE2n5<_ub~n(_o7JggZGnPyi3*s zP*wDIoy!QwTooV5mi)daA9+358DkysNS|nHzIbw5VOwI1Ygi!pOb07ZHOq#U4)V9RcPxL;O zs#cj8VT18avKHkPWU!j?6Ppb*G^K{^gS4=(USCBy;m>$(kdj5*5t#9DH*dGB2m`_D zKt^}%Po+_+FeQ4{ueInzUnEg+L~e~ctoU}axXE=fg3!Q_ciBJ&`XWUVU8EgGvB z^fgk3K_dHB#&@1JXd}z5g$7smJ*;JZH#|Er3$#Yi_nPw*@IqzKO4o9ClbbrM*d`cS zMd%I<^ov9@w;}7F2+<%&+hFf0@yt9jEmkx|B-9jni{11k&}zz3qO{g~F-kAzU)^eg zoTq#^xhLr4xJE8?woB37Pc6mlaQ!3e!ow_Sk`SIdbJeD~I6{VE6(P7K0luP1@IT@m z+6``*cRgNc0?oEV9Gva!9B2isA6l_~eV7LCZU0TXP84*;z@sckn!dU# z4Xp&!(63hF$UQZ%vk{-0SEx21Sc$u_@vp0Aj9OVkJehv>ez&K6|pb6Bfn9brbPWg((3S4@{) zqsxYmn|PP%-XBlP<~*AjQ=&d5i_rf9d>^?A3^!W8|DeqC@% zFka5AJ)v1s(sE|}N2C^%0mam-dFu{>(%$mp`p?+UtU0g4Va%1W`G=OD^cA7y5zvn! z&++(V<4nCoN`JhX8FwgA%{?C*8tPeZF}(A&U!3dC?XEWW!`3^}f%1xKCYP$xW1^5j zf?~SMf(YdiEgAX?)n-IV-EG22Zp8ok=wmJR59)r;EA@#CLF@@oo*A zjluv8JE7QS!JK)m@Cxkb@`pM8@K*-(Zj3tmH=#c>A1>sHwaL19-PvPj{%BPvT^W^@ zmiB*VX0qeN9QM)U*8n}>Hr(aIi`G9}GWdI@*tJ2fjQ!GJK!A|GempA?W-N3v_8b}S z0K@w{!jA9q!a?S8Ewc=P&1+e$U%3JNmIiOzj4r@T#oj;sI|k#mA~2TXBtY3}BB;Rm zlUc5|wwB@a$mjV58H(ghcuCibdUhQ^Z-(simu4byW@O4HjP=%pFu*S48QD4#9>Ck) zM)NIa+L;E#o78GcRk*#p2&MtSH+ha`9G_%~Uju~WcArCajg4J;xMRX@Mx@i6H(}se zctk(m2~3TteSNU%3p4ci+jDe_1ByJ{;j%m4eEzqTs7GHZvLW zsT~X`v>_?rp-|}oslaK?3iU-qrM$;s+~#sS8ftFt#Fsv5UT1lpFq z`mgRlt1Ve!nVOG6aR9pQ=>r_>Is6W*N-ZARJe+reuU0qpk>ho^OpU{$>_wNqge@fq_S)+e(ZNBX_loUFqoNHR20k`d2>+i| zRf;SE%-2^k>(EP&hdsj~d4vxvFVs zxFlz|DTh6+W_X*OP5q)8JeS}$TX=NB&&SvK>V}Z2w~n_!+T&ADwQP!WOT8@p4gEKL zzdaF~S#7u+bQBGA{>4z0pH@3utgVkt_20#N3(|raP%du6DUyJVSLnDzqj*cS>9p5t zNP{8LrpZ52%GHd_hVMNCPrnRMTAA(m_*fNY2RoA>t|;vc=N%8vb(KAfjZLO~@GCkh z>fz(m=C;a8>0b}VyGcD2Uv~?1Vh~;ki;cz<_jheT>TV6=I^MC^{MOsNfU?wgMI|MC z6)9BNj*ZOh%!APQQ1hzn&Swqp%*G!?udS`2n)VDHnM*l8VF`)9ETggWk~>2Z{9==UB}7Y)LbrR*d9qPRZE1Hc;s1I zS~7(gN?tb{u$e2&n-bf6-jZz2s}C%*QR!&0&J?Sm6DIf;$&tq$EbSj z+&}rX3I}uejU@cx7u)x?$JOf{-0>R&D@rV;0Ai+F(|Zh_;#_aV06m@W`WyB3s`H6*o#`dRy&(N-pv}Y=AisH{#QE#&KqVb)*YjZzhcnkjx~C%guN zzvjtrR62Y`{|eJ!SIbsb%3%7Cjvhs)5n^ABna<@LS6~&*Di8-nY{2jCBW?epimW;5 z023g){7s3?Kj~foLqMN@`|Mrki;4lnwj|_$<~_;H3+Y3po%|Z$7WIdJAHB{2zzmOk zx!7w5AmUa5*xz~o&wj{xjW9sFuHlHmKVj=NfGF(SyI1G%7Z%1qL<|s9(pUJ0z26}w z0bG7@`~1$|%FdDguNnV3$lrO!@fSfzuKmTvfWIMzF$Q_JotXs_cwgk_5R?sz@F#KoSA!O?wRu#uBD+uO~FP1K@hd-t($it2nl{fLS!W1 zW5cI&4}2ip@2cE@vVWhM1;1RmZ>aj<&K*bq{7eQRp4veucnSE&2L6FZ@yP%E3lhQ; z{ol{(`%f8(H*B%n9=UQZ}M`Up83*3BA z;Dt8}GZy=OeI`1{n<16D3B zTAf!q7M5=3Zr3|G*EtQBx~G;#HaBNI;EK?a=@e}vtc98el(|(Kw}7+?egxuU`_u4{VkXqZZvv z)Rxr_QV;l@W7H&{H#lkDe*UyEJ>BKpUP9D>jQgI)71wc}D?tZ_Z{y>mXy%*W_k5Z+ z%1o3HSQcqW{it&PFeQl{fkctXend}RM-saAg#s36k3|o@EeBsZs51}B-&NMCx>`bi z#U6LrrD9ibn6Ya2Lp6WEKyjeD_~;o=F2`sHfvmZdn*(Vb#q6+GuYMToIT{MKJ&IBI zMLfShL;l)7ba*##nQS>=T4p@{NqC!}mJ*7L?g|PgM}#gd-);yV9~yg=aL{?yF(_6q zs^zJckoV%qK(lc*!;QnGr3F*7!b8QFozJ3Dfy;S2c{i=rms+-3hR23`qZ=pvqw9wH zln!h^XfqIleuZrNC6qUaWW8Sw5$??DY3;2k(UP8YAz@a+8rA6O+T+Ce91T zl|wUiQ-Wt-E0hmga`8sjW#4QtbkjB`Ph<}M+0V7fJfCqpAv*Bcp?#F*AUaSk=sDds zNz6p&foaemx9#(Im7&2P^W#6SG#_tQZOe_l>!}W^7Fm@AcC;4Eb%1sjM~>oFM26Q3 znp-UWACG^~xxeL>b~`Rgfp>!ad+Cn5R2BcF+JwFxGo}&L#B}AV=~>3YfoAFNmh<{1 zRolwCol8}AQO!evuRa(?aQzl}qPD(m84wttvsflcYrv<7HZjj*>gfw}zPx&;gl{Bl zBI~YD@x7|kEyJcZyHhN&f|DQIda`V57kdm8cOMuzn$Vs-V*DV|aFkVV!|W>Q%JHf} z(R1o<+OLn47IU3NfpbPqngxB+Mw$D=AH1}yu1nFD+tyaqOSfNsD-og?P{8#p;a#lr zM)Of@XeG(EwAO3q67THV1eT@ja?X)}hVi$zYo!nS@>^IY$|kOrKUCVSaHIM;5SX)e zr-F*5ExEU%ZL7D$b-TIZOp}}A__YkzUo{)=b~gOKEiAn+IxOZ>yj#%yo0~3Hec$cC zO3U`W^UZBH;}5P>YR7ANqF&M!w`;{R>s^@Qe!f?6`#vcmWP&u~P z87{6C+FD(5C6&{3BZblY*og?e`+2je`XFO$D4cG_Dq|n3hvuq7{%GUVke?M#qijJ{sx?q{H~$+}Awb z@c*tNzc-Msd7vJ6Fv~?_#XItTI7bQJf{ZjcmT(N5Vwo`eyz`HGLsr20ap}%Kgr0zA z^ZAmVbFfaYk*W}1^xAPA*M92it>b9kYcad2HMQc$mzKsAUJd44$7rD$6bI9{*(vv1nkssscL=UtvdU>`iRSU|Ek~G zO==_&w^sR@!i~fAYOm!hkIFd&qKSP*L=FOW>YWeRiCPs+xzShxhU_bn;C$E}?992+ z)0dUEK61LA^B6&@Qc49&Ihi&ma&al9iow7jtk&nZ88bk z$tvIV!j+tnW1O|W)hfDrm3MfuSwXvvl>|38$Y3$vTuoO^y=s_IKKYI*c$TQT-QF0; zMK2+np_Om6N2ybG50|ZUnMXPgnvR18oRKv=TJH?W7@QBLy{j#KbJn>cNsG)X_fjkb zm4eCXxLx>=U2B6|)vM+~1y+-*CX1SftyNXiL#yYWp-43FvLbc8yIbFaCr=A0thF7> zxg2($1?JvR#P6*}A8W6Fm)Vv!liS@~wH9GnmOkVW?L=DHR7uVrFCQ%}Uv#1dYySvn z9VRIpy-ME7>lk_cRg#RV0Db>je7f6Gqdxg0e^yh5av43azBg`;SALbnDa2>4?`ONg z*MT==&#`FF)g~jo*IY!eV?TPGKRIWYph5q%PR?!fu#s&M5yFHr#sl@!LEmFoU*ACH z!y9m>7b)n?twrO-@4OSlzJp}X-=lqT=}`mqeihs=;e33V#Wsjq)SYNDx&*!cGm1m< z8VR1L2H>cVLf6J-V$x@MQ|5aR>p!k~BnV{m1uat}BgZU!NpRdw zw;c0{g4g(OK)0?)kkS3n#g~=z(m-d;w3{OdY2>=~D6BTS&L$oA$_%pW&p2OXBu0dg zlw?$cCD%=TNz-M&nVfYU3*pWXf3f-fQDaV6%1oo54HasJ7lb%5lOi9JpCLQozDf_-0DO_2b1HF#()t@ z`8s~$PW35)B&~ng!2T<@kX@yveb&TEfkJi;bgb04E%U=Jdw*wwZRckS;9l7hG!?{Q zgS=#JUcEl*uu6d>x}??Ft|cQcFHflKk_1c6M51MxT(&tO#Hj6z)8r47JqJrg1bf_j zwH8Vj>%&|aQB*I`gX~7s9UUCUXS;hy)BMYBjJ6R+WPNB<`<&V#PQ*iN59bR8+|<*= zMq*q5>P2Jgw9bRPt-9pir3tf_q>`{P!U>g-Xoo;C9c0AJtgMJP^q1$iwzK00nuCW` zaQ+DV#1#m^-QX+QF6m8*oxG30B$JxBqR1B1@zRjQ8KPW~tD0j6tE6%*fIL=SG@^#=KCWdgQ=VShP5l z>Fk)CF;^B~zlUeWon?4y%eAo$C{}3ZdYL+aOAUPqJJc;hbMP!yqjKM%W6ZJDi2O_; z`hHnp<9voewMXZNVma8P$zU%>C#OOggE&VK<8z`&WK4QTmVlJBbdB;hXHIw0iQ3U% zl?28P?vFVj&3$94Tvs#+b zuC7-{6ImtWE}%zW5Wh!Yiq>BeR@>8?b2K>CLbKut+T@JvB85_tQc}z!K`~48wsN*G z7*CT+5E1&s7h7&AhH;SsMAGB#s@%i#u_YQF24vLoCIo!?i`uJ{gVc~s3lB+MJsc+( zL*fV-1Iy1&!Kjr`8#9H>lo@GYQ5s!f(cf{)6wv&l>1Wb1Nx}0jwaB`;>6b$C>!CI; zi$K_-+?Z@hu+Lb8FKn_P(c_6?704k2WI&BLlCTo>Ii7*r zv_FR)wLk$&I%e)>9Qwr)Jv26Cdx-mav;Fu_8B62&ljqg(yT3;Q?K{sg`tqlFc@UQg zJ5}cAUn?v8@*L<$%iX%yQQhuKjrG}*kVYnPYrT_=f9-l$_R8cUH+bG!u$2OuHG}-2 z{5bj~eIHF|g{eoI-4f1GF315=r~#7w_}PH^BYK+?%Px(=;@B^6oI~S9{(iS{U(|79 zlvseF;bqLQ&+g>k^kqV9gy5DVA*ev58e#ur_+O@mL`LW!<%iFiZej_F+^!hHVZ%A>6E{Ltm|LTvgh<)aC-}9y;i?gc-dtJuxxjC*K1ZX z_O_FiA)7wVay^D_Zn5-WLr0U^fq(A~h<73uuqq{`E-FU)hIRo9o~U-5j)Kua+)uzA)?j((ap|@lTp2J?s}B;Fq^c zdjVfPswxS{q#RW{K!;Y1+k^ zt<0gNFc-l-tVUqX%+(wHoY+JTU5;vz(ev2-Q$c{f;f?XmiU8X)+JAubAf!HMcUOql-mu)Ck^3=ZAHiT(4)Kqc4r1B_d4 zN`PD6tPN`sLU-2nrQ$03ULE{Q$tle4AM2pyU3*PO=WJbsAFZ1Ib2u2 zpie=+KR#SW*go`J?@}BpiD9^M8~16#DswVr!-(Z+sp&iqkSR)b0Wn(J$e^0=ObEe^ zXk%r=eUhbiaVqQ@nY2QpDQjRXegb=G#LrMbAEeLHvufa`5ZFZ>gh(He=*Nk)9w6*J zSiqCY(?RVSrz#Yv^^5>fdMq4?_|KllA~*$2&%;?l6|(Id2o{s{*HPtMQYUqKO{gJb zT;=ZmJ9PD`0!R*Cgn+uymJn9^^gU0&n9;~aPVA=4{H#3( z>Mej;B)YBl*4{Nq$$wK?IWUxcq0v*7i@G04@ijH$TI3!kKkO|n&%KT|SEh~4=S#?zL#pF05=+mrEGGDBR> zg`9=(7P7=%5nxijJ5gYB@R#p>F zzn;y27r0OW@U^ErQ)P3rs9JVSX1a`-JPcIlK1#5lX?Q0Tm29}{2(p!^ z1hR1ByMBRqwu6|2RcaEzUN|u6@J_un54%%l01wPVnQ@=u&HDW;EG!JmvJ>F=JOxnk zn&oz>%UFOzP2HjNzOt-W@D2jFc*tdGq0eK0y{Dsy8D~K^Q}$M` z&C?8P!FQbt?!Vq5CGX9pYa&w5uIM2}$IPLx|Bf{pl_sh*c8jghXG=%9~ec-?%P>4B^-6?2kQ;`}mP+ zVnTyh_U-u;1JJgq<9VSC6DiNk2@2fdT*~4pA2iPLFr{1YcY;EXQ4zou0_jccha?m_ z%w7+UNoU9;ql!VV3%ucA$v*{!+V6P0Injk0>dCqIA^SE3L>^X8pk$mkSKIShy|LHT z{pUIyeAWW343L?hD)hrc`1$QVFi=Q-vy@@-FNxQIjRMe0vniVQmOnE8sUF^+mN3~A z`?Qep5KdT$_lQkVO2g{uc>-xP?>=&}ZTkV1rXT2k^{l=B@R? zWN(x>qB;2)!|F}+Lm+|s1qG1a6f67$ROar2h_05xH$rr*6gXv}*{MIZH&5y*glqL| z+u*yKuKQg_Q?4(cza>ro3WrNm&38I7Mq^dpCLKgM5Qaqyv=)%!19mpjbrx-yR&&zJ z1d&D8FHx7F+inpN9?L-?^45DQSTq-^h#KnX(6KWpJ5s#E)p<@7gXCEE3<$_9HEky$lr2Mj8+~gUg&`x8LHnOLSfIc3Y%UyA$ug) z&B#bEn~L3Hp-a?HL5i#q)9_QpqRokcnmTdjA0kL~ciAxJ4L|C+bnz3c*t|Ta)SZy* zwsin$Q8(nk(Q-*{ZmYH}eKm%Dtd~s8h`JECAssY)iIAo3#5j#Mp1AFU$4a z!Shukdu^8yZ{rvsuk|%n1ag-GEQ(Ox7w_b`vn-4YsMD421=;Io%(J0}0xGZN%_tyB zg$IbTl^FLvel<{}sUDwr9YcqT$R^VFr?KUDtT6|7h9qdrfcKViQlRi=el(LmM1o24 zurNm!#{98+rfxc7tIF90!>J1P-D>#8sV_dGptt?)Va<>My3p7Aypf7sBFE0U$$3BsO7)?p_Ba{dfTKB_*hv9@H^I zyaO%P3i>yh2EnTPseV@eXGN6;imXOTHyzVoVmKHc^0z1 zDifMFv-cpQr=z1I>ptb*zy&+Br`EoShWu^~is6w;GSF?WxK?|#f2J`UK+k~k_-RY* z7PN8S#c|^-ij4z-v0po@KMGUJABq4oT3MfCkDbgcC248(XiCx3b{VNWsi75YL%aYI zW8^>p=?&jG#dCI?&_9iyLhv$rP!A4G~Pe7opo<%LjYy;R(SHB!_>- z%SywLL7PB0%(zfqR8T>I_~Md8_dwGdGOB!Z8%>5z+=%t*Kl1bNENzb)sQmWB2WRip zpwvpoZ~~Tskt6sp*7W1sh2Ce9_`q%ej3O!3Yvb5+n&$!L45U^Vqy5Szw z#CdT#pY?_C9NejsD1n75y;iZWh1ZGtE)>D8XZX5>@Vcu-JEcruS z|1@ZRa5x5A#|x(Km#RK1t);*?n&BEko;GXPnHw03o3<-8kmoWW1&PlGIH=q=xP69WD2UprP zg^|@eZ>}%o%EPrJ8eW&L*=Vk{xv}0Qzt#7d+))H3tKT0%xpJ@l;db?VHUh6dUqXVu z-;i0eAUqc5USFBe-2VSkbug-_NqlIApvo{rYvgxF1F#nwtq2 zkTEgPbaP7m4C?JqJL=bHdXamknbn+%y4l;gqv*8jl8~n`)xW_Iv_MAnKxSD0X(vVC!oTxKgKP4 z>~xDCdRFSb0?Bu9h^Td`1(1S%YIQicPhtZAjgo=GA3=e@leTb#oY!(R(Y)rq+WzFE zyGJ0?VN(V4uemiC9NTX}$sR^T7qyI4%O) z=8n8T3(Eo=AJYT5>}{k!PVaRz=MeQphoGy81zxGrN=daxqyA1b(cBAc&~J}L1eqy| z@t6t*gQ~ZAm7STHJVJ4cv-8BdL-1K1{KzHKtuG@Y%;kERDgfBEvfxa&p^r=bL|TqJ zWO$Jz>m+|l4`OT=2qkBU7T{zX_!y0^cyCO9(|ZyPxy1{HnC|!9Zm%vZ+^B#WL*Q`- zckaFlG%+!eSdr~FKgCU8e)8noDYz@+Fe)#2bJF|6Xz`>)?{?~>Y807S(4zk`F<>Wq z_zu#I8xttW=xLtAHb>9Z_d9iDpDQCO(lLbsq!+?K?&fN68C4Hz2SiO#0+ zBsHL3@p&*%_~}j1qO+^(S!2p4pqm0k$)5x}JG(J6_lXBuAnkUKGQ>NybhfvT(|Z%9 zz$ryd;1%&rU!=O9X56T3zJXuAp(kf<-h2c753qudD0~voKJG|jNe3R;FkC_6epBkj z*yJwA;=1S^hk4*VJdm{XkiDWoGEH<5TAML(eSqKQcXDhV=i;263c&bNhF)<Umt?+#`Q^%rt;G_6u$v_LcFK^Gh zzAB0|wMqR-ioqx=s{p59aB?Hf^IH(r%F3(}f9ozaHh+;7d-q!;s3ql;WKj9Oj|Ukl z0t`PzqPZ0Qj(5;_1569ldJv(vR;Je8&fV&b>t9T!R99F3H(mO{YRQSL9*roDM;(Cz zfWTK!j2;}A1j|^@!y$u&4YnCV&cI}s8BX91Xl>jgm?tryV47> z@xCNA0jZP~NJUu7A38ofLpi{M#`vJX_DW%?_dL&o3S|n&QEA2=+!bA?2PS=Ops)Tg zGAlX#I-vGSR^malxpKUwBqa$+76X86z5;t=O6SAoeiLPfrfUUqXyf|T?)Hv;o;*;S*-gr>Dj{#uyCxiZLqn z5I-`CHsS`u>dj5-5O?>*-1oA0kP8vWa6%Q50MhJmkhV5uT|di!lR9dTUn__bKOrS4 z+0~X02r>dGL%tvg$!_&d{@JYCivjr$?~FvEM`oPfLbx&JUIVBkVD_%j=HBU4;=X>#N{?Mk75FzQz z`_`!HUJwG`#-Y3zffyInQI12|R%cu`m_}VHVMbR!t=%H0W2J#5%+AgxzhBBRy9jQF zuH3+V0#nH5W{$CLrwCx78bNSIQE~BC`i7d-{wJ;_BbLf3mMUTtLFr~KIj9wzS^d2q zTbK`SN~znRaH#9fDD_MC$D$&XWra55wz~LR;$)=Jl^smLXjDb8XG+~|UI|2O#=^6V zATmY=^RN$239rUIH5Iy|ANKM9y+iMUa#R?KuuBMZ}nMZSk3QjDVEy(EFI{3CHN>H!|8+-da?9+Lq1Igf%o%2*Jm6{ zgW<&$HQZjz@f*jb@}uA0@bj=EOfkoZQNfWj*Q%|CN{&e7NqUF6lb&8^1taa5gM;H8 z@cPd{^`SAXor6An_0+})w&kNm9lWXDZFYK6@0TXG?c5LW8FdSP^yK)hIxcH->g6z$E6U%d%O!? zG+2a+F?v9+ABv+mB%$sZ%XiwNQQ8ZaH(7$@z#9OuH`+Y!b^lRiL(!n|X<4(;W<_WDC|nf8WmyY6fdG5p@74|+B@72Ws5GNpKCYvEOdFKD z&5Heb&|z_~HbUKHWj+*yyNIMc+gh@F{JncR=;CYMgt>~t720DhpB~zZf^}gyNVr!Z zBrONDcJfZ3>QOrVKyaD=U>6npTen%cVusv?B1#;FmX zI2Zd#ZI-qMEqpS2OX%68k1uuR942TD?mdeauAbm#c z@@Lmd{Puz4&V)kW!qJ9ZqnnLd7e4Ns~usDR*9GW`E_l$ zC}U>DSHU}2dCCDlvv&HHGgiG1`YL?4sS7H|Zts5XtB6UkuH`tr8d;H+BOM&ulqKE0 z)||JW8qgt>FyJcoZtBbU2bcSMjtld3JML$XKGMcC`fxmErFpM#U)gR+oWIyyxHci5 zYxT~Rs-%%cMc>H19i2|IXNQpn8iQqh3*PGj5#T+WfuRYhyfZ?=D$knoXk%}@4FlJP zbFOmI?`;TzEsqSUv_mi7l#pShRvXySDcvqF9Hb)6n`jQuJJJyz+2hqmtF2rK5y{)!KB}WW}d5%+0e3@$rAOeRpRD>=%XJBWFyCiBi_}s@a-mC8gVGB z+rT6*`Q$K`_Fye1)S)L^&f2@;IbjPqi3nC$?^vb*H}d9%hYW)tM8O^41s4or^hm$B zsObCg!OAfO*IsKdb?|O%LRoO}2#Ql}bS*`FY|;5Re#LZTv$&?Vb}U$ST`O+m9Gv13 z2{=-$MuN;cP4Ln5SV6+BNr~5?k)ioW7%u}GEw5%gnTTww}_k^Pv_@WOu+1V*4rBD5oqn*?&Wht)+e(-?jwT)24u{d*r z&NI?W-S(>v)~l(qK6%>CkHZ_oMP+2z6AZE)WV16)?H6&H1+1!pS0mLe+{J@#x?qdf znlmy>Wt|oQ_5QxL=4NPSWWVL@W`Fthp^0%hgZ@Mwqe#_`<<8)AywleGR4a)lhRbm> z-ohWFLQ_=F2g&BrJ2my>WM@l8H}XX{_0DeY3uP^M`{u{3m2bJXIh>1kb-sW9V#QW} zmdpB7vldBJNLh@PD}U9Pc~t;^#Ta$VuZOeGh09e+Sp6_(H_&8B24p^y|^-88A3 zWM>?jnE(0R>^oMi&)!2fPm}!26KKeyBH9koDWtL$d;7Y&$weo$&~0$(xT;!KOl+9K z={~nR;O7u{iHo%aa*?<{Kmmi1?uRj6HeeX0itsPD(a;Y^Ld*&1P-+MSK^D#r;D(=q z3_49y_7ZdM%j*1wCr6M(Lgi{+D4T+M%pICG#U@f5`+1Buu+}zMxqLc5r z6%h#Tn(GFaPejo{zfL~6UnGLt%Q3v*yAu`2ps9aV(E_Ttw8q?q#iLM=`^hJnH6J%* zePu?C=R_?e_Ug$e>M|o8boq?OMfjox0&1T*`TS4q|E!Hb{s)r(Lh`>%0uthXc^j0Y t|H{pORq{Vh0#mR5sMP-x;z~Fs_3p!>)Y&gH!~fk)RY~J!_6^LV{{a(*mB9c2 literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_sad_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_sad_note.png new file mode 100644 index 0000000000000000000000000000000000000000..504ce8f887b6089bafa1bc5622be520e949e4085 GIT binary patch literal 12736 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 literal 0 HcmV?d00001 diff --git a/feature/home/src/main/res/raw/worry_bin_anger_body.svg b/feature/home/src/main/res/raw/worry_bin_anger_body.svg new file mode 100644 index 00000000..b409bb4c --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_anger_body.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_anger_note.svg b/feature/home/src/main/res/raw/worry_bin_anger_note.svg new file mode 100644 index 00000000..91704271 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_anger_note.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_anxiety_body.svg b/feature/home/src/main/res/raw/worry_bin_anxiety_body.svg new file mode 100644 index 00000000..fdfbe337 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_anxiety_body.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_anxiety_note.svg b/feature/home/src/main/res/raw/worry_bin_anxiety_note.svg new file mode 100644 index 00000000..91891a09 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_anxiety_note.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_joy_body.svg b/feature/home/src/main/res/raw/worry_bin_joy_body.svg new file mode 100644 index 00000000..ca6c332c --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_joy_body.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_joy_note.svg b/feature/home/src/main/res/raw/worry_bin_joy_note.svg new file mode 100644 index 00000000..ac557359 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_joy_note.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_prickly_body.svg b/feature/home/src/main/res/raw/worry_bin_prickly_body.svg new file mode 100644 index 00000000..c5167638 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_prickly_body.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_prickly_note.svg b/feature/home/src/main/res/raw/worry_bin_prickly_note.svg new file mode 100644 index 00000000..b1f67d8f --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_prickly_note.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_quirky_body.svg b/feature/home/src/main/res/raw/worry_bin_quirky_body.svg new file mode 100644 index 00000000..466d461e --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_quirky_body.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_quirky_note.svg b/feature/home/src/main/res/raw/worry_bin_quirky_note.svg new file mode 100644 index 00000000..1e71d1ff --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_quirky_note.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_sad_body.svg b/feature/home/src/main/res/raw/worry_bin_sad_body.svg new file mode 100644 index 00000000..b2896e18 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_sad_body.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/feature/home/src/main/res/raw/worry_bin_sad_note.svg b/feature/home/src/main/res/raw/worry_bin_sad_note.svg new file mode 100644 index 00000000..9a903853 --- /dev/null +++ b/feature/home/src/main/res/raw/worry_bin_sad_note.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/settings.gradle.kts b/settings.gradle.kts index f77cf8eb..701f4ba3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -33,9 +33,11 @@ include(":core:common") include(":core:ui") include(":feature:home") include(":feature:chat") -include(":feature:calendar") +include(":feature:archive") include(":feature:login") include(":feature:emotion") include(":feature:setting") include(":feature:webview") include(":core:designsystem") + +project(":feature:archive").projectDir = file("feature/calendar") From be1ff9921f33cda5e909a5757a44ff315c8b14bd Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sat, 15 Aug 2026 16:56:35 +0900 Subject: [PATCH 02/34] =?UTF-8?q?chore:=20feature/home=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=EC=9D=98=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20worry=5Fbin?= =?UTF-8?q?=20=EC=A4=91=EB=B3=B5=20=EC=97=90=EC=85=8B=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ArchiveScreen에서만 참조되던 worry_bin 시리즈가 feature/home에도 중복으로 남아있어 삭제한다. --- .../res/drawable-nodpi/worry_bin_anger_body.png | Bin 14252 -> 0 bytes .../res/drawable-nodpi/worry_bin_anger_note.png | Bin 17610 -> 0 bytes .../drawable-nodpi/worry_bin_anxiety_body.png | Bin 14066 -> 0 bytes .../drawable-nodpi/worry_bin_anxiety_note.png | Bin 16367 -> 0 bytes .../res/drawable-nodpi/worry_bin_joy_body.png | Bin 14583 -> 0 bytes .../res/drawable-nodpi/worry_bin_joy_note.png | Bin 12475 -> 0 bytes .../drawable-nodpi/worry_bin_prickly_body.png | Bin 14859 -> 0 bytes .../drawable-nodpi/worry_bin_prickly_note.png | Bin 16281 -> 0 bytes .../drawable-nodpi/worry_bin_quirky_body.png | Bin 14384 -> 0 bytes .../drawable-nodpi/worry_bin_quirky_note.png | Bin 16606 -> 0 bytes .../res/drawable-nodpi/worry_bin_sad_body.png | Bin 14181 -> 0 bytes .../res/drawable-nodpi/worry_bin_sad_note.png | Bin 12736 -> 0 bytes .../src/main/res/raw/worry_bin_anger_body.svg | 6 ------ .../src/main/res/raw/worry_bin_anger_note.svg | 9 --------- .../src/main/res/raw/worry_bin_anxiety_body.svg | 6 ------ .../src/main/res/raw/worry_bin_anxiety_note.svg | 9 --------- .../src/main/res/raw/worry_bin_joy_body.svg | 6 ------ .../src/main/res/raw/worry_bin_joy_note.svg | 8 -------- .../src/main/res/raw/worry_bin_prickly_body.svg | 6 ------ .../src/main/res/raw/worry_bin_prickly_note.svg | 9 --------- .../src/main/res/raw/worry_bin_quirky_body.svg | 6 ------ .../src/main/res/raw/worry_bin_quirky_note.svg | 9 --------- .../src/main/res/raw/worry_bin_sad_body.svg | 6 ------ .../src/main/res/raw/worry_bin_sad_note.svg | 6 ------ 24 files changed, 86 deletions(-) delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anger_body.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anger_note.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_note.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_joy_body.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_joy_note.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_body.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_note.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_body.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_note.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_sad_body.png delete mode 100644 feature/home/src/main/res/drawable-nodpi/worry_bin_sad_note.png delete mode 100644 feature/home/src/main/res/raw/worry_bin_anger_body.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_anger_note.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_anxiety_body.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_anxiety_note.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_joy_body.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_joy_note.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_prickly_body.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_prickly_note.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_quirky_body.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_quirky_note.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_sad_body.svg delete mode 100644 feature/home/src/main/res/raw/worry_bin_sad_note.svg diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_body.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_body.png deleted file mode 100644 index 8903fe28882667a7e9e179b3136cb26d787a5331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14252 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 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_anger_note.png deleted file mode 100644 index 1c564865604b727419436ed470fbacad0267ca6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17610 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 RPJUBFQ&mr;?2+}m{{fv6rtts( diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png deleted file mode 100644 index 2787202d15c928a06c29ed57b88a870d26d37536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14066 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 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_joy_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_joy_note.png deleted file mode 100644 index 09469ce84dc3c6f29c52305937874be4ed1ab689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12475 zcmeI3{Xdg?{Kw}eDxq>t?n0f;sZ)rf6Edt+oK#3f%w4Azm6>9u%{FpMx15e5$8AZ- z%}N+%8#!^J+|RPvW)x;-Zg$6P*LQNhkMED)f4~oWT-UB$cc0Ja{eHe*ulM7zyFOkX zy6a8WgFqnNW4|5o1%cF6yXv5|TB?mGzJF1*QH$~Qa069#Zsn=IIKs{yyL9p-Xpd@t zEl4fpGDvgz6xGK>^-*0~p#Hx{)IkLr|F^&VDJTVuOw=!YyQ60*y!oT&01@-l79U2&!@KQw)by0P+#}# zR>)NM*07-_`!^4Re)Ruv#V_-xifRV=>tp9GOw=Gv!XnL0D{$;Al60zmym4HC#o-${ z^BLp3lYC$M8(ChvU~^wsuqye0-Qa0_UR~jd3=8YN51u@+p(kE`v`HFeFkIXrdpr}ZHCuEx1xQhU5KrQ^#i)6-Z8-kHstDYwHfT7I#O9`b>3&Q5j1joV(=XnHw;PPBEv77VB% z?ow(!j-R)+yf2>sW?1qaW;#4eIig}q?~D&48pvX7IPb|rx^%2__dLC^a)ZqcaWg-@ zeP8#@z=Z*tS}$Tm9e)AZU4dLVgBwpe;&haE96r48f?hlj#5mG$(@<{M&^B7?=( zwO3LWBb?Ax4=iwq0Lr*`yXXUE0ALe@S@;2trD8r0%AtqiDJ~J=mhSqLLMx7>qv(NO zn(c<#C-uiePcM=}LLkD$!#F=F+vH4Z8q3#Rzp(;*y*t;U1V16Hdv4V@9NItpx{UnM zEpd6uf6(-D1gRF&^1j8AHyjn8C3~##6a#M`=PWm7uq!# z8jNP{E$574Se({0eB)#EtMhQU!nLnc@6Q*DIQl+CAclzojjjU0y>;` z9$X$7)OWZ}qe(Uk?HKt4+)!*>8h+ljN2hB+(l8H^*#dX(oMe2jV7>ptqI6s!4AnIj zuRZ8Og&1_6pg!T`!Bs=YlJk>e8Ty(<#aBc<=qr*9QGd2igN zdQwuwkI_MD1uOzW8R}Q_`I9aeX)z=^_k4b%)PXT^Hul3e~8+XS=f@#7N8s z{&76_=DxZgvc0}7L8?_ZWG>%9=~Ut0ZG)XMw2xELafh?0lUF-sx%jf^={cLJE0@!l zM(P5+d-vGjFIgt(y$8K_b33{C%wVK?4@G;fA^IPXtr>lA-Y>kHPvfE-uJT^aRS+2!L(;Kc_btwh z-Vn~1`O|5Le^U=Tb~9d>j}RjIVs^VCdUtMXnE5Jrwh{}G#z{NO)gsQ;4$2sI!3lM8 ztQ}B|kh6Zq$OTKxMXhm;4@x8?;N?PonT5;DfRjLI^W;OJMG$9!2&q-O*^llHx@sT!V@k) zdfs8?!Tf&m_+#G1(vL3l9em^(n?0i`9Htq}C?^Ka({

      ;|b&4vuf8RqFd0j-23eX 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 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_body.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_prickly_body.png deleted file mode 100644 index 5c2270c00e518672fa621a7b58e52ab9c6217331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14859 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

        B`AN@v|shLwHmaq?e_%7K&WMSKEMv5CwN&pD? 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 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_quirky_note.png deleted file mode 100644 index de1b64e72d781d6aca62b3f1250fc17e209cfb8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16606 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 diff --git a/feature/home/src/main/res/drawable-nodpi/worry_bin_sad_note.png b/feature/home/src/main/res/drawable-nodpi/worry_bin_sad_note.png deleted file mode 100644 index 504ce8f887b6089bafa1bc5622be520e949e4085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12736 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 diff --git a/feature/home/src/main/res/raw/worry_bin_anger_body.svg b/feature/home/src/main/res/raw/worry_bin_anger_body.svg deleted file mode 100644 index b409bb4c..00000000 --- a/feature/home/src/main/res/raw/worry_bin_anger_body.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_anger_note.svg b/feature/home/src/main/res/raw/worry_bin_anger_note.svg deleted file mode 100644 index 91704271..00000000 --- a/feature/home/src/main/res/raw/worry_bin_anger_note.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_anxiety_body.svg b/feature/home/src/main/res/raw/worry_bin_anxiety_body.svg deleted file mode 100644 index fdfbe337..00000000 --- a/feature/home/src/main/res/raw/worry_bin_anxiety_body.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_anxiety_note.svg b/feature/home/src/main/res/raw/worry_bin_anxiety_note.svg deleted file mode 100644 index 91891a09..00000000 --- a/feature/home/src/main/res/raw/worry_bin_anxiety_note.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_joy_body.svg b/feature/home/src/main/res/raw/worry_bin_joy_body.svg deleted file mode 100644 index ca6c332c..00000000 --- a/feature/home/src/main/res/raw/worry_bin_joy_body.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_joy_note.svg b/feature/home/src/main/res/raw/worry_bin_joy_note.svg deleted file mode 100644 index ac557359..00000000 --- a/feature/home/src/main/res/raw/worry_bin_joy_note.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_prickly_body.svg b/feature/home/src/main/res/raw/worry_bin_prickly_body.svg deleted file mode 100644 index c5167638..00000000 --- a/feature/home/src/main/res/raw/worry_bin_prickly_body.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_prickly_note.svg b/feature/home/src/main/res/raw/worry_bin_prickly_note.svg deleted file mode 100644 index b1f67d8f..00000000 --- a/feature/home/src/main/res/raw/worry_bin_prickly_note.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_quirky_body.svg b/feature/home/src/main/res/raw/worry_bin_quirky_body.svg deleted file mode 100644 index 466d461e..00000000 --- a/feature/home/src/main/res/raw/worry_bin_quirky_body.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_quirky_note.svg b/feature/home/src/main/res/raw/worry_bin_quirky_note.svg deleted file mode 100644 index 1e71d1ff..00000000 --- a/feature/home/src/main/res/raw/worry_bin_quirky_note.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_sad_body.svg b/feature/home/src/main/res/raw/worry_bin_sad_body.svg deleted file mode 100644 index b2896e18..00000000 --- a/feature/home/src/main/res/raw/worry_bin_sad_body.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/feature/home/src/main/res/raw/worry_bin_sad_note.svg b/feature/home/src/main/res/raw/worry_bin_sad_note.svg deleted file mode 100644 index 9a903853..00000000 --- a/feature/home/src/main/res/raw/worry_bin_sad_note.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - From c5023470319b7a84fd0261651d32b0f2ab00908d Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sat, 15 Aug 2026 16:56:43 +0900 Subject: [PATCH 03/34] =?UTF-8?q?feat:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=9D=84=20Figma=20=EB=94=94=EC=9E=90?= =?UTF-8?q?=EC=9D=B8=EC=97=90=20=EB=A7=9E=EC=B6=B0=20=EC=9E=AC=EA=B5=AC?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit body/note 레이어가 분리되어 있던 기존 worry_bin 에셋은 투명 캔버스 대비 그림이 작아 FillWidth 스케일링 시 깨져 보였다. Figma에서 내보낸 카드 단위 통합 이미지로 교체하고, 그리드 레이아웃/카드 크기를 디자인 실측 값에 맞춰 조정했다. --- .../android/feature/archive/ArchiveScreen.kt | 77 +++++------------- .../res/drawable-nodpi/worry_bin_anger.png | Bin 0 -> 24319 bytes .../drawable-nodpi/worry_bin_anger_body.png | Bin 14252 -> 0 bytes .../drawable-nodpi/worry_bin_anger_note.png | Bin 17610 -> 0 bytes .../res/drawable-nodpi/worry_bin_anxiety.png | Bin 0 -> 26494 bytes .../drawable-nodpi/worry_bin_anxiety_body.png | Bin 14066 -> 0 bytes .../drawable-nodpi/worry_bin_anxiety_note.png | Bin 16367 -> 0 bytes .../main/res/drawable-nodpi/worry_bin_joy.png | Bin 0 -> 26392 bytes .../res/drawable-nodpi/worry_bin_joy_body.png | Bin 14583 -> 0 bytes .../res/drawable-nodpi/worry_bin_joy_note.png | Bin 12475 -> 0 bytes .../res/drawable-nodpi/worry_bin_prickly.png | Bin 0 -> 25421 bytes .../drawable-nodpi/worry_bin_prickly_body.png | Bin 14859 -> 0 bytes .../drawable-nodpi/worry_bin_prickly_note.png | Bin 16281 -> 0 bytes .../res/drawable-nodpi/worry_bin_quirky.png | Bin 0 -> 27156 bytes .../drawable-nodpi/worry_bin_quirky_body.png | Bin 14384 -> 0 bytes .../drawable-nodpi/worry_bin_quirky_note.png | Bin 16606 -> 0 bytes .../main/res/drawable-nodpi/worry_bin_sad.png | Bin 0 -> 27872 bytes .../res/drawable-nodpi/worry_bin_sad_body.png | Bin 14181 -> 0 bytes .../res/drawable-nodpi/worry_bin_sad_note.png | Bin 12736 -> 0 bytes 19 files changed, 22 insertions(+), 55 deletions(-) create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_body.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_body.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_body.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_body.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_note.png create mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_body.png delete mode 100644 feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_note.png diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index af4d442f..b23d919e 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -3,7 +3,7 @@ package com.gamss.android.feature.archive import androidx.annotation.DrawableRes import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size @@ -22,9 +22,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.rotate -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight @@ -32,12 +29,12 @@ import androidx.compose.ui.unit.dp import com.gamss.android.core.designsystem.theme.GamssTheme private val archiveItems = listOf( - ArchiveItem("분노", R.drawable.worry_bin_anger_body, R.drawable.worry_bin_anger_note, 0f), - ArchiveItem("기쁨", R.drawable.worry_bin_joy_body, R.drawable.worry_bin_joy_note, 45f), - ArchiveItem("슬픔", R.drawable.worry_bin_sad_body, R.drawable.worry_bin_sad_note, -15f), - ArchiveItem("까칠", R.drawable.worry_bin_prickly_body, R.drawable.worry_bin_prickly_note, -7f), - ArchiveItem("불안", R.drawable.worry_bin_anxiety_body, R.drawable.worry_bin_anxiety_note, 11f), - ArchiveItem("엉뚱", R.drawable.worry_bin_quirky_body, R.drawable.worry_bin_quirky_note, -12f), + ArchiveItem("분노", R.drawable.worry_bin_anger), + ArchiveItem("기쁨", R.drawable.worry_bin_joy), + ArchiveItem("슬픔", R.drawable.worry_bin_sad), + ArchiveItem("까칠", R.drawable.worry_bin_prickly), + ArchiveItem("불안", R.drawable.worry_bin_anxiety), + ArchiveItem("엉뚱", R.drawable.worry_bin_quirky), ) @Composable @@ -51,19 +48,19 @@ fun ArchiveScreen( LazyVerticalGrid( columns = GridCells.Fixed(2), modifier = Modifier.padding(innerPadding), - contentPadding = androidx.compose.foundation.layout.PaddingValues( - start = 32.dp, - end = 32.dp, - top = 28.dp, - bottom = 24.dp, + contentPadding = PaddingValues( + start = 48.dp, + end = 48.dp, + top = 32.dp, + bottom = 27.dp, ), - horizontalArrangement = Arrangement.spacedBy(24.dp), - verticalArrangement = Arrangement.spacedBy(24.dp), + horizontalArrangement = Arrangement.spacedBy(40.dp), + verticalArrangement = Arrangement.spacedBy(11.dp), ) { item(span = { GridItemSpan(maxLineSpan) }) { Text( text = "다시 보고 싶은 쓰레기통을 열어보세요", - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.padding(bottom = 23.dp), style = GamssTheme.typography.body4Medium, color = GamssTheme.colors.gray950, ) @@ -83,7 +80,7 @@ private fun ArchiveTopBar( modifier = Modifier .fillMaxWidth() .statusBarsPadding() - .padding(horizontal = 20.dp, vertical = 14.dp), + .padding(horizontal = 18.dp, vertical = 19.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { @@ -109,44 +106,14 @@ private fun ArchiveTopBar( private fun ArchiveCard( item: ArchiveItem, ) { - Box( - modifier = Modifier - .fillMaxWidth() - .size(width = 140.dp, height = 164.dp), - contentAlignment = Alignment.TopCenter, - ) { - Image( - painter = painterResource(item.bodyRes), - contentDescription = item.title, - modifier = Modifier - .fillMaxWidth() - .align(Alignment.TopCenter), - contentScale = ContentScale.FillWidth, - ) - Text( - text = item.title, - modifier = Modifier.padding(top = 16.dp), - style = GamssTheme.typography.title5, - color = GamssTheme.colors.gray900, - ) - Box( - modifier = Modifier - .padding(top = 52.dp) - .size(width = 60.dp, height = 58.dp) - .rotate(item.noteRotation), - ) { - Image( - painter = painterResource(item.noteRes), - contentDescription = null, - modifier = Modifier.size(width = 60.dp, height = 58.dp), - ) - } - } + Image( + painter = painterResource(item.binRes), + contentDescription = item.title, + modifier = Modifier.size(width = 132.dp, height = 172.dp), + ) } private data class ArchiveItem( val title: String, - @param:DrawableRes val bodyRes: Int, - @param:DrawableRes val noteRes: Int, - val noteRotation: Float, + @param:DrawableRes val binRes: Int, ) diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger.png new file mode 100644 index 0000000000000000000000000000000000000000..3aa172e3b5e4ff54ee9310bba237ebac52b11c72 GIT binary patch literal 24319 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%0DV=*@w@!jc{~iLMx}IET0;XbAHLmLr_2DK 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 JYgKH*{s-RPu1^2} literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_body.png deleted file mode 100644 index 8903fe28882667a7e9e179b3136cb26d787a5331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14252 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 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger_note.png deleted file mode 100644 index 1c564865604b727419436ed470fbacad0267ca6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17610 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 RPJUBFQ&mr;?2+}m{{fv6rtts( diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety.png new file mode 100644 index 0000000000000000000000000000000000000000..4dcca1a82fd7fb03d78e6fc12d65abff9c4c7fbc GIT binary patch literal 26494 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 CbF(!7 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety_body.png deleted file mode 100644 index 2787202d15c928a06c29ed57b88a870d26d37536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14066 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 RkN? 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 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_body.png deleted file mode 100644 index 8987a7a3082b36b87c0519c153e2a2daa54f4a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14583 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 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy_note.png deleted file mode 100644 index 09469ce84dc3c6f29c52305937874be4ed1ab689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12475 zcmeI3{Xdg?{Kw}eDxq>t?n0f;sZ)rf6Edt+oK#3f%w4Azm6>9u%{FpMx15e5$8AZ- z%}N+%8#!^J+|RPvW)x;-Zg$6P*LQNhkMED)f4~oWT-UB$cc0Ja{eHe*ulM7zyFOkX zy6a8WgFqnNW4|5o1%cF6yXv5|TB?mGzJF1*QH$~Qa069#Zsn=IIKs{yyL9p-Xpd@t zEl4fpGDvgz6xGK>^-*0~p#Hx{)IkLr|F^&VDJTVuOw=!YyQ60*y!oT&01@-l79U2&!@KQw)by0P+#}# zR>)NM*07-_`!^4Re)Ruv#V_-xifRV=>tp9GOw=Gv!XnL0D{$;Al60zmym4HC#o-${ z^BLp3lYC$M8(ChvU~^wsuqye0-Qa0_UR~jd3=8YN51u@+p(kE`v`HFeFkIXrdpr}ZHCuEx1xQhU5KrQ^#i)6-Z8-kHstDYwHfT7I#O9`b>3&Q5j1joV(=XnHw;PPBEv77VB% z?ow(!j-R)+yf2>sW?1qaW;#4eIig}q?~D&48pvX7IPb|rx^%2__dLC^a)ZqcaWg-@ zeP8#@z=Z*tS}$Tm9e)AZU4dLVgBwpe;&haE96r48f?hlj#5mG$(@<{M&^B7?=( zwO3LWBb?Ax4=iwq0Lr*`yXXUE0ALe@S@;2trD8r0%AtqiDJ~J=mhSqLLMx7>qv(NO zn(c<#C-uiePcM=}LLkD$!#F=F+vH4Z8q3#Rzp(;*y*t;U1V16Hdv4V@9NItpx{UnM zEpd6uf6(-D1gRF&^1j8AHyjn8C3~##6a#M`=PWm7uq!# z8jNP{E$574Se({0eB)#EtMhQU!nLnc@6Q*DIQl+CAclzojjjU0y>;` z9$X$7)OWZ}qe(Uk?HKt4+)!*>8h+ljN2hB+(l8H^*#dX(oMe2jV7>ptqI6s!4AnIj zuRZ8Og&1_6pg!T`!Bs=YlJk>e8Ty(<#aBc<=qr*9QGd2igN zdQwuwkI_MD1uOzW8R}Q_`I9aeX)z=^_k4b%)PXT^Hul3e~8+XS=f@#7N8s z{&76_=DxZgvc0}7L8?_ZWG>%9=~Ut0ZG)XMw2xELafh?0lUF-sx%jf^={cLJE0@!l zM(P5+d-vGjFIgt(y$8K_b33{C%wVK?4@G;fA^IPXtr>lA-Y>kHPvfE-uJT^aRS+2!L(;Kc_btwh z-Vn~1`O|5Le^U=Tb~9d>j}RjIVs^VCdUtMXnE5Jrwh{}G#z{NO)gsQ;4$2sI!3lM8 ztQ}B|kh6Zq$OTKxMXhm;4@x8?;N?PonT5;DfRjLI^W;OJMG$9!2&q-O*^llHx@sT!V@k) zdfs8?!Tf&m_+#G1(vL3l9em^(n?0i`9Htq}C?^Ka({

        ;|b&4vuf8RqFd0j-23eX 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 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly.png new file mode 100644 index 0000000000000000000000000000000000000000..52e8a7921db759116f63a50f408b36b0761c34ab GIT binary patch literal 25421 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 HI_!S{^)aZ2 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly_body.png deleted file mode 100644 index 5c2270c00e518672fa621a7b58e52ab9c6217331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14859 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 Nf{dzkjigz~{{U(g*VX_4 literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_body.png deleted file mode 100644 index e321b6bed5ffb9178b577a94d115833daf049f40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14384 zcmeHt`9DaM7Skz^l~E$dJy zvXw3SQpi5m!HoI5j{E)oe7=9d_ov(A;bF#ko$Ga7&)2m)uj`yB13jHR93mVL1ns$e z>B2P#g26`^!t4TnR{T0Q!5`G!YdYs4a;w;H@a2qy`Q=+zuR=$`XAFdj{1ZYWOTe!P z_yxC;;Q#&yhDa>`_Zhi(SSg_fg0OEdUpQy%hngGok2%%`VNtIyNEfCZIL~qU=6Q(EU|%Bv z$0NXY|B-o&;No7zg_gu$Raob??!jj&zBa>_83F1i)q`e|w?16c@A(~AK26t{beb>C znKt!qnl>D098XVB;J@9LEWbTGsbOnX=8;+!@XN__Zgcg9w|Ba^Wktnwc=*QH=TVvZ z(T`W^$HvYduPHFl)xXN$lM~!SwwANGM@=82Z*bO!M+-(bCnySUd*z{&@ZQ)7x&PmR{Me16i9xnGMC;6uZRx&Dqb~j#Q=SM0^N=%=2S$WHrR~=8z7W=F5_xFsP;Y2yN!E%$X5Hc;ghHgy# zqEEj_{oq7yOVaGI^ra2rJr+l5hk9mbn}>6Jo+pe9W^J?Ej&}U^ivHr%Z)EhOe&wsK zXVH?Tq3goWD8BlRG@S=BI$VNmTw}?EmM~}ADhEjq#!zk3vo~jaBggb4fK5>|SwTke5 z*uFp=+#d6eLWXfPIqGD{wqSJ1wmvg`-E8}?pv&wAdziY`LU502v~SH;Qde?#7M;VG z7X_mw2$Y8?so8nPXb3%dY+RE0iKUmWoRhm!}he%=GzTww1L& zmZb-KXOjAuRV@uz|D&^R$%&#d8GWmRmip#q#aAjyw+ot8UF3>#=AL#*KXhUS8P3@c z-wdyy8D`e>&52j5%#7y;=jC!;G;TaoVtdXbXGlo3EA`2cd7bp5X`XZLU;CL8t!<{O z-q~8BRfXYm=^S=lc5(%- z5UtpDYjrF|V|l#FzEG5sjm>EN^5o*=;^=FY0xPd<`wvyv@aa7nM&kW>Tu+CC-tTq~ z8;#8fkeLnQZtkKEyz9$pXLol?bzi+ToHdkNC+Z?w`6Xf@QEYfFiOe&E&-PyF<{xsb z6ZN2R#4R?6R%d&!b&H?B;J3Wn{!g{KwZL(V`x_9s4m1w;+|k$*m7d|=#*KZdU7lO5 zh4#MAyJz(7tu$D%5>L3u=4w_NM&Jxw)A+gthk8GX2GKZB`-?&^_iiiq%Y6*UzI&)? zd2%6wi0AD#OtNp!dYG|ZeZGP^Rdv~HyGloitKYnotlKm#7E`Tb&gDLBlA@%j9_`ec z6S|n#s&8*pb#|VSD}kMB9z2;}!dD_XL7J4DI23cFQlU<4SKP>6C$7}&>58?D zHoWxRUt#Q5qiNm0)&F=-=d@{|Eyv%m}FX4-FRc1=g3EGpt;U&xA1$`K8^T#dk%aY)qF;F(f^!Jca6?GFM(Y0liBr6=`GY?^-S z9#>qCjkYjlhqiR75!id)a~T5cJW@C*%mtLxt6$7eO&WL3NrvX$-(Ib+jvT64R$Z8% zk4x^5YUd)pQ~9*-Jnnipant^_$~|hbg?t0}*PjO4mfEa3FwKJY8ojr@4HxI-r3$~esA5O<_9kYb*$ATGJjeQPq%1Z>kwikx_PsH%v#v09?CH8 zZWJZw(%gsE-Fp(N`J{08S=Ip52#X{wzp8nF?Ch27_xictaw2k3=q%BL5&FfqYGz(X z##VxnZ!BAqtiDD6+;xKjl8he@Jm}%NmBI|S70a#Iq_6%gz1K|Em{g}7yn^nN7}{Zp(!b3 zT)|Y;*Es8Fx&ILnH%V>WG70+#jmCeM0GbN<66f!>CC!P3IS=_Ne+a%;6Uqw99Ojvi zHVCoeT<2RvBt7T!%D2gLGkCv^!TzL5J$iv#&^9W5={A__cK8>f(Q(14pxqu{_dHFh zz?CK9=SIZ{A`utC!I_d&RV@dDeHn$piM^{O3+OvMn9{vub@cyUuP7^PSFGL#Z3+mS z*vkW*c&VGtBUNAq4~B=IgATtED>fr{f8S4h2(`cdp|lT1_w8?wb$fVcQqN8iXZg0_ z%$hEV`X&C^v)Uwh-9^;&0?>w+Zz@?$IOIb1itumV#Pc5q4M~M;c<-)og3qb%M2I-c zS}rS^@|aBi`|qF*4zZKOFJCf8o=xAt{TGm^C$ci3OMlFjLmekY(Aq|%lgAB>*Nf-5 zgI&GzYFvoGt;dhHt9#PTttud%K*wLw2G$b+j6zcmXhr~dj#4!|DAOfxG!u8n|HDv` zt`s-%-E2?CkzIi-o0>%+-igQgrdnHC8V(NMdC@6!L5`DHTx-i1>>DB+b235$kDotB z;(&_fP^NN+SqXvo6**S{$LhDTqOzZ1>2aCkEqrjVa|i8v6K=o{OM`o;;>$xZ`enanq=h^Ifs zDMA-yFXrX$bC`R5#QtV#rxh#NX3orK;;Rr5K1bRu2xSk_ zZ<99)d&C|Xv;2dRAf#+1l zDuHVokID5TAQ=Lmtb#lyTa#)*JZlydJPpU){xi$Aac){gu=HhMyJ31x@e?>r_7noDHtfrSV`zTrV>hz@N$PyXIvrS+tun}UX7Y=v zC$0@$aAat{p~G&wT+*A{|}HOomrnrm0m}XWO1Dc`08sP%t)7hjnmC5 z$32iFnGR5T6`aWnIaTPc-?8t$h_7MoP7YM)`}sXTSOwe$(xDZS4o6Sk9^16NcihdH zSICgK8A~|No*!%h33X(ha)Hrn<|IK#B4Em^sBdZM7jQHDO;)mPTtx7+@!Y+HDd9Z` z+zDW>udS{1COr>dH0V3>3ds}i_@5P7tgE}x*}apwH~@xUb?>D!JIOwwJw2&w)z3U&lm4M1}ysCMs&Ew6 zVV4BGb1$)j&vBrCfB8cFl!^T(;9$Kci9@Q)h%0Fk(I|hO&p6WeGHyz-Gxai2_-Q5@ z=sEBN$JA%)F(e?EqHedDF2M1%O((S6WAyz0YRQ5t5~P6W2~xjl=6l;tI{SBB_;eEi z$s?eLk$`4Vi{Cz9APGYX5m#6O0fqzuG;;dU2TH1zAyLrQPx`;WZU#cHSd_?$#LAiZ zQ>`e!(bv$U^_ZN85OI)Wg$3uuMbLsOR=?-Z!Lj;hmi zH{ZWQB!rRm8Q*P>aiF9=W=VYiTO`Ht_r7A1>e~ZNhj5@{nyQ)ctte&+u|oL|b=KEL!WJ+sscaZ{2>$g$V8eg46+Zj4rd-72_}R0<|KNfc?BO_XFzd19Gtj+X z$q9}PwD6i1tPm--h)Dnn1|DnYhS**<0;JX7mXzCZdZ`wR+UyBbD$xg9OLMNUP-biU z!U=UGG(lQFwq>{!cbA(0c?`cX1xKv`#J8(ymG6U=Ui|XRd*i9k83{G4hLhZ2v@#zs zJ(Ri(<7QJ&2f(qA5~$f7iCQv;a3e%^48$GN{UB1ly)vuIWiG<(qeS8yLWp|*IY_~{ z`aQ%O+<73RtXc!AgKMHYavJUi{N&i z`DYSytR4p`0#~1;4n*Tle$vig2)v#;EDbc)Miw}!fIhdT2>96cJHSPb81%Cso!|}d zbD&wt5k#gMhIkkP9r2xl*qNT_cb@XAwNK(PMYg2e!Hzqi+h(vRpGT5f8g3t?mn<}k znu;CmD-IHSaFw?gq<_2I^m>|&U|{9J92t1v5%!dHrMn#0=FUbJo&{# zIp+br)4|uGanY>Vcg?4{BcW-LcmR&UK10ad(mML8mCEV0b`fFXJ0H5{?f}m((uBt^ z)L0JU@V4mJP{B8P^zh*KHHW<}KT()d>(DWIbwaH9K~V6t&7?RWtVqad{_n9`aGGVt zthMAEL9ZRDJkr7Q|gJI2FC zXmB%%gtYyg8UtrrL{ah^`zU@jQpWlO$}X_;K&7FzTKcxfUcB|krNiu}=IxK$yLTUM zNiN(gRlp6<0h1A7mv@^Oe4{tCOCnzT3P}KZ`}XYvj|%6V-dqTCfhnimgIbiFzv&xBLhXV6mW4B~I7V#mLc5U6U6QgkK?+g2TgVj8{*1Ms&Ff>rh5;k7lokt4S%9eV$n&%# zbsTMQM4W#e_Jka5j@5^}3{-TB-I6hg@9;Tv=ule8F0f65H83DfZOP-Op~kuu$f-&v z;8M4XT1iQXvH$QXUjX5~FU~gN{<-Q~F35_bu)|5{lpcrJGnJSpARTc30c7O+w>ZC^ zdumHZiX{+&b-SRIl#&wne?r1U-@ZD#Y%qKP4Vf9v+%*@HCcfi^1O(6o-j^C$z)d89 zpYfEe_w@w-#=jrc?1&a*bG?GrzBsZr=lJIC-MfaCNHG{!C^!z?`<-y%(65bU@Gr_G zj4}3ow&v`YY-e+%lo+~TpxY7}d>@`BC|q>i1ItLam;L>#scHJs?tUo*5L;Ljru;U_ zc_9DB^U7d==g*! z=arn{F=y<%y-?p-eeH_`iU+ImE&^w48$(fn%QvhtSWANES6sj2<_GZ$)0x~P*XrqaO{MW ztWiB+O^#WVJj)Ks0Os&mJ0KP~eY_TQX1RUDhmxwZL0`_q#KZ&3l~gUpu@(s2q2Sx% zbdQ?2YstN}AAp*XR$)204xS9F=KV`M5_rH45_L2ROBR^vl^y*SOah;T@>Z@~^FEDFV38o0J5}I*^s?|Mu+D;(5Cs>4{dkf! zJn1x&8O=G{({y#@@)fkj;dTsUv<4M<{JlF0BHD4fh(KIo&!ZZLo1Z1k5dG;@t0iqcSxj5Ju36R^9_)6D#O*=kp$4 zcd5e3L%O=UMZsmeE`hu4Fkl0>;p{n7rca6w$lVPCy%SX&7-;?I0rM~{+l9-SY#IRzUQ*to@Sdrj zSMVsjBj3%B>rw`)Y@~jEX#QM#KA=v!;KW^o%@#tyu2z&#Xu^5zgWU=@y+PHC;V|L= zUcROWP#kH>3S@J+s>K6J|A!wxq<2#efhcVcMhvy^+Fg9~{C-EKu85sJX?F$F8HM-J zgBHJmGoai;qz{F>ULAsQ)*tUAvbqi2*Dh^WOF0-|x|1p73jPG8Ek|R^HUtBC?`a0z z>Z^kC(XejixWQh8ugAfbXhN4C2B8~W7Q}ZS*zkqasQB)O0~F+P4YI+Pi9x2RC=nmh z=;)00Q3QUn2F)hx>4V&P1!%7na=3agemOszy8qf7s4j{Yzr+ZJFV*cqLepeb=7yF* zakk>{)13TNGOq(VejHRLsatb}fNO;lLFIb!eGU3a-}^bYWDh6?_BmhwFyR8o%{*w4jO^`Ez@VXOFhe+>}n+l zp224`lOSRqEAT)tkfyqKx{>#4rd}jj!!7DiE6TBlF0=;)&++!2f?UcX1D3y0=7eh= z^W0~33WPvq;J~sx@Gn9DPyhf

          B`AN@v|shLwHmaq?e_%7K&WMSKEMv5CwN&pD? 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 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky_note.png deleted file mode 100644 index de1b64e72d781d6aca62b3f1250fc17e209cfb8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16606 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 V`9QI=zy@SUZ)H@ZD<#c>{tv!EwFLkG literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_body.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_body.png deleted file mode 100644 index fb0064c65182ab08c392f9bc43b801902c941bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14181 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 diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_note.png b/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad_note.png deleted file mode 100644 index 504ce8f887b6089bafa1bc5622be520e949e4085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12736 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 From c687447d34afb16dae8919e5daee28efa141d9e3 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sat, 15 Aug 2026 16:56:52 +0900 Subject: [PATCH 04/34] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B2=A0=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EB=82=A8=EC=9D=80=20CalendarKey=20?= =?UTF-8?q?=EC=B0=B8=EC=A1=B0=20=EB=B0=8F=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=ED=83=AD=20=EA=B0=80=EB=93=9C=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 TopLevelDestinationTest가 삭제된 CalendarKey를 계속 참조해 테스트 컴파일이 깨져 있었다. 또한 바텀바 아이템만 원격 설정으로 가려지고 ArchiveKey 네비게이션 엔트리 자체는 가드가 없어, 백스택 복원 등으로 진입 시 숨겨진 화면이 그려질 수 있었다. --- .../kotlin/com/gamss/android/app/main/MainScreen.kt | 11 ++++++++--- .../android/app/navigation/TopLevelDestinationTest.kt | 10 +++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index 925ae1d0..6261e551 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -56,7 +56,7 @@ fun MainScreen( topLevelKeys = remember(destinations) { destinations.keys() }, ) val navigator = remember(navigationState) { Navigator(navigationState) } - val entries = remember(navigator) { mainEntryProvider(navigator) } + val entries = remember(navigator, useCardFeature) { mainEntryProvider(navigator, useCardFeature) } val snackbarHostState = remember { SnackbarHostState() } ModelDownloadConfirmationEffect(modelDownloadPromptViewModel, snackbarHostState) @@ -92,7 +92,7 @@ fun MainScreen( } } -private fun mainEntryProvider(navigator: Navigator) = entryProvider { +private fun mainEntryProvider(navigator: Navigator, useCardFeature: Boolean) = entryProvider { entry { HomeScreen( onNavigateToSetting = { navigator.navigate(SettingKey) }, @@ -100,7 +100,12 @@ private fun mainEntryProvider(navigator: Navigator) = entryProvider { ) } entry { - ArchiveScreen(onNavigateToSetting = { navigator.navigate(SettingKey) }) + // 백스택 복원이나 플래그가 도중에 꺼지는 경우, 탭바에서 숨겨진 화면이 그려지지 않도록 홈으로 되돌린다. + if (useCardFeature) { + ArchiveScreen(onNavigateToSetting = { navigator.navigate(SettingKey) }) + } else { + LaunchedEffect(Unit) { navigator.navigate(HomeKey) } + } } entry { SettingScreen( diff --git a/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt b/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt index 557f8770..8d06042b 100644 --- a/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt +++ b/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt @@ -1,6 +1,6 @@ package com.gamss.android.app.navigation -import com.gamss.android.feature.calendar.navigation.CalendarKey +import com.gamss.android.feature.archive.navigation.ArchiveKey import com.gamss.android.feature.chat.navigation.ChatKey import com.gamss.android.feature.home.navigation.HomeKey import org.junit.Assert.assertEquals @@ -12,7 +12,7 @@ class TopLevelDestinationTest { @Test fun 탭은_보관함_홈_대화_세_종이다() { - assertEquals(listOf(CalendarKey, HomeKey, ChatKey), topLevelDestinations().map { it.key }) + assertEquals(listOf(ArchiveKey, HomeKey, ChatKey), topLevelDestinations().map { it.key }) } @Test @@ -26,7 +26,7 @@ class TopLevelDestinationTest { fun 카드_기능이_켜지면_보관함이_탭바에_들어간다() { val visible = topLevelDestinations().visibleIn(useCardFeature = true) - assertEquals(listOf(CalendarKey, HomeKey, ChatKey), visible.map { it.key }) + assertEquals(listOf(ArchiveKey, HomeKey, ChatKey), visible.map { it.key }) } /** @@ -37,7 +37,7 @@ class TopLevelDestinationTest { fun 보관함을_걸러도_네비게이션_key_집합은_그대로다() { val destinations = topLevelDestinations() - assertTrue(CalendarKey in destinations.keys()) - assertFalse(CalendarKey in destinations.visibleIn(useCardFeature = false).map { it.key }) + assertTrue(ArchiveKey in destinations.keys()) + assertFalse(ArchiveKey in destinations.visibleIn(useCardFeature = false).map { it.key }) } } From bb64566a99387a7acd4834cd124aacda1f5815f7 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sun, 16 Aug 2026 02:32:39 +0900 Subject: [PATCH 05/34] =?UTF-8?q?refactor:=20CardRepository=EB=A5=BC=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C/=EC=93=B0=EA=B8=B0=20=EC=B1=85=EC=9E=84?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B6=84=EB=A6=AC=ED=95=98=EA=B3=A0=20?= =?UTF-8?q?=EB=82=A0=EC=A7=9C=EB=B3=84=20=EC=B9=B4=EB=93=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getCardsByDate(조회)와 createCard(쓰기)가 호출부가 완전히 갈리는데도 한 인터페이스에 묶여 있어서, 서로 무관한 화면의 테스트 더블들이 쓰지 않는 메서드를 매번 스텁해야 했다. CardQueryRepository/CardWriteRepository로 나누고 CardRepositoryImpl이 둘 다 구현하도록 정리했다. --- .../gamss/android/data/di/RepositoryModule.kt | 12 ++- .../android/data/remote/card/CardService.kt | 5 ++ .../card/model/response/CardResponse.kt | 6 ++ .../data/repository/CardRepositoryImpl.kt | 15 +++- .../data/repository/CardRepositoryImplTest.kt | 87 +++++++++++++++++++ .../domain/card/CardQueryRepository.kt | 10 +++ ...rdRepository.kt => CardWriteRepository.kt} | 2 +- .../android/domain/card/CreateCardUseCase.kt | 2 +- .../domain/card/GetCardsByDateUseCase.kt | 14 +++ .../domain/card/CreateCardUseCaseTest.kt | 2 +- .../domain/card/GetCardsByDateUseCaseTest.kt | 38 ++++++++ .../conversation/ConversationSessionTest.kt | 4 +- .../android/feature/chat/ChatRoomTestFakes.kt | 6 +- .../android/feature/home/HomeTestFakes.kt | 4 +- 14 files changed, 192 insertions(+), 15 deletions(-) create mode 100644 data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt create mode 100644 domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt rename domain/src/main/kotlin/com/gamss/android/domain/card/{CardRepository.kt => CardWriteRepository.kt} (92%) create mode 100644 domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt create mode 100644 domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt diff --git a/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt b/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt index bf55a659..19f29202 100644 --- a/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt +++ b/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt @@ -12,7 +12,8 @@ import com.gamss.android.data.repository.ConversationRepositoryImpl import com.gamss.android.data.repository.TokenUsageRefreshNotifierImpl import com.gamss.android.data.repository.UserRepositoryImpl import com.gamss.android.domain.auth.AuthRepository -import com.gamss.android.domain.card.CardRepository +import com.gamss.android.domain.card.CardQueryRepository +import com.gamss.android.domain.card.CardWriteRepository import com.gamss.android.domain.conversation.ConversationRepository import com.gamss.android.domain.repository.TokenUsageRefreshNotifier import com.gamss.android.domain.user.UserRepository @@ -50,9 +51,14 @@ internal abstract class RepositoryModule { ): ConversationRepository @Binds - abstract fun bindCardRepository( + abstract fun bindCardQueryRepository( cardRepositoryImpl: CardRepositoryImpl - ): CardRepository + ): CardQueryRepository + + @Binds + abstract fun bindCardWriteRepository( + cardRepositoryImpl: CardRepositoryImpl + ): CardWriteRepository @Binds abstract fun bindTokenUsageRefreshNotifier( diff --git a/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt b/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt index 0d5ae9fb..6497b611 100644 --- a/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt +++ b/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt @@ -4,10 +4,15 @@ import com.gamss.android.data.remote.card.model.request.CreateCardRequest import com.gamss.android.data.remote.card.model.response.CardResponse import com.gamss.android.data.remote.model.response.ApiResponse import retrofit2.http.Body +import retrofit2.http.GET import retrofit2.http.POST +import retrofit2.http.Query internal interface CardService { + @GET("/api/cards") + suspend fun getCardsByDate(@Query("date") date: String): ApiResponse> + /** 종료된 채팅방에만 만들 수 있다. 대사는 서버가 생성한다. */ @POST("/api/cards") suspend fun createCard(@Body request: CreateCardRequest): ApiResponse diff --git a/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardResponse.kt b/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardResponse.kt index 9ebf3e2d..852441fb 100644 --- a/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardResponse.kt +++ b/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardResponse.kt @@ -1,15 +1,21 @@ package com.gamss.android.data.remote.card.model.response +import com.gamss.android.data.remote.emotion.toEmotionCharacter import com.gamss.android.domain.card.Card import com.gamss.android.domain.emotion.EmotionCharacter import kotlinx.serialization.Serializable @Serializable internal data class CardResponse( + val emotion: String? = null, val summary: String, val message: String, ) +/** 목록 응답의 감정 문자열이 알 수 없는 값이면 그 카드는 표시하지 않는다. */ +internal fun CardResponse.toDomainOrNull(): Card? = + emotion.toEmotionCharacter()?.let(::toDomain) + /** * 서버는 우리가 보낸 감정을 그대로 대표 감정으로 쓰므로 응답 문자열을 다시 해석하지 않고 * 보낸 캐릭터를 그대로 쓴다. 해석 실패로 카드를 잃는 경로를 없앤다. diff --git a/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt b/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt index 18cb79ca..6ea522e0 100644 --- a/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt +++ b/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt @@ -4,19 +4,30 @@ import com.gamss.android.core.common.AppResult import com.gamss.android.data.remote.card.CardService import com.gamss.android.data.remote.card.model.request.CreateCardRequest import com.gamss.android.data.remote.card.model.response.toDomain +import com.gamss.android.data.remote.card.model.response.toDomainOrNull import com.gamss.android.data.remote.emotion.toServerEmotionType import com.gamss.android.data.remote.runCatchingApiCall +import com.gamss.android.data.remote.throwIfFailed import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardNotRetryableException -import com.gamss.android.domain.card.CardRepository +import com.gamss.android.domain.card.CardQueryRepository +import com.gamss.android.domain.card.CardWriteRepository import com.gamss.android.domain.emotion.EmotionCharacter +import java.time.LocalDate import javax.inject.Inject import javax.inject.Singleton @Singleton internal class CardRepositoryImpl @Inject constructor( private val cardService: CardService, -) : CardRepository { +) : CardQueryRepository, CardWriteRepository { + + override suspend fun getCardsByDate(date: LocalDate): AppResult> = runCatchingApiCall { + val response = cardService.getCardsByDate(date.toString()) + response.throwIfFailed() + checkNotNull(response.data) { "No available card data" } + .mapNotNull { it.toDomainOrNull() } + } override suspend fun createCard( conversationId: Long, diff --git a/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt b/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt new file mode 100644 index 00000000..287a6022 --- /dev/null +++ b/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt @@ -0,0 +1,87 @@ +package com.gamss.android.data.repository + +import com.gamss.android.core.common.AppResult +import com.gamss.android.data.remote.card.CardService +import com.gamss.android.data.remote.card.model.response.CardResponse +import com.gamss.android.data.remote.model.response.ApiError +import com.gamss.android.data.remote.model.response.ApiResponse +import com.gamss.android.domain.auth.SessionExpiredException +import com.gamss.android.domain.emotion.EmotionCharacter +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import java.time.LocalDate + +class CardRepositoryImplTest { + + private val cardService: CardService = mockk() + private val repository = CardRepositoryImpl(cardService) + + @Test + fun `날짜를 API 형식으로 조회하고 카드 감정을 캐릭터로 매핑한다`() = runTest { + val date = LocalDate.of(2026, 8, 15) + coEvery { cardService.getCardsByDate("2026-08-15") } returns ApiResponse( + success = true, + data = listOf( + CardResponse( + emotion = "ANGER", + summary = "회의가 길어졌다", + message = "오늘 많이 힘들었겠다", + ), + ), + ) + + val result = repository.getCardsByDate(date) + + assertTrue(result is AppResult.Success) + assertEquals(EmotionCharacter.ANGER, (result as AppResult.Success).data.single().character) + coVerify(exactly = 1) { cardService.getCardsByDate("2026-08-15") } + } + + @Test + fun `알 수 없는 감정 카드는 제외하고 유효한 카드는 남긴다`() = runTest { + coEvery { cardService.getCardsByDate(any()) } returns ApiResponse( + success = true, + data = listOf( + CardResponse(emotion = "UNKNOWN", summary = "제외", message = "제외"), + CardResponse(emotion = "GRUMPY", summary = "남김", message = "남김"), + ), + ) + + val result = repository.getCardsByDate(DATE) + + assertEquals( + listOf(EmotionCharacter.PRICKLY), + (result as AppResult.Success).data.map { it.character }, + ) + } + + @Test + fun `성공 응답이어도 실패 envelope는 실패로 전한다`() = runTest { + coEvery { cardService.getCardsByDate(any()) } returns ApiResponse( + success = false, + error = ApiError(code = "EXPIRED_TOKEN", message = "만료"), + ) + + val result = repository.getCardsByDate(DATE) + + assertTrue((result as AppResult.Failure).throwable is SessionExpiredException) + } + + @Test + fun `카드 데이터가 없으면 실패로 전한다`() = runTest { + coEvery { cardService.getCardsByDate(any()) } returns ApiResponse(success = true) + + val result = repository.getCardsByDate(DATE) + + assertTrue((result as AppResult.Failure).throwable is IllegalStateException) + } + + private companion object { + val DATE: LocalDate = LocalDate.of(2026, 8, 15) + } +} diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt new file mode 100644 index 00000000..a98e3cde --- /dev/null +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt @@ -0,0 +1,10 @@ +package com.gamss.android.domain.card + +import com.gamss.android.core.common.AppResult +import java.time.LocalDate + +interface CardQueryRepository { + + /** 해당 날짜(KST)에 생성된 카드 목록을 가져온다. */ + suspend fun getCardsByDate(date: LocalDate): AppResult> +} diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardRepository.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt similarity index 92% rename from domain/src/main/kotlin/com/gamss/android/domain/card/CardRepository.kt rename to domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt index a4ff76ea..97c53554 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CardRepository.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt @@ -3,7 +3,7 @@ package com.gamss.android.domain.card import com.gamss.android.core.common.AppResult import com.gamss.android.domain.emotion.EmotionCharacter -interface CardRepository { +interface CardWriteRepository { /** 종료된 채팅방에만 만들 수 있고 방당 한 번만 성공한다. */ suspend fun createCard( diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt index 95ea3970..eb5a461b 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt @@ -9,7 +9,7 @@ import javax.inject.Inject const val MAX_CARD_SUMMARY_LENGTH = 1000 class CreateCardUseCase @Inject constructor( - private val cardRepository: CardRepository, + private val cardRepository: CardWriteRepository, ) : UseCase> { data class Params( diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt new file mode 100644 index 00000000..26dd115c --- /dev/null +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt @@ -0,0 +1,14 @@ +package com.gamss.android.domain.card + +import com.gamss.android.core.common.AppResult +import com.gamss.android.domain.usecase.UseCase +import java.time.LocalDate +import javax.inject.Inject + +class GetCardsByDateUseCase @Inject constructor( + private val cardRepository: CardQueryRepository, +) : UseCase>> { + + override suspend fun invoke(params: LocalDate): AppResult> = + cardRepository.getCardsByDate(params) +} diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt index 9abef4b3..04ccde98 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt @@ -9,7 +9,7 @@ import org.junit.Test class CreateCardUseCaseTest { - private class RecordingRepository : CardRepository { + private class RecordingRepository : CardWriteRepository { var sentSummary: String? = null private set diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt new file mode 100644 index 00000000..708b98d6 --- /dev/null +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt @@ -0,0 +1,38 @@ +package com.gamss.android.domain.card + +import com.gamss.android.core.common.AppResult +import com.gamss.android.domain.emotion.EmotionCharacter +import kotlinx.coroutines.runBlocking +import org.junit.Assert.assertEquals +import org.junit.Assert.assertSame +import org.junit.Test +import java.time.LocalDate + +class GetCardsByDateUseCaseTest { + + @Test + fun `선택한 날짜를 그대로 저장소에 전달한다`() = runBlocking { + val date = LocalDate.of(2026, 8, 15) + val expected = AppResult.Success( + listOf(Card(EmotionCharacter.ANGER, "회의가 길어졌다", "오늘 많이 힘들었겠다")), + ) + val repository = RecordingRepository(expected) + + val result = GetCardsByDateUseCase(repository)(date) + + assertEquals(date, repository.requestedDate) + assertSame(expected, result) + } + + private class RecordingRepository( + private val result: AppResult>, + ) : CardQueryRepository { + var requestedDate: LocalDate? = null + private set + + override suspend fun getCardsByDate(date: LocalDate): AppResult> { + requestedDate = date + return result + } + } +} diff --git a/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt index 21502d2c..b45fa0f6 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt @@ -2,7 +2,7 @@ package com.gamss.android.domain.conversation import com.gamss.android.core.common.AppResult import com.gamss.android.domain.card.Card -import com.gamss.android.domain.card.CardRepository +import com.gamss.android.domain.card.CardWriteRepository import com.gamss.android.domain.card.CreateCardUseCase import com.gamss.android.domain.card.CreateConversationCardUseCase import com.gamss.android.domain.emotion.ClassificationResult @@ -213,7 +213,7 @@ class ConversationSessionTest { } } - private object NoOpCardRepository : CardRepository { + private object NoOpCardRepository : CardWriteRepository { override suspend fun createCard( conversationId: Long, character: EmotionCharacter, diff --git a/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt b/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt index 64323f47..b75db51a 100644 --- a/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt +++ b/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt @@ -2,7 +2,7 @@ package com.gamss.android.feature.chat import com.gamss.android.core.common.AppResult import com.gamss.android.domain.card.Card -import com.gamss.android.domain.card.CardRepository +import com.gamss.android.domain.card.CardWriteRepository import com.gamss.android.domain.card.CreateCardUseCase import com.gamss.android.domain.card.CreateConversationCardUseCase import com.gamss.android.domain.config.GetRemoteConfigFlagUseCase @@ -46,7 +46,7 @@ import kotlinx.coroutines.flow.emptyFlow @Suppress("LongParameterList") internal fun chatRoomViewModel( conversationRepository: ConversationRepository = FakeConversationRepository(), - cardRepository: CardRepository = CountingCardRepository(), + cardRepository: CardWriteRepository = CountingCardRepository(), summarizer: DiarySummarizer = PassThroughSummarizer, classifier: EmotionClassifier = FlatClassifier, tokenUsageRefreshNotifier: TokenUsageRefreshNotifier = RecordingTokenUsageRefreshNotifier(), @@ -196,7 +196,7 @@ internal class FakeConversationRepository( internal class CountingCardRepository( private val gate: CompletableDeferred? = null, private val failure: Throwable? = null, -) : CardRepository { +) : CardWriteRepository { var calls = 0 private set diff --git a/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt b/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt index ca5c12e6..86a66567 100644 --- a/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt +++ b/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt @@ -2,7 +2,7 @@ package com.gamss.android.feature.home import com.gamss.android.core.common.AppResult import com.gamss.android.domain.card.Card -import com.gamss.android.domain.card.CardRepository +import com.gamss.android.domain.card.CardWriteRepository import com.gamss.android.domain.card.CreateCardUseCase import com.gamss.android.domain.card.CreateConversationCardUseCase import com.gamss.android.domain.conversation.CommentGenerationStatus @@ -110,7 +110,7 @@ internal class RecordingConversationRepository( AppResult.Success(Unit) } -private object NoCardRepository : CardRepository { +private object NoCardRepository : CardWriteRepository { override suspend fun createCard( conversationId: Long, character: EmotionCharacter, From 86c9ba4efb166437d147dfa85031dce3d89732cb Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sun, 16 Aug 2026 02:33:07 +0900 Subject: [PATCH 06/34] =?UTF-8?q?feat:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=ED=99=94=EB=A9=B4=EA=B3=BC=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EB=AC=BC=EB=A6=AC=20=EB=82=99=ED=95=98=20=EC=95=A0?= =?UTF-8?q?=EB=8B=88=EB=A9=94=EC=9D=B4=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 감정 쓰레기통을 열면 그 달 카드들이 원 충돌 기반 경량 2D 물리 시뮬레이션(중력, 벽/바닥 반발, 카드 간 충돌)으로 낙하해 쌓이는 연출을 넣었다. PaperPhysics.kt는 Compose 의존성 없는 순수 Kotlin이라 물리 로직만 따로 검증할 수 있다. 보관함 그리드에서 감정 쓰레기통을 누르면 상세 화면으로 이동하도록 클릭도 연결했다. --- .../gamss/android/core/common/util/Date.kt | 2 +- feature/calendar/build.gradle.kts | 1 + .../feature/archive/ArchiveDetailScreen.kt | 313 ++++++++++++++++++ .../feature/archive/ArchiveDetailState.kt | 11 + .../feature/archive/ArchiveDetailViewModel.kt | 36 ++ .../android/feature/archive/ArchiveScreen.kt | 145 ++++---- .../android/feature/archive/PaperPhysics.kt | 163 +++++++++ .../archive/navigation/ArchiveDetailKey.kt | 15 + .../main/res/drawable-nodpi/archive_paper.png | Bin 0 -> 62227 bytes .../calendar/src/main/res/values/strings.xml | 8 + .../archive/ArchiveDetailViewModelTest.kt | 75 +++++ 11 files changed, 706 insertions(+), 63 deletions(-) create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt create mode 100644 feature/calendar/src/main/res/drawable-nodpi/archive_paper.png create mode 100644 feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt diff --git a/core/common/src/main/java/com/gamss/android/core/common/util/Date.kt b/core/common/src/main/java/com/gamss/android/core/common/util/Date.kt index adaced20..8f04f186 100644 --- a/core/common/src/main/java/com/gamss/android/core/common/util/Date.kt +++ b/core/common/src/main/java/com/gamss/android/core/common/util/Date.kt @@ -9,7 +9,7 @@ import java.util.Locale private const val KOREAN_TIME_PATTERN = "a h:mm" -private val KoreanTimeZone: ZoneId = ZoneId.of("Asia/Seoul") +val KoreanTimeZone: ZoneId = ZoneId.of("Asia/Seoul") private val KoreanTimeFormatter: DateTimeFormatter = DateTimeFormatter .ofPattern(KOREAN_TIME_PATTERN, Locale.KOREAN) .withZone(KoreanTimeZone) diff --git a/feature/calendar/build.gradle.kts b/feature/calendar/build.gradle.kts index 97c71ddf..5e716ade 100644 --- a/feature/calendar/build.gradle.kts +++ b/feature/calendar/build.gradle.kts @@ -8,5 +8,6 @@ android { dependencies { implementation(projects.core.ui) + implementation(projects.domain) implementation(libs.compose.material.icons.core) } diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt new file mode 100644 index 00000000..f5e717b1 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -0,0 +1,313 @@ +package com.gamss.android.feature.archive + +import androidx.activity.compose.BackHandler +import androidx.compose.foundation.Image +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +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.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameNanos +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalDensity +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 androidx.hilt.navigation.compose.hiltViewModel +import com.gamss.android.core.common.util.KoreanTimeZone +import com.gamss.android.core.designsystem.component.GamssIconButton +import com.gamss.android.core.designsystem.component.GamssTopBar +import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.domain.card.Card +import com.gamss.android.domain.emotion.EmotionCharacter +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.isActive +import org.orbitmvi.orbit.compose.collectAsState +import java.time.YearMonth +import java.time.format.DateTimeFormatter +import kotlin.random.Random + +@Composable +fun ArchiveDetailScreen( + emotion: EmotionCharacter, + onBackClick: () -> Unit, + viewModel: ArchiveDetailViewModel = hiltViewModel(), +) { + val state by viewModel.collectAsState() + + LaunchedEffect(emotion) { viewModel.load(emotion) } + BackHandler(onBack = onBackClick) + + ArchiveDetailFrame(emotion = emotion, state = state, onBackClick = onBackClick) +} + +@Composable +private fun ArchiveDetailFrame( + emotion: EmotionCharacter, + state: ArchiveDetailState, + onBackClick: () -> Unit, +) { + Scaffold( + containerColor = GamssTheme.colors.white, + topBar = { + GamssTopBar( + contentPadding = PaddingValues(start = DetailTopBarStartPadding, end = DetailTopBarEndPadding), + leading = { + Row(verticalAlignment = Alignment.CenterVertically) { + GamssIconButton( + iconRes = com.gamss.android.core.designsystem.R.drawable.ic_left_chevron, + contentDescription = stringResource(R.string.archive_back_description), + onClick = onBackClick, + hitPadding = DetailBackHitPadding, + ) + Text( + text = emotion.displayName, + style = GamssTheme.typography.title4, + color = GamssTheme.colors.gray900, + modifier = Modifier.padding(start = DetailTitleStartPadding), + ) + } + }, + trailing = { + // 비우기는 실제 카드/대화를 삭제하는 파괴적 동작이므로 확인 UI가 준비되기 전에는 표시만 한다. + Text( + text = stringResource(R.string.archive_clear), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray900, + ) + }, + ) + }, + ) { innerPadding -> + ArchiveDetailContent(state = state, modifier = Modifier.padding(innerPadding)) + } +} + +@Composable +private fun ArchiveDetailContent( + state: ArchiveDetailState, + modifier: Modifier = Modifier, +) { + Box(modifier = modifier.fillMaxSize()) { + MonthSelector(modifier = Modifier.align(Alignment.TopCenter)) + when { + state.isLoading -> Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator(color = GamssTheme.colors.gray700) + } + + state.loadFailed -> Text( + text = stringResource(R.string.archive_cards_load_failed), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray500, + modifier = Modifier.align(Alignment.Center), + ) + + state.cards.isEmpty() -> Text( + text = stringResource(R.string.archive_cards_empty), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray500, + modifier = Modifier.align(Alignment.Center), + ) + + else -> PaperPile(cards = state.cards) + } + } +} + +@Composable +private fun MonthSelector(modifier: Modifier = Modifier) { + Row( + modifier = modifier + .padding( + start = DetailHorizontalPadding, + end = DetailHorizontalPadding, + top = DetailMonthTopPadding, + ) + .fillMaxWidth() + .height(DetailMonthHeight) + .border(DetailMonthBorderWidth, GamssTheme.colors.gray900) + .padding(horizontal = DetailMonthHorizontalPadding), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = YearMonth.now(KoreanTimeZone).format(YearMonthFormatter), + style = GamssTheme.typography.title4, + color = GamssTheme.colors.gray900, + ) + Image( + painter = painterResource(com.gamss.android.core.designsystem.R.drawable.ic_right_chevron), + contentDescription = null, + modifier = Modifier.graphicsLayer { rotationZ = 90f }, + ) + } +} + +@Stable +private class PaperUiState(x: Float, y: Float, rotationDegrees: Float) { + var x by mutableFloatStateOf(x) + var y by mutableFloatStateOf(y) + var rotationDegrees by mutableFloatStateOf(rotationDegrees) +} + +@Composable +private fun PaperPile(cards: List) { + BoxWithConstraints( + modifier = Modifier + .fillMaxSize() + .padding(top = DetailPaperPileTopPadding), + contentAlignment = Alignment.TopCenter, + ) { + val scale = (maxWidth / DetailPaperDesignWidth).coerceAtMost(1f) + val density = LocalDensity.current + val boundsWidthPx = with(density) { (DetailPaperDesignWidth * scale).toPx() } + val boundsHeightPx = with(density) { maxHeight.toPx() } + val paperSizePx = with(density) { (DetailPaperSize * scale).toPx() } + val radiusPx = paperSizePx / 2f * PaperCollisionRadiusScale + + // 화면 회전 등으로 boundsWidthPx/boundsHeightPx만 바뀌었을 때는 키에서 빼서, 이미 쌓인 카드가 + // 처음부터 다시 쏟아지지 않게 한다 — cards 자체가 바뀔 때만 스폰/낙하를 새로 시작한다. + val uiStates = remember(cards) { + List(cards.size) { index -> + val spawnX = radiusPx + Random.nextFloat() * (boundsWidthPx - radiusPx * 2f).coerceAtLeast(0f) + val spawnY = -radiusPx - index * radiusPx * PaperSpawnStagger + val spawnRotation = (Random.nextFloat() - 0.5f) * 2f * PaperMaxTiltDegrees + PaperUiState(x = spawnX, y = spawnY, rotationDegrees = spawnRotation) + } + } + + LaunchedEffect(cards) { + runPaperFall(uiStates = uiStates, boundsWidthPx = boundsWidthPx, boundsHeightPx = boundsHeightPx, radiusPx = radiusPx) + } + + cards.forEachIndexed { index, card -> + val ui = uiStates.getOrNull(index) ?: return@forEachIndexed + Image( + painter = painterResource(R.drawable.archive_paper), + contentDescription = card.summary, + modifier = Modifier + .align(Alignment.TopStart) + .size(DetailPaperSize * scale) + .graphicsLayer { + translationX = ui.x - paperSizePx / 2f + translationY = ui.y - paperSizePx / 2f + rotationZ = ui.rotationDegrees + }, + ) + } + } +} + +/** [PaperPile]의 낙하 물리 루프. 매 프레임 [PaperPhysicsWorld]를 갱신해 [uiStates]에 반영하고, 다 쌓이면 멈춘다. */ +private suspend fun CoroutineScope.runPaperFall( + uiStates: List, + boundsWidthPx: Float, + boundsHeightPx: Float, + radiusPx: Float, +) { + val bodies = uiStates.map { ui -> + PaperBody( + startX = ui.x, + startY = ui.y, + startAngle = ui.rotationDegrees.toRadians(), + radius = radiusPx, + startVelX = (Random.nextFloat() - 0.5f) * PaperSpawnDrift, + startAngularVelocity = (Random.nextFloat() - 0.5f) * PaperSpawnSpin, + ) + } + val world = PaperPhysicsWorld(bodies, boundsWidth = boundsWidthPx, boundsHeight = boundsHeightPx) + + var lastFrameNanos = -1L + var startFrameNanos = -1L + var settledFrames = 0 + while (isActive) { + withFrameNanos { frameNanos -> + if (startFrameNanos < 0) startFrameNanos = frameNanos + val dt = if (lastFrameNanos < 0) { + PhysicsFixedDt + } else { + ((frameNanos - lastFrameNanos) / 1_000_000_000f).coerceIn(0f, PhysicsMaxDt) + } + lastFrameNanos = frameNanos + + world.step(dt) + bodies.forEachIndexed { index, body -> + uiStates[index].apply { + x = body.x + y = body.y + rotationDegrees = body.angle.toDegrees() + } + } + settledFrames = if (world.maxActivity() < PhysicsSettleThreshold) settledFrames + 1 else 0 + } + val elapsedNanos = lastFrameNanos - startFrameNanos + if (settledFrames >= PhysicsSettleFrames || elapsedNanos > PhysicsMaxDurationNanos) break + } +} + +private const val PaperCollisionRadiusScale = 1.15f +private const val PaperMaxTiltDegrees = 42f +private const val PaperSpawnStagger = 0.9f +private const val PaperSpawnDrift = 120f +private const val PaperSpawnSpin = 0.15f +private const val PhysicsFixedDt = 1f / 60f +private const val PhysicsMaxDt = 1f / 30f +private const val PhysicsSettleThreshold = 4f +private const val PhysicsSettleFrames = 30 +private const val PhysicsMaxDurationNanos = 5_000_000_000L + +private val YearMonthFormatter = DateTimeFormatter.ofPattern("yyyy.MM") +private val DetailTopBarStartPadding = 18.dp +private val DetailTopBarEndPadding = 18.dp +private val DetailBackHitPadding = 0.dp +private val DetailTitleStartPadding = 12.dp +private val DetailHorizontalPadding = 18.dp +private val DetailMonthTopPadding = 24.dp +private val DetailMonthHeight = 48.dp +private val DetailMonthBorderWidth = 1.dp +private val DetailMonthHorizontalPadding = 12.dp +private val DetailPaperPileTopPadding = 136.dp +private val DetailPaperDesignWidth = 402.dp +private val DetailPaperSize = 88.dp + +@Preview(showBackground = true, widthDp = 402, heightDp = 874) +@Composable +private fun ArchiveDetailPaperPilePreview() { + GamssTheme(darkTheme = false) { + ArchiveDetailFrame( + emotion = EmotionCharacter.QUIRKY, + state = ArchiveDetailState( + emotion = EmotionCharacter.QUIRKY, + isLoading = false, + cards = List(24) { PreviewCard }, + ), + onBackClick = {}, + ) + } +} + +private val PreviewCard = Card( + character = EmotionCharacter.QUIRKY, + summary = "미리보기 카드", + message = "", +) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt new file mode 100644 index 00000000..e84ecdb4 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt @@ -0,0 +1,11 @@ +package com.gamss.android.feature.archive + +import com.gamss.android.domain.card.Card +import com.gamss.android.domain.emotion.EmotionCharacter + +data class ArchiveDetailState( + val emotion: EmotionCharacter? = null, + val isLoading: Boolean = true, + val cards: List = emptyList(), + val loadFailed: Boolean = false, +) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt new file mode 100644 index 00000000..98f8e156 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -0,0 +1,36 @@ +package com.gamss.android.feature.archive + +import androidx.lifecycle.ViewModel +import com.gamss.android.core.common.AppResult +import com.gamss.android.core.common.util.KoreanTimeZone +import com.gamss.android.domain.card.GetCardsByDateUseCase +import com.gamss.android.domain.emotion.EmotionCharacter +import dagger.hilt.android.lifecycle.HiltViewModel +import org.orbitmvi.orbit.ContainerHost +import org.orbitmvi.orbit.viewmodel.container +import java.time.LocalDate +import javax.inject.Inject + +@HiltViewModel +class ArchiveDetailViewModel @Inject constructor( + private val getCardsByDate: GetCardsByDateUseCase, +) : ViewModel(), ContainerHost { + + override val container = container(ArchiveDetailState()) + + fun load(emotion: EmotionCharacter) = intent { + if (state.emotion == emotion && !state.isLoading) return@intent + + reduce { ArchiveDetailState(emotion = emotion) } + when (val result = getCardsByDate(LocalDate.now(KoreanTimeZone))) { + is AppResult.Success -> reduce { + state.copy( + isLoading = false, + cards = result.data.filter { it.character == emotion }, + ) + } + + is AppResult.Failure -> reduce { state.copy(isLoading = false, loadFailed = true) } + } + } +} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index b23d919e..8ddac23c 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -2,72 +2,89 @@ package com.gamss.android.feature.archive import androidx.annotation.DrawableRes import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.GridItemSpan -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Menu -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton +import androidx.compose.foundation.layout.width import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.gamss.android.core.designsystem.component.GamssIconButton +import com.gamss.android.core.designsystem.component.GamssIcons +import com.gamss.android.core.designsystem.component.GamssLogo +import com.gamss.android.core.designsystem.component.GamssTopBar import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.domain.emotion.EmotionCharacter private val archiveItems = listOf( - ArchiveItem("분노", R.drawable.worry_bin_anger), - ArchiveItem("기쁨", R.drawable.worry_bin_joy), - ArchiveItem("슬픔", R.drawable.worry_bin_sad), - ArchiveItem("까칠", R.drawable.worry_bin_prickly), - ArchiveItem("불안", R.drawable.worry_bin_anxiety), - ArchiveItem("엉뚱", R.drawable.worry_bin_quirky), + ArchiveItem(EmotionCharacter.ANGER, R.drawable.worry_bin_anger), + ArchiveItem(EmotionCharacter.JOY, R.drawable.worry_bin_joy), + ArchiveItem(EmotionCharacter.SADNESS, R.drawable.worry_bin_sad), + ArchiveItem(EmotionCharacter.PRICKLY, R.drawable.worry_bin_prickly), + ArchiveItem(EmotionCharacter.ANXIETY, R.drawable.worry_bin_anxiety), + ArchiveItem(EmotionCharacter.QUIRKY, R.drawable.worry_bin_quirky), ) @Composable fun ArchiveScreen( onNavigateToSetting: () -> Unit, + onArchiveClick: (EmotionCharacter) -> Unit, ) { Scaffold( containerColor = GamssTheme.colors.white, topBar = { ArchiveTopBar(onMenuClick = onNavigateToSetting) }, ) { innerPadding -> - LazyVerticalGrid( - columns = GridCells.Fixed(2), + BoxWithConstraints( modifier = Modifier.padding(innerPadding), - contentPadding = PaddingValues( - start = 48.dp, - end = 48.dp, - top = 32.dp, - bottom = 27.dp, - ), - horizontalArrangement = Arrangement.spacedBy(40.dp), - verticalArrangement = Arrangement.spacedBy(11.dp), + contentAlignment = Alignment.TopCenter, ) { - item(span = { GridItemSpan(maxLineSpan) }) { - Text( - text = "다시 보고 싶은 쓰레기통을 열어보세요", - modifier = Modifier.padding(bottom = 23.dp), - style = GamssTheme.typography.body4Medium, - color = GamssTheme.colors.gray950, - ) - } - items(items = archiveItems, key = { it.title }) { item -> - ArchiveCard(item = item) + val scale = (maxWidth / ArchiveDesignWidth).coerceAtMost(1f) + val gridWidth = ArchiveDesignWidth * scale + + Column( + modifier = Modifier + .width(gridWidth) + .padding( + start = ArchiveHorizontalPadding * scale, + end = ArchiveHorizontalPadding * scale, + top = ArchiveTopPadding * scale, + bottom = ArchiveBottomPadding * scale, + ), + verticalArrangement = Arrangement.spacedBy(ArchiveVerticalSpacing * scale), + ) { + archiveItems.chunked(ArchiveColumnCount).forEach { rowItems -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(ArchiveHorizontalSpacing * scale), + ) { + rowItems.forEach { item -> + ArchiveCard(item = item, scale = scale, onClick = { onArchiveClick(item.emotion) }) + } + } + } } + Text( + text = "다시 보고 싶은 쓰레기통을 열어보세요", + modifier = Modifier + .width(gridWidth) + .padding(top = ArchiveTitleTopPadding * scale), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray950, + textAlign = TextAlign.Center, + ) } } } @@ -76,44 +93,48 @@ fun ArchiveScreen( private fun ArchiveTopBar( onMenuClick: () -> Unit, ) { - Row( - modifier = Modifier - .fillMaxWidth() - .statusBarsPadding() - .padding(horizontal = 18.dp, vertical = 19.dp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = "GAMSS", - style = GamssTheme.typography.title4.copy( - fontWeight = FontWeight.Bold, - fontFamily = FontFamily.Cursive, - ), - color = GamssTheme.colors.gray950, - ) - IconButton(onClick = onMenuClick) { - Icon( - imageVector = Icons.Filled.Menu, + GamssTopBar( + contentPadding = PaddingValues(start = ArchiveTopBarStartPadding, end = ArchiveTopBarEndPadding), + leading = { GamssLogo(contentDescription = stringResource(R.string.archive_logo_description)) }, + trailing = { + GamssIconButton( + iconRes = GamssIcons.Setting, contentDescription = "설정", - tint = GamssTheme.colors.gray700, + onClick = onMenuClick, ) - } - } + }, + ) } @Composable private fun ArchiveCard( item: ArchiveItem, + scale: Float, + onClick: () -> Unit, ) { Image( painter = painterResource(item.binRes), - contentDescription = item.title, - modifier = Modifier.size(width = 132.dp, height = 172.dp), + contentDescription = stringResource(R.string.archive_open_description, item.emotion.displayName), + modifier = Modifier + .size(width = ArchiveCardWidth * scale, height = ArchiveCardHeight * scale) + .clickable(role = Role.Button, onClick = onClick), ) } private data class ArchiveItem( - val title: String, + val emotion: EmotionCharacter, @param:DrawableRes val binRes: Int, ) + +private val ArchiveDesignWidth = 402.dp +private val ArchiveHorizontalPadding = 48.dp +private val ArchiveTopPadding = 32.dp +private val ArchiveBottomPadding = 27.dp +private val ArchiveTitleTopPadding = 8.dp +private val ArchiveHorizontalSpacing = 40.dp +private val ArchiveVerticalSpacing = 11.dp +private val ArchiveCardWidth = 132.dp +private val ArchiveCardHeight = 172.dp +private val ArchiveTopBarStartPadding = 20.dp +private val ArchiveTopBarEndPadding = 8.dp +private const val ArchiveColumnCount = 2 diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt new file mode 100644 index 00000000..ed2c7158 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt @@ -0,0 +1,163 @@ +package com.gamss.android.feature.archive + +import kotlin.math.PI +import kotlin.math.abs +import kotlin.math.sqrt + +internal fun Float.toRadians(): Float = this * (PI.toFloat() / 180f) +internal fun Float.toDegrees(): Float = this * (180f / PI.toFloat()) + +internal class PaperBody( + startX: Float, + startY: Float, + startAngle: Float, + val radius: Float, + startVelX: Float = 0f, + startVelY: Float = 0f, + startAngularVelocity: Float = 0f, +) { + var x: Float = startX + var y: Float = startY + var velX: Float = startVelX + var velY: Float = startVelY + var angle: Float = startAngle + var angularVelocity: Float = startAngularVelocity +} + +/** + * 원(circle) 충돌 근사 기반의 경량 2D 리지드바디 시뮬레이터. + * 카드가 중력으로 낙하하다 바닥/벽/서로에게 부딪혀 자연스럽게 쌓이는 연출용. + * + * 위치/속도를 불변 Vec2 대신 [PaperBody]의 원시 Float 필드로 들고, resolvePair()의 로컬 계산도 + * Float 변수로 풀어 쓴다 — 카드 20여 개 기준 프레임당 수천 개씩 생기던 임시 객체 할당을 없애 GC 압박을 줄인다. + */ +internal class PaperPhysicsWorld( + private val bodies: List, + private val boundsWidth: Float, + private val boundsHeight: Float, +) { + fun step(dt: Float) { + bodies.forEach { body -> + body.velY += Gravity * dt + body.x += body.velX * dt + body.y += body.velY * dt + body.angle += body.angularVelocity * dt + body.velX *= LinearDamping + body.velY *= LinearDamping + val dampedAngularVelocity = (body.angularVelocity * AngularDamping).coerceIn(-MaxAngularVelocity, MaxAngularVelocity) + // Snap near-zero spin to exactly zero, otherwise resting contacts keep re-injecting + // sub-threshold torque every frame and the pile never stops turning in place. + body.angularVelocity = if (abs(dampedAngularVelocity) < AngularSleepThreshold) 0f else dampedAngularVelocity + } + bodies.forEach(::resolveBounds) + repeat(CollisionIterations) { resolvePairs() } + } + + fun maxActivity(): Float = bodies.maxOf { body -> + val linear = sqrt(body.velX * body.velX + body.velY * body.velY) + val angular = abs(body.angularVelocity) * AngularActivityWeight + linear + angular + } + + private fun resolveBounds(body: PaperBody) { + val minX = body.radius + val maxX = boundsWidth - body.radius + val floorY = boundsHeight - body.radius + + when { + body.x < minX -> { + body.x = minX + body.velX = -body.velX * Restitution + body.angularVelocity -= body.velY * WallSpinTransfer + } + + body.x > maxX -> { + body.x = maxX + body.velX = -body.velX * Restitution + body.angularVelocity += body.velY * WallSpinTransfer + } + } + + if (body.y > floorY) { + body.y = floorY + body.velY = if (body.velY > 0f) -body.velY * Restitution else body.velY + val friction = body.velX * Friction + body.velX = friction + body.angularVelocity += friction * FloorSpinTransfer + } + } + + private fun resolvePairs() { + for (i in bodies.indices) { + for (j in i + 1 until bodies.size) { + resolvePair(bodies[i], bodies[j]) + } + } + } + + private fun resolvePair(a: PaperBody, b: PaperBody) { + val dx = b.x - a.x + val dy = b.y - a.y + val distance = sqrt(dx * dx + dy * dy) + val minDistance = a.radius + b.radius + if (distance >= minDistance || distance <= MinSeparationDistance) return + + val nx = dx / distance + val ny = dy / distance + val overlap = (minDistance - distance - PositionSlop).coerceAtLeast(0f) + val correctionX = nx * (overlap * 0.5f) + val correctionY = ny * (overlap * 0.5f) + a.x -= correctionX + a.y -= correctionY + b.x += correctionX + b.y += correctionY + + val relVelX = b.velX - a.velX + val relVelY = b.velY - a.velY + val speedAlongNormal = relVelX * nx + relVelY * ny + if (speedAlongNormal > 0f) return + + val impulseMagnitude = -(1f + Restitution) * speedAlongNormal / 2f + val impulseX = nx * impulseMagnitude + val impulseY = ny * impulseMagnitude + a.velX -= impulseX + a.velY -= impulseY + b.velX += impulseX + b.velY += impulseY + + val tangentX = -ny + val tangentY = nx + val tangentSpeed = relVelX * tangentX + relVelY * tangentY + // Resting bodies keep re-touching under gravity every frame with tiny tangential noise; + // ignoring it below this speed stops the pile from spinning in place once it has landed. + if (abs(tangentSpeed) > RestingTangentSpeed) { + val spinImpulse = tangentSpeed * PairSpinTransfer + a.angularVelocity -= spinImpulse + b.angularVelocity += spinImpulse + } + } + + // 아래 상수는 대부분 실기기(갤럭시 S23)로 직접 눈으로 보면서 맞춘 경험적 튜닝값이다. + // 단위는 px/s, px/s², rad/s 등 시뮬레이션 내부 단위 기준이며, 다른 값으로 바꾸면 반드시 + // 실기기에서 낙하 애니메이션을 재확인해야 한다. + private companion object { + const val Gravity = 1700f + const val LinearDamping = 0.995f + const val AngularDamping = 0.9f + const val Restitution = 0.32f + const val Friction = 0.9f + const val CollisionIterations = 4 + + // Kept deliberately tiny: cards should mostly keep the tilt they spawned with and only + // wobble a little on impact, not visibly spin while falling or colliding. + const val PairSpinTransfer = 0.00012f + const val WallSpinTransfer = 0.0001f + const val FloorSpinTransfer = 0.0002f + const val MaxAngularVelocity = 0.8f + const val MinSeparationDistance = 1e-4f + const val AngularActivityWeight = 40f + const val AngularSleepThreshold = 0.05f + const val RestingTangentSpeed = 8f + const val PositionSlop = 0.5f + } +} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt new file mode 100644 index 00000000..b8cba6d2 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt @@ -0,0 +1,15 @@ +package com.gamss.android.feature.archive.navigation + +import androidx.navigation3.runtime.NavKey +import com.gamss.android.domain.emotion.EmotionCharacter +import kotlinx.serialization.Serializable + +/** + * 보관함의 감정별 상세 화면을 식별한다. + * + * enum을 직접 보존해 호출자가 임의의 문자열을 전달하여 상세 화면이 실패하는 일을 막는다. + */ +@Serializable +data class ArchiveDetailKey( + val emotion: EmotionCharacter, +) : NavKey diff --git a/feature/calendar/src/main/res/drawable-nodpi/archive_paper.png b/feature/calendar/src/main/res/drawable-nodpi/archive_paper.png new file mode 100644 index 0000000000000000000000000000000000000000..5883028ba2f02b8ccffbae20a023d815d2562284 GIT binary patch literal 62227 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 IM6N<$f;)Un5&!@I literal 0 HcmV?d00001 diff --git a/feature/calendar/src/main/res/values/strings.xml b/feature/calendar/src/main/res/values/strings.xml index af2d6061..7da6e244 100644 --- a/feature/calendar/src/main/res/values/strings.xml +++ b/feature/calendar/src/main/res/values/strings.xml @@ -1,5 +1,13 @@ + 감쓰 + 뒤로 가기 + %1$s 쓰레기통 + 아직 남겨둔 이야기가 없어요. + 이야기를 불러오지 못했어요. + %1$s 쓰레기통 열기 + 비우기 + 월 선택 %1$d년 %2$d월 이전 달 다음 달 diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt new file mode 100644 index 00000000..48de5396 --- /dev/null +++ b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -0,0 +1,75 @@ +package com.gamss.android.feature.archive + +import com.gamss.android.core.common.AppResult +import com.gamss.android.domain.card.Card +import com.gamss.android.domain.card.CardQueryRepository +import com.gamss.android.domain.card.GetCardsByDateUseCase +import com.gamss.android.domain.emotion.EmotionCharacter +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.orbitmvi.orbit.test.test +import java.time.LocalDate + +@OptIn(ExperimentalCoroutinesApi::class) +class ArchiveDetailViewModelTest { + + @Test + fun `선택한 감정의 카드만 종이 목록으로 남긴다`() = runTest { + val viewModel = viewModel(AppResult.Success(listOf(angerCard, joyCard))) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { + copy( + emotion = EmotionCharacter.ANGER, + isLoading = false, + cards = listOf(angerCard), + ) + } + } + } + + @Test + fun `카드 조회에 실패하면 오류 상태를 표시한다`() = runTest { + val viewModel = viewModel(AppResult.Failure(IllegalStateException("network"))) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { + copy( + emotion = EmotionCharacter.ANGER, + isLoading = false, + loadFailed = true, + ) + } + } + } + + private fun viewModel(result: AppResult>) = ArchiveDetailViewModel( + GetCardsByDateUseCase(FakeCardRepository(result)), + ) + + private companion object { + val angerCard = Card( + character = EmotionCharacter.ANGER, + summary = "속상했던 하루", + message = "속상했어요", + ) + val joyCard = Card( + character = EmotionCharacter.JOY, + summary = "기분 좋은 하루", + message = "기뻤어요", + ) + } +} + +private class FakeCardRepository( + private val cardsResult: AppResult>, +) : CardQueryRepository { + override suspend fun getCardsByDate(date: LocalDate): AppResult> = cardsResult +} From 4bcd5429254498c2bff185e25df2614e1170732a Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sun, 16 Aug 2026 02:33:28 +0900 Subject: [PATCH 07/34] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=EB=84=A4?= =?UTF-8?q?=EB=B9=84=EA=B2=8C=EC=9D=B4=EC=85=98=EC=97=90=20=EB=B3=B4?= =?UTF-8?q?=EA=B4=80=ED=95=A8=20=EC=83=81=EC=84=B8=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ArchiveDetailKey 라우트를 등록하고, 보관함 그리드의 클릭을 상세 화면 네비게이션으로 이어준다. --- .../kotlin/com/gamss/android/app/main/MainScreen.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index 6261e551..ea646c85 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -26,7 +26,9 @@ import com.gamss.android.app.navigation.visibleIn import com.gamss.android.core.designsystem.component.GamssBottomBar import com.gamss.android.core.designsystem.component.GamssPaperBackground import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.feature.archive.ArchiveDetailScreen import com.gamss.android.feature.archive.ArchiveScreen +import com.gamss.android.feature.archive.navigation.ArchiveDetailKey import com.gamss.android.feature.archive.navigation.ArchiveKey import com.gamss.android.feature.chat.ChatRoomScreen import com.gamss.android.feature.chat.ChattingListScreen @@ -102,11 +104,17 @@ private fun mainEntryProvider(navigator: Navigator, useCardFeature: Boolean) = e entry { // 백스택 복원이나 플래그가 도중에 꺼지는 경우, 탭바에서 숨겨진 화면이 그려지지 않도록 홈으로 되돌린다. if (useCardFeature) { - ArchiveScreen(onNavigateToSetting = { navigator.navigate(SettingKey) }) + ArchiveScreen( + onNavigateToSetting = { navigator.navigate(SettingKey) }, + onArchiveClick = { navigator.navigate(ArchiveDetailKey(it)) }, + ) } else { LaunchedEffect(Unit) { navigator.navigate(HomeKey) } } } + entry { key -> + ArchiveDetailScreen(emotion = key.emotion, onBackClick = navigator::goBack) + } entry { SettingScreen( onBackClick = navigator::goBack, From 64c39b19e6a3327373a8c1007df8d439cdf697e9 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sun, 16 Aug 2026 02:33:45 +0900 Subject: [PATCH 08/34] =?UTF-8?q?chore:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=ED=83=AD=20=EC=9B=90=EA=B2=A9=EC=84=A4=EC=A0=95=20=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 카드 기능을 원격 설정과 무관하게 항상 노출하기로 하면서, 타임아웃/재조회까지 갖췄던 remoteConfigGate()가 상수 true를 내보내는 용도로만 남았다. 관련 유스케이스 의존성과 불필요해진 대기 로직을 함께 정리했다. --- .../com/gamss/android/app/main/MainState.kt | 4 +-- .../gamss/android/app/main/MainViewModel.kt | 28 ++----------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt index 4918b9e3..44939e99 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt @@ -4,6 +4,6 @@ import com.gamss.android.domain.auth.SessionState data class MainState( val sessionState: SessionState = SessionState.Loading, - /** 원격 설정 `use_chat_end_feature`. 꺼져 있으면 보관함 탭을 아예 만들지 않는다. */ - val useCardFeature: Boolean = false, + /** 카드 기능은 현재 원격 설정과 무관하게 항상 노출한다. */ + val useCardFeature: Boolean = true, ) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt index 651821c0..161bbe37 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt @@ -3,26 +3,18 @@ package com.gamss.android.app.main import androidx.lifecycle.ViewModel import com.gamss.android.domain.auth.ObserveSessionStateUseCase import com.gamss.android.domain.auth.RestoreSessionUseCase -import com.gamss.android.domain.config.GetRemoteConfigFlagUseCase -import com.gamss.android.domain.config.ObserveRemoteConfigReadyUseCase -import com.gamss.android.domain.config.RemoteConfigKey import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.withTimeoutOrNull import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.viewmodel.container import javax.inject.Inject -import kotlin.time.Duration.Companion.seconds @HiltViewModel class MainViewModel @Inject constructor( private val restoreSessionUseCase: RestoreSessionUseCase, private val observeSessionStateUseCase: ObserveSessionStateUseCase, - private val observeRemoteConfigReadyUseCase: ObserveRemoteConfigReadyUseCase, - private val getRemoteConfigFlagUseCase: GetRemoteConfigFlagUseCase, ) : ViewModel(), ContainerHost { override val container = container(MainState()) @@ -44,24 +36,8 @@ class MainViewModel @Inject constructor( } } - /** - * 원격 설정이 늦어지면 콜드스타트를 붙잡지 않고 기본값으로 먼저 진행한다. - * - * 타임아웃으로 먼저 내보낸 경우에는 준비가 끝난 뒤 한 번 더 읽는다. 그러지 않으면 느린 콜드스타트에서 - * 기본값이 앱을 다시 켤 때까지 굳는다. - */ + /** 카드 기능은 현재 원격 설정과 무관하게 항상 노출한다. */ private fun remoteConfigGate(): Flow = flow { - val readyInTime = withTimeoutOrNull(REMOTE_CONFIG_WAIT_MILLIS) { - observeRemoteConfigReadyUseCase().first { isReady -> isReady } - } != null - emit(getRemoteConfigFlagUseCase(RemoteConfigKey.UseChatEndFeature)) - if (!readyInTime) { - observeRemoteConfigReadyUseCase().first { isReady -> isReady } - emit(getRemoteConfigFlagUseCase(RemoteConfigKey.UseChatEndFeature)) - } - } - - private companion object { - val REMOTE_CONFIG_WAIT_MILLIS = 3.seconds.inWholeMilliseconds + emit(true) } } From b374cd3b67014b62c538b1be53736668a1de0af5 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Sun, 16 Aug 2026 02:42:00 +0900 Subject: [PATCH 09/34] =?UTF-8?q?fix:=20detekt=20=EA=B7=9C=EC=B9=99=20?= =?UTF-8?q?=EC=9C=84=EB=B0=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PaperBody 생성자 파라미터 수 축소(6개로), 긴 인자 목록 줄바꿈, 최대 줄 길이 초과, 미사용 import, 상단 상수 SCREAMING_CASE 네이밍, import 정렬, 들여쓰기, 미사용 Preview 함수에 대한 @Suppress 누락을 정리했다. --- .../feature/archive/ArchiveDetailScreen.kt | 47 ++++++++++--------- .../android/feature/archive/ArchiveScreen.kt | 16 +++---- .../android/feature/archive/PaperPhysics.kt | 6 +-- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index f5e717b1..fb34f5ee 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -183,21 +182,26 @@ private fun PaperPile(cards: List) { val boundsWidthPx = with(density) { (DetailPaperDesignWidth * scale).toPx() } val boundsHeightPx = with(density) { maxHeight.toPx() } val paperSizePx = with(density) { (DetailPaperSize * scale).toPx() } - val radiusPx = paperSizePx / 2f * PaperCollisionRadiusScale + val radiusPx = paperSizePx / 2f * PAPER_COLLISION_RADIUS_SCALE // 화면 회전 등으로 boundsWidthPx/boundsHeightPx만 바뀌었을 때는 키에서 빼서, 이미 쌓인 카드가 // 처음부터 다시 쏟아지지 않게 한다 — cards 자체가 바뀔 때만 스폰/낙하를 새로 시작한다. val uiStates = remember(cards) { List(cards.size) { index -> val spawnX = radiusPx + Random.nextFloat() * (boundsWidthPx - radiusPx * 2f).coerceAtLeast(0f) - val spawnY = -radiusPx - index * radiusPx * PaperSpawnStagger - val spawnRotation = (Random.nextFloat() - 0.5f) * 2f * PaperMaxTiltDegrees + val spawnY = -radiusPx - index * radiusPx * PAPER_SPAWN_STAGGER + val spawnRotation = (Random.nextFloat() - 0.5f) * 2f * PAPER_MAX_TILT_DEGREES PaperUiState(x = spawnX, y = spawnY, rotationDegrees = spawnRotation) } } LaunchedEffect(cards) { - runPaperFall(uiStates = uiStates, boundsWidthPx = boundsWidthPx, boundsHeightPx = boundsHeightPx, radiusPx = radiusPx) + runPaperFall( + uiStates = uiStates, + boundsWidthPx = boundsWidthPx, + boundsHeightPx = boundsHeightPx, + radiusPx = radiusPx, + ) } cards.forEachIndexed { index, card -> @@ -231,8 +235,8 @@ private suspend fun CoroutineScope.runPaperFall( startY = ui.y, startAngle = ui.rotationDegrees.toRadians(), radius = radiusPx, - startVelX = (Random.nextFloat() - 0.5f) * PaperSpawnDrift, - startAngularVelocity = (Random.nextFloat() - 0.5f) * PaperSpawnSpin, + startVelX = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_DRIFT, + startAngularVelocity = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_SPIN, ) } val world = PaperPhysicsWorld(bodies, boundsWidth = boundsWidthPx, boundsHeight = boundsHeightPx) @@ -244,9 +248,9 @@ private suspend fun CoroutineScope.runPaperFall( withFrameNanos { frameNanos -> if (startFrameNanos < 0) startFrameNanos = frameNanos val dt = if (lastFrameNanos < 0) { - PhysicsFixedDt + PHYSICS_FIXED_DT } else { - ((frameNanos - lastFrameNanos) / 1_000_000_000f).coerceIn(0f, PhysicsMaxDt) + ((frameNanos - lastFrameNanos) / 1_000_000_000f).coerceIn(0f, PHYSICS_MAX_DT) } lastFrameNanos = frameNanos @@ -258,23 +262,23 @@ private suspend fun CoroutineScope.runPaperFall( rotationDegrees = body.angle.toDegrees() } } - settledFrames = if (world.maxActivity() < PhysicsSettleThreshold) settledFrames + 1 else 0 + settledFrames = if (world.maxActivity() < PHYSICS_SETTLE_THRESHOLD) settledFrames + 1 else 0 } val elapsedNanos = lastFrameNanos - startFrameNanos - if (settledFrames >= PhysicsSettleFrames || elapsedNanos > PhysicsMaxDurationNanos) break + if (settledFrames >= PHYSICS_SETTLE_FRAMES || elapsedNanos > PHYSICS_MAX_DURATION_NANOS) break } } -private const val PaperCollisionRadiusScale = 1.15f -private const val PaperMaxTiltDegrees = 42f -private const val PaperSpawnStagger = 0.9f -private const val PaperSpawnDrift = 120f -private const val PaperSpawnSpin = 0.15f -private const val PhysicsFixedDt = 1f / 60f -private const val PhysicsMaxDt = 1f / 30f -private const val PhysicsSettleThreshold = 4f -private const val PhysicsSettleFrames = 30 -private const val PhysicsMaxDurationNanos = 5_000_000_000L +private const val PAPER_COLLISION_RADIUS_SCALE = 1.15f +private const val PAPER_MAX_TILT_DEGREES = 42f +private const val PAPER_SPAWN_STAGGER = 0.9f +private const val PAPER_SPAWN_DRIFT = 120f +private const val PAPER_SPAWN_SPIN = 0.15f +private const val PHYSICS_FIXED_DT = 1f / 60f +private const val PHYSICS_MAX_DT = 1f / 30f +private const val PHYSICS_SETTLE_THRESHOLD = 4f +private const val PHYSICS_SETTLE_FRAMES = 30 +private const val PHYSICS_MAX_DURATION_NANOS = 5_000_000_000L private val YearMonthFormatter = DateTimeFormatter.ofPattern("yyyy.MM") private val DetailTopBarStartPadding = 18.dp @@ -292,6 +296,7 @@ private val DetailPaperSize = 88.dp @Preview(showBackground = true, widthDp = 402, heightDp = 874) @Composable +@Suppress("UnusedPrivateMember") private fun ArchiveDetailPaperPilePreview() { GamssTheme(darkTheme = false) { ArchiveDetailFrame( diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index 8ddac23c..f2b3bfdc 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -9,8 +9,8 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -58,14 +58,14 @@ fun ArchiveScreen( modifier = Modifier .width(gridWidth) .padding( - start = ArchiveHorizontalPadding * scale, - end = ArchiveHorizontalPadding * scale, - top = ArchiveTopPadding * scale, - bottom = ArchiveBottomPadding * scale, - ), + start = ArchiveHorizontalPadding * scale, + end = ArchiveHorizontalPadding * scale, + top = ArchiveTopPadding * scale, + bottom = ArchiveBottomPadding * scale, + ), verticalArrangement = Arrangement.spacedBy(ArchiveVerticalSpacing * scale), ) { - archiveItems.chunked(ArchiveColumnCount).forEach { rowItems -> + archiveItems.chunked(ARCHIVE_COLUMN_COUNT).forEach { rowItems -> Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(ArchiveHorizontalSpacing * scale), @@ -137,4 +137,4 @@ private val ArchiveCardWidth = 132.dp private val ArchiveCardHeight = 172.dp private val ArchiveTopBarStartPadding = 20.dp private val ArchiveTopBarEndPadding = 8.dp -private const val ArchiveColumnCount = 2 +private const val ARCHIVE_COLUMN_COUNT = 2 diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt index ed2c7158..53f83cea 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt @@ -13,13 +13,12 @@ internal class PaperBody( startAngle: Float, val radius: Float, startVelX: Float = 0f, - startVelY: Float = 0f, startAngularVelocity: Float = 0f, ) { var x: Float = startX var y: Float = startY var velX: Float = startVelX - var velY: Float = startVelY + var velY: Float = 0f var angle: Float = startAngle var angularVelocity: Float = startAngularVelocity } @@ -44,7 +43,8 @@ internal class PaperPhysicsWorld( body.angle += body.angularVelocity * dt body.velX *= LinearDamping body.velY *= LinearDamping - val dampedAngularVelocity = (body.angularVelocity * AngularDamping).coerceIn(-MaxAngularVelocity, MaxAngularVelocity) + val dampedAngularVelocity = (body.angularVelocity * AngularDamping) + .coerceIn(-MaxAngularVelocity, MaxAngularVelocity) // Snap near-zero spin to exactly zero, otherwise resting contacts keep re-injecting // sub-threshold torque every frame and the pile never stops turning in place. body.angularVelocity = if (abs(dampedAngularVelocity) < AngularSleepThreshold) 0f else dampedAngularVelocity From c3140d0f991263e6fb306bcaec4c7b0fc37f4ae3 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 13:58:10 +0900 Subject: [PATCH 10/34] =?UTF-8?q?fix:=20=ED=95=98=EC=9C=84=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=9D=B4=EB=8F=99=20=EC=8B=9C=20=ED=83=AD=EB=B0=94?= =?UTF-8?q?=EA=B0=80=20=EC=95=A0=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=82=AC=EB=9D=BC=EC=A7=80=EB=8D=98=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 Scaffold 기본 인셋과 GamssBottomBar 자체의 navigationBarsPadding 이 겹쳐 있던 것도 정리했다. 탭바는 하위 화면 진입 시 AnimatedVisibility 로 접히도록 해서, 그 자리만큼 화면이 갑자기 넓어져 보이던 현상을 완화한다. --- .../com/gamss/android/app/main/MainScreen.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index ea646c85..b7516253 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -1,6 +1,12 @@ package com.gamss.android.app.main import androidx.activity.compose.LocalActivity +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost @@ -70,8 +76,17 @@ fun MainScreen( Scaffold( containerColor = Color.Transparent, snackbarHost = { SnackbarHost(snackbarHostState) }, + // GamssBottomBar 가 navigationBarsPadding()으로 시스템 내비게이션 바를 직접 피하므로, + // Scaffold 기본 인셋까지 함께 적용하면 이중으로 여백이 생긴다. + contentWindowInsets = WindowInsets(0), bottomBar = { - if (navigationState.currentKey == navigationState.currentTopLevelKey) { + // 하위 화면으로 이동할 때 탭바가 애니메이션 없이 바로 사라지면, 그 자리만큼 + // 콘텐츠 영역이 갑자기 넓어져 화면이 커지는 것처럼 보인다. 접히는 애니메이션으로 완충한다. + AnimatedVisibility( + visible = navigationState.currentKey == navigationState.currentTopLevelKey, + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically(), + ) { GamssBottomBar( items = visibleDestinations.bottomBarItems(), selectedValue = navigationState.currentTopLevelKey, From b090b11585e227437bf26e9ba982f7b2661f1ded Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 13:58:10 +0900 Subject: [PATCH 11/34] =?UTF-8?q?fix:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=20=ED=81=B4=EB=A6=AD=20=EB=A6=AC?= =?UTF-8?q?=ED=94=8C=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EC=84=B8=EB=A1=9C?= =?UTF-8?q?=20=EC=A4=91=EC=95=99=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 쓰레기통 카드 클릭 시 나타나던 리플/딤 효과 제거 - 보관함 탭은 MainScreen 탭바 위에 떠서 화면 하단에 직접 닿지 않으므로, Scaffold 기본 인셋 대신 상태바 인셋만 반영해 이중 여백을 없앴다 - 기기별로 남는 세로 여백을 위아래로 분산하도록 콘텐츠를 중앙 정렬했다. 타이틀과 그리드를 하나의 Column으로 묶어, Box 안에서 각자 따로 정렬되며 겹치던 문제도 함께 고쳤다 --- .../android/feature/archive/ArchiveScreen.kt | 63 ++++++++++++------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index f2b3bfdc..68c133a2 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -3,18 +3,22 @@ package com.gamss.android.feature.archive import androidx.annotation.DrawableRes import androidx.compose.foundation.Image import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.width import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource @@ -46,45 +50,50 @@ fun ArchiveScreen( Scaffold( containerColor = GamssTheme.colors.white, topBar = { ArchiveTopBar(onMenuClick = onNavigateToSetting) }, + // 보관함 탭은 항상 MainScreen 의 탭바 위에 떠서, 화면 하단에 직접 닿지 않는다. + // 기본 인셋대로 두면 이미 탭바가 피해준 내비게이션 바 공간을 여기서 또 예약해 이중 여백이 생긴다. + contentWindowInsets = WindowInsets.statusBars, ) { innerPadding -> BoxWithConstraints( modifier = Modifier.padding(innerPadding), - contentAlignment = Alignment.TopCenter, + contentAlignment = Alignment.Center, ) { val scale = (maxWidth / ArchiveDesignWidth).coerceAtMost(1f) val gridWidth = ArchiveDesignWidth * scale - Column( - modifier = Modifier - .width(gridWidth) - .padding( + // 타이틀과 그리드는 Box 안에서 각자 따로 정렬되는 형제가 아니라, 하나의 Column으로 묶어야 + // BoxWithConstraints의 Center 정렬이 이 그룹 전체에 적용된다. + Column(modifier = Modifier.width(gridWidth)) { + Text( + text = "다시 보고 싶은 쓰레기통을 열어보세요", + modifier = Modifier + .fillMaxWidth() + .padding(top = ArchiveTitleTopPadding * scale), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray950, + textAlign = TextAlign.Center, + ) + Column( + modifier = Modifier.padding( start = ArchiveHorizontalPadding * scale, end = ArchiveHorizontalPadding * scale, top = ArchiveTopPadding * scale, bottom = ArchiveBottomPadding * scale, ), - verticalArrangement = Arrangement.spacedBy(ArchiveVerticalSpacing * scale), - ) { - archiveItems.chunked(ARCHIVE_COLUMN_COUNT).forEach { rowItems -> - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(ArchiveHorizontalSpacing * scale), - ) { - rowItems.forEach { item -> - ArchiveCard(item = item, scale = scale, onClick = { onArchiveClick(item.emotion) }) + verticalArrangement = Arrangement.spacedBy(ArchiveVerticalSpacing * scale), + ) { + archiveItems.chunked(ARCHIVE_COLUMN_COUNT).forEach { rowItems -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(ArchiveHorizontalSpacing * scale), + ) { + rowItems.forEach { item -> + ArchiveCard(item = item, scale = scale, onClick = { onArchiveClick(item.emotion) }) + } } } } } - Text( - text = "다시 보고 싶은 쓰레기통을 열어보세요", - modifier = Modifier - .width(gridWidth) - .padding(top = ArchiveTitleTopPadding * scale), - style = GamssTheme.typography.body4Medium, - color = GamssTheme.colors.gray950, - textAlign = TextAlign.Center, - ) } } } @@ -112,12 +121,18 @@ private fun ArchiveCard( scale: Float, onClick: () -> Unit, ) { + val interactionSource = remember { MutableInteractionSource() } Image( painter = painterResource(item.binRes), contentDescription = stringResource(R.string.archive_open_description, item.emotion.displayName), modifier = Modifier .size(width = ArchiveCardWidth * scale, height = ArchiveCardHeight * scale) - .clickable(role = Role.Button, onClick = onClick), + .clickable( + interactionSource = interactionSource, + indication = null, + role = Role.Button, + onClick = onClick, + ), ) } From ad4bbee7e61fd5a6bb77d7bf47bc3b3d26d457f3 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:02:15 +0900 Subject: [PATCH 12/34] =?UTF-8?q?fix:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=EA=B0=80=20=EC=8B=A4=EC=A0=9C?= =?UTF-8?q?=EB=A1=9C=20=EC=A4=91=EC=95=99=20=EC=A0=95=EB=A0=AC=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8D=98=20=EB=AC=B8=EC=A0=9C=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 BoxWithConstraints 가 fillMaxSize() 없이 콘텐츠 크기만큼만 차지하고 있어서 contentAlignment 을 Center 로 바꿔도 재배치할 여유 공간이 없었다. --- .../java/com/gamss/android/feature/archive/ArchiveScreen.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index 68c133a2..71c43057 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -55,7 +56,9 @@ fun ArchiveScreen( contentWindowInsets = WindowInsets.statusBars, ) { innerPadding -> BoxWithConstraints( - modifier = Modifier.padding(innerPadding), + modifier = Modifier + .fillMaxSize() + .padding(innerPadding), contentAlignment = Alignment.Center, ) { val scale = (maxWidth / ArchiveDesignWidth).coerceAtMost(1f) From a455740a4f7d3f6b81057d671d1fd26dbdb58725 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:16:20 +0900 Subject: [PATCH 13/34] =?UTF-8?q?fix:=20GamssTopBar=EA=B0=80=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=B0=94=20=EC=98=81=EC=97=AD=EA=B3=BC=20=EA=B2=B9?= =?UTF-8?q?=EC=B3=90=20=EA=B7=B8=EB=A0=A4=EC=A7=80=EB=8D=98=20=EB=AC=B8?= =?UTF-8?q?=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 GamssBottomBar는 navigationBarsPadding()으로 내비게이션 바를 직접 피하는데, GamssTopBar는 상태바를 피하는 처리가 없어서 로고/타이틀이 상태바 안쪽까지 그려지고 있었다. GamssTopBar에 statusBarsPadding()을 추가하고, 이제 상태바를 이중으로 예약할 필요가 없어진 ArchiveScreen의 Scaffold 인셋도 함께 정리했다. --- .../android/core/designsystem/component/GamssTopBar.kt | 8 +++++++- .../com/gamss/android/feature/archive/ArchiveScreen.kt | 7 +++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt index bb3da74c..8dd30e59 100644 --- a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt +++ b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -17,7 +18,11 @@ import com.gamss.android.core.designsystem.R private val TopBarHeight = 62.dp -/** 가운데 슬롯이 없다. 타이틀이 필요한 화면은 [leading] 안에서 직접 배치한다. */ +/** + * 가운데 슬롯이 없다. 타이틀이 필요한 화면은 [leading] 안에서 직접 배치한다. + * + * 화면이 edge-to-edge 라 상태바 영역은 이 컴포넌트가 직접 피한다. + */ @Composable fun GamssTopBar( modifier: Modifier = Modifier, @@ -28,6 +33,7 @@ fun GamssTopBar( Row( modifier = modifier .fillMaxWidth() + .statusBarsPadding() .height(TopBarHeight) .padding(contentPadding), verticalAlignment = Alignment.CenterVertically, diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index 71c43057..80b50121 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -14,7 +14,6 @@ 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.layout.statusBars import androidx.compose.foundation.layout.width import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -51,9 +50,9 @@ fun ArchiveScreen( Scaffold( containerColor = GamssTheme.colors.white, topBar = { ArchiveTopBar(onMenuClick = onNavigateToSetting) }, - // 보관함 탭은 항상 MainScreen 의 탭바 위에 떠서, 화면 하단에 직접 닿지 않는다. - // 기본 인셋대로 두면 이미 탭바가 피해준 내비게이션 바 공간을 여기서 또 예약해 이중 여백이 생긴다. - contentWindowInsets = WindowInsets.statusBars, + // 상태바는 GamssTopBar가, 내비게이션 바는 MainScreen의 탭바가 각자 직접 피하므로 + // 이 Scaffold가 추가로 예약할 인셋은 없다. + contentWindowInsets = WindowInsets(0), ) { innerPadding -> BoxWithConstraints( modifier = Modifier From 9f44a6f1b6264be91b98abe03f5901e616319840 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:21:29 +0900 Subject: [PATCH 14/34] =?UTF-8?q?refactor:=20=EC=83=81=ED=83=9C=EB=B0=94?= =?UTF-8?q?=20=ED=9A=8C=ED=94=BC=20=EC=B2=98=EB=A6=AC=EB=A5=BC=20MainScree?= =?UTF-8?q?n=EC=9D=98=20NavDisplay=20=ED=95=9C=20=EA=B3=B3=EC=9C=BC?= =?UTF-8?q?=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 GamssTopBar뿐 아니라 ChatRoomScreen의 커스텀 탑바("대화")도 상태바 회피 처리가 없어서 같은 문제를 안고 있었다. 화면마다 따로 처리하면 빠뜨리기 쉬우므로, 탭 전환되는 화면들을 모두 감싸는 NavDisplay에서 한 번에 처리하도록 옮겼다. GamssTopBar 자체의 처리는 되돌려 이중 여백을 피했다. 배경(GamssPaperBackground)은 Scaffold 바깥에 있어 여전히 상태바 뒤까지 이어진다. --- .../main/kotlin/com/gamss/android/app/main/MainScreen.kt | 8 +++++++- .../android/core/designsystem/component/GamssTopBar.kt | 5 ++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index b7516253..25c99504 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -8,6 +8,7 @@ import androidx.compose.animation.fadeOut import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState @@ -96,7 +97,12 @@ fun MainScreen( }, ) { innerPadding -> NavDisplay( - modifier = Modifier.padding(innerPadding), + // 화면마다 각자 상태바를 피하게 두면 빠뜨리기 쉬우니, 탭 전환 화면들을 모두 + // 감싸는 이 지점에서 한 번에 처리한다. 배경은 GamssPaperBackground 가 Scaffold + // 바깥에서 이미 상태바 뒤까지 이어지므로, 여기서는 콘텐츠만 아래로 민다. + modifier = Modifier + .padding(innerPadding) + .statusBarsPadding(), entries = navigationState.toEntries(entryProvider = entries), onBack = { if (navigationState.canGoBack) { diff --git a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt index 8dd30e59..e9754260 100644 --- a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt +++ b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssTopBar.kt @@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -21,7 +20,8 @@ private val TopBarHeight = 62.dp /** * 가운데 슬롯이 없다. 타이틀이 필요한 화면은 [leading] 안에서 직접 배치한다. * - * 화면이 edge-to-edge 라 상태바 영역은 이 컴포넌트가 직접 피한다. + * 상태바 회피는 이 컴포넌트를 호출하는 화면들을 감싸는 MainScreen의 NavDisplay에서 + * 한 번에 처리한다(화면마다 따로 처리하면 빠뜨리기 쉽다). */ @Composable fun GamssTopBar( @@ -33,7 +33,6 @@ fun GamssTopBar( Row( modifier = modifier .fillMaxWidth() - .statusBarsPadding() .height(TopBarHeight) .padding(contentPadding), verticalAlignment = Alignment.CenterVertically, From 4fa55c0e04230db77bfc49cb3e2f4e889644de60 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:45:52 +0900 Subject: [PATCH 15/34] =?UTF-8?q?chore:=20=EC=9B=90=EA=B2=A9=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9C=BC=EB=A1=9C=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=ED=83=AD=EC=9D=84=20=EA=B0=80=EB=A6=AC=EB=8D=98=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 카드 기능이 원격 설정과 무관하게 항상 켜지도록 바뀐 뒤로 useCardFeature/ requiresCardFeature/visibleIn 이 실질적으로 죽은 코드였다. MainState, MainViewModel, TopLevelDestination, MainScreen, GamssRootNavHost 에서 관련 분기와 필드를 모두 정리하고, 이제 항상 세 탭이 그대로 노출된다. ChatRoomViewModel 이 쓰는 RemoteConfigKey.UseChatEndFeature(대화 끝내기 버튼용)는 별개라 그대로 뒀다. --- .../com/gamss/android/app/main/MainScreen.kt | 22 +++++---------- .../com/gamss/android/app/main/MainState.kt | 2 -- .../gamss/android/app/main/MainViewModel.kt | 14 ++-------- .../app/navigation/GamssRootNavHost.kt | 4 +-- .../app/navigation/TopLevelDestination.kt | 19 +------------ .../app/navigation/TopLevelDestinationTest.kt | 28 ------------------- 6 files changed, 11 insertions(+), 78 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index 25c99504..80a20116 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -29,7 +29,6 @@ import com.gamss.android.app.navigation.keys import com.gamss.android.app.navigation.rememberNavigationState import com.gamss.android.app.navigation.toEntries import com.gamss.android.app.navigation.topLevelDestinations -import com.gamss.android.app.navigation.visibleIn import com.gamss.android.core.designsystem.component.GamssBottomBar import com.gamss.android.core.designsystem.component.GamssPaperBackground import com.gamss.android.core.designsystem.theme.GamssTheme @@ -55,17 +54,15 @@ import com.gamss.android.feature.webview.navigation.WebViewKey @Composable fun MainScreen( - useCardFeature: Boolean, modelDownloadPromptViewModel: ModelDownloadPromptViewModel = hiltViewModel(), ) { val destinations = remember { topLevelDestinations() } - val visibleDestinations = remember(destinations, useCardFeature) { destinations.visibleIn(useCardFeature) } val navigationState = rememberNavigationState( startKey = HomeKey, topLevelKeys = remember(destinations) { destinations.keys() }, ) val navigator = remember(navigationState) { Navigator(navigationState) } - val entries = remember(navigator, useCardFeature) { mainEntryProvider(navigator, useCardFeature) } + val entries = remember(navigator) { mainEntryProvider(navigator) } val snackbarHostState = remember { SnackbarHostState() } ModelDownloadConfirmationEffect(modelDownloadPromptViewModel, snackbarHostState) @@ -89,7 +86,7 @@ fun MainScreen( exit = fadeOut() + shrinkVertically(), ) { GamssBottomBar( - items = visibleDestinations.bottomBarItems(), + items = destinations.bottomBarItems(), selectedValue = navigationState.currentTopLevelKey, onItemClick = navigator::navigate, ) @@ -115,7 +112,7 @@ fun MainScreen( } } -private fun mainEntryProvider(navigator: Navigator, useCardFeature: Boolean) = entryProvider { +private fun mainEntryProvider(navigator: Navigator) = entryProvider { entry { HomeScreen( onNavigateToSetting = { navigator.navigate(SettingKey) }, @@ -123,15 +120,10 @@ private fun mainEntryProvider(navigator: Navigator, useCardFeature: Boolean) = e ) } entry { - // 백스택 복원이나 플래그가 도중에 꺼지는 경우, 탭바에서 숨겨진 화면이 그려지지 않도록 홈으로 되돌린다. - if (useCardFeature) { - ArchiveScreen( - onNavigateToSetting = { navigator.navigate(SettingKey) }, - onArchiveClick = { navigator.navigate(ArchiveDetailKey(it)) }, - ) - } else { - LaunchedEffect(Unit) { navigator.navigate(HomeKey) } - } + ArchiveScreen( + onNavigateToSetting = { navigator.navigate(SettingKey) }, + onArchiveClick = { navigator.navigate(ArchiveDetailKey(it)) }, + ) } entry { key -> ArchiveDetailScreen(emotion = key.emotion, onBackClick = navigator::goBack) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt index 44939e99..8f7ecf11 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainState.kt @@ -4,6 +4,4 @@ import com.gamss.android.domain.auth.SessionState data class MainState( val sessionState: SessionState = SessionState.Loading, - /** 카드 기능은 현재 원격 설정과 무관하게 항상 노출한다. */ - val useCardFeature: Boolean = true, ) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt index 161bbe37..2f97c90a 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainViewModel.kt @@ -4,9 +4,6 @@ import androidx.lifecycle.ViewModel import com.gamss.android.domain.auth.ObserveSessionStateUseCase import com.gamss.android.domain.auth.RestoreSessionUseCase import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.flow import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.viewmodel.container import javax.inject.Inject @@ -29,15 +26,8 @@ class MainViewModel @Inject constructor( } private fun observeSessionState() = intent { - combine(observeSessionStateUseCase(), remoteConfigGate()) { sessionState, useCardFeature -> - sessionState to useCardFeature - }.collect { (sessionState, useCardFeature) -> - reduce { state.copy(sessionState = sessionState, useCardFeature = useCardFeature) } + observeSessionStateUseCase().collect { sessionState -> + reduce { state.copy(sessionState = sessionState) } } } - - /** 카드 기능은 현재 원격 설정과 무관하게 항상 노출한다. */ - private fun remoteConfigGate(): Flow = flow { - emit(true) - } } diff --git a/app/src/main/kotlin/com/gamss/android/app/navigation/GamssRootNavHost.kt b/app/src/main/kotlin/com/gamss/android/app/navigation/GamssRootNavHost.kt index 059aaedc..84814a5a 100644 --- a/app/src/main/kotlin/com/gamss/android/app/navigation/GamssRootNavHost.kt +++ b/app/src/main/kotlin/com/gamss/android/app/navigation/GamssRootNavHost.kt @@ -38,7 +38,6 @@ fun GamssRootNavHost( } else -> RootNavDisplay( sessionState = state.sessionState, - useCardFeature = state.useCardFeature, ) } } @@ -46,7 +45,6 @@ fun GamssRootNavHost( @Composable private fun RootNavDisplay( sessionState: SessionState, - useCardFeature: Boolean, ) { val initialKey = if (sessionState == SessionState.Authenticated) MainKey else LoginKey val backStack = rememberNavBackStack(initialKey) @@ -71,7 +69,7 @@ private fun RootNavDisplay( googleWebClientId = stringResource(R.string.default_web_client_id), ) } - entry { MainScreen(useCardFeature = useCardFeature) } + entry { MainScreen() } }, ), onBack = { diff --git a/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt index f5da2e47..06c467ad 100644 --- a/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt +++ b/app/src/main/kotlin/com/gamss/android/app/navigation/TopLevelDestination.kt @@ -16,33 +16,16 @@ data class TopLevelDestination( val key: NavKey, @param:DrawableRes @get:DrawableRes val iconRes: Int, @param:StringRes @get:StringRes val labelRes: Int, - /** 원격 설정 `use_chat_end_feature` 가 켜졌을 때만 탭바에 노출한다. */ - val requiresCardFeature: Boolean = false, ) -/** - * 이 목록은 원격 설정에 좌우되면 안 된다. - * - * [rememberNavigationState] 가 key 마다 `rememberNavBackStack` 을 루프로 부르는데, 저장 키가 호출 순번으로 - * 정해져서 개수나 순서가 실행마다 달라지면 프로세스 재생성 뒤 다른 탭의 백스택이 복원된다. - * 노출 여부는 [visibleIn] 으로 탭바에서만 거른다. - */ fun topLevelDestinations(): List = listOf( - TopLevelDestination( - key = ArchiveKey, - iconRes = GamssIcons.TabArchive, - labelRes = R.string.tab_archive, - requiresCardFeature = true, - ), + TopLevelDestination(key = ArchiveKey, iconRes = GamssIcons.TabArchive, labelRes = R.string.tab_archive), TopLevelDestination(key = HomeKey, iconRes = GamssIcons.TabHome, labelRes = R.string.tab_home), TopLevelDestination(key = ChatKey, iconRes = GamssIcons.TabChat, labelRes = R.string.tab_chat), ) fun List.keys(): Set = map { it.key }.toSet() -fun List.visibleIn(useCardFeature: Boolean): List = - filter { destination -> useCardFeature || !destination.requiresCardFeature } - @Composable fun List.bottomBarItems(): List> = map { destination -> GamssBottomBarItem( diff --git a/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt b/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt index 8d06042b..79239b2c 100644 --- a/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt +++ b/app/src/test/kotlin/com/gamss/android/app/navigation/TopLevelDestinationTest.kt @@ -4,8 +4,6 @@ import com.gamss.android.feature.archive.navigation.ArchiveKey import com.gamss.android.feature.chat.navigation.ChatKey import com.gamss.android.feature.home.navigation.HomeKey import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue import org.junit.Test class TopLevelDestinationTest { @@ -14,30 +12,4 @@ class TopLevelDestinationTest { fun 탭은_보관함_홈_대화_세_종이다() { assertEquals(listOf(ArchiveKey, HomeKey, ChatKey), topLevelDestinations().map { it.key }) } - - @Test - fun 카드_기능이_꺼지면_보관함만_탭바에서_빠진다() { - val visible = topLevelDestinations().visibleIn(useCardFeature = false) - - assertEquals(listOf(HomeKey, ChatKey), visible.map { it.key }) - } - - @Test - fun 카드_기능이_켜지면_보관함이_탭바에_들어간다() { - val visible = topLevelDestinations().visibleIn(useCardFeature = true) - - assertEquals(listOf(ArchiveKey, HomeKey, ChatKey), visible.map { it.key }) - } - - /** - * 네비게이션 key 집합이 원격 설정에 흔들리면 [rememberNavigationState] 의 백스택 저장 슬롯이 어긋난다. - * 걸러내는 지점은 탭바뿐이어야 한다. - */ - @Test - fun 보관함을_걸러도_네비게이션_key_집합은_그대로다() { - val destinations = topLevelDestinations() - - assertTrue(ArchiveKey in destinations.keys()) - assertFalse(ArchiveKey in destinations.visibleIn(useCardFeature = false).map { it.key }) - } } From 78e9975f41de8366689d5012e07930129db74c38 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 15:23:14 +0900 Subject: [PATCH 16/34] =?UTF-8?q?docs:=20UseChatEndFeature=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=EC=97=90=EC=84=9C=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=ED=83=AD=20=EA=B4=80=EB=A0=A8=20=EC=84=A4=EB=AA=85=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 보관함 탭이 원격 설정과 무관하게 항상 노출되도록 바뀐 뒤로 이 주석이 더 이상 맞지 않았다. 실제 코드(bottomBar 노출 분기)는 이미 이전 커밋에서 제거됐다. --- .../com/gamss/android/domain/config/RemoteConfigKey.kt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/domain/src/main/kotlin/com/gamss/android/domain/config/RemoteConfigKey.kt b/domain/src/main/kotlin/com/gamss/android/domain/config/RemoteConfigKey.kt index ff3819ad..4da2d8a7 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/config/RemoteConfigKey.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/config/RemoteConfigKey.kt @@ -6,11 +6,6 @@ package com.gamss.android.domain.config * 기능 플래그의 기본값은 꺼짐이다. 원격 설정을 받지 못한 상태에서 기능이 열리면 안 된다. */ enum class RemoteConfigKey(val key: String, val defaultValue: String) { - /** - * 카드 기능 전체를 연다. 대화 끝내기 버튼과 보관함 탭을 함께 제어한다. - * - * 카드는 종료된 대화에만 생기므로 둘을 따로 두면 앞뒤가 안 맞는다. 끝내기만 막으면 보관함이 - * 영영 비고, 보관함만 막으면 쌓인 카드를 볼 곳이 없다. - */ + /** 채팅방의 "대화 끝내기" 버튼 노출을 제어한다. 보관함 탭은 원격 설정과 무관하게 항상 노출된다. */ UseChatEndFeature("use_chat_end_feature", "false"), } From 572f4d90679e95d8cc6e7d11fa55447ba72e61f7 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 18:03:18 +0900 Subject: [PATCH 17/34] =?UTF-8?q?feat:=20=EC=B9=B4=EB=93=9C=20=EC=9B=94?= =?UTF-8?q?=EB=B3=84=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 보관함 상세가 오늘 하루치가 아니라 고른 달 전체를 보여줘야 해서, 서버의 GET /api/cards/monthly(yearMonth=yyyy-MM)를 붙였다. YearMonth.toString()이 서버가 요구하는 yyyy-MM 그대로라 포맷터는 두지 않았다. 이 응답에는 카드 식별자가 없고 날짜별 대표 감정 목록만 온다. 그래서 카드 한 건의 신원을 날짜와 그날 순번(CardEntry.indexInDate)으로 잡았다. 순번은 알 수 없는 감정을 걸러낸 뒤를 기준으로 센다. 날짜별 조회(getCardsByDate)도 같은 기준으로 걸러내므로, 나중에 요약 같은 상세가 필요해지면 날짜로 다시 조회해 그 순번의 카드를 그대로 찾을 수 있다. --- .../android/data/remote/card/CardService.kt | 7 +++ .../model/response/CardCalendarResponse.kt | 27 ++++++++++++ .../data/repository/CardRepositoryImpl.kt | 10 +++++ .../data/repository/CardRepositoryImplTest.kt | 44 +++++++++++++++++++ .../gamss/android/domain/card/CardEntry.kt | 17 +++++++ .../domain/card/CardQueryRepository.kt | 4 ++ .../domain/card/GetCardsByMonthUseCase.kt | 14 ++++++ .../domain/card/GetCardsByDateUseCaseTest.kt | 4 ++ .../domain/card/GetCardsByMonthUseCaseTest.kt | 42 ++++++++++++++++++ 9 files changed, 169 insertions(+) create mode 100644 data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt create mode 100644 domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt create mode 100644 domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt create mode 100644 domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt diff --git a/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt b/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt index 6497b611..85a59579 100644 --- a/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt +++ b/data/src/main/java/com/gamss/android/data/remote/card/CardService.kt @@ -1,6 +1,7 @@ package com.gamss.android.data.remote.card import com.gamss.android.data.remote.card.model.request.CreateCardRequest +import com.gamss.android.data.remote.card.model.response.CardCalendarResponse import com.gamss.android.data.remote.card.model.response.CardResponse import com.gamss.android.data.remote.model.response.ApiResponse import retrofit2.http.Body @@ -13,6 +14,12 @@ internal interface CardService { @GET("/api/cards") suspend fun getCardsByDate(@Query("date") date: String): ApiResponse> + /** 그 달(KST)의 날짜별 대표 감정 목록만 준다. 한 줄 요약 등 상세는 [getCardsByDate] 로 따로 받는다. */ + @GET("/api/cards/monthly") + suspend fun getCardsByMonth( + @Query("yearMonth") yearMonth: String, + ): ApiResponse> + /** 종료된 채팅방에만 만들 수 있다. 대사는 서버가 생성한다. */ @POST("/api/cards") suspend fun createCard(@Body request: CreateCardRequest): ApiResponse diff --git a/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt b/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt new file mode 100644 index 00000000..d14f0d75 --- /dev/null +++ b/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt @@ -0,0 +1,27 @@ +package com.gamss.android.data.remote.card.model.response + +import com.gamss.android.data.remote.emotion.toEmotionCharacter +import com.gamss.android.domain.card.CardEntry +import kotlinx.serialization.Serializable +import java.time.LocalDate + +@Serializable +internal data class CardCalendarResponse( + val date: String, + /** 그날 카드들의 대표 감정. 카드 생성순이고 같은 감정이 여러 번 올 수 있다. */ + val emotions: List = emptyList(), +) + +/** + * 하루치 대표 감정 목록을 카드 한 건씩으로 펼친다. + * + * 순번은 알 수 없는 감정을 걸러낸 뒤를 기준으로 센다. 날짜별 조회도 같은 기준으로 걸러내므로, + * 나중에 [CardEntry.indexInDate] 로 그 응답의 카드를 그대로 찾을 수 있다. + */ +internal fun CardCalendarResponse.toDomain(): List { + val createdDate = LocalDate.parse(date) + return emotions.mapNotNull { it.toEmotionCharacter() } + .mapIndexed { index, character -> + CardEntry(date = createdDate, indexInDate = index, character = character) + } +} diff --git a/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt b/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt index 6ea522e0..b957d105 100644 --- a/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt +++ b/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt @@ -9,11 +9,13 @@ import com.gamss.android.data.remote.emotion.toServerEmotionType import com.gamss.android.data.remote.runCatchingApiCall import com.gamss.android.data.remote.throwIfFailed import com.gamss.android.domain.card.Card +import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.card.CardNotRetryableException import com.gamss.android.domain.card.CardQueryRepository import com.gamss.android.domain.card.CardWriteRepository import com.gamss.android.domain.emotion.EmotionCharacter import java.time.LocalDate +import java.time.YearMonth import javax.inject.Inject import javax.inject.Singleton @@ -29,6 +31,14 @@ internal class CardRepositoryImpl @Inject constructor( .mapNotNull { it.toDomainOrNull() } } + // YearMonth.toString() 이 서버가 요구하는 yyyy-MM 그대로다. + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = runCatchingApiCall { + val response = cardService.getCardsByMonth(yearMonth.toString()) + response.throwIfFailed() + checkNotNull(response.data) { "No available card data" } + .flatMap { it.toDomain() } + } + override suspend fun createCard( conversationId: Long, character: EmotionCharacter, diff --git a/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt b/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt index 287a6022..55800238 100644 --- a/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt +++ b/data/src/test/java/com/gamss/android/data/repository/CardRepositoryImplTest.kt @@ -2,10 +2,12 @@ package com.gamss.android.data.repository import com.gamss.android.core.common.AppResult import com.gamss.android.data.remote.card.CardService +import com.gamss.android.data.remote.card.model.response.CardCalendarResponse import com.gamss.android.data.remote.card.model.response.CardResponse import com.gamss.android.data.remote.model.response.ApiError import com.gamss.android.data.remote.model.response.ApiResponse import com.gamss.android.domain.auth.SessionExpiredException +import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter import io.mockk.coEvery import io.mockk.coVerify @@ -15,6 +17,7 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test import java.time.LocalDate +import java.time.YearMonth class CardRepositoryImplTest { @@ -81,6 +84,47 @@ class CardRepositoryImplTest { assertTrue((result as AppResult.Failure).throwable is IllegalStateException) } + @Test + fun `월을 API 형식으로 조회하고 하루치 감정 목록을 카드 한 건씩으로 펼친다`() = runTest { + coEvery { cardService.getCardsByMonth("2026-08") } returns ApiResponse( + success = true, + data = listOf( + CardCalendarResponse(date = "2026-08-15", emotions = listOf("ANGER", "JOY")), + CardCalendarResponse(date = "2026-08-16", emotions = listOf("GRUMPY")), + ), + ) + + val result = repository.getCardsByMonth(YearMonth.of(2026, 8)) + + assertEquals( + listOf( + CardEntry(LocalDate.of(2026, 8, 15), 0, EmotionCharacter.ANGER), + CardEntry(LocalDate.of(2026, 8, 15), 1, EmotionCharacter.JOY), + CardEntry(LocalDate.of(2026, 8, 16), 0, EmotionCharacter.PRICKLY), + ), + (result as AppResult.Success).data, + ) + coVerify(exactly = 1) { cardService.getCardsByMonth("2026-08") } + } + + /** 날짜별 조회도 알 수 없는 감정을 버리므로, 순번은 버린 뒤를 기준으로 세야 두 응답이 맞물린다. */ + @Test + fun `알 수 없는 감정을 버린 뒤를 기준으로 그날 순번을 센다`() = runTest { + coEvery { cardService.getCardsByMonth(any()) } returns ApiResponse( + success = true, + data = listOf( + CardCalendarResponse(date = "2026-08-15", emotions = listOf("UNKNOWN", "ANGER")), + ), + ) + + val result = repository.getCardsByMonth(YearMonth.of(2026, 8)) + + assertEquals( + listOf(CardEntry(LocalDate.of(2026, 8, 15), 0, EmotionCharacter.ANGER)), + (result as AppResult.Success).data, + ) + } + private companion object { val DATE: LocalDate = LocalDate.of(2026, 8, 15) } diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt new file mode 100644 index 00000000..23901cfc --- /dev/null +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt @@ -0,0 +1,17 @@ +package com.gamss.android.domain.card + +import com.gamss.android.domain.emotion.EmotionCharacter +import java.time.LocalDate + +/** + * 월별 조회로 받은 카드 한 건. 어떤 감정 카드가 언제 있었는지만 담고 요약·대사는 없다. + * + * 월별 응답에는 카드 식별자가 없어 [date] 와 그날 순번 [indexInDate] 가 카드의 신원이다. 요약 같은 + * 상세가 필요해지면 [date] 로 날짜별 조회해 [indexInDate] 번째 카드를 쓴다. 두 응답 모두 카드 + * 생성순이고 알 수 없는 감정을 같은 기준으로 걸러내므로, 순번은 걸러낸 뒤를 기준으로 센다. + */ +data class CardEntry( + val date: LocalDate, + val indexInDate: Int, + val character: EmotionCharacter, +) diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt index a98e3cde..e33c5d06 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt @@ -2,9 +2,13 @@ package com.gamss.android.domain.card import com.gamss.android.core.common.AppResult import java.time.LocalDate +import java.time.YearMonth interface CardQueryRepository { /** 해당 날짜(KST)에 생성된 카드 목록을 가져온다. */ suspend fun getCardsByDate(date: LocalDate): AppResult> + + /** 해당 달(KST)에 생성된 카드를 요약 없이 날짜·순번·감정만 가져온다. */ + suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> } diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt new file mode 100644 index 00000000..188a44ed --- /dev/null +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt @@ -0,0 +1,14 @@ +package com.gamss.android.domain.card + +import com.gamss.android.core.common.AppResult +import com.gamss.android.domain.usecase.UseCase +import java.time.YearMonth +import javax.inject.Inject + +class GetCardsByMonthUseCase @Inject constructor( + private val cardRepository: CardQueryRepository, +) : UseCase>> { + + override suspend fun invoke(params: YearMonth): AppResult> = + cardRepository.getCardsByMonth(params) +} diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt index 708b98d6..8790aa53 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt @@ -7,6 +7,7 @@ import org.junit.Assert.assertEquals import org.junit.Assert.assertSame import org.junit.Test import java.time.LocalDate +import java.time.YearMonth class GetCardsByDateUseCaseTest { @@ -34,5 +35,8 @@ class GetCardsByDateUseCaseTest { requestedDate = date return result } + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = + AppResult.Success(emptyList()) } } diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt new file mode 100644 index 00000000..6b4b57db --- /dev/null +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt @@ -0,0 +1,42 @@ +package com.gamss.android.domain.card + +import com.gamss.android.core.common.AppResult +import com.gamss.android.domain.emotion.EmotionCharacter +import kotlinx.coroutines.runBlocking +import org.junit.Assert.assertEquals +import org.junit.Assert.assertSame +import org.junit.Test +import java.time.LocalDate +import java.time.YearMonth + +class GetCardsByMonthUseCaseTest { + + @Test + fun `선택한 달을 그대로 저장소에 전달한다`() = runBlocking { + val yearMonth = YearMonth.of(2026, 8) + val expected = AppResult.Success( + listOf(CardEntry(LocalDate.of(2026, 8, 15), indexInDate = 0, character = EmotionCharacter.ANGER)), + ) + val repository = RecordingRepository(expected) + + val result = GetCardsByMonthUseCase(repository)(yearMonth) + + assertEquals(yearMonth, repository.requestedMonth) + assertSame(expected, result) + } + + private class RecordingRepository( + private val result: AppResult>, + ) : CardQueryRepository { + var requestedMonth: YearMonth? = null + private set + + override suspend fun getCardsByDate(date: LocalDate): AppResult> = + AppResult.Success(emptyList()) + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> { + requestedMonth = yearMonth + return result + } + } +} From 62bed2c7b5248106f972fc4a0c4affc06a183036 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 18:03:35 +0900 Subject: [PATCH 18/34] =?UTF-8?q?feat:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=97=90=20=EC=97=B0=C2=B7=EC=9B=94=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=EB=B0=94=ED=85=80=EC=8B=9C=ED=8A=B8=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 월 표시 박스가 오늘이 속한 달을 표시만 하고 눌러도 아무 일이 없었다. 박스를 누르면 연·월 휠 바텀시트가 올라오고, 선택하기를 눌러야 그 달로 다시 조회한다. 고른 달이 보고 있는 달과 같으면 이미 쌓인 종이를 다시 쏟지 않고 시트만 닫는다. 휠 가운데 칸 판정은 스크롤 오프셋을 어림하지 않고 layoutInfo에서 화면 중앙에 가장 가까운 칸을 찾는다. 오프셋으로 계산하면 스크롤 도중 한 칸씩 밀린다. 첫 프레임에는 아직 레이아웃이 없어 가운데를 알 수 없으므로, 그때는 지금 고른 칸을 그대로 답한다. 0번째로 떨어뜨리면 고르지도 않은 첫 칸이 선택돼 버린다. 연도는 올해로 끝나는 최근 5년만 준다. 월은 12개월을 그대로 둬서 연·월 휠이 서로를 잘라내지 않게 하고, 카드가 없는 달은 기존 빈 상태로 답한다. 시트 아래 여백은 디자인이 화면 맨 아래까지 재는 값이라 contentWindowInsets를 비우고 직접 계산한다. 다만 3버튼 내비처럼 인셋이 그 여백보다 큰 기기에서는 버튼이 가려지므로 그때는 인셋만큼 확보한다. 닫기 아이콘(X)이 디자인시스템에 없어 ic_close를 추가했다. --- .../core/designsystem/component/GamssIcons.kt | 3 + .../src/main/res/drawable/ic_close.xml | 18 ++ .../feature/archive/ArchiveDetailScreen.kt | 71 ++++- .../feature/archive/ArchiveDetailState.kt | 7 +- .../feature/archive/ArchiveDetailViewModel.kt | 68 +++-- .../archive/component/YearMonthPickerSheet.kt | 266 ++++++++++++++++++ .../calendar/src/main/res/values/strings.xml | 5 + .../archive/ArchiveDetailViewModelTest.kt | 90 +++++- 8 files changed, 483 insertions(+), 45 deletions(-) create mode 100644 core/designsystem/src/main/res/drawable/ic_close.xml create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt diff --git a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt index 87e5c1d7..ab2ffb06 100644 --- a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt +++ b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt @@ -29,6 +29,9 @@ object GamssIcons { @DrawableRes val RightChevron: Int = R.drawable.ic_right_chevron + @DrawableRes + val Close: Int = R.drawable.ic_close + /** 두 가지 색이 들어 있어 tint 하지 않는다. 채움은 gray700, 체크는 gray025. */ @DrawableRes val CheckCircleOn: Int = R.drawable.ic_check_circle_on diff --git a/core/designsystem/src/main/res/drawable/ic_close.xml b/core/designsystem/src/main/res/drawable/ic_close.xml new file mode 100644 index 00000000..f277ccd7 --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_close.xml @@ -0,0 +1,18 @@ + + + + diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index fb34f5ee..579c9d35 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -3,6 +3,7 @@ package com.gamss.android.feature.archive import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image import androidx.compose.foundation.border +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxWithConstraints @@ -30,18 +31,20 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import com.gamss.android.core.common.util.KoreanTimeZone import com.gamss.android.core.designsystem.component.GamssIconButton import com.gamss.android.core.designsystem.component.GamssTopBar import com.gamss.android.core.designsystem.theme.GamssTheme -import com.gamss.android.domain.card.Card +import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter +import com.gamss.android.feature.archive.component.YearMonthPickerSheet import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.isActive import org.orbitmvi.orbit.compose.collectAsState +import java.time.LocalDate import java.time.YearMonth import java.time.format.DateTimeFormatter import kotlin.random.Random @@ -57,7 +60,14 @@ fun ArchiveDetailScreen( LaunchedEffect(emotion) { viewModel.load(emotion) } BackHandler(onBack = onBackClick) - ArchiveDetailFrame(emotion = emotion, state = state, onBackClick = onBackClick) + ArchiveDetailFrame( + emotion = emotion, + state = state, + onBackClick = onBackClick, + onMonthClick = viewModel::showMonthPicker, + onMonthSelect = viewModel::selectMonth, + onMonthPickerDismiss = viewModel::dismissMonthPicker, + ) } @Composable @@ -65,6 +75,9 @@ private fun ArchiveDetailFrame( emotion: EmotionCharacter, state: ArchiveDetailState, onBackClick: () -> Unit, + onMonthClick: () -> Unit, + onMonthSelect: (YearMonth) -> Unit, + onMonthPickerDismiss: () -> Unit, ) { Scaffold( containerColor = GamssTheme.colors.white, @@ -98,17 +111,34 @@ private fun ArchiveDetailFrame( ) }, ) { innerPadding -> - ArchiveDetailContent(state = state, modifier = Modifier.padding(innerPadding)) + ArchiveDetailContent( + state = state, + onMonthClick = onMonthClick, + modifier = Modifier.padding(innerPadding), + ) + } + + if (state.isMonthPickerVisible) { + YearMonthPickerSheet( + selected = state.yearMonth, + onSelect = onMonthSelect, + onDismiss = onMonthPickerDismiss, + ) } } @Composable private fun ArchiveDetailContent( state: ArchiveDetailState, + onMonthClick: () -> Unit, modifier: Modifier = Modifier, ) { Box(modifier = modifier.fillMaxSize()) { - MonthSelector(modifier = Modifier.align(Alignment.TopCenter)) + MonthSelector( + yearMonth = state.yearMonth, + onClick = onMonthClick, + modifier = Modifier.align(Alignment.TopCenter), + ) when { state.isLoading -> Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { CircularProgressIndicator(color = GamssTheme.colors.gray700) @@ -134,7 +164,11 @@ private fun ArchiveDetailContent( } @Composable -private fun MonthSelector(modifier: Modifier = Modifier) { +private fun MonthSelector( + yearMonth: YearMonth, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { Row( modifier = modifier .padding( @@ -145,18 +179,19 @@ private fun MonthSelector(modifier: Modifier = Modifier) { .fillMaxWidth() .height(DetailMonthHeight) .border(DetailMonthBorderWidth, GamssTheme.colors.gray900) + .clickable(role = Role.Button, onClick = onClick) .padding(horizontal = DetailMonthHorizontalPadding), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { Text( - text = YearMonth.now(KoreanTimeZone).format(YearMonthFormatter), + text = yearMonth.format(YearMonthFormatter), style = GamssTheme.typography.title4, color = GamssTheme.colors.gray900, ) Image( painter = painterResource(com.gamss.android.core.designsystem.R.drawable.ic_right_chevron), - contentDescription = null, + contentDescription = stringResource(R.string.archive_select_month_description), modifier = Modifier.graphicsLayer { rotationZ = 90f }, ) } @@ -170,7 +205,7 @@ private class PaperUiState(x: Float, y: Float, rotationDegrees: Float) { } @Composable -private fun PaperPile(cards: List) { +private fun PaperPile(cards: List) { BoxWithConstraints( modifier = Modifier .fillMaxSize() @@ -208,7 +243,11 @@ private fun PaperPile(cards: List) { val ui = uiStates.getOrNull(index) ?: return@forEachIndexed Image( painter = painterResource(R.drawable.archive_paper), - contentDescription = card.summary, + contentDescription = stringResource( + R.string.archive_paper_description, + card.date.monthValue, + card.date.dayOfMonth, + ), modifier = Modifier .align(Alignment.TopStart) .size(DetailPaperSize * scale) @@ -303,16 +342,20 @@ private fun ArchiveDetailPaperPilePreview() { emotion = EmotionCharacter.QUIRKY, state = ArchiveDetailState( emotion = EmotionCharacter.QUIRKY, + yearMonth = YearMonth.of(2026, 7), isLoading = false, - cards = List(24) { PreviewCard }, + cards = List(24) { index -> PreviewCard.copy(indexInDate = index) }, ), onBackClick = {}, + onMonthClick = {}, + onMonthSelect = {}, + onMonthPickerDismiss = {}, ) } } -private val PreviewCard = Card( +private val PreviewCard = CardEntry( + date = LocalDate.of(2026, 7, 23), + indexInDate = 0, character = EmotionCharacter.QUIRKY, - summary = "미리보기 카드", - message = "", ) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt index e84ecdb4..693b4c96 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt @@ -1,11 +1,14 @@ package com.gamss.android.feature.archive -import com.gamss.android.domain.card.Card +import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter +import java.time.YearMonth data class ArchiveDetailState( val emotion: EmotionCharacter? = null, + val yearMonth: YearMonth, val isLoading: Boolean = true, - val cards: List = emptyList(), + val cards: List = emptyList(), val loadFailed: Boolean = false, + val isMonthPickerVisible: Boolean = false, ) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index 98f8e156..a845e489 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -3,34 +3,70 @@ package com.gamss.android.feature.archive import androidx.lifecycle.ViewModel import com.gamss.android.core.common.AppResult import com.gamss.android.core.common.util.KoreanTimeZone -import com.gamss.android.domain.card.GetCardsByDateUseCase +import com.gamss.android.domain.card.CardEntry +import com.gamss.android.domain.card.GetCardsByMonthUseCase import com.gamss.android.domain.emotion.EmotionCharacter import dagger.hilt.android.lifecycle.HiltViewModel import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.viewmodel.container -import java.time.LocalDate +import java.time.YearMonth import javax.inject.Inject @HiltViewModel class ArchiveDetailViewModel @Inject constructor( - private val getCardsByDate: GetCardsByDateUseCase, + private val getCardsByMonth: GetCardsByMonthUseCase, ) : ViewModel(), ContainerHost { - override val container = container(ArchiveDetailState()) + override val container = container( + ArchiveDetailState(yearMonth = YearMonth.now(KoreanTimeZone)), + ) fun load(emotion: EmotionCharacter) = intent { - if (state.emotion == emotion && !state.isLoading) return@intent - - reduce { ArchiveDetailState(emotion = emotion) } - when (val result = getCardsByDate(LocalDate.now(KoreanTimeZone))) { - is AppResult.Success -> reduce { - state.copy( - isLoading = false, - cards = result.data.filter { it.character == emotion }, - ) - } - - is AppResult.Failure -> reduce { state.copy(isLoading = false, loadFailed = true) } + if (state.emotion == emotion) return@intent + + reduce { state.copy(emotion = emotion) } + val result = getCardsByMonth(state.yearMonth) + reduce { state.withCards(result, emotion) } + } + + fun showMonthPicker() = intent { + reduce { state.copy(isMonthPickerVisible = true) } + } + + fun dismissMonthPicker() = intent { + reduce { state.copy(isMonthPickerVisible = false) } + } + + /** 고른 달이 지금 보고 있는 달이면 이미 쌓인 종이를 다시 쏟지 않고 시트만 닫는다. */ + fun selectMonth(yearMonth: YearMonth) = intent { + val emotion = state.emotion + if (emotion == null || yearMonth == state.yearMonth) { + reduce { state.copy(isMonthPickerVisible = false) } + return@intent + } + + reduce { + state.copy( + yearMonth = yearMonth, + isMonthPickerVisible = false, + isLoading = true, + cards = emptyList(), + loadFailed = false, + ) } + val result = getCardsByMonth(yearMonth) + reduce { state.withCards(result, emotion) } } } + +private fun ArchiveDetailState.withCards( + result: AppResult>, + emotion: EmotionCharacter, +): ArchiveDetailState = when (result) { + is AppResult.Success -> copy( + isLoading = false, + cards = result.data.filter { it.character == emotion }, + ) + + is AppResult.Failure -> copy(isLoading = false, loadFailed = true) +} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt new file mode 100644 index 00000000..8b9a1506 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt @@ -0,0 +1,266 @@ +package com.gamss.android.feature.archive.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.gamss.android.core.common.util.KoreanTimeZone +import com.gamss.android.core.designsystem.component.GamssIconButton +import com.gamss.android.core.designsystem.component.GamssIcons +import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.feature.archive.R +import java.time.YearMonth +import kotlin.math.abs + +/** + * 연·월을 휠로 돌려 고르는 바텀시트. 휠을 돌리는 동안에는 아직 고르는 중이고, `선택하기` 를 눌러야 + * [onSelect] 로 확정된다. + * + * 연도는 [latest] 로 끝나는 최근 [YEAR_RANGE_SIZE] 년, 월은 12개월을 그대로 준다. 실제로 카드가 있는 + * 달만 남기려면 휠이 서로를 잘라내야 하는데, 그렇게까지 하지 않고 카드가 없는 달은 빈 상태로 답한다. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +internal fun YearMonthPickerSheet( + selected: YearMonth, + onSelect: (YearMonth) -> Unit, + onDismiss: () -> Unit, + latest: YearMonth = YearMonth.now(KoreanTimeZone), +) { + val years = remember(latest) { ((latest.year - YEAR_RANGE_SIZE + 1)..latest.year).toList() } + val months = remember { (1..MONTHS_IN_YEAR).toList() } + var pendingYear by remember(selected) { mutableIntStateOf(selected.year) } + var pendingMonth by remember(selected) { mutableIntStateOf(selected.monthValue) } + + ModalBottomSheet( + onDismissRequest = onDismiss, + containerColor = GamssTheme.colors.white, + shape = RoundedCornerShape(topStart = SheetCornerRadius, topEnd = SheetCornerRadius), + dragHandle = null, + // 디자인의 아래 여백은 화면 맨 아래까지 재는 값이다. 시트가 인셋을 따로 예약하면 그만큼 더 + // 벌어지므로 예약하지 않고, 아래에서 직접 계산한다. + contentWindowInsets = { WindowInsets(0) }, + ) { + // 제스처 바는 디자인의 홈 인디케이터처럼 여백 위에 겹쳐도 된다. 다만 3버튼 내비처럼 인셋이 + // 디자인 여백보다 큰 기기에서는 버튼이 가려지므로, 그때는 인셋만큼 확보한다. + val bottomPadding = SheetBottomPadding.coerceAtLeast( + WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding(), + ) + Column(modifier = Modifier.padding(bottom = bottomPadding)) { + Row( + modifier = Modifier + .fillMaxWidth() + // GamssIconButton 의 hitPadding 만큼 당겨, 아이콘 자체가 디자인 위치에 오게 한다. + .padding(top = SheetTopPadding - HitPadding, end = SheetHorizontalPadding - HitPadding), + horizontalArrangement = Arrangement.End, + ) { + GamssIconButton( + iconRes = GamssIcons.Close, + contentDescription = stringResource(R.string.archive_month_picker_close), + onClick = onDismiss, + hitPadding = HitPadding, + tint = GamssTheme.colors.gray400, + ) + } + YearMonthWheels( + years = years, + months = months, + selectedYear = pendingYear, + selectedMonth = pendingMonth, + onYearChange = { pendingYear = it }, + onMonthChange = { pendingMonth = it }, + ) + ConfirmButton(onClick = { onSelect(YearMonth.of(pendingYear, pendingMonth)) }) + } + } +} + +/** 가운데 칸을 덮는 하이라이트는 두 휠에 걸친 한 덩어리라, 휠 뒤에 한 번만 깔고 가운데 정렬한다. */ +@Composable +private fun YearMonthWheels( + years: List, + months: List, + selectedYear: Int, + selectedMonth: Int, + onYearChange: (Int) -> Unit, + onMonthChange: (Int) -> Unit, +) { + Box( + modifier = Modifier + .padding( + start = SheetHorizontalPadding, + end = SheetHorizontalPadding, + // 위 Row 는 아이콘 아래에도 hitPadding 을 물고 있다. 디자인 간격은 아이콘 자체에서 + // 재는 값이라 그만큼 빼야 24dp 가 된다. + top = WheelTopGap - HitPadding, + ) + .fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .height(WheelRowHeight) + .background(GamssTheme.colors.gray200, RoundedCornerShape(WheelHighlightRadius)), + ) + Row(modifier = Modifier.fillMaxWidth()) { + PickerWheel( + items = years, + selected = selectedYear, + label = { stringResource(R.string.archive_picker_year, it) }, + onSelect = onYearChange, + modifier = Modifier.weight(1f), + ) + PickerWheel( + items = months, + selected = selectedMonth, + label = { stringResource(R.string.archive_picker_month, it) }, + onSelect = onMonthChange, + modifier = Modifier.weight(1f), + ) + } + } +} + +@Composable +private fun ConfirmButton(onClick: () -> Unit) { + Button( + onClick = onClick, + modifier = Modifier + .padding( + start = ConfirmHorizontalPadding, + end = ConfirmHorizontalPadding, + top = ConfirmTopPadding, + ) + .fillMaxWidth() + .height(ConfirmHeight), + shape = RoundedCornerShape(ConfirmCornerRadius), + colors = ButtonDefaults.buttonColors( + containerColor = GamssTheme.colors.gray900, + contentColor = GamssTheme.colors.white, + ), + ) { + Text( + text = stringResource(R.string.archive_month_picker_confirm), + style = GamssTheme.typography.title5, + ) + } +} + +/** + * 가운데 칸에 놓인 값이 고른 값이 되는 휠. 위아래로 [WHEEL_VISIBLE_ROWS] / 2 칸만큼 여백을 줘서 + * 첫 칸과 마지막 칸도 가운데까지 올라올 수 있게 한다. + * + * [selected] 는 처음 어디에 멈춰 있을지만 정한다. 그 뒤로는 휠이 스크롤 위치를 직접 들고 있고, + * 가운데 값이 바뀔 때마다 [onSelect] 로 알린다. + */ +@Composable +private fun PickerWheel( + items: List, + selected: Int, + label: @Composable (Int) -> String, + onSelect: (Int) -> Unit, + modifier: Modifier = Modifier, +) { + val selectedIndex = items.indexOf(selected).coerceAtLeast(0) + val listState = rememberLazyListState(initialFirstVisibleItemIndex = selectedIndex) + // 스크롤 도중에도 가운데가 흔들리지 않게, 오프셋을 어림하지 않고 실제로 화면 중앙에 가장 가까운 칸을 찾는다. + // 첫 프레임에는 아직 레이아웃이 없어 가운데를 알 수 없다. 그때 0 번째로 떨어지면 고르지도 않은 첫 칸이 + // 선택돼 버리므로, 레이아웃이 잡히기 전까지는 지금 고른 칸을 그대로 답한다. + val centeredIndex by remember(selectedIndex) { + derivedStateOf { + val layoutInfo = listState.layoutInfo + val viewportCenter = (layoutInfo.viewportStartOffset + layoutInfo.viewportEndOffset) / 2 + layoutInfo.visibleItemsInfo + .minByOrNull { abs(it.offset + it.size / 2 - viewportCenter) } + ?.index + ?: selectedIndex + } + } + + LaunchedEffect(items) { + snapshotFlow { centeredIndex }.collect { index -> items.getOrNull(index)?.let(onSelect) } + } + + LazyColumn( + modifier = modifier.height(WheelRowHeight * WHEEL_VISIBLE_ROWS), + state = listState, + contentPadding = PaddingValues(vertical = WheelRowHeight * (WHEEL_VISIBLE_ROWS / 2)), + flingBehavior = rememberSnapFlingBehavior(listState), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + itemsIndexed(items) { index, value -> + Text( + text = label(value), + modifier = Modifier + .height(WheelRowHeight) + .wrapContentHeight(Alignment.CenterVertically), + style = GamssTheme.typography.body3Regular, + color = if (index == centeredIndex) GamssTheme.colors.gray900 else GamssTheme.colors.gray400, + ) + } + } +} + +private const val YEAR_RANGE_SIZE = 5 +private const val MONTHS_IN_YEAR = 12 +private const val WHEEL_VISIBLE_ROWS = 5 + +private val SheetCornerRadius = 20.dp +private val SheetTopPadding = 24.dp +private val SheetBottomPadding = 32.dp +private val SheetHorizontalPadding = 20.dp +private val HitPadding = 12.dp +private val WheelTopGap = 24.dp +private val WheelRowHeight = 40.dp +private val WheelHighlightRadius = 12.dp +private val ConfirmHorizontalPadding = 18.dp +private val ConfirmTopPadding = 24.dp +private val ConfirmHeight = 52.dp +private val ConfirmCornerRadius = 12.dp + +@Preview(showBackground = true, widthDp = 402) +@Composable +@Suppress("UnusedPrivateMember") +private fun YearMonthPickerSheetPreview() { + GamssTheme(darkTheme = false) { + YearMonthPickerSheet( + selected = YearMonth.of(2026, 7), + onSelect = {}, + onDismiss = {}, + latest = YearMonth.of(2026, 8), + ) + } +} diff --git a/feature/calendar/src/main/res/values/strings.xml b/feature/calendar/src/main/res/values/strings.xml index 7da6e244..e7740dd6 100644 --- a/feature/calendar/src/main/res/values/strings.xml +++ b/feature/calendar/src/main/res/values/strings.xml @@ -8,6 +8,11 @@ %1$s 쓰레기통 열기 비우기 월 선택 + 월 선택 닫기 + 선택하기 + %1$d년 + %1$d월 + %1$d월 %2$d일 카드 %1$d년 %2$d월 이전 달 다음 달 diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt index 48de5396..7c39a86c 100644 --- a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt +++ b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -1,22 +1,26 @@ package com.gamss.android.feature.archive import com.gamss.android.core.common.AppResult +import com.gamss.android.core.common.util.KoreanTimeZone import com.gamss.android.domain.card.Card +import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.card.CardQueryRepository -import com.gamss.android.domain.card.GetCardsByDateUseCase +import com.gamss.android.domain.card.GetCardsByMonthUseCase import com.gamss.android.domain.emotion.EmotionCharacter import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals import org.junit.Test import org.orbitmvi.orbit.test.test import java.time.LocalDate +import java.time.YearMonth @OptIn(ExperimentalCoroutinesApi::class) class ArchiveDetailViewModelTest { @Test fun `선택한 감정의 카드만 종이 목록으로 남긴다`() = runTest { - val viewModel = viewModel(AppResult.Success(listOf(angerCard, joyCard))) + val viewModel = viewModel(AppResult.Success(listOf(angerEntry, joyEntry))) viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) @@ -26,7 +30,7 @@ class ArchiveDetailViewModelTest { copy( emotion = EmotionCharacter.ANGER, isLoading = false, - cards = listOf(angerCard), + cards = listOf(angerEntry), ) } } @@ -50,26 +54,86 @@ class ArchiveDetailViewModelTest { } } - private fun viewModel(result: AppResult>) = ArchiveDetailViewModel( - GetCardsByDateUseCase(FakeCardRepository(result)), + @Test + fun `다른 달을 고르면 그 달을 다시 조회하고 시트를 닫는다`() = runTest { + val repository = FakeCardRepository(AppResult.Success(listOf(angerEntry))) + val viewModel = ArchiveDetailViewModel(GetCardsByMonthUseCase(repository)) + val previousMonth = YearMonth.of(2026, 7) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + + containerHost.showMonthPicker() + expectState { copy(isMonthPickerVisible = true) } + + containerHost.selectMonth(previousMonth) + expectState { + copy( + yearMonth = previousMonth, + isMonthPickerVisible = false, + isLoading = true, + cards = emptyList(), + ) + } + expectState { copy(isLoading = false, cards = listOf(angerEntry)) } + } + + assertEquals(previousMonth, repository.requestedMonths.last()) + assertEquals(2, repository.requestedMonths.size) + } + + @Test + fun `보고 있는 달을 다시 고르면 다시 조회하지 않고 시트만 닫는다`() = runTest { + val repository = FakeCardRepository(AppResult.Success(listOf(angerEntry))) + val viewModel = ArchiveDetailViewModel(GetCardsByMonthUseCase(repository)) + val currentMonth = YearMonth.now(KoreanTimeZone) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + + containerHost.showMonthPicker() + expectState { copy(isMonthPickerVisible = true) } + + containerHost.selectMonth(currentMonth) + expectState { copy(isMonthPickerVisible = false) } + } + + assertEquals(listOf(currentMonth), repository.requestedMonths) + } + + private fun viewModel(result: AppResult>) = ArchiveDetailViewModel( + GetCardsByMonthUseCase(FakeCardRepository(result)), ) private companion object { - val angerCard = Card( + val angerEntry = CardEntry( + date = LocalDate.of(2026, 8, 15), + indexInDate = 0, character = EmotionCharacter.ANGER, - summary = "속상했던 하루", - message = "속상했어요", ) - val joyCard = Card( + val joyEntry = CardEntry( + date = LocalDate.of(2026, 8, 15), + indexInDate = 1, character = EmotionCharacter.JOY, - summary = "기분 좋은 하루", - message = "기뻤어요", ) } } private class FakeCardRepository( - private val cardsResult: AppResult>, + private val entriesResult: AppResult>, ) : CardQueryRepository { - override suspend fun getCardsByDate(date: LocalDate): AppResult> = cardsResult + + val requestedMonths = mutableListOf() + + override suspend fun getCardsByDate(date: LocalDate): AppResult> = + AppResult.Success(emptyList()) + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> { + requestedMonths += yearMonth + return entriesResult + } } From 0e605bbf7a15b4740a9f133012b3ee593ac1d5ce Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 18:13:28 +0900 Subject: [PATCH 19/34] =?UTF-8?q?fix:=20=EC=9B=94=20=EC=84=A0=ED=83=9D=20?= =?UTF-8?q?=EC=8B=9C=ED=8A=B8=20=EB=B2=84=ED=8A=BC=EC=9D=B4=203=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=82=B4=EB=B9=84=EB=B0=94=EC=97=90=20=EB=B6=99?= =?UTF-8?q?=EB=8D=98=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 인셋만큼만 확보하면 인셋이 디자인 여백보다 큰 기기에서 여백이 하나도 남지 않아 선택하기 버튼이 내비바에 붙는다. 실기기(인셋 47.8dp, 3버튼 내비)에서 확인했다. 인셋 위로 최소 간격을 두어 제스처 바 기기는 디자인값 32dp 그대로, 3버튼 기기는 55.7dp 가 된다. --- .../feature/archive/component/YearMonthPickerSheet.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt index 8b9a1506..b0e8e735 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt @@ -73,10 +73,11 @@ internal fun YearMonthPickerSheet( // 벌어지므로 예약하지 않고, 아래에서 직접 계산한다. contentWindowInsets = { WindowInsets(0) }, ) { - // 제스처 바는 디자인의 홈 인디케이터처럼 여백 위에 겹쳐도 된다. 다만 3버튼 내비처럼 인셋이 - // 디자인 여백보다 큰 기기에서는 버튼이 가려지므로, 그때는 인셋만큼 확보한다. + // 제스처 바는 디자인의 홈 인디케이터처럼 여백 위에 겹쳐도 된다(24dp + 8dp = 디자인 32dp). + // 3버튼 내비처럼 인셋이 그보다 크면 여백이 남지 않아 버튼이 내비바에 붙으므로, 그때는 인셋 + // 위로 최소 간격만큼 띄운다. val bottomPadding = SheetBottomPadding.coerceAtLeast( - WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding(), + WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() + MinGapAboveSystemBar, ) Column(modifier = Modifier.padding(bottom = bottomPadding)) { Row( @@ -241,6 +242,7 @@ private const val WHEEL_VISIBLE_ROWS = 5 private val SheetCornerRadius = 20.dp private val SheetTopPadding = 24.dp private val SheetBottomPadding = 32.dp +private val MinGapAboveSystemBar = 8.dp private val SheetHorizontalPadding = 20.dp private val HitPadding = 12.dp private val WheelTopGap = 24.dp From 4c3dca229a4078c8ccbd07627f1da8b6d21002de Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 18:15:41 +0900 Subject: [PATCH 20/34] =?UTF-8?q?chore:=20=EC=8B=9C=ED=8A=B8=20=EB=8B=AB?= =?UTF-8?q?=EA=B8=B0=20=EC=95=84=EC=9D=B4=EC=BD=98=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=AA=85=EC=9D=84=20ic=5Fclose=5Fline=20=EC=9C=BC=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 develop 이 같은 이름으로 다른 아이콘(원형으로 채운 지우기 버튼, GamssIcons.ClearButton) 을 추가해 add/add 충돌이 났다. 선으로만 그린 X 는 파일명을 나눠 둘 다 남긴다. --- .../gamss/android/core/designsystem/component/GamssIcons.kt | 3 ++- .../src/main/res/drawable/{ic_close.xml => ic_close_line.xml} | 0 2 files changed, 2 insertions(+), 1 deletion(-) rename core/designsystem/src/main/res/drawable/{ic_close.xml => ic_close_line.xml} (100%) diff --git a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt index ab2ffb06..2729f40a 100644 --- a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt +++ b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/component/GamssIcons.kt @@ -29,8 +29,9 @@ object GamssIcons { @DrawableRes val RightChevron: Int = R.drawable.ic_right_chevron + /** 선으로만 그린 X. 원형으로 채운 지우기 버튼(ic_close)과 다른 에셋이다. */ @DrawableRes - val Close: Int = R.drawable.ic_close + val Close: Int = R.drawable.ic_close_line /** 두 가지 색이 들어 있어 tint 하지 않는다. 채움은 gray700, 체크는 gray025. */ @DrawableRes diff --git a/core/designsystem/src/main/res/drawable/ic_close.xml b/core/designsystem/src/main/res/drawable/ic_close_line.xml similarity index 100% rename from core/designsystem/src/main/res/drawable/ic_close.xml rename to core/designsystem/src/main/res/drawable/ic_close_line.xml From ee7b9a317a1a3bc71b6d0d3d51e8b2dba5ae027c Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 20:46:41 +0900 Subject: [PATCH 21/34] =?UTF-8?q?feat:=20=EC=9B=94=20=EC=84=A0=ED=83=9D=20?= =?UTF-8?q?=EB=B0=95=EC=8A=A4=EB=A5=BC=20=EC=86=90=EA=B7=B8=EB=A6=BC=20?= =?UTF-8?q?=ED=85=8C=EB=91=90=EB=A6=AC=EB=A1=9C=20=EB=B0=94=EA=BE=B8?= =?UTF-8?q?=EA=B3=A0=20=EC=85=B0=EB=B8=8C=EB=A1=A0=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=C2=B7=ED=81=AC=EA=B8=B0=20=EB=B3=B4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 월 박스만 곧은 1dp 테두리라 앱의 손그림 톤에서 겉돌았다. 입력바가 쓰는 손그림 에셋을 그대로 가져와(fix/home-ui 의 bg_input_box 와 바이트 동일) 같은 그림이 리소스로 갈라지지 않게 했다. 셰브론은 두 가지가 어긋나 있었다. ic_right_chevron 글리프가 24 뷰포트 안에서 오른쪽에 몰려 있어(중심 16.85, 12.03) 박스 중심을 축으로 90° 돌리면 그 가로 편차 4.85dp 가 세로 어긋남으로 바뀌었다. 회전축을 글리프 중심으로 옮겨(GamssDisclosureToggle 과 같은 값) 제자리에서 돌게 했다. 또 디자인의 셰브론 프레임은 18dp 인데 드로어블 고유 크기 24dp 로 그려 33% 커 보였다. 실기기 실측으로 세로 편차 4.85dp → 0.17dp, 잉크 17.5×8.9dp → 13.0×6.5dp 가 됐다. 낙하는 조금 더 빠른 편이 좋아 중력을 1700 → 2600 으로 올렸다. --- .../src/main/res/drawable/bg_input_box.xml | 20 +++++++++++ .../feature/archive/ArchiveDetailScreen.kt | 35 ++++++++++++++++--- .../android/feature/archive/PaperPhysics.kt | 2 +- 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 core/designsystem/src/main/res/drawable/bg_input_box.xml diff --git a/core/designsystem/src/main/res/drawable/bg_input_box.xml b/core/designsystem/src/main/res/drawable/bg_input_box.xml new file mode 100644 index 00000000..ef98eef9 --- /dev/null +++ b/core/designsystem/src/main/res/drawable/bg_input_box.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index 579c9d35..fc7610ae 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -2,7 +2,6 @@ package com.gamss.android.feature.archive import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image -import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -27,7 +26,10 @@ import androidx.compose.runtime.setValue import androidx.compose.runtime.withFrameNanos import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.paint +import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -178,7 +180,12 @@ private fun MonthSelector( ) .fillMaxWidth() .height(DetailMonthHeight) - .border(DetailMonthBorderWidth, GamssTheme.colors.gray900) + // 입력바와 같은 손그림 테두리 에셋을 그대로 쓴다. 화면마다 따로 만들면 같은 그림이 리소스로 + // 중복된다. + .paint( + painter = painterResource(com.gamss.android.core.designsystem.R.drawable.bg_input_box), + contentScale = ContentScale.FillBounds, + ) .clickable(role = Role.Button, onClick = onClick) .padding(horizontal = DetailMonthHorizontalPadding), horizontalArrangement = Arrangement.SpaceBetween, @@ -192,7 +199,16 @@ private fun MonthSelector( Image( painter = painterResource(com.gamss.android.core.designsystem.R.drawable.ic_right_chevron), contentDescription = stringResource(R.string.archive_select_month_description), - modifier = Modifier.graphicsLayer { rotationZ = 90f }, + // 글리프가 뷰포트 오른쪽에 몰려 있어, 박스 중심으로 돌리면 그 가로 편차가 세로 어긋남으로 + // 바뀐다. 회전축을 글리프 중심에 두면 제자리에서 돌아 세로 중앙에 남는다. + // 대신 돌아간 잉크가 레이아웃 박스를 오른쪽으로 넘어가, 그만큼 밀어 좌우 여백을 맞춘다. + modifier = Modifier + .padding(end = DetailChevronInkOverflow) + .size(DetailChevronSize) + .graphicsLayer { + rotationZ = CHEVRON_ROTATION + transformOrigin = TransformOrigin(CHEVRON_CENTER_X, CHEVRON_CENTER_Y) + }, ) } } @@ -308,6 +324,12 @@ private suspend fun CoroutineScope.runPaperFall( } } +private const val CHEVRON_ROTATION = 90f + +// ic_right_chevron 글리프의 실제 중심. 24 뷰포트에서 stroke 포함 x 12.4~21.3, y 3.9~20.2 다. +private const val CHEVRON_CENTER_X = 16.85f / 24f +private const val CHEVRON_CENTER_Y = 12.03f / 24f + private const val PAPER_COLLISION_RADIUS_SCALE = 1.15f private const val PAPER_MAX_TILT_DEGREES = 42f private const val PAPER_SPAWN_STAGGER = 0.9f @@ -327,8 +349,13 @@ private val DetailTitleStartPadding = 12.dp private val DetailHorizontalPadding = 18.dp private val DetailMonthTopPadding = 24.dp private val DetailMonthHeight = 48.dp -private val DetailMonthBorderWidth = 1.dp private val DetailMonthHorizontalPadding = 12.dp + +// 디자인의 셰브론 프레임은 18dp 다. 드로어블 고유 크기(24dp)로 두면 그만큼 커 보인다. +private val DetailChevronSize = 18.dp + +// 회전한 잉크가 레이아웃 박스를 넘는 양(뷰포트 기준 1dp × 18/24)에 텍스트 사이드베어링을 더한 값. +private val DetailChevronInkOverflow = 1.dp private val DetailPaperPileTopPadding = 136.dp private val DetailPaperDesignWidth = 402.dp private val DetailPaperSize = 88.dp diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt index 53f83cea..286b1cd7 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt @@ -141,7 +141,7 @@ internal class PaperPhysicsWorld( // 단위는 px/s, px/s², rad/s 등 시뮬레이션 내부 단위 기준이며, 다른 값으로 바꾸면 반드시 // 실기기에서 낙하 애니메이션을 재확인해야 한다. private companion object { - const val Gravity = 1700f + const val Gravity = 2600f const val LinearDamping = 0.995f const val AngularDamping = 0.9f const val Restitution = 0.32f From 7b6ed8f4a2cfc6860862f95a2554c92264a9d0b8 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 21:20:54 +0900 Subject: [PATCH 22/34] =?UTF-8?q?refactor:=20=EB=B3=B4=EA=B4=80=ED=95=A8?= =?UTF-8?q?=20=EC=83=81=EC=84=B8=20=ED=99=94=EB=A9=B4=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=EB=A6=BD=C2=B7=EC=9B=94=20=EB=B0=95=EC=8A=A4=C2=B7=EC=A2=85?= =?UTF-8?q?=EC=9D=B4=20=EB=8D=94=EB=AF=B8=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 한 파일이 화면 조립부터 월 박스, 종이 낙하 물리 루프까지 들고 있어 390줄이었다. component/MonthSelector, component/PaperPile 로 갈라 화면 파일은 조립만 남겼다. 402dp 시안 배율 계산은 보관함 그리드와 종이 더미가 각자 복붙하고 있어 designScale 로 뺐다. 빈 상태·실패 문구, 닫기 버튼, 시트 아래 여백 계산도 이름 있는 조각으로 꺼냈다. 주석은 코드를 그대로 읽어주는 설명을 지우고, 그 코드가 왜 그렇게 생겼는지만 남겼다. 순번 규칙 설명이 CardEntry 와 CardCalendarResponse 양쪽에 있어 도메인만 남겼고, PaperPhysics 에 섞여 있던 영어 주석은 한글로 맞췄다. 하드코딩으로 남아 있던 보관함 그리드 문구와 설정 아이콘 접근성 설명을 strings.xml 로 옮겼다. --- .../model/response/CardCalendarResponse.kt | 7 +- .../gamss/android/domain/card/CardEntry.kt | 6 +- .../feature/archive/ArchiveDetailScreen.kt | 334 ++++-------------- .../feature/archive/ArchiveDetailViewModel.kt | 8 +- .../android/feature/archive/ArchiveScreen.kt | 95 ++--- .../android/feature/archive/DesignScale.kt | 12 + .../android/feature/archive/PaperPhysics.kt | 18 +- .../archive/component/MonthSelector.kt | 94 +++++ .../feature/archive/component/PaperPile.kt | 163 +++++++++ .../archive/component/YearMonthPickerSheet.kt | 69 ++-- .../calendar/src/main/res/values/strings.xml | 2 + 11 files changed, 431 insertions(+), 377 deletions(-) create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/DesignScale.kt create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt diff --git a/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt b/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt index d14f0d75..e9f0b2b4 100644 --- a/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt +++ b/data/src/main/java/com/gamss/android/data/remote/card/model/response/CardCalendarResponse.kt @@ -12,12 +12,7 @@ internal data class CardCalendarResponse( val emotions: List = emptyList(), ) -/** - * 하루치 대표 감정 목록을 카드 한 건씩으로 펼친다. - * - * 순번은 알 수 없는 감정을 걸러낸 뒤를 기준으로 센다. 날짜별 조회도 같은 기준으로 걸러내므로, - * 나중에 [CardEntry.indexInDate] 로 그 응답의 카드를 그대로 찾을 수 있다. - */ +/** 하루치 대표 감정 목록을 카드 한 건씩으로 펼친다. 순번 기준은 [CardEntry] 참고. */ internal fun CardCalendarResponse.toDomain(): List { val createdDate = LocalDate.parse(date) return emotions.mapNotNull { it.toEmotionCharacter() } diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt index 23901cfc..ea4d16bc 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CardEntry.kt @@ -6,9 +6,9 @@ import java.time.LocalDate /** * 월별 조회로 받은 카드 한 건. 어떤 감정 카드가 언제 있었는지만 담고 요약·대사는 없다. * - * 월별 응답에는 카드 식별자가 없어 [date] 와 그날 순번 [indexInDate] 가 카드의 신원이다. 요약 같은 - * 상세가 필요해지면 [date] 로 날짜별 조회해 [indexInDate] 번째 카드를 쓴다. 두 응답 모두 카드 - * 생성순이고 알 수 없는 감정을 같은 기준으로 걸러내므로, 순번은 걸러낸 뒤를 기준으로 센다. + * 월별 응답에 카드 식별자가 없어 [date] 와 그날 순번 [indexInDate] 가 카드의 신원이다. 상세가 + * 필요하면 [date] 로 날짜별 조회해 [indexInDate] 번째 카드를 쓴다. 두 응답 모두 생성순이고 알 수 없는 + * 감정을 같은 기준으로 걸러내므로, 순번은 걸러낸 뒤를 기준으로 센다. */ data class CardEntry( val date: LocalDate, diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index 6db356aa..33ce7b62 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -1,38 +1,20 @@ package com.gamss.android.feature.archive -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement +import androidx.annotation.StringRes import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row 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.layout.size import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.runtime.withFrameNanos import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.paint -import androidx.compose.ui.graphics.TransformOrigin -import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -41,18 +23,17 @@ import com.gamss.android.core.designsystem.component.GamssTopBar import com.gamss.android.core.designsystem.theme.GamssTheme import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter +import com.gamss.android.feature.archive.component.MonthSelector +import com.gamss.android.feature.archive.component.PaperPile import com.gamss.android.feature.archive.component.YearMonthPickerSheet -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.isActive import org.orbitmvi.orbit.compose.collectAsState import java.time.LocalDate import java.time.YearMonth -import java.time.format.DateTimeFormatter -import kotlin.random.Random +import com.gamss.android.core.designsystem.R as DesignSystemR /** - * 시스템 뒤로가기는 여기서 BackHandler 로 받지 않는다. 먼저 가로채면 NavDisplay 의 onBack 에 - * 닿지 않아, predictive back 미리보기와 pop 트랜지션이 이 화면에서만 빠진다. + * 시스템 뒤로가기는 여기서 BackHandler 로 받지 않는다. 먼저 가로채면 NavDisplay 의 onBack 에 닿지 + * 않아, predictive back 미리보기와 pop 트랜지션이 이 화면에서만 빠진다. */ @Composable fun ArchiveDetailScreen( @@ -85,41 +66,16 @@ private fun ArchiveDetailFrame( ) { Scaffold( containerColor = GamssTheme.colors.white, - topBar = { - GamssTopBar( - contentPadding = PaddingValues(start = DetailTopBarStartPadding, end = DetailTopBarEndPadding), - leading = { - Row(verticalAlignment = Alignment.CenterVertically) { - GamssIconButton( - iconRes = com.gamss.android.core.designsystem.R.drawable.ic_left_chevron, - contentDescription = stringResource(R.string.archive_back_description), - onClick = onBackClick, - hitPadding = DetailBackHitPadding, - ) - Text( - text = emotion.displayName, - style = GamssTheme.typography.title4, - color = GamssTheme.colors.gray900, - modifier = Modifier.padding(start = DetailTitleStartPadding), - ) - } - }, - trailing = { - // 비우기는 실제 카드/대화를 삭제하는 파괴적 동작이므로 확인 UI가 준비되기 전에는 표시만 한다. - Text( - text = stringResource(R.string.archive_clear), - style = GamssTheme.typography.body4Medium, - color = GamssTheme.colors.gray900, - ) - }, - ) - }, + topBar = { ArchiveDetailTopBar(emotion = emotion, onBackClick = onBackClick) }, ) { innerPadding -> - ArchiveDetailContent( - state = state, - onMonthClick = onMonthClick, - modifier = Modifier.padding(innerPadding), - ) + Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) { + MonthSelector( + yearMonth = state.yearMonth, + onClick = onMonthClick, + modifier = Modifier.align(Alignment.TopCenter), + ) + ArchiveDetailCards(state = state) + } } if (state.isMonthPickerVisible) { @@ -132,235 +88,63 @@ private fun ArchiveDetailFrame( } @Composable -private fun ArchiveDetailContent( - state: ArchiveDetailState, - onMonthClick: () -> Unit, - modifier: Modifier = Modifier, +private fun ArchiveDetailTopBar( + emotion: EmotionCharacter, + onBackClick: () -> Unit, ) { - Box(modifier = modifier.fillMaxSize()) { - MonthSelector( - yearMonth = state.yearMonth, - onClick = onMonthClick, - modifier = Modifier.align(Alignment.TopCenter), - ) - when { - state.isLoading -> Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - CircularProgressIndicator(color = GamssTheme.colors.gray700) + GamssTopBar( + contentPadding = PaddingValues(horizontal = TopBarHorizontalPadding), + leading = { + Row(verticalAlignment = Alignment.CenterVertically) { + GamssIconButton( + iconRes = DesignSystemR.drawable.ic_left_chevron, + contentDescription = stringResource(R.string.archive_back_description), + onClick = onBackClick, + hitPadding = BackHitPadding, + ) + Text( + text = emotion.displayName, + style = GamssTheme.typography.title4, + color = GamssTheme.colors.gray900, + modifier = Modifier.padding(start = TitleStartPadding), + ) } - - state.loadFailed -> Text( - text = stringResource(R.string.archive_cards_load_failed), - style = GamssTheme.typography.body4Medium, - color = GamssTheme.colors.gray500, - modifier = Modifier.align(Alignment.Center), - ) - - state.cards.isEmpty() -> Text( - text = stringResource(R.string.archive_cards_empty), + }, + trailing = { + // 확인 다이얼로그가 준비되기 전에는 표시만 한다. 실제 카드/대화를 지우는 동작이다. + Text( + text = stringResource(R.string.archive_clear), style = GamssTheme.typography.body4Medium, - color = GamssTheme.colors.gray500, - modifier = Modifier.align(Alignment.Center), + color = GamssTheme.colors.gray900, ) - - else -> PaperPile(cards = state.cards) - } - } -} - -@Composable -private fun MonthSelector( - yearMonth: YearMonth, - onClick: () -> Unit, - modifier: Modifier = Modifier, -) { - Row( - modifier = modifier - .padding( - start = DetailHorizontalPadding, - end = DetailHorizontalPadding, - top = DetailMonthTopPadding, - ) - .fillMaxWidth() - .height(DetailMonthHeight) - // 입력바와 같은 손그림 테두리 에셋을 그대로 쓴다. 화면마다 따로 만들면 같은 그림이 리소스로 - // 중복된다. - .paint( - painter = painterResource(com.gamss.android.core.designsystem.R.drawable.bg_input_box), - contentScale = ContentScale.FillBounds, - ) - .clickable(role = Role.Button, onClick = onClick) - .padding(horizontal = DetailMonthHorizontalPadding), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = yearMonth.format(YearMonthFormatter), - style = GamssTheme.typography.title4, - color = GamssTheme.colors.gray900, - ) - Image( - painter = painterResource(com.gamss.android.core.designsystem.R.drawable.ic_right_chevron), - contentDescription = stringResource(R.string.archive_select_month_description), - // 글리프가 뷰포트 오른쪽에 몰려 있어, 박스 중심으로 돌리면 그 가로 편차가 세로 어긋남으로 - // 바뀐다. 회전축을 글리프 중심에 두면 제자리에서 돌아 세로 중앙에 남는다. - // 대신 돌아간 잉크가 레이아웃 박스를 오른쪽으로 넘어가, 그만큼 밀어 좌우 여백을 맞춘다. - modifier = Modifier - .padding(end = DetailChevronInkOverflow) - .size(DetailChevronSize) - .graphicsLayer { - rotationZ = CHEVRON_ROTATION - transformOrigin = TransformOrigin(CHEVRON_CENTER_X, CHEVRON_CENTER_Y) - }, - ) - } -} - -@Stable -private class PaperUiState(x: Float, y: Float, rotationDegrees: Float) { - var x by mutableFloatStateOf(x) - var y by mutableFloatStateOf(y) - var rotationDegrees by mutableFloatStateOf(rotationDegrees) + }, + ) } @Composable -private fun PaperPile(cards: List) { - BoxWithConstraints( - modifier = Modifier - .fillMaxSize() - .padding(top = DetailPaperPileTopPadding), - contentAlignment = Alignment.TopCenter, - ) { - val scale = (maxWidth / DetailPaperDesignWidth).coerceAtMost(1f) - val density = LocalDensity.current - val boundsWidthPx = with(density) { (DetailPaperDesignWidth * scale).toPx() } - val boundsHeightPx = with(density) { maxHeight.toPx() } - val paperSizePx = with(density) { (DetailPaperSize * scale).toPx() } - val radiusPx = paperSizePx / 2f * PAPER_COLLISION_RADIUS_SCALE - - // 화면 회전 등으로 boundsWidthPx/boundsHeightPx만 바뀌었을 때는 키에서 빼서, 이미 쌓인 카드가 - // 처음부터 다시 쏟아지지 않게 한다 — cards 자체가 바뀔 때만 스폰/낙하를 새로 시작한다. - val uiStates = remember(cards) { - List(cards.size) { index -> - val spawnX = radiusPx + Random.nextFloat() * (boundsWidthPx - radiusPx * 2f).coerceAtLeast(0f) - val spawnY = -radiusPx - index * radiusPx * PAPER_SPAWN_STAGGER - val spawnRotation = (Random.nextFloat() - 0.5f) * 2f * PAPER_MAX_TILT_DEGREES - PaperUiState(x = spawnX, y = spawnY, rotationDegrees = spawnRotation) - } - } - - LaunchedEffect(cards) { - runPaperFall( - uiStates = uiStates, - boundsWidthPx = boundsWidthPx, - boundsHeightPx = boundsHeightPx, - radiusPx = radiusPx, - ) - } - - cards.forEachIndexed { index, card -> - val ui = uiStates.getOrNull(index) ?: return@forEachIndexed - Image( - painter = painterResource(R.drawable.archive_paper), - contentDescription = stringResource( - R.string.archive_paper_description, - card.date.monthValue, - card.date.dayOfMonth, - ), - modifier = Modifier - .align(Alignment.TopStart) - .size(DetailPaperSize * scale) - .graphicsLayer { - translationX = ui.x - paperSizePx / 2f - translationY = ui.y - paperSizePx / 2f - rotationZ = ui.rotationDegrees - }, - ) +private fun ArchiveDetailCards(state: ArchiveDetailState) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + when { + state.isLoading -> CircularProgressIndicator(color = GamssTheme.colors.gray700) + state.loadFailed -> EmptyMessage(textRes = R.string.archive_cards_load_failed) + state.cards.isEmpty() -> EmptyMessage(textRes = R.string.archive_cards_empty) + else -> PaperPile(cards = state.cards) } } } -/** [PaperPile]의 낙하 물리 루프. 매 프레임 [PaperPhysicsWorld]를 갱신해 [uiStates]에 반영하고, 다 쌓이면 멈춘다. */ -private suspend fun CoroutineScope.runPaperFall( - uiStates: List, - boundsWidthPx: Float, - boundsHeightPx: Float, - radiusPx: Float, -) { - val bodies = uiStates.map { ui -> - PaperBody( - startX = ui.x, - startY = ui.y, - startAngle = ui.rotationDegrees.toRadians(), - radius = radiusPx, - startVelX = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_DRIFT, - startAngularVelocity = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_SPIN, - ) - } - val world = PaperPhysicsWorld(bodies, boundsWidth = boundsWidthPx, boundsHeight = boundsHeightPx) - - var lastFrameNanos = -1L - var startFrameNanos = -1L - var settledFrames = 0 - while (isActive) { - withFrameNanos { frameNanos -> - if (startFrameNanos < 0) startFrameNanos = frameNanos - val dt = if (lastFrameNanos < 0) { - PHYSICS_FIXED_DT - } else { - ((frameNanos - lastFrameNanos) / 1_000_000_000f).coerceIn(0f, PHYSICS_MAX_DT) - } - lastFrameNanos = frameNanos - - world.step(dt) - bodies.forEachIndexed { index, body -> - uiStates[index].apply { - x = body.x - y = body.y - rotationDegrees = body.angle.toDegrees() - } - } - settledFrames = if (world.maxActivity() < PHYSICS_SETTLE_THRESHOLD) settledFrames + 1 else 0 - } - val elapsedNanos = lastFrameNanos - startFrameNanos - if (settledFrames >= PHYSICS_SETTLE_FRAMES || elapsedNanos > PHYSICS_MAX_DURATION_NANOS) break - } +@Composable +private fun EmptyMessage(@StringRes textRes: Int) { + Text( + text = stringResource(textRes), + style = GamssTheme.typography.body4Medium, + color = GamssTheme.colors.gray500, + ) } -private const val CHEVRON_ROTATION = 90f - -// ic_right_chevron 글리프의 실제 중심. 24 뷰포트에서 stroke 포함 x 12.4~21.3, y 3.9~20.2 다. -private const val CHEVRON_CENTER_X = 16.85f / 24f -private const val CHEVRON_CENTER_Y = 12.03f / 24f - -private const val PAPER_COLLISION_RADIUS_SCALE = 1.15f -private const val PAPER_MAX_TILT_DEGREES = 42f -private const val PAPER_SPAWN_STAGGER = 0.9f -private const val PAPER_SPAWN_DRIFT = 120f -private const val PAPER_SPAWN_SPIN = 0.15f -private const val PHYSICS_FIXED_DT = 1f / 60f -private const val PHYSICS_MAX_DT = 1f / 30f -private const val PHYSICS_SETTLE_THRESHOLD = 4f -private const val PHYSICS_SETTLE_FRAMES = 30 -private const val PHYSICS_MAX_DURATION_NANOS = 5_000_000_000L - -private val YearMonthFormatter = DateTimeFormatter.ofPattern("yyyy.MM") -private val DetailTopBarStartPadding = 18.dp -private val DetailTopBarEndPadding = 18.dp -private val DetailBackHitPadding = 0.dp -private val DetailTitleStartPadding = 12.dp -private val DetailHorizontalPadding = 18.dp -private val DetailMonthTopPadding = 24.dp -private val DetailMonthHeight = 48.dp -private val DetailMonthHorizontalPadding = 12.dp - -// 디자인의 셰브론 프레임은 18dp 다. 드로어블 고유 크기(24dp)로 두면 그만큼 커 보인다. -private val DetailChevronSize = 18.dp - -// 회전한 잉크가 레이아웃 박스를 넘는 양(뷰포트 기준 1dp × 18/24)에 텍스트 사이드베어링을 더한 값. -private val DetailChevronInkOverflow = 1.dp -private val DetailPaperPileTopPadding = 136.dp -private val DetailPaperDesignWidth = 402.dp -private val DetailPaperSize = 88.dp +private val TopBarHorizontalPadding = 18.dp +private val BackHitPadding = 0.dp +private val TitleStartPadding = 12.dp @Preview(showBackground = true, widthDp = 402, heightDp = 874) @Composable diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index a845e489..40101ff5 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -37,9 +37,9 @@ class ArchiveDetailViewModel @Inject constructor( reduce { state.copy(isMonthPickerVisible = false) } } - /** 고른 달이 지금 보고 있는 달이면 이미 쌓인 종이를 다시 쏟지 않고 시트만 닫는다. */ fun selectMonth(yearMonth: YearMonth) = intent { val emotion = state.emotion + // 보고 있는 달을 다시 고르면 이미 쌓인 종이를 다시 쏟지 않고 시트만 닫는다. if (emotion == null || yearMonth == state.yearMonth) { reduce { state.copy(isMonthPickerVisible = false) } return@intent @@ -63,10 +63,6 @@ private fun ArchiveDetailState.withCards( result: AppResult>, emotion: EmotionCharacter, ): ArchiveDetailState = when (result) { - is AppResult.Success -> copy( - isLoading = false, - cards = result.data.filter { it.character == emotion }, - ) - + is AppResult.Success -> copy(isLoading = false, cards = result.data.filter { it.character == emotion }) is AppResult.Failure -> copy(isLoading = false, loadFailed = true) } diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index 80b50121..e76bf02e 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -50,8 +50,7 @@ fun ArchiveScreen( Scaffold( containerColor = GamssTheme.colors.white, topBar = { ArchiveTopBar(onMenuClick = onNavigateToSetting) }, - // 상태바는 GamssTopBar가, 내비게이션 바는 MainScreen의 탭바가 각자 직접 피하므로 - // 이 Scaffold가 추가로 예약할 인셋은 없다. + // 상태바는 GamssTopBar 가, 내비게이션 바는 MainScreen 의 탭바가 각자 피한다. contentWindowInsets = WindowInsets(0), ) { innerPadding -> BoxWithConstraints( @@ -60,57 +59,61 @@ fun ArchiveScreen( .padding(innerPadding), contentAlignment = Alignment.Center, ) { - val scale = (maxWidth / ArchiveDesignWidth).coerceAtMost(1f) - val gridWidth = ArchiveDesignWidth * scale + val scale = designScale(maxWidth) - // 타이틀과 그리드는 Box 안에서 각자 따로 정렬되는 형제가 아니라, 하나의 Column으로 묶어야 - // BoxWithConstraints의 Center 정렬이 이 그룹 전체에 적용된다. - Column(modifier = Modifier.width(gridWidth)) { + // 타이틀과 그리드를 한 Column 으로 묶어야 가운데 정렬이 그룹 전체에 걸린다. + Column(modifier = Modifier.width(designWidth(scale))) { Text( - text = "다시 보고 싶은 쓰레기통을 열어보세요", + text = stringResource(R.string.archive_grid_title), modifier = Modifier .fillMaxWidth() - .padding(top = ArchiveTitleTopPadding * scale), + .padding(top = TitleTopPadding * scale), style = GamssTheme.typography.body4Medium, color = GamssTheme.colors.gray950, textAlign = TextAlign.Center, ) - Column( - modifier = Modifier.padding( - start = ArchiveHorizontalPadding * scale, - end = ArchiveHorizontalPadding * scale, - top = ArchiveTopPadding * scale, - bottom = ArchiveBottomPadding * scale, - ), - verticalArrangement = Arrangement.spacedBy(ArchiveVerticalSpacing * scale), - ) { - archiveItems.chunked(ARCHIVE_COLUMN_COUNT).forEach { rowItems -> - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(ArchiveHorizontalSpacing * scale), - ) { - rowItems.forEach { item -> - ArchiveCard(item = item, scale = scale, onClick = { onArchiveClick(item.emotion) }) - } - } - } - } + ArchiveGrid(scale = scale, onArchiveClick = onArchiveClick) } } } } @Composable -private fun ArchiveTopBar( - onMenuClick: () -> Unit, +private fun ArchiveGrid( + scale: Float, + onArchiveClick: (EmotionCharacter) -> Unit, ) { + Column( + modifier = Modifier.padding( + start = GridHorizontalPadding * scale, + end = GridHorizontalPadding * scale, + top = GridTopPadding * scale, + bottom = GridBottomPadding * scale, + ), + verticalArrangement = Arrangement.spacedBy(GridVerticalSpacing * scale), + ) { + archiveItems.chunked(GRID_COLUMN_COUNT).forEach { rowItems -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(GridHorizontalSpacing * scale), + ) { + rowItems.forEach { item -> + ArchiveCard(item = item, scale = scale, onClick = { onArchiveClick(item.emotion) }) + } + } + } + } +} + +@Composable +private fun ArchiveTopBar(onMenuClick: () -> Unit) { GamssTopBar( - contentPadding = PaddingValues(start = ArchiveTopBarStartPadding, end = ArchiveTopBarEndPadding), + contentPadding = PaddingValues(start = TopBarStartPadding, end = TopBarEndPadding), leading = { GamssLogo(contentDescription = stringResource(R.string.archive_logo_description)) }, trailing = { GamssIconButton( iconRes = GamssIcons.Setting, - contentDescription = "설정", + contentDescription = stringResource(R.string.archive_setting_description), onClick = onMenuClick, ) }, @@ -128,7 +131,7 @@ private fun ArchiveCard( painter = painterResource(item.binRes), contentDescription = stringResource(R.string.archive_open_description, item.emotion.displayName), modifier = Modifier - .size(width = ArchiveCardWidth * scale, height = ArchiveCardHeight * scale) + .size(width = CardWidth * scale, height = CardHeight * scale) .clickable( interactionSource = interactionSource, indication = null, @@ -143,15 +146,15 @@ private data class ArchiveItem( @param:DrawableRes val binRes: Int, ) -private val ArchiveDesignWidth = 402.dp -private val ArchiveHorizontalPadding = 48.dp -private val ArchiveTopPadding = 32.dp -private val ArchiveBottomPadding = 27.dp -private val ArchiveTitleTopPadding = 8.dp -private val ArchiveHorizontalSpacing = 40.dp -private val ArchiveVerticalSpacing = 11.dp -private val ArchiveCardWidth = 132.dp -private val ArchiveCardHeight = 172.dp -private val ArchiveTopBarStartPadding = 20.dp -private val ArchiveTopBarEndPadding = 8.dp -private const val ARCHIVE_COLUMN_COUNT = 2 +private const val GRID_COLUMN_COUNT = 2 + +private val TitleTopPadding = 8.dp +private val GridHorizontalPadding = 48.dp +private val GridTopPadding = 32.dp +private val GridBottomPadding = 27.dp +private val GridHorizontalSpacing = 40.dp +private val GridVerticalSpacing = 11.dp +private val CardWidth = 132.dp +private val CardHeight = 172.dp +private val TopBarStartPadding = 20.dp +private val TopBarEndPadding = 8.dp diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/DesignScale.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/DesignScale.kt new file mode 100644 index 00000000..d37247ee --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/DesignScale.kt @@ -0,0 +1,12 @@ +package com.gamss.android.feature.archive + +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +/** 보관함 시안 기준 화면 폭. */ +private val DesignWidth = 402.dp + +/** 시안보다 좁은 화면에서만 줄인다. 넓은 화면에서 늘리면 손그림 에셋이 뭉개진다. */ +internal fun designScale(availableWidth: Dp): Float = (availableWidth / DesignWidth).coerceAtMost(1f) + +internal fun designWidth(scale: Float): Dp = DesignWidth * scale diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt index 286b1cd7..998efc42 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt @@ -24,11 +24,11 @@ internal class PaperBody( } /** - * 원(circle) 충돌 근사 기반의 경량 2D 리지드바디 시뮬레이터. - * 카드가 중력으로 낙하하다 바닥/벽/서로에게 부딪혀 자연스럽게 쌓이는 연출용. + * 원 충돌 근사 기반의 경량 2D 리지드바디 시뮬레이터. 종이가 중력으로 떨어져 바닥·벽·서로에게 부딪혀 + * 쌓이는 연출용이다. * - * 위치/속도를 불변 Vec2 대신 [PaperBody]의 원시 Float 필드로 들고, resolvePair()의 로컬 계산도 - * Float 변수로 풀어 쓴다 — 카드 20여 개 기준 프레임당 수천 개씩 생기던 임시 객체 할당을 없애 GC 압박을 줄인다. + * 위치/속도를 불변 Vec2 가 아니라 [PaperBody] 의 Float 필드로 들고 계산도 Float 로 풀어 쓴다 — + * 카드 20여 개면 프레임당 임시 객체가 수천 개씩 생겨 GC 를 압박한다. */ internal class PaperPhysicsWorld( private val bodies: List, @@ -45,8 +45,8 @@ internal class PaperPhysicsWorld( body.velY *= LinearDamping val dampedAngularVelocity = (body.angularVelocity * AngularDamping) .coerceIn(-MaxAngularVelocity, MaxAngularVelocity) - // Snap near-zero spin to exactly zero, otherwise resting contacts keep re-injecting - // sub-threshold torque every frame and the pile never stops turning in place. + // 0 에 가까운 회전은 0 으로 끊는다. 안 그러면 쌓인 종이끼리 매 프레임 미세한 토크를 주고받아 + // 제자리에서 계속 돈다. body.angularVelocity = if (abs(dampedAngularVelocity) < AngularSleepThreshold) 0f else dampedAngularVelocity } bodies.forEach(::resolveBounds) @@ -128,8 +128,7 @@ internal class PaperPhysicsWorld( val tangentX = -ny val tangentY = nx val tangentSpeed = relVelX * tangentX + relVelY * tangentY - // Resting bodies keep re-touching under gravity every frame with tiny tangential noise; - // ignoring it below this speed stops the pile from spinning in place once it has landed. + // 다 쌓인 뒤에도 중력으로 매 프레임 서로 닿으며 미세한 접선 속도가 생긴다. 그 이하는 무시한다. if (abs(tangentSpeed) > RestingTangentSpeed) { val spinImpulse = tangentSpeed * PairSpinTransfer a.angularVelocity -= spinImpulse @@ -148,8 +147,7 @@ internal class PaperPhysicsWorld( const val Friction = 0.9f const val CollisionIterations = 4 - // Kept deliberately tiny: cards should mostly keep the tilt they spawned with and only - // wobble a little on impact, not visibly spin while falling or colliding. + // 일부러 아주 작게 둔다. 종이는 처음 기울기를 대체로 유지하고 부딪힐 때만 살짝 흔들려야 한다. const val PairSpinTransfer = 0.00012f const val WallSpinTransfer = 0.0001f const val FloorSpinTransfer = 0.0002f diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt new file mode 100644 index 00000000..ddf8436f --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt @@ -0,0 +1,94 @@ +package com.gamss.android.feature.archive.component + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.paint +import androidx.compose.ui.graphics.TransformOrigin +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.unit.dp +import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.feature.archive.R +import java.time.YearMonth +import java.time.format.DateTimeFormatter +import com.gamss.android.core.designsystem.R as DesignSystemR + +/** 보고 있는 달을 보여주고, 누르면 [YearMonthPickerSheet]를 여는 박스. */ +@Composable +internal fun MonthSelector( + yearMonth: YearMonth, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier + .padding( + start = SelectorHorizontalMargin, + end = SelectorHorizontalMargin, + top = SelectorTopMargin, + ) + .fillMaxWidth() + .height(SelectorHeight) + // 입력바와 같은 손그림 테두리 에셋을 재사용한다. + .paint(painterResource(DesignSystemR.drawable.bg_input_box), contentScale = ContentScale.FillBounds) + .clickable(role = Role.Button, onClick = onClick) + .padding(horizontal = SelectorContentPadding), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = yearMonth.format(YearMonthFormatter), + style = GamssTheme.typography.title4, + color = GamssTheme.colors.gray900, + ) + DownChevron(contentDescription = stringResource(R.string.archive_select_month_description)) + } +} + +/** + * 아래 셰브론 에셋이 없어 오른쪽 셰브론을 돌려 쓴다. + * + * 글리프가 뷰포트 오른쪽에 몰려 있어 박스 중심을 축으로 돌리면 그 가로 편차가 세로 어긋남이 된다. + * 회전축을 글리프 중심에 두고, 대신 박스를 넘어가는 잉크만큼 밀어 좌우 여백을 맞춘다. + */ +@Composable +private fun DownChevron(contentDescription: String?) { + Image( + painter = painterResource(DesignSystemR.drawable.ic_right_chevron), + contentDescription = contentDescription, + modifier = Modifier + .padding(end = ChevronInkOverflow) + .size(ChevronSize) + .graphicsLayer { + rotationZ = CHEVRON_ROTATION + transformOrigin = TransformOrigin(CHEVRON_CENTER_X, CHEVRON_CENTER_Y) + }, + ) +} + +private const val CHEVRON_ROTATION = 90f + +// ic_right_chevron 글리프의 중심. 24 뷰포트에서 stroke 포함 x 12.4~21.3, y 3.9~20.2 다. +private const val CHEVRON_CENTER_X = 16.85f / 24f +private const val CHEVRON_CENTER_Y = 12.03f / 24f + +private val YearMonthFormatter = DateTimeFormatter.ofPattern("yyyy.MM") +private val SelectorHorizontalMargin = 18.dp +private val SelectorTopMargin = 24.dp +private val SelectorHeight = 48.dp +private val SelectorContentPadding = 12.dp +private val ChevronSize = 18.dp +private val ChevronInkOverflow = 1.dp diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt new file mode 100644 index 00000000..e7869edd --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt @@ -0,0 +1,163 @@ +package com.gamss.android.feature.archive.component + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameNanos +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.gamss.android.domain.card.CardEntry +import com.gamss.android.feature.archive.PaperBody +import com.gamss.android.feature.archive.PaperPhysicsWorld +import com.gamss.android.feature.archive.R +import com.gamss.android.feature.archive.designScale +import com.gamss.android.feature.archive.designWidth +import com.gamss.android.feature.archive.toDegrees +import com.gamss.android.feature.archive.toRadians +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.isActive +import kotlin.random.Random + +/** 카드 한 장씩을 종이로 위에서 쏟아, 물리 시뮬레이션으로 바닥에 쌓는다. */ +@Composable +internal fun PaperPile(cards: List) { + BoxWithConstraints( + modifier = Modifier + .fillMaxSize() + .padding(top = PileTopPadding), + contentAlignment = Alignment.TopCenter, + ) { + val scale = designScale(maxWidth) + val density = LocalDensity.current + val boundsWidthPx = with(density) { designWidth(scale).toPx() } + val boundsHeightPx = with(density) { maxHeight.toPx() } + val paperSizePx = with(density) { (PaperSize * scale).toPx() } + val radiusPx = paperSizePx / 2f * PAPER_COLLISION_RADIUS_SCALE + + // 키에 화면 크기를 넣지 않는다. 회전 등으로 크기만 바뀌었을 때 이미 쌓인 종이가 다시 쏟아진다. + val uiStates = remember(cards) { cards.spawnStates(boundsWidthPx, radiusPx) } + + LaunchedEffect(cards) { + runPaperFall(uiStates, boundsWidthPx, boundsHeightPx, radiusPx) + } + + cards.forEachIndexed { index, card -> + val ui = uiStates.getOrNull(index) ?: return@forEachIndexed + Image( + painter = painterResource(R.drawable.archive_paper), + contentDescription = stringResource( + R.string.archive_paper_description, + card.date.monthValue, + card.date.dayOfMonth, + ), + modifier = Modifier + .align(Alignment.TopStart) + .size(PaperSize * scale) + .graphicsLayer { + translationX = ui.x - paperSizePx / 2f + translationY = ui.y - paperSizePx / 2f + rotationZ = ui.rotationDegrees + }, + ) + } + } +} + +@Stable +private class PaperUiState(x: Float, y: Float, rotationDegrees: Float) { + var x by mutableFloatStateOf(x) + var y by mutableFloatStateOf(y) + var rotationDegrees by mutableFloatStateOf(rotationDegrees) +} + +/** 화면 위쪽에 흩뿌린 시작 위치. 뒤 순번일수록 더 높이 두어 한꺼번에 떨어지지 않게 한다. */ +private fun List.spawnStates(boundsWidthPx: Float, radiusPx: Float): List = + List(size) { index -> + val spawnRange = (boundsWidthPx - radiusPx * 2f).coerceAtLeast(0f) + PaperUiState( + x = radiusPx + Random.nextFloat() * spawnRange, + y = -radiusPx - index * radiusPx * PAPER_SPAWN_STAGGER, + rotationDegrees = (Random.nextFloat() - 0.5f) * 2f * PAPER_MAX_TILT_DEGREES, + ) + } + +/** 매 프레임 물리를 갱신해 [uiStates]에 반영하고, 다 쌓이면 멈춘다. */ +private suspend fun CoroutineScope.runPaperFall( + uiStates: List, + boundsWidthPx: Float, + boundsHeightPx: Float, + radiusPx: Float, +) { + val bodies = uiStates.map { ui -> + PaperBody( + startX = ui.x, + startY = ui.y, + startAngle = ui.rotationDegrees.toRadians(), + radius = radiusPx, + startVelX = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_DRIFT, + startAngularVelocity = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_SPIN, + ) + } + val world = PaperPhysicsWorld(bodies, boundsWidth = boundsWidthPx, boundsHeight = boundsHeightPx) + + var lastFrameNanos = -1L + var startFrameNanos = -1L + var settledFrames = 0 + while (isActive) { + withFrameNanos { frameNanos -> + if (startFrameNanos < 0) startFrameNanos = frameNanos + val dt = frameNanos.deltaSeconds(lastFrameNanos) + lastFrameNanos = frameNanos + + world.step(dt) + bodies.forEachIndexed { index, body -> + uiStates[index].apply { + x = body.x + y = body.y + rotationDegrees = body.angle.toDegrees() + } + } + settledFrames = if (world.maxActivity() < PHYSICS_SETTLE_THRESHOLD) settledFrames + 1 else 0 + } + val settled = settledFrames >= PHYSICS_SETTLE_FRAMES + val timedOut = lastFrameNanos - startFrameNanos > PHYSICS_MAX_DURATION_NANOS + if (settled || timedOut) break + } +} + +/** 첫 프레임은 기준이 없어 한 프레임치로 두고, 프레임이 밀렸을 때는 위로 잘라 시뮬레이션이 튀지 않게 한다. */ +private fun Long.deltaSeconds(previousNanos: Long): Float = + if (previousNanos < 0) { + PHYSICS_FIXED_DT + } else { + ((this - previousNanos) / NANOS_PER_SECOND).coerceIn(0f, PHYSICS_MAX_DT) + } + +private const val NANOS_PER_SECOND = 1_000_000_000f +private const val PAPER_COLLISION_RADIUS_SCALE = 1.15f +private const val PAPER_MAX_TILT_DEGREES = 42f +private const val PAPER_SPAWN_STAGGER = 0.9f +private const val PAPER_SPAWN_DRIFT = 120f +private const val PAPER_SPAWN_SPIN = 0.15f +private const val PHYSICS_FIXED_DT = 1f / 60f +private const val PHYSICS_MAX_DT = 1f / 30f +private const val PHYSICS_SETTLE_THRESHOLD = 4f +private const val PHYSICS_SETTLE_FRAMES = 30 +private const val PHYSICS_MAX_DURATION_NANOS = 5_000_000_000L + +private val PileTopPadding = 136.dp +private val PaperSize = 88.dp diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt index b0e8e735..440518cf 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt @@ -35,6 +35,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.gamss.android.core.common.util.KoreanTimeZone import com.gamss.android.core.designsystem.component.GamssIconButton @@ -45,11 +46,10 @@ import java.time.YearMonth import kotlin.math.abs /** - * 연·월을 휠로 돌려 고르는 바텀시트. 휠을 돌리는 동안에는 아직 고르는 중이고, `선택하기` 를 눌러야 - * [onSelect] 로 확정된다. + * 연·월을 휠로 돌려 고르는 바텀시트. 휠을 돌리는 동안은 고르는 중이고 `선택하기` 를 눌러야 확정된다. * - * 연도는 [latest] 로 끝나는 최근 [YEAR_RANGE_SIZE] 년, 월은 12개월을 그대로 준다. 실제로 카드가 있는 - * 달만 남기려면 휠이 서로를 잘라내야 하는데, 그렇게까지 하지 않고 카드가 없는 달은 빈 상태로 답한다. + * 월은 12개월을 그대로 준다 — 카드가 있는 달만 남기려면 두 휠이 서로를 잘라내야 해서, 카드가 없는 + * 달은 빈 상태로 답하는 쪽을 택했다. */ @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -69,32 +69,11 @@ internal fun YearMonthPickerSheet( containerColor = GamssTheme.colors.white, shape = RoundedCornerShape(topStart = SheetCornerRadius, topEnd = SheetCornerRadius), dragHandle = null, - // 디자인의 아래 여백은 화면 맨 아래까지 재는 값이다. 시트가 인셋을 따로 예약하면 그만큼 더 - // 벌어지므로 예약하지 않고, 아래에서 직접 계산한다. + // 디자인 여백은 화면 맨 아래까지 재는 값이라, 시트가 인셋을 예약하면 그만큼 더 벌어진다. contentWindowInsets = { WindowInsets(0) }, ) { - // 제스처 바는 디자인의 홈 인디케이터처럼 여백 위에 겹쳐도 된다(24dp + 8dp = 디자인 32dp). - // 3버튼 내비처럼 인셋이 그보다 크면 여백이 남지 않아 버튼이 내비바에 붙으므로, 그때는 인셋 - // 위로 최소 간격만큼 띄운다. - val bottomPadding = SheetBottomPadding.coerceAtLeast( - WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() + MinGapAboveSystemBar, - ) - Column(modifier = Modifier.padding(bottom = bottomPadding)) { - Row( - modifier = Modifier - .fillMaxWidth() - // GamssIconButton 의 hitPadding 만큼 당겨, 아이콘 자체가 디자인 위치에 오게 한다. - .padding(top = SheetTopPadding - HitPadding, end = SheetHorizontalPadding - HitPadding), - horizontalArrangement = Arrangement.End, - ) { - GamssIconButton( - iconRes = GamssIcons.Close, - contentDescription = stringResource(R.string.archive_month_picker_close), - onClick = onDismiss, - hitPadding = HitPadding, - tint = GamssTheme.colors.gray400, - ) - } + Column(modifier = Modifier.padding(bottom = sheetBottomPadding())) { + CloseButton(onClick = onDismiss) YearMonthWheels( years = years, months = months, @@ -108,7 +87,36 @@ internal fun YearMonthPickerSheet( } } -/** 가운데 칸을 덮는 하이라이트는 두 휠에 걸친 한 덩어리라, 휠 뒤에 한 번만 깔고 가운데 정렬한다. */ +/** + * 제스처 바(24dp)는 디자인의 홈 인디케이터처럼 여백 위에 겹쳐도 된다. 3버튼 내비처럼 인셋이 디자인 + * 여백보다 크면 버튼이 내비바에 붙으므로, 그때는 인셋 위로 최소 간격만큼 띄운다. + */ +@Composable +private fun sheetBottomPadding(): Dp { + val systemBarInset = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() + return SheetBottomPadding.coerceAtLeast(systemBarInset + MinGapAboveSystemBar) +} + +@Composable +private fun CloseButton(onClick: () -> Unit) { + Row( + modifier = Modifier + .fillMaxWidth() + // hitPadding 만큼 당겨, 아이콘 자체가 디자인 위치에 오게 한다. + .padding(top = SheetTopPadding - HitPadding, end = SheetHorizontalPadding - HitPadding), + horizontalArrangement = Arrangement.End, + ) { + GamssIconButton( + iconRes = GamssIcons.Close, + contentDescription = stringResource(R.string.archive_month_picker_close), + onClick = onClick, + hitPadding = HitPadding, + tint = GamssTheme.colors.gray400, + ) + } +} + +/** 가운데 칸 하이라이트는 두 휠에 걸친 한 덩어리라, 휠 뒤에 한 번만 깔고 가운데 정렬한다. */ @Composable private fun YearMonthWheels( years: List, @@ -123,8 +131,7 @@ private fun YearMonthWheels( .padding( start = SheetHorizontalPadding, end = SheetHorizontalPadding, - // 위 Row 는 아이콘 아래에도 hitPadding 을 물고 있다. 디자인 간격은 아이콘 자체에서 - // 재는 값이라 그만큼 빼야 24dp 가 된다. + // 위 Row 가 아이콘 아래에도 hitPadding 을 물고 있어 그만큼 뺀다. top = WheelTopGap - HitPadding, ) .fillMaxWidth(), diff --git a/feature/calendar/src/main/res/values/strings.xml b/feature/calendar/src/main/res/values/strings.xml index e7740dd6..a57643c7 100644 --- a/feature/calendar/src/main/res/values/strings.xml +++ b/feature/calendar/src/main/res/values/strings.xml @@ -1,6 +1,8 @@ 감쓰 + 다시 보고 싶은 쓰레기통을 열어보세요 + 설정 뒤로 가기 %1$s 쓰레기통 아직 남겨둔 이야기가 없어요. From b8bf6b01da8e067f1c8125e97d5ee0f3b8cd7c11 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 21:40:46 +0900 Subject: [PATCH 23/34] =?UTF-8?q?feat:=20=EB=B9=84=EC=9A=B0=EA=B8=B0?= =?UTF-8?q?=EC=97=90=20=ED=99=95=EC=9D=B8=20=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 되돌릴 수 없는 삭제인데 표시만 하고 있었다. 누르면 확인을 한 번 받는다. 다이얼로그는 develop 의 GamssDialog 를 그대로 쓴다. GamssDialogAction 으로 액션만 받는 구조라 무엇을 지울지는 호출하는 화면이 정하고, Destructive/Secondary 변형이 디자인의 빨간 비우기·회색 취소와 그대로 맞는다. 삭제 API 가 아직 없어 확인은 지금 닫기만 한다. 호출부는 onClearConfirm 으로 열어 뒀다. 문구는 디자인을 그대로 옮겼는데, 감정별 화면에 있는 버튼인데도 "대화 전체"라고 말하고 있어 삭제 범위가 정해지면 문구도 같이 손봐야 한다. --- .../feature/archive/ArchiveDetailScreen.kt | 66 ++++++++++++++++++- .../feature/archive/ArchiveDetailState.kt | 1 + .../feature/archive/ArchiveDetailViewModel.kt | 8 +++ .../calendar/src/main/res/values/strings.xml | 3 + 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index 33ce7b62..e0015736 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -1,11 +1,13 @@ package com.gamss.android.feature.archive import androidx.annotation.StringRes +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -14,12 +16,17 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import com.gamss.android.core.designsystem.button.GamssButtonVariant import com.gamss.android.core.designsystem.component.GamssIconButton import com.gamss.android.core.designsystem.component.GamssTopBar +import com.gamss.android.core.designsystem.dialog.GamssDialog +import com.gamss.android.core.designsystem.dialog.GamssDialogAction import com.gamss.android.core.designsystem.theme.GamssTheme import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter @@ -52,6 +59,10 @@ fun ArchiveDetailScreen( onMonthClick = viewModel::showMonthPicker, onMonthSelect = viewModel::selectMonth, onMonthPickerDismiss = viewModel::dismissMonthPicker, + onClearClick = viewModel::showClearDialog, + // 삭제 API 가 붙기 전이라 확인도 닫기만 한다. + onClearConfirm = viewModel::dismissClearDialog, + onClearDismiss = viewModel::dismissClearDialog, ) } @@ -63,10 +74,19 @@ private fun ArchiveDetailFrame( onMonthClick: () -> Unit, onMonthSelect: (YearMonth) -> Unit, onMonthPickerDismiss: () -> Unit, + onClearClick: () -> Unit, + onClearConfirm: () -> Unit, + onClearDismiss: () -> Unit, ) { Scaffold( containerColor = GamssTheme.colors.white, - topBar = { ArchiveDetailTopBar(emotion = emotion, onBackClick = onBackClick) }, + topBar = { + ArchiveDetailTopBar( + emotion = emotion, + onBackClick = onBackClick, + onClearClick = onClearClick, + ) + }, ) { innerPadding -> Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) { MonthSelector( @@ -85,15 +105,47 @@ private fun ArchiveDetailFrame( onDismiss = onMonthPickerDismiss, ) } + + if (state.isClearDialogVisible) { + ClearConfirmDialog(onConfirm = onClearConfirm, onDismiss = onClearDismiss) + } +} + +/** 되돌릴 수 없는 삭제라 확인을 한 번 받는다. 무엇을 지울지는 [onConfirm] 을 넘기는 쪽이 정한다. */ +@Composable +private fun ClearConfirmDialog( + onConfirm: () -> Unit, + onDismiss: () -> Unit, +) { + GamssDialog( + title = stringResource(R.string.archive_clear_dialog_title), + subtitle = stringResource(R.string.archive_clear_dialog_description), + primaryAction = GamssDialogAction( + label = stringResource(R.string.archive_clear), + onClick = onConfirm, + variant = GamssButtonVariant.Destructive, + ), + secondaryAction = GamssDialogAction( + label = stringResource(R.string.archive_clear_dialog_cancel), + onClick = onDismiss, + variant = GamssButtonVariant.Secondary, + ), + onDismissRequest = onDismiss, + ) } @Composable private fun ArchiveDetailTopBar( emotion: EmotionCharacter, onBackClick: () -> Unit, + onClearClick: () -> Unit, ) { GamssTopBar( - contentPadding = PaddingValues(horizontal = TopBarHorizontalPadding), + // 비우기는 터치 영역만큼 안쪽 여백을 물고 있어, 오른쪽은 그만큼 뺀다. + contentPadding = PaddingValues( + start = TopBarHorizontalPadding, + end = TopBarHorizontalPadding - ClearHitPadding, + ), leading = { Row(verticalAlignment = Alignment.CenterVertically) { GamssIconButton( @@ -111,11 +163,14 @@ private fun ArchiveDetailTopBar( } }, trailing = { - // 확인 다이얼로그가 준비되기 전에는 표시만 한다. 실제 카드/대화를 지우는 동작이다. Text( text = stringResource(R.string.archive_clear), style = GamssTheme.typography.body4Medium, color = GamssTheme.colors.gray900, + modifier = Modifier + .clip(RoundedCornerShape(ClearRippleRadius)) + .clickable(role = Role.Button, onClick = onClearClick) + .padding(ClearHitPadding), ) }, ) @@ -145,6 +200,8 @@ private fun EmptyMessage(@StringRes textRes: Int) { private val TopBarHorizontalPadding = 18.dp private val BackHitPadding = 0.dp private val TitleStartPadding = 12.dp +private val ClearHitPadding = 8.dp +private val ClearRippleRadius = 8.dp @Preview(showBackground = true, widthDp = 402, heightDp = 874) @Composable @@ -163,6 +220,9 @@ private fun ArchiveDetailPaperPilePreview() { onMonthClick = {}, onMonthSelect = {}, onMonthPickerDismiss = {}, + onClearClick = {}, + onClearConfirm = {}, + onClearDismiss = {}, ) } } diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt index 693b4c96..7d5b29d8 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt @@ -11,4 +11,5 @@ data class ArchiveDetailState( val cards: List = emptyList(), val loadFailed: Boolean = false, val isMonthPickerVisible: Boolean = false, + val isClearDialogVisible: Boolean = false, ) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index 40101ff5..75f0410b 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -37,6 +37,14 @@ class ArchiveDetailViewModel @Inject constructor( reduce { state.copy(isMonthPickerVisible = false) } } + fun showClearDialog() = intent { + reduce { state.copy(isClearDialogVisible = true) } + } + + fun dismissClearDialog() = intent { + reduce { state.copy(isClearDialogVisible = false) } + } + fun selectMonth(yearMonth: YearMonth) = intent { val emotion = state.emotion // 보고 있는 달을 다시 고르면 이미 쌓인 종이를 다시 쏟지 않고 시트만 닫는다. diff --git a/feature/calendar/src/main/res/values/strings.xml b/feature/calendar/src/main/res/values/strings.xml index a57643c7..b93122eb 100644 --- a/feature/calendar/src/main/res/values/strings.xml +++ b/feature/calendar/src/main/res/values/strings.xml @@ -9,6 +9,9 @@ 이야기를 불러오지 못했어요. %1$s 쓰레기통 열기 비우기 + 대화 전체 비우기 + 모든 대화 기록이 삭제돼요. 삭제한 내용은 다시 복구할 수 없어요. + 취소 월 선택 월 선택 닫기 선택하기 From c3f07329d83be1fc67888c9fe4ed548ae4143055 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 22:10:38 +0900 Subject: [PATCH 24/34] =?UTF-8?q?revert:=20=ED=83=AD=EB=B0=94=20=EC=A0=91?= =?UTF-8?q?=ED=9E=98=20=EC=95=A0=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 하위 화면 진입 시 탭바를 AnimatedVisibility 로 접었는데(c3140d0), develop 의 화면전환 애니메이션이 들어온 뒤로는 화면 슬라이드와 겹쳐 필요하지 않다. develop 과 같은 조건부 렌더로 되돌린다. 같은 커밋에 있던 contentWindowInsets = WindowInsets(0) 은 남긴다. GamssBottomBar 가 navigationBarsPadding 을 직접 물고 있어 Scaffold 기본 인셋과 겹치던 별개 수정이다. --- .../kotlin/com/gamss/android/app/main/MainScreen.kt | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index 0a2a78b8..3bc24d37 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -3,13 +3,10 @@ package com.gamss.android.app.main import androidx.activity.compose.LocalActivity import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.AnimatedContentTransitionScope.SlideDirection -import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.ContentTransform import androidx.compose.animation.core.tween -import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut -import androidx.compose.animation.shrinkVertically import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.padding @@ -85,13 +82,7 @@ fun MainScreen( // Scaffold 기본 인셋까지 함께 적용하면 이중으로 여백이 생긴다. contentWindowInsets = WindowInsets(0), bottomBar = { - // 하위 화면으로 이동할 때 탭바가 애니메이션 없이 바로 사라지면, 그 자리만큼 - // 콘텐츠 영역이 갑자기 넓어져 화면이 커지는 것처럼 보인다. 접히는 애니메이션으로 완충한다. - AnimatedVisibility( - visible = navigationState.currentKey == navigationState.currentTopLevelKey, - enter = fadeIn() + expandVertically(), - exit = fadeOut() + shrinkVertically(), - ) { + if (navigationState.currentKey == navigationState.currentTopLevelKey) { GamssBottomBar( items = destinations.bottomBarItems(), selectedValue = navigationState.currentTopLevelKey, From b950284e7b470f123c2c0ba4a2af3dff6a8c1e17 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 22:23:39 +0900 Subject: [PATCH 25/34] =?UTF-8?q?refactor:=20CardQueryRepository/CardWrite?= =?UTF-8?q?Repository=20=EB=A5=BC=20CardRepository=20=ED=95=98=EB=82=98?= =?UTF-8?q?=EB=A1=9C=20=EB=90=98=EB=8F=8C=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 조회/쓰기로 나눈 값이 이름 변경으로 무관한 파일들의 import 까지 건드리는 것에 비해 크지 않았다(bb64566). 인터페이스 하나로 합치고 @Binds 도 하나로 줄인다. 대신 쓰기만 쓰던 fake(홈·채팅·대화 세션)는 조회 두 개를, 조회만 쓰던 fake(보관함·조회 유스케이스)는 createCard 를 각각 error() 로 막아 둔다. 어느 테스트에서 안 쓰는 메서드인지는 메시지로 남긴다. --- .../com/gamss/android/data/di/RepositoryModule.kt | 12 +++--------- .../android/data/repository/CardRepositoryImpl.kt | 5 ++--- .../{CardQueryRepository.kt => CardRepository.kt} | 10 +++++++++- .../android/domain/card/CardWriteRepository.kt | 14 -------------- .../android/domain/card/CreateCardUseCase.kt | 2 +- .../android/domain/card/GetCardsByDateUseCase.kt | 2 +- .../android/domain/card/GetCardsByMonthUseCase.kt | 2 +- .../android/domain/card/CreateCardUseCaseTest.kt | 10 +++++++++- .../domain/card/GetCardsByDateUseCaseTest.kt | 8 +++++++- .../domain/card/GetCardsByMonthUseCaseTest.kt | 8 +++++++- .../conversation/ConversationSessionTest.kt | 13 +++++++++++-- .../feature/archive/ArchiveDetailViewModelTest.kt | 10 ++++++++-- .../android/feature/chat/ChatRoomTestFakes.kt | 15 ++++++++++++--- .../gamss/android/feature/home/HomeTestFakes.kt | 13 +++++++++++-- 14 files changed, 82 insertions(+), 42 deletions(-) rename domain/src/main/kotlin/com/gamss/android/domain/card/{CardQueryRepository.kt => CardRepository.kt} (60%) delete mode 100644 domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt diff --git a/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt b/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt index 19f29202..bf55a659 100644 --- a/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt +++ b/data/src/main/java/com/gamss/android/data/di/RepositoryModule.kt @@ -12,8 +12,7 @@ import com.gamss.android.data.repository.ConversationRepositoryImpl import com.gamss.android.data.repository.TokenUsageRefreshNotifierImpl import com.gamss.android.data.repository.UserRepositoryImpl import com.gamss.android.domain.auth.AuthRepository -import com.gamss.android.domain.card.CardQueryRepository -import com.gamss.android.domain.card.CardWriteRepository +import com.gamss.android.domain.card.CardRepository import com.gamss.android.domain.conversation.ConversationRepository import com.gamss.android.domain.repository.TokenUsageRefreshNotifier import com.gamss.android.domain.user.UserRepository @@ -51,14 +50,9 @@ internal abstract class RepositoryModule { ): ConversationRepository @Binds - abstract fun bindCardQueryRepository( + abstract fun bindCardRepository( cardRepositoryImpl: CardRepositoryImpl - ): CardQueryRepository - - @Binds - abstract fun bindCardWriteRepository( - cardRepositoryImpl: CardRepositoryImpl - ): CardWriteRepository + ): CardRepository @Binds abstract fun bindTokenUsageRefreshNotifier( diff --git a/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt b/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt index b957d105..17d87756 100644 --- a/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt +++ b/data/src/main/java/com/gamss/android/data/repository/CardRepositoryImpl.kt @@ -11,8 +11,7 @@ import com.gamss.android.data.remote.throwIfFailed import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.card.CardNotRetryableException -import com.gamss.android.domain.card.CardQueryRepository -import com.gamss.android.domain.card.CardWriteRepository +import com.gamss.android.domain.card.CardRepository import com.gamss.android.domain.emotion.EmotionCharacter import java.time.LocalDate import java.time.YearMonth @@ -22,7 +21,7 @@ import javax.inject.Singleton @Singleton internal class CardRepositoryImpl @Inject constructor( private val cardService: CardService, -) : CardQueryRepository, CardWriteRepository { +) : CardRepository { override suspend fun getCardsByDate(date: LocalDate): AppResult> = runCatchingApiCall { val response = cardService.getCardsByDate(date.toString()) diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardRepository.kt similarity index 60% rename from domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt rename to domain/src/main/kotlin/com/gamss/android/domain/card/CardRepository.kt index e33c5d06..55316efd 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CardQueryRepository.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CardRepository.kt @@ -1,14 +1,22 @@ package com.gamss.android.domain.card import com.gamss.android.core.common.AppResult +import com.gamss.android.domain.emotion.EmotionCharacter import java.time.LocalDate import java.time.YearMonth -interface CardQueryRepository { +interface CardRepository { /** 해당 날짜(KST)에 생성된 카드 목록을 가져온다. */ suspend fun getCardsByDate(date: LocalDate): AppResult> /** 해당 달(KST)에 생성된 카드를 요약 없이 날짜·순번·감정만 가져온다. */ suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> + + /** 종료된 채팅방에만 만들 수 있고 방당 한 번만 성공한다. */ + suspend fun createCard( + conversationId: Long, + character: EmotionCharacter, + summary: String, + ): AppResult } diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt deleted file mode 100644 index 97c53554..00000000 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CardWriteRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.gamss.android.domain.card - -import com.gamss.android.core.common.AppResult -import com.gamss.android.domain.emotion.EmotionCharacter - -interface CardWriteRepository { - - /** 종료된 채팅방에만 만들 수 있고 방당 한 번만 성공한다. */ - suspend fun createCard( - conversationId: Long, - character: EmotionCharacter, - summary: String, - ): AppResult -} diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt index eb5a461b..95ea3970 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/CreateCardUseCase.kt @@ -9,7 +9,7 @@ import javax.inject.Inject const val MAX_CARD_SUMMARY_LENGTH = 1000 class CreateCardUseCase @Inject constructor( - private val cardRepository: CardWriteRepository, + private val cardRepository: CardRepository, ) : UseCase> { data class Params( diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt index 26dd115c..cffa8cf8 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCase.kt @@ -6,7 +6,7 @@ import java.time.LocalDate import javax.inject.Inject class GetCardsByDateUseCase @Inject constructor( - private val cardRepository: CardQueryRepository, + private val cardRepository: CardRepository, ) : UseCase>> { override suspend fun invoke(params: LocalDate): AppResult> = diff --git a/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt index 188a44ed..f21109e4 100644 --- a/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt +++ b/domain/src/main/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCase.kt @@ -6,7 +6,7 @@ import java.time.YearMonth import javax.inject.Inject class GetCardsByMonthUseCase @Inject constructor( - private val cardRepository: CardQueryRepository, + private val cardRepository: CardRepository, ) : UseCase>> { override suspend fun invoke(params: YearMonth): AppResult> = diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt index 04ccde98..33c6c3f4 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/CreateCardUseCaseTest.kt @@ -6,13 +6,21 @@ import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test +import java.time.LocalDate +import java.time.YearMonth class CreateCardUseCaseTest { - private class RecordingRepository : CardWriteRepository { + private class RecordingRepository : CardRepository { var sentSummary: String? = null private set + override suspend fun getCardsByDate(date: LocalDate): AppResult> = + error("카드 생성 테스트에서 쓰지 않는다") + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = + error("카드 생성 테스트에서 쓰지 않는다") + override suspend fun createCard( conversationId: Long, character: EmotionCharacter, diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt index 8790aa53..25153490 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByDateUseCaseTest.kt @@ -27,7 +27,7 @@ class GetCardsByDateUseCaseTest { private class RecordingRepository( private val result: AppResult>, - ) : CardQueryRepository { + ) : CardRepository { var requestedDate: LocalDate? = null private set @@ -38,5 +38,11 @@ class GetCardsByDateUseCaseTest { override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = AppResult.Success(emptyList()) + + override suspend fun createCard( + conversationId: Long, + character: EmotionCharacter, + summary: String, + ): AppResult = error("날짜 조회 테스트에서 쓰지 않는다") } } diff --git a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt index 6b4b57db..1eb51834 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/card/GetCardsByMonthUseCaseTest.kt @@ -27,7 +27,7 @@ class GetCardsByMonthUseCaseTest { private class RecordingRepository( private val result: AppResult>, - ) : CardQueryRepository { + ) : CardRepository { var requestedMonth: YearMonth? = null private set @@ -38,5 +38,11 @@ class GetCardsByMonthUseCaseTest { requestedMonth = yearMonth return result } + + override suspend fun createCard( + conversationId: Long, + character: EmotionCharacter, + summary: String, + ): AppResult = error("월 조회 테스트에서 쓰지 않는다") } } diff --git a/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt b/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt index 98e93872..85fa9851 100644 --- a/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt +++ b/domain/src/test/kotlin/com/gamss/android/domain/conversation/ConversationSessionTest.kt @@ -3,7 +3,8 @@ package com.gamss.android.domain.conversation import androidx.paging.PagingData import com.gamss.android.core.common.AppResult import com.gamss.android.domain.card.Card -import com.gamss.android.domain.card.CardWriteRepository +import com.gamss.android.domain.card.CardEntry +import com.gamss.android.domain.card.CardRepository import com.gamss.android.domain.card.CreateCardUseCase import com.gamss.android.domain.card.CreateConversationCardUseCase import com.gamss.android.domain.conversation.chattingsearch.ChattingRoomSummary @@ -24,6 +25,8 @@ import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test +import java.time.LocalDate +import java.time.YearMonth class ConversationSessionTest { @@ -287,7 +290,13 @@ class ConversationSessionTest { } } - private object NoOpCardRepository : CardWriteRepository { + private object NoOpCardRepository : CardRepository { + override suspend fun getCardsByDate(date: LocalDate): AppResult> = + error("대화 세션 테스트에서 쓰지 않는다") + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = + error("대화 세션 테스트에서 쓰지 않는다") + override suspend fun createCard( conversationId: Long, character: EmotionCharacter, diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt index 7c39a86c..6ae5bf3f 100644 --- a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt +++ b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -4,7 +4,7 @@ import com.gamss.android.core.common.AppResult import com.gamss.android.core.common.util.KoreanTimeZone import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardEntry -import com.gamss.android.domain.card.CardQueryRepository +import com.gamss.android.domain.card.CardRepository import com.gamss.android.domain.card.GetCardsByMonthUseCase import com.gamss.android.domain.emotion.EmotionCharacter import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -125,7 +125,7 @@ class ArchiveDetailViewModelTest { private class FakeCardRepository( private val entriesResult: AppResult>, -) : CardQueryRepository { +) : CardRepository { val requestedMonths = mutableListOf() @@ -136,4 +136,10 @@ private class FakeCardRepository( requestedMonths += yearMonth return entriesResult } + + override suspend fun createCard( + conversationId: Long, + character: EmotionCharacter, + summary: String, + ): AppResult = error("보관함 테스트에서 쓰지 않는다") } diff --git a/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt b/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt index 67a922e6..40db1a70 100644 --- a/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt +++ b/feature/chat/src/test/java/com/gamss/android/feature/chat/ChatRoomTestFakes.kt @@ -3,7 +3,8 @@ package com.gamss.android.feature.chat import androidx.paging.PagingData import com.gamss.android.core.common.AppResult import com.gamss.android.domain.card.Card -import com.gamss.android.domain.card.CardWriteRepository +import com.gamss.android.domain.card.CardEntry +import com.gamss.android.domain.card.CardRepository import com.gamss.android.domain.card.CreateCardUseCase import com.gamss.android.domain.card.CreateConversationCardUseCase import com.gamss.android.domain.config.GetRemoteConfigFlagUseCase @@ -40,6 +41,8 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.emptyFlow +import java.time.LocalDate +import java.time.YearMonth /** * 채팅 ViewModel 조립을 한 곳에 둔다. 테스트마다 따로 조립하면 세션 구성이 갈라진다. @@ -49,7 +52,7 @@ import kotlinx.coroutines.flow.emptyFlow @Suppress("LongParameterList") internal fun chatRoomViewModel( conversationRepository: ConversationRepository = FakeConversationRepository(), - cardRepository: CardWriteRepository = CountingCardRepository(), + cardRepository: CardRepository = CountingCardRepository(), summarizer: DiarySummarizer = PassThroughSummarizer, classifier: EmotionClassifier = FlatClassifier, tokenUsageRefreshNotifier: TokenUsageRefreshNotifier = RecordingTokenUsageRefreshNotifier(), @@ -205,10 +208,16 @@ internal class FakeConversationRepository( internal class CountingCardRepository( private val gate: CompletableDeferred? = null, private val failure: Throwable? = null, -) : CardWriteRepository { +) : CardRepository { var calls = 0 private set + override suspend fun getCardsByDate(date: LocalDate): AppResult> = + error("채팅 테스트에서 쓰지 않는다") + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = + error("채팅 테스트에서 쓰지 않는다") + override suspend fun createCard( conversationId: Long, character: EmotionCharacter, diff --git a/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt b/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt index 0d817608..54c10758 100644 --- a/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt +++ b/feature/home/src/test/java/com/gamss/android/feature/home/HomeTestFakes.kt @@ -3,7 +3,8 @@ package com.gamss.android.feature.home import androidx.paging.PagingData import com.gamss.android.core.common.AppResult import com.gamss.android.domain.card.Card -import com.gamss.android.domain.card.CardWriteRepository +import com.gamss.android.domain.card.CardEntry +import com.gamss.android.domain.card.CardRepository import com.gamss.android.domain.card.CreateCardUseCase import com.gamss.android.domain.card.CreateConversationCardUseCase import com.gamss.android.domain.conversation.CommentGenerationStatus @@ -30,6 +31,8 @@ import com.gamss.android.domain.summary.SummarizeDiaryUseCase import com.gamss.android.domain.summary.UtteranceTokenCounter import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.flow.Flow +import java.time.LocalDate +import java.time.YearMonth internal const val NEW_ROOM_ID = 42L @@ -118,7 +121,13 @@ internal class RecordingConversationRepository( error("홈 테스트에서 쓰지 않는다") } -private object NoCardRepository : CardWriteRepository { +private object NoCardRepository : CardRepository { + override suspend fun getCardsByDate(date: LocalDate): AppResult> = + error("홈 테스트에서 쓰지 않는다") + + override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> = + error("홈 테스트에서 쓰지 않는다") + override suspend fun createCard( conversationId: Long, character: EmotionCharacter, From 82f049f828d7672c339564a41390e1d83cf4212b Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 23:00:23 +0900 Subject: [PATCH 26/34] =?UTF-8?q?fix:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EB=93=9C=EA=B0=80=20=EC=98=A4=EB=A5=B8?= =?UTF-8?q?=EC=AA=BD=EC=9C=BC=EB=A1=9C=202dp=20=EC=B9=98=EC=9A=B0=EC=B9=98?= =?UTF-8?q?=EB=8D=98=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 카드 두 장과 간격을 합쳐도 가용 폭보다 2dp 모자란데(디자인 수치도 402-96 안에 132*2+40), Arrangement.spacedBy 가 기본 start 정렬이라 남는 여분이 전부 오른쪽에 쏠렸다. 여분을 좌우로 나눠 실제로 가운데 오게 한다. 실기기 실측으로 좌우 49.3/51.4dp 에서 50.4/50.4dp 가 됐다. 세로는 그대로 둔다. 타이틀과 그리드를 묶은 그룹이 중앙에 오는 게 의도한 배치다. --- .../com/gamss/android/feature/archive/ArchiveScreen.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt index e76bf02e..646ef93d 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt @@ -95,7 +95,12 @@ private fun ArchiveGrid( archiveItems.chunked(GRID_COLUMN_COUNT).forEach { rowItems -> Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(GridHorizontalSpacing * scale), + // 카드 두 장과 간격을 합쳐도 가용 폭보다 2dp 모자란다(디자인도 그렇다). 그 여분을 + // 한쪽에 몰지 않고 좌우로 나눠야 그리드가 실제로 가운데 온다. + horizontalArrangement = Arrangement.spacedBy( + space = GridHorizontalSpacing * scale, + alignment = Alignment.CenterHorizontally, + ), ) { rowItems.forEach { item -> ArchiveCard(item = item, scale = scale, onClick = { onArchiveClick(item.emotion) }) From 61034a9427f38b1ce02b3d2d6e4a0c6d7b43140d Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Mon, 17 Aug 2026 23:49:06 +0900 Subject: [PATCH 27/34] =?UTF-8?q?feat:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EC=A2=85=EC=9D=B4=EB=A5=BC=20=EB=88=84=EB=A5=B4=EB=A9=B4=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=83=81=EC=84=B8=EB=A5=BC=20=EB=9D=84?= =?UTF-8?q?=EC=9A=B4=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 월별 응답에는 카드 식별자가 없어 종이는 날짜와 그날 순번만 들고 있다. 눌린 종이의 날짜로 날짜별 조회를 한 번 더 해서 그 순번의 카드를 집는다 — 여기서 요약·대사와 id 가 손에 들어오고, 버리기·대화보기가 그 id 로 이어진다. 상세 팝업은 develop 이 캘린더에 만든 CardDetailDialog 를 그대로 부른다. 버리기는 DeleteCardUseCase, 대화보기는 OpenChatRoom 사이드이펙트로 MainScreen 이 채팅방을 열고, 공유는 develop 의 CalendarScreen 에 있던 Intent 흐름을 옮겼다. 버린 뒤에는 그 달을 다시 받아 온다. 목록에서만 빼면 같은 날짜 뒤 순번이 한 칸씩 당겨져 남은 종이가 다른 카드를 가리킨다. --- .../com/gamss/android/app/main/MainScreen.kt | 6 +- .../feature/archive/ArchiveDetailScreen.kt | 67 +++++++- .../archive/ArchiveDetailSideEffect.kt | 7 + .../feature/archive/ArchiveDetailState.kt | 4 + .../feature/archive/ArchiveDetailViewModel.kt | 78 +++++++-- .../feature/archive/component/PaperPile.kt | 11 +- .../archive/ArchiveDetailViewModelTest.kt | 149 +++++++++++++++--- 7 files changed, 282 insertions(+), 40 deletions(-) create mode 100644 feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index 385ca076..8681ecb1 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -130,7 +130,11 @@ private fun mainEntryProvider(navigator: Navigator) = entryProvider { } // 보관함 상세도 탭 안쪽의 상세 화면이라 다른 상세들과 같은 슬라이드를 쓴다. entry(metadata = detailSlideTransition) { key -> - ArchiveDetailScreen(emotion = key.emotion, onBackClick = navigator::goBack) + ArchiveDetailScreen( + emotion = key.emotion, + onBackClick = navigator::goBack, + onOpenConversation = { conversationId -> navigator.navigate(ChatRoomKey(conversationId)) }, + ) } entry(metadata = detailSlideTransition) { SettingScreen( diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index e0015736..c8fd566e 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -1,5 +1,8 @@ package com.gamss.android.feature.archive +import android.content.Context +import android.content.Intent +import android.widget.Toast import androidx.annotation.StringRes import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -17,6 +20,7 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment 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.semantics.Role import androidx.compose.ui.tooling.preview.Preview @@ -28,12 +32,15 @@ import com.gamss.android.core.designsystem.component.GamssTopBar import com.gamss.android.core.designsystem.dialog.GamssDialog import com.gamss.android.core.designsystem.dialog.GamssDialogAction import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter import com.gamss.android.feature.archive.component.MonthSelector import com.gamss.android.feature.archive.component.PaperPile import com.gamss.android.feature.archive.component.YearMonthPickerSheet +import com.gamss.android.feature.calendar.component.CardDetailDialog import org.orbitmvi.orbit.compose.collectAsState +import org.orbitmvi.orbit.compose.collectSideEffect import java.time.LocalDate import java.time.YearMonth import com.gamss.android.core.designsystem.R as DesignSystemR @@ -46,21 +53,42 @@ import com.gamss.android.core.designsystem.R as DesignSystemR fun ArchiveDetailScreen( emotion: EmotionCharacter, onBackClick: () -> Unit, + onOpenConversation: (Long) -> Unit, viewModel: ArchiveDetailViewModel = hiltViewModel(), ) { val state by viewModel.collectAsState() + val context = LocalContext.current + val shareChooserTitle = stringResource(R.string.calendar_card_share_chooser_title) + val cardLoadFailedMessage = stringResource(R.string.calendar_card_load_error) + val discardFailedMessage = stringResource(R.string.calendar_card_discard_failure) LaunchedEffect(emotion) { viewModel.load(emotion) } + viewModel.collectSideEffect { sideEffect -> + when (sideEffect) { + is ArchiveDetailSideEffect.OpenChatRoom -> onOpenConversation(sideEffect.conversationId) + ArchiveDetailSideEffect.CardLoadFailed -> + Toast.makeText(context, cardLoadFailedMessage, Toast.LENGTH_SHORT).show() + + ArchiveDetailSideEffect.CardDiscardFailed -> + Toast.makeText(context, discardFailedMessage, Toast.LENGTH_SHORT).show() + } + } + ArchiveDetailFrame( emotion = emotion, state = state, onBackClick = onBackClick, + onPaperClick = viewModel::selectCard, + onCardDismiss = viewModel::dismissCard, + onCardDiscard = viewModel::discardSelectedCard, + onCardConversationClick = viewModel::viewSelectedConversation, + onCardShare = { card -> shareCard(context, card, shareChooserTitle) }, onMonthClick = viewModel::showMonthPicker, onMonthSelect = viewModel::selectMonth, onMonthPickerDismiss = viewModel::dismissMonthPicker, onClearClick = viewModel::showClearDialog, - // 삭제 API 가 붙기 전이라 확인도 닫기만 한다. + // 무엇을 비울지(감정별·달별·전체) 정해지기 전이라 확인도 닫기만 한다. onClearConfirm = viewModel::dismissClearDialog, onClearDismiss = viewModel::dismissClearDialog, ) @@ -71,6 +99,11 @@ private fun ArchiveDetailFrame( emotion: EmotionCharacter, state: ArchiveDetailState, onBackClick: () -> Unit, + onPaperClick: (CardEntry) -> Unit, + onCardDismiss: () -> Unit, + onCardDiscard: () -> Unit, + onCardConversationClick: () -> Unit, + onCardShare: (Card) -> Unit, onMonthClick: () -> Unit, onMonthSelect: (YearMonth) -> Unit, onMonthPickerDismiss: () -> Unit, @@ -94,7 +127,7 @@ private fun ArchiveDetailFrame( onClick = onMonthClick, modifier = Modifier.align(Alignment.TopCenter), ) - ArchiveDetailCards(state = state) + ArchiveDetailCards(state = state, onPaperClick = onPaperClick) } } @@ -109,6 +142,24 @@ private fun ArchiveDetailFrame( if (state.isClearDialogVisible) { ClearConfirmDialog(onConfirm = onClearConfirm, onDismiss = onClearDismiss) } + + state.selectedCard?.let { card -> + CardDetailDialog( + card = card, + onDismiss = onCardDismiss, + onDiscardClick = onCardDiscard, + onViewConversationClick = onCardConversationClick, + onShareClick = { onCardShare(card) }, + ) + } +} + +private fun shareCard(context: Context, card: Card, chooserTitle: String) { + val sendIntent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, "${card.summary}\n\n${card.message}") + } + context.startActivity(Intent.createChooser(sendIntent, chooserTitle)) } /** 되돌릴 수 없는 삭제라 확인을 한 번 받는다. 무엇을 지울지는 [onConfirm] 을 넘기는 쪽이 정한다. */ @@ -177,13 +228,16 @@ private fun ArchiveDetailTopBar( } @Composable -private fun ArchiveDetailCards(state: ArchiveDetailState) { +private fun ArchiveDetailCards( + state: ArchiveDetailState, + onPaperClick: (CardEntry) -> Unit, +) { Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { when { state.isLoading -> CircularProgressIndicator(color = GamssTheme.colors.gray700) state.loadFailed -> EmptyMessage(textRes = R.string.archive_cards_load_failed) state.cards.isEmpty() -> EmptyMessage(textRes = R.string.archive_cards_empty) - else -> PaperPile(cards = state.cards) + else -> PaperPile(cards = state.cards, onPaperClick = onPaperClick) } } } @@ -217,6 +271,11 @@ private fun ArchiveDetailPaperPilePreview() { cards = List(24) { index -> PreviewCard.copy(indexInDate = index) }, ), onBackClick = {}, + onPaperClick = {}, + onCardDismiss = {}, + onCardDiscard = {}, + onCardConversationClick = {}, + onCardShare = {}, onMonthClick = {}, onMonthSelect = {}, onMonthPickerDismiss = {}, diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt new file mode 100644 index 00000000..6d4c3551 --- /dev/null +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt @@ -0,0 +1,7 @@ +package com.gamss.android.feature.archive + +sealed interface ArchiveDetailSideEffect { + data class OpenChatRoom(val conversationId: Long) : ArchiveDetailSideEffect + data object CardLoadFailed : ArchiveDetailSideEffect + data object CardDiscardFailed : ArchiveDetailSideEffect +} diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt index 7d5b29d8..2762f766 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt @@ -1,5 +1,6 @@ package com.gamss.android.feature.archive +import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter import java.time.YearMonth @@ -12,4 +13,7 @@ data class ArchiveDetailState( val loadFailed: Boolean = false, val isMonthPickerVisible: Boolean = false, val isClearDialogVisible: Boolean = false, + /** 종이를 눌러 날짜별 조회로 받아 온 카드. 상세 팝업이 이 값으로 뜬다. */ + val selectedCard: Card? = null, + val isCardLoading: Boolean = false, ) diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index 75f0410b..a6909ba4 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -4,10 +4,13 @@ import androidx.lifecycle.ViewModel import com.gamss.android.core.common.AppResult import com.gamss.android.core.common.util.KoreanTimeZone import com.gamss.android.domain.card.CardEntry +import com.gamss.android.domain.card.DeleteCardUseCase +import com.gamss.android.domain.card.GetCardsByDateUseCase import com.gamss.android.domain.card.GetCardsByMonthUseCase import com.gamss.android.domain.emotion.EmotionCharacter import dagger.hilt.android.lifecycle.HiltViewModel import org.orbitmvi.orbit.ContainerHost +import org.orbitmvi.orbit.syntax.Syntax import org.orbitmvi.orbit.viewmodel.container import java.time.YearMonth import javax.inject.Inject @@ -15,9 +18,11 @@ import javax.inject.Inject @HiltViewModel class ArchiveDetailViewModel @Inject constructor( private val getCardsByMonth: GetCardsByMonthUseCase, -) : ViewModel(), ContainerHost { + private val getCardsByDate: GetCardsByDateUseCase, + private val deleteCard: DeleteCardUseCase, +) : ViewModel(), ContainerHost { - override val container = container( + override val container = container( ArchiveDetailState(yearMonth = YearMonth.now(KoreanTimeZone)), ) @@ -25,8 +30,7 @@ class ArchiveDetailViewModel @Inject constructor( if (state.emotion == emotion) return@intent reduce { state.copy(emotion = emotion) } - val result = getCardsByMonth(state.yearMonth) - reduce { state.withCards(result, emotion) } + loadMonth(emotion, state.yearMonth) } fun showMonthPicker() = intent { @@ -62,15 +66,63 @@ class ArchiveDetailViewModel @Inject constructor( loadFailed = false, ) } - val result = getCardsByMonth(yearMonth) - reduce { state.withCards(result, emotion) } + loadMonth(emotion, yearMonth) } -} -private fun ArchiveDetailState.withCards( - result: AppResult>, - emotion: EmotionCharacter, -): ArchiveDetailState = when (result) { - is AppResult.Success -> copy(isLoading = false, cards = result.data.filter { it.character == emotion }) - is AppResult.Failure -> copy(isLoading = false, loadFailed = true) + /** + * 월별 응답에는 카드 식별자가 없어 종이는 날짜와 그날 순번만 들고 있다. 눌린 종이의 날짜로 다시 + * 조회해 그 순번의 카드를 집어야 요약·대사와 id 가 손에 들어온다. + */ + fun selectCard(entry: CardEntry) = intent { + if (state.isCardLoading) return@intent + + reduce { state.copy(isCardLoading = true) } + val card = when (val result = getCardsByDate(entry.date)) { + is AppResult.Success -> result.data.getOrNull(entry.indexInDate) + is AppResult.Failure -> null + } + reduce { state.copy(isCardLoading = false, selectedCard = card) } + + if (card == null) postSideEffect(ArchiveDetailSideEffect.CardLoadFailed) + } + + fun dismissCard() = intent { + reduce { state.copy(selectedCard = null) } + } + + fun discardSelectedCard() = intent { + val card = state.selectedCard ?: return@intent + val emotion = state.emotion ?: return@intent + reduce { state.copy(selectedCard = null) } + + when (deleteCard(card.id)) { + // 카드를 지우면 같은 날짜 뒤 순번이 한 칸씩 당겨진다. 목록에서 빼는 것으로는 남은 종이의 + // 순번이 어긋나므로 그 달을 다시 받아 온다. + is AppResult.Success -> loadMonth(emotion, state.yearMonth) + is AppResult.Failure -> postSideEffect(ArchiveDetailSideEffect.CardDiscardFailed) + } + } + + fun viewSelectedConversation() = intent { + val conversationId = state.selectedCard?.conversationId ?: return@intent + reduce { state.copy(selectedCard = null) } + postSideEffect(ArchiveDetailSideEffect.OpenChatRoom(conversationId)) + } + + private suspend fun Syntax.loadMonth( + emotion: EmotionCharacter, + yearMonth: YearMonth, + ) { + when (val result = getCardsByMonth(yearMonth)) { + is AppResult.Success -> reduce { + state.copy( + isLoading = false, + loadFailed = false, + cards = result.data.filter { it.character == emotion }, + ) + } + + is AppResult.Failure -> reduce { state.copy(isLoading = false, loadFailed = true) } + } + } } diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt index e7869edd..3232a2e1 100644 --- a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt +++ b/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt @@ -1,6 +1,7 @@ package com.gamss.android.feature.archive.component import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding @@ -19,6 +20,7 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp import com.gamss.android.domain.card.CardEntry import com.gamss.android.feature.archive.PaperBody @@ -34,7 +36,10 @@ import kotlin.random.Random /** 카드 한 장씩을 종이로 위에서 쏟아, 물리 시뮬레이션으로 바닥에 쌓는다. */ @Composable -internal fun PaperPile(cards: List) { +internal fun PaperPile( + cards: List, + onPaperClick: (CardEntry) -> Unit, +) { BoxWithConstraints( modifier = Modifier .fillMaxSize() @@ -67,11 +72,13 @@ internal fun PaperPile(cards: List) { modifier = Modifier .align(Alignment.TopStart) .size(PaperSize * scale) + // 터치 영역도 그려진 자리를 따라가야 하므로 clickable 을 레이어 안쪽에 둔다. .graphicsLayer { translationX = ui.x - paperSizePx / 2f translationY = ui.y - paperSizePx / 2f rotationZ = ui.rotationDegrees - }, + } + .clickable(role = Role.Button) { onPaperClick(card) }, ) } } diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt index b365757a..d3ae11fc 100644 --- a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt +++ b/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -5,6 +5,8 @@ import com.gamss.android.core.common.util.KoreanTimeZone import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.card.CardRepository +import com.gamss.android.domain.card.DeleteCardUseCase +import com.gamss.android.domain.card.GetCardsByDateUseCase import com.gamss.android.domain.card.GetCardsByMonthUseCase import com.gamss.android.domain.emotion.EmotionCharacter import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -20,7 +22,7 @@ class ArchiveDetailViewModelTest { @Test fun `선택한 감정의 카드만 종이 목록으로 남긴다`() = runTest { - val viewModel = viewModel(AppResult.Success(listOf(angerEntry, joyEntry))) + val viewModel = viewModel(FakeCardRepository(AppResult.Success(listOf(angerEntry, joyEntry)))) viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) @@ -38,7 +40,7 @@ class ArchiveDetailViewModelTest { @Test fun `카드 조회에 실패하면 오류 상태를 표시한다`() = runTest { - val viewModel = viewModel(AppResult.Failure(IllegalStateException("network"))) + val viewModel = viewModel(FakeCardRepository(AppResult.Failure(IllegalStateException("network")))) viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) @@ -57,7 +59,7 @@ class ArchiveDetailViewModelTest { @Test fun `다른 달을 고르면 그 달을 다시 조회하고 시트를 닫는다`() = runTest { val repository = FakeCardRepository(AppResult.Success(listOf(angerEntry))) - val viewModel = ArchiveDetailViewModel(GetCardsByMonthUseCase(repository)) + val viewModel = viewModel(repository) val previousMonth = YearMonth.of(2026, 7) viewModel.test(this) { @@ -87,7 +89,7 @@ class ArchiveDetailViewModelTest { @Test fun `보고 있는 달을 다시 고르면 다시 조회하지 않고 시트만 닫는다`() = runTest { val repository = FakeCardRepository(AppResult.Success(listOf(angerEntry))) - val viewModel = ArchiveDetailViewModel(GetCardsByMonthUseCase(repository)) + val viewModel = viewModel(repository) val currentMonth = YearMonth.now(KoreanTimeZone) viewModel.test(this) { @@ -105,36 +107,140 @@ class ArchiveDetailViewModelTest { assertEquals(listOf(currentMonth), repository.requestedMonths) } - private fun viewModel(result: AppResult>) = ArchiveDetailViewModel( - GetCardsByMonthUseCase(FakeCardRepository(result)), + @Test + fun `종이를 누르면 그 날짜의 그날 순번 카드를 상세로 올린다`() = runTest { + val repository = FakeCardRepository( + monthResult = AppResult.Success(listOf(angerEntry, joyEntry)), + dateResult = AppResult.Success(listOf(firstCardOfDay, secondCardOfDay)), + ) + val viewModel = viewModel(repository) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + + containerHost.selectCard(joyEntry) + expectState { copy(isCardLoading = true) } + expectState { copy(isCardLoading = false, selectedCard = secondCardOfDay) } + } + + assertEquals(listOf(joyEntry.date), repository.requestedDates) + } + + @Test + fun `그 순번에 카드가 없으면 상세를 올리지 않고 실패를 알린다`() = runTest { + val repository = FakeCardRepository( + monthResult = AppResult.Success(listOf(angerEntry)), + dateResult = AppResult.Success(emptyList()), + ) + val viewModel = viewModel(repository) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + + containerHost.selectCard(angerEntry) + expectState { copy(isCardLoading = true) } + expectState { copy(isCardLoading = false) } + expectSideEffect(ArchiveDetailSideEffect.CardLoadFailed) + } + } + + @Test + fun `카드를 버리면 삭제하고 그 달을 다시 조회한다`() = runTest { + val repository = FakeCardRepository( + monthResult = AppResult.Success(listOf(angerEntry)), + dateResult = AppResult.Success(listOf(firstCardOfDay)), + ) + val viewModel = viewModel(repository) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + + containerHost.selectCard(angerEntry) + expectState { copy(isCardLoading = true) } + expectState { copy(isCardLoading = false, selectedCard = firstCardOfDay) } + + containerHost.discardSelectedCard() + expectState { copy(selectedCard = null) } + } + + // 재조회 결과가 이전과 같은 상태라 emission 이 더 없다. 다시 받아 왔는지는 호출로 확인한다. + assertEquals(listOf(firstCardOfDay.id), repository.deletedCardIds) + assertEquals(2, repository.requestedMonths.size) + } + + @Test + fun `대화보기를 누르면 그 카드의 대화방을 연다`() = runTest { + val repository = FakeCardRepository( + monthResult = AppResult.Success(listOf(angerEntry)), + dateResult = AppResult.Success(listOf(firstCardOfDay)), + ) + val viewModel = viewModel(repository) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + + containerHost.selectCard(angerEntry) + expectState { copy(isCardLoading = true) } + expectState { copy(isCardLoading = false, selectedCard = firstCardOfDay) } + + containerHost.viewSelectedConversation() + expectState { copy(selectedCard = null) } + expectSideEffect(ArchiveDetailSideEffect.OpenChatRoom(firstCardOfDay.conversationId)) + } + } + + private fun viewModel(repository: FakeCardRepository) = ArchiveDetailViewModel( + getCardsByMonth = GetCardsByMonthUseCase(repository), + getCardsByDate = GetCardsByDateUseCase(repository), + deleteCard = DeleteCardUseCase(repository), ) private companion object { - val angerEntry = CardEntry( - date = LocalDate.of(2026, 8, 15), - indexInDate = 0, - character = EmotionCharacter.ANGER, - ) - val joyEntry = CardEntry( - date = LocalDate.of(2026, 8, 15), - indexInDate = 1, - character = EmotionCharacter.JOY, + val DATE: LocalDate = LocalDate.of(2026, 8, 15) + + val angerEntry = CardEntry(date = DATE, indexInDate = 0, character = EmotionCharacter.ANGER) + val joyEntry = CardEntry(date = DATE, indexInDate = 1, character = EmotionCharacter.JOY) + + val firstCardOfDay = card(id = 1L, character = EmotionCharacter.ANGER) + val secondCardOfDay = card(id = 2L, character = EmotionCharacter.JOY) + + fun card(id: Long, character: EmotionCharacter) = Card( + id = id, + conversationId = id * 10, + character = character, + emotionLabel = character.displayName, + summary = "요약 $id", + message = "대사 $id", + date = DATE, ) } } private class FakeCardRepository( - private val entriesResult: AppResult>, + private val monthResult: AppResult>, + private val dateResult: AppResult> = AppResult.Success(emptyList()), ) : CardRepository { val requestedMonths = mutableListOf() + val requestedDates = mutableListOf() + val deletedCardIds = mutableListOf() - override suspend fun getCardsByDate(date: LocalDate): AppResult> = - AppResult.Success(emptyList()) + override suspend fun getCardsByDate(date: LocalDate): AppResult> { + requestedDates += date + return dateResult + } override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> { requestedMonths += yearMonth - return entriesResult + return monthResult } override suspend fun createCard( @@ -143,5 +249,8 @@ private class FakeCardRepository( summary: String, ): AppResult = error("보관함 테스트에서 쓰지 않는다") - override suspend fun deleteCard(cardId: Long): AppResult = error("보관함 테스트에서 쓰지 않는다") + override suspend fun deleteCard(cardId: Long): AppResult { + deletedCardIds += cardId + return AppResult.Success(Unit) + } } From 41dd9a0c64cb0cd0e8483a7e21423aec1229c12d Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Tue, 18 Aug 2026 11:31:27 +0900 Subject: [PATCH 28/34] =?UTF-8?q?refactor:=20calendar=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20=EC=9E=94=EC=9E=AC=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20archiv?= =?UTF-8?q?e=20=EB=94=94=EB=A0=89=ED=84=B0=EB=A6=AC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - feature/calendar 디렉터리를 feature/archive로 이동하고 settings.gradle.kts의 projectDir 오버라이드 제거 - 어느 모듈도 참조하지 않는 kizitonwose calendar 의존성을 버전 카탈로그에서 제거 - README 기술 스택 표에서 캘린더 라이브러리 항목 제거 --- README.md | 1 - feature/{calendar => archive}/build.gradle.kts | 0 .../feature/archive/ExampleInstrumentedTest.kt | 0 .../src/main/AndroidManifest.xml | 0 .../android/feature/archive/ArchiveDetailScreen.kt | 0 .../feature/archive/ArchiveDetailSideEffect.kt | 0 .../android/feature/archive/ArchiveDetailState.kt | 0 .../feature/archive/ArchiveDetailViewModel.kt | 0 .../gamss/android/feature/archive/ArchiveScreen.kt | 0 .../gamss/android/feature/archive/DesignScale.kt | 0 .../gamss/android/feature/archive/PaperPhysics.kt | 0 .../feature/archive/component/MonthSelector.kt | 0 .../android/feature/archive/component/PaperPile.kt | 0 .../archive/component/YearMonthPickerSheet.kt | 0 .../feature/archive/navigation/ArchiveDetailKey.kt | 0 .../feature/archive/navigation/ArchiveKey.kt | 0 .../feature/calendar/component/CardDetailDialog.kt | 0 .../src/main/res/drawable-nodpi/archive_paper.png | Bin .../src/main/res/drawable-nodpi/worry_bin_anger.png | Bin .../main/res/drawable-nodpi/worry_bin_anxiety.png | Bin .../src/main/res/drawable-nodpi/worry_bin_joy.png | Bin .../main/res/drawable-nodpi/worry_bin_prickly.png | Bin .../main/res/drawable-nodpi/worry_bin_quirky.png | Bin .../src/main/res/drawable-nodpi/worry_bin_sad.png | Bin .../src/main/res/values/strings.xml | 0 .../feature/archive/ArchiveDetailViewModelTest.kt | 0 .../android/feature/archive/ExampleUnitTest.kt | 0 gradle/libs.versions.toml | 3 --- settings.gradle.kts | 2 -- 29 files changed, 6 deletions(-) rename feature/{calendar => archive}/build.gradle.kts (100%) rename feature/{calendar => archive}/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt (100%) rename feature/{calendar => archive}/src/main/AndroidManifest.xml (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/DesignScale.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt (100%) rename feature/{calendar => archive}/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/archive_paper.png (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/worry_bin_anger.png (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/worry_bin_anxiety.png (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/worry_bin_joy.png (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/worry_bin_prickly.png (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/worry_bin_quirky.png (100%) rename feature/{calendar => archive}/src/main/res/drawable-nodpi/worry_bin_sad.png (100%) rename feature/{calendar => archive}/src/main/res/values/strings.xml (100%) rename feature/{calendar => archive}/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt (100%) rename feature/{calendar => archive}/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt (100%) diff --git a/README.md b/README.md index 13fd7a0d..0eb9e7b2 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,6 @@ GAMSS-Android/ | 네트워크 | Retrofit | | 로컬 DB | Room 3.0 | | 이미지 로드 | Coil | -| 캘린더 | [kizitonwose/Calendar](https://github.com/kizitonwose/Calendar) | | 테스트 | JUnit | | 앱 트래킹 | Firebase / Google Analytics | | CI/CD | GitHub Actions | diff --git a/feature/calendar/build.gradle.kts b/feature/archive/build.gradle.kts similarity index 100% rename from feature/calendar/build.gradle.kts rename to feature/archive/build.gradle.kts diff --git a/feature/calendar/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt b/feature/archive/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt similarity index 100% rename from feature/calendar/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt rename to feature/archive/src/androidTest/java/com/gamss/android/feature/archive/ExampleInstrumentedTest.kt diff --git a/feature/calendar/src/main/AndroidManifest.xml b/feature/archive/src/main/AndroidManifest.xml similarity index 100% rename from feature/calendar/src/main/AndroidManifest.xml rename to feature/archive/src/main/AndroidManifest.xml diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveScreen.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/DesignScale.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/DesignScale.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/DesignScale.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/DesignScale.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveKey.kt diff --git a/feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt b/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt similarity index 100% rename from feature/calendar/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt rename to feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt diff --git a/feature/calendar/src/main/res/drawable-nodpi/archive_paper.png b/feature/archive/src/main/res/drawable-nodpi/archive_paper.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/archive_paper.png rename to feature/archive/src/main/res/drawable-nodpi/archive_paper.png diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger.png b/feature/archive/src/main/res/drawable-nodpi/worry_bin_anger.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/worry_bin_anger.png rename to feature/archive/src/main/res/drawable-nodpi/worry_bin_anger.png diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety.png b/feature/archive/src/main/res/drawable-nodpi/worry_bin_anxiety.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/worry_bin_anxiety.png rename to feature/archive/src/main/res/drawable-nodpi/worry_bin_anxiety.png diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy.png b/feature/archive/src/main/res/drawable-nodpi/worry_bin_joy.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/worry_bin_joy.png rename to feature/archive/src/main/res/drawable-nodpi/worry_bin_joy.png diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly.png b/feature/archive/src/main/res/drawable-nodpi/worry_bin_prickly.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/worry_bin_prickly.png rename to feature/archive/src/main/res/drawable-nodpi/worry_bin_prickly.png diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky.png b/feature/archive/src/main/res/drawable-nodpi/worry_bin_quirky.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/worry_bin_quirky.png rename to feature/archive/src/main/res/drawable-nodpi/worry_bin_quirky.png diff --git a/feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad.png b/feature/archive/src/main/res/drawable-nodpi/worry_bin_sad.png similarity index 100% rename from feature/calendar/src/main/res/drawable-nodpi/worry_bin_sad.png rename to feature/archive/src/main/res/drawable-nodpi/worry_bin_sad.png diff --git a/feature/calendar/src/main/res/values/strings.xml b/feature/archive/src/main/res/values/strings.xml similarity index 100% rename from feature/calendar/src/main/res/values/strings.xml rename to feature/archive/src/main/res/values/strings.xml diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt similarity index 100% rename from feature/calendar/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt rename to feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt diff --git a/feature/calendar/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt b/feature/archive/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt similarity index 100% rename from feature/calendar/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt rename to feature/archive/src/test/java/com/gamss/android/feature/archive/ExampleUnitTest.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e3b3c180..2c2bed52 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,6 @@ retrofit = "3.0.0" okhttp = "5.4.0" room = "3.0.0-alpha06" coil = "3.5.0" -calendar = "2.10.0" firebase-bom = "34.15.0" firebase-crashlytics-gradle = "3.0.7" google-services = "4.4.4" @@ -98,8 +97,6 @@ coil-bom = { module = "io.coil-kt.coil3:coil-bom", version.ref = "coil" } coil-compose = { module = "io.coil-kt.coil3:coil-compose" } coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp" } -calendar-compose = { module = "com.kizitonwose.calendar:compose", version.ref = "calendar" } - firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" } firebase-analytics = { module = "com.google.firebase:firebase-analytics" } firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 55dba633..0bc08f08 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -40,5 +40,3 @@ include(":feature:setting") include(":feature:webview") include(":core:designsystem") include(":feature:onboarding") - -project(":feature:archive").projectDir = file("feature/calendar") From fb84bb3a2cd409f266cb174829e80d5ba08ee1b8 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Tue, 18 Aug 2026 18:41:19 +0900 Subject: [PATCH 29/34] =?UTF-8?q?refactor:=20=EB=8F=99=EC=9E=91=20?= =?UTF-8?q?=EC=84=A4=EB=AA=85=20=EC=A3=BC=EC=84=9D=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이름을 다시 말하는 KDoc 첫 줄 8곳을 덜어내고, 뒤에 붙은 제약 설명만 한 줄로 남겼다. --- .../gamss/android/feature/archive/ArchiveDetailState.kt | 1 - .../android/feature/archive/component/MonthSelector.kt | 1 - .../gamss/android/feature/archive/component/PaperPile.kt | 2 -- .../feature/archive/component/YearMonthPickerSheet.kt | 2 +- .../feature/archive/navigation/ArchiveDetailKey.kt | 6 +----- .../feature/calendar/component/CardDetailDialog.kt | 9 +-------- 6 files changed, 3 insertions(+), 18 deletions(-) diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt index 2762f766..6721b786 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt @@ -13,7 +13,6 @@ data class ArchiveDetailState( val loadFailed: Boolean = false, val isMonthPickerVisible: Boolean = false, val isClearDialogVisible: Boolean = false, - /** 종이를 눌러 날짜별 조회로 받아 온 카드. 상세 팝업이 이 값으로 뜬다. */ val selectedCard: Card? = null, val isCardLoading: Boolean = false, ) diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt index ddf8436f..23a516f6 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/MonthSelector.kt @@ -26,7 +26,6 @@ import java.time.YearMonth import java.time.format.DateTimeFormatter import com.gamss.android.core.designsystem.R as DesignSystemR -/** 보고 있는 달을 보여주고, 누르면 [YearMonthPickerSheet]를 여는 박스. */ @Composable internal fun MonthSelector( yearMonth: YearMonth, diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt index 3232a2e1..c64ebfde 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt @@ -34,7 +34,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.isActive import kotlin.random.Random -/** 카드 한 장씩을 종이로 위에서 쏟아, 물리 시뮬레이션으로 바닥에 쌓는다. */ @Composable internal fun PaperPile( cards: List, @@ -102,7 +101,6 @@ private fun List.spawnStates(boundsWidthPx: Float, radiusPx: Float): ) } -/** 매 프레임 물리를 갱신해 [uiStates]에 반영하고, 다 쌓이면 멈춘다. */ private suspend fun CoroutineScope.runPaperFall( uiStates: List, boundsWidthPx: Float, diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt index 440518cf..786ba694 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/YearMonthPickerSheet.kt @@ -46,7 +46,7 @@ import java.time.YearMonth import kotlin.math.abs /** - * 연·월을 휠로 돌려 고르는 바텀시트. 휠을 돌리는 동안은 고르는 중이고 `선택하기` 를 눌러야 확정된다. + * 휠을 돌리는 동안은 고르는 중이고 `선택하기` 를 눌러야 확정된다. * * 월은 12개월을 그대로 준다 — 카드가 있는 달만 남기려면 두 휠이 서로를 잘라내야 해서, 카드가 없는 * 달은 빈 상태로 답하는 쪽을 택했다. diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt index b8cba6d2..1aa70586 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/navigation/ArchiveDetailKey.kt @@ -4,11 +4,7 @@ import androidx.navigation3.runtime.NavKey import com.gamss.android.domain.emotion.EmotionCharacter import kotlinx.serialization.Serializable -/** - * 보관함의 감정별 상세 화면을 식별한다. - * - * enum을 직접 보존해 호출자가 임의의 문자열을 전달하여 상세 화면이 실패하는 일을 막는다. - */ +/** enum을 직접 보존해 호출자가 임의의 문자열을 전달하여 상세 화면이 실패하는 일을 막는다. */ @Serializable data class ArchiveDetailKey( val emotion: EmotionCharacter, diff --git a/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt b/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt index 81defa16..2d970434 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt @@ -28,12 +28,7 @@ import com.gamss.android.domain.card.Card import com.gamss.android.feature.archive.R import java.time.format.DateTimeFormatter -/** - * 캘린더에서 카드를 탭했을 때 뜨는 상세 팝업. - * - * Figma의 Dim + Card 오버레이 구조를 그대로 옮긴다. 배경 dim 은 [Dialog] 창이 기본으로 - * 그려 주므로 여기서 따로 그리지 않는다. - */ +/** 배경 dim 은 [Dialog] 창이 기본으로 그려 주므로 여기서 따로 그리지 않는다. */ @Composable internal fun CardDetailDialog( card: Card, @@ -70,8 +65,6 @@ internal fun CardDetailDialog( } /** - * 카드 우상단 닫기 버튼. - * * 카드가 액션 슬롯을 Figma 값(우상단 28dp)에 맞춰 두므로 아이콘은 슬롯 좌상단에 딱 붙어야 한다. * 그런데 터치 영역을 아이콘보다 크게 잡으면 그 차이만큼 아이콘이 안쪽으로 밀리므로, * [CloseButtonCenteringInset] 만큼 되돌려 아이콘을 시안 위치로 보낸다. From 6dfd166a733c90b77e7447a6ef836bcf23f29ce0 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Wed, 19 Aug 2026 00:55:35 +0900 Subject: [PATCH 30/34] =?UTF-8?q?refactor:=20=EC=A2=85=EC=9D=B4=20?= =?UTF-8?q?=EB=82=99=ED=95=98=20=EA=B5=AC=EB=8F=99=EB=B6=80=EB=A5=BC=20Pap?= =?UTF-8?q?erFall=20=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PaperPile 이 그리기와 프레임 구동을 같이 들고 있어, 낙하 상태·시작 위치·프레임 델타 계산을 PaperFall 로 옮겼다. spawn 과 실행에 bounds/radius 를 두 번 넘기던 중복도 클래스 하나로 정리했다. PaperPhysics 는 companion 의 PascalCase 상수를 레포 컨벤션인 SCREAMING_SNAKE 파일 상수로 통일하고, 40줄짜리 resolvePair 를 pushApart/applyBounce/ applySlidingSpin 으로 쪼갰다. 산술과 계산 순서는 그대로다. --- .../android/feature/archive/PaperFall.kt | 107 ++++++++++ .../android/feature/archive/PaperPhysics.kt | 199 ++++++++++-------- .../feature/archive/component/PaperPile.kt | 110 +--------- 3 files changed, 232 insertions(+), 184 deletions(-) create mode 100644 feature/archive/src/main/java/com/gamss/android/feature/archive/PaperFall.kt diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperFall.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperFall.kt new file mode 100644 index 00000000..73fe8791 --- /dev/null +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperFall.kt @@ -0,0 +1,107 @@ +package com.gamss.android.feature.archive + +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.setValue +import androidx.compose.runtime.withFrameNanos +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.isActive +import kotlin.random.Random + +/** + * 종이 [count] 장을 화면 위쪽에 흩뿌려 두고, [run] 이 도는 동안 [papers] 의 자리를 프레임마다 갱신한다. + * 떨어지고 부딪히는 계산 자체는 [PaperPhysicsWorld] 가 맡는다. + */ +@Stable +internal class PaperFall( + count: Int, + private val boundsWidthPx: Float, + private val boundsHeightPx: Float, + private val radiusPx: Float, +) { + /** 그리는 쪽이 읽어 가는 현재 자리. 프레임마다 바뀐다. */ + val papers: List = spawnPapers(count, boundsWidthPx, radiusPx) + + /** + * 다 쌓여 잠잠해지거나 [PHYSICS_MAX_DURATION_NANOS] 가 지나면 돌아온다 — 화면이 그대로인데도 + * 매 프레임 계속 깨어나지 않게 한다. + */ + suspend fun run() = coroutineScope { + val bodies = papers.map { it.toBody(radiusPx) } + val world = PaperPhysicsWorld(bodies, boundsWidth = boundsWidthPx, boundsHeight = boundsHeightPx) + + var lastFrameNanos = -1L + var startFrameNanos = -1L + var settledFrames = 0 + while (isActive) { + withFrameNanos { frameNanos -> + if (startFrameNanos < 0) startFrameNanos = frameNanos + val dt = frameNanos.deltaSeconds(lastFrameNanos) + lastFrameNanos = frameNanos + + world.step(dt) + bodies.forEachIndexed { index, body -> papers[index].follow(body) } + settledFrames = if (world.maxActivity() < PHYSICS_SETTLE_THRESHOLD) settledFrames + 1 else 0 + } + val settled = settledFrames >= PHYSICS_SETTLE_FRAMES + val timedOut = lastFrameNanos - startFrameNanos > PHYSICS_MAX_DURATION_NANOS + if (settled || timedOut) break + } + } +} + +/** 종이 한 장이 지금 놓인 자리. 프레임마다 바뀌므로 Compose 상태로 든다. */ +@Stable +internal class PaperUiState(x: Float, y: Float, rotationDegrees: Float) { + var x by mutableFloatStateOf(x) + var y by mutableFloatStateOf(y) + var rotationDegrees by mutableFloatStateOf(rotationDegrees) +} + +/** 가로로 흩뿌린 시작 위치. 뒤 순번일수록 더 높이 두어 한꺼번에 떨어지지 않게 한다. */ +private fun spawnPapers(count: Int, boundsWidthPx: Float, radiusPx: Float): List { + val spawnRange = (boundsWidthPx - radiusPx * 2f).coerceAtLeast(0f) + return List(count) { index -> + PaperUiState( + x = radiusPx + Random.nextFloat() * spawnRange, + y = -radiusPx - index * radiusPx * PAPER_SPAWN_STAGGER, + rotationDegrees = (Random.nextFloat() - 0.5f) * 2f * PAPER_MAX_TILT_DEGREES, + ) + } +} + +/** 흩뿌린 자리에서 그대로 출발한다. 낙하가 너무 반듯해 보이지 않게 옆으로 밀고 살짝 돌려 둔다. */ +private fun PaperUiState.toBody(radiusPx: Float) = PaperBody( + startX = x, + startY = y, + startAngle = rotationDegrees.toRadians(), + radius = radiusPx, + startVelX = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_DRIFT, + startAngularVelocity = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_SPIN, +) + +private fun PaperUiState.follow(body: PaperBody) { + x = body.x + y = body.y + rotationDegrees = body.angle.toDegrees() +} + +/** 첫 프레임은 기준이 없어 한 프레임치로 두고, 프레임이 밀렸을 때는 위로 잘라 시뮬레이션이 튀지 않게 한다. */ +private fun Long.deltaSeconds(previousNanos: Long): Float = + if (previousNanos < 0) { + PHYSICS_FIXED_DT + } else { + ((this - previousNanos) / NANOS_PER_SECOND).coerceIn(0f, PHYSICS_MAX_DT) + } + +private const val NANOS_PER_SECOND = 1_000_000_000f +private const val PAPER_MAX_TILT_DEGREES = 42f +private const val PAPER_SPAWN_STAGGER = 0.9f +private const val PAPER_SPAWN_DRIFT = 120f +private const val PAPER_SPAWN_SPIN = 0.15f +private const val PHYSICS_FIXED_DT = 1f / 60f +private const val PHYSICS_MAX_DT = 1f / 30f +private const val PHYSICS_SETTLE_THRESHOLD = 4f +private const val PHYSICS_SETTLE_FRAMES = 30 +private const val PHYSICS_MAX_DURATION_NANOS = 5_000_000_000L diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt index 998efc42..3aa1e820 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/PaperPhysics.kt @@ -36,29 +36,20 @@ internal class PaperPhysicsWorld( private val boundsHeight: Float, ) { fun step(dt: Float) { - bodies.forEach { body -> - body.velY += Gravity * dt - body.x += body.velX * dt - body.y += body.velY * dt - body.angle += body.angularVelocity * dt - body.velX *= LinearDamping - body.velY *= LinearDamping - val dampedAngularVelocity = (body.angularVelocity * AngularDamping) - .coerceIn(-MaxAngularVelocity, MaxAngularVelocity) - // 0 에 가까운 회전은 0 으로 끊는다. 안 그러면 쌓인 종이끼리 매 프레임 미세한 토크를 주고받아 - // 제자리에서 계속 돈다. - body.angularVelocity = if (abs(dampedAngularVelocity) < AngularSleepThreshold) 0f else dampedAngularVelocity - } + bodies.forEach { it.integrate(dt) } bodies.forEach(::resolveBounds) - repeat(CollisionIterations) { resolvePairs() } + // 한 번만 풀면 여러 장이 겹친 자리에서 서로를 밀어내다 만다. 같은 계산을 몇 번 반복해 수렴시킨다. + repeat(COLLISION_ITERATIONS) { resolveAllPairs() } } + /** 가장 활발한 종이가 얼마나 움직이는지. 낙하가 끝났는지 판단하는 쪽이 이 값을 본다. */ fun maxActivity(): Float = bodies.maxOf { body -> val linear = sqrt(body.velX * body.velX + body.velY * body.velY) - val angular = abs(body.angularVelocity) * AngularActivityWeight + val angular = abs(body.angularVelocity) * ANGULAR_ACTIVITY_WEIGHT linear + angular } + /** 좌우 벽과 바닥에 부딪히면 되튕기고, 스치는 방향으로 살짝 돌려 준다. */ private fun resolveBounds(body: PaperBody) { val minX = body.radius val maxX = boundsWidth - body.radius @@ -67,95 +58,133 @@ internal class PaperPhysicsWorld( when { body.x < minX -> { body.x = minX - body.velX = -body.velX * Restitution - body.angularVelocity -= body.velY * WallSpinTransfer + body.velX = -body.velX * RESTITUTION + body.angularVelocity -= body.velY * WALL_SPIN_TRANSFER } body.x > maxX -> { body.x = maxX - body.velX = -body.velX * Restitution - body.angularVelocity += body.velY * WallSpinTransfer + body.velX = -body.velX * RESTITUTION + body.angularVelocity += body.velY * WALL_SPIN_TRANSFER } } if (body.y > floorY) { body.y = floorY - body.velY = if (body.velY > 0f) -body.velY * Restitution else body.velY - val friction = body.velX * Friction + body.velY = if (body.velY > 0f) -body.velY * RESTITUTION else body.velY + val friction = body.velX * FRICTION body.velX = friction - body.angularVelocity += friction * FloorSpinTransfer + body.angularVelocity += friction * FLOOR_SPIN_TRANSFER } } - private fun resolvePairs() { + private fun resolveAllPairs() { for (i in bodies.indices) { for (j in i + 1 until bodies.size) { resolvePair(bodies[i], bodies[j]) } } } +} - private fun resolvePair(a: PaperBody, b: PaperBody) { - val dx = b.x - a.x - val dy = b.y - a.y - val distance = sqrt(dx * dx + dy * dy) - val minDistance = a.radius + b.radius - if (distance >= minDistance || distance <= MinSeparationDistance) return - - val nx = dx / distance - val ny = dy / distance - val overlap = (minDistance - distance - PositionSlop).coerceAtLeast(0f) - val correctionX = nx * (overlap * 0.5f) - val correctionY = ny * (overlap * 0.5f) - a.x -= correctionX - a.y -= correctionY - b.x += correctionX - b.y += correctionY - - val relVelX = b.velX - a.velX - val relVelY = b.velY - a.velY - val speedAlongNormal = relVelX * nx + relVelY * ny - if (speedAlongNormal > 0f) return - - val impulseMagnitude = -(1f + Restitution) * speedAlongNormal / 2f - val impulseX = nx * impulseMagnitude - val impulseY = ny * impulseMagnitude - a.velX -= impulseX - a.velY -= impulseY - b.velX += impulseX - b.velY += impulseY - - val tangentX = -ny - val tangentY = nx - val tangentSpeed = relVelX * tangentX + relVelY * tangentY - // 다 쌓인 뒤에도 중력으로 매 프레임 서로 닿으며 미세한 접선 속도가 생긴다. 그 이하는 무시한다. - if (abs(tangentSpeed) > RestingTangentSpeed) { - val spinImpulse = tangentSpeed * PairSpinTransfer - a.angularVelocity -= spinImpulse - b.angularVelocity += spinImpulse - } - } +/** 중력과 감쇠를 먹여 한 프레임만큼 옮긴다. */ +private fun PaperBody.integrate(dt: Float) { + velY += GRAVITY * dt + x += velX * dt + y += velY * dt + angle += angularVelocity * dt + velX *= LINEAR_DAMPING + velY *= LINEAR_DAMPING + + val damped = (angularVelocity * ANGULAR_DAMPING) + .coerceIn(-MAX_ANGULAR_VELOCITY, MAX_ANGULAR_VELOCITY) + // 0 에 가까운 회전은 0 으로 끊는다. 안 그러면 쌓인 종이끼리 매 프레임 미세한 토크를 주고받아 + // 제자리에서 계속 돈다. + angularVelocity = if (abs(damped) < ANGULAR_SLEEP_THRESHOLD) 0f else damped +} - // 아래 상수는 대부분 실기기(갤럭시 S23)로 직접 눈으로 보면서 맞춘 경험적 튜닝값이다. - // 단위는 px/s, px/s², rad/s 등 시뮬레이션 내부 단위 기준이며, 다른 값으로 바꾸면 반드시 - // 실기기에서 낙하 애니메이션을 재확인해야 한다. - private companion object { - const val Gravity = 2600f - const val LinearDamping = 0.995f - const val AngularDamping = 0.9f - const val Restitution = 0.32f - const val Friction = 0.9f - const val CollisionIterations = 4 - - // 일부러 아주 작게 둔다. 종이는 처음 기울기를 대체로 유지하고 부딪힐 때만 살짝 흔들려야 한다. - const val PairSpinTransfer = 0.00012f - const val WallSpinTransfer = 0.0001f - const val FloorSpinTransfer = 0.0002f - const val MaxAngularVelocity = 0.8f - const val MinSeparationDistance = 1e-4f - const val AngularActivityWeight = 40f - const val AngularSleepThreshold = 0.05f - const val RestingTangentSpeed = 8f - const val PositionSlop = 0.5f - } +/** 겹친 두 장을 떼어 놓고, 부딪힌 세기만큼 되튕기며 스친 만큼 돌려 준다. */ +private fun resolvePair(a: PaperBody, b: PaperBody) { + val dx = b.x - a.x + val dy = b.y - a.y + val distance = sqrt(dx * dx + dy * dy) + val minDistance = a.radius + b.radius + // 아직 안 닿았거나, 정확히 겹쳐 어느 쪽으로 밀어낼지 정할 수 없는 경우다. + if (distance >= minDistance || distance <= MIN_SEPARATION_DISTANCE) return + + val normalX = dx / distance + val normalY = dy / distance + pushApart(a, b, normalX, normalY, gap = minDistance - distance) + + // 되튕김과 회전은 둘 다 부딪히기 직전의 상대 속도로 계산한다. + val relVelX = b.velX - a.velX + val relVelY = b.velY - a.velY + val approachSpeed = relVelX * normalX + relVelY * normalY + // 겹쳐 있어도 이미 서로 멀어지는 중이면 더 손댈 게 없다. + if (approachSpeed > 0f) return + + applyBounce(a, b, normalX, normalY, approachSpeed) + applySlidingSpin(a, b, tangentSpeed = relVelY * normalX - relVelX * normalY) +} + +/** 겹친 만큼 서로 반씩 밀어낸다. [POSITION_SLOP] 만큼은 남겨 둬야 다음 프레임에 다시 밀리며 떨지 않는다. */ +private fun pushApart(a: PaperBody, b: PaperBody, normalX: Float, normalY: Float, gap: Float) { + val halfOverlap = (gap - POSITION_SLOP).coerceAtLeast(0f) * 0.5f + val correctionX = normalX * halfOverlap + val correctionY = normalY * halfOverlap + a.x -= correctionX + a.y -= correctionY + b.x += correctionX + b.y += correctionY +} + +/** 법선 방향으로 되튕긴다. 종이 무게는 모두 같다고 보고 충격량을 반씩 나눈다. */ +private fun applyBounce( + a: PaperBody, + b: PaperBody, + normalX: Float, + normalY: Float, + approachSpeed: Float, +) { + val magnitude = -(1f + RESTITUTION) * approachSpeed / 2f + val impulseX = normalX * magnitude + val impulseY = normalY * magnitude + a.velX -= impulseX + a.velY -= impulseY + b.velX += impulseX + b.velY += impulseY } + +/** + * 접선 방향으로 스친 만큼 두 장을 반대로 돌린다. + * + * 다 쌓인 뒤에도 중력으로 매 프레임 서로 닿으며 미세한 접선 속도가 생긴다. 그 이하는 무시한다. + */ +private fun applySlidingSpin(a: PaperBody, b: PaperBody, tangentSpeed: Float) { + if (abs(tangentSpeed) <= RESTING_TANGENT_SPEED) return + + val spinImpulse = tangentSpeed * PAIR_SPIN_TRANSFER + a.angularVelocity -= spinImpulse + b.angularVelocity += spinImpulse +} + +// 아래 상수는 대부분 실기기(갤럭시 S23)로 직접 눈으로 보면서 맞춘 경험적 튜닝값이다. +// 단위는 px/s, px/s², rad/s 등 시뮬레이션 내부 단위 기준이며, 다른 값으로 바꾸면 반드시 +// 실기기에서 낙하 애니메이션을 재확인해야 한다. +private const val GRAVITY = 2600f +private const val LINEAR_DAMPING = 0.995f +private const val ANGULAR_DAMPING = 0.9f +private const val RESTITUTION = 0.32f +private const val FRICTION = 0.9f +private const val COLLISION_ITERATIONS = 4 + +// 회전 전달은 일부러 아주 작게 둔다. 종이는 처음 기울기를 대체로 유지하고 부딪힐 때만 살짝 흔들려야 한다. +private const val PAIR_SPIN_TRANSFER = 0.00012f +private const val WALL_SPIN_TRANSFER = 0.0001f +private const val FLOOR_SPIN_TRANSFER = 0.0002f +private const val MAX_ANGULAR_VELOCITY = 0.8f +private const val MIN_SEPARATION_DISTANCE = 1e-4f +private const val ANGULAR_ACTIVITY_WEIGHT = 40f +private const val ANGULAR_SLEEP_THRESHOLD = 0.05f +private const val RESTING_TANGENT_SPEED = 8f +private const val POSITION_SLOP = 0.5f diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt index c64ebfde..268dceb5 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt @@ -8,12 +8,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.Stable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.runtime.withFrameNanos import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer @@ -23,17 +18,12 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp import com.gamss.android.domain.card.CardEntry -import com.gamss.android.feature.archive.PaperBody -import com.gamss.android.feature.archive.PaperPhysicsWorld +import com.gamss.android.feature.archive.PaperFall import com.gamss.android.feature.archive.R import com.gamss.android.feature.archive.designScale import com.gamss.android.feature.archive.designWidth -import com.gamss.android.feature.archive.toDegrees -import com.gamss.android.feature.archive.toRadians -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.isActive -import kotlin.random.Random +/** 위에서 쏟아져 바닥에 쌓이는 종이 더미. 어디에 어떻게 놓이는지는 [PaperFall] 이 정한다. */ @Composable internal fun PaperPile( cards: List, @@ -53,14 +43,14 @@ internal fun PaperPile( val radiusPx = paperSizePx / 2f * PAPER_COLLISION_RADIUS_SCALE // 키에 화면 크기를 넣지 않는다. 회전 등으로 크기만 바뀌었을 때 이미 쌓인 종이가 다시 쏟아진다. - val uiStates = remember(cards) { cards.spawnStates(boundsWidthPx, radiusPx) } - - LaunchedEffect(cards) { - runPaperFall(uiStates, boundsWidthPx, boundsHeightPx, radiusPx) + val fall = remember(cards) { + PaperFall(cards.size, boundsWidthPx, boundsHeightPx, radiusPx) } + LaunchedEffect(fall) { fall.run() } + cards.forEachIndexed { index, card -> - val ui = uiStates.getOrNull(index) ?: return@forEachIndexed + val paper = fall.papers.getOrNull(index) ?: return@forEachIndexed Image( painter = painterResource(R.drawable.archive_paper), contentDescription = stringResource( @@ -73,9 +63,9 @@ internal fun PaperPile( .size(PaperSize * scale) // 터치 영역도 그려진 자리를 따라가야 하므로 clickable 을 레이어 안쪽에 둔다. .graphicsLayer { - translationX = ui.x - paperSizePx / 2f - translationY = ui.y - paperSizePx / 2f - rotationZ = ui.rotationDegrees + translationX = paper.x - paperSizePx / 2f + translationY = paper.y - paperSizePx / 2f + rotationZ = paper.rotationDegrees } .clickable(role = Role.Button) { onPaperClick(card) }, ) @@ -83,86 +73,8 @@ internal fun PaperPile( } } -@Stable -private class PaperUiState(x: Float, y: Float, rotationDegrees: Float) { - var x by mutableFloatStateOf(x) - var y by mutableFloatStateOf(y) - var rotationDegrees by mutableFloatStateOf(rotationDegrees) -} - -/** 화면 위쪽에 흩뿌린 시작 위치. 뒤 순번일수록 더 높이 두어 한꺼번에 떨어지지 않게 한다. */ -private fun List.spawnStates(boundsWidthPx: Float, radiusPx: Float): List = - List(size) { index -> - val spawnRange = (boundsWidthPx - radiusPx * 2f).coerceAtLeast(0f) - PaperUiState( - x = radiusPx + Random.nextFloat() * spawnRange, - y = -radiusPx - index * radiusPx * PAPER_SPAWN_STAGGER, - rotationDegrees = (Random.nextFloat() - 0.5f) * 2f * PAPER_MAX_TILT_DEGREES, - ) - } - -private suspend fun CoroutineScope.runPaperFall( - uiStates: List, - boundsWidthPx: Float, - boundsHeightPx: Float, - radiusPx: Float, -) { - val bodies = uiStates.map { ui -> - PaperBody( - startX = ui.x, - startY = ui.y, - startAngle = ui.rotationDegrees.toRadians(), - radius = radiusPx, - startVelX = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_DRIFT, - startAngularVelocity = (Random.nextFloat() - 0.5f) * PAPER_SPAWN_SPIN, - ) - } - val world = PaperPhysicsWorld(bodies, boundsWidth = boundsWidthPx, boundsHeight = boundsHeightPx) - - var lastFrameNanos = -1L - var startFrameNanos = -1L - var settledFrames = 0 - while (isActive) { - withFrameNanos { frameNanos -> - if (startFrameNanos < 0) startFrameNanos = frameNanos - val dt = frameNanos.deltaSeconds(lastFrameNanos) - lastFrameNanos = frameNanos - - world.step(dt) - bodies.forEachIndexed { index, body -> - uiStates[index].apply { - x = body.x - y = body.y - rotationDegrees = body.angle.toDegrees() - } - } - settledFrames = if (world.maxActivity() < PHYSICS_SETTLE_THRESHOLD) settledFrames + 1 else 0 - } - val settled = settledFrames >= PHYSICS_SETTLE_FRAMES - val timedOut = lastFrameNanos - startFrameNanos > PHYSICS_MAX_DURATION_NANOS - if (settled || timedOut) break - } -} - -/** 첫 프레임은 기준이 없어 한 프레임치로 두고, 프레임이 밀렸을 때는 위로 잘라 시뮬레이션이 튀지 않게 한다. */ -private fun Long.deltaSeconds(previousNanos: Long): Float = - if (previousNanos < 0) { - PHYSICS_FIXED_DT - } else { - ((this - previousNanos) / NANOS_PER_SECOND).coerceIn(0f, PHYSICS_MAX_DT) - } - -private const val NANOS_PER_SECOND = 1_000_000_000f +/** 종이는 네모지만 충돌은 원으로 근사한다. 모서리까지 덮으려 반지름을 조금 키운다. */ private const val PAPER_COLLISION_RADIUS_SCALE = 1.15f -private const val PAPER_MAX_TILT_DEGREES = 42f -private const val PAPER_SPAWN_STAGGER = 0.9f -private const val PAPER_SPAWN_DRIFT = 120f -private const val PAPER_SPAWN_SPIN = 0.15f -private const val PHYSICS_FIXED_DT = 1f / 60f -private const val PHYSICS_MAX_DT = 1f / 30f -private const val PHYSICS_SETTLE_THRESHOLD = 4f -private const val PHYSICS_SETTLE_FRAMES = 30 -private const val PHYSICS_MAX_DURATION_NANOS = 5_000_000_000L private val PileTopPadding = 136.dp private val PaperSize = 88.dp From 4f3a62f0b0b023f2d80bb548c2dbd837f663bd14 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Wed, 19 Aug 2026 00:55:45 +0900 Subject: [PATCH 31/34] =?UTF-8?q?refactor:=20=EB=B3=B4=EA=B4=80=ED=95=A8?= =?UTF-8?q?=20=EC=83=81=EC=84=B8=20=EC=83=81=ED=83=9C=EB=A5=BC=20sealed=20?= =?UTF-8?q?=EB=A1=9C=20=EB=AC=B6=EA=B3=A0=20calendar=20=EC=9E=94=EC=9E=AC?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 로딩·실패·목록을 isLoading/loadFailed/cards 세 필드로 표현하던 걸 ArchiveCards sealed 로 합쳤다. 동시에 참일 수 없는 조합이 사라져 loadMonth 는 reduce 한 번으로 끝나고, 화면의 분기도 exhaustive when 이 된다. archive 모듈 안에 남아 있던 feature.calendar 패키지의 CardDetailDialog 를 archive.component 로 옮기고, 쓰이지 않는 calendar_* 문자열 10개를 지우고 남은 calendar_card_* 를 archive_card_* 로 개명했다. 파라미터가 14개까지 늘어난 ArchiveDetailFrame 은 항상 보이는 프레임과 겹쳐 뜨는 ArchiveDetailOverlays 로 나눴다. 프리뷰가 오버레이를 띄우지 않으므로 no-op 람다도 12개에서 4개로 줄었다. --- .../feature/archive/ArchiveDetailScreen.kt | 73 ++++++++++--------- .../feature/archive/ArchiveDetailState.kt | 11 ++- .../feature/archive/ArchiveDetailViewModel.kt | 19 ++--- .../component/CardDetailDialog.kt | 16 ++-- .../archive/src/main/res/values/strings.xml | 32 ++++---- .../archive/ArchiveDetailViewModelTest.kt | 33 +++------ 6 files changed, 84 insertions(+), 100 deletions(-) rename feature/archive/src/main/java/com/gamss/android/feature/{calendar => archive}/component/CardDetailDialog.kt (88%) diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index c8fd566e..8cf3919c 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -35,10 +35,10 @@ import com.gamss.android.core.designsystem.theme.GamssTheme import com.gamss.android.domain.card.Card import com.gamss.android.domain.card.CardEntry import com.gamss.android.domain.emotion.EmotionCharacter +import com.gamss.android.feature.archive.component.CardDetailDialog import com.gamss.android.feature.archive.component.MonthSelector import com.gamss.android.feature.archive.component.PaperPile import com.gamss.android.feature.archive.component.YearMonthPickerSheet -import com.gamss.android.feature.calendar.component.CardDetailDialog import org.orbitmvi.orbit.compose.collectAsState import org.orbitmvi.orbit.compose.collectSideEffect import java.time.LocalDate @@ -58,9 +58,9 @@ fun ArchiveDetailScreen( ) { val state by viewModel.collectAsState() val context = LocalContext.current - val shareChooserTitle = stringResource(R.string.calendar_card_share_chooser_title) - val cardLoadFailedMessage = stringResource(R.string.calendar_card_load_error) - val discardFailedMessage = stringResource(R.string.calendar_card_discard_failure) + val shareChooserTitle = stringResource(R.string.archive_card_share_chooser_title) + val cardLoadFailedMessage = stringResource(R.string.archive_card_load_error) + val discardFailedMessage = stringResource(R.string.archive_card_discard_failure) LaunchedEffect(emotion) { viewModel.load(emotion) } @@ -80,36 +80,33 @@ fun ArchiveDetailScreen( state = state, onBackClick = onBackClick, onPaperClick = viewModel::selectCard, - onCardDismiss = viewModel::dismissCard, - onCardDiscard = viewModel::discardSelectedCard, - onCardConversationClick = viewModel::viewSelectedConversation, - onCardShare = { card -> shareCard(context, card, shareChooserTitle) }, onMonthClick = viewModel::showMonthPicker, + onClearClick = viewModel::showClearDialog, + ) + + ArchiveDetailOverlays( + state = state, onMonthSelect = viewModel::selectMonth, onMonthPickerDismiss = viewModel::dismissMonthPicker, - onClearClick = viewModel::showClearDialog, // 무엇을 비울지(감정별·달별·전체) 정해지기 전이라 확인도 닫기만 한다. onClearConfirm = viewModel::dismissClearDialog, onClearDismiss = viewModel::dismissClearDialog, + onCardDismiss = viewModel::dismissCard, + onCardDiscard = viewModel::discardSelectedCard, + onCardConversationClick = viewModel::viewSelectedConversation, + onCardShare = { card -> shareCard(context, card, shareChooserTitle) }, ) } +/** 항상 보이는 부분. 위에 겹쳐 뜨는 시트·다이얼로그는 [ArchiveDetailOverlays] 가 맡는다. */ @Composable private fun ArchiveDetailFrame( emotion: EmotionCharacter, state: ArchiveDetailState, onBackClick: () -> Unit, onPaperClick: (CardEntry) -> Unit, - onCardDismiss: () -> Unit, - onCardDiscard: () -> Unit, - onCardConversationClick: () -> Unit, - onCardShare: (Card) -> Unit, onMonthClick: () -> Unit, - onMonthSelect: (YearMonth) -> Unit, - onMonthPickerDismiss: () -> Unit, onClearClick: () -> Unit, - onClearConfirm: () -> Unit, - onClearDismiss: () -> Unit, ) { Scaffold( containerColor = GamssTheme.colors.white, @@ -127,10 +124,24 @@ private fun ArchiveDetailFrame( onClick = onMonthClick, modifier = Modifier.align(Alignment.TopCenter), ) - ArchiveDetailCards(state = state, onPaperClick = onPaperClick) + ArchiveDetailCards(cards = state.cards, onPaperClick = onPaperClick) } } +} +/** 셋 다 아무것도 안 뜬 상태가 기본이라, 프레임과 떼어 여기서만 켜고 끈다. */ +@Composable +private fun ArchiveDetailOverlays( + state: ArchiveDetailState, + onMonthSelect: (YearMonth) -> Unit, + onMonthPickerDismiss: () -> Unit, + onClearConfirm: () -> Unit, + onClearDismiss: () -> Unit, + onCardDismiss: () -> Unit, + onCardDiscard: () -> Unit, + onCardConversationClick: () -> Unit, + onCardShare: (Card) -> Unit, +) { if (state.isMonthPickerVisible) { YearMonthPickerSheet( selected = state.yearMonth, @@ -229,15 +240,18 @@ private fun ArchiveDetailTopBar( @Composable private fun ArchiveDetailCards( - state: ArchiveDetailState, + cards: ArchiveCards, onPaperClick: (CardEntry) -> Unit, ) { Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - when { - state.isLoading -> CircularProgressIndicator(color = GamssTheme.colors.gray700) - state.loadFailed -> EmptyMessage(textRes = R.string.archive_cards_load_failed) - state.cards.isEmpty() -> EmptyMessage(textRes = R.string.archive_cards_empty) - else -> PaperPile(cards = state.cards, onPaperClick = onPaperClick) + when (cards) { + ArchiveCards.Loading -> CircularProgressIndicator(color = GamssTheme.colors.gray700) + ArchiveCards.LoadFailed -> EmptyMessage(textRes = R.string.archive_cards_load_failed) + is ArchiveCards.Loaded -> if (cards.entries.isEmpty()) { + EmptyMessage(textRes = R.string.archive_cards_empty) + } else { + PaperPile(cards = cards.entries, onPaperClick = onPaperClick) + } } } } @@ -267,21 +281,12 @@ private fun ArchiveDetailPaperPilePreview() { state = ArchiveDetailState( emotion = EmotionCharacter.QUIRKY, yearMonth = YearMonth.of(2026, 7), - isLoading = false, - cards = List(24) { index -> PreviewCard.copy(indexInDate = index) }, + cards = ArchiveCards.Loaded(List(24) { index -> PreviewCard.copy(indexInDate = index) }), ), onBackClick = {}, onPaperClick = {}, - onCardDismiss = {}, - onCardDiscard = {}, - onCardConversationClick = {}, - onCardShare = {}, onMonthClick = {}, - onMonthSelect = {}, - onMonthPickerDismiss = {}, onClearClick = {}, - onClearConfirm = {}, - onClearDismiss = {}, ) } } diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt index 6721b786..533fa951 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailState.kt @@ -8,11 +8,16 @@ import java.time.YearMonth data class ArchiveDetailState( val emotion: EmotionCharacter? = null, val yearMonth: YearMonth, - val isLoading: Boolean = true, - val cards: List = emptyList(), - val loadFailed: Boolean = false, + val cards: ArchiveCards = ArchiveCards.Loading, val isMonthPickerVisible: Boolean = false, val isClearDialogVisible: Boolean = false, val selectedCard: Card? = null, val isCardLoading: Boolean = false, ) + +/** 종이 더미 자리가 가질 수 있는 상태. 셋이 겹칠 수 없어 플래그 조합 대신 하나로 든다. */ +sealed interface ArchiveCards { + data object Loading : ArchiveCards + data object LoadFailed : ArchiveCards + data class Loaded(val entries: List) : ArchiveCards +} diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index a6909ba4..374a0db5 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -61,9 +61,7 @@ class ArchiveDetailViewModel @Inject constructor( state.copy( yearMonth = yearMonth, isMonthPickerVisible = false, - isLoading = true, - cards = emptyList(), - loadFailed = false, + cards = ArchiveCards.Loading, ) } loadMonth(emotion, yearMonth) @@ -109,20 +107,15 @@ class ArchiveDetailViewModel @Inject constructor( postSideEffect(ArchiveDetailSideEffect.OpenChatRoom(conversationId)) } + /** 월별 응답은 모든 감정을 섞어 주므로 이 화면이 보고 있는 감정만 남긴다. */ private suspend fun Syntax.loadMonth( emotion: EmotionCharacter, yearMonth: YearMonth, ) { - when (val result = getCardsByMonth(yearMonth)) { - is AppResult.Success -> reduce { - state.copy( - isLoading = false, - loadFailed = false, - cards = result.data.filter { it.character == emotion }, - ) - } - - is AppResult.Failure -> reduce { state.copy(isLoading = false, loadFailed = true) } + val cards = when (val result = getCardsByMonth(yearMonth)) { + is AppResult.Success -> ArchiveCards.Loaded(result.data.filter { it.character == emotion }) + is AppResult.Failure -> ArchiveCards.LoadFailed } + reduce { state.copy(cards = cards) } } } diff --git a/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/CardDetailDialog.kt similarity index 88% rename from feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt rename to feature/archive/src/main/java/com/gamss/android/feature/archive/component/CardDetailDialog.kt index 2d970434..26f9aaed 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/calendar/component/CardDetailDialog.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/CardDetailDialog.kt @@ -1,4 +1,4 @@ -package com.gamss.android.feature.calendar.component +package com.gamss.android.feature.archive.component import android.content.res.Configuration import androidx.compose.foundation.clickable @@ -52,9 +52,9 @@ internal fun CardDetailDialog( character = card.character.toGamssEmotionCardCharacter(), title = stringResource(card.character.cardTitleRes()), description = card.summary, - primaryActionLabel = stringResource(R.string.calendar_card_discard), - secondaryActionLabel = stringResource(R.string.calendar_card_view_conversation), - shareActionLabel = stringResource(R.string.calendar_card_share), + primaryActionLabel = stringResource(R.string.archive_card_discard), + secondaryActionLabel = stringResource(R.string.archive_card_view_conversation), + shareActionLabel = stringResource(R.string.archive_card_share), onPrimaryActionClick = onDiscardClick, onSecondaryActionClick = onViewConversationClick, onShareClick = onShareClick, @@ -83,7 +83,7 @@ private fun CardCloseButton(onClick: () -> Unit) { ) { Icon( imageVector = Icons.Default.Close, - contentDescription = stringResource(R.string.calendar_card_close_description), + contentDescription = stringResource(R.string.archive_card_close_description), tint = GamssTheme.colors.gray300, modifier = Modifier.size(CloseIconSize), ) @@ -127,9 +127,9 @@ private fun CardDetailDialogPreviewContent() { character = GamssEmotionCardCharacter.ANGER, title = "오늘 화~나네", description = "설느닛람햄을 긱에자네에 신손 겅투히오의 흐랸비의 수매해으는 하어이", - primaryActionLabel = stringResource(R.string.calendar_card_discard), - secondaryActionLabel = stringResource(R.string.calendar_card_view_conversation), - shareActionLabel = stringResource(R.string.calendar_card_share), + primaryActionLabel = stringResource(R.string.archive_card_discard), + secondaryActionLabel = stringResource(R.string.archive_card_view_conversation), + shareActionLabel = stringResource(R.string.archive_card_share), onPrimaryActionClick = {}, onSecondaryActionClick = {}, onShareClick = {}, diff --git a/feature/archive/src/main/res/values/strings.xml b/feature/archive/src/main/res/values/strings.xml index 880682bf..6261555f 100644 --- a/feature/archive/src/main/res/values/strings.xml +++ b/feature/archive/src/main/res/values/strings.xml @@ -3,35 +3,29 @@ 감쓰 다시 보고 싶은 쓰레기통을 열어보세요 설정 + %1$s 쓰레기통 열기 + 뒤로 가기 - %1$s 쓰레기통 + %1$d월 %2$d일 카드 아직 남겨둔 이야기가 없어요. 이야기를 불러오지 못했어요. - %1$s 쓰레기통 열기 + 비우기 대화 전체 비우기 모든 대화 기록이 삭제돼요. 삭제한 내용은 다시 복구할 수 없어요. 취소 + 월 선택 월 선택 닫기 선택하기 %1$d년 %1$d월 - %1$d월 %2$d일 카드 - %1$d년 %2$d월 - 이전 달 - 다음 달 - %1$d년 %2$d월 %3$d일 - %1$d년 %2$d월 %3$d일, 오늘 - %1$d월 %2$d일의 카드 - 이 날짜에는 카드가 없어요. - 카드를 불러오지 못했어요. - 다시 시도 - 카드 상세 보기 - 카드 닫기 - 기록 버리기 - 대화보기 - 공유하기 - 카드 공유하기 - 기록을 버리지 못했어요. 다시 시도해주세요 + + 카드 닫기 + 기록 버리기 + 대화보기 + 공유하기 + 카드 공유하기 + 카드를 불러오지 못했어요. + 기록을 버리지 못했어요. 다시 시도해주세요 diff --git a/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt index 5509a646..a50b1cba 100644 --- a/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt +++ b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -28,13 +28,7 @@ class ArchiveDetailViewModelTest { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { - copy( - emotion = EmotionCharacter.ANGER, - isLoading = false, - cards = listOf(angerEntry), - ) - } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } } } @@ -46,13 +40,7 @@ class ArchiveDetailViewModelTest { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { - copy( - emotion = EmotionCharacter.ANGER, - isLoading = false, - loadFailed = true, - ) - } + expectState { copy(cards = ArchiveCards.LoadFailed) } } } @@ -65,7 +53,7 @@ class ArchiveDetailViewModelTest { viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } containerHost.showMonthPicker() expectState { copy(isMonthPickerVisible = true) } @@ -75,11 +63,10 @@ class ArchiveDetailViewModelTest { copy( yearMonth = previousMonth, isMonthPickerVisible = false, - isLoading = true, - cards = emptyList(), + cards = ArchiveCards.Loading, ) } - expectState { copy(isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } } assertEquals(previousMonth, repository.requestedMonths.last()) @@ -95,7 +82,7 @@ class ArchiveDetailViewModelTest { viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } containerHost.showMonthPicker() expectState { copy(isMonthPickerVisible = true) } @@ -118,7 +105,7 @@ class ArchiveDetailViewModelTest { viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } containerHost.selectCard(joyEntry) expectState { copy(isCardLoading = true) } @@ -139,7 +126,7 @@ class ArchiveDetailViewModelTest { viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } containerHost.selectCard(angerEntry) expectState { copy(isCardLoading = true) } @@ -159,7 +146,7 @@ class ArchiveDetailViewModelTest { viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } containerHost.selectCard(angerEntry) expectState { copy(isCardLoading = true) } @@ -185,7 +172,7 @@ class ArchiveDetailViewModelTest { viewModel.test(this) { containerHost.load(EmotionCharacter.ANGER) expectState { copy(emotion = EmotionCharacter.ANGER) } - expectState { copy(emotion = EmotionCharacter.ANGER, isLoading = false, cards = listOf(angerEntry)) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } containerHost.selectCard(angerEntry) expectState { copy(isCardLoading = true) } From 0353e09d00cabf72c8527017b0774fa043483796 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Wed, 19 Aug 2026 01:04:24 +0900 Subject: [PATCH 32/34] =?UTF-8?q?fix:=20=EB=8A=A6=EA=B2=8C=20=EC=98=A8=20?= =?UTF-8?q?=EC=9B=94=EB=B3=84=20=EC=9D=91=EB=8B=B5=EC=9D=B4=20=EC=A7=80?= =?UTF-8?q?=EA=B8=88=20=EB=B3=B4=EA=B3=A0=20=EC=9E=88=EB=8A=94=20=EB=8B=AC?= =?UTF-8?q?=EC=9D=84=20=EB=8D=AE=EB=8D=98=20=EB=AC=B8=EC=A0=9C=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 Orbit 은 intent 마다 코루틴을 띄우고 기다리지 않는다(RealContainer). 느린 달을 기다리는 사이 다른 달을 고르면 나중에 도착한 이전 달 응답이 목록을 덮어써, 셀렉터는 새 달인데 종이는 이전 달인 상태가 됐다. 그 종이를 누르면 이전 달 카드가 열린다. 응답을 반영하기 직전에 달과 감정이 그대로인지 다시 확인하고, 아니면 버린다. 게이트로 응답 순서를 뒤집는 테스트를 추가했다. --- .../feature/archive/ArchiveDetailViewModel.kt | 6 ++- .../archive/ArchiveDetailViewModelTest.kt | 47 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index 374a0db5..4fdc0a41 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -116,6 +116,10 @@ class ArchiveDetailViewModel @Inject constructor( is AppResult.Success -> ArchiveCards.Loaded(result.data.filter { it.character == emotion }) is AppResult.Failure -> ArchiveCards.LoadFailed } - reduce { state.copy(cards = cards) } + // intent 는 서로 병렬로 돈다. 느린 달을 기다리는 사이 다른 달로 옮겼다면, 늦게 온 응답이 + // 지금 보고 있는 달의 목록을 덮어써 셀렉터와 종이가 어긋난다. 그래서 덮기 직전에 다시 확인한다. + reduce { + if (state.yearMonth == yearMonth && state.emotion == emotion) state.copy(cards = cards) else state + } } } diff --git a/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt index a50b1cba..b32d4a6a 100644 --- a/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt +++ b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -9,7 +9,9 @@ import com.gamss.android.domain.card.DeleteCardUseCase import com.gamss.android.domain.card.GetCardsByDateUseCase import com.gamss.android.domain.card.GetCardsByMonthUseCase import com.gamss.android.domain.emotion.EmotionCharacter +import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Test @@ -184,6 +186,43 @@ class ArchiveDetailViewModelTest { } } + @Test + fun `늦게 온 이전 달 응답은 지금 보고 있는 달을 덮지 않는다`() = runTest { + val currentMonth = YearMonth.now(KoreanTimeZone) + val slowMonth = currentMonth.minusMonths(2) + val fastMonth = currentMonth.minusMonths(1) + val slowMonthGate = CompletableDeferred() + val repository = FakeCardRepository( + monthResult = AppResult.Success(emptyList()), + monthGates = mapOf(slowMonth to slowMonthGate), + monthResults = mapOf( + slowMonth to AppResult.Success(listOf(staleEntry)), + fastMonth to AppResult.Success(listOf(angerEntry)), + ), + ) + val viewModel = viewModel(repository) + val testScope = this + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(cards = ArchiveCards.Loaded(emptyList())) } + + // 응답이 게이트에 걸려 멈춰 있는 동안 다음 달을 고른다. + containerHost.selectMonth(slowMonth) + expectState { copy(yearMonth = slowMonth, cards = ArchiveCards.Loading) } + + containerHost.selectMonth(fastMonth) + expectState { copy(yearMonth = fastMonth, cards = ArchiveCards.Loading) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } + + // 뒤늦게 도착한 이전 달 응답이 지금 목록을 덮으면 소비되지 않은 상태가 남는다. + slowMonthGate.complete(Unit) + testScope.runCurrent() + expectNoItems() + } + } + private fun viewModel(repository: FakeCardRepository) = ArchiveDetailViewModel( getCardsByMonth = GetCardsByMonthUseCase(repository), getCardsByDate = GetCardsByDateUseCase(repository), @@ -194,6 +233,7 @@ class ArchiveDetailViewModelTest { val DATE: LocalDate = LocalDate.of(2026, 8, 15) val angerEntry = CardEntry(date = DATE, indexInDate = 0, character = EmotionCharacter.ANGER) + val staleEntry = CardEntry(date = DATE.minusMonths(2), indexInDate = 0, character = EmotionCharacter.ANGER) val joyEntry = CardEntry(date = DATE, indexInDate = 1, character = EmotionCharacter.JOY) val firstCardOfDay = card(id = 1L, character = EmotionCharacter.ANGER) @@ -214,6 +254,10 @@ class ArchiveDetailViewModelTest { private class FakeCardRepository( private val monthResult: AppResult>, private val dateResult: AppResult> = AppResult.Success(emptyList()), + /** 여기 담긴 달은 게이트가 열릴 때까지 응답을 붙잡는다. 늦게 도착하는 응답을 만들 때 쓴다. */ + private val monthGates: Map> = emptyMap(), + /** 달마다 다른 목록을 줘야 할 때만 채운다. 없는 달은 [monthResult] 로 답한다. */ + private val monthResults: Map>> = emptyMap(), ) : CardRepository { val requestedMonths = mutableListOf() @@ -227,7 +271,8 @@ private class FakeCardRepository( override suspend fun getCardsByMonth(yearMonth: YearMonth): AppResult> { requestedMonths += yearMonth - return monthResult + monthGates[yearMonth]?.await() + return monthResults[yearMonth] ?: monthResult } override suspend fun createCard( From c67b3ca49d360221061c7da418cc31d3dfc802bf Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Wed, 19 Aug 2026 01:04:24 +0900 Subject: [PATCH 33/34] =?UTF-8?q?fix:=20=EC=A2=85=EC=9D=B4=20=EB=8D=94?= =?UTF-8?q?=EB=AF=B8=EA=B0=80=20=EB=84=93=EC=9D=80=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=8F=A0=EB=A6=AC=EA=B3=A0=20=EC=9B=94=20?= =?UTF-8?q?=EC=85=80=EB=A0=89=ED=84=B0=EB=A5=BC=20=EA=B0=80=EB=A6=AC?= =?UTF-8?q?=EB=8D=98=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 시뮬레이션 폭은 시안 폭(402dp)으로 고정인데 종이를 TopStart 기준으로 놓아, 그보다 넓은 화면에서는 상단바·월 셀렉터만 전폭이고 종이만 왼쪽으로 쏠렸다. BoxWithConstraints 의 contentAlignment 은 TopStart 자식에 닿지 않아 무용이었다. 남는 폭의 절반만큼 밀어 축을 맞춘다. 한 달 카드가 많아 더미가 위로 넘치면 종이가 월 셀렉터를 덮고 탭까지 먹어 달을 바꿀 수 없었다. 셀렉터를 종이보다 나중에 그려 위로 올린다. --- .../gamss/android/feature/archive/ArchiveDetailScreen.kt | 4 +++- .../gamss/android/feature/archive/component/PaperPile.kt | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index 8cf3919c..8ba7f8e4 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -119,12 +119,14 @@ private fun ArchiveDetailFrame( }, ) { innerPadding -> Box(modifier = Modifier.padding(innerPadding).fillMaxSize()) { + ArchiveDetailCards(cards = state.cards, onPaperClick = onPaperClick) + // 종이가 쌓일 자리보다 나중에 둔다. 카드가 많아 더미가 위로 넘치면 종이가 셀렉터를 + // 가리고 탭까지 먹어 달을 못 바꾸게 된다. MonthSelector( yearMonth = state.yearMonth, onClick = onMonthClick, modifier = Modifier.align(Alignment.TopCenter), ) - ArchiveDetailCards(cards = state.cards, onPaperClick = onPaperClick) } } } diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt index 268dceb5..e072ea3e 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/component/PaperPile.kt @@ -33,7 +33,6 @@ internal fun PaperPile( modifier = Modifier .fillMaxSize() .padding(top = PileTopPadding), - contentAlignment = Alignment.TopCenter, ) { val scale = designScale(maxWidth) val density = LocalDensity.current @@ -41,6 +40,9 @@ internal fun PaperPile( val boundsHeightPx = with(density) { maxHeight.toPx() } val paperSizePx = with(density) { (PaperSize * scale).toPx() } val radiusPx = paperSizePx / 2f * PAPER_COLLISION_RADIUS_SCALE + // 시뮬레이션은 시안 폭(402dp) 안에서만 돈다. 더 넓은 화면에서는 그 폭을 가운데로 밀어야 + // 상단바·월 셀렉터와 축이 맞는다. 종이는 TopStart 기준이라 contentAlignment 로는 안 된다. + val pileOffsetX = with(density) { ((maxWidth - designWidth(scale)) / 2).toPx() } // 키에 화면 크기를 넣지 않는다. 회전 등으로 크기만 바뀌었을 때 이미 쌓인 종이가 다시 쏟아진다. val fall = remember(cards) { @@ -63,7 +65,7 @@ internal fun PaperPile( .size(PaperSize * scale) // 터치 영역도 그려진 자리를 따라가야 하므로 clickable 을 레이어 안쪽에 둔다. .graphicsLayer { - translationX = paper.x - paperSizePx / 2f + translationX = pileOffsetX + paper.x - paperSizePx / 2f translationY = paper.y - paperSizePx / 2f rotationZ = paper.rotationDegrees } From 0284ce6cb14e6027e338267e6b38e5511467a189 Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Wed, 19 Aug 2026 01:09:49 +0900 Subject: [PATCH 34/34] =?UTF-8?q?fix:=20=EB=B3=B4=EA=B4=80=ED=95=A8=20?= =?UTF-8?q?=EB=B9=84=EC=9A=B0=EA=B8=B0=EB=A5=BC=20=ED=8C=8C=EC=87=84=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=97=90=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 확인 다이얼로그의 빨간 비우기 버튼이 다이얼로그만 닫고 아무 일도 하지 않았다. "복구할 수 없어요" 라고 경고해 놓고 종이는 그대로 남고 안내도 없었다. 파쇄 화면(feature:carddelete)은 설정의 debug 진입점이 6817668a 에서 빠진 뒤로 MainScreen 에 등록만 되고 아무 데서도 열지 않는 상태였다. 비우기 확인이 그 화면을 열도록 OpenCardDelete 사이드이펙트로 잇는다. 삭제 자체는 파쇄 화면이 맡으므로 보관함은 UseCase 를 직접 부르지 않는다. 파쇄를 마치면 finishCurrentFlow 로 서브스택이 비워져 보관함 목록으로 돌아간다. --- .../com/gamss/android/app/main/MainScreen.kt | 1 + .../feature/archive/ArchiveDetailScreen.kt | 8 +++++--- .../archive/ArchiveDetailSideEffect.kt | 3 +++ .../feature/archive/ArchiveDetailViewModel.kt | 5 +++++ .../archive/ArchiveDetailViewModelTest.kt | 19 +++++++++++++++++++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt index a19ac586..e59dab7c 100644 --- a/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt +++ b/app/src/main/kotlin/com/gamss/android/app/main/MainScreen.kt @@ -136,6 +136,7 @@ private fun mainEntryProvider(navigator: Navigator) = entryProvider { emotion = key.emotion, onBackClick = navigator::goBack, onOpenConversation = { conversationId -> navigator.navigate(ChatRoomKey(conversationId)) }, + onNavigateToCardDelete = { navigator.navigate(CardDeleteKey) }, ) } entry(metadata = detailSlideTransition) { diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt index 8ba7f8e4..aabad586 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailScreen.kt @@ -54,6 +54,7 @@ fun ArchiveDetailScreen( emotion: EmotionCharacter, onBackClick: () -> Unit, onOpenConversation: (Long) -> Unit, + onNavigateToCardDelete: () -> Unit, viewModel: ArchiveDetailViewModel = hiltViewModel(), ) { val state by viewModel.collectAsState() @@ -67,6 +68,8 @@ fun ArchiveDetailScreen( viewModel.collectSideEffect { sideEffect -> when (sideEffect) { is ArchiveDetailSideEffect.OpenChatRoom -> onOpenConversation(sideEffect.conversationId) + ArchiveDetailSideEffect.OpenCardDelete -> onNavigateToCardDelete() + ArchiveDetailSideEffect.CardLoadFailed -> Toast.makeText(context, cardLoadFailedMessage, Toast.LENGTH_SHORT).show() @@ -88,8 +91,7 @@ fun ArchiveDetailScreen( state = state, onMonthSelect = viewModel::selectMonth, onMonthPickerDismiss = viewModel::dismissMonthPicker, - // 무엇을 비울지(감정별·달별·전체) 정해지기 전이라 확인도 닫기만 한다. - onClearConfirm = viewModel::dismissClearDialog, + onClearConfirm = viewModel::confirmClear, onClearDismiss = viewModel::dismissClearDialog, onCardDismiss = viewModel::dismissCard, onCardDiscard = viewModel::discardSelectedCard, @@ -175,7 +177,7 @@ private fun shareCard(context: Context, card: Card, chooserTitle: String) { context.startActivity(Intent.createChooser(sendIntent, chooserTitle)) } -/** 되돌릴 수 없는 삭제라 확인을 한 번 받는다. 무엇을 지울지는 [onConfirm] 을 넘기는 쪽이 정한다. */ +/** 되돌릴 수 없는 삭제라 파쇄 화면으로 넘기기 전에 확인을 한 번 받는다. */ @Composable private fun ClearConfirmDialog( onConfirm: () -> Unit, diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt index 6d4c3551..722b5162 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailSideEffect.kt @@ -4,4 +4,7 @@ sealed interface ArchiveDetailSideEffect { data class OpenChatRoom(val conversationId: Long) : ArchiveDetailSideEffect data object CardLoadFailed : ArchiveDetailSideEffect data object CardDiscardFailed : ArchiveDetailSideEffect + + /** 실제 삭제는 파쇄 화면이 맡는다. 여기서는 그 화면으로 넘기기만 한다. */ + data object OpenCardDelete : ArchiveDetailSideEffect } diff --git a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt index 4fdc0a41..476b32fb 100644 --- a/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt +++ b/feature/archive/src/main/java/com/gamss/android/feature/archive/ArchiveDetailViewModel.kt @@ -49,6 +49,11 @@ class ArchiveDetailViewModel @Inject constructor( reduce { state.copy(isClearDialogVisible = false) } } + fun confirmClear() = intent { + reduce { state.copy(isClearDialogVisible = false) } + postSideEffect(ArchiveDetailSideEffect.OpenCardDelete) + } + fun selectMonth(yearMonth: YearMonth) = intent { val emotion = state.emotion // 보고 있는 달을 다시 고르면 이미 쌓인 종이를 다시 쏟지 않고 시트만 닫는다. diff --git a/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt index b32d4a6a..0df13119 100644 --- a/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt +++ b/feature/archive/src/test/java/com/gamss/android/feature/archive/ArchiveDetailViewModelTest.kt @@ -223,6 +223,25 @@ class ArchiveDetailViewModelTest { } } + @Test + fun `비우기를 확인하면 다이얼로그를 닫고 파쇄 화면을 연다`() = runTest { + val viewModel = viewModel(FakeCardRepository(AppResult.Success(listOf(angerEntry)))) + + viewModel.test(this) { + containerHost.load(EmotionCharacter.ANGER) + expectState { copy(emotion = EmotionCharacter.ANGER) } + expectState { copy(cards = ArchiveCards.Loaded(listOf(angerEntry))) } + + containerHost.showClearDialog() + expectState { copy(isClearDialogVisible = true) } + + // 실제 삭제는 파쇄 화면이 맡으므로 여기서는 카드를 지우지 않는다. + containerHost.confirmClear() + expectState { copy(isClearDialogVisible = false) } + expectSideEffect(ArchiveDetailSideEffect.OpenCardDelete) + } + } + private fun viewModel(repository: FakeCardRepository) = ArchiveDetailViewModel( getCardsByMonth = GetCardsByMonthUseCase(repository), getCardsByDate = GetCardsByDateUseCase(repository),