Example usage for android.content ContentProviderClient query

List of usage examples for android.content ContentProviderClient query

Introduction

In this page you can find the example usage for android.content ContentProviderClient query.

Prototype

public @Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
        @Nullable String[] selectionArgs, @Nullable String sortOrder,
        @Nullable CancellationSignal cancellationSignal) throws RemoteException 

Source Link

Document

See ContentProvider#query ContentProvider.query

Usage

From source file:cn.edu.wyu.documentviewer.DirectoryResult.java

@Override
public final DirectoryResult loadInBackground() {
    synchronized (this) {
        if (isLoadInBackgroundCanceled()) {
            throw new OperationCanceledException();
        }//  w w  w.j a  v  a2  s .  co  m
        mSignal = new CancellationSignal();
    }

    final ContentResolver resolver = getContext().getContentResolver();
    final String authority = mUri.getAuthority();

    final DirectoryResult result = new DirectoryResult();

    int userMode = State.MODE_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;
            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);
        }
    } 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 (mUserSortOrder != State.SORT_ORDER_UNKNOWN) {
        result.sortOrder = mUserSortOrder;
    } 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=" + mUserSortOrder + " --> 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), mSignal);
        cursor.registerContentObserver(mObserver);

        cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1);

        if (mType == DirectoryFragment.TYPE_SEARCH) {
            // 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);
        result.exception = e;
        ContentProviderClient.releaseQuietly(client);
    } finally {
        synchronized (this) {
            mSignal = null;
        }
    }

    return result;
}