La siguiente aplicacion permite a las personas compartir y visualizar los lugares compartidos por otras personas, esta desarrollado en Kotlin.
El siguiente diagrama representa la arquitecura usada, la unica diferencia es que la fuente externa de datos es Firebase, la cual es almacenada en Room y los datos mostrados al usuario son cargados directamente desde Room
La fuente de datos usada es FireStore , ya que a diferencia de realtime , firestore es mas escalable y tiene multiples opciones para filtrar los datos.
Los datos de los lugares compartidos estan almacenados en la coleccion Places
Adicionalmente, cada 30 minutos se almacena la ubicacion de los usuarios, la cual se encuentra en la collecion USERAPP
####Firebase Storage
Las imagenes subidas por los usuarios son almacenadas en el directorio /images
Se uso flow para poder hacer una escucha en tiempo real de los datos que son agregados al collection "places" de firebase. Cada vez que un nuevo dato es agregado, flow nos permite emitir dicho valor , el cual trae las actualizaciones en tiempo real.
Cuando el Viewmodel que esta haciendo el collect al repository muere, entonces se deja de escuchar los datos de firebase y se remueve la suscripcion mediante el codigo "awaitClose{suscription.remove()}"
Worwkmanager, es un componente de la arquitectura de android , el cual forma parte de JetPack, workmanager nos permite ejecutar tareas en segundo plano siempre y cuando se cumplan ciertas restricciones.
En la aplicacion desarrollada , uno de los requerimientos es que se guarde la ubicacion del usuario cada 30 minutos. Workmanager nos permite realizar esa tarea en 2do plano, independientemente de si la aplicación se encuentea abierta, solo basta con cumplir con las restricciones establecidas para que dicha tarea se ejecute.
En la siguiente captura se puede observar como se configura la restriccion la cual pide que el equipo este conectado a la red, para ejecutar la tarea , y se configura el lapso de tiempo en el cual se va ejecutar, que es cada 30 minutos
El componente Navigation de Android Jetpack te permite implementar la navegación, desde simples clics de botones hasta patrones más complejos, como las barras de apps y los paneles laterales de navegación. El componente Navigation también garantiza una experiencia del usuario coherente y predecible, ya que se adhiere a un sistema establecido de conjunto de principios.