navigationevent

  
La bibliothèque Navigation Event fournit une API KMP-first pour gérer le retour système ainsi que la prévisualisation du Retour.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
8 octobre 2025 - - 1.0.0-beta01 -

Déclarer des dépendances

Pour ajouter une dépendance à navigationevent, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Ajoutez les dépendances correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :

Groovy

dependencies {
    implementation "androidx.navigationevent:navigationevent:1.0.0-beta01"
}

Kotlin

dependencies {
    implementation("androidx.navigationevent:navigationevent:1.0.0-beta01")
}

Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.

Signaler un nouveau problème

Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.

Aucune note de version pour cet artefact.

Version 1.0

Version 1.0.0-beta01

8 octobre 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-beta01. La version 1.0.0-beta01 contient ces commits.

Modifications apportées à l'API

  • Corrigez l'annotation FloatRange pour NavigationEvent.touchX et NavigationEvent.touchY. Ces valeurs représentent des coordonnées de pixels absolues et n'ont pas de limite supérieure 1.0. (I4b205, b/445989313)
  • Refactorisez le composable NavigationEventDispatcherOwner en rememberNavigationEventDispatcherOwner. La fonction renvoie désormais directement le NavigationEventDispatcherOwner. Pour fournir ce propriétaire à une sous-composition, utilisez CompositionLocalProvider. (I874b2, b/444446629)

Version 1.0.0-alpha09

24 septembre 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha09. La version 1.0.0-alpha09 contient ces commits.

Modifications apportées à l'API

  • Utilisez directement l'objet singleton NavigationEventTransitionState.Idle au lieu d'instancier Idle(). (Ic7d9e, b/444734264)
  • Rendez les constructeurs pratiques internes. Obtenez des instances via NavigationEventDispatcher.history public au lieu d'une construction directe. (I3b7e0, b/444734264)
  • La création de NavigationEventState via rememberNavigationEventState est désormais requise. Le constructeur est désormais interne. (Ie143c, b/444734264)
  • Adoptez onBackCompletedFallback pour remplacer les utilisations et le paramètre du constructeur fallbackOnBackPressed. Le comportement reste inchangé. L'événement n'est appelé que pour les événements "Retour" terminés et non gérés. (Idabe9, b/444734264)
  • Le constructeur principal de NavigationEventHistory(mergedHistory, currentIndex) est désormais internal. Les consommateurs externes doivent utiliser les constructeurs publics (le constructeur vide ou le constructeur basé sur une partition) pour créer des instances. (I1c047, b/444734264)
  • Autoriser View.setViewTreeNavigationEventDispatcherOwner à accepter un propriétaire pouvant avoir une valeur nulle (Ic9eb6, b/444436762)
  • NavigationEventInfo est désormais un abstract class au lieu d'un interface. Mettez à jour toutes les implémentations personnalisées pour qu'elles héritent de la classe (par exemple, data class MyInfo : NavigationEventInfo()). (I1e59c, b/444734264)
  • L'ancienne propriété NavigationEventDispatcher.state et l'ancienne fonction getState<T>() ont été supprimées. Utilisez les nouveaux flux distincts dispatcher.transitionState (pour la progression du geste) et dispatcher.history (pour la pile de navigation). (Ic2ceb, b/444734264)
  • Le rappel NavigationEventInput.onInfoChanged(...) est remplacé. Implémentez le nouveau rappel onHistoryChanged(history: NavigationEventHistory) pour recevoir les mises à jour sous la forme d'un seul objet NavigationEventHistory. (I23e0b, b/444734264)
  • Introduire un nouveau NavigationEventDispatcher.history global StateFlow. Ce flux non générique permet aux observateurs de s'abonner uniquement aux modifications de la pile de navigation et reste stable pendant la progression du geste. Il s'agit de l'équivalent de transitionState. (I1db10, b/444734264)
  • Introduire un nouveau NavigationEventDispatcher.transitionState global StateFlow. Ce flux non générique permet aux observateurs de s'abonner uniquement à l'état du geste physique (Idle/InProgress), indépendamment de l'historique. (I171fa, b/444734264)
  • Présentez la classe NavigationEventHistoryState. Elle servira d'API principale pour observer l'historique des informations de navigation, distinct de l'état des gestes. (I81ca5, b/444734264)
  • NavigationEvent est désormais marqué comme @Immutable, ce qui permet au compilateur Compose d'optimiser les recompositions. (If78c7, b/444734264)
  • Les API du gestionnaire navigationevent-compose sont mises à jour. NavigationEventHandler et NavigationBackHandler (et leurs variantes) sont désormais compatibles avec une nouvelle surcharge qui accepte les NavigationEventState hissés. Les surcharges simples (prenant currentInfo) sont conservées et utilisent désormais ce nouveau modèle d'état en interne. (Ic3251, b/444734264)
  • Ajoutez le nouveau support d'état @Stable NavigationEventState<T> à la bibliothèque navigationevent-compose. Cet objet combine l'historique local avec l'état du geste local et constituera le lien principal entre rememberNavigationEventState et NavigationEventHandler. (Ifb69f, b/444734264)
  • Ajoutez une propriété transitionState: TransitionState publique et en lecture seule à NavigationEventHandler. Les gestionnaires conservent désormais leur propre état de transition, que les systèmes externes peuvent observer. (I9acd2, b/444734264)
  • Présentation de la nouvelle classe scellée TransitionState. Il s'agira de l'API principale pour observer l'état des gestes, indépendamment de l'historique de navigation. (Id4beb, b/444734264)
  • Exposez currentInfo, backInfo et forwardInfo en tant que propriétés publiques en lecture seule sur NavigationEventHandler. (Ia7636, b/444734264)
  • Les implémentations de NavigationEventHandler doivent désormais fournir une valeur initialInfo: T au constructeur de base. (Idcfea, b/444734264)
  • Remplacez OnBackInvokedInput par OnBackInvokedOverlayInput ou OnBackInvokedDefaultInput. (I5323f, b/428948766)
  • Marquez NavigationEventState comme @Immutable. Cela améliore les performances de Compose en garantissant que les composables qui observent cet état peuvent correctement ignorer la recomposition. (I399c8)
  • Renommez NavigationEventInfo.NotProvided en NavigationEventInfo.None; et mettez à jour les références. Aucun changement de comportement. (I5e2d4)
  • NavigationEventInfo est désormais marqué comme @Immutable, ce qui permet au compilateur Compose d'optimiser les recompositions. (I7c112)
  • Améliorez l'ergonomie Java avec une interface amusante pour la solution de repli de saisie à l'arrière. (I8a860)
  • onHasEnabledHandlerChanged a été renommé onHasEnabledHandlersChanged. Cela précise que le rappel indique l'état d'activation collectif de tous les gestionnaires, et pas seulement d'un seul. (I1af61, b/443711297)
  • Supprimez hasEnabledHandler() de NavigationEventDispatcher; et utilisez NavigationEventInput.onHasEnabledHandlersChanged à la place. (Idef72, b/443711297)
  • Ajoutez un rappel onInfoChanged à NavigationEventInput pour informer les écouteurs des modifications apportées à l'historique de navigation. Cela fournit le contexte complet des piles actuelles, précédentes et suivantes, ce qui permet aux entrées de réagir aux informations contextuelles. (I69a8b, b/443282983)
  • Fais de NavigationEvent swipeEdge un @IntDef (Icee54, b/443950342)
  • Ajoutez un paramètre priority à NavigationEventDispatcher.addInput pour limiter un répartiteur à une seule priorité. Les événements tels que onHasEnabledCallbacksChanged ne se déclenchent désormais que lorsque les rappels de cette priorité changent. (I3e488, b/443711297)
  • Renommez le paramètre NavigationEventDispatcher de parentDispatcher en parent pour plus de clarté. (Id4f1f, b/443801782)
  • Suppression de NavigationEventPriority au profit de @IntDef pour les utilisateurs Java (I10a9f, b/440514265)
  • Applique le contrat du gestionnaire de navigation. Si votre NavigationEventHandler définit isBackEnabled ou isForwardEnabled sur true, vous devez maintenant remplacer onBackCompleted ou onForwardCompleted, respectivement. Les implémentations par défaut génèrent désormais une exception pour éviter les échecs silencieux. (I17c62)
  • Appliquez des valeurs de priorité valides lorsque vous ajoutez des gestionnaires d'événements de navigation. L'appel de addHandler avec une priorité non prise en charge génère désormais une IllegalArgumentException, ce qui permet d'obtenir un retour immédiat en cas d'utilisation incorrecte sur toutes les plates-formes cibles. (I3c474)

Correction de bugs

  • Rendez addHandler idempotent ; ignorez les inscriptions en double. (I052aa, b/444734264)
  • Maintenez la synchronisation des propriétés NavigationEventState lors de la recomposition. (Ib3b4d, b/444734264)
  • Assurez-vous que NavigationEventInputs reçoit les informations contextuelles actuelles (actuelles, précédentes, suivantes) immédiatement après l'enregistrement. (Ie65bf, b/443282983)

Version 1.0.0-alpha08

10 septembre 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha08. La version 1.0.0-alpha08 contient ces commits.

Nouvelles fonctionnalités

  • Introduisez une API NavigationEventHandler basée sur Lambda qui remplace le gestionnaire basé sur Flow. Gérez les gestes de retour et d'avance avec de simples rappels au lieu de collecter des flux, ce qui réduit le code récurrent et évite les problèmes d'annulation. Fournissez NavigationBackHandler et NavigationForwardHandler en tant qu'API pratiques ciblées. Supprimez NavigationEventHandler basé sur Flow et migrez vers les nouveaux rappels. (I23bac, b/436248277)
  • Permet aux auditeurs passifs d'accéder à l'intégralité de la pile de retour de navigation grâce à des informations de retour combinées. Permet aux UI d'afficher des aperçus et l'historique de navigation imbriqué au lieu d'être limitées au rappel le plus haut. (I7a510, b/436248277)
  • Introduisez un modèle explicite de retour/actuel/avant pour clarifier l'état de navigation et prendre en charge la navigation vers l'avant avec des gestionnaires imbriqués. (Ib86da, b/420443609)
  • Ajoutez les méthodes onForward* et isForwardEnabled à NavigationEventCallback. (Ic100f, b/436248290)
  • Ajoutez la prise en charge de la navigation vers l'avant à NavigationEventInput. (I5734b)

Modifications apportées à l'API

  • Activez le test des événements de navigation vers l'avant avec TestNavigationEventCallback. Utilisez les hooks isForwardEnabled et onForward*. (I21fb5, b/420443609)
  • Renommez les rappels onEvent* en onBack* dans NavEvent. (I228b3, b/436248290)
  • Convertissez SwipeEdge en classe inline. (Id5e01)
  • Rendez la bibliothèque navigationevent interopérable avec Java. Toutes les API publiques sont désormais entièrement accessibles à partir du code Java, ce qui permet une intégration fluide dans les projets multilingues ou Java uniquement. (Ibc944,I5465f, I9fb1e, b/440532890b/443040294)
  • Clarification des rôles d'API en renommant NavigationEventCallback en NavigationEventHandler. Cette modification reflète mieux l'objectif de la classe, qui est de gérer les gestes de navigation à plusieurs étapes. La méthode addCallback correspondante est désormais addHandler. (I2492a, b/443040331)

Correction de bugs

  • Empêchez le retour en arrière de s'exécuter lors de la navigation vers l'avant. (I74814, b/436248290)
  • Ajoutez la prise en charge de la navigation prédictive vers l'avant. Les API NavigationEvent gèrent désormais les gestes Retour et Avant, ce qui permet d'obtenir des animations cohérentes pour les deux sens de navigation. (Idc98c, b/436248290)
  • Empêche un plantage IllegalStateException lors de la recomposition lorsqu'un NavigationEventDispatcherOwner enfant est supprimé. (Iff50c, b/412629020)
  • Les écouteurs passifs peuvent désormais accéder à l'intégralité de la pile de navigation arrière grâce aux informations combinées sur l'historique, ce qui permet aux UI d'afficher des aperçus et l'historique de navigation imbriqué au lieu d'être limitées au rappel le plus haut. (I7a510, b/436248277)

Version 1.0.0-alpha07

27 août 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha07. La version 1.0.0-alpha07 contient ces commits.

Modifications apportées à l'API

  • Supprimez NavigationEventDispatcher.onHasEnabledCallbacksChanged. (I50e97)
  • Rendez NavigationEventCallback.onEventCompleted() abstrait. (I36b38)
  • Remplacez les méthodes NavigationEventCallback#on* par protected. Mettez à jour le code appelant pour les remplacer. (I6b691)
  • Renommez les fonctions DirectNavigationEventInput. (Iffb62)
  • NavigationEventInput.onAttach a été renommé onAdded. (I2d0b8)
  • NavigationEventInput.onDetach a été renommé onRemoved. (I2d0b8)
  • NavigationEventInputHandler a été renommé NavigationEventInput. (I676a4)
  • Ajout de @EmptySuper à NavigationEventInput.onHasEnabledCallbacksChanged. (If9853)
  • Implémentez onAttach dans NavigationEventInputHandler. (I03648)
  • Implémentez onDetach dans NavigationEventInputHandler. (I03648)
  • La valeur par défaut de NavigationEventCallback est "activé" lors de la création. (Ic0188)
  • Remplacement de NavigationEventInput.addOnHasEnabledCallbacksChangedCallback par NavigationEventInput.onHasEnabledCallbacksChanged. (I64e93)
  • Le thread principal est requis pour NavigationEventDispatcher.addInput. (Ic2930)
  • Le thread principal est requis pour NavigationEventDispatcher.removeInput. (Ic2930)
  • Supprimez Dispatcher.addOnHasEnabledCallbacksChangedCallback. Remplacer par Dispatcher.onHasEnabledCallbacksChanged. (Ida3e3, b/436530096)

Correction de bugs

  • Correction d'un bug qui entraînait un comportement incorrect du cycle de vie lors de l'ajout d'un gestionnaire déjà associé ou de la suppression d'un gestionnaire non associé. (I9e47b)

Version 1.0.0-alpha06

13 août 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha06. La version 1.0.0-alpha06 contient ces commits.

Nouvelles fonctionnalités

API Passive Listeners

Vous pouvez désormais transmettre des informations contextuelles personnalisées depuis n'importe quel hôte de navigation et écouter passivement les changements d'état des gestes depuis n'importe quel endroit de votre UI. Cela permet d'activer des animations contextuelles pour la prévisualisation du geste Retour et d'autres types de navigation par gestes.

Cette fonctionnalité comporte deux volets :

  1. Fournir des informations : utilisez NavigationEventInfo pour transmettre des données personnalisées.
  2. État de consommation : utilisez dispatcher.state (NavigationEventState) pour observer la progression et le contexte du geste.
  • NavigationEventCallback expose désormais la méthode setInfo(currentInfo, previousInfo) pour définir le contexte du geste en un seul appel (I1d5e7, b/424470518).
  • NavigationEventHandler ajoute une nouvelle surcharge qui accepte currentInfo et previousInfo, ce qui en fait l'API principale pour fournir le contexte dans les applications Compose (I6ecd3, b/424470518).

Exemple :

  data class MyScreenInfo(val screenName: String) : NavigationEventInfo

  NavigationEventHandler(
      enabled = true,
      currentInfo = MyScreenInfo("Details Screen"),
      previousInfo = MyScreenInfo("Home Screen")
  ) { /* Handle back completion */ }
  • NavigationEventDispatcher expose désormais dispatcher.state et dispatcher.getState<T>() (If7fae, Ia90ca, b/424470518). Ces API basées sur StateFlow permettent à n'importe quelle UI d'observer la progression des gestes et les données contextuelles sans gérer directement l'événement.

Exemple :

  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 */ }
  }
  • Ajoutez la propriété progress à NavigationEventState (I7b196) qui renvoie latestEvent.progress en cas de progression ou 0F dans le cas contraire :

    val progress = state.progress
    
  • Ajout du composable NavigationEventDispatcherOwner pour créer, associer et supprimer des instances NavigationEventDispatcher de manière hiérarchique. Activez le contrôle dynamique de l'état activé du répartiteur et le nettoyage automatique.

    @Composable
    fun Sample() {
        NavigationEventDispatcherOwner(enabled = true) {
            val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current
        }
    }
    

Modifications apportées à l'API

  • Le paramètre isPassthrough a été supprimé de NavigationEventCallback. (I99028, b/424470518)
  • Les constructeurs NavigationEventState sont désormais internes. Pour les tests, mettez à jour l'état (par défaut, Idle) via DirectNavigationEventInputHandler. Appelez handleOnStarted ou handleOnProgressed pour définir l'état sur InProgress, et handleOnCompleted ou handleOnCancelled pour le rétablir sur Idle. Pour mettre à jour NavigationEventInfo, utilisez NavigationEventCallback.setInfo. (I93dca, b/424470518)
  • Ajout de paramètres par défaut à NavigationEvent pour faciliter l'instanciation et simplifier les tests, qui doivent être utilisés à la place de TestNavigationEvent. (I5dc49, I232f4)
  • Ajout d'un TestNavigationEventCallback pour tester les événements de navigation avec des états actuels/précédents spécifiques. (Idd22e, b/424470518)
  • NavigationEventInputHandler est désormais une classe abstraite qui remplace l'ancienne AbstractNavigationEventInputHandler par une implémentation dans DirectNavigationEventInputHandler (Iadde5, Ifed40I3897c, b/432616296, b/435416924).
  • Le préfixe des fonctions send* dans NavigationEventInputHandler a été remplacé par handle*. (Iffcaf)
  • OnBackInvokedInputHandler étend désormais le nouveau NavigationInputHandler abstract. (Ib45aa)
  • Modification de NavigationEventDispatcherOwner pour exiger un répartiteur parent où vous devez transmettre explicitement null pour créer un répartiteur racine. (Ia6f64, b/431534103)

Correction de bugs

  • Efficacité améliorée en évitant les copies de collections dans NavigationEventDispatcher.dispose(). (I4ab09)
  • Correction d'un problème où NavigationEventHandler ne répondait pas correctement aux modifications de son état activé. (Ia5268,I19bec, I5be5c, b/431534103)

Nouveautés de Docs

  • La documentation KDocs pour NavigationEvent a été étendue pour clarifier son rôle d'encapsuleur d'événements unifié et détailler le comportement des propriétés pour différents types de navigation (gestes, clics). (I91e8d)
  • Mise à jour de la documentation pour les API Compose de gestion du retour système (BackHandler, PredictiveBackHandler, NavigationEventHandler) afin de préciser le comportement, en particulier en ce qui concerne l'ordre des rappels. (I7ab94, )

Mise à jour de la dépendance

  • NavigationEvent dépend désormais de Compose Runtime 1.9.0-beta03, ce qui permet à l'artefact navigationevent-compose de prendre en charge toutes les cibles KMP. (Ia1b87)

Version 1.0.0-alpha05

30 juillet 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha05. La version 1.0.0-alpha05 contient ces commits.

Prise en charge de la hiérarchie parent-enfant :

Un NavigationEventDispatcher peut désormais avoir des dispatchers parents et enfants, formant une structure arborescente hiérarchique. Cela permet aux événements de navigation de se propager et d'être gérés de manière plus flexible dans les composants d'interface utilisateur Compose complexes en reflétant la hiérarchie structurelle de l'UI via des dispatchers chaînés. (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)

La propriété hiérarchique isEnabled permet un contrôle descendant d'un répartiteur. Lorsque isEnabled est défini sur false sur un répartiteur, tous ses répartiteurs descendants sont automatiquement désactivés. Cette fonctionnalité permet de désactiver efficacement des branches entières du système d'événements de navigation. (I9e985)

  // Disabling the child dispatcher disables all its callbacks and any of its children recursively.
  childDispatcher.isEnabled = false

De plus, la propriété isEnabled sur NavigationEventCallback respecte désormais l'état activé de son répartiteur associé. Cela signifie qu'un rappel n'est considéré comme activé que si le rappel lui-même et son répartiteur (y compris ses ancêtres) sont activés. Cela garantit un contrôle hiérarchique cohérent sur l'activation des rappels. (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()

Une nouvelle méthode dispose() a été introduite pour nettoyer correctement les dispatchers et leurs enfants. L'appel de dispose() arrête les écouteurs pour éviter les fuites de mémoire, supprime de manière récursive tous les dispatchers enfants, supprime tous les rappels enregistrés auprès du dispatcher et le dissocie de son parent. Cela garantit que les ressources sont libérées correctement lorsque les dispatchers ne sont plus nécessaires. (I9e985)

  // Dispose the child dispatcher to clean up resources.
  childDispatcher.dispose()

Si une méthode publique est appelée sur un répartiteur supprimé, une IllegalStateException est immédiatement générée. Cela évite les échecs silencieux et aide les développeurs à identifier les utilisations inappropriées pendant le développement. (Ic2dc3)

  val callback2 = TestNavigationEventCallback()

  // Attempting to use a disposed dispatcher will throw an exception.
  assertThrows<IllegalStateException> {
      childDispatcher.addCallback(callback2)
  }

Remarque : Nous allons introduire un nouveau composable NavigationEventDispatcherOwner qui gère automatiquement un répartiteur enfant dans l'UI Compose dans aosp/3692572. Toutefois, ce changement n'a pas été inclus dans la version actuelle et est prévu pour la prochaine.

Bibliothèque de test de navigation

  • Ajoutez le module navigationevent-testing pour fournir des utilitaires de test dédiés à la bibliothèque navigationevent. (0e50b6)
  • Ajout de la classe utilitaire fictive TestNavigationEventCallback pour les tests. Il enregistre les appels de méthode de rappel et stocke les éléments NavigationEvent reçus pour faciliter la validation. (4a0246)
  • Ajout d'une fonction utilitaire factice TestNavigationEvent pour créer des instances NavigationEvent avec des valeurs par défaut, ce qui simplifie les tests unitaires pour le traitement des événements de navigation. (3b63f5)
  • Ajout de la classe utilitaire fictive TestNavigationEventDispatcherOwner pour les tests. Il suit le nombre d'événements de changement d'état (activé/désactivé) et de secours pour permettre la vérification des interactions dans les tests. (c8753e)

Modifications apportées à l'API

  • Déplacez NavigationEventInputHandler de androidMain vers commonMain pour le rendre disponible dans le code commun KMP. Ajout de nouvelles méthodes public send* pour distribuer les événements. Modifiez les fonctions de répartition sur NavigationEventDispatcher de public à internal. Les utilisateurs doivent désormais utiliser NavigationEventInputHandler pour envoyer des événements. (Ia7114)
  • NavigationInputHandler a été renommé OnBackInvokedInputHandler. (I63405)

Correction de bugs

  • Refactorisez NavigationEventDispatcher pour réduire la surcharge en évitant les allocations de listes intermédiaires et en améliorant les performances de répartition des rappels. (I82702, I1a9d9)
  • Ajout d'annotations @FloatRange aux champs touchX, touchY et progress dans NavigationEvent pour appliquer des plages de valeurs valides au moment de la compilation et améliorer la sécurité de l'API. (Iac0ec)

Version 1.0.0-alpha04

2 juillet 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha04. La version 1.0.0-alpha04 contient ces commits.

Correction de bugs

  • Utilisation de implementedInJetBrainsFork pour navigationevent-compose et ajout d'une cible commonStubs pour correspondre aux conventions Compose. Modification demandée par JetBrains. (f60c79)
  • Correction de l'application du plug-in de compilation Compose pour Kotlin/Native afin de garantir la génération correcte des stubs. Aucun impact sur les API publiques ni sur le comportement. (1890c9)

Version 1.0.0-alpha03

18 juin 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha03. La version 1.0.0-alpha03 contient ces commits.

Nouvelles fonctionnalités

  • Ajout d'un nouveau module navigationevent-compose pour prendre en charge les fonctionnalités Jetpack Compose dans la bibliothèque navigationevent. (980d78)
  • NavigationEvent Compose a ajouté une nouvelle composition locale LocalNavigationEventDispatcherOwner. Elle renvoie une possibilité de valeur nulle pour mieux déterminer si elle est disponible dans la composition actuelle. NavigationEventHandler génère désormais une erreur si le propriétaire sous-jacent est introuvable. (62ffda)
  • NavigationEvent Compose a ajouté un nouveau composable NavigationEventHandler pour gérer les événements (prévisualisation du geste Retour). Il fournit un Flow d'objets NavigationEvent qui doivent être collectés dans le lambda de suspension que vous fournissez 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
  }
}

Modifications apportées à l'API

  • Chaque NavigationEventCallback ne peut désormais être enregistré qu'auprès d'un seul NavigationEventDispatcher à la fois. Si vous l'ajoutez à plusieurs dispatchers, une erreur IllegalStateException se produit. Notez que ce comportement diffère de OnBackPressedDispatcher, qui autorise plusieurs coordinateurs. (e82c19)
  • isPassThrough est désormais un val pour éviter toute mutation pendant la navigation, ce qui pourrait interrompre l'envoi de NavigationEvent. (I0b287)

Version 1.0.0-alpha02

4 juin 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha02. La version 1.0.0-alpha02 contient ces commits.

Modifications apportées à l'API

  • Remplacez le constructeur secondaire de NavigationEventDispatcher par des arguments par défaut. (I716a0)
  • Supprimez la propriété de priorité de NavigationEventCallback. Transmettez plutôt la priorité à NavigationEventDispatcher.addCallback(). (I13cae)

Correction de bugs

  • Correction d'une ConcurrentModificationException qui pouvait se produire lors de l'appel de NavigationEventCallback.remove() en raison de la modification simultanée de la liste interne des éléments fermables. (b/420919815)

Version 1.0.0-alpha01

20 mai 2025

Publication d'androidx.navigationevent:navigationevent-*:1.0.0-alpha01. La version 1.0.0-alpha01 contient ces commits.

Nouvelles fonctionnalités

  • La bibliothèque androidx.navigationevent fournit une API KMP-first pour gérer le retour système ainsi que la prévisualisation du Retour. NavigationEventDispatcher sert d'API commune pour enregistrer une ou plusieurs instances NavigationEventCallback afin de recevoir les événements de retour système.
  • Cette couche se situe en dessous des API publiées précédemment dans androidx.activity et vise à remplacer de manière moins arbitraire l'utilisation des API Activity dans les composants de niveau supérieur ou l'utilisation directe des API OnBackInvokedDispatcher du framework Android. Les API androidx.activity ont été réécrites au-dessus des API Navigation Event dans le cadre d'Activity 1.12.0-alpha01.