[GMSS-213] 뒤로가기 트랜지션 보완 및 홈 이중 뒤로가기 종료 - #50
Merged
Conversation
- 탭 화면에 predictivePopTransitionSpec 을 지정해, 제스처 뒤로가기만 라이브러리 기본값(scaleOut)으로 축소되던 모션을 fade-through 로 통일 - 상세 화면 pop 이 swipeEdge 를 반영해 제스처를 시작한 엣지 쪽으로 빠지도록 수정 - swipeEdge 상수 사용을 위해 navigationevent 의존성을 명시 선언 - detailSlideTransition 주석의 트리거 경로 설명 정정
- 홈 루트에서 뒤로가기 한 번이면 안내 토스트, 2초 안에 한 번 더 누르면 종료 - 토스트 인스턴스를 재사용하고 종료 직전 취소해, 연타 시 큐에 쌓이거나 앱이 사라진 뒤 런처 위에 남지 않도록 처리 - 다른 화면을 거쳐 홈으로 돌아오면 직전 경고를 무효화
- 하드코딩한 종료 안내 문구를 strings.xml 의 back_press_exit_confirm 으로 이동 - 코드에서 읽히는 동작을 되풀이하는 주석을 걷어내고, 코드만으로 알 수 없는 제약 두 건(경고 무효화 이유, 토스트 취소 이유)만 남김
- MODEL_DOWNLOAD_MESSAGE / MODEL_DOWNLOAD_ACTION 상수를 strings.xml 로 이동 - LaunchedEffect 안에서는 stringResource 를 부를 수 없어 composable 본문에서 미리 읽는다
…igate # Conflicts: # app/src/main/res/values/strings.xml
- 슬라이드 방향 분기를 그대로 되풀이하던 주석을 지웁니다 - 남긴 주석은 라이브러리 동작과 재발 방지 정보만 담도록 다듬습니다
문자열 상수를 리소스로 옮길 때 빈 줄이 남아 detekt 의 NoConsecutiveBlankLines 규칙에 걸렸습니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
작업 개요
시스템 뒤로가기 제스처로 화면을 빠져나갈 때 모션이 어색하던 문제를 해결하고, 홈에서 뒤로가기 한 번에 앱이 바로 종료되던 동작을 두 번 연타 방식으로 바꿉니다.
#47 에서 상세 화면의
predictivePopTransitionSpec은 맞췄지만 탭 화면(Home/Calendar/Chat)에는 지정하지 않아, 탭에서 제스처 뒤로가기를 하면 Navigation3 기본값인scaleOut(0.7f)이 걸려 화면이 축소되며 사라졌습니다. 3버튼 뒤로가기는popTransitionSpec(fade-through)을 타기 때문에, 같은 뒤로가기인데 트리거 경로에 따라 모션이 갈렸습니다.작업 유형
변경 사항
뒤로가기 트랜지션
NavDisplay에predictivePopTransitionSpec을 지정해, 제스처 뒤로가기만 축소되던 모션을 3버튼과 동일한 fade-through 로 통일했습니다. 탭 entry 에는 transition metadata 가 없어 세 spec 을 모두 지정해야 하고, 하나라도 빠지면 그 경로만 라이브러리 기본값으로 떨어집니다.swipeEdge를 반영하도록 수정했습니다. 기존에는 엣지와 무관하게 항상SlideDirection.End로 빠져서, 오른쪽 엣지에서 당기면 손가락과 반대 방향으로 화면이 밀려났습니다.detailSlideTransition주석의 트리거 경로 설명을 정정했습니다. 3버튼 뒤로가기는 진행률 이벤트가 없어predictivePopTransitionSpec이 아니라popTransitionSpec을 탑니다.swipeEdge상수를 쓰기 위해androidx.navigationevent:navigationevent를 명시 선언했습니다. 기존에는 선언되지 않은 transitive 의존성에 의존하는 상태였습니다.홈 이중 뒤로가기 종료
NavDisplay의previousEntries가 비어 자체 back handler 가 꺼지므로, 추가한 handler 가 시스템 뒤로가기를 대신 받습니다.Toast.LENGTH_SHORT(약 2초)와 종료 창(2초)이 겹쳐 앱이 사라진 뒤에도 런처 위에 토스트가 남습니다.SystemClock.elapsedRealtime()을 씁니다. 벽시계(currentTimeMillis)는 시간 보정으로 뒤로 점프할 수 있어 뒤로가기 한 번에 종료되는 경우가 생깁니다.문구 및 주석
strings.xml의back_press_exit_confirm으로 분리했습니다. 같은 파일에 하드코딩돼 있던 모델 다운로드 스낵바 문구(model_download_message,model_download_action)도 함께 옮겼습니다.LaunchedEffect안에서는stringResource를 부를 수 없어 composable 본문에서 미리 읽어 넘깁니다.관련 이슈
관련 작업 (Notion)
스크린샷 / 동작 화면
갤럭시 S23(Android 16) 실기기에서 제스처 진행 중 프레임을 캡처해 확인했습니다.
문자열 리소스는
aapt2 dump strings로 APK 반영을 확인했습니다. 모델 다운로드 스낵바는 셀룰러/용량 확인 조건에서만 노출되어 실제 표시는 재현하지 못했고, 컴파일과 리소스 반영까지만 확인했습니다.종료 동작은 다음 네 가지를 확인했습니다.
MainActivity레코드 완전 소멸체크리스트
develop으로 설정되어 있다feat:,fix:등)을 따른다리뷰 요청 사항
WebViewScreen의 구식BackHandler문제는 이번에도 손대지 않았습니다.enabled조건을 붙이려면GamssWebViewState.canGoBack()이 snapshot state 가 아니어서 히스토리 변화에 recomposition 이 걸리지 않는 문제부터 풀어야 합니다. 상태 노출 방식을 바꾸는 별도 작업으로 분리하는 게 맞을지 의견 부탁드립니다.fadeOut(90ms)이 끝나고fadeIn이 시작되는 지점에서 종이 배경만 보이는 순간이 스칩니다. 3버튼에서는 인지되지 않는 구간인데 제스처로 천천히 당기면 보입니다. 3버튼과 모션을 일치시키는 것을 우선해 그대로 뒀는데, predictive 경로만 겹치는 크로스페이드로 바꾸는 편이 나을지 봐주세요.supportsRtl="true"이므로 RTL 로케일을 실제로 지원하게 되면EDGE_LEFT/EDGE_RIGHT(물리적 엣지)와Start/End(레이아웃 방향) 매핑을 뒤집어야 합니다. 현재는 영향 없습니다.