DirectoryLoader.java revision d182bb641f228b2d28527a6aa86075f6358ab838
1ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey/* 2ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * Copyright (C) 2013 The Android Open Source Project 3ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * 4ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * you may not use this file except in compliance with the License. 6ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * You may obtain a copy of the License at 7ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * 8ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * 10ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * See the License for the specific language governing permissions and 14ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey * limitations under the License. 15ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey */ 16ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 17ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeypackage com.android.documentsui; 18ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 19d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport static com.android.documentsui.DocumentsActivity.TAG; 20d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport static com.android.documentsui.DocumentsActivity.State.MODE_UNKNOWN; 21b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkeyimport static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_DISPLAY_NAME; 22b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkeyimport static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_LAST_MODIFIED; 23b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkeyimport static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_SIZE; 24d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_UNKNOWN; 25d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport static com.android.documentsui.model.DocumentInfo.getCursorInt; 26b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkey 275dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkeyimport android.content.AsyncTaskLoader; 285dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkeyimport android.content.ContentProviderClient; 29d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport android.content.ContentResolver; 30ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport android.content.Context; 31ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport android.database.Cursor; 32ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport android.net.Uri; 33ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport android.os.CancellationSignal; 345dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkeyimport android.os.OperationCanceledException; 355dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkeyimport android.provider.DocumentsContract.Document; 36d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport android.util.Log; 37d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 38d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport com.android.documentsui.DocumentsActivity.State; 39d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport com.android.documentsui.RecentsProvider.StateColumns; 40d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport com.android.documentsui.model.DocumentInfo; 41d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkeyimport com.android.documentsui.model.RootInfo; 42ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 43ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport libcore.io.IoUtils; 44ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 45b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkeyclass DirectoryResult implements AutoCloseable { 465dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey ContentProviderClient client; 47b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey Cursor cursor; 485dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey Exception exception; 49b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey 50d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey int mode = MODE_UNKNOWN; 51d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey int sortOrder = SORT_ORDER_UNKNOWN; 52d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 53b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey @Override 545dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey public void close() { 55b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey IoUtils.closeQuietly(cursor); 565dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey ContentProviderClient.closeQuietly(client); 575dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey cursor = null; 585dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey client = null; 59b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey } 60b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey} 61b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey 625dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkeypublic class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { 635dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver(); 645dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 65d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey private final RootInfo mRoot; 66d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey private final DocumentInfo mDoc; 675dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey private final Uri mUri; 68ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 695dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey private CancellationSignal mSignal; 705dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey private DirectoryResult mResult; 71ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 72d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey public DirectoryLoader(Context context, RootInfo root, DocumentInfo doc, Uri uri) { 735dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey super(context); 74d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mRoot = root; 75d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mDoc = doc; 765dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey mUri = uri; 77ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 78ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 79ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey @Override 805dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey public final DirectoryResult loadInBackground() { 815dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey synchronized (this) { 825dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (isLoadInBackgroundCanceled()) { 835dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey throw new OperationCanceledException(); 845dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 855dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey mSignal = new CancellationSignal(); 865dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 87d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 88d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final ContentResolver resolver = getContext().getContentResolver(); 89251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey final String authority = mUri.getAuthority(); 90d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 91d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final DirectoryResult result = new DirectoryResult(); 92d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 93d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey int userMode = State.MODE_UNKNOWN; 94d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey int userSortOrder = State.SORT_ORDER_UNKNOWN; 95d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 96d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey // Pick up any custom modes requested by user 97d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey Cursor cursor = null; 9854ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey try { 99d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final Uri stateUri = RecentsProvider.buildState( 100d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mRoot.authority, mRoot.rootId, mDoc.documentId); 101d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey cursor = resolver.query(stateUri, null, null, null, null); 102d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if (cursor.moveToFirst()) { 103d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey userMode = getCursorInt(cursor, StateColumns.MODE); 104d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey userSortOrder = getCursorInt(cursor, StateColumns.SORT_ORDER); 105d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 106d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } finally { 107d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey IoUtils.closeQuietly(cursor); 108d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 109d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 110d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if (userMode != State.MODE_UNKNOWN) { 111d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.mode = userMode; 112d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } else { 113d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if ((mDoc.flags & Document.FLAG_DIR_PREFERS_GRID) != 0) { 114d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.mode = State.MODE_GRID; 115d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } else { 116d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.mode = State.MODE_LIST; 117d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 118d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 119d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 120d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if (userSortOrder != State.SORT_ORDER_UNKNOWN) { 121d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.sortOrder = userSortOrder; 122d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } else { 123d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey if ((mDoc.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0) { 124d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.sortOrder = State.SORT_ORDER_LAST_MODIFIED; 125d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } else { 126d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.sortOrder = State.SORT_ORDER_DISPLAY_NAME; 127d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 128d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey } 129d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 130d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey Log.d(TAG, "userMode=" + userMode + ", userSortOrder=" + userSortOrder + " --> mode=" 131d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey + result.mode + ", sortOrder=" + result.sortOrder); 132d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 133d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey try { 134d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey result.client = resolver.acquireUnstableContentProviderClient(authority); 135d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey cursor = result.client.query( 136d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal); 137954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey cursor.registerContentObserver(mObserver); 138954be0232655d316bc5decbbd35579af902c75c2Jeff Sharkey 139d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final Cursor withRoot = new RootCursorWrapper( 140d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey mUri.getAuthority(), mRoot.rootId, cursor, -1); 141d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey final Cursor sorted = new SortingCursorWrapper(withRoot, result.sortOrder); 142251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey 143251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey result.cursor = sorted; 14454ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } catch (Exception e) { 145d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey Log.d(TAG, "Failed to query", e); 1465dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey result.exception = e; 1475dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey ContentProviderClient.closeQuietly(result.client); 1485dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } finally { 1495dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey synchronized (this) { 1505dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey mSignal = null; 1515dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 15254ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } 153d182bb641f228b2d28527a6aa86075f6358ab838Jeff Sharkey 154b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey return result; 15554ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } 15654ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey 1575dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey @Override 1585dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey public void cancelLoadInBackground() { 1595dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey super.cancelLoadInBackground(); 160b448660a227f93d7bd5c5d019a21745e67c2f54dJeff Sharkey 1615dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey synchronized (this) { 1625dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (mSignal != null) { 1635dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey mSignal.cancel(); 164ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 165ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 1665dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1675dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 1685dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey @Override 1695dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey public void deliverResult(DirectoryResult result) { 1705dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (isReset()) { 1715dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey IoUtils.closeQuietly(result); 1725dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey return; 1735dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1745dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey DirectoryResult oldResult = mResult; 1755dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey mResult = result; 1765dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 1775dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (isStarted()) { 1785dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey super.deliverResult(result); 1795dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1805dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 1815dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (oldResult != null && oldResult != result) { 1825dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey IoUtils.closeQuietly(oldResult); 1835dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1845dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1855dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 1865dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey @Override 1875dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey protected void onStartLoading() { 1885dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (mResult != null) { 1895dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey deliverResult(mResult); 1905dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1915dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey if (takeContentChanged() || mResult == null) { 1925dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey forceLoad(); 1935dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1945dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 1955dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 1965dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey @Override 1975dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey protected void onStopLoading() { 1985dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey cancelLoad(); 1995dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 2005dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 2015dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey @Override 2025dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey public void onCanceled(DirectoryResult result) { 2035dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey IoUtils.closeQuietly(result); 2045dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 2055dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 2065dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey @Override 2075dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey protected void onReset() { 2085dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey super.onReset(); 2095dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 2105dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey // Ensure the loader is stopped 2115dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey onStopLoading(); 2125dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 2135dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey IoUtils.closeQuietly(mResult); 2145dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey mResult = null; 2155dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey 2165dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey getContext().getContentResolver().unregisterContentObserver(mObserver); 2175dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey } 218ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 219251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey public static String getQuerySortOrder(int sortOrder) { 220251097b3789632000ccdaf7fb7d66a82ff37d882Jeff Sharkey switch (sortOrder) { 221b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkey case SORT_ORDER_DISPLAY_NAME: 2225dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey return Document.COLUMN_DISPLAY_NAME + " ASC"; 223b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkey case SORT_ORDER_LAST_MODIFIED: 2245dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey return Document.COLUMN_LAST_MODIFIED + " DESC"; 225b51331116eb2ebbc41aaf69142916f9af6dffdd5Jeff Sharkey case SORT_ORDER_SIZE: 2265dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey return Document.COLUMN_SIZE + " DESC"; 2275dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey default: 2285dfb345df7cb17b3a7e534a80a270b4afe7934daJeff Sharkey return null; 229ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 230ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 231ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey} 232