- Instructions
- Le code et son organisation
- Téléchargement
L'application doit charger une liste d'albums à partir de ce point d'API REST.
Les données chargées doivent être affichées à l'utilisateur et persister à fin d'être disponibles dans les conditions suivantes :
- accès offline;
- changement de configuration (rotation, langue, écran splité, etc.);
- redémarrage de l'application ou du téléphone;
- restauration de l'application;
Version Android minimale à supporter : Android 4.4 KitKat (SDK 19).
L'application sera intégralement codée en Kotlin et se reposera sur ses coroutines :
- Kotlin, car ce langage est plus clair et plus agréable à utiliser que Java 7 & 8.
- Les coroutines, car elles permettent une gestion de l'asynchrone plus maintenable et plus sûre.
Un Android Studio avec version minimale 3.6.3
est nécessaire pour la compilation du projet.
Le code est disponible et est versionnée dans ce dépôt Github qui utilise GitFlow pour son organisation.
D'une manière générale, toutes les classes respecteront, au mieux, le principe du SOLID.
L'application utilise le pattern MVVM à l'aide de la stack AndroidX (Jetpack - Architecture Components) :
Lifecycle
: pour la gestion et le respect des cycles de vie de l'app et de ses vues (Activities & Fragments);ViewModel
etLiveData
: pour une gestion propre des données en-dehors de la vue, en respect de son cycle de vie et ainsi permettre le DataBinding;Navigation
: pour simplifier la navigation dans l'app avec ses Fragments;Room
: pour la sauvegarde des données chargées dans une base de données locale SQL;
Pour la partie communication avec le point d'API REST, l'application utilise Retrofit 2
qui se chargera de récupérer les données proprement.
En raison du support d'Android SK 19, une version dite legacy de okhttp
doit être utilisée car les nouvelles versions supportent uniquement Android SDK 21.
Le projet est composé de trois modules:
- le module
app
qui contient toute la partie applicative, à savoir les vues qui seront affichées (UI /UX). - le module
services
servant à communiquer avec le point d'API et de stocker les données chargées. Ce module reste indépendant. - le module
common
qui contient principalement du code dit utilitaire. Ce module reste indépendant.
Une telle modularisation facilite la maintenance du code, par la séparation des logiques, et une compilation plus rapide avec Gradle.
L'application fera appel aux librairies suivantes pour son bon fonctionnement :
Dagger 2
pour l'injection des APIs du moduleservice
comme dépendances dans les parties du moduleapp
concernées.Glide
pour le chargement et la mise en cache des images de façon asynchrone.Picasso
en remplacement deGlide
, pour le moment, car il y a soucis avec le servicevia.placeholder.com
(voir issue)OkHTTP 3.12.x
pour le support en mode legacy des SDK antérieures à 21
L'application peut être téléchargée via ce lien AppCenter publique.
Création: 05.05.20 Dernière édition: 11.05.20 Auteur: Vincent Ricard - [email protected]