Loading src/com/cyanogenmod/filemanager/activities/EditorActivity.java +7 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.widget.TextView; import android.widget.TextView.BufferType; import android.widget.Toast; import com.cyanogenmod.filemanager.FileManagerApplication; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.commands.AsyncResultListener; import com.cyanogenmod.filemanager.commands.WriteExecutable; Loading @@ -49,6 +50,7 @@ import com.cyanogenmod.filemanager.console.ConsoleBuilder; import com.cyanogenmod.filemanager.console.InsufficientPermissionsException; import com.cyanogenmod.filemanager.console.RelaunchableException; import com.cyanogenmod.filemanager.model.FileSystemObject; import com.cyanogenmod.filemanager.preferences.AccessMode; import com.cyanogenmod.filemanager.preferences.FileManagerSettings; import com.cyanogenmod.filemanager.ui.ThemeManager; import com.cyanogenmod.filemanager.ui.ThemeManager.Theme; Loading Loading @@ -550,9 +552,12 @@ public class EditorActivity extends Activity implements TextWatcher { // Check if the read was successfully if (this.mReader.mCause != null) { // Check if we can't read the file because we don't the require // permissions // permissions. If we are in a ChRooted environment, resolve the // error without doing anymore if (this.mReader.mCause instanceof InsufficientPermissionsException) { if (!ConsoleBuilder.isPrivileged()) { if (!ConsoleBuilder.isPrivileged() && FileManagerApplication.getAccessMode(). compareTo(AccessMode.SAFE) != 0) { // We don't have a privileged console, we can't ask the user // to gain privileges and relauch the command again askGainAccessAndRead( Loading src/com/cyanogenmod/filemanager/activities/preferences/SettingsPreferences.java +2 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,8 @@ public class SettingsPreferences extends PreferenceActivity { FileManagerSettings.SETTINGS_ACCESS_MODE.getId(), defaultValue); this.mOnChangeListener.onPreferenceChange(this.mAccessMode, value); // If device is not rooted, this setting cannot be changed this.mAccessMode.setEnabled(FileManagerApplication.isDeviceRooted()); // Capture Debug traces this.mDebugTraces = Loading src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java +2 −83 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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$ } Loading @@ -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**/} } } } src/com/cyanogenmod/filemanager/commands/java/DeleteDirCommand.java +2 −25 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ 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.File; Loading Loading @@ -84,7 +85,7 @@ public class DeleteDirCommand extends Program implements DeleteDirExecutable { } // Delete the file if (!deleteFolder(f)) { if (!FileHelper.deleteFolder(f)) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } Loading @@ -111,28 +112,4 @@ public class DeleteDirCommand extends Program implements DeleteDirExecutable { public MountPoint getDstWritableMountPoint() { return MountPointHelper.getMountPointFromDirectory(this.mPath); } /** * Method that deletes a folder recursively * * @param folder The folder to delete * @return boolean If the folder was deleted */ private boolean deleteFolder(File folder) { File[] files = folder.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { if (!deleteFolder(files[i])) { return false; } } else { if (!files[i].delete()) { return false; } } } } return folder.delete(); } } src/com/cyanogenmod/filemanager/commands/java/MoveCommand.java +28 −5 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ 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.File; Loading Loading @@ -78,13 +79,35 @@ public class MoveCommand extends Program implements MoveExecutable { throw new NoSuchFileOrDirectory(this.mSrc); } //Copy recursively //Move or copy recursively if (d.exists()) { if (!FileHelper.copyRecursive(s, d, getBufferSize())) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } throw new InsufficientPermissionsException(); } if (!FileHelper.deleteFolder(s)) { if (isTrace()) { Log.v(TAG, "Result: OK. WARNING. Source not deleted."); //$NON-NLS-1$ } } } else { // Move between filesystem is not allow. If rename fails then use copy operation if (!s.renameTo(d)) { if (!FileHelper.copyRecursive(s, d, getBufferSize())) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } throw new InsufficientPermissionsException(); } if (!FileHelper.deleteFolder(s)) { if (isTrace()) { Log.v(TAG, "Result: OK. WARNING. Source not deleted."); //$NON-NLS-1$ } } } } if (isTrace()) { Log.v(TAG, "Result: OK"); //$NON-NLS-1$ Loading Loading
src/com/cyanogenmod/filemanager/activities/EditorActivity.java +7 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.widget.TextView; import android.widget.TextView.BufferType; import android.widget.Toast; import com.cyanogenmod.filemanager.FileManagerApplication; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.commands.AsyncResultListener; import com.cyanogenmod.filemanager.commands.WriteExecutable; Loading @@ -49,6 +50,7 @@ import com.cyanogenmod.filemanager.console.ConsoleBuilder; import com.cyanogenmod.filemanager.console.InsufficientPermissionsException; import com.cyanogenmod.filemanager.console.RelaunchableException; import com.cyanogenmod.filemanager.model.FileSystemObject; import com.cyanogenmod.filemanager.preferences.AccessMode; import com.cyanogenmod.filemanager.preferences.FileManagerSettings; import com.cyanogenmod.filemanager.ui.ThemeManager; import com.cyanogenmod.filemanager.ui.ThemeManager.Theme; Loading Loading @@ -550,9 +552,12 @@ public class EditorActivity extends Activity implements TextWatcher { // Check if the read was successfully if (this.mReader.mCause != null) { // Check if we can't read the file because we don't the require // permissions // permissions. If we are in a ChRooted environment, resolve the // error without doing anymore if (this.mReader.mCause instanceof InsufficientPermissionsException) { if (!ConsoleBuilder.isPrivileged()) { if (!ConsoleBuilder.isPrivileged() && FileManagerApplication.getAccessMode(). compareTo(AccessMode.SAFE) != 0) { // We don't have a privileged console, we can't ask the user // to gain privileges and relauch the command again askGainAccessAndRead( Loading
src/com/cyanogenmod/filemanager/activities/preferences/SettingsPreferences.java +2 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,8 @@ public class SettingsPreferences extends PreferenceActivity { FileManagerSettings.SETTINGS_ACCESS_MODE.getId(), defaultValue); this.mOnChangeListener.onPreferenceChange(this.mAccessMode, value); // If device is not rooted, this setting cannot be changed this.mAccessMode.setEnabled(FileManagerApplication.isDeviceRooted()); // Capture Debug traces this.mDebugTraces = Loading
src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java +2 −83 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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$ } Loading @@ -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**/} } } }
src/com/cyanogenmod/filemanager/commands/java/DeleteDirCommand.java +2 −25 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ 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.File; Loading Loading @@ -84,7 +85,7 @@ public class DeleteDirCommand extends Program implements DeleteDirExecutable { } // Delete the file if (!deleteFolder(f)) { if (!FileHelper.deleteFolder(f)) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } Loading @@ -111,28 +112,4 @@ public class DeleteDirCommand extends Program implements DeleteDirExecutable { public MountPoint getDstWritableMountPoint() { return MountPointHelper.getMountPointFromDirectory(this.mPath); } /** * Method that deletes a folder recursively * * @param folder The folder to delete * @return boolean If the folder was deleted */ private boolean deleteFolder(File folder) { File[] files = folder.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { if (!deleteFolder(files[i])) { return false; } } else { if (!files[i].delete()) { return false; } } } } return folder.delete(); } }
src/com/cyanogenmod/filemanager/commands/java/MoveCommand.java +28 −5 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ 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.File; Loading Loading @@ -78,13 +79,35 @@ public class MoveCommand extends Program implements MoveExecutable { throw new NoSuchFileOrDirectory(this.mSrc); } //Copy recursively //Move or copy recursively if (d.exists()) { if (!FileHelper.copyRecursive(s, d, getBufferSize())) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } throw new InsufficientPermissionsException(); } if (!FileHelper.deleteFolder(s)) { if (isTrace()) { Log.v(TAG, "Result: OK. WARNING. Source not deleted."); //$NON-NLS-1$ } } } else { // Move between filesystem is not allow. If rename fails then use copy operation if (!s.renameTo(d)) { if (!FileHelper.copyRecursive(s, d, getBufferSize())) { if (isTrace()) { Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$ } throw new InsufficientPermissionsException(); } if (!FileHelper.deleteFolder(s)) { if (isTrace()) { Log.v(TAG, "Result: OK. WARNING. Source not deleted."); //$NON-NLS-1$ } } } } if (isTrace()) { Log.v(TAG, "Result: OK"); //$NON-NLS-1$ Loading