Loading src/com/android/documentsui/BaseActivity.java +3 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import com.android.documentsui.SearchViewManager.SearchManagerListener; import com.android.documentsui.State.ViewMode; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.FragmentTuner; import com.android.documentsui.dirlist.Model; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; Loading Loading @@ -95,6 +96,8 @@ public abstract class BaseActivity extends Activity public abstract void onDocumentPicked(DocumentInfo doc, Model model); public abstract void onDocumentsPicked(List<DocumentInfo> docs); public abstract FragmentTuner createFragmentTuner(); public abstract MenuManager getMenuManager(); abstract void onTaskFinished(Uri... uris); abstract void refreshDirectory(int anim); Loading src/com/android/documentsui/DocumentsActivity.java +20 −30 Original line number Diff line number Diff line Loading @@ -43,10 +43,13 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import com.android.documentsui.MenuManager.DirectoryDetails; import com.android.documentsui.RecentsProvider.RecentColumns; import com.android.documentsui.RecentsProvider.ResumeColumns; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.FragmentTuner; import com.android.documentsui.dirlist.FragmentTuner.DocumentsTuner; import com.android.documentsui.dirlist.Model; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DurableUtils; Loading @@ -64,6 +67,8 @@ import java.util.List; public class DocumentsActivity extends BaseActivity { private static final int CODE_FORWARD = 42; private static final String TAG = "DocumentsActivity"; private DocumentsMenuManager mMenuManager; private DirectoryDetails mDetails; public DocumentsActivity() { super(R.layout.documents_activity, TAG); Loading @@ -72,6 +77,8 @@ public class DocumentsActivity extends BaseActivity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mMenuManager = new DocumentsMenuManager(mSearchManager, getDisplayState()); mDetails = new DirectoryDetails(this); if (mState.action == ACTION_CREATE) { final String mimeType = getIntent().getType(); Loading Loading @@ -214,44 +221,15 @@ public class DocumentsActivity extends BaseActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); mMenuManager.updateOptionMenu(menu, mDetails); final DocumentInfo cwd = getCurrentDirectory(); boolean picking = mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_PICK_COPY_DESTINATION; if (picking) { // May already be hidden because the root // doesn't support search. mSearchManager.showMenu(false); } final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem grid = menu.findItem(R.id.menu_grid); final MenuItem list = menu.findItem(R.id.menu_list); final MenuItem fileSize = menu.findItem(R.id.menu_file_size); createDir.setVisible(picking); createDir.setEnabled(canCreateDirectory()); // No display options in recent directories boolean inRecents = cwd == null; if (picking && inRecents) { grid.setVisible(false); list.setVisible(false); } fileSize.setVisible(fileSize.isVisible() && !picking); if (mState.action == ACTION_CREATE) { final FragmentManager fm = getFragmentManager(); SaveFragment.get(fm).prepareForDirectory(cwd); } Menus.disableHiddenItems(menu); return true; } Loading Loading @@ -424,6 +402,18 @@ public class DocumentsActivity extends BaseActivity { return (DocumentsActivity) fragment.getActivity(); } @Override public FragmentTuner createFragmentTuner() { // Currently DocumentsTuner maintains a state specific to the fragment instance. Because of // that, we create a new instance everytime it is needed return new DocumentsTuner(this, getDisplayState()); } @Override public MenuManager getMenuManager() { return mMenuManager; } /** * Loads the last used path (stack) from Recents (history). * The path selected is based on the calling package name. So the last Loading src/com/android/documentsui/DocumentsMenuManager.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import static com.android.documentsui.State.ACTION_CREATE; import static com.android.documentsui.State.ACTION_GET_CONTENT; import static com.android.documentsui.State.ACTION_OPEN; import static com.android.documentsui.State.ACTION_OPEN_TREE; import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION; import android.view.Menu; import android.view.MenuItem; final class DocumentsMenuManager implements MenuManager { private final State mState; private final SearchViewManager mSearchManager; public DocumentsMenuManager(SearchViewManager searchManager, State displayState) { mSearchManager = searchManager; mState = displayState; } @Override public void updateActionMenu(Menu menu, MenuManager.SelectionDetails selection) { MenuItem open = menu.findItem(R.id.menu_open); MenuItem share = menu.findItem(R.id.menu_share); MenuItem delete = menu.findItem(R.id.menu_delete); MenuItem rename = menu.findItem(R.id.menu_rename); MenuItem selectAll = menu.findItem(R.id.menu_select_all); open.setVisible(mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN); share.setVisible(false); delete.setVisible(false); rename.setVisible(false); selectAll.setVisible(mState.allowMultiple); Menus.disableHiddenItems(menu); } @Override public void updateOptionMenu(Menu menu, DirectoryDetails details) { boolean picking = mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_PICK_COPY_DESTINATION; if (picking) { // May already be hidden because the root // doesn't support search. mSearchManager.showMenu(false); } final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem fileSize = menu.findItem(R.id.menu_file_size); createDir.setVisible(picking); createDir.setEnabled(details.canCreateDirectory()); // No display options in recent directories if (picking && details.isInRecents()) { final MenuItem grid = menu.findItem(R.id.menu_grid); final MenuItem list = menu.findItem(R.id.menu_list); grid.setVisible(false); list.setVisible(false); } fileSize.setVisible(fileSize.isVisible() && !picking); Menus.disableHiddenItems(menu); } } src/com/android/documentsui/FilesActivity.java +23 −17 Original line number Diff line number Diff line Loading @@ -36,10 +36,13 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import com.android.documentsui.MenuManager.DirectoryDetails; import com.android.documentsui.OperationDialogFragment.DialogType; import com.android.documentsui.RecentsProvider.ResumeColumns; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.FragmentTuner; import com.android.documentsui.dirlist.FragmentTuner.FilesTuner; import com.android.documentsui.dirlist.Model; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; Loading Loading @@ -67,6 +70,8 @@ public class FilesActivity extends BaseActivity { // We use the time gap to figure out whether to close app or reopen the drawer. private long mDrawerLastFiddled; private DocumentClipper mClipper; private FilesMenuManager mMenuManager; private DirectoryDetails mDetails; public FilesActivity() { super(R.layout.files_activity, TAG); Loading @@ -77,6 +82,13 @@ public class FilesActivity extends BaseActivity { super.onCreate(icicle); mClipper = DocumentsApplication.getDocumentClipper(this); mMenuManager = new FilesMenuManager(mSearchManager); mDetails = new DirectoryDetails(this) { @Override public boolean hasItemsToPaste() { return mClipper.hasItemsToPaste(); } }; RootsFragment.show(getFragmentManager(), null); Loading Loading @@ -198,23 +210,7 @@ public class FilesActivity extends BaseActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); final RootInfo root = getCurrentRoot(); final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard); final MenuItem settings = menu.findItem(R.id.menu_settings); final MenuItem newWindow = menu.findItem(R.id.menu_new_window); createDir.setVisible(true); createDir.setEnabled(canCreateDirectory()); pasteFromCb.setEnabled(mClipper.hasItemsToPaste()); settings.setVisible(root.hasSettings()); newWindow.setVisible(Shared.shouldShowFancyFeatures(this)); Menus.disableHiddenItems(menu, pasteFromCb); // It hides icon if searching in progress mSearchManager.updateMenu(); mMenuManager.updateOptionMenu(menu, mDetails); return true; } Loading Loading @@ -462,6 +458,16 @@ public class FilesActivity extends BaseActivity { finish(); } @Override public FragmentTuner createFragmentTuner() { return new FilesTuner(this, getDisplayState()); } @Override public MenuManager getMenuManager() { return mMenuManager; } /** * 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. Loading src/com/android/documentsui/FilesMenuManager.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import android.view.Menu; import android.view.MenuItem; import com.android.documentsui.R; final class FilesMenuManager implements MenuManager { private final SearchViewManager mSearchManager; public FilesMenuManager(SearchViewManager searchManager) { mSearchManager = searchManager; } @Override public void updateActionMenu(Menu menu, SelectionDetails selection) { menu.findItem(R.id.menu_open).setVisible(false); // "open" is never used in Files. // Commands accessible only via keyboard... MenuItem copy = menu.findItem(R.id.menu_copy_to_clipboard); MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard); // Commands visible in the UI... MenuItem rename = menu.findItem(R.id.menu_rename); MenuItem moveTo = menu.findItem(R.id.menu_move_to); MenuItem copyTo = menu.findItem(R.id.menu_copy_to); MenuItem share = menu.findItem(R.id.menu_share); MenuItem delete = menu.findItem(R.id.menu_delete); // Commands usually on action-bar, so we always manage visibility. share.setVisible(!selection.containsDirectories() && !selection.containsPartialFiles()); delete.setVisible(selection.canDelete()); // Commands always in overflow, so we don't bother showing/hiding... copyTo.setVisible(true); moveTo.setVisible(true); rename.setVisible(true); // copy is not visible, keyboard only copy.setEnabled(!selection.containsPartialFiles()); copyTo.setEnabled(!selection.containsPartialFiles()); moveTo.setEnabled(!selection.containsPartialFiles() && selection.canDelete()); rename.setEnabled(!selection.containsPartialFiles() && selection.canRename()); Menus.disableHiddenItems(menu, copy, paste); } @Override public void updateOptionMenu(Menu menu, DirectoryDetails details) { final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard); final MenuItem settings = menu.findItem(R.id.menu_settings); final MenuItem newWindow = menu.findItem(R.id.menu_new_window); createDir.setVisible(true); createDir.setEnabled(details.canCreateDirectory()); pasteFromCb.setEnabled(details.hasItemsToPaste()); settings.setVisible(details.hasRootSettings()); newWindow.setVisible(details.shouldShowFancyFeatures()); Menus.disableHiddenItems(menu, pasteFromCb); // It hides icon if searching in progress mSearchManager.updateMenu(); } } Loading
src/com/android/documentsui/BaseActivity.java +3 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import com.android.documentsui.SearchViewManager.SearchManagerListener; import com.android.documentsui.State.ViewMode; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.FragmentTuner; import com.android.documentsui.dirlist.Model; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; Loading Loading @@ -95,6 +96,8 @@ public abstract class BaseActivity extends Activity public abstract void onDocumentPicked(DocumentInfo doc, Model model); public abstract void onDocumentsPicked(List<DocumentInfo> docs); public abstract FragmentTuner createFragmentTuner(); public abstract MenuManager getMenuManager(); abstract void onTaskFinished(Uri... uris); abstract void refreshDirectory(int anim); Loading
src/com/android/documentsui/DocumentsActivity.java +20 −30 Original line number Diff line number Diff line Loading @@ -43,10 +43,13 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import com.android.documentsui.MenuManager.DirectoryDetails; import com.android.documentsui.RecentsProvider.RecentColumns; import com.android.documentsui.RecentsProvider.ResumeColumns; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.FragmentTuner; import com.android.documentsui.dirlist.FragmentTuner.DocumentsTuner; import com.android.documentsui.dirlist.Model; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DurableUtils; Loading @@ -64,6 +67,8 @@ import java.util.List; public class DocumentsActivity extends BaseActivity { private static final int CODE_FORWARD = 42; private static final String TAG = "DocumentsActivity"; private DocumentsMenuManager mMenuManager; private DirectoryDetails mDetails; public DocumentsActivity() { super(R.layout.documents_activity, TAG); Loading @@ -72,6 +77,8 @@ public class DocumentsActivity extends BaseActivity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mMenuManager = new DocumentsMenuManager(mSearchManager, getDisplayState()); mDetails = new DirectoryDetails(this); if (mState.action == ACTION_CREATE) { final String mimeType = getIntent().getType(); Loading Loading @@ -214,44 +221,15 @@ public class DocumentsActivity extends BaseActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); mMenuManager.updateOptionMenu(menu, mDetails); final DocumentInfo cwd = getCurrentDirectory(); boolean picking = mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_PICK_COPY_DESTINATION; if (picking) { // May already be hidden because the root // doesn't support search. mSearchManager.showMenu(false); } final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem grid = menu.findItem(R.id.menu_grid); final MenuItem list = menu.findItem(R.id.menu_list); final MenuItem fileSize = menu.findItem(R.id.menu_file_size); createDir.setVisible(picking); createDir.setEnabled(canCreateDirectory()); // No display options in recent directories boolean inRecents = cwd == null; if (picking && inRecents) { grid.setVisible(false); list.setVisible(false); } fileSize.setVisible(fileSize.isVisible() && !picking); if (mState.action == ACTION_CREATE) { final FragmentManager fm = getFragmentManager(); SaveFragment.get(fm).prepareForDirectory(cwd); } Menus.disableHiddenItems(menu); return true; } Loading Loading @@ -424,6 +402,18 @@ public class DocumentsActivity extends BaseActivity { return (DocumentsActivity) fragment.getActivity(); } @Override public FragmentTuner createFragmentTuner() { // Currently DocumentsTuner maintains a state specific to the fragment instance. Because of // that, we create a new instance everytime it is needed return new DocumentsTuner(this, getDisplayState()); } @Override public MenuManager getMenuManager() { return mMenuManager; } /** * Loads the last used path (stack) from Recents (history). * The path selected is based on the calling package name. So the last Loading
src/com/android/documentsui/DocumentsMenuManager.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import static com.android.documentsui.State.ACTION_CREATE; import static com.android.documentsui.State.ACTION_GET_CONTENT; import static com.android.documentsui.State.ACTION_OPEN; import static com.android.documentsui.State.ACTION_OPEN_TREE; import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION; import android.view.Menu; import android.view.MenuItem; final class DocumentsMenuManager implements MenuManager { private final State mState; private final SearchViewManager mSearchManager; public DocumentsMenuManager(SearchViewManager searchManager, State displayState) { mSearchManager = searchManager; mState = displayState; } @Override public void updateActionMenu(Menu menu, MenuManager.SelectionDetails selection) { MenuItem open = menu.findItem(R.id.menu_open); MenuItem share = menu.findItem(R.id.menu_share); MenuItem delete = menu.findItem(R.id.menu_delete); MenuItem rename = menu.findItem(R.id.menu_rename); MenuItem selectAll = menu.findItem(R.id.menu_select_all); open.setVisible(mState.action == ACTION_GET_CONTENT || mState.action == ACTION_OPEN); share.setVisible(false); delete.setVisible(false); rename.setVisible(false); selectAll.setVisible(mState.allowMultiple); Menus.disableHiddenItems(menu); } @Override public void updateOptionMenu(Menu menu, DirectoryDetails details) { boolean picking = mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE || mState.action == ACTION_PICK_COPY_DESTINATION; if (picking) { // May already be hidden because the root // doesn't support search. mSearchManager.showMenu(false); } final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem fileSize = menu.findItem(R.id.menu_file_size); createDir.setVisible(picking); createDir.setEnabled(details.canCreateDirectory()); // No display options in recent directories if (picking && details.isInRecents()) { final MenuItem grid = menu.findItem(R.id.menu_grid); final MenuItem list = menu.findItem(R.id.menu_list); grid.setVisible(false); list.setVisible(false); } fileSize.setVisible(fileSize.isVisible() && !picking); Menus.disableHiddenItems(menu); } }
src/com/android/documentsui/FilesActivity.java +23 −17 Original line number Diff line number Diff line Loading @@ -36,10 +36,13 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import com.android.documentsui.MenuManager.DirectoryDetails; import com.android.documentsui.OperationDialogFragment.DialogType; import com.android.documentsui.RecentsProvider.ResumeColumns; import com.android.documentsui.dirlist.AnimationView; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.FragmentTuner; import com.android.documentsui.dirlist.FragmentTuner.FilesTuner; import com.android.documentsui.dirlist.Model; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; Loading Loading @@ -67,6 +70,8 @@ public class FilesActivity extends BaseActivity { // We use the time gap to figure out whether to close app or reopen the drawer. private long mDrawerLastFiddled; private DocumentClipper mClipper; private FilesMenuManager mMenuManager; private DirectoryDetails mDetails; public FilesActivity() { super(R.layout.files_activity, TAG); Loading @@ -77,6 +82,13 @@ public class FilesActivity extends BaseActivity { super.onCreate(icicle); mClipper = DocumentsApplication.getDocumentClipper(this); mMenuManager = new FilesMenuManager(mSearchManager); mDetails = new DirectoryDetails(this) { @Override public boolean hasItemsToPaste() { return mClipper.hasItemsToPaste(); } }; RootsFragment.show(getFragmentManager(), null); Loading Loading @@ -198,23 +210,7 @@ public class FilesActivity extends BaseActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); final RootInfo root = getCurrentRoot(); final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard); final MenuItem settings = menu.findItem(R.id.menu_settings); final MenuItem newWindow = menu.findItem(R.id.menu_new_window); createDir.setVisible(true); createDir.setEnabled(canCreateDirectory()); pasteFromCb.setEnabled(mClipper.hasItemsToPaste()); settings.setVisible(root.hasSettings()); newWindow.setVisible(Shared.shouldShowFancyFeatures(this)); Menus.disableHiddenItems(menu, pasteFromCb); // It hides icon if searching in progress mSearchManager.updateMenu(); mMenuManager.updateOptionMenu(menu, mDetails); return true; } Loading Loading @@ -462,6 +458,16 @@ public class FilesActivity extends BaseActivity { finish(); } @Override public FragmentTuner createFragmentTuner() { return new FilesTuner(this, getDisplayState()); } @Override public MenuManager getMenuManager() { return mMenuManager; } /** * 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. Loading
src/com/android/documentsui/FilesMenuManager.java 0 → 100644 +87 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import android.view.Menu; import android.view.MenuItem; import com.android.documentsui.R; final class FilesMenuManager implements MenuManager { private final SearchViewManager mSearchManager; public FilesMenuManager(SearchViewManager searchManager) { mSearchManager = searchManager; } @Override public void updateActionMenu(Menu menu, SelectionDetails selection) { menu.findItem(R.id.menu_open).setVisible(false); // "open" is never used in Files. // Commands accessible only via keyboard... MenuItem copy = menu.findItem(R.id.menu_copy_to_clipboard); MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard); // Commands visible in the UI... MenuItem rename = menu.findItem(R.id.menu_rename); MenuItem moveTo = menu.findItem(R.id.menu_move_to); MenuItem copyTo = menu.findItem(R.id.menu_copy_to); MenuItem share = menu.findItem(R.id.menu_share); MenuItem delete = menu.findItem(R.id.menu_delete); // Commands usually on action-bar, so we always manage visibility. share.setVisible(!selection.containsDirectories() && !selection.containsPartialFiles()); delete.setVisible(selection.canDelete()); // Commands always in overflow, so we don't bother showing/hiding... copyTo.setVisible(true); moveTo.setVisible(true); rename.setVisible(true); // copy is not visible, keyboard only copy.setEnabled(!selection.containsPartialFiles()); copyTo.setEnabled(!selection.containsPartialFiles()); moveTo.setEnabled(!selection.containsPartialFiles() && selection.canDelete()); rename.setEnabled(!selection.containsPartialFiles() && selection.canRename()); Menus.disableHiddenItems(menu, copy, paste); } @Override public void updateOptionMenu(Menu menu, DirectoryDetails details) { final MenuItem createDir = menu.findItem(R.id.menu_create_dir); final MenuItem pasteFromCb = menu.findItem(R.id.menu_paste_from_clipboard); final MenuItem settings = menu.findItem(R.id.menu_settings); final MenuItem newWindow = menu.findItem(R.id.menu_new_window); createDir.setVisible(true); createDir.setEnabled(details.canCreateDirectory()); pasteFromCb.setEnabled(details.hasItemsToPaste()); settings.setVisible(details.hasRootSettings()); newWindow.setVisible(details.shouldShowFancyFeatures()); Menus.disableHiddenItems(menu, pasteFromCb); // It hides icon if searching in progress mSearchManager.updateMenu(); } }