navigationevent

  
ナビゲーション イベント ライブラリは、システムバックと予測型「戻る」を処理するための KMP ファースト API を提供します。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2026 年 9 月 23 日 1.1.2 1.2.0-rc01 - -

依存関係の宣言

navigationevent への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

dependencies {
    implementation "androidx.navigationevent:navigationevent:1.2.0-rc01"
}

Kotlin

dependencies {
    implementation("androidx.navigationevent:navigationevent:1.2.0-rc01")
}

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 1.2

バージョン 1.2.0-rc01

2026 年 9 月 23 日

androidx.navigationevent:navigationevent-*:1.2.0-rc01 がリリースされました。バージョン 1.2.0-rc01 には、これらの commit が含まれています。

依存関係の更新

  • androidx.lifecycle:lifecycle-runtime 依存関係が 2.10.0 に更新されました。このバージョンは、AGP バージョン 9.5.0-alpha04 以降でバンドルされたライフサイクル ランタイムの lint チェックを実行するために必要です。(I99bfd、b/556807521)

バージョン 1.2.0-alpha04

2026 年 8 月 12 日

androidx.navigationevent:navigationevent-*:1.2.0-alpha04 がリリースされました。バージョン 1.2.0-alpha04 に含まれる commit については、こちらをご覧ください。

API の変更

  • NavigationEventInput に新しい API hasEnabledBackHandlers と hasEnabledForwardHandlers を追加し、方向機能を個別にトラッキングできるようにしました。(I772bf、b/123456789)

バグの修正

  • ビューツリーのオーナーが利用できない場合に LocalNavigationEventDispatcherOwner を解決するため、フォールバック コンテキスト トラバーサル ルックアップを導入(I51e30、b/530641649)

バージョン 1.2.0-alpha03

2026 年 7 月 29 日

androidx.navigationevent:navigationevent-*:1.2.0-alpha03 がリリースされました。バージョン 1.2.0-alpha03 に含まれる commit については、こちらをご覧ください。

API の変更

  • NavigationEventInfo に title と url を追加して、リンク先のタイトルと位置情報の URL をカスタマイズできるようにしました。(Ie5619)
  • navigationevent に NavigationEventDispatcherOwner ファクトリを追加します。(I740d3)
  • 新しい不安定な API を明示的にオプトインできるように、ExperimentalNavigationEventApi アノテーションを追加(Ia5d25)

バグの修正

  • wasmJs ターゲットで BrowserInput を試験運用版の API として公開しました。(Icc2a8)

バージョン 1.2.0-alpha02

2026 年 7 月 15 日

androidx.navigationevent:navigationevent-*:1.2.0-alpha02 がリリースされました。バージョン 1.2.0-alpha02 に含まれる commit については、こちらをご覧ください。

API の変更

  • NavigationEventInput に hasEnabledHandlers プロパティを追加して、デベロッパーがコールバックに依存せずに現在のハンドラ状態を直接クエリできるようにしました。(I8ecec)

バグの修正

  • NavigationEventDispatcher でのフォールバック伝播を修正。(I015f8、b/531988076)

バージョン 1.2.0-alpha01

2026 年 7 月 1 日

androidx.navigationevent:navigationevent-*:1.2.0-alpha01 がリリースされました。バージョン 1.2.0-alpha01 に含まれる commit については、こちらをご覧ください。

API の変更

  • androidx.benchmark の minSdk が 24 になりました。(Ic2a85)
  • onForwardCompletedFallback を TestNavigationEventDispatcherOwner に追加して、処理されない前方ナビゲーション イベントのトラッキングとテストを有効にします。(I6bbd7)
  • テストでナビゲーション イベントのシミュレーションを簡素化するため、TestNavigationEventDispatcherOwner に navigationEventInput を追加しました。(I3ef48)

バグの修正

  • API 情報をクリーンアップ(Ia8066)
  • 切断された入力にディスパッチされたナビゲーション イベントを無視します。以前は、削除された入力にイベントをディスパッチすると IllegalStateException がスローされていました。(I1a8bc、b/515890298)
  • Compose Multiplatform 1.11.0 にアップグレードする際に、古い JetBrains フォーク バージョンでシンボルの重複を防ぎます。(I4cc4d)

このアーティファクトのリリースノートはありません。

バージョン 1.1

バージョン 1.1.2

2026 年 6 月 17 日

androidx.navigationevent:navigationevent-*:1.1.2 がリリースされました。バージョン 1.1.2 にはこれらの commit が含まれています。

バグの修正

  • Compose の依存関係をバージョン 1.11.2 に更新しました。(a5e9259)

バージョン 1.1.1

2026 年 5 月 6 日

androidx.navigationevent:navigationevent-*:1.1.1 がリリースされました。バージョン 1.1.1 にはこれらの commit が含まれています。

バグの修正

  • 検査モードで no-op NavigationEventHandler を削除し、Android Studio プレビューで予測型「戻る」を有効にしました。

バージョン 1.1.0

2026 年 4 月 22 日

androidx.navigationevent:navigationevent-*:1.1.0 がリリースされました。バージョン 1.1.0 にはこれらの commit が含まれています。

バージョン 1.1.0-rc01

2026 年 4 月 8 日

androidx.navigationevent:navigationevent-*:1.1.0-rc01 がリリースされました。バージョン 1.1.0-rc01 にはこれらの commit が含まれています。

バグの修正

  • Compose の compileSdk を API 37 に更新しました。つまり、Compose を使用する場合は、AGP の最小バージョンが 9.2.0 である必要があります。(Id45cd、b/413674743)

バージョン 1.1.0-beta01

2026 年 3 月 27 日

androidx.navigationevent:navigationevent-*:1.1.0-beta01 がリリースされました。バージョン 1.1.0-beta01 にはこれらの commit が含まれています。

API の変更

  • NavigationEventDispatcher に OnForwardCompletedFallback を追加し、処理されない前方ナビゲーション イベントのデフォルトのシステム動作を有効にします。(Iac620、b/489138116)

バージョン 1.1.0-alpha01

2026 年 2 月 25 日

androidx.navigationevent:navigationevent-*:1.1.0-alpha01 がリリースされました。バージョン 1.1.0-alpha01 に含まれる commit については、こちらをご覧ください。

新機能

  • NavigationEvent-Compose で Kotlin マルチプラットフォーム(KMP)のすべてのターゲットをサポート。オーナーの解決を LocalView から切り離し、プラットフォーム ホストがデフォルトの LocalNavigationEventDispatcherOwner を提供できるようにします。これにより、Android で LocalView を安全なフォールバックとして維持できます。(Iae980、b/434940570、Iccf58)

API の変更

  • Android の BackEvent と NavigationEvent の間で変換を行う NavigationEvent.toBackEvent() と BackEvent.toNavigationEvent() 拡張関数を追加します。(Ie3b71、b/477001292)

バージョン 1.0

バージョン 1.0.2

2026 年 1 月 28 日

androidx.navigationevent:navigationevent-*:1.0.2 がリリースされました。バージョン 1.0.2 にはこれらの commit が含まれています。

バグの修正

  • Android Studio プレビューで NavigationEventHandler を使用するとクラッシュする問題を修正しました。ハンドラが検査モードを検出し、何も行わないため、ディスパッチャーが提供されなくてもプレビューをレンダリングできるようになりました。(I370f2、b/454313986)。

バージョン 1.0.1

2025 年 12 月 3 日

androidx.navigationevent:navigationevent-*:1.0.1 がリリースされました。バージョン 1.0.1 にはこれらの commit が含まれています。

バグの修正

  • rememberNavigationEventDispatcherOwner() で作成された子 NavigationEventDispatcher を破棄する際の ConcurrentModificationException を修正。(ec68a9、b/454363524)

バージョン 1.0.0

2025 年 11 月 19 日

androidx.navigationevent:navigationevent-*:1.0.0 がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください。

1.0.0 の主な機能:

Navigation Event ライブラリが安定版になりました。Navigation Event は、Android(およびその他のプラットフォーム)のシステム「戻る」や予測型「戻る」などのシステムレベルのインタラクションを処理するための AndroidX ライブラリです。

  • NavigationEvent を処理するには、目的の関数をオーバーライドする独自の NavigationEventHandler を実装します。次に、ハンドラを NavigationEventDispatcher に追加する必要があります。Activity 1.12.0 リリース以降、ComponentActivity は新しい NavigationEventDispatcherOwner インターフェースを実装しています。このインターフェースは、すぐに使用できるディスパッチャを提供します。

    // The NavigationEventInfo provides information about a navigation state
    object CurrentInfo : NavigationEventInfo()
    
    // you can retrieve this from any component that is a NavigationEventDispatcherOwner
    // or you can instantiate your own custom dispatcher
    val dispatcher = myActivity.navigationEventDispatcher
    
    val myHandler = object : NavigationEventHandler<NavigationEventInfo>(
                initialInfo = CurrentInfo,
                isBackEnabled = true
            ) {
                override fun onBackStarted(event: NavigationEvent) {
                    // Prepare for the back event
                }
    
                override fun onBackProgressed(event: NavigationEvent) {
                    // Use event.progress for predictive animations
                }
    
                // This is the required method for final event handling
                override fun onBackCompleted() {
                    // Complete the back event
                }
    
                override fun onBackCancelled() {
                    // Cancel the back event
                }
            }
    
    dispatcher.addHandler(myHandler)
    
  • navigationevent:navigationevent-compose モジュールは、ハンドラを最も近い LocalNavigationEventDispatcherOwner の NavigationEventDispatcher に自動的にフックし、デベロッパーが目的の動作をパラメータとして提供できるようにする便利なコンポーズ関数 NavigationBackHandler を提供します。

    object CurrentInfo : NavigationEventInfo()
    object PreviousInfo : NavigationEventInfo()
    
    val navEventState = rememberNavigationEventState(
      currentInfo = CurrentInfo,
      backInfo = PreviousInfo
    )
    
    // Inside composition
    NavigationBackHandler(
        State = navEventState,
        isBackEnabled = true,
        // optional
        onBackCancelled = { // Cancel the back event },
        // required
        onBackCompleted = { // Complete the back event } ,
    )
    

Compose でこのパターンを使用すると、NavigationEventState を簡単にホイスティングして、さまざまなコンポーザブルで監視できるようになります(Navigation3 の場合、NavDisplay から状態をホイスティングできます)。

  • 各 NavigationEventDispatcher は、コンポーズの場合とコンポーズ以外の場合の両方で、親ディスパッチャーを提供できます。これにより、複数のディスパッチャーを 1 つの親で管理できる階層構造を作成できます。親があると、無効化または破棄する必要があるディスパッチャーのグループの処理が比較的簡単になります。

    // Non-Compose
    val parentDispatcher = NavigationEventDispatcher()
    val childDispatcher = NavigationEventDispatcher(parent = parentDispatcher)
    
    // Compose
    val composeChildDispatcher = rememberNavigationEventDispatcher(
        // This defaults to `LocalNavigationEventDispatcherOwner.current`
        // Must explicitly provide null to have an unparented dispatcher created here
        parent = NavigationEventDispatch() 
    )
    
  • また、このライブラリを使用すると、NavigationEventInput を介して NavigationEventDispatcher にシグナルを直接提供することもできます。NavigationEventInput はナビゲーション システムの「入力」側として機能し、プラットフォーム固有のイベント(システムの戻るジェスチャーやボタンのクリックなど)を NavigationEventDispatcher に送信できる標準化されたイベントに変換します。navigationevent:navigationevent モジュールは現在、2 つの NavigationEventInput を提供しています。1 つは、任意のイベントをディスパッチできる汎用的な DirectNavigationEventInput で、もう 1 つは、NavigationEventDispatcher がシステムの [戻る] ジェスチャーと予測型 [戻る] ジェスチャーをサポートできるようにする Android 固有の OnBackInvokedInput です。独自のディスパッチャを実装する場合(ComponentActivity が提供するディスパッチャを使用しない場合)は、入力を手動で追加する必要があります。

    val dispatcher = NavigationEventDispatcher()
    
    dispatcher.addInput(DirectNavigationEventInput())
    dispatcher.addInput(OnBackInvokedDefaultInput(invoker))
    

バージョン 1.0.0-rc01

2025 年 11 月 5 日

androidx.navigationevent:navigationevent-*:1.0.0-rc01 がリリースされました。バージョン 1.0.0-rc01 には、これらの commit が含まれています。

バージョン 1.0.0-beta01

2025 年 10 月 8 日

androidx.navigationevent:navigationevent-*:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 にはこれらの commit が含まれています。

API の変更

  • NavigationEvent.touchX と NavigationEvent.touchY の FloatRange アノテーションを修正しました。これらの値は絶対ピクセル座標を表し、上限は 1.0 です。(I4b205、b/445989313)
  • NavigationEventDispatcherOwner コンポーザブルを rememberNavigationEventDispatcherOwner にリファクタリングします。この関数は NavigationEventDispatcherOwner を直接返すようになりました。このオーナーをサブコンポジションに渡すには、CompositionLocalProvider を使用します。(I874b2、b/444446629)

バージョン 1.0.0-alpha09

2025 年 9 月 24 日

androidx.navigationevent:navigationevent-*:1.0.0-alpha09 がリリースされました。バージョン 1.0.0-alpha09 に含まれる commit については、こちらをご覧ください。

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(Navigation スタック用)フローを使用します。(Ic2ceb、b/444734264)
  • NavigationEventInput.onInfoChanged(...) コールバックが置き換えられます。新しい onHistoryChanged(history: NavigationEventHistory) コールバックを実装して、更新を単一の NavigationEventHistory オブジェクトとして受け取ります。(I23e0b、b/444734264)
  • 新しいグローバル NavigationEventDispatcher.history StateFlow を導入します。この非汎用フローにより、オブザーバーはナビゲーション スタックの変更のみをサブスクライブでき、ジェスチャーの進行中も安定した状態を維持できます。これは transitionState のカウンターパートです。(I1db10、b/444734264)
  • 新しいグローバル NavigationEventDispatcher.transitionState StateFlow を導入します。この非汎用フローにより、オブザーバーは履歴とは別に、物理的なジェスチャーの状態(Idle/InProgress)のみをサブスクライブできます。(I171fa、b/444734264)
  • NavigationEventHistoryState クラスを紹介します。これは、ジェスチャーの状態とは別に、ナビゲーション情報の履歴を監視するためのコア API として機能します。(I81ca5、b/444734264)
  • NavigationEvent が @Immutable としてマークされるようになり、Compose Compiler で再コンポーズを最適化できるようになりました。(If78c7、b/444734264)
  • navigationevent-compose ハンドラ API が更新されました。NavigationEventHandler と NavigationBackHandler(およびバリエーション)が、ホイストされた NavigationEventState を受け取る新しいオーバーロードをサポートするようになりました。(currentInfo を受け取る)シンプルなオーバーロードは保持され、内部でこの新しい状態モデルを使用するようになりました。(Ic3251、b/444734264)
  • 新しい @Stable NavigationEventState<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 Compiler で再コンポーズを最適化できるようになりました。(I7c112)
  • 戻る完了フォールバックの楽しいインターフェースで Java のエルゴノミクスを改善。(I8a860)
  • onHasEnabledHandlerChanged を onHasEnabledHandlersChanged に変更しました。これにより、コールバックは 1 つのハンドラだけでなく、すべてのハンドラの有効状態をレポートすることが明確になります。(I1af61、b/443711297)
  • NavigationEventDispatcher; から hasEnabledHandler() を削除し、代わりに NavigationEventInput.onHasEnabledHandlersChanged を使用します。(Idef72、b/443711297)
  • NavigationEventInput に onInfoChanged コールバックを追加して、ナビゲーション履歴の変更をリスナーに通知します。これにより、現在、戻る、進むのスタックの完全なコンテキストが提供され、入力がコンテキスト情報に反応できるようになります。(I69a8b、b/443282983)
  • NavigationEvent の swipeEdge を @IntDef にする(Icee54、b/443950342)
  • priority パラメータを NavigationEventDispatcher.addInput に追加して、ディスパッチャを 1 つの優先度にスコープします。これにより、onHasEnabledCallbacksChanged などのイベントは、その優先度のコールバックが変更された場合にのみ発生するようになります。(I3e488、b/443711297)
  • わかりやすくするため、NavigationEventDispatcher パラメータの名前を parentDispatcher から parent に変更(Id4f1f、b/443801782)
  • Java ユーザー向けに NavigationEventPriority を削除し、@IntDef を追加(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 に含まれる commit については、こちらをご覧ください。

新機能

  • Flow ベースのハンドラを置き換える lambda ベースの NavigationEventHandler API を導入します。フローを収集する代わりに、シンプルなコールバックで戻るジェスチャーと進むジェスチャーを処理し、ボイラープレートを減らしてキャンセルに関する問題を回避します。NavigationBackHandler と NavigationForwardHandler を対象のコンビニエンス API として提供します。フローベースの NavigationEventHandler を削除し、新しいコールバックに移行します。(I23bac、b/436248277)
  • パッシブ リスナーが、結合された戻る情報を通じて完全なナビゲーション バックスタックにアクセスできるようにします。UI が最上位のコールバックに限定されるのではなく、プレビューとネストされたナビゲーション履歴をレンダリングできるようにします。(I7a510、b/436248277)
  • 明示的な戻る/現在/進むモデルを導入して、ナビゲーションの状態を明確にし、ネストされたハンドラによる進むナビゲーションをサポートします。(Ib86da、b/420443609)
  • onForward* メソッドと isForwardEnabled を NavigationEventCallback に追加します。(Ic100f、b/436248290)
  • NavigationEventInput に進むナビゲーションのサポートを追加します。(I5734b)

API の変更

  • TestNavigationEventCallback を使用して、前方ナビゲーション イベントのテストを有効にします。isForwardEnabled フックと onForward* フックを使用します。(I21fb5、b/420443609)
  • NavEvent で onEvent* コールバックの名前を onBack* に変更します。(I228b3、b/436248290)
  • SwipeEdge をインライン クラスに変換します。(Id5e01)
  • navigationevent ライブラリを Java と相互運用できるようにします。すべての公開 API に Java コードから完全にアクセスできるようになり、混合言語プロジェクトや Java のみのプロジェクトにシームレスに統合できるようになりました。(Ibc944、I5465f、I9fb1e、b/440532890、b/443040294)
  • NavigationEventCallback の名前を NavigationEventHandler に変更して、API ロールを明確にします。この変更により、マルチステージ ナビゲーション ジェスチャーを処理するというクラスの目的がより明確になります。対応する addCallback メソッドは addHandler になりました。(I2492a、b/443040331)

バグの修正

  • 戻るフォールバックが「進む」ナビゲーションで実行されないようにします。(I74814、b/436248290)
  • 予測型「進む」ナビゲーションのサポートを追加します。NavigationEvent API で「戻る」ジェスチャーと「進む」ジェスチャーの両方が処理されるようになり、両方のナビゲーション方向で一貫したアニメーションが有効になりました。(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 に含まれる commit については、こちらをご覧ください。

API の変更

  • NavigationEventDispatcher.onHasEnabledCallbacksChanged を削除しました。(I50e97)
  • NavigationEventCallback.onEventCompleted() を抽象化します。(I36b38)
  • NavigationEventCallback#on* メソッドを protected に変更します。呼び出しコードを更新してオーバーライドします。(I6b691)
  • DirectNavigationEventInput 関数の名前を変更します。(Iffb62)
  • NavigationEventInput.onAttach を onAdded に変更しました。(I2d0b8)
  • NavigationEventInput.onDetach を onRemoved に変更しました。(I2d0b8)
  • NavigationEventInputHandler を NavigationEventInput に変更しました。(I676a4)
  • NavigationEventInput.onHasEnabledCallbacksChanged に @EmptySuper を追加しました。(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 に含まれる commit については、こちらをご覧ください。

新機能

Passive Listeners API

ナビゲーション ホストからカスタム コンテキスト情報を渡して、UI のどこからでもジェスチャーの状態変化を受動的にリッスンできるようになりました。これにより、予測型「戻る」やその他のジェスチャー駆動型ナビゲーションでコンテキスト対応のアニメーションが有効になります。

この機能は 2 つの部分で構成されています。

  1. Providing Info - NavigationEventInfo を使用してカスタムデータを渡します。
  2. Consuming State - dispatcher.state(NavigationEventState)を使用して、ジェスチャーの進行状況とコンテキストを観察します。
  • NavigationEventCallback が setInfo(currentInfo, previousInfo) メソッドを公開し、1 回の呼び出しでジェスチャー コンテキストを設定できるようになりました(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 を返す NavigationEventState に progress プロパティを追加します(I7b196):

    val progress = state.progress
    
  • NavigationEventDispatcherOwner コンポーザブルを追加して、NavigationEventDispatcher インスタンスを階層的に作成、リンク、破棄します。ディスパッチャーの有効状態の動的制御と自動クリーンアップを有効にします。

    @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)
  • NavigationEvent にデフォルト パラメータを追加して、インスタンス化を容易にし、テストを簡素化しました。これは TestNavigationEvent の代わりに使用する必要があります。(I5dc49、 I232f4)
  • 特定の現在/以前の状態のナビゲーション イベントをテストするための TestNavigationEventCallback を追加しました。(Idd22e、b/424470518)
  • NavigationEventInputHandler が抽象クラスになり、以前の AbstractNavigationEventInputHandler が DirectNavigationEventInputHandler の実装に置き換えられました(Iadde5、Ifed40I3897c、b/432616296、b/435416924)
  • NavigationEventInputHandler の send* 関数の接頭辞の名前が handle* に変更されました。(Iffcaf)
  • OnBackInvokedInputHandler が新たに abstract NavigationInputHandler を拡張するようになりました。(Ib45aa)
  • NavigationEventDispatcherOwner を変更し、ルート ディスパッチャーを作成するために null を明示的に渡す必要がある親ディスパッチャーを必須にしました。(Ia6f64、b/431534103)

バグの修正

  • NavigationEventDispatcher.dispose() でコレクションのコピーを回避することで効率を改善しました。(I4ab09)
  • NavigationEventHandler が有効状態の変化に正しく反応しない問題を修正しました。(Ia5268、I19bec、I5be5c、b/431534103)

ドキュメントの更新

  • NavigationEvent の KDoc を拡張し、統合イベント ラッパーとしての役割と、さまざまなナビゲーション タイプ(ジェスチャー、クリック)での詳細プロパティの動作を明確にしました。(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 に含まれる commit については、こちらをご覧ください。

親子階層のサポート:

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 コンポーザブルを導入します。ただし、この変更は現在のリリース カットには含まれておらず、次のリリース カットで予定されています。

Navigation テスト ライブラリ

  • navigationevent ライブラリ専用のテスト ユーティリティを提供する navigationevent-testing モジュールを追加しました。(0e50b6)
  • テスト用の TestNavigationEventCallback 偽ユーティリティ クラスを追加します。コールバック メソッドの呼び出しを記録し、受け取った NavigationEvent アイテムを保存して検証をサポートします。(4a0246)
  • TestNavigationEvent 疑似ユーティリティ関数を追加して、デフォルト値で NavigationEvent インスタンスを作成し、ナビゲーション イベント処理の単体テストを簡素化します。(3b63f5)
  • テスト用の TestNavigationEventDispatcherOwner 偽ユーティリティ クラスを追加します。テストでのインタラクション検証をサポートするため、フォールバックと有効状態変更イベントのカウントを追跡します。(c8753e)

API の変更

  • NavigationEventInputHandler を androidMain から commonMain に移動して、KMP 共通コードで使用できるようにします。イベントをディスパッチするための新しい public send* メソッドを追加しました。NavigationEventDispatcher のディスパッチ関数を public から internal に変更しました。ユーザーはイベントの送信に NavigationEventInputHandler を使用する必要があります。(Ia7114)
  • NavigationInputHandler を OnBackInvokedInputHandler に変更しました。(I63405)

バグの修正

  • 中間リストの割り当てを回避し、コールバック ディスパッチのパフォーマンスを向上させることでオーバーヘッドを削減するために、NavigationEventDispatcher をリファクタリングします。(I82702、I1a9d9)
  • NavigationEvent の touchX、touchY、progress フィールドに @FloatRange アノテーションを追加して、コンパイル時に有効な値の範囲を適用し、API の安全性を向上させます。(Iac0ec)

バージョン 1.0.0-alpha04

2025 年 7 月 2 日

androidx.navigationevent:navigationevent-*:1.0.0-alpha04 がリリースされました。バージョン 1.0.0-alpha04 に含まれる commit については、こちらをご覧ください。

バグの修正

  • 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 に含まれる commit については、こちらをご覧ください。

新機能

  • navigationevent ライブラリで Jetpack Compose の機能をサポートする新しい navigationevent-compose モジュールを導入しました。(980d78)
  • NavigationEvent Compose に新しい LocalNavigationEventDispatcherOwner ローカル コンポジションが追加されました。現在のコンポジションで使用可能かどうかを判断しやすくするため、null 許容の値を返します。基盤となる所有者が検出されない場合、NavigationEventHandler はエラーをスローするようになりました。(62ffda)
  • NavigationEvent Compose に、(予測型「戻る」ジェスチャー)イベントを処理するための新しい 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 は一度に 1 つの NavigationEventDispatcher にのみ登録できるようになりました。複数のディスパッチャーに追加すると、IllegalStateException がスローされます。この動作は、複数のディスパッチャを許可する OnBackPressedDispatcher とは異なります。(e82c19)
  • ナビゲーション中のミューテーションを防ぐために、isPassThrough を val にしました。これにより、NavigationEvent のディスパッチが中断される可能性があります。(I0b287)

バージョン 1.0.0-alpha02

2025 年 6 月 4 日

androidx.navigationevent:navigationevent-*:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。

API の変更

  • NavigationEventDispatcher のセカンダリ コンストラクタをデフォルトの引数に置き換えます。(I716a0)
  • NavigationEventCallback から優先度プロパティを削除します。代わりに NavigationEventDispatcher.addCallback() に優先度を渡します。(I13cae)

バグの修正

  • closeable の内部リストを同時に変更したことが原因で NavigationEventCallback.remove() が呼び出された場合に発生する可能性のある ConcurrentModificationException を修正しました。(b/420919815)

バージョン 1.0.0-alpha01

2025 年 5 月 20 日

androidx.navigationevent:navigationevent-*:1.0.0-alpha01 がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。

新機能

  • androidx.navigationevent ライブラリは、システムバックと予測型「戻る」を処理するための KMP ファースト API を提供します。NavigationEventDispatcher は、システム [戻る] イベントを受け取るために 1 つ以上の NavigationEventCallback インスタンスを登録するための共通 API として機能します。
  • このレイヤは、以前に androidx.activity でリリースされた API の下に位置し、高レベルのコンポーネントで Activity API を使用したり、Android フレームワークの OnBackInvokedDispatcher API を直接使用したりする際の、より制約の少ない代替手段となることを目指しています。Activity 1.12.0-alpha01 の一部として、androidx.activity API が Navigation Event API の上に書き直されました。