lunedì 24 dicembre 2012

myBattery for Windows Phone

MyBattery" is out, and it's free for some days!

Do you want to see your battery level in the live tile or in the lock screen?
NOW YOU CAN.. with the best app for this category!
Just pin the tile and check your battery level.

  • Modern UI with animations.
  • Battery percentage.
  • Remaining charge time.
  • Charts: from daily to all history.
  • Swap chart color.
  • Choose your images: colored or not.
  • Notifications in the Lock screen.

Windows Phone API limitations:
  • The live tile and the lock screen can be updated approximately every 30 minutes.
  • The live tile and the lock screen can show percentage from 0 to 99.
  • The notification icon in the lock screen can't change.

Check the marketplace now: Download myBattery


domenica 2 dicembre 2012

Windows Phone - Battery API

One of the new additions with the Windows Phone SDK 8.0, is the ability to query the battery charge.

Here the simple code:
Battery battery = Battery.GetDefault();
var percentage = battery.RemainingChargePercent;
var remainingTime = battery.RemainingDischargeTime;

And the event:
battery.RemainingChargePercentChanged += (s, args) =>
 // your code here


martedì 13 novembre 2012

myTasks for Windows Phone

With myTasks you can manage your daily tasks in easy steps.

Change the priority with a double tap and customize the UI as you wish.
Complete and restore the tasks with one tap.
If need, set the due date and/or the reminders.
With the new version you can backup and restore your data via SkyDrive.

UI customizations:
  • Task color
  • Priority color
  • Task font size
  • Priority font size
  • Live Tiles

Check the Marketplace and buy myTasks for only 0.99$.


sabato 10 novembre 2012

NowPlaying for Windows Phone

With NowPlaying you can listen your music and share the #NowPlaying hashtag in Twitter, Facebook and the other networks.

Gestures control:
  • Open your media library.
  • Play or pause the music.
  • Move to next or previous song.
  • Share your #NowPlaying status.

More features:
  • Live Tile customizable with the last song played.
  • Select your #NowPlaying style from the default formats or create your own with the simple editor: you have the full control.
  • Disable the Lockscreen from the application.

Check NowPlaying in the Marketplace and remember to swipe down to share!


domenica 4 novembre 2012

Windows 8 - Images and DPI

Windows 8 is DPI aware then the applications auto-scale images according to DPI and screen resolution:
  • 100% when the scale is not applied.
  • 140% when the screen resolution is 1920x1080 and for all devices with minimum 174 DPI.
  • 180% when the screen resolution is 2560x1440 and for all devices with minimum 240 DPI.

The developer can use vectorial elements like SVG or XAML without problems.

Otherwise when the developer uses the images raw, bitmap, png or jpg, he needs to create a file for every case.

He can explicit the scale factor in the file extension:

Or use the folder convention:

When the application don't has static images, it's possible to create a logic to have the same result from code behind.
switch (DisplayProperties.ResolutionScale)
 case ResolutionScale.Scale100Percent:
  img.Source = new BitmapImage(new Uri("url?s=100"));
 case ResolutionScale.Scale140Percent:
  img.Source = new BitmapImage(new Uri("url?s=140"));
 case ResolutionScale.Scale180Percent:
  img.Source = new BitmapImage(new Uri("url?s=180"));

 // some exception

The class DisplayProperties has some event to help the developer:
  • ColorProfileChanged: when the color profile changes.
  • LogicalDpiChanged: when the the pixel per inches (PPI) changes.
  • OrientationChanged: when device orientation changes.
  • StereoEnabledChanged: when the property StereoEnabled changes (3D stereoscopic).

domenica 28 ottobre 2012

Windows Phone - Localization

When you publish a Windows Phone application in the Marketplace, you have more visibility if you support the region language.

An easy way to build a localized app is to use resources file (.resx).

First of all remember to set the default "neutral" language in the project properties! This is an important step because the "AppResources.resx" file is used from all not specified languages.

Add new file, and name it "AppResources.resx" for default language. For a new language, just add a new resource named with the CultureInfo ISO letters:
  • for italian language.
  • AppResources.cs-CZ.resx for czech language.
  • for french language.
  • etc..
Remember to set all resource files to the public access modifier.

Now unload your project and edit the csproj file to add your supported language:

Create a class to get your resources.

public class LocalizedStrings
        private static AppResources localizedResources = new AppResources();

        public AppResources Strings
                return localizedResources;

In your xaml you need to declare your class as resource:
     <local:LocalizedStrings x:Key="LocalizedStrings"/>

Now you can use your localized string like this:
Text="{Binding Strings.Loading, Source={StaticResource LocalizedStrings}}"
Or from code behind:
txtLoading.Text = AppResources.Loading;

To test your app you can insert this code in application launching event:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("it-IT");
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("it-IT");

All CultureInfo codes here.

venerdì 19 ottobre 2012

Windows Phone - Get Album Art

When you use MediaPlayer class in Windows Phone, usually you want to get the album cover for the current song.
You can access the current track with the ActiveSong property. This property is exposed by the Queue of MediaPlayer. Then you can check out the album art.

This code is all you need:

if (MediaPlayer.Queue.ActiveSong.Album.HasArt)
 BitmapImage bmp = new BitmapImage();
 imgAlbum.Source = bmp;

sabato 6 ottobre 2012

Equality Comparer with Lambda

Today, it's normal to write code with LINQ and Lambda Expressions.
But when you need to use IEqualityComparer, it's not possibile to use a lambda predicate.
The Interface needs a class, then you have to create a new type that inherit from IEqualityComparer.

You can use this workaround:
public class EqualityComparer<T> : IEqualityComparer<T>
   private Func<T, T, bool> _fnEquals;
   private Func<T, int> _fnGetHashCode;
   public EqualityComparer(Func<T, T, bool> fnEquals, Func<T, int> fnGetHashCode)
      _fnEquals = fnEquals;
      _fnGetHashCode = fnGetHashCode;
   public bool Equals(T x, T y)
      return _fnEquals(x, y);
   public int GetHashCode(T obj)
      return _fnGetHashCode(obj);

The simple usage is:

Dictionary<int, string> d = new Dictionary<int, string>() { { 1, "a" }, { 2, "a" }, { 3, "b" } };

var d2 = d.Distinct(new EqualityComparer<KeyValuePair<int, string>>((kvp1, kvp2) => kvp1.Value == kvp2.Value, kvp => kvp.Value.GetHashCode()));

lunedì 24 settembre 2012

Windows Phone - Settings Page in 5 minutes

The best user experience for a settings page is: stay away from the save button.

People don't love to press the back button and lose all settings. Then it's better to save when the user does something.

Thanks to Jerry Nixon you can use this code and have a base framework for all your applications.

    public static bool EnableLocation
        get { return Get("EnableLocation", false); }
        private set { Set("EnableLocation", value); }

    public static event PropertyChangedEventHandler SettingChanged;

    private static T Get<T>(string key, T otherwise)
            return (T)IsolatedStorageSettings.ApplicationSettings[key];
        catch { return otherwise; }

    private static void Set<T>(string key, T value)
        IsolatedStorageSettings.ApplicationSettings[key] = value;
        if (SettingChanged != null)
            SettingChanged(null, new PropertyChangedEventArgs(key));

The code is very easy:
  • the "Get" function return the default value if the key don't exists.
  • the "Set" function uses an event to immediatly reflect changes into your apps.
  • the functions use "Generics".


sabato 15 settembre 2012

myMoneyBook for Windows Phone

"myMoneyBook" is an easy way to manage your personal finances. You can customize catogories according to your needs, and set a monthly budget to keep track of what you spent. The dashboard summarize the balance with simple indicators and have two big tiles to speed up your operations.
All screens are in perfect Windows Phone style.
It's possible to set your privacy with a password.

There is a fast option to backup and restore all data via SkyDrive, and to export the records in file .csv.

The landscape mode show customizable and zoomable charts for detailed statistics.

"myMoneyBook" offers also customizable live tile:
  • Change image
  • Enable budget alert
  • Show today balance
  • Show monthly balance
  • Show total balance

At moment myMoneyBook is translated in Italian, English and Czech language.

More screenshots:

giovedì 13 settembre 2012

Windows Phone - Live Tiles with Telerik

The default Windows Phone framework offers a simple template for tiles:
  • Static background image from application or from url.
  • Title.
  • Number (top right).
  • A back message.

With Telerik RadControl for Windows Phone you have more power in your hands!


"LiveTileHelper" class helps you to create dynamic live tiles with your own design and your own content.

The "RadExtendedTileData" extends the standard tile data with two properties VisualElement and BackVisualElement.
Now the amazing thing: this properties accept UIElement. Yes, UIElement!!

Now let's code...
 new RadExtendedTileData() 
  Title = "My front title",
  VisualElement = new MyUserControl(),
  BackTitle = "My back title" 
  BackContent = "My back message", 
  BackVisualElement = new MyUserControl2(), 
 new Uri("/MainPage.xaml?param=myparam", UriKind.RelativeOrAbsolute)

You can customize MyUserControl and MyUserControl2 as you want, the only limit is your imagination.

Then, why should you use this controls?
  • Easyness
  • More features
  • Time saver
  • Support and help

And remember this: a good app, has a good live tile.

sabato 8 settembre 2012

Windows Phone - Low memory devices

SDK 7.1.1 includes features specifics to developing for 256MB devices (Nokia Lumia 610 and others).

Low memory devices have some limitations, then you need to check the memory size and if needed, disable some features to target the largest possible market.

First, you need this MemoryHelper:
public static class MemoryHelper
 public static bool IsLowMemDevice { get; set; }

 static MemoryHelper()
     Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
    if (result < 94371840L) IsLowMemDevice = true; else IsLowMemDevice = false;
   catch (ArgumentOutOfRangeException)
     //windows phone OS not updated, then 512mb
     IsLowMemDevice = false;

Now you can easy detect device type:
if (MemoryHelper.IsLowMemoryDevice)
 // do some work

  • PeriodicTask and ResourceIntensiveTask classes are not supported to 256MB phones. This background agents throw an exception if you try to schedule them on this devices.
  • Check your app with Windows Phone Memory Profiler (it is included in VS2010).
  • Use WebBrowserTask instead of the <WebBrowser /> control to display web pages.
  • Use BingMapsTask instead <Map /> control.
  • Consider to reduce image quality and reduce the number of the animations.
  • Avoid long lists of data. The best practice is to use data virtualization.
  • Consider to disable page transitions.
  • Remember to test your application with all two emulators!

giovedì 6 settembre 2012

Windows Phone - Keyboard suggestions

In Windows Phone standard apps (like mail and messaging), when you enter a text, you will see the list of suggestions for the text you are typing.

In your app, every Textbox has the ability to have an InputScope assigned to it.

<TextBox InputScope="Text" /> 
InputScope help the developer to assign also the good keyboard for the context:
  • URL: this keyboard gives you a ".com" button to finish typing your URLs, but that button, with a long-tap, will also expand to show you .net, .org, .edu, and
  • TelephoneNumber: it gives the user a numeric dial pad instead of an alphabetic keyboard.
  • EmailNameOrAddress: it gives a period, an @ symbol and ".com" button.

You can find more InputScopeNameValue enumerator on MSDN.

Windows Phone - Share Status Task

Microsoft made available to developers some Launchers and Choosers.
Now is very easy to share your status in the most popular social networks with a simple code:

ShareStatusTask shareStatusTask = new ShareStatusTask();

shareStatusTask.Status = "Hello, today is a great day";