private async void PinFileAsync(FileObjectViewItem fileObjectViewItem)
        {
            // Show Uploading message and file for good UX
            base.SetProgressRing(uiPinPivotProgressRing, true);
            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                fileObjectViewItem.SelectFileImage = FileObjectViewModel.ING_IMAGE_URI;
            });

            try
            {
                string blobId = await this.CurrentSpot.AddFileObjectAsync(this.GetCloudStorageFileObjectById(fileObjectViewItem.Id));

                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    this.PickFileObjectViewModel.IsDataLoaded = false;
                    fileObjectViewItem.SelectFileImage        = FileObjectViewModel.CHECK_NOT_IMAGE_URI;
                });
            }
            catch
            {
                fileObjectViewItem.SelectFileImage = FileObjectViewModel.FAIL_IMAGE_URI;
            }

            // Hide progress message
            base.SetProgressRing(uiPinPivotProgressRing, false);
        }
        private async void LaunchFileAsync(FileObjectViewItem fileObjectViewItem)
        {
            // Show Downloading message
            base.SetProgressRing(uiFileListProgressRing, true);
            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                fileObjectViewItem.SelectFileImage      = FileObjectViewModel.DOWNLOAD_IMAGE_URI;
                fileObjectViewItem.SelectFileImagePress = false;
            });

            try
            {
                // Download file and Launch files to other reader app.
                await this.CurrentSpot.PreviewFileObjectAsync(this.CurrentSpot.GetFileObject(fileObjectViewItem.Id));

                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    fileObjectViewItem.SelectFileImagePress = true;
                });
            }
            catch
            {
                fileObjectViewItem.SelectFileImage = FileObjectViewModel.FAIL_IMAGE_URI;
            }

            // Hide Progress Indicator
            base.SetProgressRing(uiFileListProgressRing, false);
        }
        private async void DeleteFileAsync(FileObjectViewItem fileObjectViewItem)
        {
            // Show Deleting message
            base.SetProgressRing(uiPickPivotFileListProgressRing, true);
            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                fileObjectViewItem.SelectFileImage = FileObjectViewModel.ING_IMAGE_URI;
            });


            // Delete
            try
            {
                await App.BlobStorageManager.DeleteFileAsync(fileObjectViewItem.Id);

                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    this.PickFileObjectViewModel.Items.Remove(fileObjectViewItem);
                    if (this.PickFileObjectViewModel.Items.Count < 1)
                    {
                        uiPickFileListEditViewButton.Visibility = Visibility.Collapsed;
                        uiPickFileList.Visibility        = Visibility.Collapsed;
                        uiPickFileListMessage.Text       = AppResources.NoFileInSpotMessage;
                        uiPickFileListMessage.Visibility = Visibility.Visible;
                    }
                });
            }
            catch
            {
                fileObjectViewItem.SelectFileImage = FileObjectViewModel.FAIL_IMAGE_URI;
            }

            // Hide Progress Indicator
            base.SetProgressRing(uiPickPivotFileListProgressRing, false);
        }
        // Pin file selection event.
        private void uiPinFileList_ItemClick(object sender, Windows.UI.Xaml.Controls.ItemClickEventArgs e)
        {
            // Get Selected File Obejct
            FileObjectViewItem fileObjectViewItem = e.ClickedItem as FileObjectViewItem;

            // If user select folder, go in.
            // Otherwise, add it to list.
            if (fileObjectViewItem.ThumnailType.Equals(FileObjectViewModel.FOLDER))  // If folder, get files it the folder
            {
                this.SetPinFileListAsync(Switcher.GetCurrentStorage(), AppResources.Loading, fileObjectViewItem);
            }
            else  // If file, Do selection
            {
                if (fileObjectViewItem.SelectFileImage.Equals(FileObjectViewModel.CHECK_NOT_IMAGE_URI))
                {
                    this.PinSelectedFileList.Add(fileObjectViewItem);
                    fileObjectViewItem.SelectFileImage = FileObjectViewModel.CHECK_IMAGE_URI;
                    this.uiPinAppBarButton.IsEnabled   = true;
                }
                else if (fileObjectViewItem.SelectFileImage.Equals(FileObjectViewModel.CHECK_IMAGE_URI))
                {
                    this.PinSelectedFileList.Remove(fileObjectViewItem);
                    fileObjectViewItem.SelectFileImage = FileObjectViewModel.CHECK_NOT_IMAGE_URI;
                    if (this.PinSelectedFileList.Count < 1)
                    {
                        this.uiPinAppBarButton.IsEnabled = false;
                    }
                }
            }
        }
        private void uiFileListView_ItemClick(object sender, Windows.UI.Xaml.Controls.ItemClickEventArgs e)
        {
            // Get Selected File Obejct
            FileObjectViewItem fileObjectViewItem = e.ClickedItem as FileObjectViewItem;

            // Launch files to other reader app.
            if (NetworkInterface.GetIsNetworkAvailable())
            {
                this.LaunchFileAsync(fileObjectViewItem);
            }
            else
            {
                base.ShowMessageDialog(AppResources.InternetUnavailableMessage, OK_MODE);
            }
        }
        private void uiPickFileList_ItemClick(object sender, Windows.UI.Xaml.Controls.ItemClickEventArgs e)
        {
            // Get Selected File Obejct
            FileObjectViewItem fileObjectViewItem = e.ClickedItem as FileObjectViewItem;

            // If it is view mode, click is preview.
            // If it is edit mode, click is selection.
            BitmapImage currentEditViewModeBitmapImage = (BitmapImage)uiPickFileListEditViewButtonImage.Source;
            string      currentEditViewMode            = currentEditViewModeBitmapImage.UriSource.ToString();

            if (currentEditViewMode.Equals(EDIT_IMAGE_URI))  // View mode
            {
                if (fileObjectViewItem.SelectFileImage.Equals(FileObjectViewModel.DOWNLOAD_IMAGE_URI))
                {
                    // Launch files to other reader app.
                    if (NetworkInterface.GetIsNetworkAvailable())
                    {
                        this.LaunchFileAsync(fileObjectViewItem);
                    }
                    else
                    {
                        base.ShowMessageDialog(AppResources.InternetUnavailableMessage, OK_MODE);
                    }
                }
            }
            else if (currentEditViewMode.Equals(VIEW_IMAGE_URI))  // Edit mode
            {
                if (fileObjectViewItem.SelectFileImage.Equals(FileObjectViewModel.CHECK_NOT_IMAGE_URI))
                {
                    this.PickSelectedFileList.Add(fileObjectViewItem);
                    fileObjectViewItem.SelectFileImage = FileObjectViewModel.CHECK_IMAGE_URI;
                    uiPickDeleteAppBarButton.IsEnabled = true;
                }

                else if (fileObjectViewItem.SelectFileImage.Equals(FileObjectViewModel.CHECK_IMAGE_URI))
                {
                    this.PickSelectedFileList.Remove(fileObjectViewItem);
                    fileObjectViewItem.SelectFileImage = FileObjectViewModel.CHECK_NOT_IMAGE_URI;
                    if (this.PickSelectedFileList.Count < 1)
                    {
                        uiPickDeleteAppBarButton.IsEnabled = false;
                    }
                }
            }
        }
        private async void PickFileAsync(IStorageManager storageManager, FileObjectViewItem fileObjectViewItem)
        {
            // Show Downloading message
            base.SetProgressRing(uiPickPivotFileListProgressRing, true);
            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                fileObjectViewItem.SelectFileImage      = FileObjectViewModel.ING_IMAGE_URI;
                fileObjectViewItem.SelectFileImagePress = false;
            });

            try
            {
                // Download
                await TaskHelper.WaitSignInTask(storageManager.GetStorageName());

                await this.CurrentSpot.DownloadFileObjectAsync(storageManager, this.CurrentSpot.GetFileObject(fileObjectViewItem.Id));

                await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    this.PinFileObjectViewModel.IsDataLoaded = false;

                    BitmapImage currentEditViewModeBitmapImage = (BitmapImage)uiPickFileListEditViewButtonImage.Source;
                    string currentEditViewMode = currentEditViewModeBitmapImage.UriSource.ToString();
                    if (currentEditViewMode.Equals(EDIT_IMAGE_URI))  // View Mode
                    {
                        fileObjectViewItem.SelectFileImage      = FileObjectViewModel.DOWNLOAD_IMAGE_URI;
                        fileObjectViewItem.SelectFileImagePress = true;
                    }
                    else if (currentEditViewMode.Equals(VIEW_IMAGE_URI))  // Edit Mode
                    {
                        fileObjectViewItem.SelectFileImage = FileObjectViewModel.CHECK_NOT_IMAGE_URI;
                    }
                });
            }
            catch
            {
                fileObjectViewItem.SelectFileImage = FileObjectViewModel.FAIL_IMAGE_URI;
            }

            // Hide Progress Indicator
            base.SetProgressRing(uiPickPivotFileListProgressRing, false);
        }
        private async void SetPinFileListAsync(IStorageManager iStorageManager, string message, FileObjectViewItem folder)
        {
            // Set Mutex true and Show Process Indicator
            // Clear selected file and set pin button false.
            base.SetProgressRing(uiFileListProgressRing, true);
            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                uiPinFileListGridView.Visibility = Visibility.Collapsed;
                uiPinFileMessage.Text            = message;
                uiPinFileMessage.Visibility      = Visibility.Visible;
            });

            this.PinSelectedFileList.Clear();

            try
            {
                // Wait Signin and Sync task
                await TaskHelper.WaitSignInTask(iStorageManager.GetStorageName());

                await TaskHelper.WaitTask(TaskHelper.STORAGE_EXPLORER_SYNC + Switcher.GetCurrentStorage().GetStorageName());

                // Get files from current folder in the cloud.
                // If it is not null, set items.
                // Otherwise, show message
                if (folder == null)
                {
                    this.CurrentFileObjectList = StorageExplorer.GetFilesFromRootFolder();
                }
                else
                {
                    this.CurrentFileObjectList = StorageExplorer.GetTreeForFolder(this.GetCloudStorageFileObjectById(folder.Id));
                }
                if (this.CurrentFileObjectList != null)
                {
                    // If didn't change cloud mode while loading, set it to list.
                    // Set file list visible and current path.
                    await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        this.PinFileObjectViewModel.IsDataLoaded = true;
                        uiPinFileListGridView.Visibility         = Visibility.Visible;
                        uiPinFileCurrentPath.Text = StorageExplorer.GetCurrentPath();
                        this.PinFileObjectViewModel.SetItems(this.CurrentFileObjectList, true);
                    });


                    // If there exists file, show it.
                    // Otherwise, show no file message.
                    if (this.CurrentFileObjectList.Count > 0)
                    {
                        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            uiPinFileMessage.Visibility = Visibility.Collapsed;
                        });
                    }
                    else
                    {
                        await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            uiPinFileMessage.Text = AppResources.NoFileInFolderMessage;
                        });
                    }
                }
                else
                {
                    await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        uiPinFileListGridView.Visibility = Visibility.Collapsed;
                        uiPinFileMessage.Text            = AppResources.BadLoadingFileMessage;
                        uiPinFileMessage.Visibility      = Visibility.Visible;
                    });
                }
            }
            catch
            {
                uiPinFileListGridView.Visibility = Visibility.Collapsed;
                uiPinFileMessage.Text            = AppResources.BadLoadingFileMessage;
                uiPinFileMessage.Visibility      = Visibility.Visible;
            }
            base.SetProgressRing(uiFileListProgressRing, false);
        }