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)
- 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)
- Par code IATA d'aéroport (ex:
- 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 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 viastringResource(R.string.xxx))
| 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) |
AviationStack — plan gratuit (100 requêtes/mois)
GET /flights— vols filtrés pardep_iata/arr_iata/flight_iataGET /airlines— liste des compagnies
L'API étant en HTTP (pas HTTPS), le manifest active
android:usesCleartextTraffic="true".
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 ».
- Aller sur https://aviationstack.com/signup/free
- Créer un compte (email + mot de passe, pas de carte bancaire demandée)
- Une fois connecté, le dashboard affiche "Your API Access Key" — copier
la chaîne de caractères (ex:
abcdef1234567890abcdef1234567890)
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é iciPuis Build → Clean Project et relancer ▶. C'est tout.
- Ouvrir le projet dans Android Studio (Hedgehog ou plus récent)
- Laisser Gradle synchroniser (~2 min au premier lancement)
- Sélectionner un émulateur (API 24+) ou un appareil physique
- Cliquer sur Run ▶
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
Le dossier docs/ contient :
00_changelog.md— Journal de bord chronologique du développement01_metier.md— Analyse métier (contexte, utilisateurs, user stories, règles)02_ecrans.md— Écrans, navigation et design system03_tracabilite_exigences.md— Traçabilité ligne par ligne entre les contraintes du sujet et le code
Projet réalisé par Anas Daoui dans le cadre du cours Android natif.