[Windows Phone 8] Cimbalino Toolkit: ApplicationBar y Servicios

Hola a todos!

Un gran activo del desarrollo en Windows Phone son los toolkits, desarrollados por miembros de la comunidad para facilitar ciertas tareas del desarrollo. Entre muchos, los más conocidos son el Windows Phone Toolkit o el Coding4Fun Toolkit. Pero hoy quiero hablaros de otro más, desarrollado por Pedro Lamas, Senior Engineer en Nokia y activo miembro de la comunidad Windows Phone.

En concreto, este toolkit se llama Cimbalino Windows Phone Toolkit e incorpora ciertas utilidades que nos harán la vida mucho más fácil: Una ApplicationBar con soporte para enlace de datos, acceso a información del dispositivo, cámara, localización, librería multimedia o información del usuario. Todo compatible con MVVM, de forma que podamos acceder a estos servicios desde nuestras ViewModels de una forma sencilla. Además, me gusta mucho la última incorporación a este Toolkit, un servicio llamado IMarketplaceInformationService que nos ayudará a saber si existe una nueva versión de nuestra aplicación publicada, con lo que podremos avisar al usuario para que se la descargue, incluso dirigiéndole directamente a la página del marketplace de nuestra aplicación.

Por todo esto quiero empezar esta serie de artículos sobre este útil toolkit, que nos sacará de más de un apuro y hará nuestra tarea de desarrollo más sencilla. Espero que disfrutéis con el tanto como yo.

Empezando

Por supuesto el primer paso es añadir Cimbalino WP Toolkit a nuestra aplicación. Es muy sencillo, solo necesitamos usar el gestor de paquetes de NuGet y buscar el texto “Cimbalino.Phone” con lo que obtendremos varios componentes diferentes para elegir:

image

En primer lugar encontramos el toolkit completo (Cimbalino Windows Phone Toolkit) pero, y es algo que me encanta de este toolkit, también podemos descargar por separado solo las porciones que nos interesen: los componentes de información de usuario o dispositivo, los de cámara, los controles… de esta forma nos aseguramos de no tener referencias que realmente no necesitamos.

Para este caso, que queremos darle un repaso a distintas partes del toolkit, vamos a instalar el primero de todos, “Cimbalino Windows Phone Toolkit” de esta forma tendremos acceso a todos los componentes de este kit.

ApplicationBar

Uno de los grandes dolores de cabeza a la hora de crear una aplicación Windows Phone usando el patrón MVVM es la ApplicationBar. Al tratarse de un componente nativo, no tiene acceso al sistema de enlace a datos del resto de elementos de la página, por lo que nos vemos obligados a usar Code Behind. Al final, acabamos accediendo a la ViewModel instanciada en el DataContext para ejecutar los comandos que deberíamos poder enlazar a la ApplicationBar.

Pues esta es la primera mejora que nos encontramos en Cimbalino. Incluye un behavior que podemos aplicar sobre el elemento principal de la página, la grid LayoutRoot por defecto, para definir una barra de aplicación con enlace a datos. Para ello tendremos que incluir en la página los namespaces System.Windows.Interactivity y Cimbalino.Phone.Toolkit.Behaviors:

xmlns:bAppBar=“clr-namespace:Cimbalino.Phone.Toolkit.Behaviors;assembly=Cimbalino.Phone.Toolkit”
xmlns:i=“clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity”

A continuación, podremos usar el behavior ApplicationBarBehavior sobre nuestro elemento principal de la página, en este caso un Grid:

 

<!–LayoutRoot is the root grid where all page content is placed–>
<Grid x:Name=“LayoutRoot” Background=“Transparent”>
    <i:Interaction.Behaviors>
        <bAppBar:ApplicationBarBehavior>
            <bAppBar:ApplicationBarIconButton Text=”{Binding LocalizedResources.AppBarButton, Source={StaticResource LocalizedStrings}}
                                                IconUri=“Assets/favs.png”
                                                Command=”{Binding ButtonCommand}/>
            <bAppBar:ApplicationBarBehavior.MenuItems>
                <bAppBar:ApplicationBarMenuItem Command=”{Binding MenuCommand}
                                                Text=”{Binding LocalizedResources.AppBarMenu, Source={StaticResource LocalizedStrings}}/>
            </bAppBar:ApplicationBarBehavior.MenuItems>
        </bAppBar:ApplicationBarBehavior>
    </i:Interaction.Behaviors>
</Grid>

Como podemos ver, no solo podemos usar enlace a datos para la acción a realizar, también podemos usarlo en el texto. Esto es especialmente importante para aplicaciones localizadas en varios idiomas. De esta forma nos hemos ahorrado los eventos en code behind de los menús y botones, pero también el recargar la barra para calcular el idioma. Incluso podemos enlazar una propiedad IsVisible a cada item para controlar cuando mostrarlo y cuando ocultarlo. Desde luego, esto es un Must Have.

Servicios

Cimbalino incluye también servicios que podemos usar out of the box. Localizados en el namespace Cimbalino.Phone.Toolkit.Services, se estructuran como los servicios que he enseñado muchas veces en el blog: Disponen de una interface y una implementación. De esta forma podemos usar IoC para disponer de los servicios que necesitemos en nuestras ViewModels.

En la versión actual, disponemos de los siguientes servicios:

  • AddressChooserService
  • ApplicationLifecycleService
  • ApplicationManifestService
  • ApplicationProfileService
  • ApplicationSettingsService
  • AsyncStorageService
  • ClipboardService
  • ConnectionSettingsService
  • DeviceStatusService
  • EmailAddressChooserService
  • EmailComposeService
  • LauncherService
  • LockScreenService
  • MapDownloaderService
  • MapsDirectionsService
  • MapsServices
  • MarketplaceDetailService
  • MarketplaceHubService
  • MarketplaceReviewService
  • MarketplaceSearchService
  • MessageBoxService
  • NavigationService
  • PhoneNumberChooserService
  • SaveAppointmentService
  • SaveContactService
  • SearchService
  • ShareLinkService
  • ShareMediaService
  • ShareStatusService
  • VoiceCommandService
  • WebBrowserService

Como podemos ver, la lista es impresionante. Podemos disponer de toda esta funcionalidad, simplemente añadiendo la dependencia a nuestro IoC, por ejemplo el MessageBoxService:

ContainerBuilder builder = new ContainerBuilder();

builder.RegisterType<MessageBoxService>().As<IMessageBoxService>();
builder.RegisterType<VMMainPage>();

container = builder.Build();

Después lo podemos añadir al constructor de nuestra ViewModel:

public VMMainPage(IMessageBoxService msgService)
{
    this.msgService = msgService;
            
    this.buttonCommand = new DelegateCommand(this.ButtonCommandExecute);
    this.menuCommand = new DelegateCommand(this.MenuCommandExecute);
}

Y por último lo usamos como cualquier otro servicio:

private void ButtonCommandExecute()
{
    this.msgService.Show(“command from appbar button.”);
}

Así de fácil, tenemos muchas capacidades de Windows Phone 8 ya implementadas en Cimbalino: Mapas, Marketplace, geoposicionamiento, almacenamiento, settings… todo lo que necesitemos, o por lo menos gran parte de lo que necesitemos.

Conclusión

Con esto llegamos al final del primer artículo sobre Cimbalino Toolkit. En el próximo le daremos un repaso a los controles que incorpora Cimbalino para ayudarnos con la interface de usuario. Mientras tanto, aquí os dejo el ejemplo que he usado en este artículo para que juguéis con él.

Un saludo y Happy Coding!

[OFFTOPIC] Cambio de aires

Hola a todos!

Tenía este post pendiente desde hace una semana, pero por diversos motivos no había podido sentarme a escribirlo. La Windows Phone Week Spain, el Codemotion 2013 y un cambio de trabajo!

Y es que si, después de casi tres años, tres grandes años, hace ya una semana, el 11 de Octubre, fue mi último día en Plain Concepts. Desde este lunes 14 de Octubre he pasado a formar parte del maravilloso equipo de desarrollo de Icinetic.

icineticLogo

Icinetic, para los que no la conozcáis tiene un producto llamado RadarC, para generación de código, multiplataforma (Windows Phone, iOS, Android, Firefox OS, MVC4… lo que en RadarC se llaman fórmulas. Totalmente integrado con Visual Studio. Es un producto muy interesante, que va más allá del tipico LightSwitch, generando código nativo para cada plataforma que podemos editar, extender y personalizar.

Precisamente por esta versatilidad, RadarC es la tecnología de generación de código usada en AppStudio. Llego a Icinetic cargado de energías, como Lead Developer de la formula Windows Phone de RadarC. Es sin duda un gran reto, que me expone a nuevos problemas, a buscar nuevas soluciones y nuevas situaciones. Un reto que estoy encantado de aceptar. Además de por la tecnología, disfrutaré con esta nueva etapa por los grandes compañeros, como Javier Suarez, que me acompañarán en el día a día.

No cambiarán muchas cosas: Seguiré viviendo en Bilbao por ahora, seguiré dándolo todo por la comunidad de Windows Phone y me seguiréis viendo en todos los eventos a los que sea capaz de apuntarme!

Un saludo y Happy Coding!

 

[Materiales] Codemotion 2013, NFC en Windows Phone 8

Hola a todos!

Este viernes participé en el Codemotion 2013 que se celebró en Madrid. Tuve la suerte d poder dar una charla sobre NFC y Windows Phone 8. Un tema que mucha gente pasa por alto y que ofrece grandes ventajas y nuevos escenarios de trabajo muy interesantes.

En la charla pudimos dar un repaso a la tecnología en sí misma, independientemente de la plataforma en la que se implemente: Escenarios de interacción como la domótica, la modificación de configuración dependiendo de etiquetas, y la interacción entre dispositivos.

Además, cuando tomas la decisión de empezar a trabajar con una tecnología de comunicaciones, en la cual las pruebas incluyen siempre varios dispositivos, tienes la gran duda de como realizar pruebas sin tener que invertir un dineral en equipos físicos. Aunque, como siempre decimos, al final lo mejor es desarrollar probando en dispositivos reales, para una primer etapa de desarrollo es bueno contar con un emulador o algo parecido que nos permita realizar pruebas rápidamente.

Para NFC, contamos con una aplicación llamada Proximity Tapper, que podemos descargar directamente de codeplex. Esta aplicación nos permite interconectar dos emuladores de Windows Phone 8 que estemos ejecutando en nuestra máquina y emular el tap de NFC, para que podamos realizar pruebas en ellos. Tengo que reconocer que lo he probado y funciona genial, para cosas sencillas como publicación y subscripción de mensajes o usar el PeerFinder, va de lujo.

 

nfc

En la imagen anterior podemos ver dos emuladores conectados y detectados por el Proximity Tapper.

Por último, vimos un ejemplo de interacción: Como anunciar nuestra aplicación, compartir un texto o una URL.

Podéis ver las slides en Slideshare:

Y descargaros el ejemplo que usamos, aquí. Espero que os guste y ayude a empezar a desarrollar con NFC en Windows Phone 8.

Un saludo y Happy Coding!

[Windows Phone 8] GDR3 Preview: Novedades para desarrolladores

Hola a todos!

Este lunes 14 de Octubre, Microsoft presentó el programa Preview for developers, que permite a los desarrolladores registrados en la Windows Phone Store o en AppStudio acceder a versiones beta de la próxima actualización (GDR3, no Windows Phone 8.1) del sistema operativo.

Microsoft ha declarado que no habrá un nuevo SDK, aunque si tendremos nuevas imágenes del emulador, como ya ocurriera con GDR2, para poder probar nuestras aplicaciones en un emulador 1080p.

Nueva resolución 1080p

Una pregunta que muchos desarrolladores ya empiezan a hacerse es, ¿Como podré saber si mi app está ejecutándose en un dispositivo 1080p? Debido a la gran resolución y a los rumoreados (y cada vez más reales) dispositivos de 5” o 6”, tendremos mucho más espacio para usar un layout diferente al resto de dispositivos. Para este caso en concreto, el equipo de Windows Phone a través de su blog oficial ha dicho que tendremos nuevas propiedades a las que podremos acceder con la clase DeviceExtendedProperties. Nos darán mas información cuando liberen los emuladores.

Memoria máxima aumentada

Parece que, los nuevos dispositivos, vendrán equipados con 2Gb de RAM. Para estos nuevos dispositivos, el límite de memoria a usar por nuestra app se sube hasta los 570Mb. Esto es muy útil, sobre todo en dispositivos con pantallas 1080p, pues todas las imágenes y superficies se dibujarán a mayor resolución y consumirán más memoria.

Para todos los dispositivos de 1Gb de RAM (Lumia 820/92X/1020…) se aumentará también la memoria disponible para los agentes de audio en background. Aunque el aumento no será tan significativo como en las apps, algo es algo. Dispondremos de 5Mb de memoria más, pasando de los 20Mb actuales a 25Mb.

Nuevos esquemas URI

Se han añadido en el sistema dos nuevos esquemas URI para acceder a pantallas de configuración nuevas en esta actualización:

  • Rotación de pantalla: ms-settings-screenrotation:
  • Ahorro de batería: ms-settings-power:

Sonidos personalizados para notificaciones Toast

¿Cansado de que los millones de Windows Phone que te rodean suenen igual que el tuyo? Pues ya se puede evitar! En GDR3 y mediante reflection, podremos personalizar el tono de los mensajes Toast de nuestra aplicación. Incluso podremos crear notificaciones silenciosas, sin sonido de aviso. El archivo de sonido que usemos, no debe tener una duración superior a 10 segundos, puede estar en formato WAV, WMA o MP3 y debe ser un archivo local, guardado en el directorio de la aplicación o en el ÏsolatedStorage.

Si estamos lanzando la notificación Toast desde un servicio cloud, podremos incluir una nueva etiqueta Sound en el XML de la notificación. Si no deseamos usar ningún sonido podremos añadir un atributo Silent=”True” en la etiqueta Sound.

Más información aquí.

Nueva propiedad en la clase PowerManagement

Por reflection podremos acceder a una nueva propiedad de esta clase, llamada PowerSavingModeEnabled. Cuando esta propiedad esté establecida a True, podremos avisar a nuestros usuarios de que las notificaciones no se recibirán porque estamos en ahorro de energía.

No todo es perfecto…

Aunque lo parezca, no todo es perfecto… y es que Microsoft no ha conseguido que, al igual que iOS7 hace, GDR3 haga que nuestros dispositivos sean resistentes al agua… Así que ya sabéis, si de pronto sentís un irrefrenable deseo de bañaros con vuestro Lumia… preparad la cartera para comprar uno nuevo.

Conclusión

¿Qué os parecen estos añadidos al sistema?

Espero que disfrutéis de la preview de Windows Phone 8 Update 3 (que será el nombre oficial, no GDR3) Y si no sois desarrolladores, recordad que registrándoos en AppStudio, también podréis usar la aplicación Preview for Developers que os permitirá descargar futuros updates. Y ya que estáis registrados, no dejéis de probarlo!

Un saludo y Happy Coding!

 

[EVENTO] Windows Phone Week Spain, resumen y materiales

Hola a todos!

El pasado fin de semana celebramos en Madrid la Windows Phone Week Spain, un evento que duró todo el sabado 5 de Octubre, donde en compañia de mis buenos amigos, Rafa Serna, Alejandro Campos, Javier Suarez y Roberto Luis Bisbe, nos reunimos con 100 personas más para disfrutar de charlas, regalos y mucha diversión.

El fin de semana empezó muy bien, con una cena pre evento en el New York Burguer de Recoletos, un lugar increible para disfrutar de una buena hamburguesa

 

10133573913_e94fd52b89_b

Es genial poder compartir mesa con grandes como Luis Guerrero, Oscar Gutierrez, Rafa Serna, Alejandro Campos y demás amigos. De destacar es que se unió a nosotros Desiree Lockwood, venida directamente desde Redmond, y que pertenece al equipo de Windows Phone. Fue un placer contar con ella.

Ya después de una ligera cena, entre todos los presentes cayeron más de 4 kilos de hamburguesas, y algunas cervezas, fuimos al hotel a prepararnos para el evento.

A primera hora llego nuestro primer y UNICO participante del concurso de disfraces:

WP_20131005_08_38_57_Pro

Gracias a su iniciativa y ganas de divertirse, se llevo a casa un Lumia 820 y un cargador Wireless amarillo. ¡Felicidades!

Y luego fuimos a por las charlas. Yo por mi parte hice dos: MVVM y Nokia Imaging SDK.

Después de algunas charlas más, toco el turno a la comida. Gracias a Microsoft Ibérica tuvimos un catering que quitaba el hipo:

10137683814_53f7e61df5_c

Y esta era una de las dos mesas llenas de comida! En cuanto acabamos con la comida, literalmente, seguimos con fuerza con muchas más charlas: Azure Mobile Services, Distribución empresarial, Nokia Imaging SDK… A los ponentes se nos acababan las pilas, pero la gente seguía con ganas de más charlas. Al final, llego el momento de los premios y vaya si repartimos premios:

  • 1 Lumia 920
  • 1 Subscripción de 1 año a PluralSight
  • 2 Entradas para la Iberian Sharepoint conference
  • 3 licencias de VS Anywhere
  • 5 licencias de RadarC4 multiplataforma
  • 15 tazas térmicas de MSDN
  • 100 licencias de Semantic Merge
  • 100 Tokens del Marketplace de Windows Phone

Con lo que te puedes imaginar, todos los asistentes se llevaron una licencia de semantic merge y un token del marketplace, además de unos cuadernos para dibujar apps de Windows Phone y unos guantes.

Para terminar la noche… la gente normal se marcharía corriendo a la cama (llevábamos 3 horas de sueño encima) pero nosotros no… Aprovechamos para ir a cenar una hamburguesa al Friday’s de las gavias y a ver la película de Steve Jobs, para redondear un día Freak al completo!

10133512994_3c588d235b_h

Y el domingo, con otras tres horas de sueño encima, de vuelta a casa.

Fue un fin de semana estupendo. Conocimos mucha gente, todos aprendimos algo y extendimos más la plataforma Windows Phone… así que ya estoy esperando la edición del año que viene, estad atentos!!

Si queréis ver algunas fotos, tanto de la Windows Phone Week Spain, como de otras ediciones alrededor del mundo, no os perdáis esta colección de FlickR: http://www.flickr.com/photos/wpcommunity/

Un saludo y Happy Coding!