WinRT gotcha – “one shot” Timer BackgroundTask does not unregister after the “one shot”

First up – sorry Jack Reacher fans, this post is not about the novel 🙂 .

In my latest Windows 10 app Event Countdowns I made a very unlucky mistake. When registering its Background Task that should update the app’s tiles every 30 minutes, I used the following code:

At first glance, nothing out of the ordinary. Or so I thought. One day after the app was released, I checked my pinned tile counting down to the premiere of Captain America: Civil War to find out with my immense surprise, that the time left on the tile was off by a day! I immediately checked the code and after a few minutes of intense debugging frenzy found the hidden evil – the second parameter of the TimeTrigger class’ constructor.

The second parameter, oneShot, specifies, whether the task will be triggered only once (value true) or periodically (value false).

My course of action was to just change true to false and because the app worked well when tested on my PC, I published the updated version to Store.

When the update arrived on my phone, I happily installed it, launched it and waited for the tiles to become “live” again. So I waited. And I waited. And I waited. And… nothing.

I was lost. The app worked perfectly on my PC and but tiles just didn’t update on my phone. So I went back to the drawing (Visual) board (Studio) and thought it all through again.

And then I saw it.

I naturally presumed, that once the oneShot Background Task is triggered, it is automatically unregistered by the system. In fact, that is not the case.

Once a oneShot trigger runs the Background Task, the task still stays registered!

This means that when I installed the updated app on my phone and run it, the if check for task != null  evaluated to true, because the task was still registered, although it has already fired once!

The final solution was then to force unregister the existing task to make sure the task is registered again with oneShot set to false.

The bug is finally captured and tiles live on!

 

Accent color in Windows 10 app taskbar icons

The latest Technical preview builds of Windows 10 (build 10547 onwards) received a very interesting treatment for taskbar app icons of several built-in apps like Store, Outlook Mail, Outlook Calendar or Photos app. If you look closely, you can see that not only are the app icons without any coloful square outline (as default for WinRT apps), but they also have several areas filled by the system’s accent color.

ColorizedColorizedBlue

I was wondering how this can be achieved. The transparent color is used to make the “transparent” portions of the icon, but the colored fill? I thought that it must be some kind of “default” color that will be replaced by accent color. And as it turned out, I was right!
PhotosAppIcon

If you look at the app assets of the Photos app, you can see a surprisingly large number of different icons for “AppList” or Square 44×44 logo. The normal icons for this kind of icon with appropriate scaling are there, but we can also are the ones with “.targetsize-{size}” suffix. These are offered for entry only for four different sizes – 256, 48, 24 and 16 in Visual Studio. But you can apparently offer the system much more resolutions for even more granular scaling – 100, 96, 80, 64, 40, 32 or 20.

But this is where things get even more interesting! There are more different suffixes the Photos app uses!

  • contrast-black_targetsize-{size} – white and transparent icon (for high-contrast accessibility setting)
  • contrast-white_targetsize-{size} – black and transparent icon (for high-contrast accessibility setting)
  • targetsize-{size}_altform-colorize – accent color colorized app icon for taskbar, this is what we are looking for!
  • targetsize-{size}_altform-unplated_contrast-white – app icon for taskbar with transparency for high-contrast
  • targetsize-{size}_altform-unplated – app icon for taskbar with transparency
  • targetsize-{size}_altform-fullcolor – icons used in File Explorer for associated files, this is a full-colored icon

This is a lot of undocumented file suffixes 🙂 . But the one we are interested here is targetsize-{size}_altform-colorize . This image contains transparent portions for areas of the icon, that are … well, transparent, any other colors for areas that are visible and finally full black areas for those parts that should be replaced by the system’s accent color!

Although the official resources and documentation is so far quite lacking, any developer can use these special icon types in their app right now. Just include the surplus images with the correct naming (same as Square 44×44 Logo) in your app’s assets and all will work as expected. This gives quite a big creative opportunities for developers to make their app look even more alive on Windows 10.

Sample project

You can download a sample project with colorized taskbar icon here. The project is basically the default blank Windows 10 application with just one additional image file in the Assets folder – Square44x44Logo.targetsize-64_altform-colorize.png. This one file does all the magic! Once you run the application, indeed – you will find yourself looking at a very nice colorized application icon on your taskbar. And once you change the system theme, the icon will change as well 🙂 .

Square44x44Logo.targetsize-64_altform-colorize

A Developer’s Guide to Windows 10

Now is the best time to learn Windows 10 development!

Microsoft has released an updated version of their developer’s guide to the new Universal Windows Platform for Windows 10 on Microsoft Virtual Academy. Featuring Andy Wigley and Shen Chauhan , this tutorial will walk you through everything new in the Windows 10 development world and will show off the “RTM” developer tools (which is a misnomer, because there is now nothing as RTM with Windows as a Service and build 10240 is just the first public release of Windows 10).

The guide covers everything from the basics of the platform itself, through XAML controls, adaptive layout and code, down to the nitty-gritty details and advanced techniques like the concept of “App services”.

So jump in and get your first-hand experience with Universal Windows Platform!