Inject DirectoryDetails into MenuManager Const.

Rather than passing to *every* method.

Change-Id: I5890891fa8c98b7db542775655b67c270e699886
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index d41c521..c96d605 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -152,12 +152,6 @@
      */
     public abstract MenuManager getMenuManager();
 
-    /**
-     * Provides Activity a means of injection into and specialization of
-     * DirectoryFragment.
-     */
-    public abstract DirectoryDetails getDirectoryDetails();
-
     public abstract void onDocumentPicked(DocumentInfo doc, Model model);
     public abstract void onDocumentsPicked(List<DocumentInfo> docs);
 
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 55dffb1..ac45c16 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -31,12 +31,17 @@
 
 public abstract class MenuManager {
 
-    final protected State mState;
     final protected SearchViewManager mSearchManager;
+    final protected State mState;
+    final protected DirectoryDetails mDirDetails;
 
-    public MenuManager(SearchViewManager searchManager, State displayState) {
+    public MenuManager(
+            SearchViewManager searchManager,
+            State displayState,
+            DirectoryDetails dirDetails) {
         mSearchManager = searchManager;
         mState = displayState;
+        mDirDetails = dirDetails;
     }
 
     /** @see ActionModeController */
@@ -53,14 +58,13 @@
     }
 
     /** @see BaseActivity#onPrepareOptionsMenu */
-    public void updateOptionMenu(Menu menu, DirectoryDetails directoryDetails) {
-        updateCreateDir(menu.findItem(R.id.menu_create_dir), directoryDetails);
-        updateSettings(menu.findItem(R.id.menu_settings), directoryDetails);
-        updateNewWindow(menu.findItem(R.id.menu_new_window), directoryDetails);
-        updateModePicker(menu.findItem(
-                R.id.menu_grid), menu.findItem(R.id.menu_list), directoryDetails);
+    public void updateOptionMenu(Menu menu) {
+        updateCreateDir(menu.findItem(R.id.menu_create_dir));
+        updateSettings(menu.findItem(R.id.menu_settings));
+        updateNewWindow(menu.findItem(R.id.menu_new_window));
+        updateModePicker(menu.findItem(R.id.menu_grid), menu.findItem(R.id.menu_list));
         // Sort menu item is managed by SortMenuManager
-        updateAdvanced(menu.findItem(R.id.menu_advanced), directoryDetails);
+        updateAdvanced(menu.findItem(R.id.menu_advanced));
 
         Menus.disableHiddenItems(menu);
     }
@@ -77,8 +81,7 @@
         // Pickers don't have any context menu at this moment.
     }
 
-    public void inflateContextMenuForContainer(
-            Menu menu, MenuInflater inflater, DirectoryDetails directoryDetails) {
+    public void inflateContextMenuForContainer(Menu menu, MenuInflater inflater) {
         throw new UnsupportedOperationException("Pickers don't allow context menu.");
     }
 
@@ -166,11 +169,11 @@
      * Called when user tries to generate a context menu anchored to an empty pane.
      */
     @VisibleForTesting
-    public void updateContextMenuForContainer(Menu menu, DirectoryDetails directoryDetails) {
+    public void updateContextMenuForContainer(Menu menu) {
         MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
         MenuItem selectAll = menu.findItem(R.id.menu_select_all);
 
-        paste.setEnabled(directoryDetails.hasItemsToPaste() && directoryDetails.canCreateDoc());
+        paste.setEnabled(mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc());
         updateSelectAll(selectAll);
     }
 
@@ -185,19 +188,18 @@
         updateEject(eject, root);
     }
 
-    protected void updateModePicker(
-            MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
+    protected void updateModePicker(MenuItem grid, MenuItem list) {
         grid.setVisible(mState.derivedMode != State.MODE_GRID);
         list.setVisible(mState.derivedMode != State.MODE_LIST);
     }
 
-    protected void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
+    protected void updateAdvanced(MenuItem advanced) {
         advanced.setVisible(mState.showAdvancedOption);
         advanced.setTitle(mState.showAdvancedOption && mState.showAdvanced
                 ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
     }
 
-    protected void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
+    protected void updateSettings(MenuItem settings) {
         settings.setVisible(false);
     }
 
@@ -209,7 +211,7 @@
         eject.setVisible(false);
     }
 
-    protected void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
+    protected void updateNewWindow(MenuItem newWindow) {
         newWindow.setVisible(false);
     }
 
@@ -253,7 +255,7 @@
     protected abstract void updateOpenInContextMenu(
             MenuItem open, SelectionDetails selectionDetails);
     protected abstract void updateSelectAll(MenuItem selectAll);
-    protected abstract void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails);
+    protected abstract void updateCreateDir(MenuItem createDir);
 
     /**
      * Access to meta data about the selection.
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index bcd1f30..997fc8a 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -448,8 +448,7 @@
             // TODO: inject DirectoryDetails into MenuManager constructor
             // Since both classes are supplied by Activity and created
             // at the same time.
-            mMenuManager.inflateContextMenuForContainer(
-                    menu, inflater, getBaseActivity().getDirectoryDetails());
+            mMenuManager.inflateContextMenuForContainer(menu, inflater);
         } else {
             mMenuManager.inflateContextMenuForDocs(menu, inflater, mSelectionMetadata);
         }
diff --git a/src/com/android/documentsui/manager/ManageActivity.java b/src/com/android/documentsui/manager/ManageActivity.java
index 0b4c982..77ff743 100644
--- a/src/com/android/documentsui/manager/ManageActivity.java
+++ b/src/com/android/documentsui/manager/ManageActivity.java
@@ -81,7 +81,6 @@
     private long mDrawerLastFiddled;
     private Tuner mTuner;
     private MenuManager mMenuManager;
-    private DirectoryDetails mDetails;
     private DocumentClipper mClipper;
 
     public ManageActivity() {
@@ -93,14 +92,16 @@
         super.onCreate(icicle);
 
         mClipper = DocumentsApplication.getDocumentClipper(this);
-        mMenuManager = new MenuManager(mSearchManager, mState);
+        mMenuManager = new MenuManager(
+                mSearchManager,
+                mState,
+                new DirectoryDetails(this) {
+                    @Override
+                    public boolean hasItemsToPaste() {
+                        return mClipper.hasItemsToPaste();
+                    }
+                });
         mTuner = new Tuner(this, mState);
-        mDetails = new DirectoryDetails(this) {
-            @Override
-            public boolean hasItemsToPaste() {
-                return mClipper.hasItemsToPaste();
-            }
-        };
         mClipper = DocumentsApplication.getDocumentClipper(this);
 
         RootsFragment.show(getFragmentManager(), this::openRootSettings);
@@ -223,7 +224,7 @@
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
-        mMenuManager.updateOptionMenu(menu, mDetails);
+        mMenuManager.updateOptionMenu(menu);
         return true;
     }
 
@@ -543,11 +544,6 @@
         return mMenuManager;
     }
 
-    @Override
-    public DirectoryDetails getDirectoryDetails() {
-        return mDetails;
-    }
-
     /**
      * Builds a stack for the specific Uris. Multi roots are not supported, as it's impossible
      * to know which root to select. Also, the stack doesn't contain intermediate directories.
diff --git a/src/com/android/documentsui/manager/MenuManager.java b/src/com/android/documentsui/manager/MenuManager.java
index 7fca108..7b611ac 100644
--- a/src/com/android/documentsui/manager/MenuManager.java
+++ b/src/com/android/documentsui/manager/MenuManager.java
@@ -29,13 +29,16 @@
 
 public final class MenuManager extends com.android.documentsui.MenuManager {
 
-    public MenuManager(SearchViewManager searchManager, State displayState) {
-        super(searchManager, displayState);
+    public MenuManager(
+            SearchViewManager searchManager,
+            State displayState,
+            DirectoryDetails dirDetails) {
+        super(searchManager, displayState, dirDetails);
     }
 
     @Override
-    public void updateOptionMenu(Menu menu, DirectoryDetails details) {
-        super.updateOptionMenu(menu, details);
+    public void updateOptionMenu(Menu menu) {
+        super.updateOptionMenu(menu);
 
         // It hides icon if searching in progress
         mSearchManager.updateMenu();
@@ -50,10 +53,9 @@
     }
 
     @Override
-    public void inflateContextMenuForContainer(
-            Menu menu, MenuInflater inflater, DirectoryDetails directoryDetails) {
+    public void inflateContextMenuForContainer(Menu menu, MenuInflater inflater) {
         inflater.inflate(R.menu.container_context_menu, menu);
-        updateContextMenuForContainer(menu, directoryDetails);
+        updateContextMenuForContainer(menu);
     }
 
     @Override
@@ -92,13 +94,13 @@
     }
 
     @Override
-    protected void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
-        settings.setVisible(directoryDetails.hasRootSettings());
+    protected void updateSettings(MenuItem settings) {
+        settings.setVisible(mDirDetails.hasRootSettings());
     }
 
     @Override
-    protected void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
-        newWindow.setVisible(directoryDetails.shouldShowFancyFeatures());
+    protected void updateNewWindow(MenuItem newWindow) {
+        newWindow.setVisible(mDirDetails.shouldShowFancyFeatures());
     }
 
     @Override
@@ -143,9 +145,9 @@
     }
 
     @Override
-    protected void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
+    protected void updateCreateDir(MenuItem createDir) {
         createDir.setVisible(true);
-        createDir.setEnabled(directoryDetails.canCreateDirectory());
+        createDir.setEnabled(mDirDetails.canCreateDirectory());
     }
 
     @Override
@@ -164,4 +166,4 @@
         rename.setVisible(true);
         rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename());
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/documentsui/picker/MenuManager.java b/src/com/android/documentsui/picker/MenuManager.java
index 5385482..a61081b 100644
--- a/src/com/android/documentsui/picker/MenuManager.java
+++ b/src/com/android/documentsui/picker/MenuManager.java
@@ -30,20 +30,21 @@
 
 public final class MenuManager extends com.android.documentsui.MenuManager {
 
-    private boolean mPicking;
+    public MenuManager(SearchViewManager searchManager, State displayState, DirectoryDetails dirDetails) {
+        super(searchManager, displayState, dirDetails);
 
-    public MenuManager(SearchViewManager searchManager, State displayState) {
-        super(searchManager, displayState);
+    }
 
-        mPicking = mState.action == ACTION_CREATE
+    private boolean picking() {
+        return mState.action == ACTION_CREATE
                 || mState.action == ACTION_OPEN_TREE
                 || mState.action == ACTION_PICK_COPY_DESTINATION;
     }
 
     @Override
-    public void updateOptionMenu(Menu menu, DirectoryDetails details) {
-        super.updateOptionMenu(menu, details);
-        if (mPicking) {
+    public void updateOptionMenu(Menu menu) {
+        super.updateOptionMenu(menu);
+        if (picking()) {
             // May already be hidden because the root
             // doesn't support search.
             mSearchManager.showMenu(false);
@@ -51,14 +52,13 @@
     }
 
     @Override
-    protected void updateModePicker(
-            MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
+    protected void updateModePicker(MenuItem grid, MenuItem list) {
         // No display options in recent directories
-        if (mPicking && directoryDetails.isInRecents()) {
+        if (picking() && mDirDetails.isInRecents()) {
             grid.setVisible(false);
             list.setVisible(false);
         } else {
-            super.updateModePicker(grid, list, directoryDetails);
+            super.updateModePicker(grid, list);
         }
     }
 
@@ -68,9 +68,9 @@
     }
 
     @Override
-    protected void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
-        createDir.setVisible(mPicking);
-        createDir.setEnabled(mPicking && directoryDetails.canCreateDirectory());
+    protected void updateCreateDir(MenuItem createDir) {
+        createDir.setVisible(picking());
+        createDir.setEnabled(picking() && mDirDetails.canCreateDirectory());
     }
 
     @Override
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index 83e446a..2e88c54 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -69,7 +69,6 @@
     private static final String TAG = "DocumentsActivity";
     private MenuManager mMenuManager;
     private Tuner mTuner;
-    private DirectoryDetails mDetails;
 
     public PickActivity() {
         super(R.layout.documents_activity, TAG);
@@ -79,8 +78,7 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         mTuner = new Tuner(this, mState);
-        mMenuManager = new MenuManager(mSearchManager, mState);
-        mDetails = new DirectoryDetails(this);
+        mMenuManager = new MenuManager(mSearchManager, mState, new DirectoryDetails(this));
 
         if (mState.action == ACTION_CREATE) {
             final String mimeType = getIntent().getType();
@@ -223,7 +221,7 @@
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
-        mMenuManager.updateOptionMenu(menu, mDetails);
+        mMenuManager.updateOptionMenu(menu);
 
         final DocumentInfo cwd = getCurrentDirectory();
 
@@ -406,11 +404,6 @@
         return mMenuManager;
     }
 
-    @Override
-    public DirectoryDetails getDirectoryDetails() {
-        return mDetails;
-    }
-
     private static final class PickFinishTask extends PairedTask<PickActivity, Void, Void> {
         private final Uri mUri;
 
diff --git a/tests/unit/com/android/documentsui/manager/MenuManagerTest.java b/tests/unit/com/android/documentsui/manager/MenuManagerTest.java
index 9565b9c..c285b54 100644
--- a/tests/unit/com/android/documentsui/manager/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/manager/MenuManagerTest.java
@@ -62,10 +62,11 @@
     private TestMenuItem advanced;
     private TestMenuItem eject;
     private TestSelectionDetails selectionDetails;
-    private TestDirectoryDetails directoryDetails;
+    private TestDirectoryDetails dirDetails;
     private TestSearchViewManager testSearchManager;
     private RootInfo testRootInfo;
     private State state = new State();
+    private MenuManager mgr;
 
     @Before
     public void setUp() {
@@ -94,8 +95,10 @@
         testMenu.findItem(R.id.menu_list).setVisible(true);
 
         selectionDetails = new TestSelectionDetails();
-        directoryDetails = new TestDirectoryDetails();
+        dirDetails = new TestDirectoryDetails();
         testSearchManager = new TestSearchViewManager();
+        mgr = new MenuManager(testSearchManager, state, dirDetails);
+
         testRootInfo = new RootInfo();
     }
 
@@ -104,7 +107,6 @@
         selectionDetails.canDelete = true;
         selectionDetails.canRename = true;
 
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         rename.assertEnabled();
@@ -117,7 +119,6 @@
     @Test
     public void testActionMenu_containsPartial() {
         selectionDetails.containPartial = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         rename.assertDisabled();
@@ -129,7 +130,6 @@
     @Test
     public void testActionMenu_cantRename() {
         selectionDetails.canRename = false;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         rename.assertDisabled();
@@ -138,7 +138,6 @@
     @Test
     public void testActionMenu_cantDelete() {
         selectionDetails.canDelete = false;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         delete.assertInvisible();
@@ -149,7 +148,6 @@
     @Test
     public void testActionMenu_containsDirectory() {
         selectionDetails.containDirectories = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         // We can't share directories
@@ -158,8 +156,7 @@
 
     @Test
     public void testOptionMenu() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        mgr.updateOptionMenu(testMenu);
 
         advanced.assertInvisible();
         advanced.assertTitle(R.string.menu_advanced_show);
@@ -171,8 +168,7 @@
     public void testOptionMenu_showAdvanced() {
         state.showAdvanced = true;
         state.showAdvancedOption = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        mgr.updateOptionMenu(testMenu);
 
         advanced.assertVisible();
         advanced.assertTitle(R.string.menu_advanced_hide);
@@ -180,27 +176,24 @@
 
     @Test
     public void testOptionMenu_canCreateDirectory() {
-        directoryDetails.canCreateDirectory = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        dirDetails.canCreateDirectory = true;
+        mgr.updateOptionMenu(testMenu);
 
         createDir.assertEnabled();
     }
 
     @Test
     public void testOptionMenu_hasRootSettings() {
-        directoryDetails.hasRootSettings = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        dirDetails.hasRootSettings = true;
+        mgr.updateOptionMenu(testMenu);
 
         settings.assertVisible();
     }
 
     @Test
     public void testOptionMenu_shouldShowFancyFeatures() {
-        directoryDetails.shouldShowFancyFeatures = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        dirDetails.shouldShowFancyFeatures = true;
+        mgr.updateOptionMenu(testMenu);
 
         newWindow.assertVisible();
     }
@@ -208,7 +201,6 @@
     @Test
     public void testInflateContextMenu_Files() {
         TestMenuInflater inflater = new TestMenuInflater();
-        MenuManager mgr = new MenuManager(testSearchManager, state);
 
         selectionDetails.containFiles = true;
         selectionDetails.containDirectories = false;
@@ -220,7 +212,6 @@
     @Test
     public void testInflateContextMenu_Dirs() {
         TestMenuInflater inflater = new TestMenuInflater();
-        MenuManager mgr = new MenuManager(testSearchManager, state);
 
         selectionDetails.containFiles = false;
         selectionDetails.containDirectories = true;
@@ -232,7 +223,6 @@
     @Test
     public void testInflateContextMenu_Mixed() {
         TestMenuInflater inflater = new TestMenuInflater();
-        MenuManager mgr = new MenuManager(testSearchManager, state);
 
         selectionDetails.containFiles = true;
         selectionDetails.containDirectories = true;
@@ -243,8 +233,7 @@
 
     @Test
     public void testContextMenu_EmptyArea() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateContextMenuForContainer(testMenu, directoryDetails);
+        mgr.updateContextMenuForContainer(testMenu);
 
         selectAll.assertVisible();
         paste.assertVisible();
@@ -254,7 +243,6 @@
     @Test
     public void testContextMenu_OnFile() {
         selectionDetails.size = 1;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateContextMenuForFiles(testMenu, selectionDetails);
         open.assertVisible();
         open.assertEnabled();
@@ -269,7 +257,6 @@
 
     @Test
     public void testContextMenu_OnMultipleFiles() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.size = 3;
         mgr.updateContextMenuForFiles(testMenu, selectionDetails);
         open.assertVisible();
@@ -280,7 +267,6 @@
 
     @Test
     public void testContextMenu_OnWritableDirectory() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.size = 1;
         selectionDetails.canPasteInto = true;
         mgr.updateContextMenuForDirs(testMenu, selectionDetails);
@@ -296,7 +282,6 @@
 
     @Test
     public void testContextMenu_OnNonWritableDirectory() {
-        com.android.documentsui.manager.MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.size = 1;
         selectionDetails.canPasteInto = false;
         mgr.updateContextMenuForDirs(testMenu, selectionDetails);
@@ -312,7 +297,6 @@
 
     @Test
     public void testContextMenu_OnMultipleDirectories() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.size = 3;
         mgr.updateContextMenuForDirs(testMenu, selectionDetails);
         openInNewWindow.assertVisible();
@@ -321,7 +305,6 @@
 
     @Test
     public void testContextMenu_OnMixedDocs() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.containDirectories = true;
         selectionDetails.containFiles = true;
         selectionDetails.size = 2;
@@ -337,7 +320,6 @@
 
     @Test
     public void testContextMenu_OnMixedDocs_hasPartialFile() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.containDirectories = true;
         selectionDetails.containFiles = true;
         selectionDetails.size = 2;
@@ -354,7 +336,6 @@
 
     @Test
     public void testContextMenu_OnMixedDocs_hasUndeletableFile() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.containDirectories = true;
         selectionDetails.containFiles = true;
         selectionDetails.size = 2;
@@ -370,7 +351,6 @@
 
     @Test
     public void testRootContextMenu() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateRootContextMenu(testMenu, testRootInfo);
 
         eject.assertVisible();
@@ -383,7 +363,6 @@
     @Test
     public void testRootContextMenu_hasRootSettings() {
         testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateRootContextMenu(testMenu, testRootInfo);
 
         settings.assertEnabled();
@@ -392,7 +371,6 @@
     @Test
     public void testRootContextMenu_eject() {
         testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateRootContextMenu(testMenu, testRootInfo);
 
         eject.assertEnabled();
@@ -402,7 +380,6 @@
     public void testRootContextMenu_ejectInProcess() {
         testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
         testRootInfo.ejecting = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateRootContextMenu(testMenu, testRootInfo);
 
         eject.assertDisabled();
diff --git a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
index 7a0eec7..1ca593e 100644
--- a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
@@ -63,10 +63,11 @@
     private TestMenuItem eject;
 
     private TestSelectionDetails selectionDetails;
-    private TestDirectoryDetails directoryDetails;
+    private TestDirectoryDetails dirDetails;
     private TestSearchViewManager testSearchManager;
     private State state = new State();
     private RootInfo testRootInfo;
+    private MenuManager mgr;
 
     @Before
     public void setUp() {
@@ -91,8 +92,10 @@
         eject = testMenu.findItem(R.id.menu_eject_root);
 
         selectionDetails = new TestSelectionDetails();
-        directoryDetails = new TestDirectoryDetails();
+        dirDetails = new TestDirectoryDetails();
         testSearchManager = new TestSearchViewManager();
+        mgr = new MenuManager(testSearchManager, state, dirDetails);
+
         testRootInfo = new RootInfo();
         state.action = ACTION_CREATE;
         state.allowMultiple = true;
@@ -100,7 +103,6 @@
 
     @Test
     public void testActionMenu() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         open.assertInvisible();
@@ -113,7 +115,6 @@
     @Test
     public void testActionMenu_openAction() {
         state.action = ACTION_OPEN;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         open.assertVisible();
@@ -123,7 +124,6 @@
     @Test
     public void testActionMenu_notAllowMultiple() {
         state.allowMultiple = false;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateActionMenu(testMenu, selectionDetails);
 
         selectAll.assertInvisible();
@@ -131,8 +131,7 @@
 
     @Test
     public void testOptionMenu() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        mgr.updateOptionMenu(testMenu);
 
         advanced.assertInvisible();
         advanced.assertTitle(R.string.menu_advanced_show);
@@ -144,8 +143,7 @@
     public void testOptionMenu_notPicking() {
         state.action = ACTION_OPEN;
         state.derivedMode = State.MODE_LIST;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        mgr.updateOptionMenu(testMenu);
 
         createDir.assertInvisible();
         grid.assertVisible();
@@ -155,9 +153,8 @@
 
     @Test
     public void testOptionMenu_canCreateDirectory() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        directoryDetails.canCreateDirectory = true;
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        dirDetails.canCreateDirectory = true;
+        mgr.updateOptionMenu(testMenu);
 
         createDir.assertEnabled();
     }
@@ -166,8 +163,7 @@
     public void testOptionMenu_showAdvanced() {
         state.showAdvanced = true;
         state.showAdvancedOption = true;
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        mgr.updateOptionMenu(testMenu);
 
         advanced.assertVisible();
         advanced.assertTitle(R.string.menu_advanced_hide);
@@ -175,9 +171,8 @@
 
     @Test
     public void testOptionMenu_inRecents() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        directoryDetails.isInRecents = true;
-        mgr.updateOptionMenu(testMenu, directoryDetails);
+        dirDetails.isInRecents = true;
+        mgr.updateOptionMenu(testMenu);
 
         grid.assertInvisible();
         list.assertInvisible();
@@ -185,8 +180,7 @@
 
     @Test
     public void testContextMenu_EmptyArea() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
-        mgr.updateContextMenuForContainer(testMenu, directoryDetails);
+        mgr.updateContextMenuForContainer(testMenu);
         selectAll.assertVisible();
         paste.assertVisible();
         createDir.assertVisible();
@@ -194,7 +188,6 @@
 
     @Test
     public void testContextMenu_OnFile() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateContextMenuForFiles(testMenu, selectionDetails);
         // We don't want share in pickers.
         share.assertInvisible();
@@ -208,7 +201,6 @@
 
     @Test
     public void testContextMenu_OnDirectory() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.canPasteInto = true;
         mgr.updateContextMenuForDirs(testMenu, selectionDetails);
         // We don't want openInNewWindow in pickers
@@ -223,7 +215,6 @@
 
     @Test
     public void testContextMenu_OnMixedDocs() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.containDirectories = true;
         selectionDetails.containFiles = true;
         selectionDetails.size = 2;
@@ -236,7 +227,6 @@
 
     @Test
     public void testContextMenu_OnMixedDocs_hasPartialFile() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.containDirectories = true;
         selectionDetails.containFiles = true;
         selectionDetails.size = 2;
@@ -253,7 +243,6 @@
 
     @Test
     public void testContextMenu_OnMixedDocs_hasUndeletableFile() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         selectionDetails.containDirectories = true;
         selectionDetails.containFiles = true;
         selectionDetails.size = 2;
@@ -269,7 +258,6 @@
 
     @Test
     public void testRootContextMenu() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         mgr.updateRootContextMenu(testMenu, testRootInfo);
 
         eject.assertInvisible();
@@ -278,7 +266,6 @@
 
     @Test
     public void testRootContextMenu_hasRootSettings() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
         mgr.updateRootContextMenu(testMenu, testRootInfo);
 
@@ -287,7 +274,6 @@
 
     @Test
     public void testRootContextMenu_canEject() {
-        MenuManager mgr = new MenuManager(testSearchManager, state);
         testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
         mgr.updateRootContextMenu(testMenu, testRootInfo);