Memoria Proyecto Fin Carrera Ampliacion SWADroid
-
Author
jose-antonio-guerrero-aviles -
Category
Mobile
-
view
159 -
download
1
Embed Size (px)
description
Transcript of Memoria Proyecto Fin Carrera Ampliacion SWADroid
- 1. Ampliacin del cliente Androidpara la plataforma de educacin SWADJos Antonio Guerrero AvilsIngeniera Informtica Curso 2013 / 2014
2. ESCUELA TCNICA SUPERIOR DE INGENIERASINFORMTICA Y DE TELECOMUNICACINUNIVERSIDAD DE GRANADAProyecto Fin de Carrera de Ingeniera Informtica:SWADroid: Ampliacin del cliente Android para la plataforma de educacin SWAD0Autor:Jos Antonio Guerrero AvilsDirector de proyecto:Antonio Caas VargasDepartamento de Arquitectura y Tecnologa de Computadores 3. ESCUELA TCNICA SUPERIOR DE INGENIERASINFORMTICA Y DE TELECOMUNICACINUNIVERSIDAD DE GRANADASWADroid: Ampliacin del cliente Android para la plataforma de educacin SWADJos Antonio Guerrero Avils1AgradecimientosA mi familia por estar siempre ah y por darme los medios y el apoyo necesarios parapoder terminar mis estudios. A Alejandro Alcalde Barros por formar parte del equipode desarrollo en el VIII Concurso Universitario de Software Libre ya que sin l nohubiese sido posible ganar el premio conseguido. A Antonio Caas Vargas por supaciencia y dedicacin con el proyecto. Y en especial a Juan Miguel Boyero Corral porhaberme asesorado desde el primer momento y porque sin sus consejos no hubiese sidoposible la realizacin de este proyecto.A todos, de corazn, mil gracias. 4. ESCUELA TCNICA SUPERIOR DE INGENIERASINFORMTICA Y DE TELECOMUNICACINUNIVERSIDAD DE GRANADASWADroid: Ampliacin del cliente Android para la plataforma de educacin SWADJos Antonio Guerrero AvilsResumenAmpliar las funcionalidades del cliente Android (SWADroid) para la plataforma detelecomunicacin y gestin docente SWAD (http://swad.ugr.es).El desarrollo de las nuevas funcionalidades se ha realizado en Java.2 5. D. Antonio Caas Vargas, profesor de la titulacin de Ingeniera Informtica,perteneciente al Departamento de Arquitectura y Tecnologa de Computadores de laUniversidad de Granada, en calidad de director del proyecto fin de carrera de D. JosAntonio Guerrero Avils3INFORMA que el proyectoSWADroid: Ampliacin del cliente Android para la plataforma de educacin SWAD.Ha sido realizado y redactado por dicho alumno, y corresponde a la investigacinrealizada bajo su direccin, y con esta fecha autoriza su presentacin.Granada, Septiembre de 2014Director del proyectoFirmado: Antonio Caas Vargas.D. Jos Antonio Guerrero Avils con DNI 75485683-M, autorizo a que una copia deeste Proyecto Fin de Carrera, titulado SWADroid: Ampliacin del cliente Androidpara la plataforma de educacin SWAD, se deposite en la biblioteca de la facultad dela Escuela Tcnica Superior de Ingenieras Informtica y de Telecomunicacin para quepueda ser libremente consultada.Granada, Septiembre de 2014.Firmado: Jos Antonio Guerrero Avils. 6. 4Resumen.El presente proyecto ilustra el modo en que se ha realizado la implementacin de lasfunciones que amplan la aplicacin mvil SWADroid.La aplicacin mvil constituye un cliente para dispositivos basados en el sistemaoperativo Android para la plataforma de teleformacin y gestin docente SWAD(http://swad.ugr.es/) de forma que sea fcilmente ampliable con nuevas funciones deacceso a SWAD. Es utilizado por alumnos y profesores para acceder a los servicios deSWAD que implemente el cliente. Consta de una parte cliente y otra que acta comoservidor. El servidor se ejecuta en el ordenador donde est alojado SWAD e implementalos servicios web requeridos para que el cliente pueda acceder a los servicios de SWAD.El cliente es un programa ejecutado por el profesor o alumno sobre un dispositivobasado en Android que implementa varios de los servicios de SWAD.SWADroid est disponible para su instalacin desde Android Market (tienda deaplicaciones de Android) de forma gratuita a travs del enlace directohttps://market.android.com/details?id=es.ugr.swad.swadroid y mediante el siguientecdigo QR:El cdigo fuente de SWADroid est disponible en https://github.com/Amab/SWADroidcon licencia GPLv3.Palabras claveAndroid, software libre, software colaborativo, aplicacin mvil, SWAD, SWADroidampliacin SWADroid, aprendizaje electrnico mvil, e-learning, m-learning, mobileLearning. 7. 5Abstract.This project illustrates how has made the implementation of functions that extend themobile application SWADroid.The mobile application is a client for devices based on Android operating system for e-learningplatform and educational administration SWAD (http://swad.ugr.es/) so as tobe easily expandable with new access functions of SWAD. SWADroid is used bystudents and teachers to access to the SWAD services that implement the client. Itconsists of a client and a server. The server runs on the computer that hosts SWAD andimplements web services required for the customer to access to the SWAD services.The client is a program executed by the teacher or student on an Android based deviceand initially deploy one or more of the SWAD services.SWADroid is available for installation from the Android Market (Android app store) forfree via the direct link https://market.android.com/details?id=es.ugr.swad.swadroid andby the following QR code:SWADroid source code is available on https://github.com/Amab/SWADroid underGPLv3 license.KeywordsAndroid, software libre, software colaborativo, aplicacin mvil, SWAD, SWADroidampliacin SWADroid, aprendizaje electrnico mvil, e-learning, m-learning, mobileLearning. 8. 0ndice de contenido1. Introduccin. ................................................................................................................. 12. Definicin de objetivos y especificaciones. ................................................................. 22.1. Estado del arte. ...................................................................................................... 22.2. Motivacin. ............................................................................................................ 42.3. Objetivos. ............................................................................................................... 82.4. Software y documentacin libre. ......................................................................... 102.5 Software colaborativo. .......................................................................................... 113. Anlisis y Diseo. ....................................................................................................... 123.1. Diagrama de casos de uso. ................................................................................... 123.2 Sistema operativo mvil. ...................................................................................... 133.3. Plataforma de desarrollo. ..................................................................................... 143.4. Diagrama de funcionamiento de los servicios Web. ........................................... 153.6. Diagramas de clase. ............................................................................................. 164. Mdulos. ..................................................................................................................... 174.1. Desarrollo del mdulo informativo. .................................................................... 184.2. Desarrollo del mdulo de mensajes. .................................................................... 265. Internacionalizacin.................................................................................................... 416. Programacin del proyecto. ........................................................................................ 426.1 Introduccin. ......................................................................................................... 426.2. Especificaciones tcnicas. ................................................................................... 456.3. Repositorio de SWADroid en GitHub. ................................................................ 486.3.1. Instalar el plugin EGit. ................................................................................. 496.3.2. Generar claves SSH. ..................................................................................... 516.3.3. Configurar la informacin de desarrollador ................................................. 536.3.4. Importar el proyecto SWADroid y subir nuestros cambios ......................... 546.4 API de Android. .................................................................................................... 636.4.1 Activity .......................................................................................................... 636.4.2 Intent. ............................................................................................................. 666.4.3 View. ............................................................................................................. 686.5. Temporizacin del Proyecto. ............................................................................... 707. Estadsticas. ................................................................................................................ 788. Futuras mejoras. ......................................................................................................... 849. Conclusiones. .............................................................................................................. 8510. Bibliografa. .............................................................................................................. 8711. Apndices. ................................................................................................................ 8911.1. La nueva interfaz ............................................................................................... 8911.2. Mdulo informativo. La potencia del WebView. .............................................. 9711.3. Mdulo de mensajes. Manual de usuario. ....................................................... 102 9. 11. Introduccin.Este documento tiene como propsito detallar la labor realizada durante el periodo deejecucin del proyecto final de carrera, consistente en desarrollar nuevasfuncionalidades para la aplicacin para dispositivos mviles Android SWADroid.La aplicacin SWADroid constituye un cliente Android capaz de acceder a laplataforma de teleformacin SWAD (http://swad.ugr.es) de la Universidad de Granadamediante servicios web basados en el protocolo SOAP (Simple Object AccessProtocol). Esto conlleva ventajas tanto para los usuarios de la plataforma como para elpropio SWAD.En primer lugar, SWAD ampla su presencia en el mbito acadmico ofreciendo a sususuarios una nueva forma de acceder a sus contenidos de forma rpida y sencilla.En segundo lugar, los usuarios de SWAD pueden acceder al mismo en cualquiermomento y lugar e incluso podrn acceder a ciertos servicios de SWAD sin necesidadde una conexin a Internet. 10. 2. Definicin de objetivos y especificaciones.22.1. Estado del arte.Se denomina aprendizaje electrnico mvil, en ingls, m-learning, a una metodologa deenseanza y aprendizaje valindose del uso de pequeos y maniobrables dispositivosmviles, tales como telfonos mviles, celulares, agendas electrnicas, tablets PC,pocket pc, i-pods y todo dispositivo de mano que tenga alguna forma de conectividadinalmbrica.La educacin va incorporando intensivamente las nuevas tecnologas de lacomunicacin, pasando por varias etapas. Diversos conceptos describen ese fenmeno,segn avanza la tecnologa: EAO (Enseanza apoyada por el ordenador), multimediaeducativo, tele-educacin, enseanza basada en web (web-based teaching), aprendizajeelectrnico (e-learning), etc.Tanto desde el simple uso de la computadora y los soportes multimedia, como eladvenimiento de Internet y las redes en general, todo ha servido para apoyar el procesode enseanza-aprendizaje en sus diferentes modalidades y aspectos.De un tiempo a esta parte, se vienen incorporando a nuestras vidas, cada vez con msfuerza, las tecnologas mviles, y por lo tanto, est surgiendo lo que denominamosmobile learning o mlearning y que consiste en usar estos aparatos electrnicos paraaprender.Esto est generando gran expectativa en el sistema educativo, sobre el que se estnrealizando interesantes iniciativas empresariales y proyectos de investigacin.El "Mobile Learning Engine" (MLE) es una aplicacin integral de aprendizaje.Transfiere el aprendizaje asistido por ordenador y multimedia (conocidos como e-learning)para un entorno mvil (con un telfono mvil). Este tipo especial deaprendizaje asistido por ordenador y multimedia se conoce comnmente como"mLearning".El MLE permite al estudiante a utilizar su telfono mvil como un medio para elaprendizaje. Como consecuencia, es posible utilizar cualquier tipo de tiempo de esperapara el aprendizaje, no importa dnde se encuentre.Actualmente se puede acceder a la plataforma SWAD desde un dispositivo mvilgracias a la aplicacin SWADroid, lo que hace que se pueda aprovechar todo elpotencial de los dispositivos mviles, adems de no requerir una conexin a Internetpermanente para su uso. Gracias a esto, dispositivos mviles como los dispositivos conAndroid 2.1 o inferior que tienen problemas para acceder a pginas web mediante elprotocolo HTTPS (requerido por SWAD) pueden acceder a dicha plataforma. 11. SWADroid fue liberado bajo licencia GPLv3, esto significa que cualquiera puedeusarlo para cualquier propsito, compartirlo, estudiar su funcionamiento, modificarlo ycompartir esas modificaciones, es decir, SWADroid es lo que se denomina softwarelibre.El software libre no se traduce nicamente en una serie de libertades para el usuariosino que tambin es beneficioso para el propio proyecto: recibe visibilidad (publicidad),logra mejoras gracias a la retroalimentacin de los usuarios y recibe la colaboracin deotros usuarios.3 12. 42.2. Motivacin.La finalidad de este proyecto es ofrecer a los usuarios ya existentes de SWADroidnuevas funcionalidades. Por una parte, esto aporta beneficios a la plataforma SWADpuesto que contina su ampliacin con las nuevas tecnologas. Por otra parte, losusuarios ven cmo la plataforma evoluciona y les proporciona nuevas funcionalidades yformas de acceso a la misma; esto proporcionar confianza y satisfaccin a los usuariosactuales.Al mismo tiempo, SWADroid puede ayudar a la captacin de nuevos usuarios, bien seapor descubrimiento de la existencia de la plataforma al acceder a SWAD desde sudispositivo Android, o usuarios que utilizaban otras plataformas similares a SWAD yque pueden sentirse atrados por las nuevas posibilidades que este proyecto les ofrece,ya que es posible que las herramientas que estn utilizando no se hayan adaptado a lasnuevas tecnologas.Los ltimos estudios que analizan la procedencia de los accesos a la informacin porparte de los usuarios muestran claramente un continuo crecimiento del acceso a lainformacin a travs de las aplicaciones mviles respecto al acceso va web. 13. Adems, en 2014, el tiempo que pasan los usuarios en Internet en los telfonos mvilesha superado al tiempo que pasan en Internet con sus ordenadores personales.Por otro lado, segn las ltimas encuestas, el software libre se va abriendo paso confuerza entre la sociedad y se usa cada vez ms tanto por empresas como por usuarios.Fuente: http://www.portalprogramas.com/descargas/estudio-valoracion-software-libre.pdf5 14. Adems, cada vez hay ms usuarios que confan en el software libre, ya sea por buenasexperiencias como por buena informacin.Fuente: http://www.portalprogramas.com/descargas/estudio-valoracion-software-libre.pdfLas razones que justifican la existencia de una aplicacin nativa para acceder a SWADson: Menor funcionalidad, pero ms inmediata y sencilla. Un solo toque para activarla. Usuario-contrasea almacenado en configuracin (no requiere introducirlos cada6vez que se accede a SWAD). Menos informacin en pantalla (evita saturar al usuario con el exceso deinformacin). Mayor claridad. Menor consumo de ancho de banda. Funcionalidades off-line.Y las razones para continuar con el desarrollo de la aplicacin y ampliar susfuncionalidades son las siguientes: Aumento del nmero de accesos a SWAD desde SWADroid respecto de losaccesos Webs. Peticiones expresas de los usuarios que consumen la aplicacin de nuevasfuncionalidades. Hacer que las funcionalidades que ofrece SWAD sean accesibles desdecualquier parte con el simple hecho de tener tu telfono mvil a mano. 15. Se han implementado dos funcionalidades muy usadas en SWAD (como muestran lasestadsticas proporcionadas por la plataforma) que no se usaban a penas en SWADroid: Acceso a la informacin de las asignaturas:7o Introduccin.o Programa de teora.o Programa de prcticas.o Gua docente.o Bibliografa.o FAQ.o Enlaces.o Sistema de evaluacin.Esta funcionalidad no estaba disponible para SWADroid y en el caso de la Web,el acceso a los apartados anteriormente mencionados es de unos 1500 clics demedia y se dispara hasta casi 18.000 en el caso de la Introduccin de laasignatura (Estadsticas a 07/09/2014). Envo de mensajes:Si bien es cierto que esta funcionalidad est disponible, una minora deusuarios la usan (aproximadamente 1.721 envos desde la Web en unasemana segn las estadsticas a 07/09/14 respecto a solo 39 desde laaplicacin) debido a que, entre otras cosas, nos obliga a sabernos el alias oDNI de la persona a la que queremos enviarle el mensaje, cosa que,normalmente, no se suele conocer. Por estos motivos, se ha optado porredisear el mdulo por completo de la siguiente manera:- Nueva interfaz.- Posibilidad de visualizar los usuarios de la asignatura con nombre yfoto y actualizar dicho listado.- Posibilidad de marcar usuarios y aadirlos al campo destinatariosdesde la lista de usuarios. 16. 82.3. Objetivos.Hoy en da es cada vez ms habitual el uso de Internet en un dispositivo mvil. En elcaso de Android, y ms teniendo en cuenta que el principal promotor de este sistemaoperativo es Google, los dispositivos mviles estn orientados a un uso optimizado deInternet.Teniendo en cuenta las nuevas tendencias del mercado, el principal objetivo de esteproyecto es intentar posibilitar en mayor o menor medida el acceso a los usuarios deSWAD a la mayor parte posible de sus funcionalidades desde cualquier lugar sinnecesidad de un ordenador personal ni de una potente conexin a Internet.El objetivo principal de la aplicacin se materializar en el desarrollo de una nuevafuncionalidad y la modificacin completa de otra por lo que podra considerarserealmente que se van a implementar dos nuevas funcionalidades: Acceso a la informacin de las asignaturas: Esta funcionalidad permitir que unusuario pueda consultar la siguiente informacin de una asignatura:o Introduccin.o Programa de teora.o Programa de prcticas.o Gua docente.o Bibliografa.o FAQ.o Enlaces.o Sistema de evaluacin. Envo de mensajes: Ya se permite enviar un mensaje (aunque con lasdificultades ya comentadas). En este caso lo que se pretende para el mdulo demensajes es :o Implementar una nueva interfaz.o Posibilidad de visualizar los usuarios de la asignatura con nombre y fotoy actualizar dicho listado.o Posibilidad de marcar usuarios y aadirlos a los destinatarios de unmensaje desde el listado de usuarios que se podr visualizar.Estos cambios lograrn ampliar altamente las funcionalidades de SWADroid y losaccesos a SWAD desde la aplicacin mvil, lo que lograr que un usuario puedaacceder e interactuar con sus datos de una manera rpida y sencilla en cualquiermomento y lugar. 17. Respecto a los objetivos personales, teniendo en cuenta que el mundo de la informticaest en continua evolucin, se busca aprender a utilizar las nuevas tecnologas puestoque aunque se termine la etapa de estudiante, un informtico va a estar aprendiendo ausar tanto nuevos lenguajes de programacin como nuevas tecnologas durante toda suvida laboral.En este caso, el objetivo personal es aprender a programar para una plataforma en la queno se ha trabajado durante la carrera, dado que Android es un sistema operativo muyreciente en el que an no se ha profundizado a nivel acadmico.Por otro lado, tambin est presente el objetivo de profundizar en el tema del softwarelibre, colaborando en un proyecto para intentar hacerlo ms grande y mejorarloaportando mi esfuerzo y conocimientos al igual que tanto el autor principal como losdiferentes colaboradores del proyecto hicieron en su momento.9 18. 2.4. Software y documentacin libre.SWADroid fue liberado bajo la licencia GPLv3, al igual que la documentacin que secre en sus inicios como proyecto fin de carrera de Juan Miguel Boyero Corral. Estosignifica que cualquiera puede usarlo para cualquier propsito, compartirlo, estudiar sufuncionamiento, modificarlo y compartir esas modificaciones. Pero el software libre nosignifica nicamente una serie de libertades para el usuario, tambin es beneficioso parael propio proyecto: recibe visibilidad (publicidad), logra mejoras gracias a laretroalimentacin de los usuarios y recibe la colaboracin de otros usuarios.La liberacin del software y la documentacin ha permitido la transferencia deconocimientos y la innovacin tecnolgica, haciendo que el proyecto no haya quedadoestancado tras su finalizacin, sino todo lo contrario, han ido surgiendo otros proyectosfin de carrera a partir de este que han servido como ampliacin de la aplicacin como esel caso de este proyecto.Este proyecto, adems, se basa completamente en estndares abiertos y herramientaslibres, por lo que es tambin una obligacin moral devolver a la comunidad lo recibido,adems de que algunas licencias obligan a liberar los desarrollos derivados.El primer proyecto y los sucesivos, no solo fueron liberados, sino que han sidodesarrollados en un proceso completamente abierto, siendo accesibles todos los avancesdel desarrollo en una forja (https://github.com/Amab/SWADroid) y publicandoinformacin sobre ellos en las redes sociales. El desarrollo ha permitido tambin lacolaboracin de los usuarios mediante el envo de sugerencias de mejoras y errores.Adems, este documento ha sido liberado bajo licencia FDL.Copyright (C) 08 de sept. de 2014, Jos Antonio Guerrero AvilsPermission is granted to copy, distribute and/or modify thisdocument under the terms of the GNU Free Documentation License,Version 1.3 or any later version published by the Free SoftwareFoundation; with no Invariant Sections, no Front-Cover Texts,and no Back-Cover Texts. A copy of the license is available inhttp://www.gnu.org/copyleft/fdl.html10 19. 112.5 Software colaborativo.Hay que tener en cuenta que SWADroid no es un proyecto individual, es un proyecto desoftware libre relativamente maduro que cuenta ya con ms de 3 aos de desarrollo y enel que han participado ms de 6 personas, de las cuales 4 lo han tenido como proyectofin de carrera. Aunque SWADroid fue diseado por Juan Miguel Boyero Corral paraque se pudiesen aadir nuevos mdulos y nuevas funcionalidades de una manerasencilla, debido al nmero de personas que han implementado cdigo es obvio que lams mnima modificacin puede afectar a lo que ya hay implementado. Y no slo eseso, si no que Android, al ser relativamente nuevo, se va actualizando constantemente,aportando nuevas maneras ms sencillas (o ms verstiles) de hacer las cosas y hay queadaptar el cdigo a ellas y a las nuevas versiones del sistema operativo.Este es el caso de este proyecto. Aunque aadir el mdulo informativo, a priori, resultasencillo, veremos ms adelante que tiene una serie de dificultades. Respecto al nuevomdulo de mensajes, resulta mucho ms difcil de lo esperado ya que, por los motivosmencionados anteriormente, se tienen que modificar, por ejemplo, algunas clases o labase de datos.La inclusin de los nuevos mdulos y el tener que adaptar lo implementado a las nuevasversiones de Android y a lo que los usuarios van demandando ha dado lugar a muchasmodificaciones durante el desarrollo del proyecto. Estas han sido: Nueva interfaz grfica estilo Holo. Aadida funcin de recuperacin de contrasea. Aadido cierre de sesin en SWADroid. Reorganizado el men principal para alinearlo con SWAD. Ahora las alertas de notificaciones solo aparecen cuando se recibennotificaciones no abiertas. Ahora el botn atrs lleva al directorio superior en el mdulo de Documentos. Deshabilitado el mdulo de pasar lista. Eliminados los idiomas no utilizados.Aqu nos vamos a centrar solo en el mdulo informativo y en el de mensajes, perotodas estas modificaciones mencionadas han dado lugar a que el cdigo de diferentesfuncionalidades haya tenido que ser adaptado o incluso a que se hayan creado otrasnuevas.SWADroid requiere un constante feedback entre todos los colaboradores y unacomunicacin fluida y frecuente para que los cambios se acoplen perfectamente a lo queya hay implementado. Por otra parte, la implementacin de una nueva funcionalidadpuede requerir de la ayuda o el consejo del algn integrante del equipo de desarrollobien sea porque la nueva funcionalidad es demasiado extensa o compleja o bien porquevaya a afectar a algo que ya hay implementado. 20. 123. Anlisis y Diseo.3.1. Diagrama de casos de uso. 21. 133.2 Sistema operativo mvil.Los dos principales sistemas operativos para dispositivos mviles que existen en laactualidad son iOS de Apple para iPhone/iPad, y Android de Google.Los motivos por los que se ha decidido continuar con la ampliacin de SWADroid y norealizar la implementacin de un cliente para iOS son principalmente los siguientes: iOS:El desarrollo para iOS resulta demasiado caro y problemtico para este proyecto.Para poder obtener el entorno de desarrollo es necesario darse de alta comodesarrollador en la pgina web de Apple con un coste de 99$/mes, una tarifademasiado alta para las caractersticas y los objetivos de este proyecto.Por otra parte, la licencia GPL que tiene este proyecto es incompatible con latienda de aplicaciones de Apple (App Store), nico modo de distribuir lasaplicaciones de iOS, as que no podra ser distribuido en la misma y, por tanto,no estara disponible para ningn dispositivo que utilizara el sistema iOS.Por otra parte, habra que comenzar el proyecto desde el principio y seguramentese dara el caso de tener dos aplicaciones (una para iOS y otra para Android) confalta de funcionalidad en ambos casos e incompletas.Esto provoca que desarrollar el proyecto como una aplicacin de iOS sea unatarea absurda y totalmente improductiva, ya que se creara una aplicacin quenadie podra instalar ni utilizar en su dispositivo mvil. Android:Es la plataforma de desarrollo inicial del proyecto. El desarrollo para Android norequiere pago alguno para obtener el entorno de desarrollo, que se puededescargar de forma gratuita desde http://developer.android.com/sdk/index.html.Aunque la aplicacin se puede distribuir por muchos medios, es aconsejablepublicarla en la tienda de aplicaciones de Android (Android Market, tal y comoest hecho), lo que requiere un nico pago de 25$ en el momento de registrarseen la misma como desarrollador. A partir de ese momento se pueden publicarcuantas aplicaciones se deseen sin coste adicional. Estas aplicaciones estarndisponibles para multitud de dispositivos mviles que utilicen el sistemaAndroid. 22. 143.3. Plataforma de desarrollo.Como plataforma de desarrollo para el proyecto se ha utilizado el IDE Eclipse junto conel plugin ADT (Android Development Tools) sobre Windows 7.Adems, se ha aadido el plugin EGit (Git version control with Eclipse) para podermantener el proyecto actualizado en todo momento con los cambios que puedan realizarlos diferentes colaboradores en el desarrollo de SWADroidEstas opciones eran las que mejor resultado me han dado y es por eso que las heelegido. Con ellas se centraliza todo el trabajo en Eclipse y se trabaja ms fcilmente. 23. 3.4. Diagrama de funcionamiento de los servicios Web.SWADroid se comunica con SWAD mediante un conjunto de servicios webproporcionados por la plataforma y que han sido implementados por Antonio Caasutilizando el protocolo SOAP. El cdigo fuente de los servicios web est implementadoen C y ha sido generado con la ayuda de la herramienta gSOAP.Durante la etapa de identificacin, SWADroid enva a SWAD una peticin deidentificacin que contiene el usuario y la contrasea del usuario, y la AppKey de laaplicacin.La AppKey, o clave de aplicacin, es una cadena alfanumrica proporcionada porAntonio Caas (creador de SWAD) con el fin de que SWADroid demuestre durante laetapa de identificacin que est autorizada a utilizar los servicios web de SWAD. SiSWADroid intenta acceder a SWAD con datos de usuario correctos y una AppKeyerrnea, la peticin ser rechazada por SWAD. Si la peticin ha tenido xito, SWADdevuelve los datos del usuario identificado y un cdigo de sesin que ser utilizado paraacceder a los servicios web de SWAD. Si la peticin es errnea, SWAD devolver unmensaje de error y SWADroid informar al usuario de que los datos de identificacinproporcionados en la configuracin de la aplicacin son incorrectos.15 24. 163.6. Diagramas de clase.El ncleo de SWADroid, exceptuando algunas clases de apoyo para construir la ventanaprincipal y realizar operaciones menores, lo constituyen tres clases principales: GlobalLa clase Global define las constantes que se utilizarn a nivel global en toda laaplicacin, como las constantes que definen los nombres de las tablas de la base dedatos, y la AppKey. Tambin define algunos mtodos auxiliares para realizar tareasmenores, como la conversin de valores de tipo booleano a tipo entero o cadena yviceversa. PreferencesLa clase Preferences se encarga de construir la pantalla de configuracin y gestionar laconfiguracin de SWADroid permitiendo que sea accedida y modificada por el resto dela aplicacin. SWADMainLa clase SWADMain es la clase principal y el punto de entrada de SWADroid. Seencarga de construir la pantalla principal y lanzar todas las funciones que implementa laaplicacin a peticin del usuario. 25. 174. Mdulos.SWADroid sigue una arquitectura modular que permite aadir funcionalidad en formade nuevos mdulos realizando modificaciones mnimas en el resto de la aplicacin.Estas modificaciones vienen impuestas principalmente por la arquitectura de Android,que obliga a que las aplicaciones sigan un esquema determinado y a que ciertas accionesse realicen de una forma preestablecida por la arquitectura del sistema.La arquitectura modular de SWADroid se basa en la clase Module, de la que heredantodos los mdulos de la aplicacin y que implementa las estructuras de datos y lasoperaciones comunes a todos los mdulos, tanto presentes como futuros. Esta claseimplementa, entre otras funciones, el mecanismo de comunicacin mediante el acceso alos servicios web que implementa SWAD proporcionando mtodos para construir laspeticiones que se realizan a dichos servicios web y recibir y procesar las respuestasrecibidas de los mismos.Los mtodos de la clase Module generan las peticiones en ficheros XML que envan aSWAD, que a su vez enva las respuestas en otro fichero XML. Estos ficheros seestructuran con el formato especificado por el protocolo SOAP, utilizado en lascomunicaciones con SWAD.En sus inicios SWADroid contaba nicamente con 4 mdulos: Login. Courses. Notifications. Tests.En la actualidad, a fecha 12/09/2014, SWADroid cuenta con ms de 15 mdulos entrelos que se pueden destacar, por ejemplo: Documents. Messages. Groups. Information. 26. 4.1. Desarrollo del mdulo informativo.Este mdulo es el encargado de recoger el contenido de los apartados informativos queaparecen en SWAD:18 Introduccin. Programa de teora. Programa de prcticas. Gua docente. Bibliografa. FAQ. Enlaces.Para la creacin de este mdulo se han seguido los siguientes pasos:1. Crear el paquete correspondiente:/SWADMain/src/es/ugr/swad/swadroid/modules/information2. Crear el archivo .java correspondiente y su clase dentro de l:Archivo Information.javapublic class Information extends Module { ... }3. Declarar el mdulo en el archivo AndroidManifest.xml.4. Aadir en /res/values/strings.xml las etiquetas correspondientes:Por ejemplo:InformationIntroduction 27. 5. Aadir una llamada al mdulo desde la actividad que debe llamarlo:19Por ejemplo:} else if (keyword.equals(getString(R.string.introductionModuleLabel))) {activity = new Intent(this, Information.class);activity.putExtra("requestCode",Constants.INTRODUCTION_REQUEST_CODE);startActivityForResult(activity,Constants.INTRODUCTION_REQUEST_CODE);}6. Aadir las diferentes opciones al apartado correspondiente del men principalEn este caso, se aaden a Asignatura (o en Evaluacin en el caso de Sistema deEvaluacin), por lo que no hay que crear un nuevo apartado en el men, sino aadirlasdentro de Asignatura (o en Evaluacin en el caso de Sistema de Evaluacin).Por ejemplo://Introduction categorymap = new HashMap();map.put(NAME, getString(R.string.introductionModuleLabel));map.put(IMAGE, getResources().getDrawable(R.drawable.notif));courseData.add(map);En lugar de hacer:final ArrayList> headerData = newArrayList>();final HashMap introduction = new HashMap();introduction.put(NAME, getString(R.string.introduction));Que es lo que se hara si quisiramos aadir una nueva opcin al men en lugar de queesta opcin aparezca dentro de otra. 28. 207. Implementar el interfaz grfico:Que dependiendo del mdulo que estemos implementando contendr ms o menoselementos. En el caso del mdulo informativo el interfaz grfico va a ser el siguiente:El motivo de usar un WebView en lugar de, por ejemplo, un TextView lo veremos msadelante.8. Implementar el mdulo:Todos los mdulos de SWADroid deben heredar de la clase Module, que implementauna serie de mtodos abstractos que todos los mdulos estn obligados a implementarpara mantener el flujo de ejecucin de SWADroid. Estos mtodos son: connectEste mtodo se encarga de mostrar un cuadro de dialogo de progreso, si es necesario, yde lanzar la ejecucin de la tarea implementada por el modulo en una hebra en segundoplano. En el caso de este mdulo sera:StringprogressDescription = getString(R.string.informationProgressDescription);int progressTitle = R.string.informationProgressTitle;startConnection(true, progressDescription, progressTitle); 29. 21 postConnectEste mtodo se encarga de realizar las acciones que deban llevarse a cabo despus dehaber ejecutado la tarea principal del mdulo, como por ejemplo el refresco de lapantalla para actualizar la informacin mostrada.Para el mdulo informativo:WebView webview = (WebView) this.findViewById(R.id.contentWebView);if (infoSrc.equals("none")) {webview.loadData(getString(R.string.emptyInformation),"text/html; charset=UTF-8", null);} else if (infoSrc.equals("URL")) {webview.loadUrl(infoTxt);} else {webview.loadData(infoTxt, "text/html; charset=UTF-8", null);}finish();} requestServiceEste mtodo implementa la tarea principal que llevar a cabo el mdulo, quenormalmente consiste en construir y enviar una peticin a un servicio Web de SWAD yprocesar la respuesta devuelta por el mismo.El flujo de trabajo de este mtodo es el siguiente:a) Configurar el nombre del servicio Web al que se enviara la peticin (est configuradodurante la ejecucin del mtodo onCreate, que se ejecuta la primera vez que se lanza elmdulo durante la ejecucin de SWADroid, pero tambin puede hacerse en estemtodo).setMETHOD_NAME ("getCourseInfo"); 30. b) Inicializar la peticin, aadir a esta los parmetros requeridos por el servicio Web yenviarla a dicho servicio:createRequest(SOAPClient.CLIENT_TYPE);addParam("wsKey", Constants.getLoggedUser().getWsKey());addParam("courseCode", Constants.getSelectedCourseCode());addParam("infoType", infoTypeToAdd);sendRequest(User.class, false);22c) Procesar la respuesta del servicio Web:if (result != null) {SoapObject soap = (SoapObject) result;infoSrc = soap.getProperty(infoSrc).toString();infoTxt = soap.getPrimitiveProperty(infoTxt).toString();// Request finalized without errorssetResult(RESULT_OK);} else {infoTxt = getString(R.string.connectionRequired);}Como ya he dicho, estos mtodos son los que TODOS los mdulos implementan, perodependiendo de qu modulo estemos implementando, necesitaremos aadir otros.Cabe destacar el mtodo onStart, que es el encargado de iniciar el flujo de ejecucin delmdulo informativo y cuyo cdigo es el siguiente:super.onStart();try {runConnection();} catch (Exception e) {String errorMsg = getString(R.string.errorServerResponseMsg);error(TAG, errorMsg, e, true);}El resto de mtodos que se han usado para implementar el mdulo informativo puedenverse en la forja del proyecto. (https://github.com/Amab/SWADroid).Problema:En la implementacin de este mdulo ha surgido el siguiente problema: cada profesorque gestiona una asignatura en SWAD, sube la informacin pertinente en el formato quea ellos les viene mejor, est dentro de estos formatos HTML, enlaces a otras pginas,texto plano, etc., y no sigue ningn tipo de estndar por lo que a la hora de mostrar lainformacin en SWADroid hay que tener todos esos formatos en cuenta. 31. 23Cmo se ha solucionado este problema?En un principio, esta informacin iba a cargarse en SWADroid en un TextView pero dehaber sido as, no se podran haber visualizado todos los formatos correctamente.Visto esto, la solucin fue usar un WebView (como ya se ha comentado anteriormente),el cual es capaz de cargar texto formateado (HTML por ejemplo) e incluso abrir unapgina Web incrustndola en nuestra app sin necesidad de abrir el propio navegador.Tomando como solucin final el WebView, lo nico que hay que hacer es comprobar lainformacin que nos devuelve el Web Service e invocar a la funcin de cargacorrespondiente del WebView tal y como se ha mostrado anteriormente en el mtodopostConnect de este mdulo.El aspecto final de SWADroid tras la implementacin de este mdulo es el siguiente: 32. 24 33. La inclusin del WebView hace posible que se pueda visualizar, por ejemplo, tantotexto plano como texto formateado en HTML en el mismo campo como se muestra acontinuacin:25 34. 4.2. Desarrollo del mdulo de mensajes.El desarrollo de este mdulo ha sido especialmente complicado debido, en su mayorparte, a que ya exista. En un principio se pens en modificar el mdulo existente yreutilizar otros que nos permitan, por ejemplo, descargar los usuarios para podermostrarlos en el listado. Se comenz por esta opcin, pero conforme se iba avanzando,nicamente surgan problemas que cada vez eran ms complicados de solucionar, asque se opt por implementar un nuevo mdulo.El nuevo mdulo (aparte de, obviamente, enviar mensajes): Tiene una interfaz completamente rediseada. Permite mostrar un listado con las fotos y los nombres de los usuarios de laasignatura separados en alumnos y profesores. Permite filtrar el listado de usuarios. Permite marcar usuarios para aadirlos como destinatarios.A continuacin se muestra cmo se ha implementado el nuevo mdulo y cmo se hanido solucionando los diferentes problemas e inconvenientes que han ido surgiendo.261. Crear la nueva clase Messages:Esta nueva clase debe contener un listado de destinatarios (receivers) que son los quese aaden manualmente (los que escribimos nosotros en el campo destinatarios) ycompletarlo con los destinatarios que marquemos de la lista de usuarios.En la clase Messages se llamar a una actividad que mostrar el listado de usuarios yeste ser el que devuelva a la actividad principal el listado de usuarios marcados. Estaactividad se invoca mediante un botn que est incluido en la ActionBar y que formaparte del rediseo de la interfaz de este mdulo.Esto se realiza de la siguiente manera:public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_addUser:Intent callUsersList = new Intent (getBaseContext(),UsersList.class);startActivityForResult(callUsersList, 0);return true;default:return super.onOptionsItemSelected(item);}}}Como vemos, lo que se hace es invocar una nueva actividad con la clase UsersList. 35. 272. Crear la clase UsersList:De esta clase cabe destacar 3 cosas:1. Contiene un mtodo para descargar el listado de usuarios:private void downloadUsersList() {Intent donwloadUsersList = new Intent (getBaseContext(),DownloadUsers.class);startActivity(donwloadUsersList);setChildGroupData();}Con esto, se invoca una nueva actividad que descarga los usuarios. La claseDownloadUsers contiene un mtodo que es el que se encarga de realizar la peticin alWeb Service para descargar los usuarios:protected void requestService() throws Exception {int userRole = Constants.TEACHER_TYPE_CODE;long courseCode = Constants.getSelectedCourseCode();long groupCode = getIntent().getLongExtra("groupCode", 0);// Creates webservice request, adds required paramsand sends request to webservicecreateRequest(SOAPClient.CLIENT_TYPE);addParam("wsKey", Constants.getLoggedUser().getWsKey());addParam("courseCode", (int) courseCode);addParam("groupCode", (int) groupCode);addParam("userRole", userRole);sendRequest(User.class, false);if (result != null) {// Stores users data returned by webservice responseArrayList res = new ArrayList((Vector) result);SoapObject soap = (SoapObject) res.get(1);numUsers = soap.getPropertyCount();for (int i = 0; i < numUsers; i++) {SoapObject pii = (SoapObject) soap.getProperty(i);long userCode = Long.valueOf(pii.getProperty("userCode").toString());String userID = pii.getProperty("userID").toString();String userNickname = pii.getProperty("userNickname").toString();String userSurname1 = pii.getProperty("userSurname1").toString();String userSurname2 = pii.getProperty("userSurname2").toString();String userFirstName = pii.getProperty("userFirstname").toString();String userPhoto = pii.getProperty("userPhoto").toString(); 36. if (userNickname.equalsIgnoreCase(Constants.NULL_VALUE)){userNickname = "";}if (userSurname1.equalsIgnoreCase(Constants.NULL_VALUE)){userSurname1 = "";}if (userSurname2.equalsIgnoreCase(Constants.NULL_VALUE)){userSurname2 = "";}if (userFirstName.equalsIgnoreCase(Constants.NULL_VALUE)){userFirstName = "";}if (userPhoto.equalsIgnoreCase(Constants.NULL_VALUE)){userPhoto = "";28}User u = new User(userCode, // idnull, // wsKeyuserID,userNickname,userSurname1,userSurname2,userFirstName,userPhoto, // photoPathuserRole);// Inserts user in database or updates it if already existsdbHelper.insertUser(u);dbHelper.insertUserCourse(userCode, courseCode, groupCode);} // end for (int i=0; i < usersCount; i++)if (isDebuggable) {Log.d(TAG, "Retrieved " + numUsers + " users");}} // end if (result != null)// Request finalized without errorssetResult(RESULT_OK);}Este mtodo es el encargado de hacer la peticin de descarga de usuarios al WebService como ya se ha comentado y de guardar dichos usuarios en nuestra base de datospara poder mostrarlos posteriormente en forma de listado. 37. 2. Permite actualizar el listado de usuarios:Lo nico que hace este mtodo (que en realidad es una opcin del men de laActionBar) es invocar una actividad con la clase DonwloadUsers como se hacaanteriormente. Esto vuelve a descargar el listado de usuarios y actualiza la base dedatos. El cdigo de esta funcionalidad se implementa de la siguiente manera:public boolean onOptionsItemSelected(MenuItem item) {29switch (item.getItemId()) {case R.id.action_refresh_users:Intent reefreshUserList = new Intent (getBaseContext(),DownloadUsers.class);startActivityForResult(reefreshUserList, 0);return true;default:return super.onOptionsItemSelected(item);}}3. Muestra el listado de usuarios en un ExpandableListViewEsta, posiblemente, sea una de las partes ms importantes del nuevo mdulo demensajes. El motivo es que ahora, la persona que vaya a enviar un mensaje, podr verde manera clara todos los usuarios de la asignatura y as podr seleccionar a quinquiere enviarle el mensaje sin necesidad de conocer su DNI o su apodo como s que eranecesario con el anterior diseo del mdulo, motivo por el cual estaba prcticamente endesuso.La lista expandible tiene numerosos mtodos que se pueden consultar, como ya se hadicho en varias ocasiones, en la forja del proyecto. Los ms importantes son lossiguientes: setGroupData():Con este mtodo se crean los padres del listado, es decir, se crean las diferentessecciones que contendr la lista. En nuestro caso son dos secciones, profesores yalumnos. El cdigo es el siguiente:private void setGroupData() {groupItem.add(getString(R.string.Filters_Teachers));groupItem.add(getString(R.string.Filters_Students));} 38. 30 setChildGroupData():Este mtodo es el encargado de rellenar los hijos, es decir, se encarga de completarlas diferentes secciones que se crean en el mtodo setGroupData. Este es el cdigo queposibilita rellenar las secciones:private void setChildGroupData() {List child = null;//Clear datachildItem.clear();//Add data for teacherschild = dbHelper.getAllRows(Constants.DB_TABLE_USERS,"userRole='" + Constants.TEACHER_TYPE_CODE+"'",orderby);Collections.sort(child);childItem.add(child);//Add data for studentschild = dbHelper.getAllRows(Constants.DB_TABLE_USERS,"userRole'"+ Constants.TEACHER_TYPE_CODE+"'", orderby);Collections.sort(child);childItem.add(child);Log.d(TAG, "groups size=" + childItem.size());Log.d(TAG, "teachers children size=" + childItem.get(TEACHERS_GROUP_ID).size());Log.d(TAG, "students children size=" + childItem.get(STUDENTS_GROUP_ID).size());adapter = new ExpandableStudentsListAdapter(this, groupItem, childItem);if(dbHelper.getAllRowsCount(Constants.DB_TABLE_USERS) > 0) {Log.d(TAG, "[setChildGroupData] Users table is not empty");list.setAdapter(adapter);} else {Log.d(TAG, "[setChildGroupData] Users table is empty");list.setOnChildClickListener(null);}} 39. Los usuarios marcados se aaden a la lista de destinatarios de la siguiente manera://Accept receivers list marked at users listif (!childItem.isEmpty()){for (int i = 0; i < childItem.size(); i ++){int tam = childItem.get(i).size();for(int j = 0; j < tam; j++){User usu = childItem.get(i).get(j);if (usu.isSelected()){String us = usu.getUserNickname().toString();rcvs_Aux = rcvs_Aux + "@" + us + ",";31}}}//If receivers, remove the last commaif(!rcvs_Aux.isEmpty()){rcvs = rcvs_Aux.substring(0, rcvs_Aux.length()-1);}}Intent resultData = new Intent();resultData.putExtra("ListaRcvs", rcvs);setResult(Activity.RESULT_OK, resultData);3. Crear la clase ExpandableStudentsListAdapter:Para poder realizar todo esto, se ha tenido que crear esta nueva clase que contiene unadapter en la cual se generan las vistas donde se mostraran los usuarios. Del adapter,que cuenta con numerosos mtodos, hay que destacar dos, que son los que se encargande rellenar las diferentes vistas: getGroupView():Este mtodo se encarga de crear y devolver la vista de lo que anteriormente llambamoslos padres. Este es el cdigo:public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {TextView groupTitle;if (convertView == null) {convertView = minflater.inflate(R.layout.messages_group_item, parent, false);}groupTitle = (TextView) convertView.findViewById(R.id.messages_group_item_title);groupTitle.setText(groupItem.get(groupPosition));return convertView;} 40. 32 getChildView():Este mtodo se encarga de devolver la vista de lo que antes se ha definido como loshijos. Este es su cdigo:public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView,ViewGroup parent) {//Bitmap bMap = null;final User u = (User) childItem.get(groupPosition).get(childPosition);final String fullName = u.getUserSurname1()+ ' '+ u.getUserSurname2()+ ", "+ u.getUserFirstname();final String photoFileName = u.getUserPhoto();Log.i("fileNAME:"," "+photoFileName);if (convertView == null) {convertView = minflater.inflate(R.layout.messages_child_item, parent, false);}ImageView image = (ImageView) convertView.findViewById(R.id.imageView1);TextView text = (TextView) convertView.findViewById(R.id.TextView1);final CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.check);checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {public void onCheckedChanged(CompoundButton buttonView, booleanisChecked) {checkbox.setSelected(buttonView.isChecked());u.setSelected(isChecked);}});DisplayImageOptions options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.raw.usr_bl).showImageOnFail(R.raw.usr_bl).cacheInMemory(true).build();ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(activity.getApplicationContext()).defaultDisplayImageOptions(options).build();ImageLoader.getInstance().init(config);ImageLoader.getInstance().displayImage(photoFileName, image);text.setText(fullName);text.setTag(u.getUserNickname());checkbox.setChecked((new StudentItemModel(u)).isSelected());return convertView;} 41. Respecto a este cdigo, es de destacar el mtodo setOnCheckedChangeListener que esel que se encarga de dar la funcionalidad correcta al checkbox para que podamosmarcarlo y comprobar si hemos seleccionado o no un usuario como destinatario y el usode ImageLoader para la carga de las imgenes. ImageLoader forma parte de unabiblioteca externa que se comentar ms adelante.334. Crear la nueva interfaz:Como se ha mencionado en apartados anteriores, uno de los temas ms importantes enel rediseo del mdulo de mensajes ha sido el tema de la interfaz. Esto es debido a quela antigua interfaz, era tan simple, que influa negativamente en el uso del mdulo.Como se ha comentado ya varias veces, la anterior interfaz obligaba a que un usuariotuviese que conocer el DNI o el apodo en SWAD del destinatario al que quera escribir.La nueva interfaz, aparte de ser estilo HOLO (como es ahora todo el proyecto) tienemucha ms funcionalidad que la anterior.Esta interfaz consta de 4 partes: Messages_screen.xml:Contiene los elementos que componen la ventana principal que ser la que se muestrecuando seleccionemos la opcin escribir mensaje en el men principal: 42. 34 Users_listview.xml:Es la vista que se muestra cuando seleccionamos la opcin de aadir destinatarios en laventana principal: 43. 35 Messages_group_item.xml:Es la vista que rellenar el mtodo getGroupView comentado en puntos anteriores: Messages_child_item.xml:Es la vista que rellena el mtodo setChildView comentado anteriormente: 44. 36El resto del cdigo de los mtodos de las diferentes clases se puede consultar, comoviene siendo habitual, en la forja del proyecto.Problemas:El rediseo de este mdulo ha sido especialmente complicado y han ido surgiendonumerosos problemas que han dado lugar a una gran cantidad de cambios en elproyecto.El principal problema ha sido la carga de las fotografas por los siguientes motivos: Si descargbamos las imgenes en la SD, los dispositivos sin SD no podran verlas imgenes de los usuarios. Si descargbamos las imgenes en la memoria interna del telfono, eran visiblesen la galera, lo cual no es viable ya que las fotografas de los usuarios sonprivadas y slo deberan de estar disponibles dentro de la aplicacin SWADroid. Por modificaciones y/o actualizaciones de la API de Android, las imgenes seguardaban como corruptas tanto en la SD como en la memoria interna sireutilizbamos los mtodos que ya existan para descargar los usuarios yguardarlos.Otro gran problema ha sido que, para la implementacin del ExpandableListView, no sepodan usar los mtodos que existan para obtener datos de la base de datos.Por ltimo, la implementacin de las nuevas funcionalidades del mdulo ha dado lugara modificaciones en las funciones del Web Service que nos permitan obtener el listadode usuarios de las asignaturas.Cmo se han solucionado estos problemas?A parte de, como se ha explicado en los puntos anteriores, implementar las nuevasclases y la nueva interfaz, se ha tenido que hacer uso de una biblioteca externa para lacarga de las imgenes (universal-image-loader-1.9.2.jar de nostra13, que se puedeobtener de https://github.com/nostra13/Android-Universal-Image-Loader). 45. Con esta biblioteca externa, podemos descargar las imgenes en cach y mostrarlas, loque nos simplifica el trabajo y nos reduce el espacio en disco de la aplicacin. El uso deesta biblioteca para la carga de imgenes est expuesto en el mtodo getChildView quese ha explicado anteriormente.Respecto al problema de la obtencin de datos de la base de datos, se han tenido quemodificar numerosos mtodos del dbHelper para que devuelvan un resultado correcto.A modo de ejemplo, se muestra el mtodo getAllRows que nos devuelve todas las filasde una tabla de la base de datos:public List getAllRows(String table, String where,String orderby) {List result = new ArrayList();List rows = db.getEntityList(table, where, orderby);T row;37if (rows != null) {for (Entity ent : rows) {row = createObjectByTable(table, ent);result.add(row);}}return result;}Con estas modificaciones se solucionan el problema de la carga de las fotografas y elde completar las vistas con los usuarios descargados.Respecto al tema de las modificaciones en el Web Service, Antonio Caas Vargas, tutordel proyecto, es el encargado de realizarlas. En este caso concreto se han aadidomodificaciones para que: Cualquier usuario pueda descargar el listado de usuarios. Anteriormente, solose permita descargar el listado a los profesores, por lo que solamente podranhacer uso de las nuevas funcionalidades del mdulo de mensajes ellos,reduciendo as la funcionalidad del mismo, lo que hara que todas lasmodificaciones realizadas fuesen inservibles. Se devuelvan todos los usuarios en una nica peticin. Se devuelva el grupo al que pertenece el usuario (Teora, prcticas o ninguno).En resumen, se ve claramente cmo implementar un nuevo mdulo no es tan sencillocomo parece a priori. En el caso del mdulo de mensajes, para dotarlo de una buenafuncionalidad se ha tenido que: Implementar numerosas clases nuevas. Modificar clases existentes. Modificar mtodos de la base de datos. Modificar la interfaz. Modificar mtodos del Web Service. 46. El resultado, tras implementar la nueva interfaz y las nuevas funcionalidades, ha sidopasar de un simple cuadro de dilogo que solo nos permita escribir un mensaje:a una vista en pantalla completa con una alta funcionalidad.El aspecto que tiene SWADroid tras la implementacin de es el siguiente:38 47. 39 48. 40 49. 415. Internacionalizacin.SWADroid provee soporte para varios idiomas. Antes de la realizacin estabadisponible en numerosos idiomas, como son el ingls, espaol, francs, cataln, polaco,etc. Aunque el idioma no poda ser seleccionado explcitamente por el usuario, sino quese establece automticamente en funcin del idioma configurado en el sistema.Tras varios estudios, nos dimos cuenta que la mayora de los idiomas o bien no seusaban o bien eran usado por una minora muy explcita, por lo que se decidieliminarlos. Actualmente SWADroid est disponible en 3 idiomas: cataln, ingls yespaol.Las cadenas de texto de cada idioma se encuentran almacenadas en archivos XMLdentro de la carpeta res/values seguida del cdigo del idioma al que corresponden. As,la carpeta correspondiente al idioma espaol es res/values-es. Si no se especifica ningncdigo despus de values, se tomar por defecto como ingls.Es muy sencillo traducir SWADroid a otros idiomas. Slo es necesario traducir lascadenas de texto que se encuentran entre las etiquetas y sin modificaren ningn caso el parmetro name de la etiqueta , ya que ste es el identificadorque utilizar SWADroid para acceder a la cadena de texto en el idioma apropiado.Una vez traducidos los archivos que se encuentran en res/values-es (por ejemplo), debenincluirse en una nueva carpeta cuyo nombre debe ser res/values-[CODIGO_IDIOMA].Hecho esto, el nuevo idioma estar disponible en SWADroid.Podemos ver estos archivos y los idiomas disponibles en la siguiente imagen: 50. 426. Programacin del proyecto.En este apartado se van a explicar las APIs y tecnologas utilizadas para la elaboracinde este proyecto.6.1 Introduccin.Los inicios de este sistema provienen del ao 2005 cuando Google compra una pequeacompaa llamada Android Inc, cuya finalidad es el desarrollo de aplicaciones paradispositivos mviles, centradas principalmente en plataformas Web.La existencia del nuevo sistema operativo no se hace pblica hasta el ao 2007,momento en el que se anuncia la creacin de la Open Handset Aliance. Estaorganizacin es un consorcio de compaas relacionadas con las telecomunicaciones yla informtica, cuyo principal objetivo es la promocin del sistema operativo Android ysu poltica las licencias de cdigo abierto.La compaa HTC lanza a finales de septiembre de 2008 el primer telfono mvil coneste sistema operativo. Desde entonces, son ya varias las compaas que estnapostando por Android. A modo de resumen estos son los tres nombres ms importantesque se pueden relacionar con esta plataforma.Google: esta compaa es en la actualidad una de las ms poderosas del mundo, surpido crecimiento en tan solo unos pocos aos de vida hizo que en 2007 se convirtieraen la marca ms valorada del mundo por delante de Microsoft o Coca-Cola, empresasque acostumbraban a dominar esta posicin.Google lidera la mencionada Open Handset Aliance. El hecho de que esta compaa detanta importancia sea la principal promotora de Android aporta dos grandes ventajastanto a los usuarios de sus telfonos mviles como a los desarrolladores de aplicacionespara esta plataforma.La primera ventaja es que esta empresa apoya actualmente diversos proyectos desoftware libre y licencias de cdigo abierto. Ocurre lo mismo con el caso de Android, loque provoca que cualquier programador comience a trabajar cuando desee sin tener quepagar ninguna licencia para desarrollar aplicaciones o darlas a conocer en el AndroidMarket. Este ltimo es un repositorio de aplicaciones al que se puede acceder desdecualquier Android, quedando a eleccin del desarrollador que su aplicacin sea gratuitao de pago.La segunda ventaja, es la cantidad de productos pertenecientes a Google tales comoGmail, Youtube, Google Maps, Google Calendar... que cuentan actualmente con unnivel de aceptacin muy alto por parte de los usuarios. Todos los Android cuentan conun acceso rpido y eficiente a estos productos y, al mismo tiempo, Google proporcionaAPIs para que el programador pueda incluir estos servicios en sus aplicaciones de formamuy sencilla. 51. Linux: Android es un sistema operativo abierto para dispositivos mviles, y se basa enla versin 2.6 del Kernel de Linux que acta como una capa de abstraccin entre elhardware y el resto del conjunto de software, adems de prestar los servicios deseguridad, gestin de memoria, gestin de procesos..., que permite que pueda seradaptado con facilidad a otros dispositivos. Esto presenta una gran ventaja para lascompaas fabricantes de telfonos mviles.A continuacin se muestra un diagrama con los principales componentes del sistemaoperativo Android, que sern comentados posteriormente. Aplicaciones: suministra un conjunto de aplicaciones que incluye cliente decorreo electrnico, proveedor de SMS, calendario, mapas, navegador web,contactos... ms todas aquellas aplicaciones que el usuario desee descargar delPlay Store.43 52. Framework de aplicaciones: proporciona acceso a los marcos utilizado por laAPI de las aplicaciones bsicas. La arquitectura de aplicaciones se ha diseadopara simplificar la reutilizacin de componentes. De esta forma cualquieraplicacin puede publicar sus capacidades y cualquier otra aplicacin podrhacer uso de esas capacidades (sujeto a las limitaciones de seguridad impuestaspor el marco). Este hecho permite la reutilizacin de componentes por parte delusuario.Detrs de todas las aplicaciones existen un conjunto de servicios y sistemas queincluyen un conjunto de vistas para construir las pantallas, as como proveedoresde contenido que permiten que las aplicaciones de acceso a los datos de otrasaplicaciones (como Contactos), o para compartir sus propios datos. Libreras: incluye un conjunto de libreras escritas en C y C++ utilizado diversoscomponentes del sistema. Estas capacidades estn expuestas a losdesarrolladores a travs del Framework. Android Runtime: incluye un conjunto de libreras que proporciona la mayorparte de la funcionalidad disponible en el ncleo de las bibliotecas y est basadoen el lenguaje de programacin Java. Cada aplicacin se ejecuta como unproceso independiente, con su propia instancia de la mquina virtual Dalvk quese ha escrito de modo que un dispositivo puede ejecutar mltiples mquinasvirtuales de manera eficiente. La mquina virtual de Dalvk ejecuta archivos.dex cuyo formato est optimizado para un consumo de memoria mnima. Lamquina virtual se basa en registros, y corre clases compiladas por uncompilador de lenguaje Java que se han transformado con la herramientaincluida dx. La mquina virtual de Dalvk se basa en el Kernel de Linux para lafuncionalidad subyacente como subprocesos y de gestin de memoria a bajonivel. Kernel de Linux: explicado antes de mostrar el diagrama.Java: el tercer nombre importante asociado al sistema operativo Android es Java. Comose comentaba anteriormente, cualquier programador se adapta al funcionamiento deAndroid en muy poco tiempo, dado que el cdigo fuente de una aplicacin se escribe enJava y este es uno de los lenguajes de programacin ms utilizados en la actualidad.Ms adelante se explicarn detalles de programacin.Adems, como ventaja aadida el principal inconveniente que se suele asociar conJava es su velocidad de ejecucin. En este caso, como se ha explicado antes, eseproblema ni siquiera existe dado que, aunque la aplicacin se escribe en Java, no es unaaplicacin Java ya que no se ejecuta en una mquina virtual de Java. De esta forma elprogramador cuenta con todas las ventajas de este lenguaje, y desaparece una de susmayores desventajas.44 53. 456.2. Especificaciones tcnicas.Antes de comenzar con los detalles de programacin, se explica todo lo necesario paracomenzar a desarrollar aplicaciones as como los pasos necesarios para la instalacin detodos sus componentes. Estos pasos pueden seguirse tambin de forma resumida en lapgina oficial deAndroid, en el apartado Developers Download SDK desde el cual, adems, podemosdescargar todos los elementos necesarios que a continuacin se explican.Las imgenes y configuraciones que se van a mostrar son bajo las siguientes versionesde los diferentes programas: Eclipse 4.2.1.v20130118. Plugin ADT 23.0.2.1256578. Plugin EGit 2.2.0.201212191850-r JDK v1.7.0_55JDK (Java Development Kit): en primer lugar es necesario tener instalado Java, laversin mnima del JDK debe ser la 5. Puede comprobarse si se dispone de la versinnecesaria introduciendo en la ventana de comandos de Windows (cmd.exe) el siguientecomando (debera mostrar al menos 1.5 para que sea la correcta):java -versionAndroid SDK: mientras que el JDK proporciona lo necesario para utilizar las clases deJava, el SDK da acceso a las clases necesarias para construir una aplicacin Android.Para ello se descarga de la pgina oficial de Android en el apartado comentadoanteriormente, seleccionando la versin correspondiente a la mquina en la que se vayaa trabajar (Mac, Windows o Linux). Esto permite guardar un archivo comprimido, quenicamente hay que descomprimir y guardar la carpeta resultante en el directorio en elque se desee tener el SDK.Tanto la pgina oficial como los libros consultados afirman que no es necesario nadams y que simplemente debe descomprimirse el archivo y posicionarlo donde se desee.El siguiente paso es crear un dispositivo virtual (puede realizarse en cualquier momentoantes de probar la aplicacin), lo que permitir probar la aplicacin en el emulador antesde instalarla en un dispositivo real.Se pueden crear cuantos emuladores se desee y con diversas caractersticas. Por ejemplose puede crear uno con la versin 1.5 de Android que fue la primera en comercializarseen Espaa y otro con la ltima versin para comprobar que funcione todo correctamenteen diferentes versiones. 54. Para crearlos se accede a la opcin Window Android Virtual Device Manager y sepulsa Create en la ventana que nos aparece (es la que se ha mostrado anteriormente). Enla nueva ventana se debe establecer un nombre identificador para cada dispositivovirtual, en el apartado Target la versin de sistema operativo que se desee y el tamaoque se quiera que tenga su tarjeta de memoria. Tras rellenar todos los camposrequeridos correctamente ya tendremos creado nuestro emulador.46 55. Eclipse IDE: es un entorno de desarrollo para compilar y ejecutar aplicaciones. Si seprefiere NetBeans tambin cuenta con su plugin para programar en Android, pero todoslos libros y la pgina oficial de Android se centran en la herramienta Eclipse.La versin mnima necesaria es la 3.4, ya sea de Classic o para desarrolladores de Java.En este caso s que es suficiente con slo descargar el archivo y descomprimirlo, ya queno es necesaria ninguna instalacin.Adems de todo esto, concretamente para este proyecto, es necesaria la instalacin delplugin EGit para poder integrar el control de versiones con Eclipse.Como ya se ha mencionado en numerosas ocasiones, SWADroid es un proyectocolaborativo en el que participan muchas personas, lo que implica que siempre debemostener el proyecto actualizado con los ltimos cambios y estos a su vez, deben estardisponibles para el resto del equipo de desarrollo. Es por eso por lo que integrar Git enEclipse es la manera ms rpida y sencilla de tener el proyecto actualizado. Estainstalacin se ver en el siguiente punto.47 56. 6.3. Repositorio de SWADroid en GitHub.Git es un software de control de versiones desarrollado y mantenido por Linus Torvalds,creador del Kernel de Linux. Gracias a este software muchos desarrolladores ponen elcdigo de sus aplicaciones a disposicin de los dems con la idea de poder mejorarlo ysolucionar posibles fallos as como aadir funciones. Es uno de los sistemas msutilizados por el software libre.Una de sus principales caractersticas es el avanzado control de versiones que permitevolver a una versin anterior del cdigo sin ninguna dificultad ya que el propio sistemaes quien guarda una copia de cada archivo antes de ser modificado.GitHub es donde se almacenan los proyectos de los usuarios utilizando el gestor deversiones. Los desarrolladores avanzados son capaces de utilizar esta herramienta desdeun terminal, pero para un usuario medio, esto puede ser una verdadera pesadilla debidoa la gran cantidad de comandos que existen para manejar esta plataforma. La forma mssencilla de poder programar en Git sin quebraderos de cabeza es hacerlo desde un IDEque trabaje de forma sincronizada con los repositorios seleccionados. Uno de los msutilizados es Eclipse con el plugin de egit.SWADroid mantiene su cdigo fuente en un repositorio pblico alojado enhttps://github.com/AMAB/SWADroidEn los siguientes puntos se detallan los pasos necesarios para llevar a cabo el desarrollode SWADroid manteniendo el cdigo actualizado.48 57. 496.3.1. Instalar el plugin EGit.En la pestaa Help seleccionamos Install New Software.En la ventana que nos aparece pulsamos Add y rellenamos los datos como en lasiguiente imagen: 58. A continuacin marcamos todos los archivos que aparecen para instalar y continuamos:Continuamos, aceptamos la licencia y comenzar la instalacin. Una vez finalizada yatenemos incorporado el plugin EGit en Eclipse.50 59. 516.3.2. Generar claves SSH.Una vez instalado debemos crear una key ssh que nos permitir comunicarnos con elservidor github y subir nuestros proyectos de manera segura.La generacin de la calve SSH se puede realizar de dos maneras: Desde el propio Eclipse: vamos a Window > Preferences y dentro de estevamos a General > Network Connections > SSH2. En la pestaa KeyManagement creamos una nueva key rsa. Al crearse nos dar una key parautilizar en servidores con los que nos comunicaremos, en nuestro caso congithub.Como se puede ver en la anterior imagen, es posible, adems de crear una nueva clave,cargar una que ya tengamos creada. 60. 52 Desde la consola de comandos:1.- Comprobar si ya existe una clave SSH en el ordenador$ cd ~/.sshSi el directorio .ssh no existe, ir al paso 3., en otro caso, ir al paso 2.2.- Realizar una copia de seguridad y eliminar las claves SSH existentes$ lsconfig id_rsa id_rsa.pub known_hosts$ mkdir key_backup$ cp id_rsa* key_backup$ rm id_rsa*3.- Generar una nueva clave SSHssh-keygen -t rsa -C "[email protected]"Generating public/private rsa key pair.Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Una vez hecho esto, tenemos que aadir la clave creada a nuestra cuenta de GitHub.Para ello, vamos a nuestra cuenta, seleccionamos el icono de Settings > SSH keys >Add SSH key.Deberemos darle un nombre y pegar el contenido del archivo de clave que hemosgenerado. Una vez hecho esto, pulsamos el botn Add key y ya tendremos nuestraclave aadida al repositorio. 61. 6.3.3. Configurar la informacin de desarrolladorGit lleva a cabo un seguimiento sobre quin rea-liza cada commit comprobando elnombre de usuario y su email. Adems, GitHub utiliza es-ta informacin para asociarlos commits con la cuenta de GitHub. Para configurar este as-pecto es necesario ejecutarel siguiente cdigo reemplazando el nombre de usuario y email por sus respectivosvalores. El nombre debe ser el nombre real del desarrollador, no el nombre de la cuentaGitHub.53En la consola de Git escribimos:$ git config --global user.name "Firstname Lastname"$ git config --global user.email "[email protected]"Algunas herramientas se conectan a GitHub sin utilizar SSH. Para poder utilizarlascorrectamente es necesario configurar un API Token. En la pgina web de GitHubpulsar Settings > Account Settings y podremos definer el nombre de usuario. Para eltoken, pulsar Settings > Applications > Generate new tokenEn la consola de Git se puede hacer de la siguiente manera, utilizando el nombre deusuario GitHub y el token apropiados:$ git config --global github.user username$ git config --global github.token 0123456789yourf0123456789tokenNOTA: Si se cambia la contrasea de GitHub se crear un nuevo token y sernecesario repetir estos pasos. 62. 6.3.4. Importar el proyecto SWADroid y subir nuestros cambiosDurante el desarrollo del proyecto se han usado dos metodologas de trabajo con Git.Durante los primeros meses y durante la mayor parte del desarrollo se ha usado lametodologa que hace uso de push y pull para descargarnos y subir los cambios.En la forja de SWADroid hay dos ramas diferenciadas: master: Esta rama contiene el cdigo de las versiones publicadas en GooglePlay, por lo que slo contiene cdigo estable. nicamente se sube cdigo a estarama cuando se va a publicar una nueva versin de SWADroid en Google Play. develop: Esta rama contiene el cdigo de las versiones en desarrollo. Losdesarrolladores del proyecto trabajamos en esta rama. Aunque esta rama estpara que los desarrolladores compartan su cdigo y en ocasiones puede ocurrirque el cdigo ni siquiera compile, es una buena prctica que los cambios quesubamos a esta rama permitan compilar el cdigo y no interfieran con el trabajode los dems. En caso de que necesitemos compartir nuestros cambios y estos nocompilen o provoquen un funcionamiento anmalo en la ejecucin normal de laaplicacin los subiremos comentados para desactivarlos.El proceso para empezar a trabajar con esta metodologa es el siguiente: Descargar el cdigo de la rama develop desde la consola:git clone https://github.com/Amab/SWADroid.git -b developTambin podemos hacerlo mediante el plugin EGit de la siguiente manera:54 63. A continuacin rellenamos los datos que nos aparecern:Seguidamente nos aparecer una ventana en la que deberemos marcar las ramas delproyecto que queremos descargar (en el caso de que tenga ms de una como es el casode SWADroid que, como ya se ha dicho, dispone de una rama master y una ramadevelop).55 64. Una vez descargado el cdigo y configurado Git como se ha indicado en los pasosanteriores, deberemos abrirlo en Eclipse (File>Import>Existing proyecto intoworkspace) y ya podremos comenzar a trabajar y a interactuar con la forja.Al clicar en Next, nos aparecer una ventana en la que tendremos que seleccionarBrowse y se nos abrir un Explorador de archivos por el que tendremos quenavegar hasta donde hemos descargado el proyecto. Si se hace bien el resultado ser queel proyecto aparece en el explorador de paquetes.56 65. Para trabajar en conjunto con el resto del equipo de desarrollo, se us, como ya se hadicho, durante la mayor parte del proyecto, la metodologa pull & push:- Pull: se usa para actualizar el cdigo del proyecto, es decir, para descargar loscambios que los dems integrantes del proyecto han subido a la forja.Se puede usar por consola mediante el siguiente comando:57git pullO mediante el plugin EGit haciendo clic con el boton derecho sobre el proyecto y:Si el proyecto est actualizado, nos dir Already up-to-date si no, nos descargar lasmodificaciones y las incluir en nuestra copia local del proyecto. 66. - Push: se usa para subir nuestras modificaciones a la forja.Se puede usar por consola mediante el siguiente comando:58git pushGeneralmente, esto dar error y nos dir que antes de poder hacer un push debemoshacer un commit. Hacer un commit es guardar nuestros cambios localmente antes depoder subirlos a la forja. Esto se realiza mediante los siguientes comandos:git add * (aade todos los archivos al futuro commit)git commit m el mensaje que se incluir en el commit (crea el commit)git push (sube los cambios incluidos en el commit a la forja)O mediante el plugin EGit de Eclipse:El primer paso para subir nuestros cambios a la forja es guardarlos localmente como seha dicho anteriormente. 67. Una vez seleccionada esta opcin nos aparecer la ventana en la que deberemoscompletar los datos del commit y el push:Si seleccionamos Commit, los cambios se guardarn de forma local (se trackearn) ysi seleccionamos Commit and Push aparte de guardarse localmente, se subirn a laforja.Durante aproximadamente el ltimo mes de proyecto, se cambi la metodologa detrabajo y se pas de los push & pull a fork & pull requestLos objetivos de cambiar de metodologa son los siguientes: Mantener el repositorio oficial limpio de cosas a medias y en un estado de"liberacin inmediata", es decir, que podamos liberar una nueva versin aproduccin en cualquier momento. No pisarnos los unos a los otros tocando directamente cosas que pueden afectara los dems y utilizar un mecanismo de revisin antes de integrar los cambios enel repositorio oficial.59 68. 60CambiosSe comienza a utilizar la metodologa fork & pull de GitHub a base de forks. A partir deahora ya no se tendr acceso directo al repositorio oficial del proyecto, es decir, no sepodrn subir cambios directamente (el push fallar por falta de permisos). En lugar deeso os crearis un fork para cada uno y trabajaris en l.La metodologa de desarrollo es ahora la siguiente:1. Actualizar el fork personal con los ltimos cambios del repositorio oficial.2. Hacer el cambio en el fork personal.Cuando el cambio est terminado, enviar un pull request contra la ramadevelop del repositorio oficial para su revisin y, en su caso, integracin en elcdigo del proyecto.o Si el pull request es aceptado, el cambio se da por completado y seintegra en el cdigo del proyecto.o Si el pull request es rechazado, se deben corregir los problemas que hanprovocado su rechazo y enviar un nuevo pull request.Para el envo de los pull requests seguimos algunas normas: Los pull requests deben ir contra la rama develop del repositorio oficial. Todoslos pull requests que vayan contra la rama master sern rechazados. Slo se enviarn pull requests de cambios ya terminados y probados. Todoslos pull requests de cambios a medio hacer sern rechazados.Para hacer un fork nos dirijimos a la forja del pryecto y hacemos clic en Fork comomuestra la siguiente imagen:Ahora ya tenemos el proyecto copiado en nuestra cuenta de GitHub y solo tendremosque descargarlo usando alguna de las opciones disponibles: 69. Para mantener nuestro fork actualizado, debemos hacer que el pull apunte a la forjadel proyecto, no a nuestra forja (hacer que el upstream apunte ahttps://github.com/Amab/SWADroid):Ahora hacemos el pull que hacamos antes, desde lo que hemos definido comoupstream. Para ello, hacemos clic con el botn derecho sobre nuestro proyecto, luegoseleccionamos Team y a continuacin seleccionamos el pull, que en este caso se llamaFetch from upstream:A continuacin, se descargarn los cambios que haya en la forja (si es que los hay) ydeberemos hacer Merge para incluir dichos cambios en nuestro fork. Una vezhecho esto ya podemos seguir trabajando en el proyecto.61 70. Para subir los cambios a la forja debemos realizar dos pasos:1. Hacer un commit de los cambios y subirlos a nuestro repositorio (que es dondeest el fork que hemos realizado) de alguna de las maneras que hemos vistoanteriormente.2. Enviar una solicitud Pull request sobre la forja del proyecto. Para ello nosdirigimos a nuestro fork del proyecto dentro de la pgina de Github y elegimosla opcin Pull Request como se ve en la siguiente imagen:Seleccionamos New Pull Request y nos aparecer una ventana en la que deberemoselegir Create Pull Request y completar los datos:Ahora para enviarlo, solamente debemos clicar en Create Pull request.Si el Pull Request es aceptado, los cambios estarn subidos a la forja, si se rechaza,deberemos corregir los errores y volver a enviar la solicitud.62 71. 636.4 API de Android.En este punto se comentan, de forma resumida, las clases ms importantespertenecientes al API de Android que se han usado. Estas clases se usan como cualquierotra clase Java. Se han nombrado como las ms importantes, entre otras cosas, porquecon ellas (y sus clases descendientes) se podran construir aplicaciones bastantecomplejas sin necesidad de usar ninguna clase ms.6.4.1 ActivityEs la principal clase de Android, y cada pantalla que se muestra en la aplicacin es unaclase que hereda de Activity. Se podra decir que una actividad equivale a una pantalla.A continuacin se muestra el ciclo de vida de una actividad: 72. En el diagrama se observan los mtodos que se pueden sobrescribir si se desea realizaruna accin en concreto, y cundo se ejecutan. No es necesario ni obligatorioimplementar ninguno de ellos; el nico que debemos implementar siempre (al menos sise desea que la actividad muestre algo) es el mtodo onCreate() donde se define todo loque se necesite realizar antes de que la pantalla se muestre.Vamos a ver, de forma resumida, qu hace cada uno de esos mtodos: onCreate(): Se dispara cuando la Activity es llamada por primera vez. Aqu esdonde debemos crear la inicializacin normal de la aplicacin, crear vistas, hacerlos bind de los datos, etc. Este mtodo te da acceso al estado de la aplicacincuando se cerr. onRestart(): Se ejecuta cuando tu Activity ha sido parada, y quieres volver a64utilizarla. onStart(): Se ejecuta cuando la Activity se est mostrando apenas en la pantalladel dispositivo del usuario. onResume(): Se ejecuta una vez que la Activity ha terminado de cargarse en eldispositivo y el usuario empieza a interactuar con la aplicacin. onPause(): Se ejecuta cuando el sistema arranca una nueva Activity quenecesitar los recursos del sistema centrados en ella. Hay que procurar que lallamada a este mtodo sea rpida ya que hasta que no se termine su ejecucin nose podr arrancar la nueva Activity. onStop(): Se ejecuta cuando la Activity ya no es visible para el usuario porqueotra Activityha pasado a primer plano. onDestroy(): Esta es la llamada final de la Activity, despus de sta, estotalmente destruida. Esto ocurre debido a los requerimientos de memoria quetenga el sistema o porque de manera explcita el usuario manda a llamar estemtodo. Si quisiramos volver a ejecutar la Activity se arrancara un nuevo ciclode vida. 73. Se ha hablado mucho de Activity pero, qu es realmente?Una actividad es una pantalla en la que pueden aparecer elementos visuales en ella.Adems, cada uno de ellos debe ser un objeto que herede de la clase View. Estoselementos visuales pueden ser definidos mediante cdigo o a travs de ficheros XML(recomendado).La segunda forma se lleva a cabo mediante el siguiente cdigo:@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);eventCode = getIntent().getLongExtra("eventCode", 0);setContentView(R.layout.messages_screen);setTitle(R.string.messagesModuleLabel);getSupportActionBar().setIcon(R.drawable.msg);65if (savedInstanceState != null)writeData();setMETHOD_NAME("sendMessage");}En este caso, este es el comienzo del onCreate() en el que se mostrar la vista principalde la pantalla para enviar los mensajes. Antes de llevar a cabo una accin con unelemento visual, debe llamarse al mtodo de la clase superior. Como en este caso sedesea que la apariencia visual se lea desde un fichero XML, se llama al mtodo quetoma un contenido visual y, a travs de clase R.java, se accede al XML que se deseamostrar.La clase que se desee mostrar tambin puede heredar de otra clase que herede deActivity, como, por ejemplo TabActivity, que construir la pantalla con un panel contantas pestaas como se definan, un ListActivity, que muestra elementos en forma delista y sus correspondientes mtodos para tratarla, o MapActivity, proporcionada por unAPI de Google. Tambin se pueden reutilizar las Activities ya creadas anteriormente enSWADroid. 74. 666.4.2 Intent.La mejor forma de definir la clase Intent es como un nexo de unin. Su uso msfrecuente es llamar a una Activity desde otra, o para realizar una accin en unaactividad.Esta clase permite que el programador se despreocupe del flujo de datos de suaplicacin, ya que la clase Intent se encarga de ello y, puesto que todos los Androiddisponen de un botn volver, no es necesario ningn control de flujo.La clase Intent tambin se encarga de controlar a qu actividad se debe regresar cuandose pulse el botn del dispositivo para volver atrs. Si es necesario, se podra realizar uncontrol de flujo de datos a travs de todos los mtodos que definen el ciclo de vida.A modo de ejemplo, vamos a ver como se hace uso de la clase Intent para aadir ellistado de usuarios desde la pantalla de mensajes al campo destinatarios:Intent callUsersList = new Intent (getBaseContext(), UsersList.class);startActivityForResult(callUsersList, 0);En este ejemplo, se abre la ventana correspondiente a la funcin UsersList. ConstartActivityForResult() la actividad llamante a la espera de que la nueva actividadfinalice y se le asigna un identificador. En la clase UsersList se devuelven los usuariosmarcados://Accept receivers list marked at users listif (!childItem.isEmpty()){for (int i = 0; i < childItem.size(); i ++){int tam = childItem.get(i).size();for(int j = 0; j < tam; j++){User usu = childItem.get(i).get(j);if (usu.isSelected()){String us = usu.getUserNickname().toString();rcvs_Aux = rcvs_Aux + "@" + us + ",";}}}//If receivers, remove the last commaif(!rcvs_Aux.isEmpty()) {rcvs = rcvs_Aux.substring(0, rcvs_Aux.length()-1);}}Intent resultData = new Intent();resultData.putExtra("ListaRcvs", rcvs);setResult(Activity.RESULT_OK, resultData);finish();Cuando se desee cerrar una clase Activity se puede llamar al mtodo finish(). Antes dehacerlo se puede indicar el resultado de la accin de la actividad. Si la actividad harealizado su tarea correctamente se puede llamar dentro de ella al mtodosetResult(RESULT_OK) para informar a la actividad llamante; en otro caso se puedellamar al mtodo setResult(RESULT_CANCELED).RESULT_OK/CANCELED son constantes que pertenece a la clase Activity. 75. Intent podra considerarse un nexo de unin y un modo de realizar acciones en eldispositivo.No sirve exclusivamente para pasar de una actividad a otra, sino que, como se muestraen el siguiente ejemplo, tambin sirve para lanzar acciones que el dispositivo mvillleva integradas, como por ejemplo realizar una llamada. En este caso, al crear el Intentes necesario indicarle el nmero al que se desea llamar:Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ numeTlf));startActivity(intent);67 76. 686.4.3 View.Todo objeto que se desee mostrar por pantalla debe heredar de la clase View. Se puedendefinir clases propias que hereden de View, o usar las que proporciona el API deAndroid. Los objetos View se pueden organizar y ordenar dentro de objetos de claseLayout. Con un Layout, por ejemplo, se puede definir que los componentes se agreguende manera horizontal o vertical en una lnea. Tambin es posible definirlos en unformato de tabla controlando las posiciones en columnas y filas.Entre los layouts proporcionados por Android los siguientes son los ms bsicos: LinearLayout: este Layout ordena a sus elementos en una lnea en sentidohorizontal o vertical, agregndolos uno por uno en el orden en que se vandefiniendo. FrameLayout: es el tipo ms simple de Layout que permite agregar un soloelemento en un espacio en blanco definido. TableLayout: este Layout agrega sus elementos en columnas y filas. Las filasdeben ser insertadas una por una con un RowLayout. RelativeLayout: permite agregar elementos respecto a uno previo. Esto significaque el posicionamiento se administra segn la posicin del elemento anterior.Las interfaces se definen de forma jerrquica, por lo que es posible usar tantoselementos como se desee, combinndolos o introduciendo unos dentro de otros. Otraforma de organizar los objetos de clase View es utilizar ViewGroups, que tambinpueden contener Layouts si se desea.Estos son los ms comunes: Gallery: utilizado para desplegar listados de imgenes en un componente conScroll. GridView: despliega una tabla con Scroll de m columnas y n filas. ListView: despliega una lista con Scroll de una columna. ScrollView: una columna vertical de elementos con Scroll. Dentro de lajerarqua, el ScrollView slo puede contener un elemento, si se desea que elscroll se realice sobre varios Views estos debern estar dentro de un ViewGroupo Layout, que ser incluido dentro del ScrollView. ExpandableListView: Permite realizar la misma funcin que un ListView, perocon la posibilidad de tener ms de una categora, adems de poder mostrar yocultar (expandir y contraer) el contenido de dichas categoras. 77. Los objetos ms utilizados de clase View son: Button: elemento que muestra un botn en la pantalla con el objetivo de que elusuario realice alguna interaccin con l. Se le puede colocar una imagen defondo, pero para construir un botn que sea una imagen existe tambin una clasesimilar llamada ImageButton. CheckBox: caja de texto seleccionable que permite evaluar dos estados delelemento: seleccionado y no seleccionado. EditText: elemento que permite editar texto dentro del mismo. TextView: etiqueta de texto no editable por el usuario. RadioButton: elemento seleccionable parecido al CheckBox, pero con ladiferencia de que una vez que se ha seleccionado no regresa a su estado anteriorsi este est definido dentro de un RadioGroup. Spinner: listado de elementos oculto que solo aparece cuando se pulsa sobre l.Cuando est oculto slo se puede ver el elemento seleccionado de todo ellistado. WebView: como se explic en otros puntos, permite cargar contenido Webdentro de nuestra aplicacin sin necesidad de abrir el navegador Web.Con estas tres clases, y sus correspondientes clases descendientes, como ya se ha dichocon anterioridad, se podran construir aplicaciones bastante complejas.El proceso se pueden resumir de la siguiente manera: una Activity es una ventana que semuestra por pantalla, todo lo que se desee incluir en la pantalla tiene que serdescendiente de View o agrupaciones de estos objetos como Layouts y ViewGroups.Por ltimo, los Intent permiten pasar de un Activity a otro, o realizar acciones definidaspor el telfono sobre l.Tambin existe la clase Service, de funciones similares a un Activity pero ejecutndoseen segundo plano. Es decir, es una actividad en background que se puede ejecutar deforma indefinida y que no mostrar nada por pantalla durante su ejecucin.69 78. 706.5. Temporizacin del Proyecto.El tiempo invertido en el desarrollo del proyecto ha sido llevado a cabo mediante laplataforma clockingit (http://www.clockingit.com/).Clockingit es una aplicacin web libre que nos permite crear tareas, asignarlas apersonas y aadir el tiempo que se ha ido invirtiendo en ellas.En el proyecto que se ha creado en dicha aplicacin estn registrados comoparticipantes Jos Antonio Guerrero Avils (encargado de crear las nuevasfuncionalidades para SWADroid) y Antonio Caas Vargas (director del proyecto yencargado de implementar y modificar las funciones del Web Service).Como se observa en la imagen, el tiempo invertido en la realizacin del proyecto es de 6semanas, 1 da, 10 horas y 57 minutos.La configuracin del tiempo del proyecto es la siguiente:Por lo tanto, el tiempo invertido en horas es de unas 270 horas (a lo que habra quesumarle la realizacin de la presentacin para exponer el proyecto y las horas que anquedan para terminar de redactar esta memoria).Cabe destacar que esas son las horas invertidas trabajando desde el ordenador. Ququiere decir esto? Como se ha comentado en numerosas ocasiones, esto es un proyectocolaborativo y por ende, es imposible contabilizar las horas invertidas en: Tutoras con Antonio Caas. Llamadas telefnicas a miembros del equipo. Quedadas con miembros del equipo. Cientos de correos electrnicos enviados entre los diferentes miembros. Videollamadas y videoconferencias.Y en general, toda la comunicacin y el feedback constante que debe haber en el equipode desarrollo durante todo el proyecto. 79. En esta temporizacin tampoco se incluye la totalidad del tiempo invertido en prepararla el VIII Concurso Universitario de Software Libre en el cul SWADroid particip yfue premiado tal y como se puede apreciar en las imgenes que a continuacin aparecen:71 80. En puntos anteriores se mencionaba que el mdulo de mensajes haba sidoespecialmente complicado. Ya se han explicado todos los problemas que han idosurgiendo y se ve, claramente, que s que ha sido complicado, pero para concretizar anms vamos a ver unas grficas en las que se muestran los tiempos invertidos en algunasde las tareas realizadas durante el proyecto y posteriormente el invertido en implementarel mdulo de mensajes:Esta tarea por ejemplo, se ha llamado Trabajo diario y, como se puede ver en sudescripcin, estaba pensada para aadir ah todo el trabajo q