Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Autónoma de Madrid Escuela Politécnica Superior Grado en Ingeniería Informática TRABAJO DE FIN DE GRADO APLICACIÓN ANDROID DE MONITORIZACIÓN Y GENERACIÓN DE DATOS ESTADÍSTICOS EN FÚTBOL SALA Alberto Pérez Garrido Tutor: Alejandro Sierra Urrecho DICIEMBRE 2020 APLICACIÓN ANDROID DE MONITORIZACIÓN Y GENERACIÓN DE DATOS ESTADÍSTICOS EN FÚTBOL SALA Autor: Alberto Pérez Garrido Tutor: Alejandro Sierra Urrecho Departamento de Ingeniería Informática Escuela Politécnica Superior Universidad Autónoma de Madrid DICIEMBRE 2020 Agradecimientos A mis padres, por apoyarme siempre. A mi hermano, por actuar como cliente del producto durante su desarrollo. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala I Abstract Abstract — Despite the fact that futsal is one of the most practiced sports in Spain, there are not many applications or services that help clubs and coaches to monitor the information of each match in order to obtain a better understanding of what is happening in direct and be able to act accordingly quickly. The main reason for this fnal degree project is to be able to provide coaches with an application for Android tablets that meets this objective, to monitor the information of each player both live and from any previously recorded match and obtain graphs comparing this personal data with the match data, including monitoring of the time played that will help manage one of the most critical situations in this sport: e˙ort management. To do this, this application has been developed for a futsal coach, in such a way that it has been designed to his liking and with the functionalities that he has believed are essential for all his colleagues, with a simple design but that reaches all the desired functionality. With this working method, the project has been carried out as if it were for a client, with periodic meetings to check the status and analyze what functionality should be maintained and what not in the fnal version of the application. The FutsalControl application will allow you to add a team to the device, add players to your squad and be able to create matches in which data such as goals, passes, shots and fouls of each player can be recorded live, in order to create graphics for each of these attributes compared to the team’s total data in that match or in other matches for which data has been recorded. FutsalControl has been developed in Kotlin through Android Studio, and makes use of the Android Jetpack library, following the practices recommended by Google, and using cutting-edge technologies in the development of Android applications such as the use of Databinding for data binding, the Navigation library for navigation between fragments and a local database using the Room library. Key words — Android, Room, Databinding, Android Jetpack, Android Studio, Navigation. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala III Resumen Resumen — A pesar de que el fútbol sala es uno de los deportes más practicados en España, no existen muchas aplicaciones o servicios que ayuden a los clubes y entrenadores a monitorizar la información de cada partido de cara a obtener un mejor entendimiento de lo que está pasando en directo y poder actuar en consecuencia de forma rápida. El motivo principal de este trabajo de fn de grado es poder proporcionar a los entrenadores una aplicación para tabletas Android que cumpla ese objetivo, monitorizar tanto en directo como de cualquier partido registrado anteriormente la información de cada jugador y obtener gráfcos comparando esos datos personales con los datos generales del partido. Además, se incluirá una monitorización del tiempo jugado que ayudará a gestionar una de las situaciones más críticas de este deporte: la gestión de esfuerzos. Para ello, dicha aplicación ha sido desarrollada para un entrenador de fútbol sala, de forma que se ha diseñado a su gusto y con las funcionalidades que ha creído que son imprescindibles para todos sus compañeros de profesión, con un diseño simple pero que alcance toda la funcionalidad deseada. Con este método de trabajo, el proyecto ha sido llevado a cabo como si fuera para un cliente, con reuniones periódicas para comprobar el estado y analizar qué funcionalidad debía mantenerse y qué no en la versión fnal de la aplicación. La aplicación FutsalControl permitirá añadir un equipo al dispositivo, añadir jugadores a su plantilla y poder crear partidos en los que se podrá registrar en directo datos como goles, pases, tiros y faltas de cada jugador. Una vez se tengan datos, se podrán crear gráfcos de cada uno de esos atributos en comparación con los datos totales del equipo en dicho partido o en otros partidos de los que se hayan registrado datos. FutsalControl ha sido desarrollada en Kotlin mediante el entorno de Android Studio, y hace uso de la biblioteca Android Jetpack, siguiendo las prácticas recomendadas por Google. Adicionalmente, se han utilizando tecnologías punteras en el desarrollo de aplicaciones Android como el uso de Databinding para vinculación de datos, la biblioteca Navigation para la navegación entre fragmentos y una base de datos local mediante la biblioteca Room. Palabras clave — Android, Room, Databinding, Android Jetpack, Android Studio, Navigation. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala V Glosario API Application Programming Interface. 11 DataBinding Biblioteca de Android Jetpack para asociar variables de diseño en sus correspondientes fragmentos . 27 Git Software de control de versiones . 27 Kotlin Lenguaje de programación para aplicaciones Android. 25 LiveData Tipo de dato observable de Android . 27 Navigation Biblioteca de Android Jetpack para la navegación entre componentes de una aplicación . 25 Room Biblioteca de Android Jetpack que permite diseñar bases de datos locales en SQLite . 27 Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala VII Índice general Índice de fguras XI 1. Introducción 1 1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Estado del Arte 5 2.1. Futsal Stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2. Mis Estadísticas de Fútbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3. Basketouch Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3. Diseño 7 3.1. Sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.1. Sistema de equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.1.1. Subsistema de plantilla . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.2. Sistema de partidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.2.1. Subsistema de creación de partido . . . . . . . . . . . . . . . . . 8 3.1.2.2. Subsistema de convocatoria . . . . . . . . . . . . . . . . . . . . . 8 3.1.2.3. Subsistema de partido . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.3. Sistema de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.3.1. Subsistema de generación de estadísticas . . . . . . . . . . . . . 8 3.1.3.2. Subsistema de visualización de estadísticas . . . . . . . . . . . . 8 3.2. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2.1. Sistema de equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.1.1. Subsistema de plantilla . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.2. Sistema de partidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.2.1. Subsistema de creación de partido . . . . . . . . . . . . . . . . . 9 3.2.2.2.Subsistema de convocatoria . . . . . . . . . . . . . . . . . . . . . 9 3.2.2.3. Subsistema de partido . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.3. Sistema de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2.3.1. Subsistema de generación de estadísticas . . . . . . . . . . . . . 10 3.2.3.2. Subsistema de visualización de estadísticas . . . . . . . . . . . . 10 3.3. Requisitos no funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.4. Base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.4.1. Biblioteca de persistencias Room . . . . . . . . . . . . . . . . . . . . . . . 11 3.4.2. Diseño de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.5. Diseño de las distintas pantallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala IX ÍNDICE GENERAL 3.5.1. Pantalla principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.5.2. Pantalla de registro de equipo . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.5.3. Pantalla de adición de jugadores a la plantilla . . . . . . . . . . . . . . . . 17 3.5.4. Pantalla de registro de jugador . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5.5. Pantalla de creación de partido . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5.6. Pantalla de convocatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5.7. Pantalla de partido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.5.8. Pantalla de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4. Desarrollo 25 4.1. Bibliotecas y tecnologías utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.1.1. Biblioteca Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.1.2. Biblioteca DataBinding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.3. Tecnologías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2. Desarrollo de los sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2.1. Sistema de equipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2.2. Sistema de partidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.2.3. Sistema de estadísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5. Pruebas y resultados 31 5.1. Pruebas de caja negra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2. Pruebas de caja blanca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.3. Pruebas de validación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6. Conclusiones y trabajo futuro 33 6.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.2. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Bibliografía 35 Apéndices 37 A. Manual del usuario 39 Trabajo de Fin de Grado Alberto Pérez GarridoX Índice de fguras 3.1. Pantalla inicial de FutsalControl la primera vez que se abre la aplicación. . . . . . 15 3.2. Pantalla inicial de FutsalControl cuando se ha añadido un equipo. . . . . . . . . . 16 3.3. Pantalla para guardar el equipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4. Pantalla de plantilla inicial sin jugadores. . . . . . . . . . . . . . . . . . . . . . . 17 3.5. Pantalla de plantilla inicial con jugadores. . . . . . . . . . . . . . . . . . . . . . . 18 3.6. Pantalla que añade el jugador a la plantilla. . . . . . . . . . . . . . . . . . . . . . 18 3.7. Pantalla de creación del partido. . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.8. Pantalla de convocatoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.9. Pantalla de partido por defecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.10. Pantalla de partido hacia la derecha para mostrar relojes. . . . . . . . . . . . . . 21 3.11. Pantalla de partido con datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.12. Relojes de partido con tiempo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.13. Pantalla de estadísticas con gráfco de equipo. . . . . . . . . . . . . . . . . . . . . 23 3.14. Pantalla de estadísticas con gráfco de jugador. . . . . . . . . . . . . . . . . . . . 24 4.1. Mapa de navegación de FutsalControl. . . . . . . . . . . . . . . . . . . . . . . . . 26 A.1. Pantalla inicial sin equipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 A.2. Pantalla de ejemplo al añadir equipo. . . . . . . . . . . . . . . . . . . . . . . . . . 40 A.3. Pantalla de plantilla inicial sin añadir jugadores. . . . . . . . . . . . . . . . . . . 40 A.4. Pantalla de ejemplo de añadir jugador. . . . . . . . . . . . . . . . . . . . . . . . . 41 A.5. Pantalla de plantilla inicial una vez añadidos varios jugadores. . . . . . . . . . . . 41 A.6. Pantalla inicial cuando se ha añadido un equipo. . . . . . . . . . . . . . . . . . . 42 A.7. Pantalla de crear partido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 A.8. Pantalla de convocatoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 A.9. Pantalla de partido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 A.10.Pantalla de estadísticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala XI 1 Introducción Durante la sección de introducción se explicará la motivación y objetivos del trabajo de fn de grado para dar una visión global del desarrollo, así como un esquema de la estructura que tendrá el documento. 1.1. Motivación Este documento de memoria de trabajo de fn de grado trata sobre la realización de una aplicación Android para monitorizar y generar datos estadísticos en fútbol sala. La motivación principal de este trabajo de fn de grado viene dada por una relación personal. Mi hermano es entrenador de fútbol sala, y hablando con él descubrimos que no hay muchas aplicaciones o sistemas que sirvan de ayuda a un entrenador de este deporte de cara a mejorar el rendimiento de su equipo, cuando en otros deportes como el baloncesto sí que hay más oferta, ya que es un deporte con más seguimiento en España. De esta forma, se propuso el crear una aplicación sencilla pero que pudiera almacenar distintos datos que se recogen durante un partido, tanto generales como de jugadores concretos, para poder ser visualizados en pantalla y poder ser estudiados mediante gráfcos para obtener una visión más completa de lo que sucede, tanto en un partido como en una temporada completa. Para ello, se ha elegido el lenguaje de programación Kotlin, un lenguaje moderno y muy potente que es a día de hoy el recomendado por Google para el desarrollo de aplicaciones en su sistema operativo. Debido a que en la vista de partido habrá muchos datos en pantalla, la aplicación sólo se podrá usar en tabletas. Desde su concepción, la aplicación que hemos decidido llamar FutsalControl tenía que tener un diseño muy simple, pero que pueda proporcionar distintas funcionalidades como la gestión de los jugadores de la plantilla que jugarán cada partido y el añadir con un sólo clic un atributo como los pases y que se visualice ese cambio al instante, y que fuera sencilla de usar para que cualquier entrenador que quiera pueda utilizarla. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 1 CAPÍTULO 1. INTRODUCCIÓN Por lo tanto, el proyecto ha consistido en el desarrollo de esta aplicación con la ayuda de mi hermano como cliente del producto, de tal forma que se ha ido comprobando con él todo lo que se añadía mediante reuniones periódicas para que el resultadofnal quedara a su gusto, ya que será él quien la utilice. También se ha aprovechado dicho desarrollo para satisfacer una motivación tecnológica como es el uso de tecnologías más avanzadas para el desarrollo de aplicaciones Android que el las que se usan en asignaturas de la carrera, siendo éstas las pertenecientes a Android Jetpack, de las que se hablará en la sección de desarrollo de este mismo documento. 1.2. Objetivos Los principales objetivos del proyecto llevado a cabo son los siguientes: 1. Desarrollar una aplicación Android para tabletas que permita recoger datos durante un partido de fútbol sala y genere gráfcos a partir de esos datos. 2. Uso de una interfaz sencilla pero que sea intuitiva para todos los usuarios la primera vez que usen la aplicación. 3. Diseñar una base de datos robusta que organice bien la información, ya que se harán muchas consultas debido a la naturaleza de la aplicación. 4. Gestión de la plantilla pudiendo añadir jugadores tanto en el momento en que se añade el equipo a la aplicación como cuando se va a seleccionar la convocatoria de un partido. 5. Controlar todos los atributos deseados de un jugador durante el partido, incluyendo los tiempos de juego que registre. 6. Acceder a la pantalla de estadísticas para generar gráfcos desde la pantalla principal y desde la pantalla del partido. 7. Poder generar un gráfco que compare un atributo entre un jugador concreto y el valor global, o comparar un atributo de todos los jugadores presentes en un partido. 1.3. Estructura del documento La memoria está organizada en los siguientes capítulos, de forma que se detalle todo lo necesario para conocer tanto la aplicación como el proceso de desarrollo para llevarla a cabo: Capítulo 2: Estado del arte - Donde se realizará una comparación con distintas aplicaciones ya existentes que realicen funciones similares a la aplicación aquí descrita. Capítulo 3: Diseño - En este capítulo se detallará el diseño completo de la aplicación, incluyendo las distintas pantallas que la componen y cómo se ha diseñado también la base de datos de la que varias hacen uso. Capítulo 4: Desarrollo - Capítulo en el que se detallarán las tecnologías utilizadas y todos los detalles de implementación. Trabajo de Fin de Grado Alberto Pérez Garrido2 CAPÍTULO 1. INTRODUCCIÓN Capítulo 5: Pruebas y resultados - Donde se discutirán los resultados obtenidos al probar la aplicación. Capítulo 6: Conclusiones y trabajo futuro - Aquí se concluirá el documento tratando posibles mejoras futuras y conclusiones generales sobre el desarrollo del proyecto. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 3 2 Estado del Arte Como ya se ha mencionado el tipo de aplicación que se ha querido conseguir con este trabajo de fn de grado no es muy común, pero eso no signifca que no existan. A continuación se hablará de 3 aplicaciones que tienen un objetivo similar al de FutsalControl. 2.1. Futsal Stats Comenzamos hablando de Futsal Stats ya que es la que más se parece al objetivo de FutsalControl. Se trata de una aplicación disponible en la Play Store de Google cuyo objetivo es más general que el de la monitorización y análisis de datos, pero cuenta con esas funcionalidades. También cuenta con otras como valorar jugadores, compartir registros, mapas de localización de disparos o paradas del portero, etc. El que esta aplicación tenga tantas opciones es algo favorable, pese a que en FutsalControl se ha querido tener una funcionalidad mucho más específca. Sin embargo el diseño es muy ostentoso y recargado, lo que no facilita su uso, mientras que en FutsalControl uno de los elementos más importantes de la aplicación es que el diseño sea simple e intuitivo. En conclusión, si lo que queremos es usar una aplicación únicamente para el análisis estadístico entre Futsal Stats y FutsalControl, FutsalControl ofrece un diseño más amigable y una funcionalidad concreta que abarca más estadísticas. 2.2. Mis Estadísticas de Fútbol Mis Estadísticas de Fútbol es otra aplicación disponible en la tienda de Google. En este caso se trata de una aplicación mucho más generalista en cuanto al deporte, ya que en su descripción dice que se puede usar para fútbol 5 (el número de jugadores de fútbol sala), 6, 7, 9 o 11. A pesar de esto, es una aplicación que en cuanto a funcionalidad se queda muy por detrás de FutsalControl, ya que sólo controla 3 posibles atributos por jugador, como son los goles, las Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 5 CAPÍTULO 2. ESTADO DEL ARTE asistencias y los goles en propia. Aún así, es una aplicación visualmente agradable y que permite controlar los jugadores en pista en cada momento y ver las estadísticas registradas, a pesar de que no sean muchos atributos distintos. 2.3. Basketouch Analytics Basketouch Analytics ha sido incluida en este apartado porque a pesar de ser para otro deporte (baloncesto) tiene una funcionalidad similar en cuanto al análisis de los partidos en directo, pero es justamente en lo que podría convertirse FutsalControl con más desarrollo. Esto se debe a que contiene mucho más análisis tanto de nuestro equipo como del rival, pudiendo generar alineaciones por minutos y con características muy avanzadas que son posibles gracias a que es una empresa completa la que se dedica al desarrollo de esta aplicación, imposible para FutsalControl actualmente. Además cuenta con una parte web que complementa la aplicación móvil para las estadísticas, y ha sido utilizada por la selección de baloncesto de España en el campeonato mundial de 2019, en el que obtuvieron la medalla de oro. Trabajo de Fin de Grado Alberto Pérez Garrido6 3 Diseño En este capítulo se especifcarán todos los detalles relativos al diseño de FutsalControl, tales como los requisitos funcionales y no funcionales de la aplicación, el diseño de la base de datos y las distintas pantallas y sistemas que componen la aplicación. 3.1. Sistemas A continuación se detallan los distintos sistemas de los que hace uso la aplicación: 3.1.1. Sistema de equipos El sistema de equipos permitirá guardar un equipo en el dispositivo para poder almacenar jugadores. 3.1.1.1. Subsistema de plantilla En el subsistema de plantilla el usuario podrá añadir un equipo al dispositivo si no hay uno ya registrado, y permitirá introducir jugadores de forma inicial a la plantilla, aunque también se podrán añadir jugadores en el subsistema de partido como ya se explicará en su correspondiente sección. 3.1.2. Sistema de partidos En el sistema de partidos se encuentra toda la funcionalidad que engloba los partidos, la visualización de los datos de cada jugador en directo y la adición de nuevos datos de forma rápida. Es el sistema más importante de la aplicación, ya que sin datos recogidos durante un partido no habrá estadísticas que visualizar. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 7 CAPÍTULO 3. DISEÑO 3.1.2.1. Subsistema de creación de partido Desde la pantalla principal se podrá seleccionar la opción "Partido", lo que llevará al usuario a una pantalla que permita la creación de un partido guardando los distintos datos de ese partido, como el rival, la jornada, la fecha, etc. 3.1.2.2. Subsistema de convocatoria Después de crear un partido, el usuario deberá seleccionar hasta un máximo de doce jugadores para ese encuentro de entre todos los disponibles en la plantilla, y dicha funcionalidad se encuentra en este subsistema. Además, desde la pantalla de selección de plantilla se podrá añadir jugadores a la plantilla, acción que será una adición normal a la plantilla y no sólo para el partido que se disputará a continuación. 3.1.2.3. Subsistema de partido El subsistema de partido contiene toda la funcionalidad específca del partido, como visualizar el marcador con el tiempo restante, visualizar los datos de distintas estadísticas de jugador, añadir nuevos valores a esos datos y controlar el tiempode juego y descanso de cada jugador. 3.1.3. Sistema de estadísticas El sistema de estadísticas se encargará de toda la funcionalidad referente a la generación y visualización de gráfcos, siendo la otra parte fundamental de la aplicación junto el sistema de partidos. 3.1.3.1. Subsistema de generación de estadísticas En el subsistema de generación de estadísticas se podrá seleccionar tanto a un jugador concreto como al equipo completo y el atributo deseado mediante dos selectores, y dicha selección generará un gráfco a partir de los datos almacenados en la base de datos del dispositivo. 3.1.3.2. Subsistema de visualización de estadísticas Subsistema que se encargará de mostrar el gráfco que genera el subsistema de generación de estadísticas, que permitirá interactuar con el gráfco para resaltar alguno de sus valores o ampliar su tamaño. 3.2. Requisitos funcionales En esta sección detallaremos los requisitos funcionales de la aplicación catalogados por los sistemas y subsistemas que ya se han defnido. Trabajo de Fin de Grado Alberto Pérez Garrido8 CAPÍTULO 3. DISEÑO 3.2.1. Sistema de equipos 3.2.1.1. Subsistema de plantilla RF 1 - Añadir un equipo: La aplicación permitirá añadir un equipo si no hay uno en la base de datos. RF 2 - Añadir jugadores a la plantilla: Una vez se añada el equipo, se permitirá añadir tantos jugadores como se desee a la plantilla. 3.2.2. Sistema de partidos 3.2.2.1. Subsistema de creación de partido RF 3 - Añadir equipo rival: El usuario podrá escribir el nombre del rival para su almacenamiento en la base de datos. RF 4 - Añadir fecha: El usuario podrá guardar la fecha exacta del partido. RF 5 - Añadir jornada: El usuario podrá añadir la jornada del campeonato que supone ese partido. RF 6 - Elegir equipo local: Habrá disponible una caja de selección para indicar si el equipo del usuario es local o no en el partido. 3.2.2.2. Subsistema de convocatoria RF 7 - Seleccionar convocados: El usuario podrá seleccionar los 12 jugadores que estarán disponibles durante el partido a partir de la plantilla completa registrada en la base de datos. RF 8 - Añadir convocado: Si algún jugador va a disputar el partido pero no está registrado en la plantilla, se le podrá añadir para el partido y quedará registrado como jugador disponible en la base de datos. 3.2.2.3. Subsistema de partido RF 9 - Recoger estadísticas: El usuario podrá ir añadiendo estadísticas a cada jugador según ocurran en el partido pulsando en el botón correspondiente a ese dato en el jugador deseado. Dichas estadísticas también serán almacenadas como valores globales del partido en su propia tabla en la base de datos. RF 10 - Manejar reloj de partido: Habrá un reloj de partido con cuenta atrás de 20 minutos, que podrá ser parado, reanudado y reiniciado en función de lo que vaya pasando en el partido. RF 11 - Acceso a estadísticas: Se podrá acceder en todo momento al sistema de estadísticas, estando pensado para tiempos muertos o el descanso, y se podrá volver al partido. RF 12 - Añadir gol rival: Habrá un botón encargado de añadir un gol al equipo rival. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 9 CAPÍTULO 3. DISEÑO RF 13 - Quitar gol rival: Habrá un botón encargado de quitar un gol al equipo rival. RF 14 - Sacar jugador a pista: De los 12 jugadores convocados, se podrá indicar qué 5 están actualmente en pista, incluyendo una distinción para el portero. RF 15 - Cambio de jugadores: Se podrán registrar cambios entre los jugadores que están en pista. RF 16 - Contabilizar tiempo de cada jugador: Cada jugador tendrá tres contadores de tiempo: uno asociado al tiempo jugado desde la última vez que descansó, otro del tiempo que lleva en el banquillo y un último que cuenta el tiempo total jugado durante todo el partido, visibles en todo momento. RF 17 - Contar presencia en goles rivales: Cada vez que se añada un gol al rival, los jugadores que estén en pista en ese momento añadirán un gol a su contador de presencia en goles rivales, y lo mismo ocurrirá al quitarlo si ha sido por error. RF 18 - Expulsar jugador: Cada jugador tendrá un contador de tarjetas que mostrará el color de la última tarjeta recibida, y en caso de que sea roja ese jugador saldrá automáticamente de pista y no podrá volver a marcarse como que está jugando, y sus contadores de tiempo se pararán. RF 19 - Finalizar partido: Se podrá terminar el partido en cualquier momento, sin necesidad de que el reloj llegue a cero. RF 20 - Almacenar estadísticas no mostradas: En casos de estadísticas como pases fallados y completados, el propio sistema almacenará en otro dato los pases totales de cara al estudio estadístico de la aplicación, sin que el usuario tenga que añadirlo. 3.2.3. Sistema de estadísticas 3.2.3.1. Subsistema de generación de estadísticas RF 21 - Elegir jugador: El usuario podrá seleccionar un jugador concreto para generar datos sobre él, o podrá seleccionar la opción Todos para comparar el mismo atributo de cada jugador del partido con el del equipo. RF 22 - Elegir atributo: El usuario podrá elegir los distintos atributos que quiere visualizar, pudiendo seleccionar distintos sin tener que salir de la pantalla de estadísticas. RF 23 - Generar gráfco: Una vez seleccionados los parámetros, se podrá generar el gráfco deseado, y aunque haya un gráfco ya generado se podrán seleccionar otros atributos y generar uno distinto. 3.2.3.2. Subsistema de visualización de estadísticas RF 24 - Visualizar gráfco: El usuario podrá visualizar los gráfcos que genere mediante el subsistema de generación de estadísticas, y también podrá seleccionar distintos valores para resaltarlos o hacer más grande el gráfco. Trabajo de Fin de Grado Alberto Pérez Garrido10 CAPÍTULO 3. DISEÑO 3.3. Requisitos no funcionales En esta sección se detallarán los requisitos no funcionales con los que debe contar la aplicación. RNF 1 - Interfaz sencilla e intuitiva: La interfaz de la aplicación deberá ser simple, pero de fácil uso y que no haga falta pasar mucho tiempo usándola para familiarizarse con ella. RNF 2 - Fluidez: La aplicación tendrá que ser rápida a la hora de cambiar entre las distintas vistas que la componen, así como al generar los gráfcos. RNF 3 - Privacidad de datos: La aplicación tendrá que ser segura para proteger los datos de cada equipo dentro del dispositivo. RNF 4 - Velocidad de acceso a la base de datos: Las acciones que necesiten guardar datos en la base de datos o acceder a ellos tendrán que ser rápidas para no entorpecer la experiencia de uso del usuario. RNF 5 - Android 8.0: La aplicación deberá funcionar en tabletas con Android 8.0 o superior, correspondientes a la API 26. 3.4. Base de datos A continuación detallaremos el esquema de la base de datos. Primero se va a describir qué es la biblioteca Room, con la que se ha creado la base de datos, para después hablar del diseño de la misma. 3.4.1. Biblioteca de persistencias Room Room [3] [7] es una de las bibliotecas de la ya mencionada Android Jetpack [4], un conjunto de librerías para seguir las prácticas recomendadas por Google a la hora de desarrollar aplicaciones para Android. Esta biblioteca funciona proporcionando una capa de abstracción para una base de datos SQLite creando una memoria caché en el dispositivo en el que estés utilizando FutsalControl, de forma que la base de datos y el acceso a ella es local, lo que supone que los usuarios podrán acceder a la información de su equipo independientemente de si tienen conexión a internet. Para declarar una tabla en la base de datos mediante Room, lo único que debe hacerse es sobre una clase de Kotlin añadir una anotación como la siguiente, que es una de las clases y tablas de FutsalControl: 1 @Entity(tableName = "player_table ") 2 3 data class Jugador( 4 @ColumnInfo(name = "roster_id ") val plantilla_id: String , 5 @ColumnInfo(name = "name ") val nombre: String , 6 @ColumnInfo(name = "number ") val dorsal: String , 7 @ColumnInfo(name = "position") val posicion: String , 8 @PrimaryKey var id: String = UUID.randomUUID ().toString ()) {} Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 11 CAPÍTULO 3. DISEÑO Donde anotamos con la etiqueta @Entity a una clase para que se convierta en una tabla en la base de datos, y haremos lo mismo pero con la etiqueta @ColumnInfo o @PrimaryKey para las columnas, pudiendo editar sus nombres en la tabla para que sean distintos de los de las variables asociados a ellas en código Kotlin. Para controlar una base de datos mediante Room serán necesarios dos fcheros: un fchero database en el que declararemos la base de datos y las clases como el ejemplo de Jugador que compondrán sus tablas, y un fchero DAO en el que se almacenarán las distintas consultas con las que interactuamos con la base de datos, que se declaran como en el siguiente ejemplo: 1 @Query (" SELECT goals FROM player_data_table WHERE id = :id AND game_id =: ,→ game_id ") 2 fun getPlayerGoals(id: String , game_id: String): Int 3.4.2. Diseño de la base de datos En la base de datos de FutsalControl se han declarado 7 tablas distintas, con sus equivalentes clases en Kotlin. Todas las clases hacen uso de un UUID, o lo que es lo mismo, un identifcador único universal generado de forma aleatoria. Dichas clases son las siguientes: Equipo: Tabla que recoge toda la información referente al equipo del usuario, cuyos distintos campos son: nombre: Nombre del equipo. id: Identifcador del equipo. Plantilla: Plantilla asociada al equipo y que contendrá a los jugadores del mismo, que tendrá almacenados en ella: nombre: Nombre de la plantilla. equipoId: Identifcador del equipo. id: Identifcador de la plantilla. Temporada: Temporada durante la que se juegan los partidos del equipo. Sus distintas columnas en la base de datos son: curso: Curso donde se disputa la temporada. categoría: Categoría disputada durante la temporada. numeroPartidos: Número de partidos que componen una temporada. equipoId: Identifcador del equipo. id: Identifcador de la temporada. Trabajo de Fin de Grado Alberto Pérez Garrido12 CAPÍTULO 3. DISEÑO Jugador: Jugador sobre el que se guardarán datos en cada partido que se distingue por: nombre: Nombre del jugador. posición: Posición en pista del jugador. dorsal: Dorsal en la camiseta del jugador. plantillaId: Identifcador de la plantilla. id: Identifcador personal del jugador. Partido: Clase que representa cada partido disputado por el equipo y que contiene estos atributos: fecha: Fecha del partido. jornada: Jornada de la temporada en la que se juega el partido. local: Atributo que determina si nuestro equipo es local o no. temporadaId: Identifcador de la temporada. id: Identifcador único del partido. DatosJugador: Tabla donde se guardarán los datos de cada jugador en los partidos que dispute, con las columnas de: fecha: Fecha del partido. goles: Goles durante el partido. pasesTotales: Pases que da el jugador durante el partido. pasesCompletados: Pases exitosos. pasesFallados: Pases fallados. perdidasTotales: Pérdidas de balón durante el partido. faltasCometidas: Faltas que comete el jugador. faltasRecibidas: Faltas que le realizan al jugador. tarjetasAmarillas: Tarjetas amarillas recibidas. tarjetasRojas: Tarjetas rojas recibidas. tirosAPuerta: Tiros entre los tres palos. tirosFuera: Disparos fuera de la portería. tiros: Tiros totales. recuperaciones: Recuperaciones de balón del jugador. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 13 CAPÍTULO 3. DISEÑO golesRival: Goles del rival mientras el jugador estaba en pista. partidoId: Identifcador del partido donde se recogen los datos. jugadorId: Identifcador del jugador al que le corresponden estos datos. id: Identifcador único de la entrada de datos de un jugador durante un partido concreto. DatosPartido: Tabla donde se guardarán los datos de cada partido del equipo, cuenta con los atributos: pasesTotales: Pases durante el partido. pasesCompletados: Pases exitosos. pasesFallados: Pases fallados. perdidasTotales: Pérdidas de balón durante el partido. faltasCometidas: Faltas que comete el equipo. faltasRecibidas: Faltas que le realizan al equipo. tarjetasAmarillas: Tarjetas amarillas recibidas. tarjetasRojas: Tarjetas rojas recibidas. tirosAPuerta: Tiros entre los tres palos. tirosFuera: Disparos fuera de la portería. tiros: Tiros totales. recuperaciones: Recuperaciones de balón del equipo. golesEquipo: Goles del equipo durante el partido. golesRival: Goles del rival. partidoId: Identifcador del partido donde se recogen los datos. temporadaId: Identifcador de la temporada. id: Identifcador único de la entrada de datos de un partido. 3.5. Diseño de las distintas pantallas Durante esta última sección del capítulo de diseño, se explicará en detalle cada una de las distintas pantallas de las que se compone la aplicación, junto con imágenes de las mismas y explicando cómo se llega a ellas para poder comprender la navegación entre ellas. Trabajo de Fin de Grado Alberto Pérez Garrido14 CAPÍTULO 3. DISEÑO 3.5.1. Pantalla principal Dependiendo de si es la primera vez que se usa la aplicación o no, la pantalla se mostrará de una forma u otra. Comenzaremos explicando la que se muestra la primera vez que se abre la aplicación: Si la aplicación consulta a la base de datos y ve que no hay un equipo registrado, la pantalla principal se mostrará como un único texto invitando al usuario a añadir un equipo, junto con un botón fotante que al ser pulsado llevará al usuario a la pantalla de registro de un equipo, de la que hablaremos a continuación. Figura 3.1: Pantalla inicial de FutsalControl la primera vez que se abre la aplicación. Sin embargo, si al abrir la aplicación ya hay un equipo añadido, la pantalla principal mostrará el nombre de la aplicación junto a dos botones, uno con el texto Partido, para navegar a la pantalla de creación de partido, y otro con el texto Estadísticas para visitar la pantalla de estadísticas. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 15 CAPÍTULO 3. DISEÑO Figura 3.2: Pantalla inicial de FutsalControl cuando se ha añadido un equipo. 3.5.2. Pantalla de registro de equipo Esta pantalla cuenta únicamente con un cuadro de texto para escribir un nombre para el equipo y un botón de guardado, que llevará al usuario a la pantalla de adición de jugadores a la plantilla. Como ya se ha dicho, esa pantalla permitirá añadir jugadores de forma inicial pero siempre se podrán añadir más en la pantalla de convocatoria. Figura 3.3: Pantalla para guardar el equipo. Trabajo de Fin de Grado Alberto Pérez Garrido16 CAPÍTULO 3. DISEÑO 3.5.3. Pantalla de adición de jugadores a la plantilla Esta pantalla inicialmente contará con un texto como el de la pantalla principal cuando no se tiene equipo invitando al usuario a añadir jugadores a la plantilla, junto con un botón fotante que llevará al usuario a la pantalla de registro de un jugador. Aún así, en el momento que el usuario añada un jugador, ese texto será sustituido por una vista recicladora con la lista de jugadores añadidos a la plantilla, para que se vea en todo momento los jugadores ya añadidos, mientras que el botón fotante se mantiene para poder seguir añadiéndolos. Por último, habrá un botón con el texto Guardar plantilla cuando el usuario decida que ha añadido todos los jugadores que quería. Figura 3.4: Pantalla de plantilla inicial sin jugadores. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 17 CAPÍTULO 3. DISEÑO Figura 3.5: Pantalla de plantilla inicial con jugadores. 3.5.4. Pantalla de registro de jugador La pantalla de registro de un jugador contendrá tres campos de texto, correspondientes al nombre, dorsal y posición del jugador. También habrá un botón de guardar que tendrá dos objetivos de navegación dependiendo de desde donde se haya accedido al fragmento, pudiendovolver tanto a la pantalla de adición de jugadores a la plantilla como a la pantalla de convocatoria. Figura 3.6: Pantalla que añade el jugador a la plantilla. Trabajo de Fin de Grado Alberto Pérez Garrido18 CAPÍTULO 3. DISEÑO 3.5.5. Pantalla de creación de partido Esta es la pantalla donde se registrará la información relativa a un partido con el objetivo de crearlo. Contendrá un texto con el nombre de la aplicación, tres campos de texto sobre los que escribir el nombre del rival, la jornada y la fecha del partido respectivamente, y una caja de selección para marcar al equipo del usuario como local en caso de lo sea, y si no es marcada el equipo será registrado como visitante. Por último habrá un botón para crear el partido, con el que se accederá a la pantalla de convocatoria. Figura 3.7: Pantalla de creación del partido. 3.5.6. Pantalla de convocatoria En este fragmento se mostrará una vista recicladora de todos los jugadores de los que se compone la plantilla, por muy numerosos que sean, junto con un botón fotante con el que se accederá a la pantalla de registro de jugador. Cuando en esa pantalla se añada un jugador se volverá a ésta y ese nuevo jugador será visible en la lista de jugadores disponibles. En esta pantalla el jugador podrá seleccionar jugadores pulsando sobre ellos, momento en que pasarán a ser de color verde indicando que están convocados, y pudiendo ver que debajo de la lista hay un mensaje de texto en el que se verán el número de convocados sobre los doce que pueden elegirse como máximo. Si el usuario se ha equivocado al marcar a un jugador, pulsándolo de nuevo de desconvocará y el contador de convocados también bajará. Una vez se haya terminado la convocatoria, si el usuario pulsa el botón de Iniciar partido se navegará a la pantalla de partido. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 19 CAPÍTULO 3. DISEÑO Figura 3.8: Pantalla de convocatoria. 3.5.7. Pantalla de partido Esta es la pantalla más importante de la aplicación, en la que el usuario encontrará una lista con los jugadores que ha decidido convocar en la pantalla de convocatoria, cada uno con una lista de botones con el nombre de su atributo asociado encima y con tres relojes que también tendrán una etiqueta marcándolos. Por debajo, habrá una línea con distintos botones y textos. El primero de esos botones es el reloj de partido, que será una cuenta atrás desde veinte y que podrá ser iniciado o parado en cualquier momento con el botón Iniciar/Parar. Cuando esté parado, aparecerá un botón al lado con el texto Segunda parte que volverá a poner el contador a 20, indicando que empiezan los segundos veinte minutos del partido tras el descanso. Después se encontrará el marcador del partido [8], que mostrará los goles del equipo en el lugar que se haya marcado al crear el partido seleccionando si el equipo del usuario era local o no. Junto al marcador habrá dos botones para añadir o quitar goles al equipo rival, ya que los goles del equipo del usuario se actualizarán al añadirle goles a cada jugador. Por último nos encontramos con los botones de Estadísticas, con el que accederemos a la pantalla de estadísticas, y Finalizar partido para terminar el partido, pudiendo hacerlo en cualquier momento independientemente de que el reloj haya llegado a cero. Para poder registrar datos de un jugador, habrá que marcar al jugador como que está en pista, acción que se realiza pulsando sobre él. Esto hará que se marque cambiando su color e iniciando sus relojes de partido, pudiendo ya pulsar los botones que actualizan sus datos. Sólo podrá haber a la vez cinco jugadores marcados como que están en pista, por lo que si pulsamos sobre otro jugador cuando ya hay cinco no lo marcará como que está jugando. Para que esto ocurra tendremos primero que pulsar sobre uno de los jugadores que está en pista para sacarlo y que se inicie su reloj de Tiempo en el banquillo para después pulsar sobre el jugador que queríamos sacar a pista y que se realice el cambio. Trabajo de Fin de Grado Alberto Pérez Garrido20 CAPÍTULO 3. DISEÑO Figura 3.9: Pantalla de partido por defecto. Figura 3.10: Pantalla de partido hacia la derecha para mostrar relojes. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 21 CAPÍTULO 3. DISEÑO Figura 3.11: Pantalla de partido con datos. Figura 3.12: Relojes de partido con tiempo. Trabajo de Fin de Grado Alberto Pérez Garrido22 CAPÍTULO 3. DISEÑO 3.5.8. Pantalla de estadísticas Nada más acceder a esta pantalla se verán dos selectores, uno con nombres de jugadores y otro con atributos de esos jugadores, junto con un botón Generar gráfco y otro Volver, este último pudiendo volver a la pantalla de partido o a la pantalla principal dependiendo de desde dónde se haya llegado a esta pantalla. Si el usuario ha seleccionado un jugador y un atributo, al pulsar Generar gráfco aparecerá en la pantalla un gráfco de tarta comparando el atributo seleccionado de ese jugador con el total del equipo. Sin embargo, si selecciona como jugador Todos se mostrará un gráfco de barras que comparará el atributo seleccionado de todos los jugadores del partido, incluyendo el total del equipo. Si no se selecciona una de las dos opciones, por defecto se cogerá la primera de la lista de opciones disponibles. Figura 3.13: Pantalla de estadísticas con gráfco de equipo. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 23 CAPÍTULO 3. DISEÑO Figura 3.14: Pantalla de estadísticas con gráfco de jugador. Trabajo de Fin de Grado Alberto Pérez Garrido24 4 Desarrollo Durante este apartado se detallará tanto las distintas bibliotecas y tecnologías de las que hace uso la aplicación como el desarrollo concreto de los distintos sistemas de la aplicación. Como información general, ha sido desarrollada mediante el lenguaje Kotlin debido a que es el que Google recomienda para sus aplicaciones y que es un lenguaje que reduce signifcativamente las líneas de código en comparación con Java, el lenguaje más popular a la hora de desarrollar aplicaciones para este sistema operativo. Para los fcheros de diseño se ha utilizado XML. 4.1. Bibliotecas y tecnologías utilizadas En esta primera sección se describen las distintas bibliotecas que se han utilizado para mejorar el funcionamiento de la aplicación, así como otras tecnologías incluidas con el mismo propósito. 4.1.1. Biblioteca Navigation La biblioteca Navigation [6] [10] proporciona una forma elegante y sencilla de navegación en- tre fragmentos [9]. La aplicación está construida con una única actividad, que va intercambiando los distintos fragmentos que se corresponden con cada pantalla. Para esto se ha utilizado naviga- tion, ya que con añadir en cada fchero XML de diseño de un fragmento la etiqueta <layout> crea una entrada en el fragmento navigation.xml, en el que se pueden ir conectando estas entradas de fragmentos creando acciones entre ellas, como se ve en la fgura 4.1. Una vez tenemos creadas en ese mapa de navegación las acciones, únicamente tenemos que referenciarlas de la siguiente forma para poder realizar transiciones entre fragmentos: 1 view.findNavController ().navigate(R.id . action_mainPageFragment_to_gameFragment) Código que podremos colocar en cualquier función setOnClickListener de un botón. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 25 https://view.findNavController().navigate(R.id CAPÍTULO 4. DESARROLLO Figura 4.1: Mapa de navegación de FutsalControl. Trabajo de Fin de Grado Alberto Pérez Garrido26 CAPÍTULO 4. DESARROLLO 4.1.2. Biblioteca DataBinding La biblioteca DataBinding [5] permite sustituir la función fndViewById() para ir encontran- do cada elemento declarado en un fchero de diseño por una única variable binding. Al igual que con la biblioteca Navigation se puede usar al envolver el fchero de diseño en una etiqueta <layout>, pudiendo entonces declararse de la siguienteforma: 1 val binding = DataBindingUtil .inflate <FragmentMainBinding >(inflater , R.layout. ,→ fragment_main ,container ,false) Una vez tenemos la variable binding declarada, si por ejemplo tuviéramos un cuadro de texto llamado nombre, podríamos acceder a él únicamente usando binding.nombre. De esta forma, se consigue mantener un código más reducido y limpio y en el que todas las variables de diseño se encuentran centralizadas a partir de una sola, en vez de tener que declarar una por cada elemento distinto como se tenía que hacer antes. 4.1.3. Tecnologías Otras tecnologías utilizadas durante el desarrollo de la aplicación son la ya mencionada biblioteca Room, el uso de datos LiveData y la biblioteca MPAndroidChart [1] [2] para la generación de gráfcos, cuya página se encuentra en las referencias de este mismo documento. Para el control de versiones se ha utilizado Git, con un proyecto alojado en GitHub ya que Android Studio permite la integración con este sitio web. 4.2. Desarrollo de los sistemas La estructura general del proyecto esta dividido entre dos carpetas, el paquete futsalcontroltfg que contiene todos los fcheros de código kotlin y la carpeta res que contiene los fcheros de diseño XML. Dentro del paquete de kotlin se distingue entre distintas carpetas, como son: Clases: Clases Kotlin que son entidades de la base de datos. Database: Ficheros DAO y Database ya mencionados en el apartado de la biblioteca Room. Fragmentos y actividades: Todos los fragmentos y la actividad de la aplicación. 4.2.1. Sistema de equipos El sistema de equipos se encarga de añadir un equipo a la base de datos y controlar la plantilla, y aunque se pueda añadir jugadores desde el sistema de partidos, clasifcaremos ese fragmento como de este sistema. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 27 CAPÍTULO 4. DESARROLLO Los fcheros que componen este sistema son MainFragment.kt, ya que cuando no hay un equipo será desde este fragmento desde donde iremos a añadirlo, NewTeamFragment.kt para poder añadir el equipo, NewRosterFragment.kt para mostrar los jugadores que ya hemos añadido a la plantilla y acceder al fragmento que añade más, y por último NewPlayerFragment.kt para añadir un jugador nuevo a la plantilla. El elemento más destacable de estos cuatro fcheros es el uso de una lista recicladora de jugadores en NewRosterFragment.kt para mostrar los jugadores de la plantilla, debido a que los otros fcheros son muy simples gracias a que hacen uso de DataBinding para acceder a sus recursos gráfcos y Navigation para trasladarse entre ellos. 4.2.2. Sistema de partidos Este sistema, como ya se ha dicho en otros capítulos, es el más importante de la aplicación. Está compuesto por tan sólo tres fcheros: CreateGameFragment.kt para poder crear cada par- tido que vaya a disputar el equipo, PlayerListFragment.kt para seleccionar la convocatoria que jugará el partido y GameFragment.kt para controlar todos los aspectos del mismo. Como en el sistema de equipos, se siguen usando vistas recicladoras para las listas de jugadores, con especial complejidad en la vista recicladora de GameFragment.kt, ya que el elemento que se recicla (el jugador) tiene muchos botones para los atributos del partido y los relojes. Como en todas las vistas recicladoras, es necesario crear un adapter y un holder para cada elemento, y es en la función bind() de este último donde se realiza toda la lógica de los botones de cada jugador, como por ejemplo éste extracto de código de dicha función en el que se cubre la funcionalidad del botón que añade goles a un jugador y al partido: 1 goal_button. setOnClickListener { 2 if(this.jugador.enPista && tarjetas < 2) { 3 this.jugador.marcaGol () 4 goal_button.text = this.jugador.goles.toString () 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ,→ ,→ ,→ ,→ ,→ ,→ shotOnGoal_button . text = this . jugador . tirosAPuerta . toString () partido . golesEquipo () if ( partido . local ) { marcador . golMarcado (" local ") localGoals . text = marcador . golesLocal . toString () futsalControlViewModel . golesLocales = marcador . golesLocal } else { marcador . golMarcado (" visitante ") visitantGoals . text = marcador . golesVisitante . toString () futsalControlViewModel . golesVisitantes = marcador . golesVisitante } executor . execute { database ?. futsalControlDao () ?. updatePlayerDataGoals ( this . jugador . goles , partido .id , this . jugador . id ) database ?. futsalControlDao () ?. updateGameDataGoals ( partido . golesEquipo , partido . id ) database ?. futsalControlDao () ?. updatePlayerShotsOnGoal ( this . jugador . tirosAPuerta , partido .id , this . jugador . id ) database ?. futsalControlDao () ?. updateGameShotsOnGoal ( partido . tirosAPuerta , partido . id ) database ?. futsalControlDao () ?. updatePlayerShots ( this . jugador . tiros , partido .id , this . jugador . id ) database ?. futsalControlDao () ?. updateGameShots ( partido . tiros , partido . id ) }}} 28 Trabajo de Fin de Grado Alberto Pérez Garrido https://GameFragment.kt https://GameFragment.kt https://PlayerListFragment.kt https://CreateGameFragment.kt https://NewRosterFragment.kt https://NewPlayerFragment.kt https://NewRosterFragment.kt https://NewTeamFragment.kt https://MainFragment.kt CAPÍTULO 4. DESARROLLO Donde como se puede ver se actualiza el texto del botón para que muestre el valor actualizado, se registra el cambio en el marcador global y mediante un ejecutor se realizan los update necesarios en la base de datos de forma muy rápida. El código de la mayoría de botones es muy similar a este, pero sin actualizar tantos atributos con un solo cambio. 4.2.3. Sistema de estadísticas El tercer y último sistema es el de estadísticas, en el que únicamente se encuentra el fchero StatisticsFragment.kt. En este fchero se hace uso de la biblioteca MPAndroidChart para la ge- neración de gráfcos. Por ejemplo, si quisiéramos pintar en pantalla un gráfco de tarta con solo dos valores con esta librería, necesitaríamos un código como el siguiente: 1 val entries = mutableListOf <PieEntry >() 2 val data = arrayListOf <Float >(0F, 0F) 3 data [0] = 1F 4 data [1] = 2F 5 entries.add(PieEntry(data[0], "Jugador ")) 6 entries.add(PieEntry(data[1], "Equipo ")) 7 8 val set = PieDataSet(entries , atributo) 9 binding.pieChart.data = PieData(set) 10 11 val colorFirst = context ?.let { ContextCompat .getColor(it , R.color. colorPrimary) ,→ } 12 val colorSecond = context ?.let { ContextCompat.getColor(it, R.color. colorAccent) ,→ } 13 14 set.colors = mutableListOf(colorFirst , colorSecond) Y de forma muy simple se consigue un gráfco. Para nuestra aplicación, los valores de data vienen dados por dos selectores que eligen entre el jugador y el atributo que se quiere poner en el gráfco, pero la funcionalidad más signifcativa de este fchero es la de crear gráfcos con una librería externa. Para incluir esta librería en nuestro proyecto, lo único que debemos hacer es incluir el si- guiente código en nuestro build.gradle: 1 repositories { 2 maven { url ’https :// jitpack.io ’ } 3 } 4 5 dependencies { 6 implementation ’com.github.PhilJay:MPAndroidChart:v3.1.0 ’ 7 } Y ya podremos ejecutar código como el que hemos puesto de ejemplo. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 29 https://jitpack.io https://StatisticsFragment.kt 5 Pruebas y resultados Una vez se completó el desarrollo de la aplicación se procede a realizar las distintas pruebas que comprueban su correcto funcionamiento, y si cumple con los requisitos especifcados en el apartado de diseño. En este documento se ha dividido entre pruebas de caja negra, pruebas de caja blanca y pruebas de validación. 5.1. Pruebas de caja negra Las pruebas de caja negra suponen probar el software sin tener en cuenta la lógica interna del producto, lo que supone comprobar si el funcionamientogeneral de la aplicación es bueno y se corresponde con lo que inicialmente se propuso. Estas pruebas se han ido realizando durante todo el desarrollo, no solo cuando el producto estaba terminado, de forma que cada vez que había una funcionalidad nueva se comprobaba su éxito para corregir los errores de forma rápida si los hubiera. Como prueba general de caja negra, se utilizó la aplicación para almacenar los datos en tiempo real de un partido grabado. Esta prueba se realizó en numerosas ocasiones durante el desarrollo, ya que en las primeras pruebas se descubrieron errores o funcionalidades que se podrían incluir. Estos errores fueron corregidos y probados en la siguiente prueba, y así de forma sucesiva hasta el estado fnal de la aplicación. 5.2. Pruebas de caja blanca Estas pruebas sí que tienen en cuenta la lógica interna de la aplicación, y han sido realizadas para cada uno de los fragmentos de forma exhaustiva cada vez que se desarrollaba alguno, de forma que sólo se pasaba al siguiente fragmento a desarrollar si el último pasaba todas las pruebas a las que se le sometía. De esta forma, se podían localizar los errores más fácilmente que si se dejaran todos por arreglar una vez el producto estuviera terminado. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 31 CAPÍTULO 5. PRUEBAS Y RESULTADOS La realización de las pruebas de caja blanca ha sido posible gracias a que Android Studio permite probar actividades y fragmentos en solitario, sin el conjunto de la aplicación. De esta forma, se podía comprobar cada fragmento nuevo de forma individual, exceptuando las pruebas de navegación en las que sí era necesario probar toda la aplicación. 5.3. Pruebas de validación Por último, las pruebas de validación consisten en comprobar si se han cumplido los requisitos propuestos, tanto los funcionales como los no funcionales. Estas pruebas debían darse en un partido en directo, pero debido a la situación sanitaria se han realizado de la misma forma que las de caja negra, mediante grabaciones de partidos. Tras la realización de estas pruebas, se puede asegurar que FutsalControl cumple con todos los requisitos que se diseñaron, de forma que el desarrollo se puede considerar exitoso, ya que el resultado fnal satisface al público para el que fue creada la aplicación. 5.4. Resultados Como resultado del trabajo de fn de grado desarrollado se ha obtenido la aplicación FutsalControl. Esta aplicación puede instalarse en tabletas con una versión de Android válida mediante un fchero APK generado por Android Studio, debido a que de momento no estará disponible en la tienda de aplicaciones de Google. Como ya se ha explicado en las pruebas, el resultado fnal del TFG es un producto satisfactorio, que cumple con la motivación que llevó a realizar el proyecto y que se espera que sea utilizado por distintos entrenadores para ayudarles en su trabajo. Trabajo de Fin de Grado Alberto Pérez Garrido32 6 Conclusiones y trabajo futuro Para terminar el documento, en este capítulo se resumirán las conclusiones a las que se ha llegado después del desarrollo del trabajo de fn de grado y del posible trabajo futuro que podría seguir el desarrollo de FutsalControl para mejorar el producto. 6.1. Conclusiones Como se explicó en el apartado de motivación de este documento, esta aplicación pretendía ser una ayuda simple pero efcaz para los entrenadores de fútbol sala, de forma que pudieran mejorar el rendimiento de sus equipos. Durante el desarrollo de la aplicación esa funcionalidad ha sido cubierta, incluso añadiendo alguna funcionalidad no planeada inicialmente y obteniendo muchas ideas que podrían mejorar la aplicación en un futuro. El resultado fnal cumple con las expectativas, debido a que su diseño es simple pero muy intuitivo a la hora de usarlo. Se pueden manejar distintos datos tanto de jugadores como de equipos para luego poder visualizar gráfcos que comparan esos datos, y refejar así la incidencia que tienen ciertos jugadores sobre el partido. De la misma forma, el entrenador puede durante un partido controlar los esfuerzos de sus jugadores mediante los relojes de partido personales de cada jugador, algo que desde el primer momento se consideró de mucha importancia para el éxito de la aplicación. Por estos motivos, el resultado fnal es una aplicación que cumple su propósito y podrá ayudar a muchos profesionales de este deporte. 6.2. Trabajo futuro Por la naturaleza de la aplicación desarrollada, aún hay unos cuantos factores que pueden mejorar la aplicación. Una de las mejoras podría ser la posibilidad de imprimir los gráfcos cuando Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 33 CAPÍTULO 6. CONCLUSIONES Y TRABAJO FUTURO se generan, para tener varios en papel y que no dependan de un dispositivo electrónico. Otra posible mejora sería la posibilidad de manejar distintos equipos a la vez dentro de un mismo dispositivo, de forma que clubes enteros puedan manejar sus distintos equipos desde el mismo lugar. El fútbol sala es un deporte muy parecido al baloncesto o al balonmano, por lo que con pocos cambios el código de FutsalControl podría ser extensible para hacer aplicaciones de otros deportes, como esos dos ya mencionados, o incluso una única aplicación en la que seleccionar el deporte y que se adapte a esa elección. Por último, en el apartado de estado del arte se mencionó BasketTouch, un conjunto de aplicación móvil y web con mucha más profundidad que FutsalControl pero con la misma base, por lo que el desarrollo de esta aplicación debería ponerse como objetivo futuro llegar a ser igual de profunda y contar con un servicio web que complemente a la aplicación móvil. Trabajo de Fin de Grado Alberto Pérez Garrido34 Bibliografía [1] Philipp Jahoda (2014). Mpandroidchart [online]. Avaliable: https://github.com/PhilJay/ MPAndroidChart. [2] Ashra˙ Hathibelagal (2015). Add charts to your android app using mpan- droidchart [online]. Avaliable: https://code.tutsplus.com/tutorials/ add-charts-to-your-android-app-using-mpandroidchart--cms-23335. [3] Android Developers (2020). Biblioteca de persistencias room [online]. Avaliable: https: //developer.android.com/topic/libraries/architecture/room. [4] Android developers. Android jetpack [online]. Avaliable: https://developer.android. com/jetpack. [5] Android developers (2019). Databinding [online]. Avaliable: https://developer.android. com/jetpack/androidx/releases/databinding. [6] Android developers (2019). Navigation [online]. Avaliable: https://developer.android. com/guide/navigation. [7] Android developers (2020). Android room with a view [online]. Avaliable: https: //developer.android.com/codelabs/android-room-with-a-view-kotlin#0. [8] Android developers (2020). Complex lifecycle situations [online]. Avaliable: https:// developer.android.com/codelabs/kotlin-android-training-complex-lifecycle#0. [9] Android developers (2020). Create a fragment [online]. Avaliable: https://developer. android.com/codelabs/kotlin-android-training-create-and-add-fragment#0. [10] Android developers (2020). Defne navigation paths [online]. Avaliable: https:// developer.android.com/codelabs/kotlin-android-training-add-navigation#0. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 35 https://github.com/PhilJay/MPAndroidChart https://github.com/PhilJay/MPAndroidChart https://code.tutsplus.com/tutorials/add-charts-to-your-android-app-using-mpandroidchart--cms-23335 https://code.tutsplus.com/tutorials/add-charts-to-your-android-app-using-mpandroidchart--cms-23335 https://developer.android.com/topic/libraries/architecture/room https://developer.android.com/topic/libraries/architecture/room https://developer.android.com/jetpack https://developer.android.com/jetpack https://developer.android.com/jetpack/androidx/releases/databinding https://developer.android.com/jetpack/androidx/releases/databinding https://developer.android.com/guide/navigationhttps://developer.android.com/guide/navigation https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0 https://developer.android.com/codelabs/android-room-with-a-view-kotlin#0 https://developer.android.com/codelabs/kotlin-android-training-complex-lifecycle#0 https://developer.android.com/codelabs/kotlin-android-training-complex-lifecycle#0 https://developer.android.com/codelabs/kotlin-android-training-create-and-add-fragment#0 https://developer.android.com/codelabs/kotlin-android-training-create-and-add-fragment#0 https://developer.android.com/codelabs/kotlin-android-training-add-navigation#0 https://developer.android.com/codelabs/kotlin-android-training-add-navigation#0 Apéndices Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 37 A Manual del usuario En este apéndice A se va a mostrar un manual de usuario que cubrirá el primer uso de la aplicación para un usuario, cuando inicia la aplicación sin tener un equipo añadido. Al entrar en la aplicación lo primero que se verá será una pantalla con un texto invitando al usuario a añadir un equipo y un botón fotante con el símbolo +. Figura A.1: Pantalla inicial sin equipo. Al pulsar en ese botón, el usuario accederá a la pantalla de creación de un equipo, donde deberá indicar un nombre y pulsar el botón de guardado para acceder entonces a la página de adición de jugadores a la plantilla. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 39 APÉNDICE A. MANUAL DEL USUARIO Figura A.2: Pantalla de ejemplo al añadir equipo. Nada más acceder, al no haber aún jugadores, se mostrará un texto invitando al usuario a añadir jugadores a la plantilla mediante el botón fotante. Figura A.3: Pantalla de plantilla inicial sin añadir jugadores. Al hacerlo, se accederá a la pantalla de creación de un jugador, donde se tendrá que indicar su nombre, dorsal y posición. Una vez añadido, se volverá a la pantalla anterior, pero esta vez en lugar del mensaje se verá una lista de los jugadores añadidos a la plantilla. El usuario podrá realizar este proceso tantas veces como quiera. Trabajo de Fin de Grado Alberto Pérez Garrido40 APÉNDICE A. MANUAL DEL USUARIO Figura A.4: Pantalla de ejemplo de añadir jugador. Figura A.5: Pantalla de plantilla inicial una vez añadidos varios jugadores. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 41 APÉNDICE A. MANUAL DEL USUARIO Cuando se decida a pulsar el botón de Guardar plantilla, se volverá a la pantalla principal, esta vez con los botones de Partido y Estadísticas. Como es la primera vez usando la aplicación y no hay partidos registrados, procedemos a pulsar el de partido. Figura A.6: Pantalla inicial cuando se ha añadido un equipo. La siguiente pantalla que verá el usuario es la de creación de partido, donde podrá introducir el nombre del equipo rival, la fecha y la jornada del partido. También podrá marcar si su equipo juega como local o no. Cuando pulse el botón de creación de partido, se procederá a la pantalla de convocatoria. Trabajo de Fin de Grado Alberto Pérez Garrido42 APÉNDICE A. MANUAL DEL USUARIO Figura A.7: Pantalla de crear partido. En esta pantalla el jugador verá una lista con los jugadores que contiene su plantilla, pudiendo realizar el mismo proceso de añadir jugador que ya ha realizado anteriormente con el botón fotante. Para convocar jugadores deberá pulsar sobre los que quiera convocar, cambiando entonces el color de ese jugador y actualizándose el contador sobre los doce que se pueden seleccionar como máximo. Para desconvocar un jugador bastará con pulsar sobre él otra vez. Cuando se pulse el botón de jugar partido, se pasará a la pantalla de partido. Figura A.8: Pantalla de convocatoria. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 43 APÉNDICE A. MANUAL DEL USUARIO En la pantalla de partido, el usuario verá una lista con los jugadores que ha decidido convocar en la pantalla de convocatoria, cada uno con una lista de botones de distintos atributos y con tres relojes. Debajo de esa lista encontrará el reloj de partido, que podrá ser iniciado o parado en cualquier momento con el botón Iniciar/Parar, y cuando esté parado, aparecerá un botón al lado con el texto Segunda parte para indicar que empiezan los segundos veinte minutos del partido tras el descanso. Después se encontrará el marcador del partido, que mostrará los goles del equipo y del rival junto con dos botones para añadir o quitar goles al equipo rival. Por último nos encontramos con los botones de Estadísticas, con el que accederemos a la pantalla de estadísticas, y Finalizar partido para terminar el partido. Para que el jugador pueda registrar datos deberá pulsar sobre él y cambiará su color siempre y cuando no haya ya cinco jugadores en pista, en cuyo caso deberá pulsar sobre uno que esté jugando y sacarlo para realizar el cambio. Figura A.9: Pantalla de partido. Si el usuario pulsa en fnalizar partido volverá a la pantalla inicial, pero si pulsa sobre estadísticas accederá a la pantalla de estadísticas. Nada más entrar, el jugador verá tan sólo dos selectores con un botón de generar gráfco y otro para volver. En el primer selector podrá seleccionar qué jugador quiere ver, y en el segundo qué atributo. Una vez seleccionados, si pulsa el botón para generar el gráfco aparecerá el gráfco deseado. Trabajo de Fin de Grado Alberto Pérez Garrido44 APÉNDICE A. MANUAL DEL USUARIO Figura A.10: Pantalla de estadísticas. Aplicación Android de monitorización y generación de datos estadísticos en fútbol sala 45 Índice de figuras Introducción Motivación Objetivos Estructura del documento Estado del Arte Futsal Stats Mis Estadísticas de Fútbol Basketouch Analytics Diseño Sistemas Sistema de equipos Subsistema de plantilla Sistema de partidos Subsistema de creación de partido Subsistema de convocatoria Subsistema de partido Sistema de estadísticas Subsistema de generación de estadísticas Subsistema de visualización de estadísticas Requisitos funcionales Sistema de equipos Subsistema de plantilla Sistema de partidos Subsistema de creación de partido Subsistema de convocatoria Subsistema de partido Sistema de estadísticas Subsistema de generación de estadísticas Subsistema de visualización de estadísticas Requisitos no funcionales Base de datos Biblioteca de persistencias Room Diseño de la base de datos Diseño de las distintas pantallas Pantalla principal Pantalla de registro de equipo Pantalla de adición de jugadores a la plantilla Pantalla de registro de jugador Pantalla de creación de partido Pantalla de convocatoria Pantalla de partido Pantalla de estadísticas Desarrollo Bibliotecas y tecnologías utilizadas Biblioteca Navigation Biblioteca DataBinding Tecnologías Desarrollo de los sistemas Sistema de equipos Sistema de partidos Sistema de estadísticas Pruebas y resultados Pruebas de caja negra Pruebas de caja blanca Pruebas de validación Resultados Conclusiones y trabajo futuro Conclusiones Trabajo futuro Bibliografía Apéndices Manual del usuario
Compartir