Repository navigation
fix(home): 기록 카테고리 카드가 «모름» 을 0 으로 접지 않게 한다 (#700 일부) - #1104
Conversation
HomeTabViewModel 이 MindRecordCategory.entries 를 돌며 데일리질문·주간 리포트에 0 을 박아 넣고 있었다. 지금은 화면이 일기 카드만 그려 안 보일 뿐, 카드가 늘면 그 0 이 그대로 «기록 0건» 으로 노출된다. 목업 숫자는 눈에 띄지만 0 은 그럴듯한 거짓이라 사용자가 그대로 믿는다. - ViewModel·로딩 분기 모두 **값을 아는 카테고리만** map 에 담는다. - RecordCategoryCard.totalCount 를 Int? 로 열고, 모르면 대시로 그린다 — 수신자 홈(#952)·주간 요약(#562)과 같은 표기다. 시안 정본 확정이 필요한 카드 구성 자체는 이 커밋 범위 밖이다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1hyok
left a comment
There was a problem hiding this comment.
이슈 #700 의 3번 항목(«하드코딩된 0 카운트 제거 — 표시할 카테고리는 실카운트를, 표시하지 않을 카테고리는 map 에서 제외»)을 그대로 이행했다. totalCount: Int? 로 «모름» 과 «0건» 을 타입에서 가른 것이 맞는 방향이고, 로딩 상태의 emptyMap() 전환도 shimmer 가 덮는 구간이라 표시 변화가 없다.
주석이 근거로 든 «수신자 홈과 같은 표기» 도 실제로 확인했다 — receiver_home_section_count_unavailable 이 이미 같은 en dash 를 쓴다. blocking 없다.
검증
- CI: 필수 체크 11종 전부 green.
- 대시 표기 일치 실측:
feature/receiver/presentation/src/main/res/values/strings.xml:22이–(U+2013) 로 같다.HomeSectionCard.countText()·MindRecordStatCard가count?.toString() ?: stringResource(...)로 같은 규칙을 쓴다. RecordCategoryCard호출부 전수:HomeTabMindRecordLazyItems한 곳 —Int?로 넓혀도 다른 소비처가 깨지지 않는다.- 실기동 QA 해당 없음 — 표시 분기를 Robolectric 3건(«모름»·0건·천 단위)이 덮고, 현재 화면이 그리는 카드는
DIARY하나뿐이라 실제 노출 경로에 변화가 없다. 시안 대조 해당 없음 — 이슈 #700 본문대로 홈 시안 정본 자체가 미확정(3종 병존)이고, 이 PR 은 카드 구성이 아니라 카운트 산출만 건드린다.
지적
- [normal] 같은 값의 «모름» 문자열이 모듈마다 따로 선언된다 →
strings.xml:207인라인 코멘트. - [normal] 테스트가 리소스 대신 리터럴을 검사한다 →
RecordCategoryCountTest.kt:36인라인 코멘트.
| <string name="mindrecord_receiver_retry">다시 시도</string> | ||
| <string name="mindrecord_receiver_title">마음의 기록</string> | ||
| <!-- 카테고리 카드 기록 수를 아직 모를 때. en dash — 수신자 홈·주간 요약과 같은 표기 (#700·#952·#562). --> | ||
| <string name="mindrecord_home_category_count_unavailable">–</string> |
There was a problem hiding this comment.
[normal] 주석이 «수신자 홈·주간 요약과 같은 표기» 라고 적은 그대로, feature/receiver/presentation 의 receiver_home_section_count_unavailable 이 이미 같은 값(–)을 들고 있다. 여기서 세 번째가 생기면(주간 요약 #562 는 #1055 로 열려 있다) 같은 규칙이 서로 다른 세 리소스로 흩어진다.
두 모듈 다 core:ui 에 의존하므로 core_ui_count_unavailable 같은 이름으로 한 벌만 두는 편이 «규칙» 이라는 성격에 맞는다. 지금 당장 옮기지 않더라도, 세 번째가 붙기 전이 정리하기 가장 싼 시점이라 남긴다.
| AfternoteTheme { card(totalCount = null) } | ||
| } | ||
|
|
||
| composeRule.onNodeWithText("–").assertIsDisplayed() |
There was a problem hiding this comment.
[normal] 리소스 값을 리터럴로 다시 적어 두면 문자열을 바꿀 때 테스트가 소리 없이 갈린다 — en dash(–)와 hyphen(-)·em dash(—)는 눈으로 구분되지 않아서 특히 그렇다. 같은 파일의 activity.getString(R.string.mindrecord_home_category_count_unavailable) 로 잡으면 리소스와 함께 움직인다. (수신자 쪽 ReceiverHomeCountFallbackTest 도 같은 방식이라 새 규약은 아니다.)
덧붙여 58번 줄의 @androidx.compose.runtime.Composable 은 상단 import 로 올리면 나머지 애노테이션과 표기가 맞는다.
#700 의 3번(하드코딩 0 제거) 만 담는다. 1·2번(시안 정본 확정 · 카드 구성 재작성)은 디자이너 확정이 선행이라 뺐다 — 대신 확정에 쓸 실측을 아래에 남긴다.
무엇이 문제였나
지금은 화면이 일기 카드 하나만 그려서 보이지 않을 뿐, 카드가 늘면 그 0 이 그대로 «기록 0건» 으로 노출된다. 목업 숫자(
7같은)는 오히려 눈에 띄지만0은 그럴듯한 거짓이라 사용자가 그대로 믿는다 — #562·#952 에서 같은 이유로 대시 표기를 택했다.로딩 분기도 같은 자리였다:
MindRecordCategory.entries.associateWith { 0 }.무엇을 바꿨나
RecordCategoryCard.totalCount: Int?— 모르면 대시(–), 0 은 확정값이라 그대로 숫자로 그린다. 수신자 홈·주간 요약과 같은 규칙이고 en dash 도 맞췄다.회귀 가드
RecordCategoryCountTest3건 — 모름은 대시(0 은 존재하지 않음), 0건은 숫자, 1234 는1,234.시안 실측 — 1·2번 확정에 쓸 근거
이슈 본문의 시안 3종(
2372:52483·3628:18329·3628:18722)은 「정리 Screen Design」 페이지에 같은 화면이 다시 그려져 있다. 새 프레임 둘을 실제로 렌더해 확인했다.4327:990204327:99103타임레터 기록 남기러가기)TIME LETTERS MEMORIESMEMORIES즉 이슈가 «타임레터 NEXT STEP 이 애프터노트 카드 복제 목업» 이라고 짚은 부분은
4327:99103에서 고유 문구로 채워져 있다. 카테고리 카드는 두 프레임 모두 없다.정리 페이지가 정본이라면 확정 결과는 «카테고리 카드 제거 + 타임레터 NEXT STEP 신설 + MEMORIES → TIME LETTERS MEMORIES» 가 된다. 다만 그 페이지가 정본이라는 확인은 디자이너 몫이라 이 PR 에서 실행하지 않았다. 이슈에도 같은 내용을 남긴다.
검증
testDebugUnitTest:app:assembleDebug·:app:compileDebugAndroidTestKotlincompileDebugScreenshotTestKotlin(home · core:ui)baseline 재생성 불필요 — 홈 스크린샷 테스트는
DIARY to 8을 명시적으로 넘기고 로딩 분기는 shimmer 라, 그려지는 픽셀이 그대로다.실기동 QA: 못 했다. dev 서버가 오늘 점검 시간대라 응답하지 않는다(
curl15초 타임아웃). 대신 Robolectric 으로 세 경우(모름·0건·1234)를 실제 컴포지션에서 확인했다.