Search in sources :

Example 1 with RootCursorWrapper

use of dev.dworks.apps.anexplorer.cursor.RootCursorWrapper 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;
}
Also used : RootCursorWrapper(dev.dworks.apps.anexplorer.cursor.RootCursorWrapper) OperationCanceledException(android.os.OperationCanceledException) FileNotFoundException(java.io.FileNotFoundException) Cursor(android.database.Cursor) Uri(android.net.Uri) SortingCursorWrapper(dev.dworks.apps.anexplorer.cursor.SortingCursorWrapper) OperationCanceledException(android.os.OperationCanceledException) FileNotFoundException(java.io.FileNotFoundException) ContentResolver(android.content.ContentResolver) DirectoryResult(dev.dworks.apps.anexplorer.model.DirectoryResult) FilteringCursorWrapper(dev.dworks.apps.anexplorer.cursor.FilteringCursorWrapper) CancellationSignal(android.os.CancellationSignal) ContentProviderClient(android.content.ContentProviderClient)

Aggregations

ContentProviderClient (android.content.ContentProviderClient)1 ContentResolver (android.content.ContentResolver)1 Cursor (android.database.Cursor)1 Uri (android.net.Uri)1 CancellationSignal (android.os.CancellationSignal)1 OperationCanceledException (android.os.OperationCanceledException)1 FilteringCursorWrapper (dev.dworks.apps.anexplorer.cursor.FilteringCursorWrapper)1 RootCursorWrapper (dev.dworks.apps.anexplorer.cursor.RootCursorWrapper)1 SortingCursorWrapper (dev.dworks.apps.anexplorer.cursor.SortingCursorWrapper)1 DirectoryResult (dev.dworks.apps.anexplorer.model.DirectoryResult)1 FileNotFoundException (java.io.FileNotFoundException)1