GetUserDataDirectory() public static method

User specific data
public static GetUserDataDirectory ( ) : string
return string
        public static void Reload()
        {
            string paramMetaDataXMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(), ConfigurationManager.AppSettings["ParameterMetaDataXMLFileName"]);

            string paramMetaDataXMLFileNameBackup = String.Format("{0}{1}{2}", Settings.GetRunningDirectory(),
                                                                  Path.DirectorySeparatorChar, ConfigurationManager.AppSettings["ParameterMetaDataXMLFileNameBackup"]);

            try
            {
                if (File.Exists(paramMetaDataXMLFileName))
                {
                    _parameterMetaDataXML = XDocument.Load(paramMetaDataXMLFileName);
                }
            }
            catch
            {
            }

            try
            {
                // error loading the good file, load the backup
                if (File.Exists(paramMetaDataXMLFileNameBackup) && _parameterMetaDataXML == null)
                {
                    _parameterMetaDataXML = XDocument.Load(paramMetaDataXMLFileNameBackup);
                    Console.WriteLine("Using backup param data");
                }
            }
            catch
            {
            }
        }
        public static void Reload()
        {
            string paramMetaDataXMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(), "ParameterMetaData.xml");

            string paramMetaDataXMLFileNameBackup = String.Format("{0}{1}{2}", Settings.GetRunningDirectory(),
                                                                  Path.DirectorySeparatorChar, "ParameterMetaDataBackup.xml");

            try
            {
                log.Debug(paramMetaDataXMLFileName);

                if (File.Exists(paramMetaDataXMLFileName))
                {
                    _parameterMetaDataXML = XDocument.Load(paramMetaDataXMLFileName);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }

            try
            {
                log.Debug(paramMetaDataXMLFileNameBackup);
                // error loading the good file, load the backup
                if (File.Exists(paramMetaDataXMLFileNameBackup) && _parameterMetaDataXML == null)
                {
                    _parameterMetaDataXML = XDocument.Load(paramMetaDataXMLFileNameBackup);
                    Console.WriteLine("Using backup param data");
                }
            }
            catch
            {
            }
        }
        public static void Reload()
        {
            string paramMetaDataXMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(), "apm.pdef.xml");

            try
            {
                if (File.Exists(paramMetaDataXMLFileName))
                {
                    _parameterMetaDataXML = XDocument.Load(paramMetaDataXMLFileName);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
        }
        /// <summary>
        /// retrived parameter info from the net
        /// </summary>
        public static void GetParameterInformation(string urls, string file = null)
        {
            var parameterLocationsString = urls;

            string XMLFileName =
                String.Format("{0}{1}", Settings.GetUserDataDirectory(), "ParameterMetaData.xml");

            if (file != null)
            {
                XMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(), file);
            }

            if (!String.IsNullOrEmpty(parameterLocationsString))
            {
                var parameterLocations = parameterLocationsString.Split(';').ToList();
                parameterLocations.RemoveAll(String.IsNullOrEmpty);

                // precache all the base urls
                Parallel.ForEach(parameterLocations,
                                 parameterLocation =>
                {
                    // load the base urls
                    var dataFromAddress = ReadDataFromAddress(parameterLocation.Trim());
                    // load the group urls
                    ParseGroupInformation(dataFromAddress, null, parameterLocation.Trim(), string.Empty,
                                          string.Empty);
                });

                using (var objXmlTextWriter = new XmlTextWriter(XMLFileName, null))
                {
                    objXmlTextWriter.Formatting = Formatting.Indented;
                    objXmlTextWriter.WriteStartDocument();

                    objXmlTextWriter.WriteStartElement("Params");

                    foreach (string parameterLocation in parameterLocations)
                    {
                        string element = "none";

                        if (parameterLocation.ToLower().Contains("arducopter"))
                        {
                            element = "ArduCopter2";
                        }
                        else if (parameterLocation.ToLower().Contains("arduplane"))
                        {
                            element = "ArduPlane";
                        }
                        else if (parameterLocation.ToLower().Contains("rover"))
                        {
                            element = "ArduRover";
                        }
                        else if (parameterLocation.ToLower().Contains("ardusub"))
                        {
                            element = "ArduSub";
                        }
                        else if (parameterLocation.ToLower().Contains("tracker"))
                        {
                            element = "ArduTracker";
                        }

                        // Read and parse the content.
                        string dataFromAddress = ReadDataFromAddress(parameterLocation.Trim());

                        if (String.IsNullOrEmpty(dataFromAddress)) // 404
                        {
                            continue;
                        }

                        if (dataFromAddress.Length < 200) // blank template file
                        {
                            continue;
                        }

                        // Write the start element for this parameter location
                        objXmlTextWriter.WriteStartElement(element);
                        ParseParameterInformation(dataFromAddress, objXmlTextWriter, string.Empty, string.Empty, element);
                        ParseGroupInformation(dataFromAddress, objXmlTextWriter, parameterLocation.Trim(), string.Empty, element);

                        // Write the end element for this parameter location
                        objXmlTextWriter.WriteEndElement();
                    }

                    objXmlTextWriter.WriteEndElement();

                    // Clear the stream
                    objXmlTextWriter.WriteEndDocument();
                    objXmlTextWriter.Flush();
                    objXmlTextWriter.Close();
                }

                XElement root = XElement.Load(XMLFileName);
                foreach (var vech in root.Elements())
                {
                    var paramlist = vech.Elements().OrderBy(xt => xt.Name.ToString()).ToArray();

                    vech.RemoveAll();

                    foreach (var item in paramlist)
                    {
                        vech.Add(item);
                    }
                }
                root.Save(XMLFileName);
            }
        }
示例#5
0
        /// <summary>
        /// retrived parameter info from the net
        /// </summary>
        public static void GetParameterInformation(string urls = null, string file = null)
        {
            string parameterLocationsString = ConfigurationManager.AppSettings["ParameterLocations"];

            if (urls != null)
            {
                parameterLocationsString = urls;
            }

            string XMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(),
                                               ConfigurationManager.AppSettings["ParameterMetaDataXMLFileName"]);

            if (file != null)
            {
                XMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(), file);
            }

            if (!String.IsNullOrEmpty(parameterLocationsString))
            {
                var parameterLocations = parameterLocationsString.Split(';').ToList();
                parameterLocations.RemoveAll(String.IsNullOrEmpty);

                using (var objXmlTextWriter = new XmlTextWriter(XMLFileName, null))
                {
                    objXmlTextWriter.Formatting = Formatting.Indented;
                    objXmlTextWriter.WriteStartDocument();

                    objXmlTextWriter.WriteStartElement("Params");

                    foreach (string parameterLocation in parameterLocations)
                    {
                        string element = "none";

                        if (parameterLocation.ToLower().Contains("arducopter"))
                        {
                            element = MainV2.Firmwares.ArduCopter2.ToString();
                        }
                        else if (parameterLocation.ToLower().Contains("arduplane"))
                        {
                            element = MainV2.Firmwares.ArduPlane.ToString();
                        }
                        else if (parameterLocation.ToLower().Contains("rover"))
                        {
                            element = MainV2.Firmwares.ArduRover.ToString();
                        }
                        else if (parameterLocation.ToLower().Contains("ardusub"))
                        {
                            element = MainV2.Firmwares.ArduSub.ToString();
                        }
                        else if (parameterLocation.ToLower().Contains("tracker"))
                        {
                            element = MainV2.Firmwares.ArduTracker.ToString();
                        }

                        // Read and parse the content.
                        string dataFromAddress = ReadDataFromAddress(parameterLocation.Trim());

                        if (String.IsNullOrEmpty(dataFromAddress)) // 404
                        {
                            continue;
                        }

                        if (dataFromAddress.Length < 200) // blank template file
                        {
                            continue;
                        }

                        // Write the start element for this parameter location
                        objXmlTextWriter.WriteStartElement(element);
                        ParseParameterInformation(dataFromAddress, objXmlTextWriter, string.Empty);
                        ParseGroupInformation(dataFromAddress, objXmlTextWriter, parameterLocation.Trim());

                        // Write the end element for this parameter location
                        objXmlTextWriter.WriteEndElement();
                    }

                    objXmlTextWriter.WriteEndElement();

                    // Clear the stream
                    objXmlTextWriter.WriteEndDocument();
                    objXmlTextWriter.Flush();
                    objXmlTextWriter.Close();
                }
            }
        }
示例#6
0
        static void DoUpdateWorker_DoWork(IProgressReporterDialogue sender)
        {
            // TODO: Is this the right place?

            #region Fetch Parameter Meta Data

            var progressReporterDialogue = ((IProgressReporterDialogue)sender);
            progressReporterDialogue.UpdateProgressAndStatus(-1, "Getting Updated Parameters");

            try
            {
                if (MissionPlanner.Utilities.Update.dobeta)
                {
                    ParameterMetaDataParser.GetParameterInformation(ConfigurationManager.AppSettings["ParameterLocationsBleeding"], String.Format("{0}{1}", Settings.GetUserDataDirectory(), "ParameterMetaDataBackup.xml"));
                }
                else
                {
                    ParameterMetaDataParser.GetParameterInformation(ConfigurationManager.AppSettings["ParameterLocations"], String.Format("{0}{1}", Settings.GetUserDataDirectory(), "ParameterMetaDataBackup.xml"));
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.ToString());
                CustomMessageBox.Show("Error getting Parameter Information");
            }

            #endregion Fetch Parameter Meta Data

            progressReporterDialogue.UpdateProgressAndStatus(-1, "Getting Base URL");

            try
            {
                File.WriteAllText(
                    Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + "writetest.txt",
                    "this is a test");
            }
            catch (Exception ex)
            {
                log.Info("Write test failed");
                throw new Exception("Unable to write to the install directory", ex);
            }
            finally
            {
                try
                {
                    File.Delete(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar +
                                "writetest.txt");
                }
                catch
                {
                    log.Info("Write test cleanup failed");
                }
            }

            // check for updates
            //  if (Debugger.IsAttached)
            {
                //      log.Info("Skipping update test as it appears we are debugging");
            }
            //  else
            {
                updateCheckMain(progressReporterDialogue);
            }
        }
示例#7
0
        /// <summary>
        /// retrived parameter info from the net
        /// </summary>
        public static void GetParameterInformation(string urls, string file = null)
        {
            httpClient = new HttpClient();
            if (!String.IsNullOrEmpty(Settings.Instance.UserAgent))
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", Settings.Instance.UserAgent);
            }
            httpClient.Timeout = TimeSpan.FromSeconds(30);

            var parameterLocationsString = urls;

            string XMLFileName =
                String.Format("{0}{1}", Settings.GetUserDataDirectory(), "ParameterMetaData.xml");

            if (file != null)
            {
                XMLFileName = String.Format("{0}{1}", Settings.GetUserDataDirectory(), file);
            }

            if (!String.IsNullOrEmpty(parameterLocationsString))
            {
                var parameterLocations = parameterLocationsString.Split(';').ToList();
                parameterLocations.RemoveAll(String.IsNullOrEmpty);

                ParallelOptions opt = new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 3
                };

                // precache all the base urls
                Parallel.ForEach(parameterLocations, opt,
                                 parameterLocation =>
                {
                    // load the base urls
                    var dataFromAddress = ReadDataFromAddress(parameterLocation.Trim());
                    // load the group urls
                    ParseGroupInformation(dataFromAddress, null, parameterLocation.Trim(), string.Empty,
                                          string.Empty);
                });

                using (var objXmlTextWriter = new XmlTextWriter(XMLFileName, null))
                {
                    objXmlTextWriter.Formatting = Formatting.Indented;
                    objXmlTextWriter.WriteStartDocument();

                    objXmlTextWriter.WriteStartElement("Params");

                    parameterLocations.Sort((a, b) => GetVehicle(a).CompareTo(GetVehicle(b)));

                    var lastelement = "";
                    foreach (string parameterLocation in parameterLocations)
                    {
                        string element = GetVehicle(parameterLocation.ToLower());

                        // Read and parse the content.
                        string dataFromAddress = ReadDataFromAddress(parameterLocation.Trim());

                        if (String.IsNullOrEmpty(dataFromAddress)) // 404
                        {
                            continue;
                        }

                        if (dataFromAddress.Length < 200) // blank template file
                        {
                            continue;
                        }

                        // write start and end
                        if (lastelement != element)
                        {
                            // Write the end element for this parameter location
                            if (lastelement != "")
                            {
                                objXmlTextWriter.WriteEndElement();
                            }
                            // Write the start element for this parameter location
                            objXmlTextWriter.WriteStartElement(element);
                            lastelement = element;
                        }
                        ParseParameterInformation(dataFromAddress, objXmlTextWriter, string.Empty, string.Empty, element);
                        ParseGroupInformation(dataFromAddress, objXmlTextWriter, parameterLocation.Trim(), string.Empty, element);
                    }

                    objXmlTextWriter.WriteEndElement();

                    objXmlTextWriter.WriteEndElement();

                    // Clear the stream
                    objXmlTextWriter.WriteEndDocument();
                    objXmlTextWriter.Flush();
                    objXmlTextWriter.Close();
                }

                XElement root = XElement.Load(XMLFileName);
                foreach (var vech in root.Elements())
                {
                    var paramlist = vech.Elements().OrderBy(xt => xt.Name.ToString()).Distinct(new NameComparer()).ToArray();

                    vech.RemoveAll();

                    foreach (var item in paramlist)
                    {
                        vech.Add(item);
                    }
                }
                root.Save(XMLFileName);

                Console.WriteLine("Saved to " + XMLFileName);
            }
        }
示例#8
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            Current = this;

            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource   = Resource.Layout.Toolbar;

            SetSupportActionBar((Toolbar)FindViewById(ToolbarResource));

            this.Window.AddFlags(WindowManagerFlags.Fullscreen | WindowManagerFlags.TurnScreenOn | WindowManagerFlags.HardwareAccelerated);

            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            Settings.CustomUserDataDirectory = Application.Context.GetExternalFilesDir(null).ToString();
            Log.Info("MP", "Settings.CustomUserDataDirectory " + Settings.CustomUserDataDirectory);

            WinForms.BundledPath = Application.Context.ApplicationInfo.NativeLibraryDir;
            Log.Info("MP", "WinForms.BundledPath " + WinForms.BundledPath);

            Test.UsbDevices = new USBDevices();
            Test.Radio      = new Radio();



            //ConfigFirmwareManifest.ExtraDeviceInfo

            /*
             * var intent = new global::Android.Content.Intent(Intent.ActionOpenDocumentTree);
             *
             * intent.AddFlags(ActivityFlags.GrantWriteUriPermission | ActivityFlags.GrantReadUriPermission);
             * intent.PutExtra(DocumentsContract.ExtraInitialUri, "Mission Planner");
             *
             * StartActivityForResult(intent, 1);
             */

            UserDialogs.Init(this);

            AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser;

            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);

            {
                if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessFineLocation) !=
                    (int)Permission.Granted ||
                    ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) !=
                    (int)Permission.Granted)
                {
                    ActivityCompat.RequestPermissions(this,
                                                      new String[]
                    {
                        Manifest.Permission.AccessFineLocation, Manifest.Permission.LocationHardware,
                        Manifest.Permission.WriteExternalStorage, Manifest.Permission.ReadExternalStorage
                    }, 1);
                }

                while (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) !=
                       (int)Permission.Granted)
                {
                    Thread.Sleep(1000);
                }
            }

            {
                // print some info
                var pm   = this.PackageManager;
                var name = this.PackageName;

                var pi = pm.GetPackageInfo(name, PackageInfoFlags.Activities);

                Console.WriteLine("pi.ApplicationInfo.DataDir " + pi?.ApplicationInfo?.DataDir);
                Console.WriteLine("pi.ApplicationInfo.DeviceProtectedDataDir " +
                                  pi?.ApplicationInfo?.DeviceProtectedDataDir);
                Console.WriteLine("pi.ApplicationInfo.NativeLibraryDir " + pi?.ApplicationInfo?.NativeLibraryDir);
            }

            {
                try
                {
                    // restore assets
                    Directory.CreateDirectory(Settings.GetUserDataDirectory());

                    File.WriteAllText(Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "airports.csv",
                                      new StreamReader(Resources.OpenRawResource(
                                                           Xamarin.Droid.Resource.Raw.airports)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "BurntKermit.mpsystheme",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.BurntKermit)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "ParameterMetaData.xml",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.ParameterMetaDataBackup)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "camerasBuiltin.xml",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.camerasBuiltin)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "checklistDefault.xml",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.checklistDefault)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "mavcmd.xml", new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.mavcmd)).ReadToEnd());
                }
                catch (Exception ex)
                {
                    AlertDialog.Builder alert = new AlertDialog.Builder(this);
                    alert.SetTitle("Error");
                    alert.SetMessage("Failed to save to storage " + ex.ToString());

                    alert.SetNeutralButton("OK", (senderAlert, args) =>
                    {
                    });

                    Dialog dialog = alert.Create();
                    dialog.Show();
                }
            }

            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            {
                // clean start, see if it was an intent/usb attach
                if (savedInstanceState == null)
                {
                    proxyIfUsbAttached(this.Intent);
                }
            }

            LoadApplication(new App());
        }
示例#9
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            Current = this;

            AppDomain.CurrentDomain.UnhandledException   += CurrentDomain_UnhandledException;
            AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;

            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource   = Resource.Layout.Toolbar;

            SetSupportActionBar((Toolbar)FindViewById(ToolbarResource));

            this.Window.AddFlags(WindowManagerFlags.Fullscreen | WindowManagerFlags.TurnScreenOn | WindowManagerFlags.HardwareAccelerated);

            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);

            Settings.CustomUserDataDirectory = Application.Context.GetExternalFilesDir(null).ToString();
            Log.Info("MP", "Settings.CustomUserDataDirectory " + Settings.CustomUserDataDirectory);

            WinForms.BundledPath = Application.Context.ApplicationInfo.NativeLibraryDir;
            Log.Info("MP", "WinForms.BundledPath " + WinForms.BundledPath);

            Test.BlueToothDevice = new BTDevice();
            Test.UsbDevices      = new USBDevices();
            Test.Radio           = new Radio();



            //ConfigFirmwareManifest.ExtraDeviceInfo

            /*
             * var intent = new global::Android.Content.Intent(Intent.ActionOpenDocumentTree);
             *
             * intent.AddFlags(ActivityFlags.GrantWriteUriPermission | ActivityFlags.GrantReadUriPermission);
             * intent.PutExtra(DocumentsContract.ExtraInitialUri, "Mission Planner");
             *
             * StartActivityForResult(intent, 1);
             */

            UserDialogs.Init(this);

            AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser;

            {
                if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessFineLocation) !=
                    (int)Permission.Granted ||
                    ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) !=
                    (int)Permission.Granted ||
                    ContextCompat.CheckSelfPermission(this, Manifest.Permission.Bluetooth) !=
                    (int)Permission.Granted)
                {
                    ActivityCompat.RequestPermissions(this,
                                                      new String[]
                    {
                        Manifest.Permission.AccessFineLocation, Manifest.Permission.LocationHardware,
                        Manifest.Permission.WriteExternalStorage, Manifest.Permission.ReadExternalStorage,
                        Manifest.Permission.Bluetooth
                    }, 1);
                }

                while (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) !=
                       (int)Permission.Granted)
                {
                    Thread.Sleep(1000);
                    var text = "Checking Permissions - " + DateTime.Now.ToString("T");

                    DoToastMessage(text);
                }
            }

            try {
                // print some info
                var pm   = this.PackageManager;
                var name = this.PackageName;

                var pi = pm.GetPackageInfo(name, PackageInfoFlags.Activities);

                Console.WriteLine("pi.ApplicationInfo.DataDir " + pi?.ApplicationInfo?.DataDir);
                Console.WriteLine("pi.ApplicationInfo.NativeLibraryDir " + pi?.ApplicationInfo?.NativeLibraryDir);

                // api level 24 - android 7
                Console.WriteLine("pi.ApplicationInfo.DeviceProtectedDataDir " +
                                  pi?.ApplicationInfo?.DeviceProtectedDataDir);
            } catch {}

            {
                DoToastMessage("Staging Files");
                try
                {
                    // nofly dir
                    Directory.CreateDirectory(Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "NoFly");

                    // restore assets
                    Directory.CreateDirectory(Settings.GetUserDataDirectory());

                    File.WriteAllText(Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "airports.csv",
                                      new StreamReader(Resources.OpenRawResource(
                                                           Xamarin.Droid.Resource.Raw.airports)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "BurntKermit.mpsystheme",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.BurntKermit)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "ParameterMetaData.xml",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.ParameterMetaDataBackup)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "camerasBuiltin.xml",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.camerasBuiltin)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "checklistDefault.xml",
                        new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.checklistDefault)).ReadToEnd());

                    File.WriteAllText(
                        Settings.GetUserDataDirectory() + Path.DirectorySeparatorChar + "mavcmd.xml", new StreamReader(
                            Resources.OpenRawResource(
                                Droid.Resource.Raw.mavcmd)).ReadToEnd());

                    {
                        var pluginsdir = Settings.GetRunningDirectory() + "plugins";
                        Directory.CreateDirectory(pluginsdir);

                        string[] files = new[]
                        {
                            "example2menu", "example3fencedist", "example4herelink", "example5latencytracker",
                            "example6mapicondesc", "example7canrtcm", "example8modechange", "example9hudonoff",
                            "examplewatchbutton", "generator", "InitialParamsCalculator"
                        };

                        foreach (var file in files)
                        {
                            try
                            {
                                var id = (int)typeof(Droid.Resource.Raw)
                                         .GetField(file)
                                         .GetValue(null);

                                var filename = pluginsdir + Path.DirectorySeparatorChar + file + ".cs";

                                if (File.Exists(filename))
                                {
                                    File.Delete(filename);
                                }

                                /*
                                 * File.WriteAllText(filename
                                 *  ,
                                 *  new StreamReader(
                                 *      Resources.OpenRawResource(id)).ReadToEnd());
                                 */
                            }
                            catch
                            {
                            }
                        }
                    }

                    {
                        var graphsdir = Settings.GetRunningDirectory() + "graphs";
                        Directory.CreateDirectory(graphsdir);

                        string[] files = new[]
                        {
                            "ekf3Graphs", "ekfGraphs", "mavgraphs", "mavgraphs2", "mavgraphsMP"
                        };

                        foreach (var file in files)
                        {
                            try
                            {
                                var id = (int)typeof(Droid.Resource.Raw)
                                         .GetField(file)
                                         .GetValue(null);

                                File.WriteAllText(
                                    graphsdir + Path.DirectorySeparatorChar + file + ".xml",
                                    new StreamReader(
                                        Resources.OpenRawResource(id)).ReadToEnd());
                            }
                            catch
                            {
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    AlertDialog.Builder alert = new AlertDialog.Builder(this);
                    alert.SetTitle("Error");
                    alert.SetMessage("Failed to save to storage " + ex.ToString());

                    alert.SetNeutralButton("OK", (senderAlert, args) =>
                    {
                    });

                    Dialog dialog = alert.Create();
                    dialog.Show();
                }
            }

            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            {
                // clean start, see if it was an intent/usb attach
                if (savedInstanceState == null)
                {
                    DoToastMessage("Init Saved State");
                    proxyIfUsbAttached(this.Intent);
                }
            }

            GC.Collect();
            Task.Run(() =>
            {
                var gdaldir = Settings.GetRunningDirectory() + "gdalimages";
                Directory.CreateDirectory(gdaldir);

                MissionPlanner.Utilities.GDAL.GDALBase = new GDAL.GDAL();

                GDAL.GDAL.ScanDirectory(gdaldir);

                GMap.NET.MapProviders.GMapProviders.List.Add(GDAL.GDALProvider.Instance);
            });


            DoToastMessage("Launch App");

            LoadApplication(new App());
        }