🧠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
Naviguer vers un écran​
// 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,
),
))
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.
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.
Liens profonds​
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(...)
}
}
}
}
Installez un conteneur de modules pour que /sdk/training/... bascule l'onglet de votre bottom nav.
Intégration + navigation​
| Tâche | API |
|---|---|
| L'onglet affiche l'UI nutrition | sdk.modules.nutrition.getFragment() |
| Un bouton ouvre un plan | sdk.navigate(AzeooDestination.Nutrition.Plan(id)) |
Voir Composants UI et Module Nutrition.