use of dev.dworks.apps.anexplorer.model.DirectoryResult in project AnExplorer by 1hakr.
the class DirectoryLoader method loadInBackground.
@Override
public final DirectoryResult loadInBackground() {
synchronized (this) {
if (isLoadInBackgroundCanceled()) {
throw new OperationCanceledException();
}
mSignal = new CancellationSignal();
}
final ContentResolver resolver = getContext().getContentResolver();
final String authority = mUri.getAuthority();
final DirectoryResult result = new DirectoryResult();
int userMode = State.MODE_UNKNOWN;
int userSortOrder = State.SORT_ORDER_UNKNOWN;
// Use default document when searching
if (mType == DirectoryFragment.TYPE_SEARCH) {
final Uri docUri = DocumentsContract.buildDocumentUri(mRoot.authority, mRoot.documentId);
try {
mDoc = DocumentInfo.fromUri(resolver, docUri);
} catch (FileNotFoundException e) {
Log.w(TAG, "Failed to query", e);
result.exception = e;
CrashReportingManager.logException(e);
return result;
}
}
// Pick up any custom modes requested by user
Cursor cursor = null;
try {
final Uri stateUri = RecentsProvider.buildState(mRoot.authority, mRoot.rootId, mDoc.documentId);
cursor = resolver.query(stateUri, null, null, null, null);
if (cursor.moveToFirst()) {
userMode = getCursorInt(cursor, StateColumns.MODE);
userSortOrder = getCursorInt(cursor, StateColumns.SORT_ORDER);
}
} finally {
IoUtils.closeQuietly(cursor);
}
if (userMode != State.MODE_UNKNOWN) {
result.mode = userMode;
} else {
if ((mDoc.flags & Document.FLAG_DIR_PREFERS_GRID) != 0) {
result.mode = State.MODE_GRID;
} else {
result.mode = State.MODE_LIST;
}
}
if (userSortOrder != State.SORT_ORDER_UNKNOWN) {
result.sortOrder = userSortOrder;
} else {
if ((mDoc.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0) {
result.sortOrder = State.SORT_ORDER_LAST_MODIFIED;
} else {
result.sortOrder = State.SORT_ORDER_DISPLAY_NAME;
}
}
// Search always uses ranking from provider
if (mType == DirectoryFragment.TYPE_SEARCH) {
// result.sortOrder = State.SORT_ORDER_UNKNOWN;
}
Log.d(TAG, "userMode=" + userMode + ", userSortOrder=" + userSortOrder + " --> mode=" + result.mode + ", sortOrder=" + result.sortOrder);
ContentProviderClient client = null;
try {
client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority);
cursor = client.query(mUri, null, null, null, getQuerySortOrder(result.sortOrder));
cursor.registerContentObserver(mObserver);
cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1);
if (mType == DirectoryFragment.TYPE_SEARCH) {
cursor = new SortingCursorWrapper(cursor, result.sortOrder);
// Filter directories out of search results, for now
cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES);
} else {
// Normal directories should have sorting applied
cursor = new SortingCursorWrapper(cursor, result.sortOrder);
}
result.client = client;
result.cursor = cursor;
} catch (Exception e) {
Log.w(TAG, "Failed to query", e);
CrashReportingManager.logException(e);
result.exception = e;
ContentProviderClientCompat.releaseQuietly(client);
} finally {
synchronized (this) {
mSignal = null;
}
}
return result;
}
Aggregations