public static void AskReFlashTinker(ParticleDevice particleDevice, Page page, FrameworkElement placementTarget)
        {
            var flyout       = (Flyout)page.Resources["ReFlashTinkerFlyout"];
            var actionButton = FindNameInContainer <Button>(flyout.Content, "ReFlashTinkerButton");
            var cancelButton = FindNameInContainer <Button>(flyout.Content, "ReFlashCancelButton");

            actionButton.DataContext = particleDevice;

            RoutedEventHandler actionClickDelegate = null;
            RoutedEventHandler cancelClickDelegate = null;

            actionClickDelegate = new RoutedEventHandler(async delegate(object sender, RoutedEventArgs e) {
                flyout.Hide();
                actionButton.Click -= actionClickDelegate;

                switch (particleDevice.KnownProductId)
                {
                case ParticleDeviceType.ParticleCore:
                    await particleDevice.FlashKnownAppAsync("tinker", false);
                    break;

                case ParticleDeviceType.ParticlePhoton:
                    {
                        StorageFolder installationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                        StorageFile firmwareFile         = await installationFolder.GetFileAsync("Firmware\\PhotonTinker.bin");
                        Stream firmwareStream            = await firmwareFile.OpenStreamForReadAsync();
                        await particleDevice.FlashBinaryAsync(firmwareStream, "tinker.bin", false);
                    }
                    break;

                case ParticleDeviceType.ParticleP1:
                    {
                        StorageFolder installationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                        StorageFile firmwareFile         = await installationFolder.GetFileAsync("Firmware\\P1Tinker.bin");
                        Stream firmwareStream            = await firmwareFile.OpenStreamForReadAsync();
                        await particleDevice.FlashBinaryAsync(firmwareStream, "tinker.bin", false);
                    }
                    break;

                case ParticleDeviceType.ParticleElectron:
                    {
                        // TODO: Warn user about data usage
                        StorageFolder installationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                        StorageFile firmwareFile         = await installationFolder.GetFileAsync("Firmware\\ElectronTinker.bin");
                        Stream firmwareStream            = await firmwareFile.OpenStreamForReadAsync();
                        await particleDevice.FlashBinaryAsync(firmwareStream, "tinker.bin", false);
                    }
                    break;
                }
            });

            cancelClickDelegate = new RoutedEventHandler(delegate(object sender, RoutedEventArgs e) {
                flyout.Hide();
                cancelButton.Click -= cancelClickDelegate;
            });

            actionButton.Click += actionClickDelegate;
            cancelButton.Click += cancelClickDelegate;

            flyout.ShowAt(placementTarget);
        }