Diseño Android: Cuadros de diálogo de selección

android

Los cuadros de diálogo son un elemento básico de la mayoría de interfaces de usuario y no necesitan presentación alguna. Según las guías de estilos de Material Design, “informan a los usuarios sobre una tarea específica y pueden contener información crítica, requerir decisiones o implicar varias tareas.” En Android, son ventanas que se muestran sobre una pantalla, representada por una Activity o un Fragment, y que bloquean el uso de la pantalla subyacente. Esta ventana es gestionada directamente por una implementación del contrato android.content.DialogInterface, aunque en la práctica será suficiente con utilizar alguna de las implementaciones que ya incluye Android.

El siguiente diagrama muestra las clases e interfaces más importantes para los cuadros de diálogos proporcionadas por Android de forma nativa, esto es, sin tener en cuenta las support libraries.

Seguir leyendo

Spring JDBC Template: simplificando el uso de SQL

logo spring

Generalmente el uso y explotación de bases de datos SQL en Java lo realizamos a través de herramientas de mapeo ORM tales como Hibernate o Apache OpenJPA que permiten desarrollar la capa de persistencia de nuestras aplicaciones de forma muy rápida con una alta abstracción sobre el modelo relacional. Spring no sólo es muy fácil de integrar con estos productos tal y como vimos en el tutorial “Persistencia en BD con Spring: Integrando JPA, c3p0, Hibernate y EHCache”, sino que además proporciona con Spring Data JPA su propia capa de abstracción que nos facilita y simplifica aún más el trabajo tal y como vimos en la correspondiente serie de tutoriales al respecto.

Sin embargo, en muchos escenarios no es una buena opción o incluso es inviable el uso de Hibernate y similares, al menos como única solución:
Seguir leyendo

Diseño Android: Menús con Bottom Sheet y Material Design

android

Seguimos en el blog echando un vistazo a componentes de Material Design de los que disponemos de implementaciones proporcionadas por Google. En este tutorial veremos el componente Bottom Sheet, un panel que se desliza hacia arriba desde la parte inferior de la pantalla. Su uso más habitual es mostrar información contextual o funcionar a modo de menú de selección. Este segundo caso es el que vamos a implementar con dos diseños distintos (modo lista y modo grid) y encapsulado en un fragment. El primero de ellos es una copia del utilizado en la versión 2.0 de Muspy for Android. La siguiente imagen muestra lo que vamos a implementar en este tutorial.

Seguir leyendo

Diseño Android: Transiciones entre activities con Shared Element

android

Material Design hace especial hincapié en el concepto de motion (movimiento) para “describir las relaciones espaciales, la funcionalidad y la intención con belleza y fluidez”. Dentro de los patrones de diseño propuestos podemos encontrar ejemplos y consejos para mantener la continuidad al navegar entre las distintas pantallas de forma coherente, natural y elegante, siendo uno de los comportamientos más llamativos el desplazamiento rápido y suave entre pantallas de elementos comunes entre ellas (shared elements). Podemos encontrar un buen ejemplo de ello en Google Play.

Seguir leyendo

Test Doubles con Mockito

mockito

Al testear cierto comportamiento de un objeto nos encontraremos habitualmente con que ese objeto posee una o varias dependencias de otros objetos en los que se apoya y que, por tanto, condicionan el comportamiento del código que queremos testear. A veces incluso esas dependencias nos impiden la realización de los tests ya que pueden conectarse a servicios, bases de datos, etc, sobre los que no tenemos el control y no podemos configurar para hace nuestros tests.

Seguir leyendo

Testing Spring con JUnit 4

logo spring

En el tutorial Testing con JUnit 4 vimos la importancia del testing automatizado y los primeros pasos para realizarlo en Java y Android con JUnit 4. En los proyectos en los que utilicemos Spring necesitaremos acceder en algunas clases de tests a los beans proporcionados por el contenedor de inyección de dependencias y, en muchos de ellos, utilizar versiones mocks, stubs, dummys, etc de los mismos.

Seguir leyendo

Android: Servicio periódico con inicio automático. IntentService y JobService.

Última actualización: 03/12/2017

android

En este tutorial vamos a ver una solución para un escenario en el que necesitamos que una aplicación realice una tarea en segundo plano de forma periódica y sin intervención por parte del usuario, por ejemplo para realizar una sincronización de datos con un servidor. Esta tarea puede ser implementada con un servicio, “un componente de una aplicación que puede realizar operaciones de larga ejecución en segundo plano y que no proporciona una interfaz de usuario”. Además de implementar este servicio, tenemos que encontrar un modo de programar su ejecución periódica y asegurar que se ejecute aunque la aplicación no se esté en ejecutando en ese momento.

Seguir leyendo

Dagger 2: Inyección de dependencias en Android

Última actualización: 02/07/2017

android

La inyección de dependencias (Dependency Injection, DI) es un patrón de diseño que ayuda a hacer nuestras aplicaciones más modulares y fáciles de testear, mantener y evolucionar. Su uso está más que asumido en el mundo Java gracias a Spring y al estándar JEE, y en Android se está utilizando cada vez más de la mano de Dagger 2, herramienta desarrollada por Google utilizando como base Dagger de Square y que también puede utilizarse en Java.

Seguir leyendo

Testing con JUnit 4

junit

El testing automatizado suele ser uno de los grandes olvidados en el proceso de desarrollo de software y la primera “víctima” de las desviaciones de presupuestos y plazos de entrega. Sin embargo es parte fundamental del proceso de creación de software, incluso existe una metodología (TDD) en la que el desarrollo se hace en base a los tests que debe verificar el software y no al revés, esto es, primero se diseñan los tests y luego la aplicación que los verifica.

Seguir leyendo

Android: Integración con Chrome (Custom Tabs)

android

A finales del verano de 2015, Google publicó dentro de las librerías de compatibilidad un nuevo módulo para permitir realizar cierta integración entre nuestras apps y el navegador Chrome 45+. El objetivo consiste básicamente en poder solicitar a Chrome mostrar un contenido web y que el navegador “parezca” que forma parte de nuestra app y no de la sensación al usuario que hemos salido de la misma.

Seguir leyendo