Android 16 Live Updates : afficher le minuteur de concentration de Mintly sur l'écran de verrouillage
Un guide pratique des notifications centrées sur la progression d'Android 16 — segments ProgressStyle, notifications continues promues, et ce qu'elles apportent à un minuteur Pomodoro actif.
Un minuteur qui ne vit qu’à l’intérieur de l’application est un minuteur que personne ne consulte. Tout l’intérêt d’une session Pomodoro est de cesser de le surveiller — vous jetez un œil à l’écran de verrouillage quand vous refaites surface, voyez combien de temps de concentration il reste, et retournez au travail. Android 16 donne enfin une vraie réponse à ce coup d’œil pour les notifications continues : Live Updates, un type de notification promue construit autour de ProgressStyle, qui gagne une place sur l’écran de verrouillage et une puce compacte dans la barre d’état au lieu de se perdre dans le tiroir de notifications. Voici ce que ça fait concrètement, et comment ça a changé la notification que Mintly affiche pendant une session.
Ce qu’un Live Update apporte par rapport à une notification continue classique
Une notification continue, non annulable, avec une barre de progression fonctionne sur Android depuis des années — c’est ce qui faisait tourner la notification de minuteur de Mintly avant ça. Ce qu’elle n’obtenait pas, c’était un placement prioritaire. Une notification continue classique se trouve dans le tiroir à côté de toutes les autres, et sur un téléphone avec une liste de notifications chargée, c’est une ligne parmi tant d’autres.
Un Live Update n’est qu’un appel Notification.Builder de plus pour le même contenu, mais le système le traite différemment : il est éligible pour s’afficher sur l’écran de verrouillage même quand les autres notifications sont repliées, et sur les appareils compatibles, il peut apparaître sous forme de petite puce animée près de l’horloge de la barre d’état. Le système décide s’il accorde réellement ce placement promu — le demander ne le garantit pas — mais pour les types de notifications qu’Android a conçus pour ça (un trajet qui approche, une livraison en route, un minuteur qui compte à rebours), c’est la différence entre « l’utilisateur doit déverrouiller et tirer le tiroir » et « l’utilisateur lit l’information sur l’écran de verrouillage sans toucher à rien ».
Intégrer ProgressStyle dans une notification de minuteur
Le style en lui-même n’est qu’un petit ajout à une notification que vous construisez déjà :
val progressStyle = NotificationCompat.ProgressStyle()
.setProgress(elapsedSeconds)
.setProgressMax(totalSeconds)
.setProgressIndeterminate(false)
val notification = NotificationCompat.Builder(context, CHANNEL_FOCUS_SESSION)
.setContentTitle("Focus session")
.setContentText(formatRemaining(totalSeconds - elapsedSeconds))
.setSmallIcon(R.drawable.ic_mintly_timer)
.setOngoing(true)
.setOnlyAlertOnce(true)
.setStyle(progressStyle)
.setRequestPromotedOngoing(true)
.build()
Le seul réglage qui mérite qu’on s’y arrête est setRequestPromotedOngoing(true). C’est une demande, pas un interrupteur — la plateforme peut la refuser, et elle est conçue pour les notifications qui représentent réellement quelque chose que l’utilisateur attend activement en ce moment, pas un moyen général de doubler la file. Un minuteur réellement en cours d’exécution est légitime. Une notification obsolète laissée par une session terminée il y a dix minutes ne l’est pas, et les propres heuristiques de la plateforme commenceront à ignorer les demandes de promotion d’une application qui les fait alors que rien n’est vraiment en cours.
Les segments transforment une barre en une véritable carte de session
Ce qui a vraiment rendu cette adoption intéressante pour Mintly, ce n’est pas le placement sur l’écran de verrouillage à lui seul — c’est le support des segments par ProgressStyle. Au lieu d’une seule barre continue, vous pouvez décrire la progression comme une séquence de plages colorées, ce qui correspond exactement à la structure réelle d’une session Pomodoro : bloc de travail, courte pause, bloc de travail, pause plus longue.
val segments = listOf(
ProgressStyle.Segment(25 * 60).setColor(mintlyFocusColor),
ProgressStyle.Segment(5 * 60).setColor(mintlyBreakColor),
ProgressStyle.Segment(25 * 60).setColor(mintlyFocusColor),
ProgressStyle.Segment(15 * 60).setColor(mintlyLongBreakColor),
)
progressStyle.setProgressSegments(segments)
Ce seul changement répond à une question que l’ancienne barre de progression plate ne pouvait jamais résoudre : pas seulement « combien de temps reste-t-il dans cette session », mais « où en suis-je dans le cycle, et à quelle distance de la prochaine vraie pause ». Les points sont l’autre élément que ProgressStyle propose — de petits repères le long de la barre — et ils se prêtent naturellement à des points de contrôle d’interruption, même si Mintly ne les utilise pas encore.
Le piège : traiter ça comme de la décoration
Il est tentant de coller ProgressStyle et la demande de promotion sur chaque notification continue qu’une application possède, car la surface d’API est réduite et le gain visuel est réel. C’est le mauvais réflexe. Live Updates existe pour une catégorie étroite — quelque chose de limité dans le temps et réellement en cours, dont l’utilisateur se soucie maintenant — et la plateforme surveille les applications qui demandent une promotion en dehors de cette catégorie. Une application qui promeut un rappel « vous n’avez pas ouvert ceci depuis 3 jours », déguisé en barre de progression, est exactement le cas d’abus que cette fonctionnalité a été conçue pour empêcher, et des demandes abusives répétées sont le genre de chose qui peut discrètement faire reléguer au second plan les futures demandes de promotion d’une application.
Le test honnête avant d’ajouter setRequestPromotedOngoing(true) où que ce soit : y a-t-il un vrai processus en cours derrière cette notification, se terminant à un moment précis que l’utilisateur peut prédire à partir de la barre elle-même ? Pour un minuteur de concentration, oui sur tous les points. Pour la plupart des autres types de notifications d’une application locale-first typique, non — et la notification simple que vous avez déjà reste la bonne à conserver.
Ce que ça ne remplace pas
Live Updates change où la notification du minuteur est vue. Ça ne change pas si elle se déclenche de façon fiable en premier lieu — cela reste le service en avant-plan et les calculs d’heure de fin en temps réel dont Mintly dépend déjà pour survivre au mode Doze et à la mort du processus. ProgressStyle et la demande de promotion s’appuient sur cette base ; ce sont une couche de présentation, pas un substitut pour bien faire fonctionner le minuteur sous-jacent. Construisez d’abord la version fiable. La puce sur l’écran de verrouillage vaut la peine d’être ajoutée une fois que ce n’est plus en question — pas avant.
// À lire aussi
D’autres notes du journal
Les types de services au premier plan sur Android en 2026 : choisir celui auquel votre fonctionnalité correspond vraiment
Un guide pratique des restrictions de types de services au premier plan d'Android — dataSync, mediaPlayback, specialUse, shortService — et comment choisir le bon sans se faire tuer ou rejeter.
Les canaux de notification Android en 2026 : concevoir des niveaux d'importance que les utilisateurs ne couperont pas
Un guide pratique des canaux de notification Android — niveaux d'importance, groupes de canaux, pourquoi les réglages se figent après création, et comment migrer sans perdre la confiance des utilisateurs.
Construire Mintly : garder un minuteur de focus précis quand Android veut tuer le processus
Un minuteur Pomodoro en cours d'exécution pose un problème de fiabilité plus difficile qu'un simple rappel ponctuel. Voici comment Mintly survit au mode Doze, à la mort du processus et à la dérive écran éteint grâce à un service au premier plan et une heure de fin en temps réel.