public void ReloadFileList(bool force = true)
 {
     if (brickController.NXT.Connection.IsConnected)
     {
         if (force || adapter.Items.Count == 0)
         {
             ProgressDialog progress = null;
             this.Activity.RunOnUiThread(delegate() {
                 progress = ProgressDialog.Show(this.View.Context, "Synchronizing file list...", "PLease Wait...       ");
             });
             System.Threading.Thread t = new System.Threading.Thread(delegate(object obj){
                 adapter.Items.Clear();
                 try{
                     MonoBrick.IBrickFile[] fileList = brickController.NXT.FileSystem.FileList();
                     for (int i = 0; i < fileList.Length; i++)
                     {
                         adapter.Items.Add(new FileItem(fileList[i]));
                     }
                     //AddFakeList();
                 }
                 catch (Exception e) {
                     this.Activity.RunOnUiThread(delegate() {
                         TabActivity.ShowToast(this.Activity, "Failed to synchronize file list: " + e.Message);
                     });
                 }
                 finally{
                     this.Activity.RunOnUiThread(delegate() {
                         adapter.NotifyDataSetChanged();
                         progress.Dismiss();
                     });
                 }
             });
             t.IsBackground = true;
             t.Priority     = System.Threading.ThreadPriority.Normal;
             t.Start();
         }
         else
         {
             this.Activity.RunOnUiThread(delegate() {
                 adapter.NotifyDataSetChanged();
             });
         }
     }
 }
        public bool OnActionItemClicked(ActionMode mode, IMenuItem item)
        {
            switch (item.ItemId)
            {
            case Resource.Id.start:
                brickController.SpawnThread(delegate() {
                    FileItem currentItemSelected = adapter.SelectedItems.First();
                    if (currentItemSelected.FileType == MonoBrick.FileType.Program)
                    {
                        brickController.NXT.StartProgram(currentItemSelected.Name, true);
                        this.Activity.RunOnUiThread(delegate(){
                            TabActivity.ShowToast(this.Activity, "Program successfully started");
                        });
                    }
                    else
                    {
                        brickController.NXT.PlaySoundFile(currentItemSelected.Name, false, true);
                        this.Activity.RunOnUiThread(delegate(){
                            TabActivity.ShowToast(this.Activity, "Sound file started");
                        });
                    }
                });
                break;

            case Resource.Id.stop:
                brickController.SpawnThread(delegate() {
                    brickController.NXT.StopProgram(true);
                    this.Activity.RunOnUiThread(delegate(){
                        TabActivity.ShowToast(this.Activity, "All programs stoped");
                    });
                });
                break;

            case Resource.Id.delete:

                AlertDialog.Builder dialog = new AlertDialog.Builder(this.View.Context);
                dialog.SetIcon(Android.Resource.Drawable.IcMenuInfoDetails);
                dialog.SetTitle("Delete file(s)");
                string message;
                if (adapter.SelectedItems.Count > 1)
                {
                    message = "Are you sure you want to delete " + adapter.SelectedItems.Count + " files ?";
                }
                else
                {
                    message = "Are you sure you want to delete " + adapter.SelectedItems.First().Name + " ?";
                }
                dialog.SetMessage(message);
                dialog.SetPositiveButton("Yes", delegate(object sender, DialogClickEventArgs e){
                    ProgressDialog progress = null;
                    this.Activity.RunOnUiThread(delegate() {
                        progress = ProgressDialog.Show(this.View.Context, "Deleting files", "PLease Wait...       ");
                    });
                    System.Threading.Thread t = new System.Threading.Thread(delegate(object obj){
                        brickController.ExecuteOnCurrentThread(delegate() {
                            Exception ex = null;
                            List <FileItem> uncheckList = new List <FileItem>();
                            try{
                                int i = 0;
                                foreach (FileItem myFileItem in adapter.SelectedItems)
                                {
                                    if (adapter.SelectedItems.Count > 1)
                                    {
                                        progress.SetMessage("Deleteing file " + (i + 1) + " of " + adapter.SelectedItems.Count);
                                    }
                                    else
                                    {
                                        progress.SetMessage("Deleteing " + myFileItem.Name);
                                    }
                                    brickController.NXT.FileSystem.DeleteFile(myFileItem.Name);
                                    adapter.Items.Remove(myFileItem);
                                    uncheckList.Add(myFileItem);
                                    i++;
                                }
                            }
                            catch (Exception excep) {
                                ex = excep;
                            }
                            finally
                            {
                                foreach (FileItem fi in uncheckList)
                                {
                                    adapter.SelectedItems.Remove(fi);
                                }
                                this.Activity.RunOnUiThread(delegate() {
                                    progress.Dismiss();
                                    adapter.NotifyDataSetChanged();
                                    if (mode != null)
                                    {
                                        mode.Finish();
                                    }
                                });
                            }
                            if (ex != null)
                            {
                                throw ex;
                            }
                        });
                    });
                    t.IsBackground = true;
                    t.Priority     = System.Threading.ThreadPriority.Normal;
                    t.Start();
                });
                dialog.SetNegativeButton("No", delegate(object sender, DialogClickEventArgs e){});
                dialog.Show();
                break;

            case Resource.Id.download:
                Console.WriteLine("Download");
                break;
            }

            return(true);
        }