You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(afternote): 추억 노트 미디어 갤러리 피커 취소가 기존 첨부를 지운다 — 촬영 경로와 어긋난 갈래, 수정 모드는 서버 영상까지 소실 #1113
애프터노트 에디터(추억 노트)의 추억 노트 미디어 슬롯에서 갤러리 피커를 취소하면 이미 붙어 있던 첨부가 지워진다.
갤러리 런처가 취소 결과(uri == null)를 "선택 없음"으로 그대로 흘려보내, 폼 갱신 콜백이 기존 값을 null 로 덮어쓴다.
// MemorialMediaSourceState.kt — rememberMemorialMediaSourceStateval photoGalleryLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri:Uri?->
onPhotoSelected(uri?.toString()) // ← 취소면 null 이 그대로 setMemorialPhoto 로 들어간다
}
val videoGalleryLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri:Uri?->
onVideoSelected(uri?.toString())
}
같은 파일의 촬영 경로는 이미 성공했을 때만 반영한다(if (captured && uri != null) …). 즉 한 화면의 두 갈래가 어긋나 있고, 어긋난 쪽이 갤러리다.
재현
추억 노트 작성 → 영정사진(또는 장례식에 남길 영상) 슬롯 탭 → 갤러리에서 선택 → 파일 선택
같은 슬롯을 다시 탭 → 갤러리에서 선택 → 아무것도 고르지 않고 뒤로가기/취소
1에서 붙인 첨부가 사라져 있다
영향
슬롯
취소가 지우는 것
결과
영정사진
pickedPhotoUri
신규 작성은 방금 고른 사진이 소실. 수정 모드는 displayPhotoUri() = pickedPhotoUri ?: photoUrl 이라 예전 서버 사진으로 되돌아간다(바꾼 줄 알고 저장하면 옛 사진이 그대로 남음)
장례식에 남길 영상
videoUrl + thumbnailUrl
videoUrl 이 로컬 pick·서버 prefill 을 겸하는 단일 칸이라 수정 모드에서 서버 영상까지 지워진다. 이 상태로 저장하면 videoMediaInput(null) → MediaInput.None 이라 payload 의 영상 URL 이 null 로 나가 서버에서도 영상이 떨어진다
첨부를 지우는 별도 수단은 화면에 없다(MemorialPhotoUpload·MemorialVideoUpload 모두 추가/변경 탭만 있음). 그래서 취소로 지워진 값은 되돌릴 길이 없고, 반대로 취소가 사실상 유일한 삭제 경로로 쓰이고 있었다 — 삭제 수단 자체는 별도 이슈로 분리한다.
해결 방향
갤러리 취소는 아무 일도 일으키지 않는다 — 촬영 경로(captured == false)와 같은 규칙으로 맞춘다.
onPhotoSelected/onVideoSelected 를 (String?) -> Unit → (String) -> Unit 으로 좁혀 "취소가 null 로 흘러드는" 형태를 타입이 막게 한다. setMemorialPhoto/setMemorialVideo 는 (String?) -> Unit 이라 반공변으로 그대로 들어간다.
본문 '해결 방향' 의 회귀 테스트 항목은 철회한다. 유닛테스트 seam 을 만들려면 Uri? 를 우리 시그니처로 끌어올려야 하는데, 그러면 uri.toString()(= Any?.toString()) 이 컴파일되는 구멍이 새로 생기고 테스트는 그 구멍을 지키게 된다. 런처 람다에서 ?.let 으로 접으면 it 이 Uri 로 좁혀져 구멍 자체가 표현되지 않는다 — 가드는 타입이 맡는다. PR #1116.
changed the title [-]fix(afternote): 추모 미디어 갤러리 피커 취소가 기존 첨부를 지운다 — 촬영 경로와 어긋난 갈래, 수정 모드는 서버 영상까지 소실[/-][+]fix(afternote): 추억 노트 미디어 갤러리 피커 취소가 기존 첨부를 지운다 — 촬영 경로와 어긋난 갈래, 수정 모드는 서버 영상까지 소실[/+]on Aug 25, 2026
Activity
1hyok commentedon Aug 25, 2026
삭제 수단 부재는 #1114 로 분리했다. 온보딩 프로필 사진의 같은 결함은 #1115.
fix(afternote): 추모 미디어 갤러리 취소가 기존 첨부를 지우지 않게
1hyok commentedon Aug 25, 2026
본문 '해결 방향' 의 회귀 테스트 항목은 철회한다. 유닛테스트 seam 을 만들려면
Uri?를 우리 시그니처로 끌어올려야 하는데, 그러면uri.toString()(=Any?.toString()) 이 컴파일되는 구멍이 새로 생기고 테스트는 그 구멍을 지키게 된다. 런처 람다에서?.let으로 접으면it이Uri로 좁혀져 구멍 자체가 표현되지 않는다 — 가드는 타입이 맡는다. PR #1116.fix(afternote): 추억 노트 미디어 갤러리 취소가 기존 첨부를 지우지 않게
[-]fix(afternote): 추모 미디어 갤러리 피커 취소가 기존 첨부를 지운다 — 촬영 경로와 어긋난 갈래, 수정 모드는 서버 영상까지 소실[/-][+]fix(afternote): 추억 노트 미디어 갤러리 피커 취소가 기존 첨부를 지운다 — 촬영 경로와 어긋난 갈래, 수정 모드는 서버 영상까지 소실[/+]