Microsoft Launcher review: A beautiful Android experience


After Microsoft gives up on Windows 10 Mobile, Microsoft Launcher is the upgraded version of the Microsoft Garage project Arrow Launcher, and we covered the key changes that came with that upgrade last week. It's free and can be picked up from the Google Play Store.

After some heavy usage over the last few days, we're breaking down what works, what doesn't, and where Microsoft should take their launcher from here.

As Microsoft Launcher gains more publicity, there have been some rumblings about how it doesn't look like Windows 10 Mobile. It's important to point out that it doesn't seem to be the goal of Microsoft to make Android look exactly like Windows 10 Mobile. For example, you won't find Live Tiles anywhere in the launcher. If you're looking for as close to a facsimile of Windows 10 Mobile on Android as possible, there are other options, such as Squarehome 2.

But this isn't a bad thing. Microsoft isn't trying to turn Android into Windows 10 Mobile, they are trying to integrate Microsoft services into the Android experience while also adding some design elements that will be familiar to Windows users. And in that respect, Microsoft Launcher is phenomenal.

For example, there's also an option for a transparent theme. With all the transparent design elements coming in the Windows 10 Fall Creators Update, having a glass effect throughout all of your devices helps them feel more like siblings. Microsoft Launcher's transparency is found on every page in the launcher, including your newsfeed, calendar, people section, and more.


Arrow Launcher already had features such as Wunderlist and Outlook calendar integration. Microsoft Launcher takes that idea further by bringing "Continue on PC" to Android. This lets you start doing things on your phone and easily jump to another device. This will be familiar to anyone who has taken advantage of Project Rome. It's a nice addition to Android and will hopefully get better over time. You can take a document you're working on and push it over to your PC. It also works with links, even if you're browsing on Chrome on your phone and have Edge as the default browser on PC. It works fairly well, though it can take a couple seconds to open on your PC.

Microsoft gives up on Windows 10 Mobile


The company's Windows 10 chief has tweeted that developing new features and hardware for the Mobile version of the OS was no longer a "focus".

Joe Belfiore added that he had also switched to Android himself.

Windows 10 Mobile tried to attract users by letting them run the same "universal apps" on both their PCs and handsets, but the concept failed to catch on.

The OS accounted for just 0.03% of the global market - based on smartphone shipments - between April and June, according to research company IDC.

The market intelligence provider said the news had been a long time coming.

"There wasn't a wide range of devices running Windows 10 Mobile, so it wasn't attractive to retailers or operators," said IDC's Francisco Jeronimo.

"And from a consumer perspective, the operating system didn't provide as good an experience as Android or iOS."

Mr Belfiore began a series of tweets on Sunday by discussing the recent launch of a test version of Microsoft's Edge web browser for Android and iOS - the latest in a series of releases of its core software for rival mobile platforms.

He then went on to respond to questions about whether there was any point sticking with Windows 10 Mobile.

He said that while Microsoft would support the "many companies" that had adopted the platform, he had switched to Android for the diversity of its apps and hardware.

"Of course we'll continue to support the platform... bug fixes, security updates, et cetera," he said.

"But building new features or hardware is not the focus."

Xamarin Forms Repeater View

A ListView is a kind of repeater but isn’t always what I want. It’s surprising something like this isn’t included in the framework but making your own is fairly simple.

namespace PSC.Controls
    /// <summary>
    /// Repeater view.
    /// </summary>
    public class RepeaterView : StackLayout
        /// <summary>
        /// The item template property.
        /// </summary>
        public static readonly BindableProperty ItemTemplateProperty = 
                    propertyChanged: (bindable, value, newValue) => 

        /// <summary>
        /// The items source property.
        /// </summary>
        public static readonly BindableProperty ItemsSourceProperty = 
                propertyChanged: (bindable, value, newValue) => 

        /// <summary>
        /// Gets or sets the items source.
        /// </summary>
        /// <value>The items source.</value>
        public IEnumerable ItemsSource
            get => (IEnumerable)this.GetValue(ItemsSourceProperty);
            set => this.SetValue(ItemsSourceProperty, value);

        /// <summary>
        /// Gets or sets the item template.
        /// </summary>
        /// <value>The item template.</value>
        public DataTemplate ItemTemplate
            get => (DataTemplate)this.GetValue(ItemTemplateProperty);
            set => this.SetValue(ItemTemplateProperty, value);

        /// <summary>
        /// Populate the specified bindable.
        /// </summary>
        /// <returns>The populate.</returns>
        /// <param name="bindable">Bindable.</param>
        private static void Populate(BindableObject bindable)
            var repeater = (RepeaterView)bindable;

            // Clean

            // Only populate once both properties are received
            if (repeater.ItemsSource == null || 
                repeater.ItemTemplate == null)

            foreach (var viewModel in repeater.ItemsSource)
                var content = repeater.ItemTemplate.CreateContent();
                if (!(content is View) && !(content is ViewCell))
                    throw new Exception(
                          $"Invalid visual object {nameof(content)}");

                var view = content is View ? content as View : 
                view.BindingContext = viewModel;


The view is based on StackLayout which will take care of positioning the items.

There are a couple of bindable properties – ItemTemplate for the item layout and ItemsSource which provides the items. Note that ItemsSource hooks an action to PropertyChanging – I’ll come back to this later on.

Usage in XAML is similar to ListView, with an ItemTemplate, DataTemplate, and ViewCell.

<ui:Repeater x:Name="MainRepeater">
                <StackLayout Orientation="Horizontal">
                    <Label Text="{Binding Title}" 
                    <Button Text="Select" />

Don't forget to define ui

<ContentPage xmlns="" 

Hey Cortana, open Alexa: Microsoft and Amazon’s first-of-its-kind collaboration


I talk to Cortana every day — at home, work and on-the-go — to get information about my day, to set reminders so I don’t forget things, and to answer my questions. But I don’t just use one digital assistant. I also frequently talk to Alexa to listen to audio books or to add things to my shopping list. Because people use and interact with all kinds of products, we’re very excited to announce a first-of-its-kind collaboration with Amazon between Cortana and Alexa that will offer more choice, value and access to both intelligent personal assistants.

Available later this year, this collaboration will allow you to access Alexa via Cortana on Windows 10 PCs, followed by Android and iOS in the future. Conversely, you’ll be able to access Cortana on Alexa-enabled devices like the Amazon Echo, Echo Dot and Echo Show.

As our CEO, Satya Nadella, said in today’s Amazon press release, the collaboration between Microsoft and Amazon reflects our belief that when people and technology work together, everybody wins:

“Ensuring Cortana is available for our customers everywhere and across any device is a key priority for us. Bringing Cortana’s knowledge, Office 365 integration, commitments and reminders to Alexa is a great step toward that goal.”

By bringing Cortana to Alexa and Alexa to Cortana, I’m excited that we’re adding more value and choice for consumers and developers alike. Cortana users will be able to have Alexa shop on and manage their Amazon orders and access many of Alexa’s third-party skills by asking Cortana to open Alexa, just as Alexa users will have access to Cortana’s world knowledge and helpful productivity features such as calendar management, day at a glance and location-based reminders simply by asking Alexa to open Cortana.

Xamarin, no show images in the device but only in the simulator

In my project I have some images to display. The funny thing is I can see images in the simulator but not in a real device.


Simulator-Screen Shot

iPhone (real device)



iPhone is case-sensitive and the name of your images must be specified correctly. iOS Simulator probably is not case-sensitive and then it displays images with every name.

Xamarin Forms and FingerPrint (iOS and Android only)

In this post I explain how to use Finger Print in your app. This app is working only in iOS or Android.

Add NuGet

In your solution, you have to add a package called Plugin.Fingerprint.

XamarinForms Fingerprint Nuget

Only for Android, in your Droid project add another package called Plugin.CurrentActivity. Also, you have to add a permission for fingerprint (and one specific for Samsung).

<uses-permission android:name="android.permission.USE_FINGERPRINT" />
       android:name="" />


Now we implement in our PCL project the request for fingerprint. First of all we have to check if a device supports fingerprints. If yes, we show the typical dialog.

XamarinForms Finferprint Dialog

Now I added a button in the XAML and its name is buttonFingerPrint. For it in the code behind, I added a Clicked event. Then In the new function, I'm checking is the device supports fingerprint.

var result = await CrossFingerprint.Current.IsAvailableAsync(true);

The function IsAvailableAsync as true as parameter but it is useful only for iOS to have a code in return. If the device supports fingerprint, I'll show a dialog request with this code:

if (result) {
    var auth = await CrossFingerprint.Current
               .AuthenticateAsync("Authenticate access to fingerprint");
    if (auth.Authenticated) {
        await DisplayAlert("Whoooowhooo!", "Authentication is done!", "Ok");
    else {
        await DisplayAlert("Something wrong", 
                           "There is a problem with your finger", "Ok");
else {
    await DisplayAlert("Finger print not available", 
                       "You can't use your finger for using this app", "Ok");

Testing on an emulator


If you test your project in an iOS device, be careful to allow to use Touch ID from Hardware menu with Toggle Enrolled State. When you want to test your virtual finger, select Matching Touch.

XamarinForms Fingerprint iOS Emulator


Let's go to the Android emulator. You need to set up fingerprint under Settings. From your Terminal call (5554 is the default port of an Android emulator but it can be different in your computer)

telnet 5554

Then you have to copy an auth token from an hidden file called .emulator_console_auth_token in your profile. In the terminal execute

auth <yourcode>

Now open Settings > Security > Fingerprint and follow the instruction. When you have to recognise your finder, come back to the terminal and type

finger touch 1

Then you can continue with the wizard.

Now you can execute your app. When your app ask your fingerprint, come back to the Terminal and type again

finger touch 1

Android is always easy to use! You find my solution on GitHub.

Happy coding!

Xamarin, Android and starting a service at device boot

In my previous post called Xamarin: how to Start an Application at Device Boot in Android, I explained how you can change your Android Xamarin's project to launch your app at the device boot.

It is a good start but my problem was a bit more complex. I want to create a background service to track the geolocation of a device. I googled a lot to find a solution without a great success. Then I started to implement my code with some tests. Finally, I found a good way and I'm sharing with you it.

Create a Broadcast Receiver

What is a Broadcast Receiver

A broadcast receiver is a component that responds to system-wide broadcast announcements. Many broadcasts originate from the system—for example, a broadcast announcing that the screen has turned off, the battery is low, or a picture was captured. Applications can also initiate broadcasts—for example, to let other applications know that some data has been downloaded to the device and is available for them to use. Although broadcast receivers don't display a user interface, they may create a status bar notification to alert the user when a broadcast event occurs. More commonly, though, a broadcast receiver is just a "gateway" to other components and is intended to do a very minimal amount of work.

How to implement a Broadcast Receiver

I show you now two implementations of it:

  • BootReceiver: this receiver is responsible to do something when a device starts. For that, we have to allow the app to read this event. In your AndroidManifest.xml you must add a permission called RECEIVE_BOOT_COMPLETED.
  • AirplaneModeReceiver: this receiver filters only the broadcast for ActionAirplaneModeChanged.

I start to show you the second one because it is more simple.

    [IntentFilter(new[] { Android.Content.Intent.ActionAirplaneModeChanged })]
	public class AirplaneModeReceiver : BroadcastReceiver
		private static readonly string TAG = typeof(AirplaneModeReceiver).FullName;

		public override void OnReceive(Context context, Intent intent)
			Log.WriteLine(LogPriority.Debug, TAG, "AirplaneModeReceiver OnReceive Mode " + 

		private static bool isAirplaneModeOn(Context context)
			var airplane = Android.Provider.Settings.Global.GetInt(context.ContentResolver, 
			return airplane != 0;

Although you can find a lot of posts where people said that you have to declare your broadcast in the AndroidManifest, I discover if I add the broadcast in the AndroidManifest, the broadcast won't work.

This is the first broadcast. Basically when a user taps on AirPlaneMode, this broadcast receives the status with isAirplaneModeOn function and writes this change in the logs.

BootReceiver is more interesting. When a device is booting, this broadcast starts a service to track the position. Also, in my code you find TimeService: I use this service to check if the service is starting properly and the notification is working and updating.

    [IntentFilter(new[] { Android.Content.Intent.ActionBootCompleted })]
    public class BootReceiver : BroadcastReceiver
        private static readonly string TAG = typeof(BootReceiver).FullName;

        public override void OnReceive(Context context, Intent intent)
            Log.WriteLine(LogPriority.Debug, TAG, "BootReceiver OnReceive");

            Intent i = new Intent(context, typeof(GPSService));
            Log.WriteLine(LogPriority.Debug, TAG, 
                          "BootReceiver OnReceive LocationService started");

			i = new Intent(context, typeof(TimerService));
			Log.WriteLine(LogPriority.Debug, TAG, 
                          "BootReceiver OnReceive TimerService started");

The interesting part of this code is when I start a service. Basically, I define a new Intent with the type of service I want to call, then I start the service with the context.

Although you find a lot of posts on line, the right way to define a service in your AndroidManifest is the following:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="" android:versionCode="1" android:versionName="1.0" package="">
	<uses-sdk android:minSdkVersion="15" />
	<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
	<uses-permission android:name="android.permission.INTERNET" />
	<application android:label="LocationTest">
		<service android:name=".TimerService" />
        <service android:name=".LocationService" />

I have publish a complete solution of that on GitHub. Happy coding!

Xamarin: how to Start an Application at Device Bootup in Android

This tutorial will explain to stat an application while the Android device boot-up. For this, we need to  listen to the BOOT_COMPLETED action and react to it.

BOOT_COMPLETED is a Broadcast Action that is broadcast once, after the system has finished booting. You can listen to this action by creating a BroadcastReceiver that then starts your launch Activity when it receives an intent with the BOOT_COMPLETED action.

Add this permission to your manifest

In your Android.Manifest you must add thi permission:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />



Then open this file and add the following rows under Application:

    <receiver android:name=".BootReceiver" android:enabled="true" 
              android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />

In this example, we will create a new BroadcastReceiver called BootReceiver.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace BackgroundTest.Droid.BackgroundServices
    public class BootReceiver : BroadcastReceiver
        public override void OnReceive(Context context, Intent intent)
            Intent i = new Intent(context, typeof(MainActivity));

Install the application, and then restart the device. You can see the application will start after the device restarts. An implementation of background services starting with Activity, it explains here.

Source code on GitHub.

Happy coding!

Eat Cookies!

What are Cookies?

Cookies are data, stored in small text files, on your computer.

When a web server has sent a web page to a browser, the connection is shut down, and the server forgets everything about the user.

Cookies were invented to solve the problem "how to remember information about the user":

  • When a user visits a web page, his name can be stored in a cookie.
  • Next time the user visits the page, the cookie "remembers" his name.

Cookies are saved in name-value pairs like:

username = John Doe

When a browser requests a web page from a server, cookies belonging to the page is added to the request. This way the server gets the necessary data to "remember" information about users.


function deleteCookie(cname) {
    setCookie(name, '', 1);
    document.cookie = name + '=; Expires=Thu, 01 Jan 1970 " + 
                      "00:00:01 GMT; path=/;';

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ') {
            c = c.substring(1);
        if (c.indexOf(name) === 0) {
            return c.substring(name.length, c.length);
    return "";

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires + 
                      "; path=/;";

Happy coding!

Bill Gates made these 15 predictions in 1999 — and it's scary how accurate he was


After reading ’Business @ the Speed of Thought’, my respect for Bill Gates has increased exponentially. That isn’t to say that I wasn’t a fan of his before. I’ve always been impressed by the strategies that Microsoft carried out in its early days, but that doesn’t come close to how impressed I am now. In this book, published in 1999, Gates outlined how information systems, the Internet, and technology in general would change the way that businesses function. Along the way, he made some incredibly accurate predictions, most of which have since become huge industries: smart phones, smart homes, social networks, and an array of other uses for the Internet-a few of which have yet to be developed.

Gates presents a few key elements for a good information system. While we have to keep in mind that the book was written in the late 90’s, many of these questions are still hardly answered by today’s technology, and present opportunities for new businesses.


  1. Automated price comparison services will be developed, allowing people to see prices across multiple websites, making it effortless to find the cheapest product for all industries.
  2. People will carry around small devices that allow them to constantly stay in touch and do electronic business from wherever they are. They will be able to check the news, see flights they have booked, get information from financial markets, and do just about anything else on these devices.
  3. People will pay their bills, take care of their finances, and communicate with their doctors over the Internet.
  4. “Personal companions” will be developed. They will connect and sync all your devices in a smart way, whether they are at home or in the office, and allow them to exchange data. The device will check your email or notifications, and present the information that you need. When you go to the store, you can tell it what recipes you want to prepare, and it will generate a list of ingredients that you need to pick up. It will inform all the devices that you use of your purchases and schedule, allowing them to automatically adjust to what you’re doing.
  5. Constant video feeds of your house will become common, which inform you when somebody visits while you are not home.
  6. Private websites for your friends and family will be common, allowing you to chat and plan for events.
  7. Software that knows when you’ve booked a trip and uses that information to suggest activities at the local destination. It suggests activities, discounts, offers, and cheaper prices for all the things that you want to take part in.
  8. While watching a sports competition on television, services will allow you to discuss what is going on live, and enter contest where you vote on who you think will win.
  9. Devices will have smart advertising. They will know your purchasing trends, and will display advertisements that are tailored toward your preferences.
  10. Television broadcast will include links to relevant websites and content that complement what you are watching.
  11. Residents of cities and countries will be able to have Internet-based discussions concerning issues that affect them, such as local politics, city planning or safety.
  12. Online communities will not be influenced by your location, but rather, your interest.
  13. Project managers looking to put a team together will be able to go online, describe the project, and receive recommendations for available people who would fit their requirements.
  14. Similarly, people looking for work will be able to find employment opportunities online by declaring their interest, needs, and specialized skills.
  15. Companies will be able to bid on jobs, whether they are looking for a construction project, a movie production, or an advertising campaign. This will be efficient for both big companies that want to outsource work that they don’t usually face, businesses looking for new clients, and corporations that don’t have a go-to provider for the said service.

The original post is here.



Planet Xamarin

Planet Xamarin