diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index efe5703..55dffb1 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -31,8 +31,8 @@
 
 public abstract class MenuManager {
 
-    final State mState;
-    final SearchViewManager mSearchManager;
+    final protected State mState;
+    final protected SearchViewManager mSearchManager;
 
     public MenuManager(SearchViewManager searchManager, State displayState) {
         mSearchManager = searchManager;
@@ -98,7 +98,7 @@
      *      unselectable item in pickers
      */
     @VisibleForTesting
-    void updateContextMenuForFiles(Menu menu, SelectionDetails selectionDetails) {
+    public void updateContextMenuForFiles(Menu menu, SelectionDetails selectionDetails) {
         assert(selectionDetails != null);
 
         MenuItem share = menu.findItem(R.id.menu_share);
@@ -125,7 +125,7 @@
      *      an unselectable item in pickers
      */
     @VisibleForTesting
-    void updateContextMenuForDirs(Menu menu, SelectionDetails selectionDetails) {
+    public void updateContextMenuForDirs(Menu menu, SelectionDetails selectionDetails) {
         assert(selectionDetails != null);
 
         MenuItem openInNewWindow = menu.findItem(R.id.menu_open_in_new_window);
@@ -145,7 +145,7 @@
      * Update shared context menu items of both files and folders context menus.
      */
     @VisibleForTesting
-    void updateContextMenu(Menu menu, SelectionDetails selectionDetails) {
+    public void updateContextMenu(Menu menu, SelectionDetails selectionDetails) {
         assert(selectionDetails != null);
 
         MenuItem cut = menu.findItem(R.id.menu_cut_to_clipboard);
@@ -166,7 +166,7 @@
      * Called when user tries to generate a context menu anchored to an empty pane.
      */
     @VisibleForTesting
-    void updateContextMenuForContainer(Menu menu, DirectoryDetails directoryDetails) {
+    public void updateContextMenuForContainer(Menu menu, DirectoryDetails directoryDetails) {
         MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
         MenuItem selectAll = menu.findItem(R.id.menu_select_all);
 
@@ -185,72 +185,75 @@
         updateEject(eject, root);
     }
 
-    void updateModePicker(MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
+    protected void updateModePicker(
+            MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
         grid.setVisible(mState.derivedMode != State.MODE_GRID);
         list.setVisible(mState.derivedMode != State.MODE_LIST);
     }
 
-    void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
+    protected void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
         advanced.setVisible(mState.showAdvancedOption);
         advanced.setTitle(mState.showAdvancedOption && mState.showAdvanced
                 ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
     }
 
-    void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
+    protected void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
         settings.setVisible(false);
     }
 
-    void updateSettings(MenuItem settings, RootInfo root) {
+    protected void updateSettings(MenuItem settings, RootInfo root) {
         settings.setVisible(false);
     }
 
-    void updateEject(MenuItem eject, RootInfo root) {
+    protected void updateEject(MenuItem eject, RootInfo root) {
         eject.setVisible(false);
     }
 
-    void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
+    protected void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
         newWindow.setVisible(false);
     }
 
-    void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
+    protected void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
         open.setVisible(false);
     }
 
-    void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
+    protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
         openWith.setVisible(false);
     }
 
-    void updateOpenInNewWindow(MenuItem openInNewWindow, SelectionDetails selectionDetails) {
+    protected void updateOpenInNewWindow(
+            MenuItem openInNewWindow, SelectionDetails selectionDetails) {
         openInNewWindow.setVisible(false);
     }
 
-    void updateShare(MenuItem share, SelectionDetails selectionDetails) {
+    protected void updateShare(MenuItem share, SelectionDetails selectionDetails) {
         share.setVisible(false);
     }
 
-    void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
+    protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
         delete.setVisible(false);
     }
 
-    void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
+    protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
         rename.setVisible(false);
     }
 
-    void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
+    protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
         moveTo.setVisible(false);
     }
 
-    void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
+    protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
         copyTo.setVisible(false);
     }
 
-    void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
+    protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
         pasteInto.setVisible(false);
     }
 
-    abstract void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails);
-    abstract void updateSelectAll(MenuItem selectAll);
-    abstract void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails);
+    protected abstract void updateOpenInContextMenu(
+            MenuItem open, SelectionDetails selectionDetails);
+    protected abstract void updateSelectAll(MenuItem selectAll);
+    protected abstract void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails);
 
     /**
      * Access to meta data about the selection.
diff --git a/src/com/android/documentsui/SearchViewManager.java b/src/com/android/documentsui/SearchViewManager.java
index 6ee455a..a632136 100644
--- a/src/com/android/documentsui/SearchViewManager.java
+++ b/src/com/android/documentsui/SearchViewManager.java
@@ -136,7 +136,7 @@
                 && ((root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0));
     }
 
-    protected void showMenu(boolean visible) {
+    public void showMenu(boolean visible) {
         if (mMenuItem == null) {
             if (DEBUG) Log.d(TAG, "showMenu called before Search MenuItem installed.");
             return;
diff --git a/src/com/android/documentsui/manager/ManageActivity.java b/src/com/android/documentsui/manager/ManageActivity.java
index 9f1c6e7..4f5de12 100644
--- a/src/com/android/documentsui/manager/ManageActivity.java
+++ b/src/com/android/documentsui/manager/ManageActivity.java
@@ -37,8 +37,6 @@
 
 import com.android.documentsui.BaseActivity;
 import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.FilesMenuManager;
-import com.android.documentsui.MenuManager;
 import com.android.documentsui.MenuManager.DirectoryDetails;
 import com.android.documentsui.Metrics;
 import com.android.documentsui.OperationDialogFragment;
@@ -82,7 +80,7 @@
     // We use the time gap to figure out whether to close app or reopen the drawer.
     private long mDrawerLastFiddled;
     private DocumentClipper mClipper;
-    private FilesMenuManager mMenuManager;
+    private MenuManager mMenuManager;
     private DirectoryDetails mDetails;
 
     public ManageActivity() {
@@ -94,7 +92,7 @@
         super.onCreate(icicle);
 
         mClipper = DocumentsApplication.getDocumentClipper(this);
-        mMenuManager = new FilesMenuManager(mSearchManager, getDisplayState());
+        mMenuManager = new MenuManager(mSearchManager, getDisplayState());
         mDetails = new DirectoryDetails(this) {
             @Override
             public boolean hasItemsToPaste() {
diff --git a/src/com/android/documentsui/FilesMenuManager.java b/src/com/android/documentsui/manager/MenuManager.java
similarity index 72%
rename from src/com/android/documentsui/FilesMenuManager.java
rename to src/com/android/documentsui/manager/MenuManager.java
index 3ad89f6..7fca108 100644
--- a/src/com/android/documentsui/FilesMenuManager.java
+++ b/src/com/android/documentsui/manager/MenuManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.manager;
 
 import android.app.Fragment;
 import android.view.Menu;
@@ -22,12 +22,14 @@
 import android.view.MenuItem;
 import android.view.View;
 
+import com.android.documentsui.R;
+import com.android.documentsui.SearchViewManager;
 import com.android.documentsui.base.RootInfo;
 import com.android.documentsui.base.State;
 
-public final class FilesMenuManager extends MenuManager {
+public final class MenuManager extends com.android.documentsui.MenuManager {
 
-    public FilesMenuManager(SearchViewManager searchManager, State displayState) {
+    public MenuManager(SearchViewManager searchManager, State displayState) {
         super(searchManager, displayState);
     }
 
@@ -78,86 +80,87 @@
     }
 
     @Override
-    void updateSettings(MenuItem settings, RootInfo root) {
+    protected void updateSettings(MenuItem settings, RootInfo root) {
         settings.setVisible(true);
         settings.setEnabled(root.hasSettings());
     }
 
     @Override
-    void updateEject(MenuItem eject, RootInfo root) {
+    protected void updateEject(MenuItem eject, RootInfo root) {
         eject.setVisible(true);
         eject.setEnabled(root.supportsEject() && !root.ejecting);
     }
 
     @Override
-    void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
+    protected void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
         settings.setVisible(directoryDetails.hasRootSettings());
     }
 
     @Override
-    void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
+    protected void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
         newWindow.setVisible(directoryDetails.shouldShowFancyFeatures());
     }
 
     @Override
-    void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
+    protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
         open.setEnabled(selectionDetails.size() == 1
                 && !selectionDetails.containsPartialFiles());
     }
 
     @Override
-    void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
+    protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) {
         openWith.setEnabled(selectionDetails.size() == 1
                 && !selectionDetails.containsPartialFiles());
     }
 
     @Override
-    void updateOpenInNewWindow(MenuItem openInNewWindow, SelectionDetails selectionDetails) {
+    protected void updateOpenInNewWindow(
+            MenuItem openInNewWindow, SelectionDetails selectionDetails) {
         openInNewWindow.setEnabled(selectionDetails.size() == 1
             && !selectionDetails.containsPartialFiles());
     }
 
     @Override
-    void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
+    protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
         moveTo.setVisible(true);
         moveTo.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canDelete());
     }
 
     @Override
-    void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
+    protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
         copyTo.setVisible(true);
         copyTo.setEnabled(!selectionDetails.containsPartialFiles());
     }
 
     @Override
-    void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
+    protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) {
         pasteInto.setEnabled(selectionDetails.canPasteInto());
     }
 
     @Override
-    void updateSelectAll(MenuItem selectAll) {
+    protected void updateSelectAll(MenuItem selectAll) {
         selectAll.setVisible(true);
     }
 
     @Override
-    void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
+    protected void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
         createDir.setVisible(true);
         createDir.setEnabled(directoryDetails.canCreateDirectory());
     }
 
     @Override
-    void updateShare(MenuItem share, SelectionDetails selectionDetails) {
+    protected void updateShare(MenuItem share, SelectionDetails selectionDetails) {
         share.setVisible(!selectionDetails.containsDirectories()
                 && !selectionDetails.containsPartialFiles());
     }
 
     @Override
-    void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
+    protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
         delete.setVisible(selectionDetails.canDelete());
     }
 
     @Override
-    void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
+    protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
         rename.setVisible(true);
         rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename());
     }
diff --git a/src/com/android/documentsui/DocumentsMenuManager.java b/src/com/android/documentsui/picker/MenuManager.java
similarity index 78%
rename from src/com/android/documentsui/DocumentsMenuManager.java
rename to src/com/android/documentsui/picker/MenuManager.java
index 4104a2c..5385482 100644
--- a/src/com/android/documentsui/DocumentsMenuManager.java
+++ b/src/com/android/documentsui/picker/MenuManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.documentsui;
+package com.android.documentsui.picker;
 
 import static com.android.documentsui.base.State.ACTION_CREATE;
 import static com.android.documentsui.base.State.ACTION_GET_CONTENT;
@@ -25,13 +25,14 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
+import com.android.documentsui.SearchViewManager;
 import com.android.documentsui.base.State;
 
-public final class DocumentsMenuManager extends MenuManager {
+public final class MenuManager extends com.android.documentsui.MenuManager {
 
     private boolean mPicking;
 
-    public DocumentsMenuManager(SearchViewManager searchManager, State displayState) {
+    public MenuManager(SearchViewManager searchManager, State displayState) {
         super(searchManager, displayState);
 
         mPicking = mState.action == ACTION_CREATE
@@ -50,7 +51,8 @@
     }
 
     @Override
-    void updateModePicker(MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
+    protected void updateModePicker(
+            MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
         // No display options in recent directories
         if (mPicking && directoryDetails.isInRecents()) {
             grid.setVisible(false);
@@ -61,23 +63,23 @@
     }
 
     @Override
-    void updateSelectAll(MenuItem selectAll) {
+    protected void updateSelectAll(MenuItem selectAll) {
         selectAll.setVisible(mState.allowMultiple);
     }
 
     @Override
-    void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
+    protected void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
         createDir.setVisible(mPicking);
         createDir.setEnabled(mPicking && directoryDetails.canCreateDirectory());
     }
 
     @Override
-    void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
+    protected void updateOpenInActionMode(MenuItem open, SelectionDetails selectionDetails) {
         updateOpen(open, selectionDetails);
     }
 
     @Override
-    void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
+    protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) {
         updateOpen(open, selectionDetails);
     }
 
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index dbe722f..9f738c8 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -43,8 +43,6 @@
 
 import com.android.documentsui.BaseActivity;
 import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.DocumentsMenuManager;
-import com.android.documentsui.MenuManager;
 import com.android.documentsui.MenuManager.DirectoryDetails;
 import com.android.documentsui.base.DocumentInfo;
 import com.android.documentsui.base.MimePredicate;
@@ -68,7 +66,7 @@
 public class PickActivity extends BaseActivity {
     private static final int CODE_FORWARD = 42;
     private static final String TAG = "DocumentsActivity";
-    private DocumentsMenuManager mMenuManager;
+    private MenuManager mMenuManager;
     private DirectoryDetails mDetails;
 
     public PickActivity() {
@@ -78,7 +76,7 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        mMenuManager = new DocumentsMenuManager(mSearchManager, getDisplayState());
+        mMenuManager = new MenuManager(mSearchManager, getDisplayState());
         mDetails = new DirectoryDetails(this);
 
         if (mState.action == ACTION_CREATE) {
