diff options
| author | Jorge Ruesga <jorge@ruesga.com> | 2012-11-13 01:57:16 +0100 |
|---|---|---|
| committer | Jorge Ruesga <jorge@ruesga.com> | 2012-11-13 01:57:16 +0100 |
| commit | 32331d73021a9b4a96c973e7f054666da31d653d (patch) | |
| tree | 884987dcbaf437e54e161206ebfbc1a142dfc857 /src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java | |
| parent | 79d1b6ebba9af3cc83c627f5aeab6ddb9bd75fe0 (diff) | |
CMFileManager: Fixes for non-rooted devices
Various fixes for non-rooted devices running under java console:
* Improve navigation (caching unsused data on chrooted mode: aids, mountpoints, ...)
* Editor: Don't ask user to gain privileges (non rooted devices never can gain privileged access)
* Move common file operations to FileHelper
* MoveCommand: As shell console, java console doesn't allow to move between filesystems. Use
a copy-delete operation when renameTo is not allowed.
* On non-rooted devices, not allow to change to other access mode.
Change-Id: I7ae8b4f4203fc8a20f498e43f45c0a956731b02e
Diffstat (limited to 'src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java')
| -rw-r--r-- | src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java | 85 |
1 files changed, 2 insertions, 83 deletions
diff --git a/src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java b/src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java index 3e1e316..0c7832c 100644 --- a/src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java +++ b/src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java @@ -23,13 +23,10 @@ import com.cyanogenmod.filemanager.console.ExecutionException; import com.cyanogenmod.filemanager.console.InsufficientPermissionsException; import com.cyanogenmod.filemanager.console.NoSuchFileOrDirectory; import com.cyanogenmod.filemanager.model.MountPoint; +import com.cyanogenmod.filemanager.util.FileHelper; import com.cyanogenmod.filemanager.util.MountPointHelper; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; /** @@ -84,7 +81,7 @@ public class CopyCommand extends Program implements CopyExecutable { } //Copy recursively - if (!copyRecursive(s, d)) { + if (!FileHelper.copyRecursive(s, d, getBufferSize())) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } @@ -111,82 +108,4 @@ public class CopyCommand extends Program implements CopyExecutable { public MountPoint getDstWritableMountPoint() { return MountPointHelper.getMountPointFromDirectory(this.mDst); } - - /** - * Method that copies recursively to the destination - * - * @param src The source file or folder - * @param dst The destination file or folder - * @return boolean If the operation complete successfully - * @throws ExecutionException If a problem was detected in the operation - */ - public boolean copyRecursive(final File src, final File dst) throws ExecutionException { - if (src.isDirectory()) { - // Create the directory - if (dst.exists() && !dst.isDirectory()) { - Log.e(TAG, - String.format("Failed to check destionation dir: %s", dst)); //$NON-NLS-1$ - throw new ExecutionException("the path exists but is not a folder"); //$NON-NLS-1$ - } - if (!dst.exists()) { - if (!dst.mkdir()) { - Log.e(TAG, String.format("Failed to create directory: %s", dst)); //$NON-NLS-1$ - return false; - } - } - File[] files = src.listFiles(); - if (files != null) { - for (int i = 0; i < files.length; i++) { - if (!copyRecursive(files[i], new File(dst, files[i].getName()))) { - return false; - } - } - } - } else { - // Copy the directory - if (!bufferedCopy(src, dst)) { - return false; - } - } - return true; - } - - /** - * Method that copies a file - * - * @param src The source file - * @param dst The destination file - * @return boolean If the operation complete successfully - */ - public boolean bufferedCopy(final File src, final File dst) { - BufferedInputStream bis = null; - BufferedOutputStream bos = null; - try { - bis = new BufferedInputStream(new FileInputStream(src), getBufferSize()); - bos = new BufferedOutputStream(new FileOutputStream(dst), getBufferSize()); - int read = 0; - byte[] data = new byte[getBufferSize()]; - while ((read = bis.read(data, 0, getBufferSize())) != -1) { - bos.write(data, 0, read); - } - return true; - - } catch (Throwable e) { - Log.e(TAG, - String.format(TAG, "Failed to copy from %s to %d", src, dst), e); //$NON-NLS-1$ - return false; - } finally { - try { - if (bis != null) { - bis.close(); - } - } catch (Throwable e) {/**NON BLOCK**/} - try { - if (bos != null) { - bos.close(); - } - } catch (Throwable e) {/**NON BLOCK**/} - } - - } } |
