aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorherriojr <jherriott@cyngn.com>2015-08-25 18:19:23 -0700
committerMichael Bestas <mikeioannina@cyanogenmod.org>2016-06-20 03:31:43 -0700
commite337edcbdaf55d6f84dbcb357843260fe842ffce (patch)
tree23b8cf7b4100a3d6e2655e533a3790c0b1e88822
parent80077de4de4d18304fb9971d73dc53bb7ebf848c (diff)
downloadandroid_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)
-rw-r--r--src/com/cyanogenmod/filemanager/ui/dialogs/ActionsDialog.java4
-rw-r--r--src/com/cyanogenmod/filemanager/ui/dialogs/InputNameDialog.java17
-rw-r--r--src/com/cyanogenmod/filemanager/ui/policy/CompressActionPolicy.java2
-rwxr-xr-xsrc/com/cyanogenmod/filemanager/ui/policy/CopyMoveActionPolicy.java4
-rw-r--r--src/com/cyanogenmod/filemanager/util/FileHelper.java35
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;
}
/**