Storage roots in fragment, sectioned.

Move storage roots into a fragment, since it's not a drawer on
tablets.  Cluster and sort roots when displaying.  SectionedListAdapter
to make clustered roots easier to manage.  Add docs for root types.

Move roots cache into separate class to make it easier to share.

Change-Id: Ia0b92eade059e816324641f600c08026c0e268c9
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index f6f3f9c..1443f26 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -87,13 +87,13 @@
         fragment.setArguments(args);
 
         final FragmentTransaction ft = fm.beginTransaction();
-        ft.replace(R.id.directory, fragment);
+        ft.replace(R.id.container_directory, fragment);
         ft.commitAllowingStateLoss();
     }
 
     public static DirectoryFragment get(FragmentManager fm) {
         // TODO: deal with multiple directories shown at once
-        return (DirectoryFragment) fm.findFragmentById(R.id.directory);
+        return (DirectoryFragment) fm.findFragmentById(R.id.container_directory);
     }
 
     @Override
@@ -360,7 +360,7 @@
                 // TODO: load thumbnails async
                 icon.setImageURI(doc.uri);
             } else {
-                icon.setImageDrawable(DocumentsActivity.resolveDocumentIcon(
+                icon.setImageDrawable(RootsCache.resolveDocumentIcon(
                         context, doc.uri.getAuthority(), doc.mimeType));
             }