private FileDocumentItem[] OrderBy(FileDocumentItem[] items, FileDocumentItemSortOrders orderBy, bool isDesc)
            {
                if (items == null || items.Length <= 1)
                {
                    return(items);
                }

                switch (orderBy)
                {
                case FileDocumentItemSortOrders.Default:
                case FileDocumentItemSortOrders.ByName:
                    return(isDesc
                            ? items.OrderByDescending(p => p.IsFolder).ThenByDescending(p => p.DisplayName).ToArray()
                            : items.OrderByDescending(p => p.IsFolder).ThenBy(p => p.DisplayName).ToArray());

                case FileDocumentItemSortOrders.ByLastModified:
                    return(isDesc
                            ? items.OrderByDescending(p => p.LastModified).ThenBy(p => p.DisplayName).ToArray()
                            : items.OrderBy(p => p.LastModified).ThenBy(p => p.DisplayName).ToArray());

                case FileDocumentItemSortOrders.BySize:
                    return(isDesc
                            ? items.OrderByDescending(p => p.Size).ThenBy(p => p.DisplayName).ToArray()
                            : items.OrderBy(p => p.Size).ThenBy(p => p.DisplayName).ToArray());

                default:
                    throw new NotImplementedException(orderBy.ToString());
                }
            }
Exemple #2
0
        protected override void OnRestoreInstanceState(Bundle savedInstanceState)
        {
            base.OnRestoreInstanceState(savedInstanceState);

            try
            {
                _doNotCancel = savedInstanceState.GetBoolean(DoNotCancelKey, false);

                if (_previousParents == null || _previousParents.Count == 0)
                {
                    var src = savedInstanceState.GetString(PreviousParentsKey);
                    if (!string.IsNullOrEmpty(src))
                    {
                        _previousParents = JsonConvert.DeserializeObject <Stack <string> >(src);
                    }
                }

                if (_selectedItem == null)
                {
                    var src = savedInstanceState.GetString(SelectedItemKey);
                    if (!string.IsNullOrEmpty(src))
                    {
                        _selectedItem = JsonConvert.DeserializeObject <FileDocumentItem>(src);
                    }
                }

                _orderBy = (FileDocumentItemSortOrders)savedInstanceState.GetInt(OrderByKey);

                if (_currentParent == null)
                {
                    var src = savedInstanceState.GetString(CurrentParentKey);
                    if (!string.IsNullOrEmpty(src))
                    {
                        _currentParent = JsonConvert.DeserializeObject <FileDocumentItem>(src);
                        ReplaceFragment();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex);
            }
        }
Exemple #3
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.activity_file_browser);

            //Toolbar will now take on default actionbar characteristics
            var toolbar = FindViewById <Toolbar>(Resource.Id.toolbar);

            SetSupportActionBar(toolbar);
            SupportActionBar.Title = string.Empty;

            SupportActionBar.SetDisplayHomeAsUpEnabled(true);
            SupportActionBar.SetHomeButtonEnabled(true);

            try
            {
                _showCreateFolderMenu = false;
                _orderBy = FileDocumentItemSortOrders.Default;

                // documents provider
                _documentsProvider = new FileDocumentsProvider();
                _documentsProvider.AttachInfo(this,
                                              CreateProviderInfo(string.Format("{0}.{1}", AppSettings.AppPackageName,
                                                                               _documentsProvider.GetType().Name.ToLower()))); //HARDCODE:

                // root
                GetRoot();
                if (string.IsNullOrEmpty(_root?.DocumentId))
                {
                    throw new ArgumentNullException(nameof(_root));
                }

                // stack
                _previousParents = new Stack <string>();

                // start parameters
                var displayName        = Intent.GetStringExtra(Intent.ExtraTitle);
                var mimeType           = Intent.Type;
                var isCategoryOpenable = Intent.Categories?.Contains(Intent.CategoryOpenable) == true;
                var action             = Intent?.Action;
                // end parameters

                var statusBar = FindViewById(Resource.Id.statusBar);
                _imgNewFileName  = FindViewById <ImageView>(Resource.Id.imgNewFileName);
                _txtNewFileName  = FindViewById <EditText>(Resource.Id.txtNewFileName);
                _btnAction       = FindViewById <Button>(Resource.Id.btnAction);
                _viewProgressbar = FindViewById(Resource.Id.toolbarProgress);

                switch (action)
                {
                case Intent.ActionCreateDocument:
                    _showCreateFolderMenu = true;
                    if (_imgNewFileName != null)
                    {
                        _imgNewFileName.SetImageResource(Resource.Drawable.ic_file);
                        _imgNewFileName.Visibility = ViewStates.Visible;
                    }

                    if (_txtNewFileName != null)
                    {
                        _txtNewFileName.Text       = displayName ?? string.Empty;
                        _txtNewFileName.Visibility = ViewStates.Visible;
                    }

                    if (_btnAction != null)
                    {
                        _btnAction.SetText(Resource.String.Save);
                        _btnAction.LayoutParameters.Width = ViewGroup.LayoutParams.WrapContent;
                    }

                    _mimeType           = mimeType;
                    _isCategoryOpenable = isCategoryOpenable;
                    break;

                case Intent.ActionOpenDocumentTree:
                    _isActionOpenDocumentTree = true;
                    _showCreateFolderMenu     = true;

                    if (_imgNewFileName != null)
                    {
                        _imgNewFileName.Visibility = ViewStates.Gone;
                    }

                    if (_txtNewFileName != null)
                    {
                        _txtNewFileName.Visibility = ViewStates.Gone;
                    }

                    if (_btnAction != null)
                    {
                        _btnAction.LayoutParameters.Width = ViewGroup.LayoutParams.MatchParent;
                    }
                    break;

                default:
                    if (statusBar != null)
                    {
                        statusBar.Visibility = ViewStates.Gone;
                    }

                    _imgNewFileName?.Dispose();
                    _imgNewFileName = null;

                    _txtNewFileName?.Dispose();
                    _txtNewFileName = null;

                    _btnAction?.Dispose();
                    _btnAction = null;

                    _mimeType           = mimeType;
                    _isCategoryOpenable = isCategoryOpenable;
                    break;
                }

                if (savedInstanceState == null)
                {
                    var searchQuery = Intent.GetStringExtra(ExtraSearchQuery);
                    var taskType    = string.IsNullOrEmpty(searchQuery)
                        ? FileBrowserFragment.DocumentTaskTypes.QueryChildDocuments
                        : FileBrowserFragment.DocumentTaskTypes.QuerySearchDocuments;
                    ReplaceFragment(isAdd: true, useCustomAnimation: false, taskType: taskType, query: searchQuery);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                Toast.MakeText(this, GetString(Resource.String.InternalError),
                               AppSettings.ToastLength).Show();
            }
        }
Exemple #4
0
        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            try
            {
                if (_isWaiting || item == null)
                {
                    return(false);
                }

                switch (item.ItemId)
                {
                case Android.Resource.Id.Home:
                    Finish();
                    return(true);

                case Resource.Id.menuItemFileBrowserUpward:
                    if (_currentParent != null && _currentParent.DocumentId != _root.DocumentId)
                    {
                        var previousParentId = _previousParents.Count == 0
                                ? GetParent(_currentParent.DocumentId) ?? _root.DocumentId
                                : _previousParents.Pop();
                        ReplaceFragment(parentDocumentId: previousParentId);
                    }
                    return(true);

                case Resource.Id.menuItemFileBrowserCreateFolder:
                    var dlg = new WidgetUtil();
                    dlg.InputDialog(context: this, titleId: Resource.String.CreateFolderTitle,
                                    layoutId: Resource.Layout.text_input, editTextId: Resource.Id.txtInput,
                                    okAction: (view, value) =>
                    {
                        if (string.IsNullOrEmpty(value))
                        {
                            return(false);
                        }

                        try
                        {
                            var docId = _documentsProvider.CreateDocument(_currentParent.DocumentId,
                                                                          DocumentsContract.Document.MimeTypeDir, value);
                            _previousParents.Push(_currentParent.DocumentId);
                            ReplaceFragment(useCustomAnimation: false, parentDocumentId: docId);
                        }
                        catch (Exception ex)
                        {
                            Log.Error(ex);
                            Toast.MakeText(this, GetString(Resource.String.InternalError),
                                           AppSettings.ToastLength)
                            .Show();
                            return(false);
                        }

                        return(true);
                    });
                    return(true);

                case Resource.Id.menuItemFileBrowserSortByName:
                    item.SetChecked(!item.IsChecked);
                    if (item.IsChecked && _orderBy != FileDocumentItemSortOrders.Default && _orderBy != FileDocumentItemSortOrders.ByName)
                    {
                        _orderBy = FileDocumentItemSortOrders.ByName;
                        ReplaceFragment();
                    }
                    return(true);

                case Resource.Id.menuItemFileBrowserSortByDate:
                    item.SetChecked(!item.IsChecked);
                    if (item.IsChecked && _orderBy != FileDocumentItemSortOrders.ByLastModified)
                    {
                        _orderBy = FileDocumentItemSortOrders.ByLastModified;
                        ReplaceFragment();
                    }
                    return(true);

                case Resource.Id.menuItemFileBrowserSortBySize:
                    item.SetChecked(!item.IsChecked);
                    if (item.IsChecked && _orderBy != FileDocumentItemSortOrders.BySize)
                    {
                        _orderBy = FileDocumentItemSortOrders.BySize;
                        ReplaceFragment();
                    }
                    return(true);

                case Resource.Id.menuItemFileBrowserRefresh:
                    ReplaceFragment();
                    return(true);

                case Resource.Id.menuItemFileBrowserSettings:
                    var intent = new Intent(this, typeof(FileBrowserSettingsActivity));
                    _doNotCancel = true;
                    StartActivityForResult(intent, MenuSettingsRequestCode);
                    break;

                default:
                    return(base.OnOptionsItemSelected(item));
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                Toast.MakeText(this, GetString(Resource.String.InternalError), AppSettings.ToastLength)
                .Show();
            }

            return(false);
        }