Professional Documents
Culture Documents
Documentacion Android App
Documentacion Android App
Documentacion Android App
La aplicación se basa en un explorador web embebido, específicamente un View del tipo web
View.
El flujo de la aplicación es desde el HOME_LAUNCHER el punto de entrada es el
SplashActivity, de acá válida si hay conexión o no y entra al WebViewActivity.
Constantemente el webView estará haciendo validaciones por medio del ViewModel, además
que en el momento de que no se tenga conexión mostrará el DialogFragmentCheckNewtork
Resumen
SplashActivity
Este contiene el código necesario para mostrar la animación lottie del inicio así como
detectar si hay o no hay conexión para desplegar una vista de sin conexión en su layout
correspondiente, a partir de acá se va a la siguiente activity creando un nuevo intent.
WebViewActivity
Este viene siendo el corazón de la aplicación, se utilizan una serie de flags para manipular
los elementos nativos de Android, ya que toda la información viene del webView y no es
posible detectar más que el cambio de URL, a no ser que se cuente con validaciones de JS
de las que se hablará más adelante.
En esta activity se utilizó binding, para generar un objeto con todas las vistas del layout y así
evitarse la costosa tarea de tener que revisar todo el layout para usar alguna vista.
Se definió una clase exclusiva para el cliente de Rankmi, y así poder observar el estado del
webView.
La manipulación del onBack se hizo basándose en los URL que se obtenían en el client.
Considerando que las aplicaciones web embebidas para Android fueron de cierta manera
dejadas atrás por Google, el manejo del login por Google, se hizo implementando callbacks.
ViewModel
Este contiene toda la lógica necesaria para saber cuando mostrar el menú nativo, las
llamadas a las funciones JS y validaciones nativas de la aplicación.
DialogFragmentCheckNetwork
Este fragment se encarga del despliegue del dialog, en el momento que no se tenga
conexión a internet y ocurra un cambio de URL
Rankmi Cliente
La aplicación cuenta con un cliente modificado para detectar si la página está iniciando, si
está cargando un recurso o si ya finalizo, esto es muy útil para debugear desde
androidStudio y ver que está ocurriendo y en cuál estado se encuentra el webView, se crea
una clase de este en la configuración del WebView
Nota:
La funcionalidad de onPageStarted() y onPageFinished() no es como se esperaría, es
decir solo se ejecutan al iniciar la aplicación y al loguearse, por eso se introdujo la función
onLoadResource()
Observadores
La aplicación al integrar viewModel también usó LiveData para manipular ciertos elementos
de Android nativo, en este caso ver la figura 4.
El rectángulo naranja corresponde al observador de la pestaña de notificaciones, como se
debe esconder el webView y mostrar una vista nativa, se está observando constantemente la
variable booleana showNotification para ver si se debe mostrar o no la misma.
El valor de esta variable cambiará según sea la pestaña que se seleccione.
Figura 4. Observers in Rankmi
Menú
Al tabLayout se le colocó un listener para ver qué tab ha sido seleccionada y en función de
eso ejecutar una función u otra. El funcionamiento de base en esas funciones se puede ver
en el apartado de modificaciones.
Nota
Se utilizó onTabUnseleceted también para manejar, las validaciones que tiene cada una de
las pestañas
Posibles modificaciones
La vista del webView tiene el método de evaluateJavascript. Que nos permite llamar
alguna función JS que esté dentro de la página web ver figura 3. Los parámetros de la
función son:
“window.mobileCallEvent(\”” + action + “\”)”) este argumento le está diciendo al
explorador embebido en su código JS que busque en el objeto windows la función definida
como mobileCallEvent y le pase como argumento un string definido en la aplicación móvil. De
esta manera se logra apuntar a alguna función definida en JS desde Android.
Nota
La modificación de ese parámetro debe hacerse con mucho cuidado, respetando comillas y
los slash si no, la llamada de la función no se ejecutara y deberá debuggearse desde algún
explorador web para ver el error.