Skip to content

Latest commit

 

History

History
124 lines (94 loc) · 5.1 KB

File metadata and controls

124 lines (94 loc) · 5.1 KB

FlightTrackerApp

Application Android native de suivi des vols commerciaux en temps réel, développée en Kotlin et Jetpack Compose dans le cadre du projet de fin de module Android.

Dépôt GitHub : https://github.com/anas34b/FlightTrackerApp

Téléchargement ZIP : https://github.com/anas34b/FlightTrackerApp/archive/refs/heads/main.zip (ou via le bouton vert « Code → Download ZIP » sur la page GitHub)

✈️ Fonctionnalités

  • Liste des vols au départ ou à l'arrivée d'un aéroport
  • Toggle Départs / Arrivées (segmented control)
  • Recherche multi-modes :
    • Par code IATA d'aéroport (ex: CDG, LHR)
    • Par nom de ville (ex: Toulouse, Londres, New York) — ~80 villes mappées
    • Par numéro de vol (ex: AF1234)
  • Filtres rapides : aéroports populaires (CDG, LHR, JFK, DXB, AMS, LAX)
  • Écran de détail avec horaires, terminal, porte, retard, statut coloré
  • Liste des compagnies aériennes (avatar initiale + pays + code IATA)
  • Cache en mémoire pour économiser les requêtes API
  • Bouton 🔄 Actualiser pour forcer le re-fetch
  • Mode sombre automatique selon le réglage système

🏗️ Architecture

Architecture MVVM stricte en 4 couches :

Composables  →  ViewModel  →  Repository  →  RetrofitInstance  →  AviationStack API
   (UI)        (StateFlow)    (suspend fun)    (Singleton)
  • Single Activity + Navigation Compose avec passage d'argument dynamique (navArgument("flightId") { type = NavType.StringType })
  • Coroutines : suspend fun + viewModelScope.launch
  • Material 3 exclusivement, palette aviation personnalisée (light + dark)
  • Aucune string en dur dans les .kt (tout via stringResource(R.string.xxx))

🛠️ Stack technique

Catégorie Choix
Langage Kotlin 1.9.22
UI Jetpack Compose (BOM 2024.02.00) + Material 3
Navigation Navigation Compose 2.7.6
Réseau Retrofit 2.9.0 + Gson
Logging OkHttp Logging Interceptor 4.12.0
Async Kotlin Coroutines 1.7.3
Build Gradle 8.7 + AGP 8.2.2
Min SDK 24 (Android 7.0)
Target SDK 34 (Android 14)

🌐 API consommée

AviationStack — plan gratuit (100 requêtes/mois)

  • GET /flights — vols filtrés par dep_iata / arr_iata / flight_iata
  • GET /airlines — liste des compagnies

L'API étant en HTTP (pas HTTPS), le manifest active android:usesCleartextTraffic="true".

🔑 Quota API épuisé ? Régénérer la clé

Le plan gratuit AviationStack est limité à 100 requêtes par mois. Si plusieurs personnes lancent l'app (ex: lors de la correction), le quota partagé peut être atteint avant la fin du mois. Dans ce cas, l'app affichera un écran d'erreur "Erreur réseau" avec un message du type « You have exceeded your monthly API request limit ».

Comment générer une nouvelle clé (gratuit, 2 min)

  1. Aller sur https://aviationstack.com/signup/free
  2. Créer un compte (email + mot de passe, pas de carte bancaire demandée)
  3. Une fois connecté, le dashboard affiche "Your API Access Key" — copier la chaîne de caractères (ex: abcdef1234567890abcdef1234567890)

Où coller la nouvelle clé

Ouvrir le fichier app/src/main/java/com/example/flighttracker/network/RetrofitInstance.kt et remplacer la valeur de API_KEY :

const val API_KEY = "fbad45a163cd849b1bf6f19818d8bcc8"  // ← coller la nouvelle clé ici

Puis Build → Clean Project et relancer ▶. C'est tout.

▶️ Lancement

  1. Ouvrir le projet dans Android Studio (Hedgehog ou plus récent)
  2. Laisser Gradle synchroniser (~2 min au premier lancement)
  3. Sélectionner un émulateur (API 24+) ou un appareil physique
  4. Cliquer sur Run

📁 Structure du projet

app/src/main/java/com/example/flighttracker/
├── MainActivity.kt
├── network/          ← Retrofit, service, modèles Gson
├── data/             ← Repository, cache, mapping ville→IATA, SearchMode
├── viewmodel/        ← FlightViewModel, FlightDetailViewModel, UiState
└── ui/
    ├── navigation/   ← AppNavGraph
    ├── screens/      ← 3 écrans Compose
    ├── components/   ← FlightCard réutilisable
    └── theme/        ← Color, Theme, Type

📚 Documentation détaillée

Le dossier docs/ contient :

👤 Auteur

Projet réalisé par Anas Daoui dans le cadre du cours Android natif.