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

GitHubSearch


L'objectif de cet examen est de réaliser une application en binome permettant de faire des recherches sur GitHub en utilisant l'API fourni par le site.
Le site Github offre une API qui permet de faire des recherches à partir d'un mot-clé en utilisant une API REST au format JSON.
Par exemple, pour chercher un utilisateur esipe, on peut utiliser la requête HTTP suivante
   https://api.github.com/search/users?q=esipe
  
ou pour chercher un repository esipe
   https://api.github.com/search/repositories?q=esipe
  

Dans les deux cas, le résultat est un texte au format JSON (le format définie des objets sous forme de clés/valeurs comme dans une table de hachage ou des tableaux).

Critère de Notation
  • L'application doit répondre au cahier des charges.
  • L'application ne doit répondre au demande de l'utilisateur sans freeze.
  • Le code doit être propre, pas de méthode de plus de 20 lignes, respect des conventions de code, nommage correcte des variables.
  • Le code ne doit pas générer de warnings ou d'erreurs de compilation.
  • Le code ne doit pas avoir d'erreur d'erreur de concurrence.

Le code est a déposer sous forme d'une archive au format tar.gz sur le site elearning
https://elearning.u-pem.fr/mod/assign/view.php?id=37853

Android permet de faire des requètes HTTP en utilisant la classe java.net.URL et HttpURLConnection (cf le cours). De plus, la classe android.util.JSonReader permet de lire un texte au format JSON au fil de l'eau, sans attendre la fin du flux pour commencer à décoder le début.

Exercice 1 - Un champ de texte et une liste

  1. Ecrire le code d'une activité simple permettant d'afficher un EditText en haut et d'une liste d'item (vide) en dessous.
  2. Si un utilisateur entre un texte dans le EditText puis valide un toast avec le texte devra s'afficher.
  3. Bonus: utiliser un SearchView au lieu d'un EditText pour que la touche du clavier virtuel permettant la validation soit une loupe.

Exercice 2 - AsyncTask

Faire en sorte que lorsque l'utilisateur valide la recherche, l'application demande à GitHub avec une requète HTTP les utilisateurs correspondant et affiche sur la sortie de debug (donc pas graphiquement) le nom des utilisateurs (la valeur de la clé "login") du fichier JSON.
Vous utiliserez la classe AsyncTask pour éviter de bloquer l'interface utilisateur.
Attention aux permissions !

Exercice 3 - Affichage graphique

Faire en sorte que l'affichage des noms de login s'affiche dans la liste graphique au fur et à mesure.

Exercice 4 - Cancel

Si un utilisateur demande une nouvelle recherche, la recherche précédente doit être annulée et la liste remise à zéro.

Exercice 5 - Les imagettes

Faire en sorte que une fois que l'ensemble des logins ont été chargé, l'application charge les imagettes une par une dans l'ordre (les imagettes sont décrites par la valeur de la clé "avatar_url" dans le fichier JSON).
Les vignettes doivent être affichées à gauche du texte du login correspondant.

Exercice 6 - Changement d'orientations

La recherche et l'affichage des imagettes doit continuer à fonctionner même si l'on change l'orientation de l'application.
Indice: Utiliser la méthode setReatainInstance sur un fragment.

Exercice 7 - Click Long

Un click long sur un élement de la liste doit demander l'affichage de l'URL correspondante (la valeur de la clé "html_url" dans le texte JSON) dans le navigateur par défaut.

Exercice 8 - Maximiser la recherche

On veut que l'application fasse les recherches en parallèle en utilisant à la fois une requète sur les utilisateurs et sur une requète sur les repositories, les résultats sont alors reportés dans la même liste.
Au niveau du menu l'utilisateur doit pouvoir choisir si il veut la recherche et sur les utilisateurs et sur les repositiories ou seulement sur les utilisateurs ou seulement sur les repositories.