:: Enseignements :: ESIPE :: E4INFO :: 2015-2016 :: Interface Graphique avec Android ::
[LOGO]

Un petit lecteur de flux de syndication Atom


Nous voulons implanter un lecteur de flux Atom.
Ces flux se présentent sous la forme de fichiers XML qui sont téléchargés à intervalles réguliers depuis un serveur web. Par exemple, le flux Atom du blog Android Developers est disponible ici. Le format Atom est défini par la RFC 4287.

Exercice 1 - Analyse d'un flux Atom

Dans un premier temps, il est nécessaire d'analyser le format Atom. Une solution est d'implanter à la main un parser utilisant l'une des bibliothèques d'analyse XML disponible dans l'API Android : SAX, DOM ou XML pull. Notre choix se portera sur XML pull. On simplifiera le code du parser en ne récupérant que les données essentielles d'une entrée. On pourra lire cette page pour une rapide introduction à l'API XML pull.
Note : Pour aller plus vite, le code d'un analyseur qui devrait à peu près fonctionner est déjà fourni ici.

  1. Implanter ensuite une activité qui récupère un flux Atom sur le web, l'analyse avec l'analyseur, puis l'affiche dans une ListView (qui disposera de l'Adapter nécessaire pour récupérer les titres de chaque entrée) avec une utilisation appropriée d'une AsyncTask.
  2. Tester maintenant la rotation de l'écran : idéalement, le contenu de la liste de nouvelles ne doit pas être perdu.

Exercice 2 - Quelques améliorations

  1. Faites en sorte en ajoutant un OnItemClickListener que le clic sur un item provoque le lancement d'une activité navigateur se rendant sur le lien de l'item. Cela peut être fait par :
              startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            
    Note : Il est possible également de lancer une activité qui ne contiendrait qu'un WebView pour l'affichage de la page.
  2. On souhaite maintenant afficher l'âge (temps écoulé depuis sa publication) de chacun des items. Redéfinissez la méthode getView() de l'Adapter afin de retourner une vue personnalisée affichant à la fois l'âge et le titre de la nouvelle.
    Faites en sorte que les âges soient régulièrement mis à jour.

Exercice 3 - Affichage des pages avec un fragment

Nous souhaitons maintenant pouvoir afficher directement dans l'activité le contenu de la nouvelle sélectionnée dans la liste. Cet affichage sera réalisé uniquement si l'appareil est en mode paysage; dans le cas contraire, nous nous contenterons de visualiser la seule liste des nouvelles.

  1. Créez un Fragment embarquant la ListView d'affichage de la liste des nouvelles. Afin de communiquer entre l'activité embarquant le fragment et le fragment lui-même, il est conseillé de définir un listener qui sera implanté par l'activité. Lorsque le fragment sera attaché à l'activité, ce listener sera enregistré sur le fragment. Lorsqu'un clic interviendra sur le titre d'une nouvelle, l'appel à une méthode de ce listener sera déclenché.
  2. Créez un Fragment chargé d'afficher le contenu d'une page : ce fragment accueille une vue WebView permettant d'afficher du contenu HTML.
  3. Créez un layout XML disposant de deux containers : l'un pour accueillir la liste des nouvelles et l'autre pour la visualisation du contenu de la nouvelle courante avec le fragment embarquant le WebView. Au chargement de l'activité, le layout correspondant au contexte d'exécution est choisi automatiquement.
  4. Lors du clic sur un titre de la liste, le fragment d'affichage du contenu de la nouvelle doit être mis en place dans son container (et remplacer le cas échéant le fragment précédent). Faites en sorte que la touche "retour" fonctionne correctement afin de pouvoir revenir à l'affichage de la nouvelle précédemment visualisée.
  5. L'activité doit toujours continuer à fonctionner en mode portrait : un clic sur le titre d'une nouvelle lance une nouvelle activité de visualisation de son contenu.