Skip to content

refactor(receiver): android.widget.Toast 잔여 3건 제거 — 서버 실패 2건은 #446 체계 합류, 영상 앱 없음 안내는 Snackbar·리소스화 #1391

Closed

Description

@OnlyReadOneBook

작업 유형

refactor — 동작 변경 없는 구조·책임·경계 개선

주 담당 모듈

receiver — 수신자 관리

개요

android.widget.Toast 실사용이 레포에 3건 남아 있고 전부 receiver 모듈이다 (PR #1336 이 afternote 쪽 1건을 Snackbar 로 전환한 뒤 기준, 나머지 파일의 "Toast" 는 주석·커스텀 컴포저블 이름뿐).

Toast 는 시스템 UI 라 앱 테마·시안을 안 타고, Compose semantics 에 안 잡혀 어떤 테스트로도 단언할 수 없으며, TalkBack 노출도 짧다. #664 가 이미 "repo convention = Snackbar" 로 판단한 전례가 있고, #446 으로 서버 작업 실패의 확정 표시 방식(모달 팝업 4종)까지 나온 지금은 Toast 가 설 자리가 없다. 3건을 성격별로 갈라 제거한다.

건별 처분:

  1. ReceiverHomeScreen.kt:173 — 내려받기 실패(ReceiverDownloadState.Failed) Toast. 서버 작업 실패라 정본은 공통 오류 안내의 상황별 문구·액션·적용 범위를 PM에게 확인한다 #446 확정 체계(공통 에러 팝업)다. 공통 오류 안내의 상황별 문구·액션·적용 범위를 PM에게 확인한다 #446 의 현황 표가 인라인·스낵바만 조사해 Toast 사용처는 누락돼 있으므로 이 건을 공통 오류 안내의 상황별 문구·액션·적용 범위를 PM에게 확인한다 #446 정렬 범위에 합류시킨다. 공통 팝업 컴포넌트가 나오기 전이라면 fix(afternote): 수신 애프터노트 상세 조회 실패를 '준비 중'으로 오표시 — 재시도 불가 #713 전례처럼 잠정 Snackbar 로 먼저 전환해도 된다(어느 쪽이든 Toast 는 제거).

  2. ReceiverAfternoteScreen.kt:66 — 모든 기록 내려받기 실패 Toast. 처분은 건 1 과 동일.

  3. MemorialReceivedDetailScreen 의 ReceiverVideoSection — 영상 실행 안내 Toast. 서버 실패가 아닌 로컬 환경 안내라 공통 오류 안내의 상황별 문구·액션·적용 범위를 PM에게 확인한다 #446 팝업 4종 어디에도 안 들어가고(재시도 무의미), Snackbar 가 맞다.

    2026-08-29 갱신 — PR fix(receiver): 수신 추억 노트 상세 영상 실행에 http/https 스킴 가드 이식 (#1394) #1395 머지 후 기준. 이 건이 원래 안고 있던 PackageManager.resolveActivity 사전 조회 갈래(Android 11+ 패키지 가시성 오탐)는 fix(receiver): 수신 추억 노트 상세가 영상 URL 을 스킴 검증 없이 ACTION_VIEW 로 실행 — 발신자발 위험 스킴이 수신자 기기에서 발화 #1394 범위에서 PR fix(receiver): 수신 추억 노트 상세 영상 실행에 http/https 스킴 가드 이식 (#1394) #1395 가 이미 «직접 시도 후 예외 처리»로 정합화했다. 옛 라인 번호 :185 도 그 PR 로 무효다. 이 이슈에 남은 몫은 아래 셋이다.

    • 채널 — fix(receiver): 수신 추억 노트 상세 영상 실행에 http/https 스킴 가드 이식 (#1394) #1395 가 신설한 launchReceivedMemorialVideo 의 안내 콜백 2개가 아직 Toast 를 띄운다. 둘 다 Snackbar 로 전환한다.

    • 문구가 성격이 다른 두 원인을 한 문장으로 덮는다 — 해소됨 (2026-08-29, PR fix(receiver): 수신 추억 노트 상세 영상 실행에 http/https 스킴 가드 이식 (#1394) #1395) — 그 콜백에는 두 갈래가 함께 도달했다:

      단일 문구 "영상을 재생할 수 있는 앱이 없습니다." 는 앞 갈래에 거짓이었다(앱 유무와 무관하게 URL 이 막힌 것). 채널만 바꾸고 리소스화하면 거짓 안내가 리소스로 굳으므로, 거짓 갈래를 만든 fix(receiver): 수신 추억 노트 상세 영상 실행에 http/https 스킴 가드 이식 (#1394) #1395 가 같은 PR 에서 콜백을 onRejected(URL 불합격) / onUnavailable(실행 거부) 로 갈라 문구를 둘로 나눴다. 현행 문구는 각각 "영상 주소가 올바르지 않아 재생할 수 없습니다." / "영상을 재생할 수 있는 앱이 없습니다." (둘 다 하드코딩). 이 이슈에 남은 건 채널·리소스화·테스트뿐이며, 갈래 비혼입은 ReceivedMemorialVideoLauncherTest 가 교차 0건으로 단언한다.

    • 리소스화 — 두 문구 모두 하드코딩을 제거한다. 작성자 쪽 feature_afternote_memorial_video_no_app 은 갈래가 하나뿐이라 그대로 못 쓴다. 단 모듈 표기 정정 — 이 화면은 feature/receiver/presentation 이 아니라 feature/afternote/presentation 소속이고(…presentation.receiver.detail 패키지, R 도 com.afternote.feature.afternote.presentation.R), 그 모듈에 resourcePrefix 설정은 없다. 같은 모듈에 receiver_ 접두어 관례(receiver_ic_play_arrow 등)를 따라 추가한다.

완료 조건:

자식 이슈

No response

참고

Activity

  1. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:receiver수신자 관리 기능 영역
    on Aug 28, 2026
  2. OnlyReadOneBook commented on Aug 28, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    건 3 관련 — #1394 / PR #1395 가 같은 지점(MemorialReceivedDetailScreen 영상 클릭)을 보안 가드(스킴 검증) 목적으로 먼저 만졌다. 건 3 에 적힌 «resolveActivity 사전 조회 → 직접 시도 후 예외 처리 정합화»는 그 PR 이 선반영했고, Toast→Snackbar 전환·문구 리소스화·표출 Compose 테스트는 그대로 이 이슈 몫으로 남아 있다 (안내 채널·문구 현행 유지). 착수 시 develop 의 launchReceivedMemorialVideo 기준으로 보면 된다 — «로직 공유도 검토» 갈래에는 작성자 판(PR #1336 launchMemorialVideo)과 수신자 판이 이제 실제로 두 벌 있다.

  3. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Aug 29, 2026
  4. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Aug 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:receiver수신자 관리 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions