private void OnDocumentItemClick(FileDocumentItem item) { if (string.IsNullOrEmpty(item?.DocumentId)) { return; } try { if (item.IsFolder) { if (_currentParent != null) { _previousParents.Push(_currentParent.DocumentId); } ReplaceFragment(parentDocumentId: item.DocumentId); } else { if (_txtNewFileName != null) { _txtNewFileName.Text = item.DisplayName ?? string.Empty; } _selectedItem = item; } } catch (Exception ex) { Log.Error(ex); Toast.MakeText(this, GetString(Resource.String.InternalError), AppSettings.ToastLength) .Show(); } }
private void OnPostExecute(FileDocumentItem parent) { try { _currentParent = parent ?? throw new ArgumentNullException(nameof(parent)); var parentDisplayName = _currentParent.DisplayName; if (string.IsNullOrEmpty(parentDisplayName)) { parentDisplayName = _root.DisplayName; } SupportActionBar.Title = parentDisplayName ?? string.Empty; SupportActionBar.SetLogo(_currentParent.IconResourceId ?? Android.Resource.Color.Transparent); if (_isActionOpenDocumentTree && _btnAction != null) { _btnAction.Text = string.Format(GetString(Resource.String.SelectFolder), parentDisplayName); } } catch (Exception ex) { Log.Error(ex); Toast.MakeText(this, GetString(Resource.String.InternalError), AppSettings.ToastLength) .Show(); } finally { ShowProgressbar(false); } }
private void OnDispose() { UnsubscribeEvents(); _root = null; _currentParent = null; _doNotCancel = false; _selectedItem = null; _documentsProvider?.Dispose(); _documentsProvider = null; _previousParents?.Clear(); _previousParents = null; }
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); } }
private void GetRoot() { if (_documentsProvider == null) { throw new ArgumentNullException(nameof(_documentsProvider)); } _root = null; using (var cursor = _documentsProvider.QueryRoots(null)) { if (cursor != null) { if (cursor.Count > 0 && cursor.MoveToNext()) { _root = new FileDocumentItem(this, cursor, true); } cursor.Close(); } } }
public void PostExecute(FileDocumentItem parent, FileDocumentItem[] result, Exception error) { try { UnsubscribeEvents(); AdapterDispose(); var recyclerView = (RecyclerView)View.FindViewById(Resource.Id.gridDocuments); if (recyclerView != null) { var layoutManager = new LinearLayoutManager(Activity, LinearLayoutManager.Vertical, false); recyclerView.SetLayoutManager(layoutManager); _adapter = new FileDocumentAdapter(result); recyclerView.SetAdapter(_adapter); SubscribeEvents(); } if (_txtNoItems != null) { _txtNoItems.Visibility = _adapter?.ItemCount > 0 ? ViewStates.Gone : ViewStates.Visible; } } catch (Exception ex) { Log.Error(ex); error = ex; } finally { PostExecuteHandler?.Invoke(parent); if (error != null) { Toast.MakeText(Activity, GetString(Resource.String.InternalError), AppSettings.ToastLength) .Show(); } } }
public ItemEventArgs(FileDocumentItem item) { Item = item; }
private FileDocumentItem[] RunInBackground(DocumentTaskTypes documentTaskType, DocumentsProvider provider, string parentDocumentId, string query, string searchMimeType, bool?isCategoryOpenable, out string parentId) { parentId = null; var result = new List <FileDocumentItem>(); var isFirstRecord = documentTaskType == DocumentTaskTypes.QuerySearchDocuments; using (var cursor = GetQuery(documentTaskType, provider, parentDocumentId, query)) { if (cursor == null || cursor.Count == 0) { return(null); } while (cursor.MoveToNext()) { if (IfCancellationRequested()) { return(null); } if (isFirstRecord) { isFirstRecord = false; var columnIndex = cursor.GetColumnIndex(Sb49DocumentsContract.Document.ColumnParentDocumentId); if (columnIndex >= 0) { parentId = cursor.GetString(columnIndex); } } var item = new FileDocumentItem(provider.Context, cursor); if (!item.IsFolder) { if (isCategoryOpenable == true && !Util.HasFlags(item.Flags, (int)DocumentContractFlags.SupportsWrite)) { continue; } if (!string.IsNullOrEmpty(searchMimeType) && !string.Equals(item.MimeType, searchMimeType, StringComparison.OrdinalIgnoreCase)) { continue; } } result.Add(item); } cursor.Close(); } if (IfCancellationRequested()) { return(null); } return(result.ToArray()); }
protected override void Dispose(bool disposing) { _parent = null; base.Dispose(disposing); }
protected override FileDocumentItem[] RunInBackground(params object[] parameters) { if (IfCancellationRequested()) { return(null); } try { var fragment = GetFragment(); if (fragment == null) { return(null); } if (string.IsNullOrEmpty(fragment.ParentDocumentId)) { throw new ArgumentNullException(nameof(fragment.ParentDocumentId)); } if (fragment.DocumentTaskType == DocumentTaskTypes.QuerySearchDocuments && string.IsNullOrEmpty(fragment.SearchQuery)) { throw new ArgumentNullException(nameof(fragment.SearchQuery)); } _parent = null; var result = RunInBackground(fragment.DocumentTaskType, fragment.Provider, fragment.ParentDocumentId, fragment.SearchQuery, fragment.SearchMimeType, fragment.IsCategoryOpenable, out string parentDocumentId); if (IfCancellationRequested()) { return(null); } if ((result == null || result.Length == 0) && fragment.DocumentTaskType == DocumentTaskTypes.QuerySearchDocuments) { result = RunInBackground(DocumentTaskTypes.QueryChildDocuments, fragment.Provider, fragment.ParentDocumentId, null, fragment.SearchMimeType, fragment.IsCategoryOpenable, out parentDocumentId); } if (IfCancellationRequested()) { return(null); } var parentId = !string.IsNullOrEmpty(parentDocumentId) && parentDocumentId != fragment.ParentDocumentId ? parentDocumentId : fragment.ParentDocumentId; var parents = RunInBackground(DocumentTaskTypes.QueryDocument, fragment.Provider, parentId, null, null, null, out parentDocumentId); _parent = parents?.First(); return(OrderBy(result, fragment.OrderBy, fragment.IsDesc)); } catch (Exception ex) { Log.Error(ex); _ex = ex; } return(null); }