← Blog

Le tableau de bord de transparence dans votre poche

Kotlin Multiplatform Compose Android Ingénierie
Défilement dans l'application Transparency : vue d'ensemble, retraits gouvernementaux, explorateur de jeux de données et graphique en direct, le tout dans un cadre de téléphone
Vue d'ensemble → retraits → explorateur de jeux de données → un graphique en direct, le tout depuis la même API.

L'API de requêtes de transparence disposait d'un tableau de bord web depuis un moment. Ce qui lui manquait, c'était une icône sur l'écran d'accueil. L'explorateur de données est donc désormais une application native — il fonctionne sur Android et sur ordinateur, à partir d'une seule base de code Kotlin Multiplatform, et il communique avec exactement la même API publique que le site web.

Vous pouvez télécharger la version Android et l'installer manuellement dès aujourd'hui.

Pourquoi une application

La plupart de ces données, on les consulte, on ne s'assoit pas pour les étudier — une tendance des retraits, la comparaison des chiffres d'une plateforme à l'autre, l'allure des demandes d'un pays donné sur la période. C'est une interaction pour téléphone, pas pour ordinateur de bureau. Un tableau de bord qui présuppose un grand écran et une souris rend le coup d'œil rapide plus difficile qu'il ne devrait l'être. L'application est conçue à l'inverse : le téléphone d'abord, et ce sont les mises en page larges qui s'étendent à partir de là, plutôt que le contraire.

Une base de code, deux plateformes

Tout ce qui compte réside dans un seul ensemble de sources partagé : les DTO, le client Ktor qui appelle /api/overview et /api/explore, le dépôt qui construit chaque requête, et chaque écran et graphique. Compose Multiplatform affiche cette même interface sur Android et dans une fenêtre de bureau. Seules deux choses sont spécifiques à chaque plateforme — le point d'entrée (une Activity sur Android, une fenêtre sur le bureau) et le moteur HTTP, câblé via l'expect/actual de Kotlin pour qu'Android utilise OkHttp et le bureau CIO. Il n'y a pas de seconde implémentation de l'application à maintenir synchronisée, parce qu'il n'y a pas de seconde implémentation.

La même rigueur qui garde l'API honnête se prolonge dans le client : il n'envoie jamais de SQL. Une requête est un ExploreRequest structuré — un nom de table plus des filtres typés, des regroupements et des agrégats — que le serveur valide et compile. L'application construit ces requêtes ; elle ne construit pas de chaînes de caractères. Ajouter une nouvelle vue de jeu de données est une méthode du dépôt, pas une requête écrite à la main.

Pensé d'abord pour le mobile, vraiment

La mise en page mesure sa propre largeur et s'adapte. En dessous d'un seuil, c'est un téléphone : navigation en bas, une seule colonne, et un flux Explorer qui va de la liste au détail comme on s'y attend sur un petit écran. Au-dessus, les mêmes écrans s'étendent en un rail de navigation et une vue maître-détail. Parce que les écrans sont sans état — l'état est remonté dans un unique view-model qui expose un état d'interface immuable sous la forme d'un StateFlow —, les composables identiques s'affichent sur un téléphone, dans une fenêtre de bureau et dans le harnais de captures d'écran qui a produit les images ci-dessus.

Les graphiques sont dessinés sur le canevas Compose plutôt que tirés d'un service d'images : ils restent nets à n'importe quelle densité et fidèles à ce qu'ils montrent — les plages restent des plages, les taux ne sont jamais additionnés, et une période sans données se lit comme une absence de données plutôt que comme un zéro.

Les détails Android qui valent la peine

Une application native doit faire native, ce qui tient à une foule de petits détails : une icône de lanceur adaptative avec une couche monochrome pour les icônes thématisées, des raccourcis de lanceur qui mènent directement à la vue des retraits ou à l'explorateur de jeux de données, le retour prédictif pour que le geste de retour du système donne un aperçu de votre destination, et des réglages de langue par application qui apparaissent dans la propre liste d'Android — l'application est déjà traduite en huit langues, elle respecte donc celle que vous y choisissez. La version de production passe par R8 avec réduction des ressources, ce qui permet à une application Compose complète de tenir autour de 1,5 Mo.

L'obtenir

L'APK Android est un téléchargement direct — autorisez les installations depuis votre navigateur et ouvrez-le. Ce sont les mêmes données, le même modèle de requêtes et les mêmes réserves que le tableau de bord web ; il vit simplement sur votre écran d'accueil désormais. La version desktop tourne à partir de la même base de code si vous préférez l'avoir dans une fenêtre.

esc