private void pull()
        {
            PushPullFiles pushPull = new PushPullFiles();
            Utilities     util     = new Utilities();

            try
            {
                util.Check_devices();
                pushPull.Pull(true);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
        private void pushCalib(string[] results)
        {
            Utilities util = new Utilities();
            Constants con  = new Constants();

            PushPullFiles pushPull = new PushPullFiles();


            try
            {
                util.Check_devices();

                pushPull.PushCalib(results, true);
            }
            catch (Exception ex)
            {
                throw new Exception("Cant push files");
            }
        }
        private void pullEditPush()
        {
            Utilities     util     = new Utilities();
            PushPullFiles pushPull = new PushPullFiles();

            try
            {
                util.Check_devices();
                string root = "adb root";
                util.proc(root, true);

                Thread.Sleep(1000);
                string remount = "adb remount";
                util.proc(remount, true);
                pushPull.pullEditPush(util);
            }
            catch (Exception ex)
            {
                Console.Write(ex);
            }
        }
        private void One_Shot_Install_Click(object sender, RoutedEventArgs e)
        {
            PushPullFiles pushPull  = new PushPullFiles();
            var           uiContext = SynchronizationContext.Current;

            List <string> apkFilePathsFiltered = new List <string>();
            List <string> imgFilePathsFiltered = new List <string>();
            List <string> calFilePathsFiltered = new List <string>();
            List <string> hexFilePathsFiltered = new List <string>();
            List <string> iniFilePathsFiltered = new List <string>();


            Install install = new Install();

            if (!install.One_shot_Install())
            {
                return;
            }


            var items = new installedItemsOneShot();

            if ((bool)items.ShowDialog() == false)
            {
                return;
            }


            l_calib_files_val.Content  = "None";
            l_config_files_val.Content = "None";
            l_engine_val.Content       = "None";
            l_hexagon_val.Content      = "None";
            l_release_val.Content      = "None";
            l_config_files_val.Content = "None";
            Utilities.Hexagon          = "";

            if (!File.Exists(con.Get_ToInstall()))
            {
                return;
            }

            var files = File.ReadAllLines(con.Get_ToInstall());

            foreach (var item in files)
            {
                Console.WriteLine(System.IO.Path.GetExtension(item));
                if (System.IO.Path.GetExtension(item).Equals(".img"))
                {
                    imgFilePathsFiltered.Add(item);
                }

                if (System.IO.Path.GetExtension(item).Equals(".apk"))
                {
                    apkFilePathsFiltered.Add(item);
                }
                if (System.IO.Path.GetExtension(item).Equals(".cal"))
                {
                    calFilePathsFiltered.Add(item);
                }
                if (System.IO.Path.GetExtension(item).Equals(".so") && item.Contains("testsig-0x"))
                {
                    hexFilePathsFiltered.Add(item);
                }
                if (System.IO.Path.GetExtension(item).Equals(".ini"))
                {
                    iniFilePathsFiltered.Add(item);
                }
            }

            //install images
            Utilities.Progress = 20;
            //if (imgFilePathsFiltered.Count > 0)
            //{
            //    var t2 = new Task(() => install.Install_APKs(imgFilePathsFiltered.ToArray()));
            //    var t1 = Task.Run(() => install.Enter_Boot_Loader(imgFilePathsFiltered.ToArray()));
            //    Utilities.Progress += 10 ;
            //    await t1.ContinueWith(task => uiContext.Send(x => logItems.Add(Utilities.TextToLog), null));
            //    //await t1.ContinueWith(t2.Start());

            //}
            this.Dispatcher.Invoke((Action) delegate
            {
                Item i = new Item()
                {
                    Text = "Waiting 60 seconds after reboot before continue"
                };
                Item j = new Item()
                {
                    Text = "Installing APKs"
                };
                string pushHex = "";
                if (hexFilePathsFiltered.Count > 0)
                {
                    pushHex = string.Format("adb push {0} /system/lib/rfsa/adsp", hexFilePathsFiltered[0]);
                }
                //install images
                Utilities.Progress      = 25;
                var backgroundScheduler = TaskScheduler.Default;
                var uiScheduler         = TaskScheduler.FromCurrentSynchronizationContext();
                //install img

                //pause check device connectivity
                Utilities.Pause = true;
                Task.Factory.StartNew(delegate { install.Enter_Boot_Loader(imgFilePathsFiltered.ToArray()); },
                                      backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { uiContext.Send(x => logItems.Add(i), null); }, uiScheduler).

                ContinueWith(delegate { Utilities.Pause = false; }, uiScheduler).

                ContinueWith(delegate { install.Fastboot_Reboot(); },
                             backgroundScheduler).

                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).



                //install apk
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(j), null); }, uiScheduler).

                ContinueWith(delegate { install.Install_APKs(apkFilePathsFiltered.ToArray()); },
                             backgroundScheduler).

                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).



                //copy Calibrations files
                ContinueWith(delegate { pushPull.PushCalib(calFilePathsFiltered.ToArray(), true); },
                             backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { util.proc("adb root", true); },
                             backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { util.proc("adb remount", true); },
                             backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                //wait after remount
                ContinueWith(delegate { Thread.Sleep(5000); },
                             backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                //copy hexagon
                ContinueWith(delegate { util.proc(pushHex, true); },
                             backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { util.proc("adb reboot", true); },
                             backgroundScheduler);



                Utilities.Progress = 0;

                //pause check device connectivity
                Utilities.Pause = true;
            });



            //install apk
        }
        private void b_refresh_Click(object sender, RoutedEventArgs e)
        {
            if (!l_connected.Content.Equals("Connected"))
            {
                return;
            }

            Utilities     util  = new Utilities();
            Utilities     util1 = new Utilities();
            Utilities     util2 = new Utilities();
            Utilities     util3 = new Utilities();
            Utilities     util4 = new Utilities();
            PushPullFiles pp    = new PushPullFiles();

            var uiContext = SynchronizationContext.Current;

            this.Dispatcher.Invoke((Action) delegate
            {
                var backgroundScheduler = TaskScheduler.Default;
                var uiScheduler         = TaskScheduler.FromCurrentSynchronizationContext();

                //Vendor
                Task.Factory.StartNew(delegate { pp.Pull_Config_File(); },
                                      backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { l_vedor_val.Content = Utilities.Vendor; }, uiScheduler);

                //Serial number
                Task.Factory.StartNew(delegate { util1.Check_devices(); },
                                      backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { l_serial_val.Content = Utilities.SerialNum; }, uiScheduler);

                //Calibrations files
                Task.Factory.StartNew(delegate { util2.Check_Calib_Files(); },
                                      backgroundScheduler).
                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { l_calib_files_val.Content = String.Join(", ", Utilities.CalibrationFiles.ToArray()); }, uiScheduler);

                //Calib
                Task.Factory.StartNew(delegate { util3.Check_Config_Files_Etc(); },
                                      backgroundScheduler).

                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { l_config_files_val.Content = string.Join(", ", Utilities.ConfigFiles.ToArray()); }, uiScheduler);

                //release and engine

                Task.Factory.StartNew(delegate { util.Get_Release_and_Engine_Version(); },
                                      backgroundScheduler).

                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { l_release_val.Content = Utilities.Release; }, uiScheduler).
                ContinueWith(delegate { l_engine_val.Content = Utilities.Engine; }, uiScheduler);

                //Hexagon

                Task.Factory.StartNew(delegate { util4.Check_Hexagon_File(); },
                                      backgroundScheduler).

                ContinueWith(delegate { uiContext.Send(x => logItems.Add(Utilities.TextToLog), null); }, uiScheduler).

                ContinueWith(delegate { l_hexagon_val.Content = Utilities.Hexagon; }, uiScheduler).

                ContinueWith(delegate { Refresh_Device_Prop(); }, uiScheduler);
            });
        }