FOCUS CHECK

Descripción del problema

 

El problema identificado que da motivación a este proyecto es la falta de aplicaciones libres de pago que favorezcan la productividad. En los últimos años, a raíz de la pandemia y el trabajo en casa han emergido diferentes plataformas y sitios web que buscan brindar herramientas para concentrarse y realizar las tareas de manera eficiente, muchas de estas aplicaciones son utilizadas por los mismos integrantes del proyecto y una de las principales desventajas encontradas en ellas es el limitado desempeño de las funciones libres de pago que cada una otorga. Debido a lo anterior, este proyecto busca agrupar lo esencial de las aplicaciones destinadas a la productividad y concentración en una única aplicación libre de pago que no solicite información personal del usuario.

Pequeño análisis del problema

 

Como se mencionó anteriormente, los principales ejes que aborda esta solución con respecto a su funcionalidad corresponden a la concentración y la productividad. La solución propuesta para el primero de estos ejes es un diseño minimalista, intuitivo e iconográfico que no sature la vista de la aplicación, además se incorporarán sonidos ambientales que favorezcan un ambiente tranquilo y libre de distracciones acústicas. Por otro lado, la solución a desarrollar para el eje de productividad contempla la implementación de un temporizador con técnica Pomodoro, el cual supone tiempos de trabajo divididos en bloques de 25 minutos de trabajo y 5 de descanso por defecto, este tiempo puede ser modificado según la comodidad del usuario. Junto a lo anterior, con la intención de mejorar la eficiencia de la sesión de trabajo se incorporará una funcionalidad que permita tener a la vista las tareas a realizar, permitiendo crear, eliminar y tachar las tareas en la lista.

Definición de requerimientos

 

La propuesta de la aplicación Focus Check para resolver los problemas anteriormente planteados implica incorporar un temporizador con técnica Pomodoro configurable, una lista de tareas dinámica y un ecualizador de sonidos de ambiente en una misma interfaz manteniendo un diseño cohesivo estéticamente con la menor cantidad de distractores posibles. A partir de estos requerimientos es planteado el diagrama de casos de uso que contempla las funcionalidades descritas a continuación.

 

Cambio de fondo

Al presionar las flechas que indican hacia la izquierda y derecha en la pantalla, o bien, las del teclado, las imágenes de fondo cambian permitiendo al usuario avanzar a la siguiente o volver a la anterior.

Temporizador

Al presionar un icono de reloj se abre una vista del temporizador, la cual contiene botones para ajustar el tiempo, pausar el temporizador, pasar al siguiente periodo y reiniciar el tiempo.

Ecualizador

Al presionar un botón se abre una vista de los sonidos disponibles cada uno con su respectivo icono y slider para ajustar el volumen.

Cierre de aplicación

Al cerrar Focus Check esta debe mostrar una ventana de consulta que le permita al usuario decidir si guardar o no su lista de tareas.

 

 

Diseño

 

La clase principal de la aplicación es Proyecto, la cual crea 4 objetos de las clases BackgroundCarousel, ToDoList, PomodoroTimer y AudioMixer. El primero de estos, está encargado de manejar el sistema de fondos de pantalla junto con los botones y sus respectivos Event Listeners para avanzar o retroceder en la lista de fondos, ya sea a través de los íconos o con las teclas izquierda/derecha del teclado.

Los otros tres objetos son muy importantes porque le dan la funcionalidad a la aplicación. Estos tienen cosas en común: todos tienen una vista, todos tienen un ícono y todos tienen una animación para abrir y cerrarse. A partir de lo anterior, se decidió crear la clase Widget, que actúa como padre de ToDoList, PomodoroTimer y AudioMixer.

La clase ToDoList crea objetos de la clase Task de manera dinámica, a medida que el usuario agrega sus tareas pendientes. También se crean objetos Task al iniciar la aplicación, en caso de que hayan quedado tareas guardadas de la sesión anterior en el archivo todo.txt.

PomodoroTimer crea la vista y funcionalidad de un temporizador que implementa la técnica Pomodoro. Esta técnica sirve para que el usuario mejore la administración del tiempo que le dedica a sus actividades. Asimismo, esta clase provee controles y opciones de configuración para comenzar/detener el temporizador, avanzar a la siguiente sesión, cambiar los tiempos de trabajo/descanso y elección del sonido que se reproduce al finalizar la sesión de trabajo/descanso. Para estos efectos, PomodoroTimer se ayuda de dos enum para saber en qué estado se encuentra.

AudioMixer contiene la vista de todos los objetos SimpleAudioMixer, y los posiciona en 2 columnas. Estos últimos están encargos de generar la vista y funcionalidad a cada slider con su respectivo icono para apagar/encender el sonido ambiental correspondiente. Para guardar el estado del ícono se usa un enum. El slider aumenta o disminuye el volumen del sonido elegido, el cual se repite en bucle.

 

Pruebas

 

En esta sección se muestran las pruebas y resultados para cada caso de uso expuesto, cabe destacar que la aplicación cumple con todos los casos de uso propuestos. Además serán listados las dificultades encontradas en el desarrollo de cada caso junto a los correspondientes bugs.

 

Cambio de Fondo

Una caricatura de una persona

Descripción generada automáticamente con confianza baja Imagen que contiene exterior, calle, edificio, firmar

Descripción generada automáticamente

Los problemas asociados al cambio de fondo corresponden al tiempo de carga en pantalla, en un comienzo, la aplicación no se iniciaba hasta cargar todas las imágenes a mostrar, lo cual se solucionó cargando sólo la imagen que aparecerá a continuación al hacer click, sin embargo, esa solución implica un tiempo más largo en cargar la imagen por primera vez, lo que corresponde a un bug que puede ser solucionado cargando las siguientes imágenes en cuanto se inicia el programa con el fondo por defecto.

 

Temporizador Pomodoro

Interfaz de usuario gráfica, Sitio web

Descripción generada automáticamente Interfaz de usuario gráfica

Descripción generada automáticamente

Entre las opciones para el temporizador se tiene el botón + para agregar un minuto extra al periodo ya sea de trabajo o descanso, lo que se guarda para los siguientes periodos como el tiempo máximo, este conllevaba la dificultad de ver una vez apretado el botón el aumento de minuto en el textlabel en tiempo real, esto se solucionó con el enum que tiene los estados de trabajo y descanso seteando el tiempo que queda a la suma del actual +1 en minutos. Para el botón de saltar (tercer botón) no era suficiente el enum, sino que parar la timeline, cambiar estados, volver a setear el timer al tiempo máximo del estado correspondiente y dar a play. Si no se hacía el seteo de esta forma se quedaba con el tiempo anterior y mostraba tiempos negativos en los descansos (ya que tenía el tiempo de trabajo en descanso).

Para las alarmas se tenía que actualizar por opción de sonido, pero el array de opciones de la comboBox no sirve para reemplazar directamente el audio del MediaPlayer, ya que por estética se usan mayúsculas y espacios para dar la opción al usuario mientras que los strings de los audios estan en lowerCamelCase. Se hace un nuevo array donde están los nombres de los audios como los declarados para usarlos en el MediaPlayer en el mismo orden. Cada vez que se hace una opción se recorre el string de opciones y se obtiene el index correspondiente para reemplazarlo. La alarma se ubica en el método setOnFinished del timeline utilizado para hacer el timer en sí. Un problema no resuelto es haber hecho el menú de configuración como una vista, en vez de derivarlo de la clase widget, por lo que es la única parte que no tiene animación de la aplicación. Un nuevo problema es actualizar el valor en todos los casos posibles de los tiempos de trabajo en el menú de configuración.

 

Ecualizador de Audio

Una caricatura de una persona

Descripción generada automáticamente con confianza baja  Imagen que contiene Diagrama

Descripción generada automáticamente

La primera dificultad encontrada al realizar el ecualizador de audio fue el tiempo de duración del sonido reproducido, el cual se resolvió utilizando un loop con los métodos de la clase Media, posterior a ello las dificultades fueron interactuar tanto con el slider como con el ícono, en su primera versión, el ecualizador sólo permitía encender o apagar un sonido haciendo click en el ícono, para resolver esto se incorporaron estados que cambian dentro del Listener del slider, permitiendo encender y apagar también a través de este objeto.

 

Lista de Tareas

Imagen que contiene camino, tabla, hombre, mujer

Descripción generada automáticamente Interfaz de usuario gráfica, Texto, Aplicación

Descripción generada automáticamente

Uno de los problemas encontrados en la lista de tareas es que se quería prohibir añadir tareas vacías. Esto se implementó de cierta manera y funcionaba correctamente. Sin embargo, luego se notó que en otro computador esto no sucedía, y sí se podían agregar tareas sin texto. Para solucionarlo se cambió la manera en la que se verificaba que la entrada de texto estuviera vacía, verificando el largo del String en lugar de compararlo con un String vacío.

Otro problema encontrado fue al momento de regenerar la lista a partir del archivo todo.txt. En las primeras pruebas, la tarea se agregaba junto con el carácter delimitador del archivo de texto (punto y coma en este caso), esto provocaba que, luego de abrir y cerrar la aplicación reiteradas veces guardando las tareas, el texto de las tareas aparecía con múltiples “;” antes del texto útil. Para solucionarlo, simplemente se elimina el primer carácter del String cuando se genera la lista a partir del archivo.

 

Ventana de Cierre

Interfaz de usuario gráfica, Texto, Aplicación, Chat o mensaje de texto

Descripción generada automáticamente

Se intentó agregar la opción para cancelar el cierre de la aplicación desde la misma ventana de confirmación. Luego de algunos intentos simplemente se descartó esa idea y solo se permite seleccionar entre guardar o no la lista de tareas.

 

Diagrama de Secuencia

 

Texto

Descripción generada automáticamente con confianza mediaEl siguiente diagrama expuesto corresponde al diagrama de secuencia perteneciente al caso de uso de administración de tareas, específicamente a la acción de remover una tarea, el cuál se activa al hacer click en la equis que se encuentra sobre la tarea que se desea eliminar.

 

La interacción modelada en este diagrama contempla la acción realizada por el actor/usuario como ente iniciador, que al hacer click en el ícono perteneciente al objeto tarea, genera que este invoque un método de la clase ToDoList llamado removeTask, el cual permite remover la tarea de la lista.

 

 

 

 

 

Liga al Proyecto FOCUS CHECK

 

Proyecto Focus Check comprimido al 27/07/2022 aquí

Gitlab del proyecto

 

Ideas para próximas versiones

 

·         Agregar temas, por ejemplo, que tenga un modo oscuro y un modo claro.

·         Iniciar la aplicación con el mismo fondo de pantalla y configuraciones de sonido que tenía el usuario la última vez que usó la aplicación.

·         Permitir que se conecte a sitios web de reproducción de música, para que reproduzca una lista de Spotify o Youtube.

·         Quitar el menú por defecto del sistema operativo para que la aplicación no tenga bordes y se vea más prolija.