Loading src/com/android/documentsui/MenuManager.java +32 −31 Original line number Diff line number Diff line Loading @@ -207,11 +207,11 @@ public abstract class MenuManager { final boolean canCopy = selectionDetails.size() > 0 && !selectionDetails.containsPartialFiles(); final boolean canDelete = selectionDetails.canDelete(); cut.setEnabled(canCopy && canDelete); copy.setEnabled(canCopy); delete.setEnabled(canDelete); Menus.setEnabledAndVisible(cut, canCopy && canDelete); Menus.setEnabledAndVisible(copy, canCopy); Menus.setEnabledAndVisible(delete, canDelete); inspect.setEnabled(selectionDetails.size() == 1); Menus.setEnabledAndVisible(inspect, selectionDetails.size() == 1); } /** Loading @@ -227,7 +227,8 @@ public abstract class MenuManager { 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()); Menus.setEnabledAndVisible(paste, mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc()); updateSelectAll(selectAll, selectionDetails); updateDeselectAll(deselectAll, selectionDetails); updateCreateDir(createDir); Loading @@ -253,62 +254,62 @@ public abstract class MenuManager { List<KeyboardShortcutGroup> data, IntFunction<String> stringSupplier); protected void updateModePicker(MenuItem grid, MenuItem list) { grid.setVisible(mState.derivedMode != State.MODE_GRID); list.setVisible(mState.derivedMode != State.MODE_LIST); Menus.setEnabledAndVisible(grid, mState.derivedMode != State.MODE_GRID); Menus.setEnabledAndVisible(list, mState.derivedMode != State.MODE_LIST); } protected void updateSort(MenuItem sort) { sort.setVisible(true); Menus.setEnabledAndVisible(sort, true); } protected void updateDebug(MenuItem debug) { debug.setVisible(mState.debugMode); Menus.setEnabledAndVisible(debug, mState.debugMode); } protected void updateSettings(MenuItem settings) { settings.setVisible(false); Menus.setEnabledAndVisible(settings, false); } protected void updateSettings(MenuItem settings, RootInfo root) { settings.setVisible(false); Menus.setEnabledAndVisible(settings, false); } protected void updateEject(MenuItem eject, RootInfo root) { eject.setVisible(false); Menus.setEnabledAndVisible(eject, false); } protected void updateNewWindow(MenuItem newWindow) { newWindow.setVisible(false); Menus.setEnabledAndVisible(newWindow, false); } protected void updateSelect(MenuItem select, SelectionDetails selectionDetails) { select.setVisible(false); Menus.setEnabledAndVisible(select, false); } protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) { openWith.setVisible(false); Menus.setEnabledAndVisible(openWith, false); } protected void updateOpenInNewWindow( MenuItem openInNewWindow, SelectionDetails selectionDetails) { openInNewWindow.setVisible(false); Menus.setEnabledAndVisible(openInNewWindow, false); } protected void updateOpenInNewWindow( MenuItem openInNewWindow, RootInfo root) { openInNewWindow.setVisible(false); Menus.setEnabledAndVisible(openInNewWindow, false); } protected void updateShare(MenuItem share, SelectionDetails selectionDetails) { share.setVisible(false); Menus.setEnabledAndVisible(share, false); } protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) { delete.setVisible(false); Menus.setEnabledAndVisible(delete, false); } protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) { rename.setVisible(false); Menus.setEnabledAndVisible(rename, false); } /** Loading @@ -316,50 +317,50 @@ public abstract class MenuManager { * to when there is a selection. */ protected void updateInspect(MenuItem inspector) { inspector.setVisible(false); Menus.setEnabledAndVisible(inspector, false); } /** * This method is called for action mode, when a selection exists. */ protected void updateInspect(MenuItem inspect, SelectionDetails selectionDetails) { inspect.setVisible(false); Menus.setEnabledAndVisible(inspect, false); } protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) { view.setVisible(false); Menus.setEnabledAndVisible(view, false); } protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) { moveTo.setVisible(false); Menus.setEnabledAndVisible(moveTo, false); } protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) { copyTo.setVisible(false); Menus.setEnabledAndVisible(copyTo, false); } protected void updateCompress(MenuItem compress, SelectionDetails selectionDetails) { compress.setVisible(false); Menus.setEnabledAndVisible(compress, false); } protected void updateExtractTo(MenuItem extractTo, SelectionDetails selectionDetails) { extractTo.setVisible(false); Menus.setEnabledAndVisible(extractTo, false); } protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) { pasteInto.setVisible(false); Menus.setEnabledAndVisible(pasteInto, false); } protected void updatePasteInto(MenuItem pasteInto, RootInfo root, DocumentInfo docInfo) { pasteInto.setVisible(false); Menus.setEnabledAndVisible(pasteInto, false); } protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) { open.setVisible(false); Menus.setEnabledAndVisible(open, false); } protected void updateLauncher(MenuItem launcher) { launcher.setVisible(false); Menus.setEnabledAndVisible(launcher, false); } protected abstract void updateSelectAll(MenuItem selectAll); Loading src/com/android/documentsui/base/Menus.java +8 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ public final class Menus { for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); if (item.isVisible()) { item.setEnabled(true); continue; } if (contains(exclusions, item)) { Loading @@ -39,6 +40,12 @@ public final class Menus { } } /** Set enabled/disabled state of a menuItem, and updates its visibility. */ public static void setEnabledAndVisible(MenuItem item, boolean enabled) { item.setEnabled(enabled); item.setVisible(enabled); } private static boolean contains(MenuItem[] exclusions, MenuItem item) { for (int x = 0; x < exclusions.length; x++) { if (exclusions[x] == item) { Loading src/com/android/documentsui/files/MenuManager.java +33 −48 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Features; import com.android.documentsui.base.Lookup; import com.android.documentsui.base.LookupApplicationName; import com.android.documentsui.base.Menus; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.base.State; Loading Loading @@ -139,39 +140,34 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateSettings(MenuItem settings, RootInfo root) { settings.setVisible(true); settings.setEnabled(root.hasSettings()); Menus.setEnabledAndVisible(settings, root.hasSettings()); } @Override protected void updateEject(MenuItem eject, RootInfo root) { eject.setVisible(root.supportsEject()); eject.setEnabled(!root.ejecting); Menus.setEnabledAndVisible(eject, root.supportsEject() && !root.ejecting); } @Override protected void updateSettings(MenuItem settings) { boolean enabled = mDirDetails.hasRootSettings(); settings.setVisible(enabled); settings.setEnabled(enabled); Menus.setEnabledAndVisible(settings, enabled); } @Override protected void updateNewWindow(MenuItem newWindow) { newWindow.setVisible(true); Menus.setEnabledAndVisible(newWindow, true); } @Override protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) { openWith.setVisible(true); openWith.setEnabled(selectionDetails.canOpenWith()); Menus.setEnabledAndVisible(openWith, selectionDetails.canOpenWith()); } @Override protected void updateOpenInNewWindow( MenuItem openInNewWindow, SelectionDetails selectionDetails) { openInNewWindow.setVisible(true); openInNewWindow.setEnabled(selectionDetails.size() == 1 Menus.setEnabledAndVisible(openInNewWindow, selectionDetails.size() == 1 && !selectionDetails.containsPartialFiles()); } Loading @@ -182,42 +178,40 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) { moveTo.setVisible(true); moveTo.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canDelete()); Menus.setEnabledAndVisible(moveTo, !selectionDetails.containsPartialFiles() && selectionDetails.canDelete()); } @Override protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) { copyTo.setVisible(true); copyTo.setEnabled(!selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); Menus.setEnabledAndVisible(copyTo, !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); } @Override protected void updateCompress(MenuItem compress, SelectionDetails selectionDetails) { final boolean readOnly = !mDirDetails.canCreateDoc(); compress.setVisible(mFeatures.isArchiveCreationEnabled()); compress.setEnabled(!readOnly && !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); Menus.setEnabledAndVisible(compress, mFeatures.isArchiveCreationEnabled() && !readOnly && !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); } @Override protected void updateExtractTo(MenuItem extractTo, SelectionDetails selectionDetails) { boolean enabled = selectionDetails.canExtract(); extractTo.setVisible(enabled); extractTo.setEnabled(enabled); Menus.setEnabledAndVisible(extractTo, enabled); } @Override protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) { pasteInto.setVisible(true); pasteInto.setEnabled(selectionDetails.canPasteInto() && mDirDetails.hasItemsToPaste()); Menus.setEnabledAndVisible(pasteInto, selectionDetails.canPasteInto() && mDirDetails.hasItemsToPaste()); } @Override protected void updatePasteInto(MenuItem pasteInto, RootInfo root, DocumentInfo docInfo) { pasteInto.setVisible(true); pasteInto.setEnabled(root.supportsCreate() Menus.setEnabledAndVisible(pasteInto, root.supportsCreate() && docInfo != null && docInfo.isCreateSupported() && mDirDetails.hasItemsToPaste()); Loading @@ -225,28 +219,24 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateSelectAll(MenuItem selectAll) { selectAll.setVisible(true); selectAll.setEnabled(true); Menus.setEnabledAndVisible(selectAll, true); } @Override protected void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails) { final boolean visible = selectionDetails.size() < mFilesCountSupplier.getAsInt(); selectAll.setVisible(visible); selectAll.setEnabled(visible); Menus.setEnabledAndVisible(selectAll, visible); } @Override protected void updateDeselectAll(MenuItem deselectAll, SelectionDetails selectionDetails) { final boolean visible = selectionDetails.size() == mFilesCountSupplier.getAsInt(); deselectAll.setVisible(visible); deselectAll.setEnabled(visible); Menus.setEnabledAndVisible(deselectAll, visible); } @Override protected void updateCreateDir(MenuItem createDir) { createDir.setVisible(true); createDir.setEnabled(mDirDetails.canCreateDirectory()); Menus.setEnabledAndVisible(createDir, mDirDetails.canCreateDirectory()); } @Override Loading @@ -254,43 +244,38 @@ public final class MenuManager extends com.android.documentsui.MenuManager { boolean enabled = !selectionDetails.containsDirectories() && !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract(); share.setVisible(enabled); share.setEnabled(enabled); Menus.setEnabledAndVisible(share, enabled); } @Override protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) { boolean enabled = selectionDetails.canDelete(); delete.setVisible(enabled); delete.setEnabled(enabled); Menus.setEnabledAndVisible(delete, enabled); } @Override protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) { rename.setVisible(true); rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename()); Menus.setEnabledAndVisible(rename, !selectionDetails.containsPartialFiles() && selectionDetails.canRename()); } @Override protected void updateInspect(MenuItem inspect) { boolean visible = mFeatures.isInspectorEnabled(); inspect.setVisible(visible); inspect.setEnabled(visible && mDirDetails.canInspectDirectory()); Menus.setEnabledAndVisible(inspect, visible && mDirDetails.canInspectDirectory()); } @Override protected void updateInspect(MenuItem inspect, SelectionDetails selectionDetails) { boolean visible = mFeatures.isInspectorEnabled(); inspect.setVisible(visible); inspect.setEnabled(visible && selectionDetails.size() <= 1); boolean visible = mFeatures.isInspectorEnabled() && selectionDetails.size() <= 1; Menus.setEnabledAndVisible(inspect, visible); } @Override protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) { if (selectionDetails.canViewInOwner() && mSelectionManager.getSelection().iterator().hasNext()) { view.setVisible(true); view.setEnabled(true); Menus.setEnabledAndVisible(view, true); Resources res = mContext.getResources(); String selectedModelId = mSelectionManager.getSelection().iterator().next(); Uri selectedUri = mUriLookup.lookup(selectedModelId); Loading @@ -300,13 +285,13 @@ public final class MenuManager extends com.android.documentsui.MenuManager { view.setTitle(title); } else { view.setVisible(false); Menus.setEnabledAndVisible(view, false); } } @Override protected void updateLauncher(MenuItem launcher) { launcher.setVisible(mState.debugMode); Menus.setEnabledAndVisible(launcher, mState.debugMode); launcher.setTitle(Shared.isLauncherEnabled(mContext) ? "Hide launcher icon" : "Show launcher icon"); } Loading src/com/android/documentsui/picker/MenuManager.java +15 −19 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.MenuItem; import com.android.documentsui.Model; import com.android.documentsui.R; import com.android.documentsui.base.Menus; import com.android.documentsui.base.MimeTypes; import com.android.documentsui.base.State; import com.android.documentsui.queries.SearchViewManager; Loading Loading @@ -94,8 +95,8 @@ public final class MenuManager extends com.android.documentsui.MenuManager { protected void updateModePicker(MenuItem grid, MenuItem list) { // No display options in recent directories if (picking() && mDirDetails.isInRecents()) { grid.setVisible(false); list.setVisible(false); Menus.setEnabledAndVisible(grid, false); Menus.setEnabledAndVisible(list, false); } else { super.updateModePicker(grid, list); } Loading @@ -103,43 +104,38 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateSelectAll(MenuItem selectAll) { boolean visible = mState.allowMultiple; boolean enabled = visible && !mOnlyDirectory; selectAll.setVisible(visible); selectAll.setEnabled(enabled); boolean visible = mState.allowMultiple && !mOnlyDirectory; Menus.setEnabledAndVisible(selectAll, visible); } @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); && selectionDetails.size() < mFilesCountSupplier.getAsInt() && !mOnlyDirectory; Menus.setEnabledAndVisible(selectAll, visible); } @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); && selectionDetails.size() == mFilesCountSupplier.getAsInt() && !mOnlyDirectory; Menus.setEnabledAndVisible(deselectAll, visible); } @Override protected void updateCreateDir(MenuItem createDir) { createDir.setShowAsAction(picking() ? MenuItem.SHOW_AS_ACTION_ALWAYS : MenuItem.SHOW_AS_ACTION_NEVER); createDir.setVisible(picking()); createDir.setEnabled(picking() && mDirDetails.canCreateDirectory()); Menus.setEnabledAndVisible(createDir, picking() && mDirDetails.canCreateDirectory()); } @Override protected void updateSelect(MenuItem select, SelectionDetails selectionDetails) { select.setVisible(mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN); select.setEnabled(selectionDetails.size() > 0); Menus.setEnabledAndVisible(select, (mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN) && selectionDetails.size() > 0); select.setTitle(R.string.menu_select); } } tests/common/com/android/documentsui/bots/UiBot.java +7 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static androidx.test.espresso.matcher.ViewMatchers.withText; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.hamcrest.CoreMatchers.allOf; Loading Loading @@ -111,8 +112,12 @@ public class UiBot extends Bots.BaseBot { public void assertMenuEnabled(int id, boolean enabled) { UiObject2 menu = findMenuWithName(mContext.getString(id)); if (enabled) { assertNotNull(menu); assertEquals(enabled, menu.isEnabled()); } else { assertNull(menu); } } public void assertInActionMode(boolean inActionMode) { Loading Loading
src/com/android/documentsui/MenuManager.java +32 −31 Original line number Diff line number Diff line Loading @@ -207,11 +207,11 @@ public abstract class MenuManager { final boolean canCopy = selectionDetails.size() > 0 && !selectionDetails.containsPartialFiles(); final boolean canDelete = selectionDetails.canDelete(); cut.setEnabled(canCopy && canDelete); copy.setEnabled(canCopy); delete.setEnabled(canDelete); Menus.setEnabledAndVisible(cut, canCopy && canDelete); Menus.setEnabledAndVisible(copy, canCopy); Menus.setEnabledAndVisible(delete, canDelete); inspect.setEnabled(selectionDetails.size() == 1); Menus.setEnabledAndVisible(inspect, selectionDetails.size() == 1); } /** Loading @@ -227,7 +227,8 @@ public abstract class MenuManager { 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()); Menus.setEnabledAndVisible(paste, mDirDetails.hasItemsToPaste() && mDirDetails.canCreateDoc()); updateSelectAll(selectAll, selectionDetails); updateDeselectAll(deselectAll, selectionDetails); updateCreateDir(createDir); Loading @@ -253,62 +254,62 @@ public abstract class MenuManager { List<KeyboardShortcutGroup> data, IntFunction<String> stringSupplier); protected void updateModePicker(MenuItem grid, MenuItem list) { grid.setVisible(mState.derivedMode != State.MODE_GRID); list.setVisible(mState.derivedMode != State.MODE_LIST); Menus.setEnabledAndVisible(grid, mState.derivedMode != State.MODE_GRID); Menus.setEnabledAndVisible(list, mState.derivedMode != State.MODE_LIST); } protected void updateSort(MenuItem sort) { sort.setVisible(true); Menus.setEnabledAndVisible(sort, true); } protected void updateDebug(MenuItem debug) { debug.setVisible(mState.debugMode); Menus.setEnabledAndVisible(debug, mState.debugMode); } protected void updateSettings(MenuItem settings) { settings.setVisible(false); Menus.setEnabledAndVisible(settings, false); } protected void updateSettings(MenuItem settings, RootInfo root) { settings.setVisible(false); Menus.setEnabledAndVisible(settings, false); } protected void updateEject(MenuItem eject, RootInfo root) { eject.setVisible(false); Menus.setEnabledAndVisible(eject, false); } protected void updateNewWindow(MenuItem newWindow) { newWindow.setVisible(false); Menus.setEnabledAndVisible(newWindow, false); } protected void updateSelect(MenuItem select, SelectionDetails selectionDetails) { select.setVisible(false); Menus.setEnabledAndVisible(select, false); } protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) { openWith.setVisible(false); Menus.setEnabledAndVisible(openWith, false); } protected void updateOpenInNewWindow( MenuItem openInNewWindow, SelectionDetails selectionDetails) { openInNewWindow.setVisible(false); Menus.setEnabledAndVisible(openInNewWindow, false); } protected void updateOpenInNewWindow( MenuItem openInNewWindow, RootInfo root) { openInNewWindow.setVisible(false); Menus.setEnabledAndVisible(openInNewWindow, false); } protected void updateShare(MenuItem share, SelectionDetails selectionDetails) { share.setVisible(false); Menus.setEnabledAndVisible(share, false); } protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) { delete.setVisible(false); Menus.setEnabledAndVisible(delete, false); } protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) { rename.setVisible(false); Menus.setEnabledAndVisible(rename, false); } /** Loading @@ -316,50 +317,50 @@ public abstract class MenuManager { * to when there is a selection. */ protected void updateInspect(MenuItem inspector) { inspector.setVisible(false); Menus.setEnabledAndVisible(inspector, false); } /** * This method is called for action mode, when a selection exists. */ protected void updateInspect(MenuItem inspect, SelectionDetails selectionDetails) { inspect.setVisible(false); Menus.setEnabledAndVisible(inspect, false); } protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) { view.setVisible(false); Menus.setEnabledAndVisible(view, false); } protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) { moveTo.setVisible(false); Menus.setEnabledAndVisible(moveTo, false); } protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) { copyTo.setVisible(false); Menus.setEnabledAndVisible(copyTo, false); } protected void updateCompress(MenuItem compress, SelectionDetails selectionDetails) { compress.setVisible(false); Menus.setEnabledAndVisible(compress, false); } protected void updateExtractTo(MenuItem extractTo, SelectionDetails selectionDetails) { extractTo.setVisible(false); Menus.setEnabledAndVisible(extractTo, false); } protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) { pasteInto.setVisible(false); Menus.setEnabledAndVisible(pasteInto, false); } protected void updatePasteInto(MenuItem pasteInto, RootInfo root, DocumentInfo docInfo) { pasteInto.setVisible(false); Menus.setEnabledAndVisible(pasteInto, false); } protected void updateOpenInContextMenu(MenuItem open, SelectionDetails selectionDetails) { open.setVisible(false); Menus.setEnabledAndVisible(open, false); } protected void updateLauncher(MenuItem launcher) { launcher.setVisible(false); Menus.setEnabledAndVisible(launcher, false); } protected abstract void updateSelectAll(MenuItem selectAll); Loading
src/com/android/documentsui/base/Menus.java +8 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ public final class Menus { for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); if (item.isVisible()) { item.setEnabled(true); continue; } if (contains(exclusions, item)) { Loading @@ -39,6 +40,12 @@ public final class Menus { } } /** Set enabled/disabled state of a menuItem, and updates its visibility. */ public static void setEnabledAndVisible(MenuItem item, boolean enabled) { item.setEnabled(enabled); item.setVisible(enabled); } private static boolean contains(MenuItem[] exclusions, MenuItem item) { for (int x = 0; x < exclusions.length; x++) { if (exclusions[x] == item) { Loading
src/com/android/documentsui/files/MenuManager.java +33 −48 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.documentsui.base.DocumentInfo; import com.android.documentsui.base.Features; import com.android.documentsui.base.Lookup; import com.android.documentsui.base.LookupApplicationName; import com.android.documentsui.base.Menus; import com.android.documentsui.base.RootInfo; import com.android.documentsui.base.Shared; import com.android.documentsui.base.State; Loading Loading @@ -139,39 +140,34 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateSettings(MenuItem settings, RootInfo root) { settings.setVisible(true); settings.setEnabled(root.hasSettings()); Menus.setEnabledAndVisible(settings, root.hasSettings()); } @Override protected void updateEject(MenuItem eject, RootInfo root) { eject.setVisible(root.supportsEject()); eject.setEnabled(!root.ejecting); Menus.setEnabledAndVisible(eject, root.supportsEject() && !root.ejecting); } @Override protected void updateSettings(MenuItem settings) { boolean enabled = mDirDetails.hasRootSettings(); settings.setVisible(enabled); settings.setEnabled(enabled); Menus.setEnabledAndVisible(settings, enabled); } @Override protected void updateNewWindow(MenuItem newWindow) { newWindow.setVisible(true); Menus.setEnabledAndVisible(newWindow, true); } @Override protected void updateOpenWith(MenuItem openWith, SelectionDetails selectionDetails) { openWith.setVisible(true); openWith.setEnabled(selectionDetails.canOpenWith()); Menus.setEnabledAndVisible(openWith, selectionDetails.canOpenWith()); } @Override protected void updateOpenInNewWindow( MenuItem openInNewWindow, SelectionDetails selectionDetails) { openInNewWindow.setVisible(true); openInNewWindow.setEnabled(selectionDetails.size() == 1 Menus.setEnabledAndVisible(openInNewWindow, selectionDetails.size() == 1 && !selectionDetails.containsPartialFiles()); } Loading @@ -182,42 +178,40 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) { moveTo.setVisible(true); moveTo.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canDelete()); Menus.setEnabledAndVisible(moveTo, !selectionDetails.containsPartialFiles() && selectionDetails.canDelete()); } @Override protected void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) { copyTo.setVisible(true); copyTo.setEnabled(!selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); Menus.setEnabledAndVisible(copyTo, !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); } @Override protected void updateCompress(MenuItem compress, SelectionDetails selectionDetails) { final boolean readOnly = !mDirDetails.canCreateDoc(); compress.setVisible(mFeatures.isArchiveCreationEnabled()); compress.setEnabled(!readOnly && !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); Menus.setEnabledAndVisible(compress, mFeatures.isArchiveCreationEnabled() && !readOnly && !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract()); } @Override protected void updateExtractTo(MenuItem extractTo, SelectionDetails selectionDetails) { boolean enabled = selectionDetails.canExtract(); extractTo.setVisible(enabled); extractTo.setEnabled(enabled); Menus.setEnabledAndVisible(extractTo, enabled); } @Override protected void updatePasteInto(MenuItem pasteInto, SelectionDetails selectionDetails) { pasteInto.setVisible(true); pasteInto.setEnabled(selectionDetails.canPasteInto() && mDirDetails.hasItemsToPaste()); Menus.setEnabledAndVisible(pasteInto, selectionDetails.canPasteInto() && mDirDetails.hasItemsToPaste()); } @Override protected void updatePasteInto(MenuItem pasteInto, RootInfo root, DocumentInfo docInfo) { pasteInto.setVisible(true); pasteInto.setEnabled(root.supportsCreate() Menus.setEnabledAndVisible(pasteInto, root.supportsCreate() && docInfo != null && docInfo.isCreateSupported() && mDirDetails.hasItemsToPaste()); Loading @@ -225,28 +219,24 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateSelectAll(MenuItem selectAll) { selectAll.setVisible(true); selectAll.setEnabled(true); Menus.setEnabledAndVisible(selectAll, true); } @Override protected void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails) { final boolean visible = selectionDetails.size() < mFilesCountSupplier.getAsInt(); selectAll.setVisible(visible); selectAll.setEnabled(visible); Menus.setEnabledAndVisible(selectAll, visible); } @Override protected void updateDeselectAll(MenuItem deselectAll, SelectionDetails selectionDetails) { final boolean visible = selectionDetails.size() == mFilesCountSupplier.getAsInt(); deselectAll.setVisible(visible); deselectAll.setEnabled(visible); Menus.setEnabledAndVisible(deselectAll, visible); } @Override protected void updateCreateDir(MenuItem createDir) { createDir.setVisible(true); createDir.setEnabled(mDirDetails.canCreateDirectory()); Menus.setEnabledAndVisible(createDir, mDirDetails.canCreateDirectory()); } @Override Loading @@ -254,43 +244,38 @@ public final class MenuManager extends com.android.documentsui.MenuManager { boolean enabled = !selectionDetails.containsDirectories() && !selectionDetails.containsPartialFiles() && !selectionDetails.canExtract(); share.setVisible(enabled); share.setEnabled(enabled); Menus.setEnabledAndVisible(share, enabled); } @Override protected void updateDelete(MenuItem delete, SelectionDetails selectionDetails) { boolean enabled = selectionDetails.canDelete(); delete.setVisible(enabled); delete.setEnabled(enabled); Menus.setEnabledAndVisible(delete, enabled); } @Override protected void updateRename(MenuItem rename, SelectionDetails selectionDetails) { rename.setVisible(true); rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename()); Menus.setEnabledAndVisible(rename, !selectionDetails.containsPartialFiles() && selectionDetails.canRename()); } @Override protected void updateInspect(MenuItem inspect) { boolean visible = mFeatures.isInspectorEnabled(); inspect.setVisible(visible); inspect.setEnabled(visible && mDirDetails.canInspectDirectory()); Menus.setEnabledAndVisible(inspect, visible && mDirDetails.canInspectDirectory()); } @Override protected void updateInspect(MenuItem inspect, SelectionDetails selectionDetails) { boolean visible = mFeatures.isInspectorEnabled(); inspect.setVisible(visible); inspect.setEnabled(visible && selectionDetails.size() <= 1); boolean visible = mFeatures.isInspectorEnabled() && selectionDetails.size() <= 1; Menus.setEnabledAndVisible(inspect, visible); } @Override protected void updateViewInOwner(MenuItem view, SelectionDetails selectionDetails) { if (selectionDetails.canViewInOwner() && mSelectionManager.getSelection().iterator().hasNext()) { view.setVisible(true); view.setEnabled(true); Menus.setEnabledAndVisible(view, true); Resources res = mContext.getResources(); String selectedModelId = mSelectionManager.getSelection().iterator().next(); Uri selectedUri = mUriLookup.lookup(selectedModelId); Loading @@ -300,13 +285,13 @@ public final class MenuManager extends com.android.documentsui.MenuManager { view.setTitle(title); } else { view.setVisible(false); Menus.setEnabledAndVisible(view, false); } } @Override protected void updateLauncher(MenuItem launcher) { launcher.setVisible(mState.debugMode); Menus.setEnabledAndVisible(launcher, mState.debugMode); launcher.setTitle(Shared.isLauncherEnabled(mContext) ? "Hide launcher icon" : "Show launcher icon"); } Loading
src/com/android/documentsui/picker/MenuManager.java +15 −19 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.MenuItem; import com.android.documentsui.Model; import com.android.documentsui.R; import com.android.documentsui.base.Menus; import com.android.documentsui.base.MimeTypes; import com.android.documentsui.base.State; import com.android.documentsui.queries.SearchViewManager; Loading Loading @@ -94,8 +95,8 @@ public final class MenuManager extends com.android.documentsui.MenuManager { protected void updateModePicker(MenuItem grid, MenuItem list) { // No display options in recent directories if (picking() && mDirDetails.isInRecents()) { grid.setVisible(false); list.setVisible(false); Menus.setEnabledAndVisible(grid, false); Menus.setEnabledAndVisible(list, false); } else { super.updateModePicker(grid, list); } Loading @@ -103,43 +104,38 @@ public final class MenuManager extends com.android.documentsui.MenuManager { @Override protected void updateSelectAll(MenuItem selectAll) { boolean visible = mState.allowMultiple; boolean enabled = visible && !mOnlyDirectory; selectAll.setVisible(visible); selectAll.setEnabled(enabled); boolean visible = mState.allowMultiple && !mOnlyDirectory; Menus.setEnabledAndVisible(selectAll, visible); } @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); && selectionDetails.size() < mFilesCountSupplier.getAsInt() && !mOnlyDirectory; Menus.setEnabledAndVisible(selectAll, visible); } @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); && selectionDetails.size() == mFilesCountSupplier.getAsInt() && !mOnlyDirectory; Menus.setEnabledAndVisible(deselectAll, visible); } @Override protected void updateCreateDir(MenuItem createDir) { createDir.setShowAsAction(picking() ? MenuItem.SHOW_AS_ACTION_ALWAYS : MenuItem.SHOW_AS_ACTION_NEVER); createDir.setVisible(picking()); createDir.setEnabled(picking() && mDirDetails.canCreateDirectory()); Menus.setEnabledAndVisible(createDir, picking() && mDirDetails.canCreateDirectory()); } @Override protected void updateSelect(MenuItem select, SelectionDetails selectionDetails) { select.setVisible(mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN); select.setEnabled(selectionDetails.size() > 0); Menus.setEnabledAndVisible(select, (mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN) && selectionDetails.size() > 0); select.setTitle(R.string.menu_select); } }
tests/common/com/android/documentsui/bots/UiBot.java +7 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static androidx.test.espresso.matcher.ViewMatchers.withText; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.hamcrest.CoreMatchers.allOf; Loading Loading @@ -111,8 +112,12 @@ public class UiBot extends Bots.BaseBot { public void assertMenuEnabled(int id, boolean enabled) { UiObject2 menu = findMenuWithName(mContext.getString(id)); if (enabled) { assertNotNull(menu); assertEquals(enabled, menu.isEnabled()); } else { assertNull(menu); } } public void assertInActionMode(boolean inActionMode) { Loading