1 00:00:01,139 --> 00:00:07,480 Muy buenas, mi nombre es Franklin Oliveros y junto a mi compañero Oscar Jiménez Martínez 2 00:00:07,480 --> 00:00:14,140 vamos a presentar nuestro TFG, que en nuestro caso consiste en una aplicación Android 3 00:00:14,720 --> 00:00:17,800 enfocada a la gestión de hábitos saludables. 4 00:00:18,820 --> 00:00:26,460 La idea principal en esta aplicación es ayudar al usuario a registrar una rutina diaria, 5 00:00:26,460 --> 00:00:29,820 registrar hábitos y medir su progreso 6 00:00:29,820 --> 00:00:33,520 y además relacionar este progreso con su estado de ánimo 7 00:00:33,520 --> 00:00:37,399 para así intentar darle una motivación extra al usuario 8 00:00:37,399 --> 00:00:41,579 en este caso la app nace porque hoy en día 9 00:00:41,579 --> 00:00:44,759 muchas personas quieren mejorar sus hábitos 10 00:00:44,759 --> 00:00:49,340 pero les cuesta mucho mantenerle esa constancia, esa rutina 11 00:00:49,340 --> 00:00:52,939 por lo cual nosotros estamos intentando buscar una solución 12 00:00:52,939 --> 00:00:56,340 más sencilla, más visual y motivadora 13 00:00:56,340 --> 00:01:07,760 para que no solo le permita registrar estos hábitos que quiere llevar a cabo, sino que también pueda generar un seguimiento con estadísticas y una cierta gamificación 14 00:01:07,760 --> 00:01:13,200 para mantener a este usuario motivado y sobre todo usando nuestra aplicación. 15 00:01:14,379 --> 00:01:23,819 El objetivo es una aplicación moderna en Android que integre la autenticación, la gestión de hábitos y registro emocional, 16 00:01:23,819 --> 00:01:28,819 así como también un ranking de progreso y un mapa interactivo. 17 00:01:30,400 --> 00:01:36,180 Además se buscó ampliar tecnologías que ya conocíamos como JPEG Compose, 18 00:01:36,519 --> 00:01:45,099 también se usó Hilt Retrofit para la navegación y para el almacenamiento de datos en remoto usamos Supabase. 19 00:01:45,599 --> 00:01:53,120 Lo decidimos así para tenerla bien estructurada y para prepararla para su crecimiento en caso de que se continúe. 20 00:01:53,819 --> 00:02:17,000 Un poco en resumen, pues el propósito básico fue convertir el seguimiento de estos hábitos saludables en algo más fácil y visual y sobre todo más constante para el usuario, para que así de esta forma se sienta gusto al usar la aplicación y le sea más fácil a él mantener esta rutina. 21 00:02:17,000 --> 00:02:26,650 Muy bien, ahora les voy a hablar un poco sobre las tecnologías y las herramientas que utilizamos en nuestro proyecto 22 00:02:26,650 --> 00:02:32,030 Este proyecto está hecho básicamente en Kotlin para Android 23 00:02:32,030 --> 00:02:36,449 Y para el desarrollo de las interfaces utilizamos JEPA Compose 24 00:02:36,449 --> 00:02:45,150 Esto nos permitió construir las pantallas de una forma más limpia y sencilla en comparación con los XML tradicionales 25 00:02:45,150 --> 00:02:56,150 Y para la navegación entre estas pantallas utilizamos Navigation Compose, lo que hace una navegación más segura y más ordenada. 26 00:02:56,909 --> 00:03:09,150 En la parte de la arquitectura utilizamos un modelo ModelViewViewModel apoyado en StateFlow para separar la lógica de la presentación de la interfaz. 27 00:03:10,069 --> 00:03:26,610 También usamos Heal para la inyección de dependencias y que de esta forma sea un poco más fácil construir los repositorios, las apples y los view models de forma separada para no acumular demasiado código en el mismo sitio. 28 00:03:27,490 --> 00:03:41,789 Para la comunicación con el backend utilizamos Retrofit y como nuestro backend remoto también utilizamos Supabase para la base de datos que se conecta mediante su API REST. 29 00:03:42,990 --> 00:03:56,270 En la parte del mapa se integró OSM Droid y para la localización necesaria para que este mapa te marque dónde estás exactamente utilizamos la ubicación de Google Play Services. 30 00:03:56,610 --> 00:04:10,590 Además, para el tema visual de las interfaces, el proyecto usa material 3 y también usa corrutinas de Java, ya que trabajamos con fechas locales. 31 00:04:12,939 --> 00:04:18,899 Perfecto, ahora vamos a pasar con las actividades realizadas en este proyecto. 32 00:04:20,860 --> 00:04:26,899 Durante el desarrollo de nuestra aplicación, pasamos por varias actividades principales. 33 00:04:26,899 --> 00:04:39,899 Primero, empezamos definiendo una estructura general de nuestro proyecto, como nuestra pantalla de login, que fue con la primera con la que empezamos trabajando. 34 00:04:39,899 --> 00:04:47,899 Que el usuario se pueda no solo loggear si ya dispone de un usuario, sino también registrarse como un usuario nuevo. 35 00:04:47,899 --> 00:04:56,480 nuevo. También empezamos definiendo las funcionalidades básicas como el inicio de sesión 36 00:04:56,480 --> 00:05:04,319 que ya comenté, también la creación de hábitos que es lo básico de la aplicación, el sistema de 37 00:05:04,319 --> 00:05:13,040 ánimo hacia el usuario, el sistema de progreso importante con tema de gamificación para mantener 38 00:05:13,040 --> 00:05:20,220 al usuario enganchado un poco también que pueda ver el progreso de los demás usuarios y también 39 00:05:20,220 --> 00:05:27,920 el mapa que fue una tecnología que no conocíamos y que nos tocó pues implementar por nuestra propia 40 00:05:27,920 --> 00:05:37,759 cuenta después implementamos un sistema de autenticación tenemos una pantalla como ya 41 00:05:37,759 --> 00:05:45,079 le comenté de login y de registro con una validación de correo y contraseña y una confirmación 42 00:05:45,079 --> 00:05:52,980 de la misma contraseña. Y una vez el usuario ya se haya logueado o identificado, pues se 43 00:05:52,980 --> 00:06:01,269 guarda su identificador en un sesión manual. Luego también implementamos la gestión de 44 00:06:01,970 --> 00:06:07,589 los hábitos, que realmente esta es la parte importante, la más core de nuestra aplicación, 45 00:06:07,589 --> 00:06:19,589 ya que de esto se trata. Integramos la creación de hábitos básicos, poder cargarlos por fecha para que el usuario los tenga ordenados, 46 00:06:19,810 --> 00:06:29,110 también marcarlos como completados, eliminar los hábitos creados y consultar hábitos que quedan pendientes de días anteriores. 47 00:06:29,110 --> 00:06:36,069 También se añadió el tema del registro del estado de ánimo 48 00:06:36,069 --> 00:06:42,550 Donde el usuario puede seleccionar entre varias opciones y así ver su resumen acumulado 49 00:06:42,550 --> 00:06:51,990 Y otra parte bastante importante del progreso fue el tema de la lista de los usuarios 50 00:06:51,990 --> 00:06:56,410 Donde se obtienen los puntos y se genera un ranking visual 51 00:06:56,410 --> 00:07:00,829 digo que esto es importante porque este es el sistema de gamificación 52 00:07:00,829 --> 00:07:03,750 y como ya había comentado anteriormente 53 00:07:03,750 --> 00:07:11,089 uno de nuestros objetivos principales era hacer que el usuario se sienta enganchado a la aplicación 54 00:07:11,089 --> 00:07:16,810 de esta forma creo que logramos conseguir que el usuario se sienta un poco más motivado 55 00:07:16,810 --> 00:07:20,990 al ver una lista de personas, compararse un poco con ellos 56 00:07:20,990 --> 00:07:25,670 y así generar ese sistema de competitividad entre los usuarios 57 00:07:25,670 --> 00:07:32,350 Esto nos puede llevar a que el uso de la aplicación sea más intenso y esto siempre es conveniente. 58 00:07:33,250 --> 00:07:43,069 Y otra parte importante fue el tema del mapa, ya que es una tecnología que no habíamos usado anteriormente. 59 00:07:43,350 --> 00:07:49,670 Es una de las partes más técnicas del proyecto, ya que combinamos el tema de los permisos de ubicación, 60 00:07:49,670 --> 00:07:56,750 ubicación, que los utilizamos con Google Play Services y geolocalización en tiempo real con 61 00:07:56,750 --> 00:08:06,529 OpenStreetMap y así asociamos estos puntos con el tema de los hábitos. Mientras trabajamos en 62 00:08:06,529 --> 00:08:18,829 la aplicación los mayores problemas que encontramos fue al principio en la parte del mapa ya que no 63 00:08:21,240 --> 00:08:28,660 ponía un punto que eran las oficinas de google y no nos ponía el lugar donde estábamos 64 00:08:29,560 --> 00:08:39,059 y eso lo pudimos arreglar añadiendo la librería de google play service que es una ventanita que 65 00:08:39,059 --> 00:08:44,820 te sale aquí al principio al usar el mapa pidiendo de los permisos de localización de la aplicación 66 00:08:44,820 --> 00:09:05,659 Una vez dado esto, ya en la parte de la pantalla del mapa, en esta parte de aquí, nos pedirá los permisos de ubicación. 67 00:09:05,659 --> 00:09:20,019 Si se lo hemos dado procederá a esta parte del método en la que cogerá tanto la latitud como la longitud para grabarla en el WeState en estos dos de aquí. 68 00:09:20,820 --> 00:09:24,539 Y una vez con esto ya se pudo poder hacer esto de aquí. 69 00:09:24,539 --> 00:09:45,320 El otro problema que se encontró, que fue muy común, era en el momento de hacer distintas, por ejemplo, crear un hábito, borrarlo, cambiarle el estado para todo, 70 00:09:45,320 --> 00:09:59,600 tanto por aquí se puede ver, tanto como en crear, esto es la parte de crear un usuario, al registrarse nos daba problemas 71 00:09:59,600 --> 00:10:07,600 y al principio no sabíamos muy bien por qué era, porque teníamos un mensaje que era este de aquí, que era solo al registrarse 72 00:10:07,600 --> 00:10:10,940 Y no sabíamos muy bien cuál era el porqué 73 00:10:10,940 --> 00:10:13,320 Si nos vamos aquí a hábitos 74 00:10:13,320 --> 00:10:15,200 También nos pasa 75 00:10:15,200 --> 00:10:17,480 Esto es al cargar los hábitos 76 00:10:17,480 --> 00:10:20,399 Los completados y los pendientes 77 00:10:20,399 --> 00:10:22,179 También nos pasaba 78 00:10:22,179 --> 00:10:25,960 Luego nos dimos cuenta 79 00:10:25,960 --> 00:10:29,519 Esto es la parte de marcar como completado 80 00:10:29,519 --> 00:10:32,059 Que es esto de aquí 81 00:10:32,059 --> 00:10:33,879 Deslizar a la derecha 82 00:10:33,879 --> 00:10:37,460 Y nos dimos cuenta al final 83 00:10:37,460 --> 00:10:39,659 que en home no hay 84 00:10:39,659 --> 00:10:41,120 pero en los demás si 85 00:10:41,120 --> 00:10:43,600 tanto en hábitos, mapa, ánimo 86 00:10:43,600 --> 00:10:47,480 y creo que ya 87 00:10:47,480 --> 00:10:49,200 pero 88 00:10:49,200 --> 00:10:51,320 era un problema de las 89 00:10:51,320 --> 00:10:53,059 policies de RLS 90 00:10:53,059 --> 00:10:54,059 de Supabase 91 00:10:54,059 --> 00:10:57,019 al final lo pudimos arreglar 92 00:10:57,019 --> 00:10:59,419 de forma muy fácil ya que encontramos 93 00:10:59,419 --> 00:11:01,000 este 94 00:11:01,000 --> 00:11:03,240 pequeño trozo de código por internet 95 00:11:03,240 --> 00:11:04,919 en foros 96 00:11:04,919 --> 00:11:06,840 y nos dice 97 00:11:06,840 --> 00:11:15,600 el código http del error y un poquito el mensaje que nos daba de problema muchas veces eran 401 y 98 00:11:15,600 --> 00:11:26,279 403 al buscar en internet esos códigos descubrimos que era este esto de aquí por lo menos con las 99 00:11:26,279 --> 00:11:34,899 rls de policías que al final se lograron arreglar fácilmente y dando permisos a los usuarios al 100 00:11:34,899 --> 00:11:40,899 usuario que usamos en el usuario anon que es este de aquí 101 00:11:40,899 --> 00:11:48,100 lo pudimos arreglar fácilmente y haciendo una llamada una query sql que 102 00:11:48,100 --> 00:11:54,139 nos daba los permisos para poder editar las tablas y ese fue el mayor problema 103 00:11:54,139 --> 00:11:59,779 que tuvimos ya que estuvimos un tiempo sin saber muy bien por qué 104 00:12:00,460 --> 00:12:04,600 a continuación se va a mostrar un poco la funcionalidad de la aplicación y las 105 00:12:04,600 --> 00:12:14,919 partes más importantes de la misma las primeras de todas es el login el cual cuando tú te registras 106 00:12:14,919 --> 00:12:23,740 como un nuevo usuario y la base de datos se guardará en la tabla de usuarios a su vez cuando 107 00:12:23,740 --> 00:12:31,039 se crea un nuevo usuario se creará un nuevo user stats para el mismo para almacenar los puntos que 108 00:12:31,039 --> 00:12:37,879 son los que obtiene al finalizar hábitos bien vamos a hacer login con los usuarios 109 00:12:39,000 --> 00:12:45,179 por ejemplo con este de aquí que tiene un par de hábitos y añadidos 110 00:12:52,279 --> 00:12:59,480 y al entrar en la página de inicio vemos los puntos que tienen la persona y el último estado 111 00:12:59,480 --> 00:13:05,779 de ánimo, el cual para el estado de ánimo hay una tabla en la que se va guardando el 112 00:13:05,779 --> 00:13:11,159 estado de ánimo de la persona. El estado de ánimo se selecciona en esta ventanita 113 00:13:11,159 --> 00:13:18,220 de aquí, en la cual el usuario puede seleccionar si hoy se encuentra mal, regular bien o muy 114 00:13:18,220 --> 00:13:25,480 bien, y hay un pequeño resumen emocional de todas las veces que le da la persona. En 115 00:13:25,480 --> 00:13:31,360 este caso pues soy por ejemplo muy bien y los guarda y se actualiza y en la base 116 00:13:31,360 --> 00:13:36,649 de datos vemos que ya se ha actualizado con fecha 117 00:13:36,649 --> 00:13:41,669 de hoy pero en el inicio sigue saliendo bien porque es 118 00:13:41,669 --> 00:13:46,799 el estado de ánimo de ayer 119 00:13:49,000 --> 00:13:54,580 la ventana de hábitos está hecha para que sólo muestre los 120 00:13:54,580 --> 00:14:00,580 del día de hoy. En este caso, por ejemplo, yo añadí que hoy tengo como hábito beber 121 00:14:01,139 --> 00:14:09,580 agua 5 vasos y aún está pendiente porque no está terminado. Cuando un usuario termina 122 00:14:09,580 --> 00:14:15,779 un hábito, lo único que tiene que hacer es deslizar hacia la derecha, el hábito se 123 00:14:15,779 --> 00:14:22,159 marca como completado y en este caso, si volvemos al inicio, nos habrá sumado 5 puntos al ser 124 00:14:22,159 --> 00:14:28,120 un hábito de hoy. También podemos ver que en la parte de abajo tenemos los hábitos 125 00:14:28,120 --> 00:14:37,360 pendientes. Voy a mostrar un momento la ventana de hábitos. Este es el método para marcar 126 00:14:37,360 --> 00:14:44,580 cuando un usuario quiere completar un hábito, deslizarlo hacia la derecha y aquí está 127 00:14:44,580 --> 00:14:51,539 apartado para los puntos y otra cosa que comentar es que si el hábito lo ha 128 00:14:51,539 --> 00:14:56,639 completado por error se puede volver a marcar como que no lo ha completado y 129 00:14:56,639 --> 00:15:00,100 restará los puntos que había añadido 130 00:15:00,600 --> 00:15:06,559 bien en los propios hábitos tú puedes crear 131 00:15:06,559 --> 00:15:23,779 ponerle un nombre, por ejemplo, correr, le dices dos kilómetros, y es para el día 20, por ejemplo, y si ahora nos vamos a la base de datos, 132 00:15:23,779 --> 00:15:30,000 Veremos que si actualizamos la base de datos 133 00:15:30,000 --> 00:15:35,549 Si actualizamos la base de datos 134 00:15:35,549 --> 00:15:42,259 Bueno, perdón, no le he dado a crear hábito 135 00:15:42,259 --> 00:15:44,360 Ahora que ya está creado 136 00:15:44,360 --> 00:15:47,019 Vemos que si nos vamos al día 20 137 00:15:47,019 --> 00:15:49,100 El hábito está aquí 138 00:15:49,100 --> 00:15:52,139 Y dentro de la base de datos 139 00:15:52,139 --> 00:15:54,519 Cuando recarguemos, ahora sí 140 00:15:54,519 --> 00:15:56,799 Tendremos el hábito aquí guardado 141 00:15:56,799 --> 00:16:02,200 Para los hábitos pasados 142 00:16:02,200 --> 00:16:04,379 Está hecho de forma que 143 00:16:04,379 --> 00:16:06,860 Si por ejemplo nos vamos al día de ayer 144 00:16:06,860 --> 00:16:09,259 Si tenía hábitos 145 00:16:09,259 --> 00:16:11,179 Pero al estar completados no se muestran 146 00:16:11,179 --> 00:16:13,080 Solo se muestran los del día 13 147 00:16:13,080 --> 00:16:15,740 Para hacer un ejemplo vamos a descompletar este 148 00:16:15,740 --> 00:16:18,759 Y vamos a recargar otra vez la página 149 00:16:18,759 --> 00:16:21,159 Y vemos que sale como que no está completado 150 00:16:21,159 --> 00:16:23,379 Tanto hoy como ayer 151 00:16:23,379 --> 00:16:24,120 Bien 152 00:16:24,120 --> 00:16:26,559 En la ventana de mapa 153 00:16:26,559 --> 00:16:30,059 Está hecho de tal forma que 154 00:16:30,059 --> 00:16:33,259 Si le damos los permisos a la aplicación 155 00:16:33,259 --> 00:16:35,980 Tarda un poquito 156 00:16:35,980 --> 00:16:40,000 Nos marcará la zona en la que estamos ahora mismo 157 00:16:40,000 --> 00:16:43,399 Porque usa los servicios de Google Play de ubicación 158 00:16:43,399 --> 00:16:48,500 Entonces, ahora aquí podemos movernos por la aplicación y demás 159 00:16:48,500 --> 00:16:54,340 Este punto, por ejemplo, es uno de los hábitos que ya había creado 160 00:16:54,340 --> 00:17:11,150 Pero por ejemplo, como tenemos que correr, nos acercamos aquí al parque, mantenemos pulsado en la pantalla y le ponemos que para crear un punto y le ponemos que va a ser correr. 161 00:17:12,869 --> 00:17:21,430 Y vemos que ya tiene el punto creado con el hábito que quieres hacer y la fecha para realizar ese hábito. 162 00:17:21,430 --> 00:17:51,099 Bueno, otra pequeña cosa a comentar es que cuando estás en el mapa y, por ejemplo, el hábito del día 13 ya lo has completado, vamos a irnos al día 13, lo vamos a completar, al volver al mapa ya no se ve ese punto del hábito, ya que al estar completado se borró automáticamente del mapa. 163 00:17:51,099 --> 00:18:06,140 Vale, ya para terminar como conclusión queremos decir que este proyecto nos ha permitido desarrollar una aplicación en Android relativamente completa 164 00:18:06,140 --> 00:18:09,960 y sobre todo moderna y centrada en el usuario 165 00:18:09,960 --> 00:18:18,420 nosotros hemos trabajado sobre todo la parte de la lógica interna ya que creíamos que era lo más importante 166 00:18:18,420 --> 00:18:25,440 que la aplicación funcionara lo mejor posible, pero también hemos trabajado en la parte visual, 167 00:18:25,880 --> 00:18:31,980 ya que para nosotros es importante que el usuario se sienta cómodo, ya que uno de los principales objetivos 168 00:18:31,980 --> 00:18:39,440 era que el usuario se manteniese usando la app, así no solo creaba los hábitos, sino que se acostumbraba a seguirlos. 169 00:18:40,599 --> 00:18:47,920 Para nosotros, la parte más valiosa, lo que nos queda, es que no solo desarrollamos una app de diferentes pantallas, 170 00:18:47,920 --> 00:18:55,220 que consigue moverse, sino que realmente llegamos a conectar estos hábitos creando un sistema 171 00:18:55,220 --> 00:19:02,480 de ánimo y de progreso y una experiencia relativamente coherente que era lo que realmente 172 00:19:02,480 --> 00:19:08,079 buscábamos, un poco más enfocado al usuario. Además nos ha servido para practicar diferentes 173 00:19:08,079 --> 00:19:17,700 tecnologías como Jetpack Compose, Hilt, Navigation Compose y el mapa que integramos con Google. 174 00:19:17,920 --> 00:19:37,220 Y en definitiva, este proyecto creemos que cumple más o menos bien con el objetivo de ayudar al usuario a un seguimiento de estos hábitos de forma más visual, más sencilla y más motivadora, 175 00:19:37,220 --> 00:19:43,900 que creemos que era lo que faltaba un poco en las aplicaciones de estos nichos 176 00:19:43,900 --> 00:19:49,920 que ayuda al usuario a motivarse y a seguir conectado con sus hábitos 177 00:19:49,920 --> 00:19:53,640 no solo de forma que los cree y se olvide de ellos 178 00:19:53,640 --> 00:19:58,640 pues esta aplicación realmente no está del todo completa 179 00:19:58,640 --> 00:20:00,400 todavía nos falta por desarrollar parte 180 00:20:00,400 --> 00:20:05,680 y sobre todo si queremos que sea una aplicación totalmente completa 181 00:20:05,680 --> 00:20:18,339 tendríamos que añadir ciertas funcionalidades todavía, como ampliar las notificaciones o permitirle al usuario exportar sus datos o sincronizarlo de una forma más avanzada 182 00:20:18,339 --> 00:20:29,759 y crear un sistema de logros un poco más complejo y completo para así ayudar al usuario a sentirse aún más conectado con la aplicación. 183 00:20:29,759 --> 00:20:34,720 Muchas gracias por atendernos en este video 184 00:20:34,720 --> 00:20:39,940 Espero que les haya gustado este trabajo que llevamos a cabo 185 00:20:39,940 --> 00:20:42,900 Tanto mi persona, Franklin Javier Oliveros Afonso 186 00:20:42,900 --> 00:20:45,460 Como mi compañero Oscar Jiménez Martínez 187 00:20:45,460 --> 00:20:46,180 Muchas gracias