diff options
author | herriojr <jherriott@cyngn.com> | 2015-08-25 18:19:23 -0700 |
---|---|---|
committer | Michael Bestas <mikeioannina@cyanogenmod.org> | 2016-06-20 03:31:43 -0700 |
commit | e337edcbdaf55d6f84dbcb357843260fe842ffce (patch) | |
tree | 23b8cf7b4100a3d6e2655e533a3790c0b1e88822 | |
parent | 80077de4de4d18304fb9971d73dc53bb7ebf848c (diff) | |
download | android_packages_apps_CMFileManager-e337edcbdaf55d6f84dbcb357843260fe842ffce.tar.gz android_packages_apps_CMFileManager-e337edcbdaf55d6f84dbcb357843260fe842ffce.tar.bz2 android_packages_apps_CMFileManager-e337edcbdaf55d6f84dbcb357843260fe842ffce.zip |
Fix Rename on VFat
Changed how the java console handles detecting if a file rename
collides with another file to more represent how the particular
filesystem implementation handles it (I'm looking at you vfat).
Change-Id: I6ac9ae848ee47fa33f02225c310c92f2a03fb50d
(cherry picked from commit bd4178a860ab7da89549036c6a4815239b903b61)
5 files changed, 37 insertions, 25 deletions
diff --git a/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java b/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java index 4aaf32d0..25f5af82 100644 --- a/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java +++ b/src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java @@ -477,7 +477,7 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen final InputNameDialog inputNameDialog = new InputNameDialog( this.mContext, - this.mOnSelectionListener.onRequestCurrentItems(), + this.mOnSelectionListener.onRequestCurrentDir(), menuItem.getTitle().toString()); inputNameDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override @@ -519,7 +519,7 @@ public class ActionsDialog implements OnItemClickListener, OnItemLongClickListen final InputNameDialog inputNameDialog = new InputNameDialog( this.mContext, - this.mOnSelectionListener.onRequestCurrentItems(), + this.mOnSelectionListener.onRequestCurrentDir(), fso, allowFsoName, menuItem.getTitle().toString()); diff --git a/src/com/cyanogenmod/filemanager/ui/dialogs/InputNameDialog.java b/src/com/cyanogenmod/filemanager/ui/dialogs/InputNameDialog.java index 36cf1d1e..dfe844aa 100644 --- a/src/com/cyanogenmod/filemanager/ui/dialogs/InputNameDialog.java +++ b/src/com/cyanogenmod/filemanager/ui/dialogs/InputNameDialog.java @@ -59,7 +59,7 @@ public class InputNameDialog /** * @hide */ - final List<FileSystemObject> mFiles; + final String mParent; /** * @hide */ @@ -81,8 +81,8 @@ public class InputNameDialog * @param dialogTitle The dialog title */ public InputNameDialog( - final Context context, List<FileSystemObject> files, String dialogTitle) { - this(context, files, null, false, dialogTitle); + final Context context, String parent, String dialogTitle) { + this(context, parent, null, false, dialogTitle); } /** @@ -95,15 +95,18 @@ public class InputNameDialog * @param dialogTitle The dialog title */ public InputNameDialog( - final Context context, final List<FileSystemObject> files, - final FileSystemObject fso, boolean allowFsoName, final String dialogTitle) { + final Context context, + final String parent, + final FileSystemObject fso, + boolean allowFsoName, + final String dialogTitle) { super(); //Save the context this.mContext = context; //Save the files - this.mFiles = files; + this.mParent = parent; this.mFso = fso; this.mAllowFsoName = allowFsoName; this.mCancelled = true; @@ -293,7 +296,7 @@ public class InputNameDialog } // Name exists - if (FileHelper.isNameExists(this.mFiles, name)) { + if (FileHelper.isNameExists(this.mContext, this.mParent, name)) { setMsg( InputNameDialog.this.mContext.getString( R.string.input_name_dialog_message_name_exists), false); diff --git a/src/com/cyanogenmod/filemanager/ui/policy/CompressActionPolicy.java b/src/com/cyanogenmod/filemanager/ui/policy/CompressActionPolicy.java index b5021b88..aea4b80c 100644 --- a/src/com/cyanogenmod/filemanager/ui/policy/CompressActionPolicy.java +++ b/src/com/cyanogenmod/filemanager/ui/policy/CompressActionPolicy.java @@ -302,7 +302,7 @@ public final class CompressActionPolicy extends ActionsPolicy { String newName = FileHelper.createNonExistingName( ctx, - onSelectionListener.onRequestCurrentItems(), + onSelectionListener.onRequestCurrentDir(), name, R.string.create_new_compress_file_regexp); String newNameAbs = diff --git a/src/com/cyanogenmod/filemanager/ui/policy/CopyMoveActionPolicy.java b/src/com/cyanogenmod/filemanager/ui/policy/CopyMoveActionPolicy.java index a3272208..9a47f127 100755 --- a/src/com/cyanogenmod/filemanager/ui/policy/CopyMoveActionPolicy.java +++ b/src/com/cyanogenmod/filemanager/ui/policy/CopyMoveActionPolicy.java @@ -138,10 +138,10 @@ public final class CopyMoveActionPolicy extends ActionsPolicy { final OnRequestRefreshListener onRequestRefreshListener) { // Create a non-existing name - List<FileSystemObject> curFiles = onSelectionListener.onRequestCurrentItems(); + String curDir = onSelectionListener.onRequestCurrentDir(); String newName = FileHelper.createNonExistingName( - ctx, curFiles, fso.getName(), R.string.create_copy_regexp); + ctx, curDir, fso.getName(), R.string.create_copy_regexp); final File dst = new File(fso.getParent(), newName); File src = new File(fso.getFullPath()); diff --git a/src/com/cyanogenmod/filemanager/util/FileHelper.java b/src/com/cyanogenmod/filemanager/util/FileHelper.java index f8e89d51..5812d0be 100644 --- a/src/com/cyanogenmod/filemanager/util/FileHelper.java +++ b/src/com/cyanogenmod/filemanager/util/FileHelper.java @@ -26,11 +26,16 @@ import com.cyanogenmod.filemanager.FileManagerApplication; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.commands.SyncResultExecutable; import com.cyanogenmod.filemanager.commands.java.Program; +import com.cyanogenmod.filemanager.commands.shell.InvalidCommandDefinitionException; import com.cyanogenmod.filemanager.commands.shell.ResolveLinkCommand; import com.cyanogenmod.filemanager.console.CancelledOperationException; +import com.cyanogenmod.filemanager.console.CommandNotFoundException; import com.cyanogenmod.filemanager.console.Console; +import com.cyanogenmod.filemanager.console.ConsoleAllocException; import com.cyanogenmod.filemanager.console.ExecutionException; import com.cyanogenmod.filemanager.console.InsufficientPermissionsException; +import com.cyanogenmod.filemanager.console.NoSuchFileOrDirectory; +import com.cyanogenmod.filemanager.console.OperationTimeoutException; import com.cyanogenmod.filemanager.console.java.JavaConsole; import com.cyanogenmod.filemanager.model.AID; import com.cyanogenmod.filemanager.model.BlockDevice; @@ -58,6 +63,7 @@ import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.ClosedByInterruptException; @@ -934,17 +940,17 @@ public final class FileHelper { * that is not current used by the filesystem. * * @param ctx The current context - * @param files The list of files of the current directory + * @param parentDir The directory in which we want to make the file * @param attemptedName The attempted name * @param regexp The resource of the regular expression to create the new name * @return String The new non-existing name */ public static String createNonExistingName( - final Context ctx, final List<FileSystemObject> files, + final Context ctx, final String parentDir, final String attemptedName, int regexp) { // Find a non-exiting name String newName = attemptedName; - if (!isNameExists(files, newName)) return newName; + if (!isNameExists(ctx, parentDir, newName)) return newName; do { String name = FileHelper.getName(newName); String ext = FileHelper.getExtension(newName); @@ -954,27 +960,30 @@ public final class FileHelper { ext = "." + ext; //$NON-NLS-1$ } newName = ctx.getString(regexp, name, ext); - } while (isNameExists(files, newName)); + } while (isNameExists(ctx, parentDir, newName)); return newName; } /** * Method that checks if a name exists in the current directory. * - * @param files The list of files of the current directory + * @param context The application context + * @param parentDir The full path to the parent directory * @param name The name to check * @return boolean Indicate if the name exists in the current directory */ - public static boolean isNameExists(List<FileSystemObject> files, String name) { + public static boolean isNameExists(Context context, String parentDir, String name) { + if (parentDir == null || parentDir.equals(ROOT_DIRECTORY)) { + parentDir = ""; + } //Verify if the name exists in the current file list - int cc = files.size(); - for (int i = 0; i < cc; i++) { - FileSystemObject fso = files.get(i); - if (fso.getName().compareTo(name) == 0) { - return true; - } + try { + return CommandHelper.getFileInfo(context, parentDir + "/" + name, null) != null; + } catch (Exception e) { + // This is a slight misreporting, however, I don't want to do a bunch of refactoring + Log.i(TAG, "Failed to get file info: " + e.getMessage()); + return false; } - return false; } /** |