# 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. ```powershell .\gradlew assembleDebug .\gradlew installDebug ``` ### Tests unitaires ```powershell .\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 :** ```powershell .\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](https://world.openfoodfacts.org), 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**.