diff options
Diffstat (limited to 'src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java')
-rw-r--r-- | src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java | 107 |
1 files changed, 94 insertions, 13 deletions
diff --git a/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java b/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java index c789fca5..5f076548 100644 --- a/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java +++ b/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java @@ -36,13 +36,17 @@ import com.cyanogenmod.filemanager.FileManagerApplication; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.activities.NavigationActivity; import com.cyanogenmod.filemanager.adapters.TwoColumnsMenuListAdapter; +import com.cyanogenmod.filemanager.console.VirtualMountPointConsole; import com.cyanogenmod.filemanager.listeners.OnRequestRefreshListener; import com.cyanogenmod.filemanager.listeners.OnSelectionListener; import com.cyanogenmod.filemanager.model.Bookmark; +import com.cyanogenmod.filemanager.model.Directory; import com.cyanogenmod.filemanager.model.FileSystemObject; import com.cyanogenmod.filemanager.model.Symlink; import com.cyanogenmod.filemanager.model.SystemFile; import com.cyanogenmod.filemanager.preferences.AccessMode; +import com.cyanogenmod.filemanager.preferences.FileManagerSettings; +import com.cyanogenmod.filemanager.preferences.Preferences; import com.cyanogenmod.filemanager.ui.ThemeManager; import com.cyanogenmod.filemanager.ui.ThemeManager.Theme; import com.cyanogenmod.filemanager.ui.policy.BookmarksActionPolicy; @@ -57,6 +61,7 @@ import com.cyanogenmod.filemanager.ui.policy.NavigationActionPolicy; import com.cyanogenmod.filemanager.ui.policy.NewActionPolicy; import com.cyanogenmod.filemanager.ui.policy.PrintActionPolicy; import com.cyanogenmod.filemanager.util.DialogHelper; +import com.cyanogenmod.filemanager.util.ExceptionUtil; import com.cyanogenmod.filemanager.util.FileHelper; import com.cyanogenmod.filemanager.util.MimeTypeHelper; import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory; @@ -64,6 +69,7 @@ import com.cyanogenmod.filemanager.util.SelectionHelper; import com.cyanogenmod.filemanager.util.StorageHelper; import java.io.File; +import java.io.InvalidClassException; import java.util.ArrayList; import java.util.List; @@ -437,6 +443,19 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen this.mContext, this.mFso, this.mOnRequestRefreshListener); break; + // Set as home + case R.id.mnu_actions_set_as_home: + case R.id.mnu_actions_global_set_as_home: + try { + Preferences.savePreference( + FileManagerSettings.SETTINGS_INITIAL_DIR, mFso.getFullPath(), true); + mOnRequestRefreshListener.onRequestBookmarksRefresh(); + DialogHelper.showToast(mContext, R.string.msgs_success, Toast.LENGTH_SHORT); + } catch (InvalidClassException e) { + ExceptionUtil.translateException(mContext, e); + } + break; + default: break; } @@ -651,8 +670,7 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen } //- Print (only for text and image categories) - if (category.compareTo(MimeTypeCategory.TEXT) != 0 && - category.compareTo(MimeTypeCategory.IMAGE) != 0) { + if (!PrintActionPolicy.isPrintedAllowed(mContext, mFso)) { menu.removeItem(R.id.mnu_actions_print); } } @@ -680,18 +698,21 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen } } //- Create link - if (this.mGlobal && (selection == null || selection.size() == 0 || selection.size() > 1)) { + if (this.mGlobal && (selection == null || selection.size() == 0 + || selection.size() > 1)) { // Only when one item is selected menu.removeItem(R.id.mnu_actions_create_link_global); } else if (this.mGlobal && selection != null) { - // Create link (not allow in storage volume) + // Create link (not allow in sdcard, secure or remote storage volumes) FileSystemObject fso = selection.get(0); - if (StorageHelper.isPathInStorageVolume(fso.getFullPath())) { - menu.removeItem(R.id.mnu_actions_create_link); + if (StorageHelper.isPathInStorageVolume(fso.getFullPath()) + || fso.isSecure() || fso.isRemote()) { + menu.removeItem(R.id.mnu_actions_create_link_global); } } else if (!this.mGlobal) { - // Create link (not allow in storage volume) - if (StorageHelper.isPathInStorageVolume(this.mFso.getFullPath())) { + // Create link (not allow in sdcard, secure or remote storage volumes) + if (StorageHelper.isPathInStorageVolume(this.mFso.getFullPath()) + || mFso.isSecure() || mFso.isRemote()) { menu.removeItem(R.id.mnu_actions_create_link); } } @@ -702,10 +723,18 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen if (this.mGlobal) { if (selection == null || selection.size() == 0) { menu.removeItem(R.id.mnu_actions_compress_selection); + } else { + for (FileSystemObject fso : selection) { + // Ignore for system, secure or remote files + if (fso instanceof SystemFile || fso.isSecure() || fso.isRemote()) { + menu.removeItem(R.id.mnu_actions_compress_selection); + break; + } + } } } else { - // Ignore for system files - if (this.mFso instanceof SystemFile) { + // Ignore for system, secure or remote files + if (this.mFso instanceof SystemFile || mFso.isSecure() || mFso.isRemote()) { menu.removeItem(R.id.mnu_actions_compress); } } @@ -735,16 +764,68 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen } } + // Shotcuts and Bookmarks (not available in virtual filesystems) + if (!mGlobal && (mFso.isSecure() || mFso.isRemote())) { + menu.removeItem(R.id.mnu_actions_add_shortcut); + menu.removeItem(R.id.mnu_actions_add_to_bookmarks); + } else if (mGlobal) { + if (selection != null && selection.size() > 0) { + for (FileSystemObject fso : selection) { + if (fso.isSecure() || fso.isRemote()) { + menu.removeItem(R.id.mnu_actions_add_shortcut_current_folder); + menu.removeItem(R.id.mnu_actions_add_to_bookmarks_current_folder); + break; + } + } + } + } + + // Set as home + if (!mGlobal && !FileHelper.isDirectory(mFso)) { + menu.removeItem(R.id.mnu_actions_set_as_home); + } else if (mGlobal && (selection != null && selection.size() > 0)) { + menu.removeItem(R.id.mnu_actions_global_set_as_home); + } + // Not allowed in search if (this.mSearch) { menu.removeItem(R.id.mnu_actions_extract); menu.removeItem(R.id.mnu_actions_compress); menu.removeItem(R.id.mnu_actions_create_link); + } else { + // Not allowed if not in search + menu.removeItem(R.id.mnu_actions_open_parent_folder); } - // Not allowed if not in search - if (!this.mSearch) { - menu.removeItem(R.id.mnu_actions_open_parent_folder); + // Remove unsafe operations over virtual mountpoint directories + List<Directory> virtualDirs = VirtualMountPointConsole.getVirtualMountableDirectories(); + if (!mGlobal && FileHelper.isDirectory(mFso) && virtualDirs.contains(mFso)) { + menu.removeItem(R.id.mnu_actions_delete); + menu.removeItem(R.id.mnu_actions_rename); + menu.removeItem(R.id.mnu_actions_compress); + menu.removeItem(R.id.mnu_actions_create_copy); + menu.removeItem(R.id.mnu_actions_create_link); + menu.removeItem(R.id.mnu_actions_add_shortcut); + menu.removeItem(R.id.mnu_actions_add_to_bookmarks); + } else if (mGlobal) { + if (selection != null && selection.size() > 0) { + for (FileSystemObject fso : selection) { + if (FileHelper.isDirectory(fso) && virtualDirs.contains(fso)) { + menu.removeItem(R.id.mnu_actions_paste_selection); + menu.removeItem(R.id.mnu_actions_move_selection); + menu.removeItem(R.id.mnu_actions_delete_selection); + menu.removeItem(R.id.mnu_actions_compress_selection); + menu.removeItem(R.id.mnu_actions_create_link_global); + menu.removeItem(R.id.mnu_actions_send_selection); + menu.removeItem(R.id.mnu_actions_create_link_global); + menu.removeItem(R.id.mnu_actions_create_link_global); + menu.removeItem(R.id.mnu_actions_create_link_global); + menu.removeItem(R.id.mnu_actions_add_shortcut_current_folder); + menu.removeItem(R.id.mnu_actions_add_to_bookmarks_current_folder); + break; + } + } + } } // Remove not-ChRooted actions (actions that can't be present when running in |