Loading res/menu/activity.xml +1 −9 Original line number Diff line number Diff line Loading @@ -63,15 +63,7 @@ android:icon="@drawable/ic_menu_sortby" android:showAsAction="ifRoom"> <menu> <item android:id="@+id/menu_sort_name" android:title="@string/sort_name" /> <item android:id="@+id/menu_sort_date" android:title="@string/sort_date" /> <item android:id="@+id/menu_sort_size" android:title="@string/sort_size" /> <!-- A submenu placeholder for SortMenuController to add menu item --> </menu> </item> <item Loading res/values/strings.xml +8 −12 Original line number Diff line number Diff line Loading @@ -85,21 +85,17 @@ <string name="button_dismiss">Dismiss</string> <string name="button_retry">Try Again</string> <!-- Mode that sorts documents by their display name alphabetically [CHAR LIMIT=24] --> <string name="sort_name">By name</string> <!-- Mode that sorts documents by their last modified time in descending order; most recent first [CHAR LIMIT=24] --> <string name="sort_date">By date modified</string> <!-- Mode that sorts documents by their file size in descending order; largest first [CHAR LIMIT=24] --> <string name="sort_size">By size</string> <!-- A phrase to indicate which dimension items should be sorted by, such as By Name, By Size etc. [CHAR_LIMIT=24] --> <string name="sort_phrase">By <xliff:g id="dimension" example="Name">%1$s</xliff:g></string> <!-- Table header for file name [CHAR_LIMIT=24] --> <string name="column_name">Name</string> <string name="sort_dimension_name">Name</string> <!-- Table header for metadata of downloaded files, such as download source and progress. [CHAR_LIMIT=24] --> <string name="column_summary">Summary</string> <!-- Table header for last modified time. [CHAR_LIMIT=24] --> <string name="column_date">Modified</string> <!-- Table header for file size. [CHAR_LIMIT=24] --> <string name="column_size">Size</string> <string name="sort_dimension_summary">Summary</string> <!-- Table header for last modified time. [CHAR_LIMIT=12] --> <string name="sort_dimension_date">Modified</string> <!-- Table header for file size. [CHAR_LIMIT=12] --> <string name="sort_dimension_size">Size</string> <!-- content description to describe ascending sorting used with upward arrow in table header. --> <string name="sort_direction_ascending">Ascending</string> Loading src/com/android/documentsui/BaseActivity.java +8 −37 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import com.android.documentsui.model.RootInfo; import com.android.documentsui.services.FileOperationService; import com.android.documentsui.services.FileOperations; import com.android.documentsui.sorting.SortController; import com.android.documentsui.sorting.SortMenuController; import com.android.documentsui.sorting.SortModel; import java.io.FileNotFoundException; Loading Loading @@ -127,6 +128,7 @@ public abstract class BaseActivity extends Activity private long mStartTime; private SortController mSortController; private SortMenuController mSortMenuController; public abstract void onDocumentPicked(DocumentInfo doc, Model model); public abstract void onDocumentsPicked(List<DocumentInfo> docs); Loading Loading @@ -171,7 +173,7 @@ public abstract class BaseActivity extends Activity getContentResolver().registerContentObserver( RootsCache.sNotificationUri, false, mRootsCacheObserver); mSearchManager = new SearchViewManager(this, icicle); mSearchManager = new SearchViewManager(this, icicle, mState.sortModel); DocumentsToolbar toolbar = (DocumentsToolbar) findViewById(R.id.toolbar); setActionBar(toolbar); Loading @@ -182,7 +184,9 @@ public abstract class BaseActivity extends Activity mNavigator = new NavigationViewManager(mDrawer, toolbar, mState, this, breadcrumb); mSortController = new SortController(mState.sortModel); mSortController = new SortController(mState.sortModel, this); mSortMenuController = new SortMenuController(getResources()); mSortController.manage(mSortMenuController); // Base classes must update result in their onCreate. setResult(Activity.RESULT_CANCELED); Loading @@ -197,6 +201,8 @@ public abstract class BaseActivity extends Activity boolean fullBarSearch = getResources().getBoolean(R.bool.full_bar_search_view); mSearchManager.install((DocumentsToolbar) findViewById(R.id.toolbar), fullBarSearch); mSortMenuController.install(menu.findItem(R.id.menu_sort)); return showMenu; } Loading Loading @@ -307,18 +313,6 @@ public abstract class BaseActivity extends Activity // SearchViewManager listens for this directly. return false; case R.id.menu_sort_name: setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME); return true; case R.id.menu_sort_date: setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED); return true; case R.id.menu_sort_size: setUserSortOrder(State.SORT_ORDER_SIZE); return true; case R.id.menu_grid: setViewMode(State.MODE_GRID); return true; Loading Loading @@ -529,29 +523,6 @@ public abstract class BaseActivity extends Activity invalidateOptionsMenu(); } /** * Set state sort order based on explicit user action. */ void setUserSortOrder(int sortOrder) { switch(sortOrder) { case State.SORT_ORDER_DISPLAY_NAME: Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_NAME); break; case State.SORT_ORDER_LAST_MODIFIED: Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_DATE); break; case State.SORT_ORDER_SIZE: Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_SIZE); break; } mState.userSortOrder = sortOrder; DirectoryFragment dir = getDirectoryFragment(); if (dir != null) { dir.onSortOrderChanged(); } } /** * Set mode based on explicit user action. */ Loading src/com/android/documentsui/DirectoryLoader.java +9 −43 Original line number Diff line number Diff line Loading @@ -16,12 +16,6 @@ package com.android.documentsui; import static com.android.documentsui.Shared.DEBUG; import static com.android.documentsui.Shared.TAG; import static com.android.documentsui.State.SORT_ORDER_DISPLAY_NAME; import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED; import static com.android.documentsui.State.SORT_ORDER_SIZE; import android.content.AsyncTaskLoader; import android.content.ContentProviderClient; import android.content.ContentResolver; Loading @@ -35,9 +29,9 @@ import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.util.Log; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.RootInfo; import com.android.documentsui.sorting.SortModel; import libcore.io.IoUtils; Loading @@ -45,6 +39,8 @@ import java.io.FileNotFoundException; public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private static final String TAG = "DirectoryLoader"; private static final String[] SEARCH_REJECT_MIMES = new String[] { Document.MIME_TYPE_DIR }; private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver(); Loading @@ -52,7 +48,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private final int mType; private final RootInfo mRoot; private final Uri mUri; private final int mUserSortOrder; private final SortModel mModel; private final boolean mSearchMode; private DocumentInfo mDoc; Loading @@ -60,12 +56,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private DirectoryResult mResult; public DirectoryLoader(Context context, int type, RootInfo root, DocumentInfo doc, Uri uri, int userSortOrder, boolean inSearchMode) { SortModel model, boolean inSearchMode) { super(context, ProviderExecutor.forAuthority(root.authority)); mType = type; mRoot = root; mUri = uri; mUserSortOrder = userSortOrder; mModel = model; mDoc = doc; mSearchMode = inSearchMode; } Loading @@ -84,6 +80,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { final DirectoryResult result = new DirectoryResult(); result.doc = mDoc; result.sortModel = mModel; // Use default document when searching if (mSearchMode) { Loading @@ -98,30 +95,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { } } 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 (mSearchMode) { result.sortOrder = State.SORT_ORDER_UNKNOWN; } if (DEBUG) Log.d(TAG, "userSortOrder=" + mUserSortOrder + ", sortOrder=" + result.sortOrder); ContentProviderClient client = null; Cursor cursor = null; Cursor cursor; try { client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority); cursor = client.query( mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal); mUri, null, null, null, mModel.getDocumentSortQuery(), mSignal); if (cursor == null) { throw new RemoteException("Provider returned null"); } Loading Loading @@ -211,17 +190,4 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { getContext().getContentResolver().unregisterContentObserver(mObserver); } public static String getQuerySortOrder(int sortOrder) { switch (sortOrder) { case SORT_ORDER_DISPLAY_NAME: return Document.COLUMN_DISPLAY_NAME + " ASC"; case SORT_ORDER_LAST_MODIFIED: return Document.COLUMN_LAST_MODIFIED + " DESC"; case SORT_ORDER_SIZE: return Document.COLUMN_SIZE + " DESC"; default: return null; } } } src/com/android/documentsui/DirectoryResult.java +3 −5 Original line number Diff line number Diff line Loading @@ -16,13 +16,11 @@ package com.android.documentsui; import static com.android.documentsui.State.MODE_UNKNOWN; import static com.android.documentsui.State.SORT_ORDER_UNKNOWN; import android.content.ContentProviderClient; import android.database.Cursor; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.sorting.SortModel; import libcore.io.IoUtils; Loading @@ -31,8 +29,7 @@ public class DirectoryResult implements AutoCloseable { public Cursor cursor; public Exception exception; public DocumentInfo doc; public int sortOrder = SORT_ORDER_UNKNOWN; public SortModel sortModel; @Override public void close() { Loading @@ -40,5 +37,6 @@ public class DirectoryResult implements AutoCloseable { ContentProviderClient.releaseQuietly(client); cursor = null; client = null; sortModel = null; } } Loading
res/menu/activity.xml +1 −9 Original line number Diff line number Diff line Loading @@ -63,15 +63,7 @@ android:icon="@drawable/ic_menu_sortby" android:showAsAction="ifRoom"> <menu> <item android:id="@+id/menu_sort_name" android:title="@string/sort_name" /> <item android:id="@+id/menu_sort_date" android:title="@string/sort_date" /> <item android:id="@+id/menu_sort_size" android:title="@string/sort_size" /> <!-- A submenu placeholder for SortMenuController to add menu item --> </menu> </item> <item Loading
res/values/strings.xml +8 −12 Original line number Diff line number Diff line Loading @@ -85,21 +85,17 @@ <string name="button_dismiss">Dismiss</string> <string name="button_retry">Try Again</string> <!-- Mode that sorts documents by their display name alphabetically [CHAR LIMIT=24] --> <string name="sort_name">By name</string> <!-- Mode that sorts documents by their last modified time in descending order; most recent first [CHAR LIMIT=24] --> <string name="sort_date">By date modified</string> <!-- Mode that sorts documents by their file size in descending order; largest first [CHAR LIMIT=24] --> <string name="sort_size">By size</string> <!-- A phrase to indicate which dimension items should be sorted by, such as By Name, By Size etc. [CHAR_LIMIT=24] --> <string name="sort_phrase">By <xliff:g id="dimension" example="Name">%1$s</xliff:g></string> <!-- Table header for file name [CHAR_LIMIT=24] --> <string name="column_name">Name</string> <string name="sort_dimension_name">Name</string> <!-- Table header for metadata of downloaded files, such as download source and progress. [CHAR_LIMIT=24] --> <string name="column_summary">Summary</string> <!-- Table header for last modified time. [CHAR_LIMIT=24] --> <string name="column_date">Modified</string> <!-- Table header for file size. [CHAR_LIMIT=24] --> <string name="column_size">Size</string> <string name="sort_dimension_summary">Summary</string> <!-- Table header for last modified time. [CHAR_LIMIT=12] --> <string name="sort_dimension_date">Modified</string> <!-- Table header for file size. [CHAR_LIMIT=12] --> <string name="sort_dimension_size">Size</string> <!-- content description to describe ascending sorting used with upward arrow in table header. --> <string name="sort_direction_ascending">Ascending</string> Loading
src/com/android/documentsui/BaseActivity.java +8 −37 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import com.android.documentsui.model.RootInfo; import com.android.documentsui.services.FileOperationService; import com.android.documentsui.services.FileOperations; import com.android.documentsui.sorting.SortController; import com.android.documentsui.sorting.SortMenuController; import com.android.documentsui.sorting.SortModel; import java.io.FileNotFoundException; Loading Loading @@ -127,6 +128,7 @@ public abstract class BaseActivity extends Activity private long mStartTime; private SortController mSortController; private SortMenuController mSortMenuController; public abstract void onDocumentPicked(DocumentInfo doc, Model model); public abstract void onDocumentsPicked(List<DocumentInfo> docs); Loading Loading @@ -171,7 +173,7 @@ public abstract class BaseActivity extends Activity getContentResolver().registerContentObserver( RootsCache.sNotificationUri, false, mRootsCacheObserver); mSearchManager = new SearchViewManager(this, icicle); mSearchManager = new SearchViewManager(this, icicle, mState.sortModel); DocumentsToolbar toolbar = (DocumentsToolbar) findViewById(R.id.toolbar); setActionBar(toolbar); Loading @@ -182,7 +184,9 @@ public abstract class BaseActivity extends Activity mNavigator = new NavigationViewManager(mDrawer, toolbar, mState, this, breadcrumb); mSortController = new SortController(mState.sortModel); mSortController = new SortController(mState.sortModel, this); mSortMenuController = new SortMenuController(getResources()); mSortController.manage(mSortMenuController); // Base classes must update result in their onCreate. setResult(Activity.RESULT_CANCELED); Loading @@ -197,6 +201,8 @@ public abstract class BaseActivity extends Activity boolean fullBarSearch = getResources().getBoolean(R.bool.full_bar_search_view); mSearchManager.install((DocumentsToolbar) findViewById(R.id.toolbar), fullBarSearch); mSortMenuController.install(menu.findItem(R.id.menu_sort)); return showMenu; } Loading Loading @@ -307,18 +313,6 @@ public abstract class BaseActivity extends Activity // SearchViewManager listens for this directly. return false; case R.id.menu_sort_name: setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME); return true; case R.id.menu_sort_date: setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED); return true; case R.id.menu_sort_size: setUserSortOrder(State.SORT_ORDER_SIZE); return true; case R.id.menu_grid: setViewMode(State.MODE_GRID); return true; Loading Loading @@ -529,29 +523,6 @@ public abstract class BaseActivity extends Activity invalidateOptionsMenu(); } /** * Set state sort order based on explicit user action. */ void setUserSortOrder(int sortOrder) { switch(sortOrder) { case State.SORT_ORDER_DISPLAY_NAME: Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_NAME); break; case State.SORT_ORDER_LAST_MODIFIED: Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_DATE); break; case State.SORT_ORDER_SIZE: Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_SIZE); break; } mState.userSortOrder = sortOrder; DirectoryFragment dir = getDirectoryFragment(); if (dir != null) { dir.onSortOrderChanged(); } } /** * Set mode based on explicit user action. */ Loading
src/com/android/documentsui/DirectoryLoader.java +9 −43 Original line number Diff line number Diff line Loading @@ -16,12 +16,6 @@ package com.android.documentsui; import static com.android.documentsui.Shared.DEBUG; import static com.android.documentsui.Shared.TAG; import static com.android.documentsui.State.SORT_ORDER_DISPLAY_NAME; import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED; import static com.android.documentsui.State.SORT_ORDER_SIZE; import android.content.AsyncTaskLoader; import android.content.ContentProviderClient; import android.content.ContentResolver; Loading @@ -35,9 +29,9 @@ import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.util.Log; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.RootInfo; import com.android.documentsui.sorting.SortModel; import libcore.io.IoUtils; Loading @@ -45,6 +39,8 @@ import java.io.FileNotFoundException; public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private static final String TAG = "DirectoryLoader"; private static final String[] SEARCH_REJECT_MIMES = new String[] { Document.MIME_TYPE_DIR }; private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver(); Loading @@ -52,7 +48,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private final int mType; private final RootInfo mRoot; private final Uri mUri; private final int mUserSortOrder; private final SortModel mModel; private final boolean mSearchMode; private DocumentInfo mDoc; Loading @@ -60,12 +56,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private DirectoryResult mResult; public DirectoryLoader(Context context, int type, RootInfo root, DocumentInfo doc, Uri uri, int userSortOrder, boolean inSearchMode) { SortModel model, boolean inSearchMode) { super(context, ProviderExecutor.forAuthority(root.authority)); mType = type; mRoot = root; mUri = uri; mUserSortOrder = userSortOrder; mModel = model; mDoc = doc; mSearchMode = inSearchMode; } Loading @@ -84,6 +80,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { final DirectoryResult result = new DirectoryResult(); result.doc = mDoc; result.sortModel = mModel; // Use default document when searching if (mSearchMode) { Loading @@ -98,30 +95,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { } } 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 (mSearchMode) { result.sortOrder = State.SORT_ORDER_UNKNOWN; } if (DEBUG) Log.d(TAG, "userSortOrder=" + mUserSortOrder + ", sortOrder=" + result.sortOrder); ContentProviderClient client = null; Cursor cursor = null; Cursor cursor; try { client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority); cursor = client.query( mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal); mUri, null, null, null, mModel.getDocumentSortQuery(), mSignal); if (cursor == null) { throw new RemoteException("Provider returned null"); } Loading Loading @@ -211,17 +190,4 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { getContext().getContentResolver().unregisterContentObserver(mObserver); } public static String getQuerySortOrder(int sortOrder) { switch (sortOrder) { case SORT_ORDER_DISPLAY_NAME: return Document.COLUMN_DISPLAY_NAME + " ASC"; case SORT_ORDER_LAST_MODIFIED: return Document.COLUMN_LAST_MODIFIED + " DESC"; case SORT_ORDER_SIZE: return Document.COLUMN_SIZE + " DESC"; default: return null; } } }
src/com/android/documentsui/DirectoryResult.java +3 −5 Original line number Diff line number Diff line Loading @@ -16,13 +16,11 @@ package com.android.documentsui; import static com.android.documentsui.State.MODE_UNKNOWN; import static com.android.documentsui.State.SORT_ORDER_UNKNOWN; import android.content.ContentProviderClient; import android.database.Cursor; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.sorting.SortModel; import libcore.io.IoUtils; Loading @@ -31,8 +29,7 @@ public class DirectoryResult implements AutoCloseable { public Cursor cursor; public Exception exception; public DocumentInfo doc; public int sortOrder = SORT_ORDER_UNKNOWN; public SortModel sortModel; @Override public void close() { Loading @@ -40,5 +37,6 @@ public class DirectoryResult implements AutoCloseable { ContentProviderClient.releaseQuietly(client); cursor = null; client = null; sortModel = null; } }