Índice de Contenidos

PawTracker
Sistema Avanzado de Monitorización y Seguimiento de Mascotas

Desarrollado por

Aritz Mendive

Juan Borrás

Martín Peñalva

Showcase de la Aplicación

Vista del mapa principal
Vista principal con mapa interactivo y ubicación en tiempo real
Pantalla de login
Interfaz de autenticación con Material Design 3
Perfil de mascota
Perfil detallado de mascota con información completa
Edición de zona segura
Sistema de geofencing con zonas seguras personalizables
Configuración
Panel de configuración con tema oscuro/claro
Perfil de usuario
Gestión de perfil de usuario

3. Introducción

3.1. Propósito del documento

Este documento de documentación funcional ha sido desarrollado como parte de nuestro proyecto de fin de asignatura de programación móvil, con el objetivo de proporcionar una visión clara y detallada de todos los aspectos funcionales de nuestra aplicación PawTracker. Como estudiantes de programación, hemos querido plasmar aquí todo el proceso de análisis, diseño e implementación que hemos seguido para crear esta solución de seguimiento de mascotas.

La finalidad principal de este documento es servir como guía tanto para nosotros durante el desarrollo como para futuros desarrolladores que puedan continuar o mantener el proyecto. También servirá para que los evaluadores puedan entender el alcance y la complejidad de nuestra aplicación, así como las decisiones técnicas que hemos tomado durante su implementación.

Esta documentación funcional incluye todos los aspectos necesarios para comprender completamente la aplicación: desde los requisitos funcionales que definen lo que la aplicación debe hacer, hasta los diagramas de arquitectura que muestran cómo están organizados sus componentes, pasando por detalles de la interfaz de usuario, gestión de datos y plan de pruebas.

3.2. Alcance del proyecto

PawTracker es una aplicación móvil nativa para Android desarrollada desde cero por nuestro equipo, que permite a los dueños de mascotas realizar un seguimiento en tiempo real de la ubicación de sus perros. El alcance del proyecto abarca:

Fuera del alcance de esta versión inicial quedan funcionalidades como la integración con dispositivos GPS específicos para mascotas, la versión para iOS, y funcionalidades sociales como compartir la ubicación con otros usuarios o generar informes estadísticos de actividad. Estas características podrían considerarse para futuras versiones si el proyecto continúa su desarrollo.

3.3. Información importante para pruebas

INFORMACIÓN IMPORTANTE PARA PRUEBAS

Cuenta Principal de Prueba

Esta cuenta está preparada con diferentes perros ya insertados y configurada para probar todas las funcionalidades de la aplicación:

Usuario: sadaborras63@gmail.com

Contraseña: perros123

Cuenta para Simulación de Perro

Esta cuenta permite simular y controlar la ubicación del perro Ron, que pertenece al usuario Juan Borrás:

Usuario: perro1@gmail.com

Contraseña: perro111

4. Descripción General

4.1. Visión general de la aplicación

PawTracker es una aplicación móvil que hemos desarrollado como parte de nuestro proyecto académico, pensada para resolver un problema común entre los dueños de mascotas: cómo mantener localizados a sus perros en todo momento. La aplicación ofrece un sistema de seguimiento GPS en tiempo real, permitiendo visualizar la ubicación exacta de las mascotas en un mapa interactivo.

En nuestro desarrollo, nos hemos centrado en crear una herramienta que sea realmente útil y práctica. El usuario puede definir "zonas seguras" (como el hogar o el parque habitual) y recibir una notificación inmediata si su mascota sale de estos perímetros. Esto es especialmente útil para perros escapistas o para momentos en que la mascota está bajo el cuidado de otras personas.

Hemos implementado la aplicación utilizando una arquitectura MVVM (Model-View-ViewModel) para separar claramente la lógica de negocio de la interfaz de usuario. Para el backend, utilizamos Firebase, lo que nos permitió incorporar fácilmente autenticación de usuarios, almacenamiento en la nube y notificaciones push. Para la parte de geolocalización, integramos Google Maps y los servicios de ubicación de Google Play, aprovechando su precisión y eficiencia energética.

La interfaz de usuario ha sido diseñada siguiendo los principios de Material Design 3, lo que proporciona una experiencia moderna, intuitiva y agradable visualmente, con soporte tanto para tema claro como oscuro.

4.2. Objetivos principales

Durante el desarrollo de PawTracker, nos planteamos los siguientes objetivos clave:

4.3. Público objetivo

Al diseñar PawTracker, hemos pensado en diferentes perfiles de usuario que podrían beneficiarse de nuestra aplicación:

La aplicación ha sido diseñada para ser accesible a usuarios con diferentes niveles de habilidad tecnológica, priorizando una interfaz clara e intuitiva que no requiera conocimientos técnicos avanzados para su uso cotidiano.

5. Requisitos Funcionales

A continuación se detallan los requisitos funcionales que se han implementado en la aplicación PawTracker, basados en las clases y funcionalidades reales del código:

Autenticación y Gestión de Usuarios

Gestión de Perros

Sistema de Geolocalización

Sistema de Zonas Seguras

Sistema de Notificaciones

Gestión de Datos

6. Requisitos No Funcionales

Además de las funcionalidades específicas, nuestra aplicación PawTracker debe cumplir con una serie de requisitos no funcionales que aseguren su calidad, rendimiento y usabilidad. Estos requisitos definen cómo debe comportarse el sistema y establecen las bases para una experiencia de usuario satisfactoria.

6.1. Rendimiento

El rendimiento es crucial en una aplicación de seguimiento en tiempo real. Hemos establecido los siguientes requisitos para garantizar una experiencia fluida:

6.2. Usabilidad

La facilidad de uso es fundamental para que nuestra aplicación sea accesible para usuarios de diferentes niveles de experiencia tecnológica:

6.3. Accesibilidad

Hemos diseñado la aplicación considerando usuarios con diferentes capacidades y preferencias:

6.4. Seguridad

La seguridad es esencial, especialmente al tratarse de datos de ubicación y información personal:

7. Arquitectura de la Aplicación

7.1. Estructura general

La arquitectura de PawTracker sigue un enfoque pragmático basado en Activities y Services con interacción directa a Firebase, priorizando la funcionalidad sobre patrones arquitectónicos complejos.

Componentes principales

La aplicación está organizada en los siguientes componentes interconectados:

  1. Activities: Constituyen el núcleo de la interfaz de usuario y manejan la lógica de negocio:
    • MapsActivity: Pantalla principal que integra el mapa, gestión de perros y zonas seguras
    • SplashLoginActivity: Maneja la autenticación y precarga de datos
    • PerfilPerro y PerfilUsuario: Visualización y acceso a edición de perfiles
    • EditarPerro y EditarUsuario: Edición de datos con persistencia en Firebase
    • AjustesActivity: Configuración de la aplicación y preferencias de usuario
  2. Services y BroadcastReceivers: Gestionan la funcionalidad en segundo plano:
    • GeofencingService: Servicio en primer plano para monitoreo continuo de ubicaciones
    • GeofenceBroadcastReciver: Maneja las notificaciones y eventos de geolocalización
    • BootCompletedReceiver: Restaura servicios tras el reinicio del dispositivo
  3. Clases de utilidad especializada:
    • DogLocationManager: Centraliza la lógica de geolocalización y zonas seguras
    • DogsClusterManager: Optimiza la visualización de múltiples marcadores en el mapa
    • DatosPrecargados: Singleton que implementa un sistema de caché centralizada
    • LoadingSpinner: Componente visual para indicadores de carga dinámicos

Gestión de datos

La aplicación implementa una estrategia de datos en dos niveles:

  1. Persistencia remota: Firebase Realtime Database almacena todos los datos de usuarios, perros, ubicaciones y estados de geofencing, permitiendo sincronización en tiempo real entre dispositivos.
  2. Caché local: DatosPrecargados mantiene una copia en memoria de los datos más utilizados, reduciendo consultas a Firebase y permitiendo un funcionamiento más fluido.

Patrones de diseño aplicados

El proyecto utiliza varios patrones de diseño efectivos:

Esta estructura arquitectónica directa facilita el flujo de datos en tiempo real necesario para la funcionalidad principal de monitoreo GPS, a la vez que mantiene un rendimiento óptimo en dispositivos móviles.

7.2. Diagrama de componentes

A continuación detallamos los componentes específicos y cómo interactúan entre sí:

Componentes de UI (Activities)

Servicios y Receptores

Gestores y utilidades

Flujo de interacción para crear una zona segura

Como ejemplo concreto de esta arquitectura, cuando un usuario define una zona segura, el flujo es el siguiente:

  1. El usuario selecciona un perro en el spinner de MapsActivity y pulsa el botón de edición de zona.
  2. La actividad llama al método activarModoEdicionZonaSegura(), que a su vez invoca locationManager.activarModoEdicionZona(perroSeleccionadoId!!).
  3. Cuando el usuario toca el mapa, se llama a locationManager.definirZonaSegura(latLng) que dibuja un círculo en esa posición.
  4. Al pulsar guardar, se invoca locationManager.guardarZonaSegura(perroSeleccionadoId!!), que almacena las coordenadas y el radio en Firebase.
  5. El servicio GeofencingService comienza a monitorizar esta zona y enviará notificaciones cuando el perro salga de ella.

Esta arquitectura ha demostrado ser efectiva para nuestra aplicación, proporcionando un equilibrio adecuado entre simplicidad de implementación y rendimiento en situaciones de uso real.

8. Casos de Uso

8.1. Descripción de los casos principales

A continuación se presentan los casos de uso principales de PawTracker, implementados realmente en el código de la aplicación y verificados contra las clases proporcionadas.

8.1.1. Casos de uso de autenticación

CU-01: Registro de nuevos usuarios

Actor principal: Usuario no registrado

Precondiciones: El usuario tiene la aplicación instalada y acceso a internet

Flujo básico:

  1. El usuario inicia la aplicación y selecciona "Registrarse"
  2. El sistema muestra el formulario de registro con campos para email, contraseña y confirmación
  3. El usuario completa los campos requeridos
  4. El sistema valida los datos en tiempo real, verificando:
    • Formato de email válido con Patterns.EMAIL_ADDRESS
    • Contraseña segura con al menos una mayúscula, una minúscula y un número
    • Coincidencia entre contraseña y confirmación
    • Aceptación de términos y condiciones
  5. El usuario envía el formulario
  6. El sistema crea la cuenta usando FirebaseAuth.createUserWithEmailAndPassword
  7. El sistema almacena datos básicos en Firebase Database (email, createdAt)
  8. El sistema muestra un mensaje de éxito y redirige a MainActivity

Flujos alternativos:

Implementación: Este caso de uso está implementado en la clase RegisterActivity utilizando Firebase Authentication.

CU-02: Inicio de sesión

Actor principal: Usuario registrado

Precondiciones: El usuario tiene una cuenta válida en el sistema

Flujo básico:

  1. El usuario inicia la aplicación y visualiza la pantalla de login (MainActivity)
  2. El usuario introduce su email y contraseña
  3. El usuario puede marcar la opción "Recordarme" para mantener sus credenciales
  4. El usuario pulsa el botón de inicio de sesión
  5. El sistema inicia SplashLoginActivity que:
    • Muestra una pantalla de carga con logo pulsante y barra de progreso
    • Autentica al usuario mediante FirebaseAuth.signInWithEmailAndPassword
    • Almacena el tiempo de login en SharedPreferences para control de sesión
    • Precarga datos iniciales usando DatosPrecargados
  6. Tras la autenticación exitosa, el sistema redirige a MapsActivity

Flujos alternativos:

Implementación: Este caso de uso está implementado en las clases MainActivity y SplashLoginActivity.

8.1.2. Casos de uso de gestión de mascotas

CU-03: Visualización de perfil de perro

Actor principal: Usuario autenticado

Precondiciones: Usuario con sesión activa y al menos un perro registrado

Flujo básico:

  1. El usuario selecciona un perro en MapsActivity y pulsa el botón de perfil
  2. El sistema abre PerfilPerro pasando el ID del perro seleccionado
  3. El sistema carga los datos del perro desde Firebase:
    • Información básica: nombre, raza, peso
    • Imagen de perfil codificada en Base64
    • Fechas de nacimiento y adopción
    • Edad calculada automáticamente
    • Datos del dueño
  4. El sistema muestra la información junto con opciones de edición

Flujos alternativos:

Implementación: Este caso de uso está implementado en la clase PerfilPerro.

CU-04: Edición de perfil de perro

Actor principal: Usuario autenticado

Precondiciones: Usuario visualizando perfil de un perro (CU-03)

Flujo básico:

  1. El usuario pulsa el botón "Editar" en PerfilPerro
  2. El sistema inicia EditarPerro con transición animada (slide_up)
  3. EditarPerro carga los datos actuales del perro desde Firebase
  4. El usuario puede modificar:
    • Nombre y raza del perro
    • Peso (valor numérico)
    • Fechas de nacimiento y adopción mediante selectores personalizados
    • Imagen de perfil (cámara o galería con recorte mediante UCrop)
    • Dueño asignado mediante spinner
  5. El usuario confirma los cambios con el botón "Guardar"
  6. El sistema valida que los campos obligatorios estén completos
  7. El sistema guarda los cambios en Firebase mediante updateChildren
  8. El sistema muestra mensaje de confirmación y vuelve a PerfilPerro con animación

Flujos alternativos:

Implementación: Este caso de uso está implementado en la clase EditarPerro.

8.1.3. Casos de uso de geolocalización

CU-05: Visualización de ubicación de perros

Actor principal: Usuario autenticado

Precondiciones: Usuario con sesión activa y permisos de ubicación concedidos

Flujo básico:

  1. El usuario accede a MapsActivity (pantalla principal)
  2. El sistema:
    • Inicializa Google Maps con mapsFragment.getMapAsync
    • Crea DogsClusterManager para gestionar marcadores
    • Configura DogLocationManager para seguimiento de ubicaciones
    • Carga la lista de perros desde DatosPrecargados o Firebase
    • Muestra los perros en el selector (spinner) con DogSpinnerAdapter
  3. El usuario selecciona un perro del spinner
  4. El sistema:
    • Llama a locationManager.mostrarUbicacionPerro(perroId)
    • Muestra un marcador personalizado con la imagen del perro en su ubicación
    • Visualiza su zona segura si está definida
    • Actualiza periódicamente la posición mediante Firebase listener
  5. El usuario puede hacer zoom, moverse por el mapa y cambiar entre perros

Implementación: Este caso de uso está implementado en MapsActivity junto con DogLocationManager y DogsClusterManager.

CU-06: Creación y edición de zona segura

Actor principal: Usuario autenticado

Precondiciones: Usuario con sesión activa y un perro seleccionado en el mapa

Flujo básico:

  1. El usuario selecciona un perro en el spinner de MapsActivity
  2. El usuario pulsa el botón de edición de zona segura
  3. El sistema:
    • Invoca activarModoEdicionZonaSegura() en MapsActivity
    • Llama a locationManager.activarModoEdicionZona(perroId)
    • Muestra banner "EDITANDO ZONA SEGURA" y botones de guardar/cancelar
    • Si existe una zona previa, centra el mapa en esa ubicación
  4. El usuario toca un punto en el mapa para definir el centro de la zona
  5. El sistema dibuja un círculo verde con radio fijo de 100 metros
  6. El usuario pulsa el botón de guardar (FloatingActionButton verde)
  7. El sistema:
    • Ejecuta locationManager.guardarZonaSegura(perroId)
    • Almacena las coordenadas y radio en Firebase
    • Actualiza la caché en DatosPrecargados
    • Muestra mensaje de confirmación
    • Desactiva el modo de edición

Flujos alternativos:

Implementación: Este caso de uso está implementado en MapsActivity y DogLocationManager.

8.1.4. Casos de uso de monitoreo y notificaciones

CU-07: Notificación de salida de zona segura

Actor principal: Sistema (GeofencingService)

Actores secundarios: Usuario con perros monitorizados

Precondiciones:

Flujo básico:

  1. GeofencingService monitoriza periódicamente la posición del perro (cada 30 segundos)
  2. El sistema detecta que el perro ha salido de su zona segura mediante:
    • Cálculo de distancia entre posición actual y centro de zona segura
    • Comparación con el radio de la zona (100 metros)
  3. El sistema en DogLocationManager:
    • Actualiza el color de la zona segura a rojo
    • Actualiza el estado en Firebase a "OUT" en geofencing_status/{perroId}
    • Activa el GeofenceBroadcastReciver para gestionar notificaciones
  4. GeofenceBroadcastReciver:
    • Crea canal de notificación con prioridad alta
    • Envía notificación push inmediata
    • Programa notificaciones periódicas cada 30 segundos mientras el perro siga fuera
  5. Cuando el perro regresa a la zona segura, el sistema:
    • Actualiza el color de la zona a verde
    • Cambia el estado en Firebase a "IN"
    • Cancela las notificaciones periódicas

Implementación: Este caso de uso está implementado por las clases GeofencingService, DogLocationManager y GeofenceBroadcastReciver.

CU-08: Configuración de notificaciones

Actor principal: Usuario autenticado

Precondiciones: Usuario con sesión activa

Flujo básico:

  1. El usuario accede a AjustesActivity desde el botón de configuración en MapsActivity
  2. El sistema muestra opciones de ajustes incluyendo un switch para activar/desactivar notificaciones
  3. El usuario activa el switch de notificaciones
  4. El sistema:
    • En Android 13+, solicita el permiso POST_NOTIFICATIONS si es necesario
    • Guarda la preferencia en SharedPreferences ("notifications_enabled", true)
    • Crea canales de notificación necesarios
  5. El sistema confirma la activación y las notificaciones quedan habilitadas

Flujos alternativos:

Implementación: Este caso de uso está implementado en la clase AjustesActivity, con apoyo de BootCompletedReceiver para persistencia tras reinicios.

CU-A04: Cambiar contraseña de usuario

Actores: Usuario autenticado

Precondiciones:

Flujo básico:

  1. El usuario accede a la opción de cambio de contraseña desde el menú de ajustes
  2. El sistema muestra un formulario con:
    • Email del usuario (no editable)
    • Campo para la contraseña actual
    • Campo para la nueva contraseña
    • Campo para confirmar la nueva contraseña
  3. El usuario introduce su contraseña actual
  4. El usuario introduce y confirma su nueva contraseña
  5. El sistema valida los datos introducidos
  6. El sistema actualiza la contraseña en Firebase Authentication
  7. El sistema muestra un mensaje de éxito y retorna a la pantalla anterior

Flujos alternativos:

  1. Contraseña actual incorrecta:
    • El sistema muestra un mensaje de error indicando que la contraseña actual es incorrecta
    • El usuario debe volver a introducir la contraseña actual correcta
  2. Las nuevas contraseñas no coinciden:
    • El sistema muestra un mensaje de error indicando que las contraseñas no coinciden
    • El usuario debe volver a introducir y confirmar la nueva contraseña
  3. La nueva contraseña no cumple los requisitos mínimos:
    • El sistema muestra un mensaje indicando que la contraseña debe tener al menos 6 caracteres
    • El usuario debe introducir una contraseña que cumpla los requisitos

Postcondiciones:

Implementación:

8.2. Diagramas de casos de uso

Los siguientes diagramas representan visualmente los casos de uso descritos anteriormente y sus relaciones con los actores del sistema.

8.2.1. Diagrama general de casos de uso

Usuario no registrado
Usuario registrado
Sistema
CU-01: Registro
CU-02: Inicio de sesión
CU-03: Visualización perfil
CU-04: Edición de perro
CU-05: Ubicación en mapa
CU-06: Zona segura
CU-07: Notificaciones
CU-08: Config. notificaciones
Usuario sin cuenta en el sistema
Credenciales válidas
Procesos automáticos

Figura 8.1: Diagrama de casos de uso del sistema PawTracker

Este diagrama muestra la relación entre los diferentes actores del sistema (usuarios registrados, no registrados y procesos automáticos) y los casos de uso que pueden ejecutar.

8.2.2. Matriz de trazabilidad: Clases implementadoras vs. Casos de uso

La siguiente matriz muestra la relación entre los casos de uso y las clases que implementan su funcionalidad:

Caso de Uso Register Activity Main / Splash Perfil Perro Editar Perro Maps Activity Dog Location Manager Geofencing Service Geofence Broadcast Ajustes Activity Boot Completed
CU-01: Registro
CU-02: Inicio de sesión
CU-03: Perfil de perro
CU-04: Edición de perro
CU-05: Ubicación en mapa
CU-06: Zona segura
CU-07: Notificaciones
CU-08: Config. notificaciones
CU-A03: Cerrar sesión
CU-A04: Cambiar contraseña

Esta matriz demuestra la distribución clara de responsabilidades entre los componentes de la aplicación, donde cada caso de uso está respaldado por clases específicas que implementan su funcionalidad.

9. Interfaz de Usuario

La interfaz de usuario de PawTracker ha sido desarrollada siguiendo los principios de Material Design con un enfoque personalizado, priorizando la facilidad de uso y una experiencia intuitiva. A continuación, se detallan los elementos de diseño y las consideraciones de experiencia de usuario realmente implementados en la aplicación.

9.1. Sistema visual y elementos de diseño

9.1.1. Paleta de colores

La aplicación implementa un sistema de colores dual (claro/oscuro) definido en los archivos colors.xml, colors_v2.xml y sus contrapartes para el modo oscuro:

En el modo oscuro, la aplicación utiliza una paleta adaptada con colores optimizados para bajo brillo:

9.1.2. Tipografía

Contrario a lo que se podría esperar, la aplicación no utiliza Roboto como fuente principal, sino una combinación de dos familias tipográficas:

Los tamaños de texto están sistematizados en una jerarquía clara:

9.1.3. Dimensiones y espaciados

La aplicación implementa un sistema de dimensiones coherente definido en dimens.xml:

9.1.4. Componentes de Material Design

La aplicación implementa versiones personalizadas de los componentes estándar de Material Design:

9.2. Pantallas implementadas

9.2.1. Pantalla de inicio/login (MainActivity)

Esta pantalla, definida en activity_main.xml, presenta un diseño distintivo con las siguientes características:

Pantalla de inicio de sesión

Figura 9.1: Pantalla de inicio de sesión mostrando el formulario de autenticación

Pantalla de inicio de sesión con teclado

Figura 9.2: Vista de la pantalla de login durante la introducción de credenciales

9.2.2. Pantalla de registro (RegisterActivity)

Similar a la pantalla de login pero adaptada para el registro de nuevos usuarios:

9.2.3. Pantalla de carga (SplashLoginActivity)

Una pantalla minimalista que muestra:

Pantalla de carga

Figura 9.3: Pantalla de carga (splash screen) con logo y barra de progreso

9.2.4. Pantalla principal del mapa (MapsActivity)

El centro de operaciones de la aplicación con múltiples elementos interactivos:

Pantalla principal del mapa

Figura 9.4: Pantalla principal con mapa y ubicación de mascota

Edición de zona segura

Figura 9.5: Pantalla de mapa en modo de edición de zona segura

9.2.5. Pantalla de ajustes (AjustesActivity)

Una interfaz de configuración organizada en tarjetas:

Pantalla de ajustes

Figura 9.6: Pantalla de ajustes con opciones de configuración

9.2.6. Pantalla de perfil de perro (PerfilPerro)

Una interfaz detallada para visualizar la información de las mascotas:

Perfil de perro

Figura 9.7: Pantalla de perfil de mascota con información detallada

9.2.7. Pantalla de edición de perro (EditarPerro)

Permite modificar todos los datos del perfil de mascota:

Edición de perfil de perro

Figura 9.8: Pantalla de edición de perfil de mascota

9.2.8. Pantallas de perfil y edición de usuario

Equivalentes a las de perro pero adaptadas para gestionar perfiles de usuarios:

Perfil de usuario

Figura 9.9: Pantalla de perfil de usuario

Edición de perfil de usuario

Figura 9.10: Pantalla de edición de perfil de usuario

9.2.9. Cambio de Contraseña

La pantalla de cambio de contraseña, definida en activity_change_password.xml, proporciona una interfaz segura y amigable para que los usuarios actualicen sus credenciales de acceso. Esta pantalla implementa las siguientes características:

Los componentes principales de la interfaz incluyen:

Pantalla de cambio de contraseña

Figura 9.11: Pantalla de cambio de contraseña con campos seguros y validación

La implementación en ChangePasswordActivity.kt gestiona:

9.3. Patrones de interacción y navegación

9.3.1. Estrategia de navegación

La aplicación implementa un modelo de navegación basado en actividades independientes con transiciones entre ellas:

9.3.2. Patrones de interacción comunes

Se identifican varios patrones consistentes en toda la aplicación:

9.3.3. Uso de feedback visual

La aplicación proporciona retroalimentación al usuario mediante:

9.4. Temas y accesibilidad

9.4.1. Sistema de temas claro/oscuro

La aplicación implementa un sistema completo de temas claro y oscuro:

9.4.2. Consideraciones de accesibilidad

La aplicación tiene en cuenta varios aspectos de accesibilidad:

9.4.3. Estado visual de elementos interactivos

Los elementos interactivos tienen estados visuales claros:

En resumen, la interfaz de PawTracker combina principios de Material Design con una implementación personalizada para crear una experiencia coherente, intuitiva y adaptable a diferentes necesidades y preferencias de los usuarios. El sistema visual cuidadosamente definido y los patrones de interacción consistentes facilitan el uso de las funcionalidades principales de seguimiento y gestión de mascotas.

9.5. Layouts implementados

PawTracker utiliza una variedad de layouts XML para construir su interfaz de usuario. A continuación se detallan los principales layouts implementados y los componentes clave utilizados en cada uno:

9.5.1. Layouts de pantallas principales

9.5.2. Layouts de perfil y edición

9.5.3. Layouts auxiliares y componentes reutilizables

La aplicación utiliza consistentemente los siguientes patrones en la implementación de layouts:

Esta estructura de layouts proporciona una experiencia de usuario coherente a través de toda la aplicación, con patrones de diseño reconocibles que facilitan el aprendizaje y uso de las diferentes funcionalidades.

10. Integraciones Externas

10.1. APIs o servicios externos utilizados

10.1.1. Google Maps API

Esta API proporciona la funcionalidad de mapas interactivos y geolocalización:

10.1.2. Firebase Authentication

Este servicio gestiona la autenticación de usuarios de forma segura:

10.1.3. Firebase Realtime Database

Base de datos en tiempo real para sincronización de datos:

10.1.4. FusedLocationProviderClient (Google Play Services)

Proporciona acceso optimizado a los servicios de ubicación del dispositivo:

10.1.5. Firebase Cloud Messaging (FCM)

Sistema de notificaciones push:

10.2. Detalles de conexión y autenticación

La aplicación gestiona las credenciales y configuraciones de los servicios externos de la siguiente manera:

11. Gestión de Datos

El manejo eficiente de los datos es un componente crítico de PawTracker debido a la naturaleza de la aplicación, que requiere sincronización en tiempo real de ubicaciones, persistencia para funcionamiento offline, y gestión óptima de recursos. Como equipo de estudiantes, investigamos diferentes alternativas antes de decidir la arquitectura de datos que mejor se adaptara a nuestros requisitos funcionales y no funcionales.

En esta sección, detallamos las decisiones que tomamos respecto al modelado, almacenamiento y flujo de datos en nuestra aplicación.

11.1. Modelo de datos

Hemos diseñado un modelo de datos optimizado para consultas frecuentes de ubicación y actualización en tiempo real, sacrificando cierta normalización en favor del rendimiento y la simplicidad de implementación. Después de analizar diferentes sistemas de gestión de datos, seleccionamos Firebase Realtime Database como nuestro principal sistema de almacenamiento por su excelente soporte para actualizaciones en tiempo real y su facilidad de integración con otras herramientas de Google.

11.1.1. Entidades principales

Nuestro modelo de datos se compone de las siguientes entidades principales:

11.1.2. Esquema de datos en Firebase

Utilizamos una estructura jerárquica en Firebase Realtime Database, optimizada para nuestros patrones de acceso más frecuentes. A continuación, se muestra el esquema real implementado en nuestro proyecto:

{
  "geofencing_status": {
    "3TNBo6Ox0Dbzfc7clTc9hQr78vo1": "IN",
    "HwWNNqxtWQOR9FWhG1MToOXfqkH3": "IN",
    "mascota1": "OUT"
  },
  "locations": {
    "3TNBo6Ox0Dbzfc7clTc9hQr78vo1": {
      "latitude": 42.8331235,
      "longitude": -1.567736
    },
    "9L10iVFht4fjujsEpDPbjpV5WSg2": {
      "latitude": 42.8063202,
      "longitude": -1.6283644
    },
    "oO4YEvacmudmJcDVDUsthvuJ1LK2": {
      "latitude": 37.4219983,
      "longitude": -122.084,
      "timestamp": 1740971147354
    }
  },
  "users": {
    "3TNBo6Ox0Dbzfc7clTc9hQr78vo1": {
      "apellidos": "",
      "dueñoId": "oO4YEvacmudmJcDVDUsthvuJ1LK2",
      "fechaAdopcion": 0,
      "fechaNacimiento": -123552000000,
      "imagenBase64": "iVBORw0KGgoAAAANSUhEUgAAA...",
      "isPerro": true,
      "nombre": "Nina",
      "peso": 9,
      "raza": "Westie",
      "zonaSegura": {
        "latitud": 42.83302049020985,
        "longitud": -1.56803447753191,
        "radio": 100
      }
    }
  }
}

Esta estructura fue diseñada específicamente para soportar las necesidades de nuestra aplicación de geolocalización con las siguientes características principales:

Este diseño nos permite implementar eficientemente las principales funcionalidades de la aplicación:

12. Plan de Pruebas

La naturaleza crítica de PawTracker como aplicación de geolocalización y monitoreo en tiempo real requiere un enfoque riguroso de pruebas. Hemos implementado una estrategia estructurada que contempla tanto los aspectos funcionales como no funcionales, priorizando la fiabilidad y precisión de las características principales.

12.1. Estrategia de pruebas funcionales

Nuestra estrategia de pruebas se ha centrado en verificar que cada componente funciona correctamente de forma individual y en conjunto con el resto del sistema. Hemos implementado los siguientes tipos de pruebas:

12.1.1. Pruebas unitarias

Enfocadas en validar componentes individuales, principalmente:

12.1.2. Pruebas de integración

Verificación de la interacción entre componentes:

12.1.3. Pruebas en dispositivos reales

Enfoque clave dado el componente de geolocalización:

12.1.4. Pruebas de regresión

Para cada iteración de desarrollo:

12.2. Escenarios de prueba

Hemos definido escenarios específicos que representan situaciones reales de uso para validar el funcionamiento de la aplicación:

12.2.1. Escenarios de autenticación

ID Escenario Pasos Resultado esperado
A-01 Registro nuevo usuario 1. Abrir aplicación
2. Pulsar "Crear cuenta"
3. Completar formulario con datos válidos
4. Aceptar términos
5. Pulsar "Registrarse"
Usuario creado en Firebase y redirección a pantalla principal
A-02 Login con credenciales incorrectas 1. Abrir aplicación
2. Introducir email válido y contraseña incorrecta
3. Pulsar "Iniciar sesión"
Mensaje de error indicando credenciales inválidas
A-03 Cambio de contraseña 1. Login con cuenta existente
2. Ir a Ajustes > Cambiar contraseña
3. Introducir contraseña actual correcta
4. Introducir y confirmar nueva contraseña
5. Guardar cambios
Contraseña actualizada y confirmación visual

12.2.2. Escenarios de geolocalización

ID Escenario Pasos Resultado esperado
G-01 Definición de zona segura 1. Seleccionar perro en spinner
2. Pulsar botón editar zona
3. Tocar ubicación en mapa
4. Guardar zona
Zona visualizada en mapa y almacenada en Firebase
G-02 Salida de zona segura 1. Configurar cuenta simulación de perro
2. Actualizar ubicación fuera de zona segura
3. Esperar proceso de monitorización
Notificación push recibida, zona cambia a color rojo
G-03 Reentrada en zona segura 1. Con perro fuera de zona
2. Actualizar ubicación dentro de zona segura
3. Esperar proceso de monitorización
Notificación cancelada, zona cambia a color verde

12.2.3. Escenarios de gestión de perfiles

ID Escenario Pasos Resultado esperado
P-01 Creación de perfil de perro 1. Acceder a sección de perfil
2. Pulsar "Añadir perro"
3. Completar todos los campos
4. Seleccionar imagen
5. Guardar cambios
Perro creado en base de datos y visible en spinner
P-02 Edición de datos de perro 1. Seleccionar perro en spinner
2. Acceder a perfil
3. Pulsar "Editar"
4. Modificar campos
5. Guardar cambios
Datos actualizados correctamente en UI y base de datos

12.2.4. Escenarios de rendimiento

ID Escenario Condiciones Criterios de aceptación
R-01 Consumo de batería monitorización Aplicación en segundo plano, servicio activo por 1 hora Consumo inferior al 5% de batería
R-02 Tiempo de carga inicial Primera carga con autenticación y precarga de datos Tiempo total inferior a 5 segundos en conexión WiFi
R-03 Reinicio de dispositivo Apagar y encender dispositivo con app instalada Servicios se reinician automáticamente mediante BootCompletedReceiver

13. Cronograma de Desarrollo

El desarrollo de PawTracker se planificó inicialmente para un total de 35 horas, sin embargo, la realidad del proyecto sobrepasó con creces esta estimación inicial. En total, invertimos más de 120 horas efectivas entre los tres miembros del equipo para conseguir un producto funcional y de calidad. Esta discrepancia entre lo planificado y lo ejecutado nos ha permitido aprender valiosas lecciones sobre estimación de proyectos y gestión del tiempo.

13.1. Fases del proyecto

Dividimos el desarrollo en cinco fases principales, cuya duración real fue significativamente mayor a la prevista:

13.1.1. Fase 1: Planificación y Diseño (18 horas)

13.1.2. Fase 2: Implementación Base (25 horas)

13.1.3. Fase 3: Funcionalidades Core (42 horas)

13.1.4. Fase 4: Funcionalidades Complementarias (22 horas)

13.1.5. Fase 5: Testing y Refinamiento (13 horas)

13.2. Plazos y responsables

La distribución de tareas y horas reales invertidas entre los miembros del equipo fue la siguiente:

Fase Tarea Responsable Tiempo real (h)
Planificación y Diseño Análisis de requisitos Equipo completo 6
Diseño de arquitectura Juan Borrás 5
Diseño de UI/UX Martín Peñalva 4
Planificación técnica Aritz Mendive 3
Implementación Base Configuración del proyecto Juan Borrás 4
Implementación de autenticación Aritz Mendive 9
Estructura de datos Juan Borrás 7
Implementación de UI básica Martín Peñalva 5
Funcionalidades Core Implementación de mapas Juan Borrás 12
Sistema de geolocalización Aritz Mendive 11
Geofencing Juan Borrás 10
Sistema de notificaciones Martín Peñalva 9
Funcionalidades Complementarias Gestión de perfiles Martín Peñalva 6
Ajustes de aplicación Aritz Mendive 5
Optimizaciones de UI Martín Peñalva 4
Gestión de imágenes Aritz Mendive 7
Testing y Refinamiento Pruebas funcionales Equipo completo 5
Corrección de bugs Equipo completo 4
Optimización de rendimiento Juan Borrás 2
Documentación Equipo completo 2

13.2.1. Distribución de horas por desarrollador

El tiempo real invertido se distribuyó de la siguiente manera entre los miembros del equipo:

14. Conclusión

14.1. Resumen de las decisiones clave

Durante el desarrollo de PawTracker, enfrentamos varios desafíos técnicos específicos que nos obligaron a tomar decisiones importantes para nuestro proyecto:

14.1.1. Decisiones arquitectónicas

14.1.2. Decisiones de implementación

14.1.3. Lecciones técnicas aprendidas

14.2. Propuestas de mejora futura

A pesar de haber logrado implementar todas las funcionalidades principales dentro del tiempo disponible, identificamos varias áreas de mejora que podrían considerarse para versiones futuras:

14.2.1. Mejoras técnicas

14.2.2. Nuevas funcionalidades

14.2.3. Experiencia de usuario mejorada

En conclusión, PawTracker ha logrado implementar exitosamente todas las funcionalidades críticas para un sistema de seguimiento de mascotas en tiempo real, proporcionando una herramienta útil y accesible para los dueños de perros. Con las mejoras propuestas, la aplicación podría evolucionar hacia una plataforma más completa e integral para el cuidado y monitoreo de mascotas.