Android O permet d'ajouter des widgets sur le launcher depuis une application

Android O permet d'ajouter des widgets sur le launcher depuis une application

Android O est disponible depuis quelques jours par l'intermédiaire d'une première version preview. Des bugs ici-et-là sont certes présents, mais Google offre surtout la possibilité de tester les nouvelles API. Certaines sont bien documentées, d'autres... moins.

C'est pour cela que nous allons nous intéresser aux widgets "épinglés" : une nouveauté d'Android O. Concrètement, il s'agit d'un widget qui peut être ajouté sur le launcher directement depuis son application. Jusqu'à présent seul l'utilisateur pouvait placer les widgets sur son bureau. Grâce à cette fonctionnalité, on imagine que les applications vont plus facilement promouvoir leurs widgets.

Derrière cette fonctionnalité de widgets "épinglés", on se situe dans les continuité des App Shortcuts d'Android 7.1. Une documentation propre à cette fonctionnalité est disponible sur le site des développeurs, mais elle fait référence à des méthodes qui ne sont pas disponibles dans le SDK.

Côté utilisateur

Pour les utilisateurs, les widgets "épinglés" vont se présenter sous la forme d'une popup. Ils pourront choisir une placement automatique du widget (c'est-à-dire là où il y a de la place sur le bureau), ou un placement manuel.

Voici un exemple de fonctionnement (en mode manuel):

Comment l'implémenter ?

Les méthodes

Concrètement plusieurs méthodes du AppWidgetManager vont être utiles :

isRequestPinAppWidgetSupported
Cette méthode permet d'indiquer si le launcher par défaut supporte cette fonctionnalité.

requestPinAppWidget
Cette méthode permet de son côté d'ajouter un widget sur le bureau. Elle retourne un booléen indiquant si le launcher supporte bien cette fonctionnalité. A l'heure actuelle le Pixel Launcher le supporte, tandis que le Google Now Launcher ne le supporte pas.

Dans le cas des Nexus, qui utilisent le Google Now Launcher, la première méthode retourne true, tandis que la seconde retourne false. Il faut donc privilégier le deuxième résultat, car le premier n'est pas toujours fiable.

Une contrainte forte liée à ces deux méthodes : elles doivent être appelées depuis une Activité affichée au premier plan ou depuis un Service étant exécuté en foreground.

Le code

Si vous avez créé un widget, vous avez forcément créé une classe qui étend AppWidgetProvider. Grâce à celle-ci, vous pourrez ainsi indiquer quel widget vous souhaitez ajouter sur le bureau.

Le code est ensuite très simple :

AppWidgetManager appWidgetManager = getSystemService(AppWidgetManager.class);
ComponentName provider = new ComponentName(...);

if (appWidgetManager.isRequestPinAppWidgetSupported()) {
   mAppWidgetManager.requestPinAppWidget(provider, null);
}

Vous pouvez éventuellement renseigner un PendingIntent pour le deuxième argument. Il permet d'être notifié lorsque le widget a été ajouté sur le bureau. En effet, ce n'est pas parce que la méthode est appelée que l'utilisateur a pour autant épinglé son widget.

Et c'est tout ce qu'il faut savoir sur cette nouveauté d'Android O ! Le code est donc très simple et permettra aux utilisateurs de découvrir ou redécouvrir les widgets qui existent depuis Android 1.5 (Cupcake).

Cet article a également été publié dans une version simplifiée sur FrAndroid.