summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2019-08-12 18:04:06 +0800
committer Tony Huang <tonyychuang@google.com> 2019-08-30 16:05:05 +0800
commit76c6c9d2d5033d291e35989e19f9e2a7e4d815e5 (patch)
treeb693437e60558a150cf984ed09620b96214a2b64
parent7b1ba41ec0137956a33c05fe7f2e187c5c3f2183 (diff)
Add deselect all menu item
Fix: 137053591 Test: atest DocumentsUIGoogleTests Change-Id: I804e2c55b08dca52d719b82d1d37f7a01bbb9d69
-rw-r--r--res/menu/action_mode_menu.xml4
-rw-r--r--res/menu/container_context_menu.xml4
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/com/android/documentsui/AbstractActionHandler.java5
-rw-r--r--src/com/android/documentsui/ActionHandler.java5
-rw-r--r--src/com/android/documentsui/MenuManager.java34
-rw-r--r--src/com/android/documentsui/dirlist/DirectoryFragment.java8
-rw-r--r--src/com/android/documentsui/files/FilesActivity.java3
-rw-r--r--src/com/android/documentsui/files/MenuManager.java25
-rw-r--r--src/com/android/documentsui/picker/MenuManager.java30
-rw-r--r--src/com/android/documentsui/picker/PickActivity.java6
-rw-r--r--tests/common/com/android/documentsui/testing/TestMenu.java2
-rw-r--r--tests/unit/com/android/documentsui/files/MenuManagerTest.java64
-rw-r--r--tests/unit/com/android/documentsui/picker/MenuManagerTest.java54
14 files changed, 213 insertions, 33 deletions
diff --git a/res/menu/action_mode_menu.xml b/res/menu/action_mode_menu.xml
index f0ae09e46..a7a90468e 100644
--- a/res/menu/action_mode_menu.xml
+++ b/res/menu/action_mode_menu.xml
@@ -42,6 +42,10 @@
android:title="@string/menu_select_all"
android:showAsAction="never" />
<item
+ android:id="@+id/action_menu_deselect_all"
+ android:title="@string/menu_deselect_all"
+ android:showAsAction="never" />
+ <item
android:id="@+id/action_menu_copy_to"
android:title="@string/menu_copy"
android:showAsAction="never"
diff --git a/res/menu/container_context_menu.xml b/res/menu/container_context_menu.xml
index 2f70d822b..bd8b6c35e 100644
--- a/res/menu/container_context_menu.xml
+++ b/res/menu/container_context_menu.xml
@@ -34,6 +34,10 @@
<item
android:id="@+id/dir_menu_select_all"
android:title="@string/menu_select_all" />
+
+ <item
+ android:id="@+id/dir_menu_deselect_all"
+ android:title="@string/menu_deselect_all" />
</group>
<group
android:id="@+id/menu_extras_group">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 555954502..e8aa2b97f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -57,6 +57,8 @@
<string name="menu_delete">Delete</string>
<!-- Menu item title that selects all documents in the current directory [CHAR LIMIT=28] -->
<string name="menu_select_all">Select all</string>
+ <!-- Menu item title that deselects all documents in the current directory [CHAR LIMIT=28] -->
+ <string name="menu_deselect_all">Deselect all</string>
<!-- Menu item title that selects documents in the current directory [CHAR LIMIT=28] -->
<string name="menu_select">Select</string>
<!-- Menu item title that sort documents in the current directory [CHAR LIMIT=28] -->
diff --git a/src/com/android/documentsui/AbstractActionHandler.java b/src/com/android/documentsui/AbstractActionHandler.java
index 555d13c50..94b4d42d6 100644
--- a/src/com/android/documentsui/AbstractActionHandler.java
+++ b/src/com/android/documentsui/AbstractActionHandler.java
@@ -302,6 +302,11 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
}
@Override
+ public void deselectAllFiles() {
+ mSelectionMgr.clearSelection();
+ }
+
+ @Override
public void showCreateDirectoryDialog() {
Metrics.logUserAction(MetricConsts.USER_ACTION_CREATE_DIR);
diff --git a/src/com/android/documentsui/ActionHandler.java b/src/com/android/documentsui/ActionHandler.java
index 437b45603..a6b5349fa 100644
--- a/src/com/android/documentsui/ActionHandler.java
+++ b/src/com/android/documentsui/ActionHandler.java
@@ -106,6 +106,11 @@ public interface ActionHandler {
void selectAllFiles();
+ /**
+ * Attempts to deselect all selected files.
+ */
+ void deselectAllFiles();
+
void showCreateDirectoryDialog();
void showInspector(DocumentInfo doc);
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 5fcbe7b96..2c12e5fb4 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -35,23 +35,27 @@ import com.android.documentsui.sidebar.RootsFragment;
import java.util.List;
import java.util.function.IntFunction;
+import java.util.function.IntSupplier;
public abstract class MenuManager {
private final static String TAG = "MenuManager";
- final protected SearchViewManager mSearchManager;
- final protected State mState;
- final protected DirectoryDetails mDirDetails;
+ protected final SearchViewManager mSearchManager;
+ protected final State mState;
+ protected final DirectoryDetails mDirDetails;
+ protected final IntSupplier mFilesCountSupplier;
protected Menu mOptionMenu;
public MenuManager(
SearchViewManager searchManager,
State displayState,
- DirectoryDetails dirDetails) {
+ DirectoryDetails dirDetails,
+ IntSupplier filesCountSupplier) {
mSearchManager = searchManager;
mState = displayState;
mDirDetails = dirDetails;
+ mFilesCountSupplier = filesCountSupplier;
}
/** @see ActionModeController */
@@ -61,7 +65,8 @@ public abstract class MenuManager {
updateShare(menu.findItem(R.id.action_menu_share), selection);
updateRename(menu.findItem(R.id.action_menu_rename), selection);
updateSelect(menu.findItem(R.id.action_menu_select), selection);
- updateSelectAll(menu.findItem(R.id.action_menu_select_all));
+ updateSelectAll(menu.findItem(R.id.action_menu_select_all), selection);
+ updateDeselectAll(menu.findItem(R.id.action_menu_deselect_all), selection);
updateMoveTo(menu.findItem(R.id.action_menu_move_to), selection);
updateCopyTo(menu.findItem(R.id.action_menu_copy_to), selection);
updateCompress(menu.findItem(R.id.action_menu_compress), selection);
@@ -114,7 +119,15 @@ public abstract class MenuManager {
// Pickers don't have any context menu at this moment.
}
- public void inflateContextMenuForContainer(Menu menu, MenuInflater inflater) {
+ /**
+ * Called when container context menu needs to be inflated.
+ *
+ * @param menu context menu from activity or fragment
+ * @param inflater the MenuInflater
+ * @param selectionDetails selection of files
+ */
+ public void inflateContextMenuForContainer(
+ Menu menu, MenuInflater inflater, SelectionDetails selectionDetails) {
throw new UnsupportedOperationException("Pickers don't allow context menu.");
}
@@ -207,14 +220,16 @@ public abstract class MenuManager {
* Called when user tries to generate a context menu anchored to an empty pane.
*/
@VisibleForTesting
- public void updateContextMenuForContainer(Menu menu) {
+ public void updateContextMenuForContainer(Menu menu, SelectionDetails selectionDetails) {
MenuItem paste = menu.findItem(R.id.dir_menu_paste_from_clipboard);
MenuItem selectAll = menu.findItem(R.id.dir_menu_select_all);
+ MenuItem deselectAll = menu.findItem(R.id.dir_menu_deselect_all);
MenuItem createDir = menu.findItem(R.id.dir_menu_create_dir);
MenuItem inspect = menu.findItem(R.id.dir_menu_inspect);
paste.setEnabled(mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc());
- updateSelectAll(selectAll);
+ updateSelectAll(selectAll, selectionDetails);
+ updateDeselectAll(deselectAll, selectionDetails);
updateCreateDir(createDir);
updateInspect(inspect);
}
@@ -350,6 +365,9 @@ public abstract class MenuManager {
}
protected abstract void updateSelectAll(MenuItem selectAll);
+ protected abstract void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails);
+ protected abstract void updateDeselectAll(
+ MenuItem deselectAll, SelectionDetails selectionDetails);
protected abstract void updateCreateDir(MenuItem createDir);
/**
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index 129f46535..91836cc6d 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -449,7 +449,8 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
// TODO: inject DirectoryDetails into MenuManager constructor
// Since both classes are supplied by Activity and created
// at the same time.
- mInjector.menuManager.inflateContextMenuForContainer(menu, inflater);
+ mInjector.menuManager.inflateContextMenuForContainer(
+ menu, inflater, mSelectionMetadata);
} else {
mInjector.menuManager.inflateContextMenuForDocs(
menu, inflater, mSelectionMetadata);
@@ -724,6 +725,11 @@ public class DirectoryFragment extends Fragment implements SwipeRefreshLayout.On
mActions.selectAllFiles();
return true;
+ case R.id.action_menu_deselect_all:
+ case R.id.dir_menu_deselect_all:
+ mActions.deselectAllFiles();
+ return true;
+
case R.id.action_menu_rename:
case R.id.dir_menu_rename:
renameDocuments(selection);
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index a9da4a7fb..9547961ed 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -123,7 +123,8 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
getApplicationContext(),
mInjector.selectionMgr,
mProviders::getApplicationName,
- mInjector.getModel()::getItemUri);
+ mInjector.getModel()::getItemUri,
+ mInjector.getModel()::getItemCount);
mInjector.actionModeController = new ActionModeController(
this,
diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java
index ab7c63075..73c58e5c3 100644
--- a/src/com/android/documentsui/files/MenuManager.java
+++ b/src/com/android/documentsui/files/MenuManager.java
@@ -40,6 +40,7 @@ import com.android.documentsui.queries.SearchViewManager;
import java.util.List;
import java.util.function.IntFunction;
+import java.util.function.IntSupplier;
public final class MenuManager extends com.android.documentsui.MenuManager {
@@ -57,9 +58,10 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
Context context,
SelectionTracker<String> selectionManager,
Lookup<String, String> appNameLookup,
- Lookup<String, Uri> uriLookup) {
+ Lookup<String, Uri> uriLookup,
+ IntSupplier filesCountSupplier) {
- super(searchManager, displayState, dirDetails);
+ super(searchManager, displayState, dirDetails, filesCountSupplier);
mFeatures = features;
mContext = context;
@@ -103,9 +105,10 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
}
@Override
- public void inflateContextMenuForContainer(Menu menu, MenuInflater inflater) {
+ public void inflateContextMenuForContainer(
+ Menu menu, MenuInflater inflater, SelectionDetails selectionDetails) {
inflater.inflate(R.menu.container_context_menu, menu);
- updateContextMenuForContainer(menu);
+ updateContextMenuForContainer(menu, selectionDetails);
}
@Override
@@ -224,6 +227,20 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
}
@Override
+ protected void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails) {
+ final boolean visible = selectionDetails.size() < mFilesCountSupplier.getAsInt();
+ selectAll.setVisible(visible);
+ selectAll.setEnabled(visible);
+ }
+
+ @Override
+ protected void updateDeselectAll(MenuItem deselectAll, SelectionDetails selectionDetails) {
+ final boolean visible = selectionDetails.size() == mFilesCountSupplier.getAsInt();
+ deselectAll.setVisible(visible);
+ deselectAll.setEnabled(visible);
+ }
+
+ @Override
protected void updateCreateDir(MenuItem createDir) {
createDir.setVisible(true);
createDir.setEnabled(mDirDetails.canCreateDirectory());
diff --git a/src/com/android/documentsui/picker/MenuManager.java b/src/com/android/documentsui/picker/MenuManager.java
index b9e68ece8..ac0557136 100644
--- a/src/com/android/documentsui/picker/MenuManager.java
+++ b/src/com/android/documentsui/picker/MenuManager.java
@@ -30,21 +30,25 @@ import android.view.Menu;
import android.view.MenuItem;
import com.android.documentsui.Model;
+import com.android.documentsui.R;
import com.android.documentsui.base.MimeTypes;
import com.android.documentsui.base.State;
import com.android.documentsui.queries.SearchViewManager;
import java.util.List;
import java.util.function.IntFunction;
-import com.android.documentsui.R;
+import java.util.function.IntSupplier;
public final class MenuManager extends com.android.documentsui.MenuManager {
private boolean mOnlyDirectory;
- public MenuManager(SearchViewManager searchManager, State displayState, DirectoryDetails dirDetails) {
- super(searchManager, displayState, dirDetails);
-
+ public MenuManager(
+ SearchViewManager searchManager,
+ State displayState,
+ DirectoryDetails dirDetails,
+ IntSupplier filesCountSupplier) {
+ super(searchManager, displayState, dirDetails, filesCountSupplier);
}
@Override
@@ -102,6 +106,24 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
}
@Override
+ protected void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails) {
+ final boolean visible = mState.allowMultiple
+ && selectionDetails.size() < mFilesCountSupplier.getAsInt();
+ final boolean enabled = visible && !mOnlyDirectory;
+ selectAll.setVisible(visible);
+ selectAll.setEnabled(enabled);
+ }
+
+ @Override
+ protected void updateDeselectAll(MenuItem deselectAll, SelectionDetails selectionDetails) {
+ final boolean visible = mState.allowMultiple
+ && selectionDetails.size() == mFilesCountSupplier.getAsInt();
+ final boolean enabled = visible && !mOnlyDirectory;
+ deselectAll.setVisible(visible);
+ deselectAll.setEnabled(enabled);
+ }
+
+ @Override
protected void updateCreateDir(MenuItem createDir) {
createDir.setVisible(picking());
createDir.setEnabled(picking() && mDirDetails.canCreateDirectory());
diff --git a/src/com/android/documentsui/picker/PickActivity.java b/src/com/android/documentsui/picker/PickActivity.java
index 794e78515..d2404222b 100644
--- a/src/com/android/documentsui/picker/PickActivity.java
+++ b/src/com/android/documentsui/picker/PickActivity.java
@@ -108,7 +108,11 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
this::focusSidebar,
getColor(R.color.primary));
- mInjector.menuManager = new MenuManager(mSearchManager, mState, new DirectoryDetails(this));
+ mInjector.menuManager = new MenuManager(
+ mSearchManager,
+ mState,
+ new DirectoryDetails(this),
+ mInjector.getModel()::getItemCount);
mInjector.actionModeController = new ActionModeController(
this,
diff --git a/tests/common/com/android/documentsui/testing/TestMenu.java b/tests/common/com/android/documentsui/testing/TestMenu.java
index 61a7b4d71..4ad840606 100644
--- a/tests/common/com/android/documentsui/testing/TestMenu.java
+++ b/tests/common/com/android/documentsui/testing/TestMenu.java
@@ -47,6 +47,7 @@ public abstract class TestMenu implements Menu {
R.id.dir_menu_paste_from_clipboard,
R.id.dir_menu_create_dir,
R.id.dir_menu_select_all,
+ R.id.dir_menu_deselect_all,
R.id.dir_menu_rename,
R.id.dir_menu_delete,
R.id.dir_menu_view_in_owner,
@@ -62,6 +63,7 @@ public abstract class TestMenu implements Menu {
R.id.action_menu_delete,
R.id.action_menu_select,
R.id.action_menu_select_all,
+ R.id.action_menu_deselect_all,
R.id.action_menu_copy_to,
R.id.action_menu_extract_to,
R.id.action_menu_move_to,
diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
index 6f79c9441..0f2ed3bc1 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -63,6 +63,7 @@ public final class MenuManagerTest {
private TestMenuItem dirPasteFromClipboard;
private TestMenuItem dirCreateDir;
private TestMenuItem dirSelectAll;
+ private TestMenuItem mDirDeselectAll;
private TestMenuItem dirRename;
private TestMenuItem dirDelete;
private TestMenuItem dirViewInOwner;
@@ -82,6 +83,7 @@ public final class MenuManagerTest {
private TestMenuItem actionModeShare;
private TestMenuItem actionModeDelete;
private TestMenuItem actionModeSelectAll;
+ private TestMenuItem mActionModeDeselectAll;
private TestMenuItem actionModeCopyTo;
private TestMenuItem actionModeExtractTo;
private TestMenuItem actionModeMoveTo;
@@ -118,6 +120,8 @@ public final class MenuManagerTest {
private TestActivity activity = TestActivity.create(TestEnv.create());
private SelectionTracker<String> selectionManager;
+ private int mFilesCount;
+
@Before
public void setUp() {
testMenu = TestMenu.create();
@@ -131,6 +135,7 @@ public final class MenuManagerTest {
dirPasteFromClipboard = testMenu.findItem(R.id.dir_menu_paste_from_clipboard);
dirCreateDir = testMenu.findItem(R.id.dir_menu_create_dir);
dirSelectAll = testMenu.findItem(R.id.dir_menu_select_all);
+ mDirDeselectAll = testMenu.findItem(R.id.dir_menu_deselect_all);
dirRename = testMenu.findItem(R.id.dir_menu_rename);
dirDelete = testMenu.findItem(R.id.dir_menu_delete);
dirViewInOwner = testMenu.findItem(R.id.dir_menu_view_in_owner);
@@ -148,6 +153,7 @@ public final class MenuManagerTest {
actionModeShare = testMenu.findItem(R.id.action_menu_share);
actionModeDelete = testMenu.findItem(R.id.action_menu_delete);
actionModeSelectAll = testMenu.findItem(R.id.action_menu_select_all);
+ mActionModeDeselectAll = testMenu.findItem(R.id.action_menu_deselect_all);
actionModeCopyTo = testMenu.findItem(R.id.action_menu_copy_to);
actionModeExtractTo = testMenu.findItem(R.id.action_menu_extract_to);
actionModeMoveTo = testMenu.findItem(R.id.action_menu_move_to);
@@ -186,6 +192,9 @@ public final class MenuManagerTest {
selectionManager = SelectionHelpers.createTestInstance(TestData.create(1));
selectionManager.select("0");
+ selectionDetails.size = 1;
+ mFilesCount = 10;
+
mgr = new MenuManager(
features,
testSearchManager,
@@ -194,7 +203,8 @@ public final class MenuManagerTest {
activity,
selectionManager,
this::getApplicationNameFromAuthority,
- this::getUriFromModelId);
+ this::getUriFromModelId,
+ this::getFilesCount);
testRootInfo = new RootInfo();
testDocInfo = new DocumentInfo();
@@ -204,10 +214,15 @@ public final class MenuManagerTest {
private Uri getUriFromModelId(String id) {
return Uri.EMPTY;
}
+
private String getApplicationNameFromAuthority(String authority) {
return "TestApp";
}
+ private int getFilesCount() {
+ return mFilesCount;
+ }
+
@Test
public void testActionMenu() {
selectionDetails.canDelete = true;
@@ -226,6 +241,10 @@ public final class MenuManagerTest {
actionModeViewInOwner.assertInvisible();
actionModeSort.assertVisible();
actionModeSort.assertEnabled();
+ actionModeSelectAll.assertVisible();
+ actionModeSelectAll.assertEnabled();
+ mActionModeDeselectAll.assertInvisible();
+ mActionModeDeselectAll.assertDisabled();
}
@Test
@@ -308,7 +327,8 @@ public final class MenuManagerTest {
activity,
selectionManager,
this::getApplicationNameFromAuthority,
- this::getUriFromModelId);
+ this::getUriFromModelId,
+ this::getFilesCount);
selectionDetails.canViewInOwner = true;
mgr.updateActionMenu(testMenu, selectionDetails);
@@ -410,6 +430,19 @@ public final class MenuManagerTest {
}
@Test
+ public void testActionMenu_CanDeselectAll() {
+ selectionDetails.size = 1;
+ mFilesCount = 1;
+
+ mgr.updateActionMenu(testMenu, selectionDetails);
+
+ actionModeSelectAll.assertInvisible();
+ actionModeSelectAll.assertDisabled();
+ mActionModeDeselectAll.assertVisible();
+ mActionModeDeselectAll.assertEnabled();
+ }
+
+ @Test
public void testOptionMenu() {
mgr.updateOptionMenu(testMenu);
@@ -501,10 +534,12 @@ public final class MenuManagerTest {
@Test
public void testContextMenu_EmptyArea() {
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
+ mDirDeselectAll.assertInvisible();
+ mDirDeselectAll.assertDisabled();
dirPasteFromClipboard.assertVisible();
dirPasteFromClipboard.assertDisabled();
dirCreateDir.assertVisible();
@@ -512,11 +547,24 @@ public final class MenuManagerTest {
}
@Test
+ public void testContextMenu_EmptyArea_CanDeselectAll() {
+ selectionDetails.size = 1;
+ mFilesCount = 1;
+
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
+
+ dirSelectAll.assertInvisible();
+ dirSelectAll.assertDisabled();
+ mDirDeselectAll.assertVisible();
+ mDirDeselectAll.assertEnabled();
+ }
+
+ @Test
public void testContextMenu_EmptyArea_NoItemToPaste() {
dirDetails.hasItemsToPaste = false;
dirDetails.canCreateDoc = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -531,7 +579,7 @@ public final class MenuManagerTest {
dirDetails.hasItemsToPaste = true;
dirDetails.canCreateDoc = false;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -546,7 +594,7 @@ public final class MenuManagerTest {
dirDetails.hasItemsToPaste = true;
dirDetails.canCreateDoc = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -560,7 +608,7 @@ public final class MenuManagerTest {
public void testContextMenu_EmptyArea_CanCreateDirectory() {
dirDetails.canCreateDirectory = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -640,7 +688,7 @@ public final class MenuManagerTest {
public void testContextMenu_CanInspectContainer() {
features.inspector = true;
dirDetails.canInspectDirectory = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirInspect.assertVisible();
dirInspect.assertEnabled();
}
diff --git a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
index 8287e9f17..5e14cb922 100644
--- a/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/picker/MenuManagerTest.java
@@ -63,6 +63,7 @@ public final class MenuManagerTest {
private TestMenuItem dirPasteFromClipboard;
private TestMenuItem dirCreateDir;
private TestMenuItem dirSelectAll;
+ private TestMenuItem mDirDeselectAll;
private TestMenuItem dirRename;
private TestMenuItem dirDelete;
private TestMenuItem dirViewInOwner;
@@ -82,6 +83,7 @@ public final class MenuManagerTest {
private TestMenuItem actionModeShare;
private TestMenuItem actionModeDelete;
private TestMenuItem actionModeSelectAll;
+ private TestMenuItem mActionModeDeselectAll;
private TestMenuItem actionModeCopyTo;
private TestMenuItem actionModeExtractTo;
private TestMenuItem actionModeMoveTo;
@@ -111,6 +113,8 @@ public final class MenuManagerTest {
private DocumentInfo testDocInfo;
private MenuManager mgr;
+ private int mFilesCount;
+
@Before
public void setUp() {
testMenu = TestMenu.create();
@@ -122,6 +126,7 @@ public final class MenuManagerTest {
dirPasteFromClipboard = testMenu.findItem(R.id.dir_menu_paste_from_clipboard);
dirCreateDir = testMenu.findItem(R.id.dir_menu_create_dir);
dirSelectAll = testMenu.findItem(R.id.dir_menu_select_all);
+ mDirDeselectAll = testMenu.findItem(R.id.dir_menu_deselect_all);
dirRename = testMenu.findItem(R.id.dir_menu_rename);
dirDelete = testMenu.findItem(R.id.dir_menu_delete);
dirViewInOwner = testMenu.findItem(R.id.dir_menu_view_in_owner);
@@ -138,6 +143,7 @@ public final class MenuManagerTest {
actionModeShare = testMenu.findItem(R.id.action_menu_share);
actionModeDelete = testMenu.findItem(R.id.action_menu_delete);
actionModeSelectAll = testMenu.findItem(R.id.action_menu_select_all);
+ mActionModeDeselectAll = testMenu.findItem(R.id.action_menu_deselect_all);
actionModeCopyTo = testMenu.findItem(R.id.action_menu_copy_to);
actionModeExtractTo = testMenu.findItem(R.id.action_menu_extract_to);
actionModeMoveTo = testMenu.findItem(R.id.action_menu_move_to);
@@ -162,7 +168,9 @@ public final class MenuManagerTest {
selectionDetails = new TestSelectionDetails();
dirDetails = new TestDirectoryDetails();
testSearchManager = new TestSearchViewManager();
- mgr = new MenuManager(testSearchManager, state, dirDetails);
+ mgr = new MenuManager(testSearchManager, state, dirDetails, this::getFilesCount);
+ selectionDetails.size = 1;
+ mFilesCount = 10;
testRootInfo = new RootInfo();
testDocInfo = new DocumentInfo();
@@ -170,6 +178,10 @@ public final class MenuManagerTest {
state.allowMultiple = true;
}
+ private int getFilesCount() {
+ return mFilesCount;
+ }
+
@Test
public void testActionMenu() {
mgr.updateActionMenu(testMenu, selectionDetails);
@@ -178,6 +190,7 @@ public final class MenuManagerTest {
actionModeShare.assertInvisible();
actionModeRename.assertInvisible();
actionModeSelectAll.assertVisible();
+ mActionModeDeselectAll.assertInvisible();
actionModeViewInOwner.assertInvisible();
actionModeSort.assertVisible();
actionModeSort.assertEnabled();
@@ -221,6 +234,7 @@ public final class MenuManagerTest {
mgr.updateActionMenu(testMenu, selectionDetails);
actionModeSelectAll.assertInvisible();
+ mActionModeDeselectAll.assertInvisible();
}
@Test
@@ -229,6 +243,19 @@ public final class MenuManagerTest {
mgr.updateActionMenu(testMenu, selectionDetails);
actionModeSelectAll.assertVisible();
+ mActionModeDeselectAll.assertInvisible();
+ }
+
+ @Test
+ public void testActionMenu_CanDeselectAll() {
+ state.allowMultiple = true;
+ selectionDetails.size = 1;
+ mFilesCount = 1;
+
+ mgr.updateActionMenu(testMenu, selectionDetails);
+
+ actionModeSelectAll.assertInvisible();
+ mActionModeDeselectAll.assertVisible();
}
@Test
@@ -311,10 +338,12 @@ public final class MenuManagerTest {
dirDetails.canCreateDoc = false;
dirDetails.canCreateDirectory = false;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
+ mDirDeselectAll.assertInvisible();
+ mDirDeselectAll.assertDisabled();
dirPasteFromClipboard.assertVisible();
dirPasteFromClipboard.assertDisabled();
dirCreateDir.assertVisible();
@@ -326,7 +355,7 @@ public final class MenuManagerTest {
dirDetails.hasItemsToPaste = false;
dirDetails.canCreateDoc = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -341,7 +370,7 @@ public final class MenuManagerTest {
dirDetails.hasItemsToPaste = true;
dirDetails.canCreateDoc = false;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -356,7 +385,7 @@ public final class MenuManagerTest {
dirDetails.hasItemsToPaste = true;
dirDetails.canCreateDoc = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -370,7 +399,7 @@ public final class MenuManagerTest {
public void testContextMenu_EmptyArea_CanCreateDirectory() {
dirDetails.canCreateDirectory = true;
- mgr.updateContextMenuForContainer(testMenu);
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
dirSelectAll.assertVisible();
dirSelectAll.assertEnabled();
@@ -381,6 +410,19 @@ public final class MenuManagerTest {
}
@Test
+ public void testContextMenu_EmptyArea_CanDeselectAll() {
+ selectionDetails.size = 1;
+ mFilesCount = 1;
+
+ mgr.updateContextMenuForContainer(testMenu, selectionDetails);
+
+ dirSelectAll.assertInvisible();
+ dirSelectAll.assertDisabled();
+ mDirDeselectAll.assertVisible();
+ mDirDeselectAll.assertEnabled();
+ }
+
+ @Test
public void testContextMenu_OnFile() {
mgr.updateContextMenuForFiles(testMenu, selectionDetails);
// We don't want share in pickers.