Convertir des fichiers de traductions Android vers Resw ou Resx

Capture d’écran du site WTI Converter

Les fichiers de traductions sont propres à chaque plateforme. Il existe des prémices de standards mais ceux-ci ne sont pas encore respectés sur les différentes plateformes.

Jusqu’il y a encore quelques mois, Android studio ne pouvait supporter que les fichiers de ressources Android (fichiers XML spécifiques).

L’idée est de réutiliser ces fichiers déjà existant dans une application Windows où Windows Phone.

Il existe fort heureusement un site de conversion en ligne qui réalise tout cela très bien !

Capture d'écran du site WTI Converter

http://converter.webtranslateit.com/

Il suffit de lui donner le fichier en entrée et de choisir le format Microsoft resx, resw.

Pour obtenir un fichier resw, il faudra simplement le renommer comme expliqué dans cet article.

A noter qu’il est également possible de générer du XLIF qui s’impose de plus en plus comme le standard de localisation.

 


Image depuis HTTP avec C# XAML – Comparatifs et Performances – Partie 2

Introduction

 wp_ss_20141223_0001

Cet article traite des résultats des différentes méthodes pour lire une image provenant d’un site Http.

Les différentes implémentations ont été décrites dans l’article

Image depuis http avec C# Xaml – comparatifs et performances.

Mesures

L’image étalon fait 19ko et mesure 400×240 pixels. Elle est présente notamment sur les serveurs de Bing à l’adresse suivante :

http://www.bing.com/az/hprichbg/rb/ChristmasMarketNurnberg_FR-FR11351563819_1280x768.JPG

Le premier test va charger 10 fois la même image suivante :

(suite…)


Image depuis HTTP avec C# XAML – Comparatifs et Performances – Partie 1

Introduction

Chargement Bitmap Image en Http

Voici un article en 2 parties pour décrire les différentes implémentations possibles de la lecture d’images provenant d’un serveur en Http.
En terme de performances, il existe des différences assez conséquentes suivant les implémentations choisies.

Nous allons voir que parfois les résultats sont assez surprenants.

Charger une image depuis XAML

Le moyen le plus simple pour charger une image reste l’implémentation XAML.

ImageUrl est de type Url et peut être déclarée de cette façon dans le viewModel associé à la Page.

Cette implémentation est très efficace, le contrôle XAML gère quasiment tout pour vous :

  • le chargement en asynchrone : Ne fige pas l’affichage de l’interface lors du chargement
  • la mise en cache mémoire (un seul chargement)
  • L’optimisation http (évite un échange serveur si l’image est déjà chargée)

Cependant l’image chargée en XAML sera de nouveau rechargée à chaque lancement de l’application.
Afin de mettre en place un système de cache persisté, il est nécessaire de charger le contenu de l’image et de la sauvegarder sur le téléphone dans l’Isolated Storage.

Quelles sont les méthodes possibles pour charger et afficher une image en asynchrone ?

Voici 9 façons de faire en Universal Apps (Windows Phone XAML ou Windows 8.1). Leurs temps de réponse seront mesurés sur Windows Phone 8.1 et exposés dans la 2ème partie de cet article.

Implémentations

 

1 – DataWriter

La première implémentation, la plus classique, est d’utiliser un httpClient pour récupérer le flux sous forme de Stream puis de le transférer dans le BitmapImage en passant par un DataWritter.

Windows 8 et les Universal Apps nous obligent à passer par un nouveau type de Stream le InMemoryRandomAccessStream pour l’afficher comme source dans le BitmapImage. (suite…)


Mise en cache d’image dans l’isolated storage avec Windows XAML et SemaphoreSlim

 

Ecriture dans l’isolated Storage d’un fichier image

Ecriture Multiple dans l'Isolated Storage

Il est parfois fort utile de sauvegarder les images provenant d’un serveur HTTP dans un cache afin d’éviter de les charger à chaque fois.

En implémentant ce système de cache en asynchrone, je me suis rendu compte de plusieurs problèmes causant systématiquement un UnauthorizedAccessException: Access is denied (0x80070005).

(suite…)


MvvmLight 5.0 et la navigation

Nouveautés

Une grande nouveauté de MVVMLight5 est l’apparition du INavigationService.

Le INavigationService est un Pattern permettant la navigation dans l’application sans utiliser la couche visuelle. Il est alors possible de migrer le même code sous différentes plateformes sans les particularités de la navigation.

Il sera également possible de tester les actions de navigation grâce aux tests unitaires automatisés.

(suite…)


Migration du RoundButton en Universal App

Introduction

AppBarButtonsScreenshot

En Windows Phone, les Round Button (Bouton antouré d’un cercle) étaient utilisés à travers un Framework additionnel le Coding4Fun Toolkit.

Exemple d’utilisation en Windows Phone Silverlight :

Ajout de l’espace de nommage dans la page

Utilisation dans la page Xaml

Avec les Universal Apps, ce Framework se fait malheureusement encore un peu attendre et de nombreux composants standards peuvent remplacer en natif ce fameux Round Button.

AppBarButtoon

Le AppbarButton est un bouton rond qui s’affiche normalement dans la barre de tâche en bas de l’écran.Mais il est également possible de l’utiliser n’importe où dans la page comme l’ancien RoundButton. (suite…)


Les liens pour bien démarrer avec Unity3D (Universal Apps)

unity3d

Cet article recense les différents liens qui m’ont été très utiles pour la création d’un jeu 2D avec Unity3D.

Le jeu en question s’appelle 4×3 disponible en Universal Apps sur Windows 8.1 et Windows Phone 8.1.

Unity3D

Unity et Windows 8.1, Windows Phone 8.1 et les universal Apps

Il est essentiel d’installer la version au moins égale à la 4.5.3. Seule cette version supporte les Universal Apps (apps pour Windows Phone et Windows 8.1).

Allez donc directement sur le site. Si vous avez déjà une version installée, ne vous fiez pas trop à la vérification automatique des mises à jour qui ne vérifient que les versions mineures (pour ma part).

Le lien pour télécharger la version est ici (> 1Go !) :

http://unity3d.com/unity/download

Unity et Visual Studio

Pour utiliser visual Studio à la place de MonoDevelop (livré en standard dans le package Unity), il existe un plugin (ex: SyntaxTree) racheté très récemment et offert gracieusement par Microsoft.

http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1-9.aspx

Le plugin existe sur les 3 dernières versions de Visual Studio 2010, 2012 et 2013. Il vous permet de manipuler le c#, débugger votre projet depuis Visual Studio. De quoi être très productif.

(suite…)


Migration du LongListSelector en Universal Apps – 2ème Partie

Nous poursuivons l’article sur la migration du LongListSelector (WP8 et WP8.Silverlight) vers les Universal Apps (WP8 et W8.x)

Nous avons vu dans le précédent article la migration des listes simples et des listes regroupées.

Dans cet article nous allons voir maintenant la migration du « JumpList ».

Le JumpList permet d’offrir des raccourcis de navigation lors du clic (ou tap) sur un regroupement.

Migrer le Jumplist en Universal Apps - Liste regtroupée wp_ss_20140925_0004

Avant avec le LongListSelector

En WP8.0 Silverlight, la gestion du JumpList passe obligatoirement par la définition du style associé à la propriété JumpListStyle. Sans cette association, la Jumplist ne fonctionnait pas.

(suite…)


Optimiser la synchro HTTP de vos apps avec le champ Header « If-Modified-Since »

Le saviez vous ? Ajouter le champ Request-Header « If-Modified-Since » peut faire gagner à votre application de la rapidité et éviter de drainer l’énergie de la batterie du smartphone de l’utilisateur.

Protocole d’utilisation « HTTP/1.1 GET method »

Tout d’abord, à quoi sert ce champ d’entête ? Il permet d’ajouter une condition à la requête à envoyer en fonction d’une date : les données sont transférées dans leur totalité si elles ont été modifiées depuis la date donnée par le header « If-Modified-Since ».

Voici sommairement son fonctionnement :

(suite…)


Migration du LongListSelector en Universal Apps

Après les ressources destinées aux traductions, nous continuons le tour d’horizon des éléments nécessaires pour migrer d’un projet Windows Phone 8.0 en Universal apps.

LongListSelector WP81

Le LongListSelector est un élément de liste très souvent utilisé : Il est apparu en 8.0 mais existait déjà dans la version 7.0 sous forme d’un composant tiers du Windows Phone Toolkit.

Avec les Universal Apps, ce composant disparaît au profit d’autres composants déjà présents dans Windows 8.0 : Listbox, ListView, GridView.

Liste Simple

Le cas le plus simple est lorsque LongListSelector est utilisé en mode simple Liste (sans regroupement).

Exemple de code :

(suite…)


Migration vers XAML 8.1 – les resw (migration rapide)

 

Cet article fait suite au précédent article concernant la migration de la partie « traduction » d’une application Windows Phone (7, 8 et Silverlight 8.1) en 8.1 XAML (Universal Apps)

Universal apps et traduction

Universal Apps

Nous avons pu voir précédemment que le portage pouvait être parfois un peu lourd.
Dans le cas où vous avez déjà de nombreuses ressources traduites dans les fichiers resx volumineux (et dans plusieurs langues), la suite peut vous intéresser.

Les identifiants de ressources

Nous avons vu dans le précédent article qu’il suffisait de

  1. renommer les fichiers .resx en .resw
  2. les mettre dans des répertoires normés avec un identifiant les ressources (ex : en-US, fr-FR,..)
  3. modifier le XAML pour remplacer le « {Binding… » par un x:Uid
  4. modifier tous les identifiants de ressources pour ajouter la propriété du contrôle qui sera traduite.

Pour éviter ce dernier cas parfois très lourd, il existe un solution qui peux vous faire gagner un peu de temps.

(suite…)


Migration vers 8.1 : Les fichiers de ressources resw 3

Introduction

Premier article d’une série qui revient sur mon retour d’expérience sur la migration des application Windows Phone 8.0 (Silverlight) vers Windows Phone 8.1/Windows 8.1 (Universal App).

Visual Studio 2013 permet de réaliser des universal apps, applications à la fois compatibles Windows Phone 8.1 et Windows 8.1.

La quasi totalité du code peut ainsi être partagé (jusqu’aux interfaces graphiques) permettant un incroyable gain de temps dans la création et surtout dans la maintenance de projets sur la mobilité.

Resx – C’était mieux avant ?

Grand changement et mauvaise surprise lorsque je me suis aperçu lors de la soumission sur le Store que mon paquet ne pouvait être accepté.

La cause : des fichiers resx dans des assemblies (mêmes dans les Portable Class Library censées fonctionner dans la quasi totalité des projets Windows phone 7, 8, 8.1, …)

Ce qui est assez drôle c’est que tout fonctionne jusqu’au moment du déploiement dans le store. L’application que j’ai tenté de déployer fonctionnait parfaitement sur mon téléphone avec des fichiers resx dans une Portable Class Library (PCL)

(suite…)


Réglage du zoom du Scrollviewer en universal app (w10, Wp8.1)

Zoom et Scrollviewer (avant)

Pour initialiser le zoom du Scrollviewer, il était possible avec Windows 8.0 de définir directement le niveau de zoom désiré avec l’instruction :

pour avoir un zoom de 300% par exemple.

De même pour se déplacer dans le scrollviewer, il fallait également utiliser

Ces 3 méthodes sont depuis peu marquées comme deprecated, et bien que le code continue à fonctionner, il est fortement recommander d’utiliser l’instruction ChangeView à la place.

Scrollviewer_ZoomToFactorLa syntaxe est plus simple à priori :

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.scrollviewer.changeview(v=win.10).aspx

La vue est ici positionnée avec 30% de zoom avec un scroll horizontal de 100 pixels 200 vertical.

Le dernier paramètre permet de désactiver l’animation de zoom.

L’ensemble retourne true si le zoom a eu lieu.

il est également possible de ne faire qu’un zoom sans déplacement en remplaçant les valeurs inutilsées par null

Le problème

Pourtant lorsque cette instruction est utilisée dans un projet WP8.1… rien ne se passe!

(suite…)


Icones Segoe UI Symbol et C#

 

Les icônes Segoe UI Symbol

Microsoft depuis Windows 8 recommande d’utiliser des icônes provenant d’une police de caractères « Segoe UI Symbol ».

C’est très pratique, il suffit de choisir cette fonte et de connaître ensuite le code pour directement accéder à l’image vectorielle de très bonne qualité, et personnalisable avec de la couleur.

Certains caractères ont une largeur nulle permettant également de faire un contour d’une autre couleur ou encore de créer un cercle autour de l’cône.

Les palettes d’icônes Segoe UI Symbol sont consultables sur différents sites :

exemple :

 

SgoeUiSymbol

 

C’est assez simple, dans une application XAML, il suffit de codifier le caractère avec les tags XML standards.

(suite…)


Pinch to Zoom avec Windows et Windows Phone 8.1

Comment rendre une image zoomable?

Pour l’application Infografx, j’ai eu besoin de gérer le zoom d’un graphique à travers un « pinch to zoom »

Zoom-Gesture

 

Lors de l’utilisation d’une image, l’utilisateur doit pouvoir zoomer et se déplacer dans le Zoom.

Mon premier réflex a été de coder l’utilisation de se zoom et du scale à partir des évenements de manipulation. Et puis comme j’étais dans un modèle M-V-VM j’ai même utilisé un behavior pour rendre le code plus propre.

Tout celà pour rien, car il existe une manière bien plus simple et bien plus efficace…

Avant

Avant, il fallait coder les gestes de l’utilisateur intervenant sur l’image.

Voici un exemple de code qui fait intervenir 2 évènements sur le contrôle ManipulationStart et ManipulationDelta.

Le code est assez long, le résultat n’est pas parfait car un peu rigide (pas de gestion de l’inertie) et pas facile à insérer dans un modèle M-V-VM.

Il existe un moyen pourtant bien plus simple.

Le ScrollViewer

Avec Windows 8 et les projets Windows Phone 8.1 (non Silverlight), le scrollviewer est enrichi d’un Zoom.

En Initialisant la propriété ZoomMode avec « Enabled », vous bénéficiez d’un Pinch To Zoom sur n’importe quel contenu du ScrollViewer

D’autres propriétés permettent également de paramétrer votre zoom :

  • MinZoomFactor : Pour fixer le zoom minimum (exemple 0.25)
  • MaxZoomFactor : Pour fixer le zoom maximum (exemple 3.0)
  • IsZoomInertiaEnabled : Pour gérer l’inertie du zoom (exemple false)

Ce qui donne en XAML

 

Et voilà! En quelques lignes de code XAML le tour est joué. vous avez un zoom parfait, sans code à maintenir et 100% M-V-VM.


Hard reset et RoamingFolder sur Windows Phone 8.1

Windows Phone 8.1 PowerTools

Etant inscrit comme développeur Windows Phone, j’ai la possibilité de tester en avant première la version 8.1 de Windows Phone.

Jusqu’à aujourd’hui tout se passait bien avec la stabilité légendaire de l’OS Windows phone, je n’avais pas grand-chose à reprocher à cette nouvelle version Béta.

Avec Visual Studio 2013, il existe de nouvelles fonctionnalités pour Windows Phone 8.1 très utiles pour tracer le CPU, mémoire, consommation batterie…

Pour activer ce paquet, l’installation d’une mise à jour de Windows Phone 8.1 par Visual studio est nécessaire.

Le crash

Après cette dernière mise à jour, le téléphone redémarre. Surprise, la plupart des applications « Silverlight Windows Phone » se lancent et … se ferment après 3 secondes d’utilisation. Le téléphone est incroyablement lent et une application exemple qui consommait auparavant 20Mo occupe maintenant 200Mo !

A priori, je ne suis pas le seul à avoir ce problème :

WPPowertools8.1Issues

 

Après 18 mois d’utilisation de mon Lumia 920, je n’avais jamais eu besoin de le réinitialiser. J’ai plus de 250 applications et jeux (pour mes enfants) installés.

Je crains la réinstallation des applications qui s’annonce fastidieuse mais pas d’autre choix.

C’est avec un pincement au cœur que je me résous à faire le Hard Reset de mon Lumia.

La sauvegarde

Avant de lancer le Hard Reset :

  • Les photos, musiques et vidéos peuvent être sauvées avec une simple copie de fichier via la prise USB
  • Avec WP8.1, un backup de vos SMS, Applications et paramètres a été ajouté : Les paramètres et applications et SMS sont sauvegardés avec le menu Sauvegarde dans Paramètres.

(suite…)


Isolated Storage et Images sous Windows Phone 8

Je vous propose un petit tour d’horizon sur le stockage d’images dans l’Isolated Storage.

Pour rappel, l’Isolated storage est l’emplacement réservé à votre application Windows Phone pour le stockage de fichiers.

Quelles sont les implémentations qui permettent de récupérer une image déjà stockée dans cet espace ? Quelles sont les méthodes les plus efficaces ?

L’implémentation classique (Windows Phone 7)

C’est l’implémentation standard « old school » : j’utilise GetUserStoreForApplication() et OpenFile pour lire un Stream. Le Stream est ensuite lu par le BitmapImage et renvoyé dans une Action.

Remarque 1

BitmapImage nécessite de s’exécuter dans le ThreadUI principal, pour cela, on utilise

(suite…)


HTTP et images sous Windows Phone

Je continue avec l’affichage des Images et je vous propose cette fois de voir les implémentations possibles pour récupérer des images depuis le Web avec le protocole http.

L’implémentation classique :

urlImage contient l’url de l’image sous forme d’une châine de caractère : exemple : http://dev.bratched.fr/download/testimage1.png

La méthode utilise un WebRequest et lit la réponse de la requête sous forme d’un stream avec le request.EndGetResponse.

La partie

est très importante car elle va permettre d’utiliser le BitmapImage dans le Thread Principal même lorsque la méthode est appelée dans un Thread tournant en tâche de fond.

(suite…)


Utilisation des Images resources avec Windows Phone

Je vous propose un petit retour d’expérience sur l’utilisation des ressources dans le développement Windows Phone dans un modèle M-V-VM.

Différentes façon de coder

L’image que l’on souhaite afficher provient des ressources et devrait pouvoir s’afficher à travers une propriété Image de type BitmapImage dans un ViewModel. A noter que le dans l’exemple ci dessous, UIThreadPool permet d’afficher cette image même lorsque celle-ci est alimentée depuis un Thread qui tourne en tâche de fond.

Comment afficher une image incluse dans les ressources de l’application ?

Attention les 2 premières méthodes décrites sont à proscrire et à ne surtout pas reproduire. Allez jusqu’à la fin de l’article pour voir comment implémenter correctement l’affichage d’une image ressource. (suite…)


Mutualisation du code source dans les projets Windows et Windows Phone

La Portable Class Library (PCL)

La portable Class library (PCL) va nous permettre de mutualiser une grande partie du code à travers projets.

Il est possible depuis quelques années de partager du code PCL entre différents projets (Sliverlight, WPF, Windows Phone, Windows 8,…).
Plus les projets sont différents, plus le nombre de classes mutualisées diminue.

Il est important de voir que cette Library ne pourra être utilisée que pour des projets compatibles avec les options choisies.

A noter également que les versions Express de visual studio ne permettent pas de créer une PCL, mais accepte en revanche leur utilisation dans un projet.

Cette Library ne pourra pas non plus utiliser une library qui n’aurait pas à minima les mêmes options sélectionnées.

PCL_WindowsMenu

Exemple d’un projet Windows 8 et windows Phone.

Pour simplifier notre problématique nous allons parler uniquement des 2 plateformes Windows 8 et Windows Phone. Dans cet exemple nous souhaitons mutualiser le code entre ces multiples plateformes (Windows Phone 7, 8, 8.1, Windows 8,…).

(suite…)