Sliding drawer for roots, move sorting, search.

Move backend root exploration into sliding drawer, and adjust action
bar when moving between modes.  Moves sorting into action bar spinner
instead of separate dialog.  Also add initial search support.

Change-Id: I70189911ba56ae6bd93d5c503a8600acd6d6c0c5
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index 531eaf3..8b3dd99 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -16,17 +16,12 @@
 
 package com.android.documentsui;
 
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
 import android.content.CursorLoader;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
 import android.content.Loader;
 import android.database.Cursor;
 import android.net.Uri;
@@ -65,8 +60,6 @@
 
     // TODO: show storage backend in item views when requested
 
-    private static final String TAG_SORT = "sort";
-
     private ListView mListView;
     private GridView mGridView;
 
@@ -81,7 +74,8 @@
 
     private static final int LOADER_DOCUMENTS = 2;
 
-    public static void show(FragmentManager fm, Uri uri, String displayName) {
+    public static void show(
+            FragmentManager fm, Uri uri, String displayName, boolean addToBackStack) {
         final Bundle args = new Bundle();
         args.putParcelable(EXTRA_URI, uri);
 
@@ -90,7 +84,9 @@
 
         final FragmentTransaction ft = fm.beginTransaction();
         ft.replace(R.id.directory, fragment);
-        ft.addToBackStack(displayName);
+        if (addToBackStack) {
+            ft.addToBackStack(displayName);
+        }
         ft.setBreadCrumbTitle(displayName);
         ft.commitAllowingStateLoss();
     }
@@ -136,7 +132,13 @@
                     sortOrder = null;
                 }
 
-                final Uri contentsUri = DocumentsContract.buildContentsUri(uri);
+                final Uri contentsUri;
+                if (uri.getQueryParameter(DocumentsContract.PARAM_QUERY) != null) {
+                    contentsUri = uri;
+                } else {
+                    contentsUri = DocumentsContract.buildContentsUri(uri);
+                }
+
                 return new CursorLoader(context, contentsUri, null, null, null, sortOrder);
             }
 
@@ -198,9 +200,6 @@
             updateMode();
             getFragmentManager().invalidateOptionsMenu();
             return true;
-        } else if (id == R.id.menu_sort) {
-            SortFragment.show(this);
-            return true;
         } else {
             return super.onOptionsItemSelected(item);
         }
@@ -238,7 +237,7 @@
         }
     }
 
-    private void updateSortBy() {
+    public void updateSortBy() {
         getLoaderManager().restartLoader(LOADER_DOCUMENTS, getArguments(), mCallbacks);
     }
 
@@ -358,38 +357,6 @@
         }
     }
 
-    public static class SortFragment extends DialogFragment {
-        public static void show(DirectoryFragment parent) {
-            if (!parent.isAdded()) return;
-
-            final SortFragment dialog = new SortFragment();
-            dialog.setTargetFragment(parent, 0);
-            dialog.show(parent.getFragmentManager(), TAG_SORT);
-        }
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            final Context context = getActivity();
-            final DisplayState state = getDisplayState(this);
-
-            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
-            builder.setTitle(R.string.menu_sort);
-            builder.setSingleChoiceItems(new CharSequence[] {
-                    getText(R.string.sort_name),
-                    getText(R.string.sort_date),
-            }, state.sortBy, new OnClickListener() {
-                @Override
-                public void onClick(DialogInterface dialog, int which) {
-                    state.sortBy = which;
-                    ((DirectoryFragment) getTargetFragment()).updateSortBy();
-                    dismiss();
-                }
-            });
-
-            return builder.create();
-        }
-    }
-
     private static int getDocumentFlags(Context context, Uri uri) {
         final Cursor cursor = context.getContentResolver().query(uri, new String[] {
                 DocumentColumns.FLAGS }, null, null, null);