Aller au contenu principal

🧭 Android — Navigation

Navigation typée avec AzeooDestination après connectUser.

Prérequis​

AzeooSDK.initialize(context, apiKey, /* theme, deepLinks, … */)
AzeooSDK.shared.connectUser(token, gender, height, weight) { result -> … }
val sdk = AzeooSDK.shared

// Meal plan
sdk.navigate(AzeooDestination.Nutrition.Plan(id = "summer-plan-2025"))

// Recipe with display name
sdk.navigate(AzeooDestination.Nutrition.Recipe(id = 12345L, name = "Grilled Chicken"))

// Diary for yesterday (epoch ms)
sdk.navigate(AzeooDestination.Nutrition.Diary(date = yesterdayMs))

// AI scanner
sdk.navigate(AzeooDestination.Nutrition.Scanner(kind = ScannerKind.AI))

// Cross-module — from nutrition tab to training
sdk.navigate(AzeooDestination.Training.Workouts)

Enums associés :

enum class ScannerKind { BARCODE, MOBILE, AI }
enum class MealType { BREAKFAST, LUNCH, DINNER, SNACK }

Table complète des destinations : Catalogue des destinations.


API de pile​

sdk.navigate(AzeooDestination.Nutrition.Search())

sdk.back()
sdk.backToRoot()
sdk.canGoBack { canPop -> … }

sdk.navigation.getCurrentRoute { route -> Log.d("Azeoo", route) }

Accès via sdk ou sdk.navigation selon la surface de votre version du SDK — les deux pointent vers la même implémentation.


Conteneurs de modules​

À utiliser avec BottomNavigationView, NavigationRail ou Jetpack Navigation avec des destinations nutrition / entraînement séparées.

sdk.setModuleContainer(AzeooBottomNavCoordinator(
bottomNav = findViewById(R.id.bottom_nav),
mapping = mapOf(
AzeooDestination.Module.NUTRITION to R.id.nav_nutrition,
AzeooDestination.Module.TRAINING to R.id.nav_training,
),
))
Application d'exemple

example/android — MainActivity installe le coordinateur après la connexion.

Rail de navigation / Jetpack Nav : utilisez AzeooNavigationRailCoordinator ou AzeooNavComponentCoordinator avec la même idée de mapping.


Retour arrière​

Le retour système et le retour prédictif sont gérés par défaut.

Lorsque l'utilisateur est à la racine de la pile d'un module, le retour envoie la tâche en arrière-plan (moveTaskToBack) au lieu de terminer votre Activity.

Retour prédictif (Android 13+)​

Le SDK fusionne android:enableOnBackInvokedCallback="true" dans le manifeste de votre application.

Conflits de manifeste debug

Si une dépendance (ex. expo-dev-launcher) définit enableOnBackInvokedCallback="false" dans un overlay debug, la fusion peut échouer. Dans votre manifeste debug :

<application
android:enableOnBackInvokedCallback="true"
tools:replace="android:usesCleartextTraffic,android:enableOnBackInvokedCallback"
... />

Dialogues de sortie personnalisés : enregistrez un OnBackPressedCallback avec une priorité plus élevée que celui du SDK.


1. Configurer à l'initialisation​

AzeooSDK.initialize(
context = this,
apiKey = apiKey,
deepLinks = AzeooDeepLinkConfig(
scheme = "yourapp",
host = "yourapp.com",
pathPrefix = "/sdk",
),
)

2. Filtre d'intent​

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="yourapp.com" android:pathPrefix="/sdk" />
</intent-filter>

3. Transmettre l'URI​

override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
intent.data?.let { uri ->
sdk.navigation.handleDeepLink(uri) { handled ->
if (!handled) {
// optional: parse and sdk.navigate(...)
}
}
}
}
Liens inter-modules

Installez un conteneur de modules pour que /sdk/training/... bascule l'onglet de votre bottom nav.


Intégration + navigation​

TâcheAPI
L'onglet affiche l'UI nutritionsdk.modules.nutrition.getFragment()
Un bouton ouvre un plansdk.navigate(AzeooDestination.Nutrition.Plan(id))

Voir Composants UI et Module Nutrition.


Voir aussi​