Skip to content

미디어 선택 시트의 화면별 규격 통일 범위를 PM에게 확인한다 #642

Closed as not planned

Description

@1hyok

작업 유형

enhancement — 신규 기능·기존 기능 개선

주 담당 모듈

core — 코어

개요

과거 '디자인 승인 게이트 해제'와 공용 시안을 모든 화면에 자동 적용한다는 FE 결정을 철회한다. 기존 댓글에 기록된 #1605의 core 승격·receiver/afternote 이관은 다시 구현하지 않는다. 미확정 화면 치환과 새 API 신설 예약을 제거한다.

PM 확인 사항

timeletter 등 기존 시트와 공용 시안의 간격·타이포·색·디바이더·컨테이너 차이를 모두 통일할지, 유지할 변형이 있는지 PM에게 확인한다. #1613/#1615의 다른 담당자 범위는 변경하지 않는다. 이미 확정된 기능·항목을 바꾸거나 폐기된 음성 기능을 다시 넣지 않는다.

완료 기준

PM의 명시적 답변·적용 범위·근거를 기록한다. 미답변이나 과거 FE 재량을 승인으로 보지 않는다. 디자이너에게 질문하지 않는다. 확정 전 구현 체크리스트·기존 코드 재개 예약을 제거하고 결정 후 필요한 작업만 다시 정한다.

Activity

  1. self-assigned this
    on Jul 31, 2026
  2. added theissue type on Jul 31, 2026
  3. 1hyok commented on Aug 25, 2026

    @1hyok
    CollaboratorAuthor

    승격 대상이 4중이 됐습니다 — #369(PR #1112)에서 애프터노트 에디터에 네 번째 구현을 추가했습니다.

    feature/afternote/.../author/editor/memorial/MemorialMediaSourceBottomSheet.kt (153줄) — 영정 사진·장례식 영상 슬롯의 소스 선택 시트. 헤더 "미디어 추가하기", 옵션 2개(갤러리 / 촬영), ModalBottomSheet 래핑은 같은 파일의 MemorialMediaSourceSheet 가 담당. 호출부는 AfternoteEditorScreen.kt 1곳.

    시각 규격은 이 이슈가 "최신 두 구현이 서로 일치한다"고 적은 쪽(gap 10dp·bodyBase·gray6 헤더·gray3 디바이더)을 그대로 따랐습니다 — DocumentSourceBottomSheet 를 베껴 왔습니다. 즉 드리프트를 늘리진 않았지만 중복 줄 수는 늘렸습니다.

    승격 API 안에 반영할 점 하나: 이 시트는 옵션 목록이 호출 시점 상태에 따라 갈립니다(사진 슬롯이면 "사진 촬영", 영상 슬롯이면 "영상 촬영" — 아이콘도 다름). 제안된 items: List<MediaSheetItem> 시그니처면 호출부가 목록을 만들어 넘기는 형태라 그대로 수용됩니다. 별도 확장은 필요 없어 보입니다.

    이 이슈가 먼저 가면 승격 대상은 4곳, #1118(추모 음성 녹음)이 먼저 가면 이 시트에 옵션이 하나 더 붙습니다.

  4. 1hyok commented on Aug 25, 2026

    @1hyok
    CollaboratorAuthor

    본문의 Figma 링크를 현행 노드로 고쳤습니다 — 495-16938 → 4327-72281.

    옛 노드는 파일의 back up 페이지에 있는 사본입니다. 두 노드 다 살아 있고 렌더도 같아서 링크가 깨진 티가 안 나는데, 디자이너가 손대는 건 정리 Screen Design 쪽이라 옛 노드를 보고 있으면 변경을 놓칩니다.

    REST 로 훑어 보니 코드 안의 Figma 참조 3개가 전부 back up 페이지를 가리키고 있습니다:

    위치 노드 페이지
    mindrecord/.../MediaSelectBottomSheet.kt:38 495:16938 back up
    afternote/.../AfternoteDisplayRes.kt:40 34:3342 back up
    afternote/.../MessageSection.kt:24 3628:17591 back up

    세 건 다 #1119(주석 정합화)에 체크리스트로 넣어 두었습니다. MediaSelectBottomSheet.kt:38 은 마크다운 링크가 아니라 Figma 노드 495:16938 이라는 맨텍스트라 figma.com grep 에 안 잡힙니다 — 쓸이할 때 노드 번호로 찾아야 합니다.

  5. changed the title [-]refactor(core): 미디어 선택 바텀시트 3중 구현을 core:ui 로 승격 — 시안 확정 선행[/-] [+]refactor(core): 미디어 선택 바텀시트 4중 구현을 core:ui로 승격[/+] on Aug 28, 2026
  6. changed the title [-]refactor(core): 미디어 선택 바텀시트 4중 구현을 core:ui로 승격[/-] [+]미디어 선택 바텀시트 4중 구현을 core:ui로 승격[/+] on Aug 28, 2026
  7. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:core공용 코어·네트워크 기능 영역
    and removed
    enhancementNew feature or request
    on Aug 28, 2026
  8. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Aug 30, 2026
  9. 1hyok commented on Aug 30, 2026

    @1hyok
    CollaboratorAuthor

    진행 상황 — core 승격은 끝났고 남은 건 두 모듈 치환이다 (2026-08-30)

    PR #1605 가 core:ui 신설 + 내 담당 모듈 호출부 2곳 치환까지 끝냈다. Closes 대신 Refs 로 건 이유는 아래 두 갈래가 남아서다.

    갈래 상태
    core:ui 승격 (sheet/MediaSelectSheet.kt 신설) ✅ PR #1605
    receiver DocumentSourceBottomSheet 이관 + 파일 삭제 ✅ PR #1605
    afternote MemorialMediaSourceBottomSheet 본문 치환 ✅ PR #1605
    timeletter 치환 ⬜ #1613 (koongmai)
    mindrecord 치환 ⬜ #1615 (Sadturtleman)

    셋이 다 끝나면 이 이슈가 닫힌다.

    본문과 실제가 어긋난 곳 3건 — 착수 전에 읽을 것

    1. 제목의 「4중」이 맞고 본문 목록이 3개뿐이었다. 빠져 있던 네 번째가 feature/afternote/.../memorial/MemorialMediaSourceBottomSheet.kt 다. 내 담당이라 PR refactor(core,receiver,afternote): 미디어 선택 바텀시트를 core:ui 로 승격한다 (#642) #1605 에서 같이 이관했다 — 하나만 남기면 이 이슈가 경고한 반쪽 승격(FixedRightPopupPositionProvider 전례)이 된다.
    2. DocumentUploadScreen.kt 는 이미 feature/receiver 로 옮겨졌다 (refactor(afternote): 수신자 흐름 58개 파일을 feature:receiver 로 이전 — 애프터노트 모듈이 타 도메인 열람 관문 소유 #615 완료). 본문은 feature/afternote/.../receiver/deliveryverification/ 경로로 적고 있다.
    3. 「아이콘을 cross-feature 로 못 가져와 대체했다」는 낡은 서술이다. refactor(core): 동일 화살표 렌더링을 기존 ArrowIcon에 위임한다 #635 가 이미 정리해 코드는 진작 core 아이콘을 쓰고 있었고, 네 아이콘 전부 core 에 있어 아이콘 이관 자체가 불필요했다.

    신설 API — 항목 개수를 계약에 안 박았다

    @Immutable
    data class MediaSheetItem(
        @param:DrawableRes val iconRes: Int,
        val label: String,
        val onClick: () -> Unit,
        val iconTint: Color = Color.Unspecified,   // 기본 iconBk
        val labelColor: Color = Color.Unspecified, // 기본 gray9
    )
    
    @Composable fun MediaSelectSheetContent(items, modifier, title, bottomSpacing)  // 본문
    @Composable fun MediaSelectBottomSheet(onDismiss, items, modifier, title, sheetState)  // 래퍼

    items: List<MediaSheetItem> 이므로 #1118 의 음성(AUDIO) 갈래는 호출부에서 원소 하나 더 넣으면 끝이고 core 는 안 바뀐다. iconTint/labelColor 는 투기가 아니라 실제 요구다 — 추억 노트 시트의 "삭제" 항목이 error 색이다.

    시안 정본은 4327:72281 이고, 노드 지오메트리 실측표는 PR #1605 본문에 있다. 시안 값이 전부 정수라 소수점 dp 는 없었다.

  10. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Aug 31, 2026
  11. changed the title [-]미디어 선택 바텀시트 4중 구현을 core:ui로 승격[/-] [+]미디어 선택 시트의 화면별 규격 통일 범위를 PM에게 확인한다[/+] on Sep 12, 2026
  12. 1hyok commented on Sep 13, 2026

    @1hyok
    CollaboratorAuthor

    PM 전건호에게 Figma 댓글로 질문했다(2026-09-13). 이 이슈는 그동안 PM 확인 대기로 분류돼 있었지만 실측해 보니 어느 채널에도 발신 기록이 없었다. 이번이 첫 발신이다.

    • 질문: https://www.figma.com/design/UP9ZR186jHvRBicjA2SOea/?node-id=4327-72281#1923877305
    • 앵커: 4327:72281 COMPONENT Property 1=media_select — 정리 Screen Design#4327:43064 > SECTION 타임레터#4327:99019 > SECTION 미디어 추가 바텀시트 모음#4638:39892 > COMPONENT_SET 바텀시트#4327:72280
    • 멘션은 message_meta 로 보내 알림이 가도록 했다. 평문 @이름 은 알림이 가지 않는다.

    물은 것은 묵은 본문의 질문을 그대로 옮긴 것이 아니라 origin/develop 86ab223 실코드와 현재 시안으로 다시 벼린 것이다.

    본문에 있었지만 이번 질문에서 뺀 축:

    1. mindrecord 치환 축 — refactor(mindrecord): 미디어 선택 시트를 core:ui MediaSelectSheet 로 이관 (#642 인계) #1615 가 2026-09-03 완료라 develop 이 이미 공용을 쓴다. 2) receiver·afternote 이관 축 — PR refactor(core,receiver,afternote): 미디어 선택 바텀시트를 core:ui 로 승격한다 (#642) #1605 머지로 끝났다. 3) 항목 구성과 음성 갈래 — 추억 노트 미디어 음성 녹음 첨부 — #369 에서 서버 계약 부재로 빠진 갈래 #1118(추억 노트 음성 녹음)이 2026-09-11 NOT_PLANNED 로 닫혔고 본문도 "폐기된 음성 기능을 다시 넣지 않는다"고 못박아 물음에서 뺐다. 4) "화면별로 유지할 변형이 있는지" 라는 열린 갈래 — 정본 시안의 media_select 변형이 하나뿐이라 변형을 지지할 근거가 0건이다. 그래서 남은 한 화면(타임레터)에 대한 예·아니오로 좁혔다.
  13. 1hyok commented on Sep 13, 2026

    @1hyok
    CollaboratorAuthor

    타임레터 판과 core 정본의 규격 차이 실측 (2026-09-13)

    PM 질문을 "남은 한 화면(타임레터)을 공용으로 통일할까"의 예·아니오로 좁혀 발신했는데, 그 예·아니오가 결정하는 픽셀 목록이 이 이슈 어디에도 없다. 그래서 지금 확정할 수 있는 것만 실측해 둔다. "통일"이면 이 표가 #1613 의 작업 지시가 되고, "유지"면 이 표가 그대로 타임레터 변형 명세가 된다. 어느 쪽이든 다음 착수자가 코드를 다시 뜯을 필요는 없다.

    근거는 전부 origin/develop 7d87aa3 실코드다. 시안 정본은 4327:72281 이고, 아래 표는 시안이 아니라 develop 두 파일을 직접 읽어 낸 값이다.

    약어: MBS = feature/timeletter/.../component/MediaBottomSheetContent.kt, MSS = core/ui/.../sheet/MediaSelectSheet.kt, TLW = feature/timeletter/.../screen/sender/TimeLetterWriteScreen.kt.

    축 timeletter core 정본
    행 안쪽 여백 horizontal 20 / vertical 18dp (MBS:96) 사방 16dp + 상위 Column horizontal 20dp (MSS:87, 152)
    아이콘 좌측 시작 20dp 36dp (20 + 16)
    행 높이 24 + 18 + 18 = 60dp (지역 ic_image·ic_file 둘 다 intrinsic 24dp) 24 + 16 + 16 = 56dp (MSS:160)
    아이콘과 문구 간격 16dp (MBS:98) 10dp (MSS:154)
    아이콘 그리기 Image, tint 없음, size 지정 없음 (MBS:100-103) Icon, iconBk tint, 24dp (MSS:156-161)
    타이포 style 미지정이라 테마의 ProvideTextStyle(bodyLargeR) = 18/22 (Theme.kt:74, AfternoteTypography.kt:139-147) bodyBase = 16/24 (MSS:103, 164)
    색 미지정(LocalContentColor 기본) 헤더 gray6 #757575, 문구 gray9 #212121 (MSS:104, 165)
    디바이더 HorizontalDivider M3 기본, 좌우 인셋 0이라 시트 전폭 (MBS:48, 54, 60, 66) 행마다 bottomBorder 1dp gray3 #E0E0E0, 좌우 인셋 20dp (MSS:151)
    헤더 여백 vertical 12dp (MBS:39) 상단 8, 핸들, 위 14, 아래 18 (MSS:90-106)
    드래그 핸들 ModalBottomSheet 기본 32×4 (TLW:352-356, dragHandle 미지정) 본문이 직접 그리는 40×4 gray3, 래퍼는 dragHandle = null (MSS:90-99, 135)
    컨테이너 색 Color.White 원시값 (TLW:355) gray1 #FAFAFA (MSS:133)
    하단 여백 32dp (MBS:68) bottomSpacing 기본 32dp (MSS:81). 유일하게 같은 축
    문구 출처 하드코딩 5개, 헤더 1 + 항목 4 (MBS:35, 45, 51, 57, 63) core_ui_media_sheet_{title,image,voice,file,link} 가 글자까지 동일 (core/ui strings.xml:76-80)

    디바이더 색에 한 줄 덧붙인다. 저장소 전체 .kt 에 MaterialTheme( 호출이 0건이라 timeletter 판 디바이더는 M3 기본 색 스킴의 outlineVariant 로 떨어진다. 앱 테마가 지정한 색이 아니다.

    다크는 비교에서 뺐다. AfternoteTheme 의 isDarkTheme 기본값이 false 로 못박혀 있고 ThemeDarkModeLockTest·LightSystemBarLockKonsistTest 가 그걸 지키고 있어서, 지금 화면에 드러나는 차이는 라이트뿐이다.

    #1613 델타 목록에 없는 축 3건

    #1613 본문의 6줄(행 세로 패딩·gap·헤더 패딩·타이포/색·디바이더·Image → Icon) 말고 다음 3건이 더 바뀐다. 본문 치환만 하고 이 3건을 빼면 화면이 시안과 안 맞는다.

    1. 드래그 핸들이 둘이 된다. refactor(timeletter): 미디어 선택 시트를 core:ui MediaSelectSheet 로 이관 (#642 인계) #1613 은 "자체 sheetState 를 유지하니 본문(MediaSelectSheetContent) 쪽을 쓴다"고만 적었는데, 본문이 핸들을 직접 그리는 반면 TLW:352 의 ModalBottomSheet 는 dragHandle 을 안 넘겨 기본 핸들도 같이 그린다. 선례는 afternote 쪽이고 거기선 래퍼가 dragHandle = null 을 박아 뒀다(MemorialMediaSourceState.kt:244).
    2. 컨테이너 색 Color.White → gray1 (TLW:355).
    3. 행 가로 인셋 20 → 36dp, 디바이더 좌우 인셋 0 → 20dp. refactor(timeletter): 미디어 선택 시트를 core:ui MediaSelectSheet 로 이관 (#642 인계) #1613 은 디바이더를 색과 두께로만 적었다.

    #1613 대상표에서 고칠 것 3건

    다른 담당자 범위라 #1613 본문은 손대지 않았다. 착수 전에 여기를 읽으면 된다.

    1. ic_file 은 정리 대상이 아니다. 시트를 치환해도 TLW:567 의 EditorBlock.File 칩이 계속 쓴다. 참조가 0건이 되는 것은 ic_image 하나뿐이고, 그건 지금 MBS:44 한 곳에서만 쓰인다.
    2. 완료 조건의 "참조 0건이 된 timeletter 지역 아이콘·문자열 리소스 정리"에서 문자열 쪽은 대상이 없다. 시트 문구 5개가 전부 코드 하드코딩이고 timeletter strings.xml 에 대응 항목이 없다.
    3. 호출부 줄 번호 TimeLetterWriteScreen.kt:260 은 작성 시점(2026-08-30)엔 맞았지만 지금은 ModalBottomSheet 352, MediaBottomSheetContent 357 이다. 그 사이 TLW 에 389줄이 들어왔다. 음성 갈래도 audioLauncher.launch("audio/*") 에서 onOpenVoiceRecorder() 로 바뀌었다(TLW:362-365). MBS 자체는 2026-08-28 이후 그대로라 위 표의 수치는 refactor(timeletter): 미디어 선택 시트를 core:ui MediaSelectSheet 로 이관 (#642 인계) #1613 작성 시점과 같다.

    착수 상태

    열린 PR 62건의 제목·본문·브랜치명을 전수 검색했다. #642·#1613·MediaBottomSheet·MediaSelectSheet·MediaSheetItem·"미디어 추가"를 무는 PR 0건이고, 원격에 1613 브랜치도 없다. 타임레터를 건드리는 열린 PR 은 #1967·#1905·#1708·#1365 네 건인데 TLW 를 여는 것은 #1365 하나뿐이고, 그 diff 는 로딩 실패 Scaffold 와 isSubmitting 배선만 건드리지 시트 블록(351-377)에는 들어오지 않는다. 지금 착수해도 충돌하는 작업은 없다.

    본문과 develop 실태가 어긋난 곳

    PM 답변은 2026-09-13 발신분이 아직 도착 전이다. 코드는 내지 않는다. 남은 갈래가 timeletter 치환 하나이고 그건 #1613(koongmai) 범위이며, 본문도 확정 전 구현을 금지한다.

  14. 1hyok commented on Sep 18, 2026

    @1hyok
    CollaboratorAuthor

    PM 결정 대기 항목은 깃허브 이슈로 두지 않고 피그마 질문 한 자리에만 둔다(2026-09-18 결정). 이 이슈의 질문은 피그마 스레드에 걸려 있다: https://www.figma.com/design/UP9ZR186jHvRBicjA2SOea/?node-id=4327-72281#1923877305 답이 오면 그 답을 근거로 구현 이슈를 새로 만든다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:core공용 코어·네트워크 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions