Bruno Charest 9e021397b7 feat: add product variants field to catalog items with inline detail panel UI for quantity/variant/tag/note selection
- 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
2026-04-30 09:29:38 -04:00
2026-04-25 10:26:13 -04:00
2026-04-25 10:26:13 -04:00
2026-04-25 10:26:13 -04:00
2026-04-25 10:26:13 -04:00
2026-04-25 10:26:13 -04:00
2026-04-25 10:26:13 -04:00
2026-04-25 10:26:13 -04:00

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.

Description
SafeBite
Readme 16 MiB
Languages
Kotlin 96.1%
Python 3.5%
PowerShell 0.4%