navigationevent
| 최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
|---|---|---|---|---|
| 2025년 9월 24일 | - | - | - | 1.0.0-alpha09 |
종속 항목 선언
navigationevent의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha09" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha09") }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
이 아티팩트의 출시 노트는 없습니다.
버전 1.0
버전 1.0.0-alpha09
2025년 9월 24일
androidx.navigationevent:navigationevent-*:1.0.0-alpha09이 출시되었습니다. 버전 1.0.0-alpha09에는 이 커밋이 포함되어 있습니다.
API 변경사항
Idle()를 인스턴스화하는 대신NavigationEventTransitionState.Idle싱글톤 객체를 직접 사용합니다. (Ic7d9e, b/444734264)- 편의 생성자를 내부로 만듭니다. 직접 생성하는 대신 공개
NavigationEventDispatcher.history를 통해 인스턴스를 가져옵니다. (I3b7e0, b/444734264) rememberNavigationEventState을 통해NavigationEventState을 생성해야 합니다. 생성자가 이제 내부용입니다. (Ie143c, b/444734264)onBackCompletedFallback를 채택하여fallbackOnBackPressed사용 및 생성자 매개변수를 대체합니다. 동작은 변경되지 않았습니다. 완료되고 처리되지 않은 뒤로 이벤트에서만 호출됩니다. (Idabe9, b/444734264)- 이제
NavigationEventHistory(mergedHistory, currentIndex)의 기본 생성자는internal입니다. 외부 소비자는 공개 생성자 (빈 생성자 또는 파티션 기반 생성자)를 사용하여 인스턴스를 만들어야 합니다. (I1c047, b/444734264) View.setViewTreeNavigationEventDispatcherOwner가 null 허용 소유자를 허용하도록 함 (Ic9eb6, b/444436762)- 이제
NavigationEventInfo은interface이 아닌abstract class입니다. 클래스 (예:data class MyInfo : NavigationEventInfo())에서 상속받도록 모든 맞춤 구현을 업데이트합니다. (I1e59c, b/444734264) - 기존
NavigationEventDispatcher.state속성과getState<T>()함수가 삭제되었습니다. 새로운 별도의dispatcher.transitionState(동작 진행 상황용) 및dispatcher.history(탐색 스택용) 흐름을 사용합니다. (Ic2ceb, b/444734264) NavigationEventInput.onInfoChanged(...)콜백이 대체됩니다. 새onHistoryChanged(history: NavigationEventHistory)콜백을 구현하여 업데이트를 단일NavigationEventHistory객체로 수신합니다. (I23e0b, b/444734264)- 새로운 전역
NavigationEventDispatcher.historyStateFlow도입 이 비일반 흐름을 통해 관찰자는 탐색 스택의 변경사항만 구독할 수 있으며 동작 진행 중에 안정적으로 유지됩니다.transitionState의 상응 요소입니다. (I1db10, b/444734264) - 새로운 전역
NavigationEventDispatcher.transitionStateStateFlow도입 이 비일반 흐름을 통해 관찰자는 기록과 별도로 실제 동작 상태 (유휴/진행 중)만 구독할 수 있습니다. (I171fa, b/444734264) NavigationEventHistoryState클래스를 소개합니다. 이는 동작 상태와 별개로 탐색 정보 기록을 관찰하는 핵심 API 역할을 합니다. (I81ca5, b/444734264)- 이제
NavigationEvent가@Immutable로 표시되어 Compose 컴파일러가 리컴포지션을 최적화할 수 있습니다. (If78c7, b/444734264) navigationevent-compose핸들러 API가 업데이트됩니다. 이제NavigationEventHandler및NavigationBackHandler(및 변형)에서 호이스팅된NavigationEventState를 허용하는 새로운 오버로드를 지원합니다.currentInfo를 사용하는 간단한 오버로드는 유지되며 이제 이 새로운 상태 모델을 내부적으로 사용합니다. (Ic3251, b/444734264)- 새
@StableNavigationEventState<T>상태 홀더를navigationevent-compose라이브러리에 추가합니다. 이 객체는 로컬 기록과 로컬 동작 상태를 결합하며rememberNavigationEventState와NavigationEventHandler간의 기본 링크가 됩니다. (Ifb69f, b/444734264) NavigationEventHandler에 새로운 공개 읽기 전용transitionState: TransitionState속성을 추가합니다. 이제 핸들러는 자체 전환 상태를 유지하며 외부 시스템에서 이를 관찰할 수 있습니다. (I9acd2, b/444734264)- 새로운
TransitionState봉인 클래스 도입 이는 탐색 기록과 별개로 동작 상태를 관찰하는 핵심 API로 사용됩니다. (Id4beb, b/444734264) currentInfo,backInfo,forwardInfo를NavigationEventHandler의 공개 읽기 전용 속성으로 노출합니다. (Ia7636, b/444734264)- 이제
NavigationEventHandler구현은 기본 생성자에initialInfo: T값을 제공해야 합니다. (Idcfea, b/444734264) OnBackInvokedInput을OnBackInvokedOverlayInput또는OnBackInvokedDefaultInput로 바꿉니다. (I5323f, b/428948766)NavigationEventState를@Immutable로 표시합니다. 이렇게 하면 이 상태를 관찰하는 컴포저블이 리컴포지션을 올바르게 건너뛸 수 있으므로 Compose 성능이 향상됩니다. (I399c8)NavigationEventInfo.NotProvided의 이름을NavigationEventInfo.None;로 바꾸고 참조를 업데이트합니다. 동작 변경사항 없음 (I5e2d4)- 이제
NavigationEventInfo가@Immutable로 표시되어 Compose 컴파일러가 리컴포지션을 최적화할 수 있습니다. (I7c112) - 뒤로 탐색 완료 대체를 위한 재미있는 인터페이스로 Java 인체 공학 개선 (I8a860)
onHasEnabledHandlerChanged의 이름을onHasEnabledHandlersChanged로 바꿉니다. 이를 통해 콜백이 하나의 핸들러가 아닌 모든 핸들러의 집합적 사용 설정 상태를 보고한다는 점이 명확해집니다. (I1af61, b/443711297)NavigationEventDispatcher;에서hasEnabledHandler()를 삭제하고 대신NavigationEventInput.onHasEnabledHandlersChanged를 사용합니다. (Idef72, b/443711297)- 탐색 기록의 변경사항을 리스너에게 알리기 위해
NavigationEventInput에onInfoChanged콜백 추가 이를 통해 현재, 뒤로, 앞으로 스택의 전체 컨텍스트가 제공되므로 입력이 컨텍스트 정보에 반응할 수 있습니다. (I69a8b, b/443282983) NavigationEvent의swipeEdge을@IntDef로 만듦 (Icee54, b/443950342)NavigationEventDispatcher.addInput에priority매개변수를 추가하여 디스패처의 범위를 하나의 우선순위로 지정합니다. 이제onHasEnabledCallbacksChanged와 같은 이벤트는 해당 우선순위의 콜백이 변경될 때만 발생합니다. (I3e488, b/443711297)- 명확성을 위해
parentDispatcher에서NavigationEventDispatcher매개변수의 이름을 parent로 바꿉니다. (Id4f1f, b/443801782) - Java 사용자를 위해
@IntDef을 선호하여NavigationEventPriority삭제 (I10a9f, b/440514265) - 탐색 핸들러 계약을 적용합니다.
NavigationEventHandler에서isBackEnabled또는isForwardEnabled을true로 설정하는 경우 이제 각각onBackCompleted또는onForwardCompleted를 재정의해야 합니다. 이제 기본 구현에서 예외를 발생시켜 자동 실패를 방지합니다. (I17c62) - 탐색 이벤트 핸들러를 추가할 때 유효한 우선순위 값을 적용합니다. 이제 지원되지 않는 우선순위로
addHandler를 호출하면IllegalArgumentException이 발생하여 모든 타겟 플랫폼에서 잘못된 사용에 대한 즉각적인 피드백을 제공합니다. (I3c474)
버그 수정
addHandler를 동일하게 만듭니다. 중복 등록을 무시합니다. (I052aa, b/444734264)- 리컴포지션 중에
NavigationEventState속성을 동기화된 상태로 유지 (Ib3b4d, b/444734264) NavigationEventInputs이 등록 시 현재 컨텍스트 정보 (현재, 뒤로, 앞으로)를 즉시 수신해야 합니다. (Ie65bf, b/443282983)
버전 1.0.0-alpha08
2025년 9월 10일
androidx.navigationevent:navigationevent-*:1.0.0-alpha08이 출시되었습니다. 버전 1.0.0-alpha08에는 이 커밋이 포함되어 있습니다.
새로운 기능
- 흐름 기반 핸들러를 대체하는 람다 기반
NavigationEventHandlerAPI 도입 흐름을 수집하는 대신 간단한 콜백으로 뒤로 및 앞으로 동작을 처리하여 상용구를 줄이고 취소 문제를 방지합니다.NavigationBackHandler및NavigationForwardHandler을 타겟 편의 API로 제공 흐름 기반NavigationEventHandler삭제, 새 콜백으로 이전 (I23bac, b/436248277) - 수동 리스너가 결합된 뒤로 정보를 통해 전체 탐색 뒤로 스택에 액세스하도록 허용합니다. UI가 최상위 콜백으로 제한되지 않고 미리보기와 중첩된 탐색 기록을 렌더링하도록 지원합니다. (I7a510, b/436248277)
- 탐색 상태를 명확히 하고 중첩된 핸들러를 사용한 앞으로 탐색을 지원하기 위해 명시적 뒤로/현재/앞으로 모델을 도입합니다. (Ib86da, b/420443609)
NavigationEventCallback에onForward*메서드와isForwardEnabled추가 (Ic100f, b/436248290)NavigationEventInput에 앞으로 탐색 지원 추가 (I5734b)
API 변경사항
TestNavigationEventCallback로 앞으로 탐색 이벤트 테스트를 사용 설정합니다.isForwardEnabled및onForward*후크를 사용합니다. (I21fb5, b/420443609)NavEvent에서onEvent*콜백을onBack*로 바꿉니다. (I228b3, b/436248290)SwipeEdge을 인라인 클래스로 변환 (Id5e01)navigationevent라이브러리가 Java와 상호 운용되도록 합니다. 이제 Java 코드에서 모든 공개 API에 완전히 액세스할 수 있으므로 혼합 언어 또는 Java 전용 프로젝트에 원활하게 통합할 수 있습니다. (Ibc944,I5465f, I9fb1e, b/440532890b/443040294)NavigationEventCallback을NavigationEventHandler로 이름을 변경하여 API 역할을 명확히 합니다. 이 변경사항은 다단계 탐색 동작을 처리하는 클래스의 목적을 더 잘 반영합니다. 이제 해당addCallback메서드는addHandler입니다. (I2492a, b/443040331)
버그 수정
- 뒤로 대체가 앞으로 탐색에서 실행되지 않도록 방지 (I74814, b/436248290)
- 예측 앞으로 탐색 지원 추가 이제
NavigationEventAPI가 뒤로 동작과 앞으로 동작을 모두 처리하여 두 탐색 방향에 일관된 애니메이션을 사용 설정합니다. (Idc98c, b/436248290) - 하위
NavigationEventDispatcherOwner가 삭제될 때 리컴포지션 중에IllegalStateException비정상 종료 방지 (Iff50c, b/412629020) - 이제 소극적 리스너는 결합된 뒤로 정보를 통해 전체 탐색 뒤로 스택에 액세스할 수 있으므로 UI가 최상위 콜백으로 제한되지 않고 미리보기와 중첩된 탐색 기록을 렌더링할 수 있습니다. (I7a510, b/436248277)
버전 1.0.0-alpha07
2025년 8월 27일
androidx.navigationevent:navigationevent-*:1.0.0-alpha07이 출시되었습니다. 버전 1.0.0-alpha07에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
NavigationEventDispatcher.onHasEnabledCallbacksChanged가 삭제됩니다. (I50e97)NavigationEventCallback.onEventCompleted()을 추상으로 만듭니다. (I36b38)NavigationEventCallback#on*메서드를protected로 변경합니다. 호출 코드를 업데이트하여 이를 재정의합니다. (I6b691)DirectNavigationEventInput함수 이름 바꾸기 (Iffb62)NavigationEventInput.onAttach의 이름을onAdded로 바꿉니다. (I2d0b8)NavigationEventInput.onDetach의 이름을onRemoved로 바꿉니다. (I2d0b8)NavigationEventInputHandler의 이름을NavigationEventInput로 바꿉니다. (I676a4)@EmptySuper를NavigationEventInput.onHasEnabledCallbacksChanged에 추가합니다. (If9853)NavigationEventInputHandler에onAttach을 구현합니다. (I03648)NavigationEventInputHandler에onDetach을 구현합니다. (I03648)- 생성 시 기본
NavigationEventCallback을 사용 설정으로 설정 (Ic0188) NavigationEventInput.addOnHasEnabledCallbacksChangedCallback를NavigationEventInput.onHasEnabledCallbacksChanged로 대체했습니다. (I64e93)NavigationEventDispatcher.addInput에 기본 스레드가 필요합니다. (Ic2930)NavigationEventDispatcher.removeInput에 기본 스레드가 필요합니다. (Ic2930)Dispatcher.addOnHasEnabledCallbacksChangedCallback가 삭제됩니다.Dispatcher.onHasEnabledCallbacksChanged로 대체합니다. (Ida3e3, b/436530096)
버그 수정
- 이미 연결된 핸들러를 추가하거나 연결되지 않은 핸들러를 삭제하면 잘못된 수명 주기 로직이 트리거되는 버그를 수정했습니다. (I9e47b)
버전 1.0.0-alpha06
2025년 8월 13일
androidx.navigationevent:navigationevent-*:1.0.0-alpha06이 출시되었습니다. 버전 1.0.0-alpha06에는 이 커밋이 포함되어 있습니다.
새로운 기능
Passive Listeners API
이제 모든 탐색 호스트에서 맞춤 컨텍스트 정보를 전달하고 UI의 어느 곳에서나 동작 상태 변경을 수동으로 수신 대기할 수 있습니다. 이를 통해 뒤로 탐색 예측 및 기타 동작 기반 탐색을 위한 컨텍스트 인식 애니메이션이 사용 설정됩니다.
이 기능은 두 부분으로 구성됩니다.
- 정보 제공 -
NavigationEventInfo를 사용하여 맞춤 데이터를 전달합니다. - 사용 상태 -
dispatcher.state(NavigationEventState)를 사용하여 동작 진행 상황과 컨텍스트를 관찰합니다.
- 이제
NavigationEventCallback가 한 번의 호출로 동작 컨텍스트를 설정하는setInfo(currentInfo, previousInfo)메서드를 노출합니다 (I1d5e7, b/424470518). NavigationEventHandler는currentInfo및previousInfo를 허용하는 새로운 오버로드를 추가하여 Compose 앱에서 컨텍스트를 제공하는 기본 API가 됩니다 (I6ecd3, b/424470518).
예:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
- 이제
NavigationEventDispatcher가dispatcher.state및dispatcher.getState<T>()를 노출합니다 (If7fae, Ia90ca, b/424470518). 이러한StateFlow기반 API를 사용하면 UI가 이벤트를 직접 처리하지 않고도 동작 진행 상황과 컨텍스트 데이터를 관찰할 수 있습니다.
예:
val gestureState by LocalNavigationEventDispatcherOwner.current!!
.navigationEventDispatcher
.state
.collectAsState()
val progress = gestureState.progress // Returns latestEvent.progress or 0F
when (val state = gestureState) {
is InProgress -> {
val toScreen = state.currentInfo as MyScreenInfo
val fromScreen = state.previousInfo as MyScreenInfo
println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
}
is Idle -> { /* Idle state */ }
}
진행 중일 때는
latestEvent.progress를 반환하고 그렇지 않을 때는0F를 반환하는progress속성을NavigationEventState에 추가합니다 (I7b196).val progress = state.progressNavigationEventDispatcher인스턴스를 계층적으로 만들고 연결하고 처리하는NavigationEventDispatcherOwner컴포저블 추가 디스패처의 사용 설정 상태 및 자동 정리의 동적 제어를 사용 설정합니다.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
API 변경사항
NavigationEventCallback에서isPassthrough매개변수가 삭제되었습니다. (I99028, b/424470518)NavigationEventState생성자가 이제 내부용입니다. 테스트를 위해DirectNavigationEventInputHandler을 통해 상태 (기본값은Idle)를 업데이트합니다.handleOnStarted또는handleOnProgressed을 호출하여 상태를InProgress로 설정하고handleOnCompleted또는handleOnCancelled을 호출하여Idle로 되돌립니다.NavigationEventInfo을 업데이트하려면NavigationEventCallback.setInfo을 사용하세요. (I93dca, b/424470518)- 더 쉽게 인스턴스화하고
TestNavigationEvent대신 사용해야 하는 테스트를 간소화할 수 있도록NavigationEvent에 기본 매개변수가 추가되었습니다. (I5dc49, I232f4) - 특정 현재/이전 상태로 탐색 이벤트를 테스트하기 위한
TestNavigationEventCallback가 추가되었습니다. (Idd22e, b/424470518) NavigationEventInputHandler가 추상 클래스로 변경되어 이전AbstractNavigationEventInputHandler를DirectNavigationEventInputHandler의 구현으로 대체합니다. (Iadde5, Ifed40I3897c, b/432616296, b/435416924)NavigationEventInputHandler의send*함수 이름이handle*로 변경되었습니다. (Iffcaf)- 이제
OnBackInvokedInputHandler이 새로abstractNavigationInputHandler를 확장합니다. (Ib45aa) - 루트 디스패처를 만들려면
null를 명시적으로 전달해야 하는 상위 디스패처가 필요하도록NavigationEventDispatcherOwner가 변경되었습니다. (Ia6f64, b/431534103)
버그 수정
NavigationEventDispatcher.dispose()에서 컬렉션 사본을 방지하여 효율성이 개선되었습니다. (I4ab09)NavigationEventHandler가 사용 설정 상태의 변경에 올바르게 응답하지 않는 문제가 수정되었습니다. (Ia5268,I19bec, I5be5c, b/431534103)
Google 문서 업데이트
NavigationEvent의 KDocs가 통합 이벤트 래퍼로서의 역할을 명확히 하고 다양한 탐색 유형 (동작, 클릭) 전반의 세부 속성 동작을 설명하도록 확장되었습니다. (I91e8d)- 콜백 순서와 관련된 동작을 구체적으로 설명하도록 Compose API (
BackHandler,PredictiveBackHandler,NavigationEventHandler)의 시스템 뒤로 처리 관련 문서를 업데이트했습니다. (I7ab94)
종속 항목 업데이트
- 이제
NavigationEvent는 Compose Runtime 1.9.0-beta03에 종속되어navigationevent-compose아티팩트가 모든 KMP 타겟을 지원할 수 있습니다. (Ia1b87)
버전 1.0.0-alpha05
2025년 7월 30일
androidx.navigationevent:navigationevent-*:1.0.0-alpha05이 출시되었습니다. 버전 1.0.0-alpha05에는 이 커밋이 포함되어 있습니다.
상위-하위 계층 구조 지원:
이제 NavigationEventDispatcher에 상위 및 하위 디스패처가 있어 계층적 트리 구조를 형성할 수 있습니다. 이렇게 하면 체인으로 연결된 디스패처를 통해 UI의 구조적 계층 구조를 반영하여 복잡한 Compose UI 구성요소에서 탐색 이벤트가 더 유연하게 전파되고 관리될 수 있습니다. (I194ac)
// Create a parent dispatcher that will manage navigation events at a higher level.
val parentDispatcher = NavigationEventDispatcher()
// Create a child dispatcher linked to the parent, forming a hierarchy.
val childDispatcher = NavigationEventDispatcher(parentDispatcher)
계층적 isEnabled 속성을 사용하면 디스패처를 하향식으로 제어할 수 있습니다. 디스패처에서 isEnabled가 false로 설정되면 모든 하위 디스패처가 자동으로 사용 중지됩니다. 이 기능을 사용하면 탐색 이벤트 시스템의 전체 브랜치를 효율적으로 전환할 수 있습니다. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
또한 이제 NavigationEventCallback의 isEnabled 속성은 연결된 디스패처의 사용 설정 상태를 따릅니다. 즉, 콜백 자체와 디스패처 (상위 요소 포함)가 모두 사용 설정된 경우에만 콜백이 사용 설정된 것으로 간주되므로 콜백 활성화에 대한 일관된 계층적 제어가 보장됩니다. (I1799a)
// Create a test callback and add it to the child dispatcher.
val callback1 = TestNavigationEventCallback(isEnabled = true)
childDispatcher.addCallback(callback1)
// Since the childDispatcher is disabled, the callback is effectively disabled as well.
assertThat(callback1.isEnabled).isFalse()
디스패처와 그 하위 요소를 적절하게 정리하기 위한 새로운 dispose() 메서드가 도입되었습니다. dispose()를 호출하면 메모리 누수를 방지하기 위해 리스너가 중지되고, 모든 하위 디스패처가 재귀적으로 삭제되고, 디스패처에 등록된 모든 콜백이 삭제되고, 상위 요소에서 연결이 해제됩니다. 이렇게 하면 디스패처가 더 이상 필요하지 않을 때 리소스가 올바르게 해제됩니다. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
처리된 디스패처에서 공개 메서드가 호출되면 IllegalStateException가 즉시 발생합니다. 이렇게 하면 자동 실패를 방지하고 개발자가 개발 중에 부적절한 사용을 식별하는 데 도움이 됩니다. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
참고: aosp/3692572에서 Compose UI 내의 하위 디스패처를 자동으로 관리하는 새로운 NavigationEventDispatcherOwner 컴포저블이 도입됩니다. 하지만 이 변경사항은 현재 출시 버전에는 포함되지 않았으며 다음 버전에 포함될 예정입니다.
탐색 테스트 라이브러리
navigationevent라이브러리에 전용 테스트 유틸리티를 제공하는navigationevent-testing모듈 추가 (0e50b6)- 테스트를 위해
TestNavigationEventCallback가짜 유틸리티 클래스 추가 확인을 지원하기 위해 콜백 메서드 호출을 기록하고 수신된NavigationEvent항목을 저장합니다. (4a0246) - 기본값으로
NavigationEvent인스턴스를 만드는TestNavigationEvent가짜 유틸리티 함수를 추가하여 탐색 이벤트 처리에 관한 단위 테스트를 간소화합니다. (3b63f5) - 테스트를 위해
TestNavigationEventDispatcherOwner가짜 유틸리티 클래스 추가 테스트에서 상호작용 확인을 지원하기 위해 대체 및 사용 설정 상태 변경 이벤트 수를 추적합니다. (c8753e)
API 변경사항
NavigationEventInputHandler를androidMain에서commonMain로 이동하여 KMP 공통 코드에서 사용할 수 있도록 합니다. 이벤트를 디스패치하기 위한 새public send*메서드 추가NavigationEventDispatcher의 디스패치 함수를public에서internal로 변경합니다. 이제 사용자는NavigationEventInputHandler를 사용하여 이벤트를 전송해야 합니다. (Ia7114)NavigationInputHandler의 이름을OnBackInvokedInputHandler로 바꿉니다. (I63405)
버그 수정
- 중간 목록 할당을 방지하고 콜백 디스패치 성능을 개선하여 오버헤드를 줄이도록
NavigationEventDispatcher리팩터링 (I82702, I1a9d9) - 컴파일 시간에 유효한 값 범위를 적용하고 API 안전성을 개선하기 위해
NavigationEvent의touchX,touchY,progress필드에@FloatRange주석 추가 (Iac0ec)
버전 1.0.0-alpha04
2025년 7월 2일
androidx.navigationevent:navigationevent-*:1.0.0-alpha04이 출시되었습니다. 버전 1.0.0-alpha04에는 이러한 커밋이 포함되어 있습니다.
버그 수정
implementedInJetBrainsFork를 사용하여navigationevent-compose하고 Compose 규칙에 맞게commonStubs타겟을 추가했습니다. JetBrains에서 요청한 변경사항입니다. (f60c79)- 올바른 스텁 생성을 위해 Kotlin/Native용 Compose 컴파일러 플러그인 적용이 수정되었습니다. 공개 API 또는 동작에 영향을 미치지 않습니다. (1890c9)
버전 1.0.0-alpha03
2025년 6월 18일
androidx.navigationevent:navigationevent-*:1.0.0-alpha03이 출시되었습니다. 버전 1.0.0-alpha03에는 이 커밋이 포함되어 있습니다.
새로운 기능
navigationevent라이브러리에서 Jetpack Compose 기능을 지원하는 새로운navigationevent-compose모듈을 도입했습니다. (980d78)NavigationEventCompose에 새로운LocalNavigationEventDispatcherOwner로컬 컴포지션이 추가되었습니다. 현재 컴포지션에서 사용할 수 있는지 더 효과적으로 판단할 수 있도록 null을 허용하는 값을 반환합니다. 이제 기본 소유자를 찾을 수 없는 경우NavigationEventHandler에서 오류가 발생합니다. (62ffda)NavigationEventCompose에 (뒤로 탐색 예측 동작) 이벤트를 처리하는 새로운NavigationEventHandler컴포저블이 추가되었습니다. 제공하는 정지 람다에서 수집해야 하는NavigationEvent객체의Flow을 제공합니다(c42ba6).
NavigationEventHandler { progress: Flow<NavigationEvent> ->
// This block is executed when the back gesture begins.
try {
progress.collect { backEvent ->
// Handle gesture progress updates here.
}
// This block is executed if the gesture completes successfully.
} catch (e: CancellationException) {
// This block is executed if the gesture is cancelled
throw e
} finally {
// This block is executed either the gesture is completed or cancelled
}
}
API 변경사항
- 이제 각
NavigationEventCallback는 한 번에 하나의NavigationEventDispatcher에만 등록할 수 있습니다. 여러 디스패처에 추가하면IllegalStateException가 발생합니다. 이 동작은 여러 디스패처를 허용하는OnBackPressedDispatcher와 다릅니다. (e82c19) - 내비게이션 중에 변이가 발생하여
NavigationEvent의 디스패치가 중단될 수 있으므로isPassThrough를val로 만들었습니다. (I0b287)
버전 1.0.0-alpha02
2025년 6월 4일
androidx.navigationevent:navigationevent-*:1.0.0-alpha02이 출시되었습니다. 버전 1.0.0-alpha02에는 이 커밋이 포함되어 있습니다.
API 변경사항
NavigationEventDispatcher의 보조 생성자를 기본 인수로 바꿉니다. (I716a0)NavigationEventCallback에서 우선순위 속성을 삭제합니다. 대신NavigationEventDispatcher.addCallback()에 우선순위를 전달하세요. (I13cae)
버그 수정
- 내부 닫을 수 있는 항목 목록을 동시에 수정하여
NavigationEventCallback.remove()이 호출될 때 발생할 수 있는ConcurrentModificationException이 수정되었습니다. (b/420919815)
버전 1.0.0-alpha01
2025년 5월 20일
androidx.navigationevent:navigationevent-*:1.0.0-alpha01이 출시되었습니다. 버전 1.0.0-alpha01에는 이 커밋이 포함되어 있습니다.
새로운 기능
androidx.navigationevent라이브러리는 시스템 뒤로 버튼과 뒤로 탐색 예측을 처리하기 위한 KMP 우선 API를 제공합니다.NavigationEventDispatcher는 시스템 뒤로 이벤트를 수신하기 위해 하나 이상의NavigationEventCallback인스턴스를 등록하는 공통 API 역할을 합니다.- 이 레이어는 이전에 출시된
androidx.activity의 API 아래에 있으며, 상위 수준 구성요소에서 Activity API를 사용하거나 Android 프레임워크OnBackInvokedDispatcherAPI를 직접 사용하는 것을 대체하는 데 목적이 있습니다.androidx.activityAPI는 Activity 1.12.0-alpha01의 일부로 탐색 이벤트 API를 기반으로 다시 작성되었습니다.