Disable "New Folder" context menu item in search.

Add unit tests to cover more cases in context menus.

Bug: 31996780
Change-Id: I73443e09e81f0c747dd057dbc72ea6441cdd447e
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 5bf360f..39ecbfa 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -175,9 +175,11 @@
     public void updateContextMenuForContainer(Menu menu) {
         MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
         MenuItem selectAll = menu.findItem(R.id.menu_select_all);
+        MenuItem createDir = menu.findItem(R.id.menu_create_dir);
 
         paste.setEnabled(mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc());
         updateSelectAll(selectAll);
+        updateCreateDir(createDir);
     }
 
     /**
diff --git a/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java b/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
index 81bbbef..82bd047 100644
--- a/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
+++ b/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
@@ -27,8 +27,8 @@
     public boolean isInRecents;
     public boolean hasRootSettings;
     public boolean hasItemsToPaste;
+    public boolean canCreateDoc;
     public boolean canCreateDirectory;
-    public boolean getDisplayFileSize;
 
     public TestDirectoryDetails() {
         super(null);
@@ -55,6 +55,11 @@
     }
 
     @Override
+    public boolean canCreateDoc() {
+        return canCreateDoc;
+    }
+
+    @Override
     public boolean canCreateDirectory() {
         return canCreateDirectory;
     }
diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
index fd1f6cf..5d1fb7d 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -17,6 +17,7 @@
 package com.android.documentsui.files;
 
 import static junit.framework.Assert.assertEquals;
+
 import static org.junit.Assert.assertTrue;
 
 import android.provider.DocumentsContract.Document;
@@ -62,6 +63,8 @@
     private TestMenuItem pasteInto;
     private TestMenuItem advanced;
     private TestMenuItem eject;
+
+    private TestActivity testActivity;
     private TestSelectionDetails selectionDetails;
     private TestDirectoryDetails dirDetails;
     private TestSearchViewManager testSearchManager;
@@ -239,8 +242,70 @@
         mgr.updateContextMenuForContainer(testMenu);
 
         selectAll.assertVisible();
+        selectAll.assertEnabled();
         paste.assertVisible();
+        paste.assertDisabled();
         createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_NoItemToPaste() {
+        dirDetails.hasItemsToPaste = false;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CantCreateDoc() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = false;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CanPaste() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertEnabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CanCreateDirectory() {
+        dirDetails.canCreateDirectory = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertEnabled();
     }
 
     @Test
diff --git a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
index bf9f5cf..f282bd7 100644
--- a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
@@ -182,10 +182,77 @@
 
     @Test
     public void testContextMenu_EmptyArea() {
+        dirDetails.hasItemsToPaste = false;
+        dirDetails.canCreateDoc = false;
+        dirDetails.canCreateDirectory = false;
+
         mgr.updateContextMenuForContainer(testMenu);
+
         selectAll.assertVisible();
+        selectAll.assertEnabled();
         paste.assertVisible();
+        paste.assertDisabled();
         createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_NoItemToPaste() {
+        dirDetails.hasItemsToPaste = false;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CantCreateDoc() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = false;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_canPaste() {
+        dirDetails.hasItemsToPaste = true;
+        dirDetails.canCreateDoc = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertEnabled();
+        createDir.assertVisible();
+        createDir.assertDisabled();
+    }
+
+    @Test
+    public void testContextMenu_EmptyArea_CanCreateDirectory() {
+        dirDetails.canCreateDirectory = true;
+
+        mgr.updateContextMenuForContainer(testMenu);
+
+        selectAll.assertVisible();
+        selectAll.assertEnabled();
+        paste.assertVisible();
+        paste.assertDisabled();
+        createDir.assertVisible();
+        createDir.assertEnabled();
     }
 
     @Test