Sansario

ELO 329 Programación Orientada a Objetos

Eduardo León
Bastián Quezada


Unsplashed background img 1

Descripción del problema

Actualmente la UTFSM no consta de una aplicación móvil para los estudiantes que facilite la administración de sus ramos inscritos, salas y horas de clases, es por esto que se evidencia la necesidad de poseer un sistema amigable que permita visualizar su horario personal a través de dispositivos móviles.

Análisis del problema

El problema abarca a todo el alumnado de la UTFSM, que tengan ramos inscritos y posean acceso a SIGA.
Se detecta la presencia de un solo actor clave "Alumno" que interactúa con el "Sistema" en este caso la aplicación móvil.

Considerando que la gran mayoria de los estudiantes poseen dispositivos móviles con Android es que se debe desarrollar la aplicación para este sistema operativo.

La aplicación permite que un Alumno suba su PDF de horario brindado por SIGA, el cual es leido y parseado para que sea visible de forma atractiva al usuario, se permite la modificación de éste agregando y eliminando Asignaturas y Bloques.

¿Qué es Sansario?

Sansario es una aplicación móvil que permite visualizar y administrar el horario otorgado por la plataforma SIGA, utilizando una interfaz simple e intuitiva, además de brindar comodidad al usuario evitando lo tedioso que es este proceso a través de SIGA.

La aplicación fue escrita en Java, lenguaje nativo de Android, se usó la librería PDFBox para la lectura del PDF.

Casos de Uso

Algunos casos de uso de la aplicación son los de cargar el horario (para su posterior visualización), la función de agregar nuevas asignaturas que no estén en SIGA, así tambien, el agregar un nuevo bloque de alguna asignatura.

Para ver los pasos a seguir en cada Caso, puede presionar la imagen.
Cargar Horariomore_vert
Cargar Horarioclose

1.- Alumno termina el tutorial del sistema, si es primera vez que entra a la aplicación debe aceptar los permisos correspondientes.

2.- El Sistema solicita archivo de Horario, desplegando la pestaña de almacenamiento del dispositivo.

3.- Alumno selecciona archivo deseado.

4.- Sistema carga y utiliza el archivo y retorna a la interfaz del horario, mostrando los datos contenidos en el archivo.

Nueva Asignaturamore_vert
Agregar Asignaturaclose

1. - Alumno pulsa botón de "Nueva Asignatura".

2. - Sistema despliega interfaz para agregar nueva asignatura.

3. - Alumno escribe Nombre de la asignatura, la Sigla y selecciona Estado (inscrita o pendiente), Campus y Jornada, luego presiona botón de "Registrar Asignatura".

4. - Sistema guarda los datos en la base de datos y retorna a la interfaz del horario.

Nuevo Bloquemore_vert
Agregar Bloque de Horarioclose

1. - Alumno pulsa botón de "Nuevo Bloque".

2. - Sistema despliega interfaz para agregar nuevo bloque.

3. - Alumno selecciona Asignatura, Bloque, Día y escribe la Sala donde será la clase, luego presiona botón de "Registrar Bloque".

4. - Sistema guarda los datos en la base de datos y retorna a la interfaz del horario mostrando el nuevo bloque agregado.

Diagrama de Clases

Se presenta el diagrama de clases de la solución, se ven las entidades y relaciones más importantes.

Diagrama de Secuencia

Se presenta el diagrama de secuencia del caso de uso de agregar una asignatura, el alumno ingresa los parametros necesarios en la actividad RegistroAsignatura, ésta hace una conexión a la Base de Datos Local mediante ConexiónSQliteHelper, una vez es agregada la asignatura se le informa al alumno mediante un Toast de Android.
Pulsa aquí para ver pruebas

Dificultades

1. Parseo del PDF: El parsear un PDF es un trabajo tedioso, el texto plano que es entregado no está estructurado por lo que se debieron usar muchos condicionales y expresiones regulares para poder sacar la información que se quería obtener.

2. Lectura del PDF: Desde Android 6 en adelante, se cambió el como se manejaba los permisos, uno de ellos fue el uso de archivos externos, éstos se usaban atraves de un URI, y no de un path como lo era antes, el uso de URI fue bastante complicado, pero leyendo mucho se llegó a poder usarlos para la lectura del archivo, para ello se uso la clase UriHelpers, con metodos que retornaban el path necesario para trabajar.

3. Uso de Fragments: Al tener dos vistas en la barra de navegación, queríamos que no se abriera una nueva actividad al ir entre ellas, ya que quedaba poco estético, por lo que optamos por usar los llamados Fragments, como su nombre lo dice son fragmentos de una activadad que pueden actualizarse independientemente de la actividad, su uso fue complicado, se debió leer la documentación hasta entener su ciclo de vida y como éstos se renderizaban.

4. Topes de Horario: Al existir un tope de horario, se nos producia un error al querer rellenar el horario, por lo que tuvimos que agregar esta condicional para que aceptara este tipo de situación, asignandole un bloque especifico de color rojo, con la palabra, TOPE, el problema fue que al existir esto el usuario se quedaba sin saber que clase tocaba, por lo que tuvimos que agregar un modal con una lista de las asignaturas que tenian tope para que el pudiera acceder a el bloque en especifico desde ahí.

5. Horario en una tabla: El querer mostrar el horario de una forma amigable fue complicado, primero pensamos hacer un tipo de tabla, pero al final nos dimos cuenta que las ListView de Android podian ser usadas de la misma manera, tuvimos que estudiar sobre como asignarles una posición a cada bloque.

Bugs y errores

1. Permisos: Al ingresar por primera vez a la aplicación esta pide los permisos para leer archivos, al aceptar los permisos es necesario reiniciar la aplicación para que ésto surga efecto.

2. PDFs compatibles: No se han probado todos los casos de horarios disponibles, algunos podrían producir error debido a que no se tuvieron en cuenta a la hora de parsearlo.

3. Resolución: No se ha probado la aplicación ni se diseño para todas las resoluciones, por lo que pueden haber problemas de diseño y uso al usarlas en resoluciones más pequeñas que en las que fueron pensadas, esto fue por tema de tiempo.

Descarga del proyecto

Descarga el APK

Descarga el código fuente