Skip to content

fix(core,app): Nav3 화면의 predictive back 배경을 불투명하게 유지한다 (#2145) - #2153

Merged
OnlyReadOneBook merged 3 commits into
developfrom
fix/2145-predictive-back-opaque-entry
Sep 27, 2026
Merged

OnlyReadOneBook merged 3 commits into
developfrom
fix/2145-predictive-back-opaque-entry

Conversation

@OnlyReadOneBook

@OnlyReadOneBook OnlyReadOneBook commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

먼저 볼 파일: core/ui/.../navigation/NavDestinationSurface.kt, core/ui/.../navigation/FeatureNavDisplay.kt, core/ui/src/test/.../FeatureNavDisplayTest.kt입니다.

Closes #2145
Refs #1695

predictive back 진행 중 축소된 앞 화면의 빈 영역으로 뒤 화면 글자가 비치던 문제를 고칩니다. 공통 Nav3 entry 데코레이터가 루트 셸과 같은 불투명 배경을 그리며, 설정을 포함한 Nav3 로컬 스택에 적용됩니다. 루트 Scaffold도 같은 배경값을 사용합니다.

실제 base는 #2173의 refactor/1695-setting-nav3입니다. 설정의 최종 Nav3 진입 구조를 소비하며 설정 Nav2 목적지 래퍼는 추가하지 않습니다. 바탕 Composable은 같은 파일의 데코레이터만 호출하므로 private이고, 배경값은 앱 모듈이 소비합니다.

검증 결과:

  • core UI 단위 테스트 82개, Konsist 54개 통과.
  • 투명 entry의 빈 영역 아래에 빨간 배경을 놓아 루트와 같은 색으로 덮이는지 확인하는 픽셀 회귀 테스트 통과. 데코레이터를 제거하면 해당 픽셀 검증이 실패하고 복원하면 통과하는 것도 확인했습니다.
  • 앱 main·unit·androidTest Kotlin 컴파일, core UI·앱 ktlint 통과.
  • 현재 Nav3 기준의 선택 계측 8건은 CI Test Plan에 지정했습니다. 이 수정에서는 에뮬레이터·실기기 제스처를 다시 실행하지 않았습니다. 수동 확인은 docs/qa/predictive-back.md 5번 절차를 따릅니다.

타임레터·마음의 기록의 기존 Nav2 화면은 이 공통 바탕의 적용 대상이 아니며, 잔여 결함은 #2149·#2150에서 추적합니다.

CI Test Plan

{
  "androidTest": {
    "mode": "selected",
    "reason": "공통 Nav3 entry 데코레이터의 불투명 바탕이 설정·애프터노트·수신자·온보딩 로컬 스택에 적용됩니다. 최종 SettingNavHost 실제 진입 4건, MainActivity 로그인 후 홈 및 노트 탭 진입 1건, 애프터노트·수신자·온보딩 대표 3건을 API 34에서 선택 실행합니다. 실제 픽셀 바탕은 FeatureNavDisplayTest가 검증합니다.",
    "tests": [
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.SettingImplementedCoverageAndroidTest#settingNavHost_startWithRecipientRegistrationOpensRegisterFirstAndBackExitsHost",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.SettingImplementedCoverageAndroidTest#settingNavHost_receiverManageListRowNavigatesToEditWithExactReceiverId",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.SettingImplementedCoverageAndroidTest#settingNavHost_deliveryConditionReceiverSelectionPreservesExactReceiverId",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/SettingImplementedCoverageAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.SettingImplementedCoverageAndroidTest#settingNavHost_withdrawGuideCancelThenAgreementConfirmPreservesBoundary",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/AppAndReceiverCompletionAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.AppAndReceiverCompletionAndroidTest#invalidCredentials_correctedPasswordThenRetry_entersHomeWithoutReportingUserError",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/AfternoteAuthorExtendedAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.AfternoteAuthorExtendedAndroidTest#home_loadingErrorRetrySuccess_filterAndRoutesStayConnectedToRepository",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/ReceiverAdvancedAndroidTest.kt",
        "selector": "com.afternote.afternote_fe.ReceiverAdvancedAndroidTest#receivedDetail_failureThenRetry_showsRecoveredDetailAndCallsSameIdTwice",
        "device": "api34"
      },
      {
        "path": "app/src/androidTest/java/com/afternote/afternote_fe/AppOnboardingCanaryTest.kt",
        "selector": "com.afternote.afternote_fe.AppOnboardingCanaryTest#coldStartWithoutSession_opensLoginFromWelcome",
        "device": "api34"
      }
    ]
  }
}

@github-actions github-actions Bot added android-test PR head에서 Android Managed Device 계측 테스트 실행 sibling-conflict 열린 형제 PR 과 같은 파일에서 충돌 — 나중에 머지되는 쪽이 base 를 병합해야 한다. 해소되면 자동으로 떨어진다 labels Sep 23, 2026
@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

형제 충돌이 해소됐다 — 지금은 이 PR 과 같은 파일을 서로 다르게 고친 열린 PR 이 없다 (#1750).
다시 생기면 이 코멘트를 현재 상태로 고쳐 쓴다.

@OnlyReadOneBook

Copy link
Copy Markdown
Collaborator Author

Android 16 실기동 확인 (2026-09-23)

Android 16(API 36) 에뮬레이터에서 커밋 그대로의 빌드(00be78a5b)로 다시 봤습니다. 본문에 적은 API 35 확인은 매니페스트에 enableOnBackInvokedCallback 을 임시로 넣은 빌드였는데, 이번에는 매니페스트를 건드리지 않았습니다. targetSdk 36 이라 Android 16 에서는 플래그 없이 predictive back 이 돕니다.

왼쪽 가장자리에서 화면 폭 1/3 까지 끌고 멈춘 상태입니다. 왼쪽이 develop f69332d99, 오른쪽이 이 PR 입니다.

설정 > 알림 설정 (Nav2) 애프터노트 상세 (Nav3 로컬 스택) 애프터노트 홈에서 루트로
알림 설정 전후 애프터노트 상세 전후 애프터노트 홈 전후

세 자리 모두 develop 에서는 줄어든 앞 화면 안으로 뒤 화면 글자가 비치고, 이 PR 에서는 앞 화면 안이 불투명하며 뒤 화면은 가장자리 띠에만 보입니다. 첫 칸의 회색 칸은 계정 이메일을 가린 것입니다.

범위 밖으로 하나 봤습니다. 상세에서 뒤로 끌 때 뒤 목록의 펜 버튼이 앞 화면 우하단 모서리 위에 겹쳐 그려집니다. develop 도 같고 글자 비침과는 다른 층이라 이 PR 에서는 다루지 않습니다.

@OnlyReadOneBook

Copy link
Copy Markdown
Collaborator Author

펜 버튼 겹침 판정 (2026-09-23)

위 코멘트에 적은 "상세에서 뒤로 끌 때 뒤 목록의 펜 버튼이 앞 화면 우하단 위에 겹쳐 그려진다" 는 착시였습니다. 펜 버튼은 앞 화면 아래에 그려집니다.

멈춘 지점별 펜 버튼과 앞 화면 경계
  • 이 전환은 scaleOut(0.7) 로 앞 화면을 줄이기만 해서, 줄어든 만큼 화면 아래에 뒤 화면 띠가 드러납니다. 펜 버튼은 그 띠에 있습니다. 앞뒤 바탕이 같은 gray1 이라 앞 화면 아래 경계가 보이지 않아 겹친 것처럼 보였습니다.
  • 1/5 지점에서는 앞 화면 아래 경계가 y=2253 이고, 펜 버튼 원이 y=2255 에서 수평으로 잘립니다. 앞 화면이 버튼을 덮고 있다는 뜻입니다. 1/3 과 1/2 에서는 버튼이 경계보다 아래에 있어 겹치지 않습니다.
  • develop 은 같은 1/5 지점에서 버튼이 잘리지 않고 통째로 보입니다. 앞 화면이 투명해서이고, 이 PR 이 고친 증상입니다.
  • 코드로도 같습니다. predictive back 중 NavDisplay 는 뒤 화면에 한 단계 낮은 zIndex 를 주고, 펜 버튼은 홈 entry 안 Scaffold 의 floatingActionButton 이라 그 순서를 따릅니다.

… fix/2145-predictive-back-opaque-entry

# Conflicts:
#	app/src/main/java/com/afternote/afternote_fe/navigation/AppNavigation.kt
@OnlyReadOneBook OnlyReadOneBook changed the title fix(core,setting): predictive back 중 줄어든 앞 화면에 불투명한 바탕을 깐다 (#2145) fix(core,app): Nav3 화면의 predictive back 배경을 불투명하게 유지한다 (#2145) Sep 27, 2026
@OnlyReadOneBook
OnlyReadOneBook changed the base branch from develop to refactor/1695-setting-nav3 September 27, 2026 04:48
@github-actions github-actions Bot removed the sibling-conflict 열린 형제 PR 과 같은 파일에서 충돌 — 나중에 머지되는 쪽이 base 를 병합해야 한다. 해소되면 자동으로 떨어진다 label Sep 27, 2026
Base automatically changed from refactor/1695-setting-nav3 to develop September 27, 2026 11:01
@OnlyReadOneBook
OnlyReadOneBook added this pull request to the merge queue Sep 27, 2026
Merged via the queue into develop with commit c7224a0 Sep 27, 2026
39 of 40 checks passed
@OnlyReadOneBook
OnlyReadOneBook deleted the fix/2145-predictive-back-opaque-entry branch September 27, 2026 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

android-test PR head에서 Android Managed Device 계측 테스트 실행

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(app): predictive back 중 축소된 앞 화면이 투명해 뒤 화면 글자가 비친다

2 participants