Skip to content

refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관 #1696

Closed

Description

@OnlyReadOneBook

작업 유형

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

주 담당 모듈

timeletter — 타임레터

개요

배경

최종 앱 루트 Navigation 3 전환과 독립적으로 타임레터 담당 범위의 화면 등록·백스택·이전 엔트리 ViewModel 접근을 자체 Nav3 entry 계약으로 바꾼다.

현재 TimeLetterNavGraph는 previousBackStackEntry와 특정 write/home 엔트리를 ViewModel owner로 사용한다. 단순 destination DSL 교체가 아니라 작성 상태 공유·수신인 선택 결과·필터 상태·정리 시점을 함께 보존해야 한다.

범위

  • Route.TimeLetter 하나를 기존 루트 Nav2와의 임시 경계로 유지하고, 타임레터 내부 화면을 NavDisplay와 로컬 NavBackStack으로 이관한다.
  • TimeLetterRoute를 Nav3 key 계약으로 옮기고 TimeLetterNavGraph의 destination 등록을 entryProvider로 대체한다.
  • TimeLetterWriteViewModel과 TimeletterViewModel의 공유 범위·동일성·정리 시점을 명시적인 Nav3 entry owner 또는 상태 호이스팅으로 보존한다.
  • previousBackStackEntry/getBackStackEntry를 이용한 이전 화면 ViewModel 변경을 타입 안전한 결과·상태 계약으로 교체한다.
  • 작성, 임시저장, 상세, 수신인 선택, 필터의 back 체인과 route 인자·화면 상태 복원을 보존한다.
  • 다른 피처로 나가는 이동은 명시적 경계 콜백으로 반환하며 다른 피처 back stack을 직접 조작하지 않는다.
  • 로컬 스택 깊이에 따른 바텀바 표시 상태를 앱 셸에 최소 계약으로 전달한다.

완료 조건

  1. 타임레터 presentation 내부에서 Navigation 2 destination DSL과 이전 NavBackStackEntry 직접 접근을 제거한다.
  2. 기존 루트 Nav2 아래에서 타임레터 전체 흐름이 동작하고, 로컬 스택 바닥의 back은 루트로 정확히 전파된다.
  3. 작성·홈 ViewModel 상태는 필요한 화면 사이에서만 유지되고 해당 흐름 제거 시 정리된다.
  4. 수신인 선택 등 화면 결과가 정확히 한 번 소비되며 프로세스 재생성 뒤에도 route·필요 상태가 복원된다.
  5. 탭 이탈·복귀 시 현재 타임레터 화면과 rememberSaveable 상태가 현행 계약대로 복원된다.
  6. 관련 유닛·Robolectric·androidTest 및 :app:compileDebugUnitTestKotlin이 통과한다.
  7. #1702가 소비할 entry/boundary 계약을 이슈 또는 코드 문서에 남긴다.

경계와 중복

  • 앱 루트 NavHost → NavDisplay 교체와 다른 피처 이관은 이 이슈 범위가 아니다.
  • #1301이 같은 navigation/actions 파일의 단순 back 위임을 다룬다. 착수 전에 최신 상태를 확인해 #1301을 먼저 반영하거나, 이 이관이 해당 타임레터 범위를 대체하면 중복 구현 없이 그 사실을 양쪽 이슈에 기록한다.
  • #1086의 presentation 패키지 이관과 파일 이동이 겹칠 수 있으므로 착수 시 최신 head와 경로를 기준으로 조정한다.
  • 앱링크·FCM 목적지 처리는 각각 #924·#1111에서 계속 추적한다.

자식 이슈

No response

참고

Activity

  1. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    on Aug 31, 2026
  2. changed the title [-]refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관 — 루트 전환 선행[/-] [+]refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관[/+] on Sep 1, 2026
  3. koongmai commented on Oct 13, 2026

    @koongmai
    Collaborator

    현재 우선순위 기준으로 이 이슈는 닫습니다.

    사유

    • 카카오 수신인 등록 등 출시 전 스펙 구현이 우선이고, 이 이관은 ViewModel 공유 범위·화면 결과 전달·상태 복원까지 다시 짜야 해서 작업량이 큽니다.
    • 현재 Nav2 구조로 기능상 문제가 없고, Nav3 전환의 주 이득(딥링크 처리 개선)이 필요한 스펙이 아직 없습니다.
    • 이 이슈가 열려 있는 동안 카카오 작업이 블로킹되고 있어 해제가 필요합니다.

    후속

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

Metadata

Metadata

Assignees

Labels

area:timeletter타임레터 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions