- Increment catalog version from 4 to 5 and database version from 8 to 9 - Add `variants` field to `CatalogItemEntity`, `ItemSeed`, and `CatalogItem` models - Populate variants for common items (apples, tomatoes, carrots, peppers, onions, potatoes, mushrooms, milk, yogurt, eggs, cheese, chicken, sausages, salmon, bread, grapes, peppers) - Implement `ItemDetailPanel` composable with quantity
SafeBite
SafeBite est une application Android native (Kotlin + Jetpack Compose) qui permet aux personnes souffrant d'allergies ou d'intolérances alimentaires de scanner un code-barres en épicerie et d'obtenir instantanément un verdict visuel (SAFE / ATTENTION / DANGER) selon leurs profils d'allergies configurés.
Fonctionnalités
- Profils d'allergies multiples : allergies sévères (DANGER), intolérances modérées (ATTENTION), restrictions alimentaires, plusieurs profils simultanés.
- Scanner de code-barres via CameraX + ML Kit (EAN-13/8, UPC-A/E, QR).
- Open Food Facts API v2 pour les données produits + cache local hors-ligne (Room).
- OCR pour lire les listes d'ingrédients quand le produit est introuvable (Google ML Kit Text Recognition, entièrement sur l'appareil).
- Moteur d'analyse 3 couches : tags OFF → ingrédients → mentions "peut contenir / may contain" (FR + EN).
- Historique filtrable et recherchable.
- Paramètres : langue FR/EN, langue de détection, thème (clair/sombre/système), vibration, son.
- Onboarding guidé au premier lancement.
Stack technique
| Domaine | Technologie |
|---|---|
| Langage / Build | Kotlin 2.0.20, AGP 8.5.2, Gradle 8.9, JDK 17 |
| UI | Jetpack Compose (BOM 2024.09.02), Material 3 |
| Architecture | MVVM + Clean Architecture (domain / data / presentation) |
| DI | Hilt 2.52 |
| Base locale | Room 2.6.1 + KSP |
| Préférences | DataStore Preferences 1.1.1 |
| Réseau | Retrofit 2.11 + OkHttp 4.12 + Moshi 1.15 |
| Caméra | CameraX 1.3.4 |
| ML Kit | Barcode Scanning 17.3.0, Text Recognition 16.0.1 |
| Navigation | Navigation Compose 2.8.1 |
| Images | Coil 2.7.0 |
| Logs | Timber 5.0.1 |
- minSdk 26 (Android 8.0), targetSdk 34 (Android 14).
Structure du projet
com.safebite.app/
├── di/ # Modules Hilt
├── data/
│ ├── local/ # Room database + DataStore
│ ├── remote/ # OpenFoodFactsApi + DTO + mapper
│ ├── repository/ # Implémentations des repositories
│ └── util/ # ConnectivityObserver
├── domain/
│ ├── model/ # UserProfile, Product, AllergenType, ScanResult, etc.
│ ├── engine/ # AllergenAnalysisEngine (moteur 3 couches)
│ ├── repository/ # Interfaces
│ └── usecase/ # Cas d'usage
└── presentation/
├── navigation/ # NavGraph + Screen
├── theme/ # Color, Theme, Type, Shape
├── common/ # UiState + composants partagés
├── screen/ # onboarding, home, scanner, result, ocr, profile, history, settings
└── MainActivity.kt
Build & Run
Pré-requis
- Android Studio Koala Feature Drop (2024.1.2) ou plus récent, avec JDK 17.
- Un appareil physique Android 8.0+ avec caméra (l'émulateur avec caméra virtuelle fonctionne pour l'UI, pas pour le scan réel).
Compiler et installer
Le projet inclut le Gradle Wrapper pour assurer la reproductibilité des builds.
.\gradlew assembleDebug
.\gradlew installDebug
Tests unitaires
.\gradlew test
Les tests du moteur d'analyse se trouvent dans app/src/test/java/com/safebite/app/domain/engine/AllergenAnalysisEngineTest.kt.
Générer les APKs
Le script build_apks.ps1 (PowerShell) permet de compiler les versions Debug et Release de l'application, et d'incrémenter automatiquement la version de l'application.
Utilisation :
.\build_apks.ps1 [-Major | -Minor | -Patch]
Options :
-Major: Incrémente la version majeure (X.0.0) et réinitialise les versions mineure et de patch.-Minor: Incrémente la version mineure (x.Y.0) et réinitialise la version de patch.-Patch: Incrémente la version de patch (x.y.Z).- Si aucune option n'est spécifiée, le script utilise la version actuelle pour la compilation.
.\build_apks.ps1 -Help: Affiche ce message d'aide.
Les fichiers APK générés se trouvent dans les dossiers suivants :
- Debug :
app\build\outputs\apk\debug\app-debug.apk - Release :
app\build\outputs\apk\release\app-release.apk
Permissions
| Permission | Usage |
|---|---|
CAMERA |
Scan de codes-barres et capture OCR (demandée à l'utilisateur). |
INTERNET, ACCESS_NETWORK_STATE |
Requêtes Open Food Facts. |
VIBRATE |
Feedback haptique au scan réussi. |
Aucune image n'est jamais envoyée hors de l'appareil : le scan de code-barres et l'OCR tournent intégralement sur l'appareil via ML Kit.
Attribution
Les données produits proviennent de Open Food Facts, une base de données collaborative ouverte.
Avertissement important
SafeBite est un outil d'aide. Il ne remplace pas la lecture attentive de l'étiquette. Les données peuvent être incomplètes ou inexactes. En cas de doute, ne consommez pas le produit. En cas de réaction allergique, appelez le 911.