Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/jellybean' into ics
Browse files Browse the repository at this point in the history
Conflicts:
	src/com/cyanogenmod/filemanager/ui/dialogs/FilesystemInfoDialog.java
  • Loading branch information
Mike C committed Nov 19, 2012
2 parents 3beefb5 + 6bf7002 commit 6757d07
Show file tree
Hide file tree
Showing 25 changed files with 571 additions and 393 deletions.
305 changes: 162 additions & 143 deletions res/values-fr/strings.xml

Large diffs are not rendered by default.

82 changes: 41 additions & 41 deletions res/values-hu/strings.xml

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions res/values-ro/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,13 @@
<string name="pref_remove_saved_search_terms">Eliminaţi termenii de căutare salvaţi</string>
<string name="pref_remove_saved_search_terms_summary">Apăsaţi pentru eliminarea tuturor termenilor de căutare salvaţi</string>
<string name="pref_remove_saved_search_terms_msg">Toţi termenii de căutare salvaţi au fost eliminaţi.</string>
<string name="pref_themes_selection_category">Teme</string>
<string name="pref_themes_set_theme">Aplicaţi tema</string>
<string name="pref_themes_no_preview">Nici o previzualizare\ndisponibilă</string>
<string name="pref_themes_confirmation">Tema a fost aplicată cu succes.</string>
<string name="pref_themes_not_found">Tema nu a fost găsită.</string>
<string name="theme_default_name">Temă \"deschisă\"</string>
<string name="theme_default_description">Temă \"deschisă\" pentru Managerul de Fişiere CyanogenMod.</string>
<string name="security_warning_extract">Avertizare!\n\nExtragerea unui fişier arhivă cu căi relative sau absolute poate cauza defecţiuni dispozitivului Dvs. prin suprascrierea fişierelor de sistem.\n\nDoriţi să continuaţi?</string>
</resources>

Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ public void onCancel(DialogInterface dialog) {
*/
void applyTheme() {
Theme theme = ThemeManager.getCurrentTheme(this);
theme.setBaseTheme(this, false);
theme.setBaseTheme(this, true);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,15 @@
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;
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;
Expand Down Expand Up @@ -550,9 +552,12 @@ public void onProgress(int progress) {
// 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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
*/
void applyTheme() {
Theme theme = ThemeManager.getCurrentTheme(this);
theme.setBaseTheme(this, false);
theme.setBaseTheme(this, true);

// View
theme.setBackgroundDrawable(this, this.mRootView, "background_drawable"); //$NON-NLS-1$
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public void onCancel(DialogInterface dialog) {
*/
void applyTheme() {
Theme theme = ThemeManager.getCurrentTheme(this);
theme.setBaseTheme(this, false);
theme.setBaseTheme(this, true);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,8 @@ public void onCreate(Bundle savedInstanceState) {
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 =
Expand Down
85 changes: 2 additions & 83 deletions src/com/cyanogenmod/filemanager/commands/java/CopyCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,10 @@
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;


/**
Expand Down Expand Up @@ -84,7 +81,7 @@ public void execute()
}

//Copy recursively
if (!copyRecursive(s, d)) {
if (!FileHelper.copyRecursive(s, d, getBufferSize())) {
if (isTrace()) {
Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$
}
Expand All @@ -111,82 +108,4 @@ public MountPoint getSrcWritableMountPoint() {
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**/}
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
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;
Expand Down Expand Up @@ -84,7 +85,7 @@ public void execute()
}

// Delete the file
if (!deleteFolder(f)) {
if (!FileHelper.deleteFolder(f)) {
if (isTrace()) {
Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$
}
Expand All @@ -111,28 +112,4 @@ public MountPoint getSrcWritableMountPoint() {
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();
}
}
33 changes: 28 additions & 5 deletions src/com/cyanogenmod/filemanager/commands/java/MoveCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
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;
Expand Down Expand Up @@ -78,12 +79,34 @@ public void execute()
throw new NoSuchFileOrDirectory(this.mSrc);
}

//Copy recursively
if (!s.renameTo(d)) {
if (isTrace()) {
Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$
//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$
}
}
}
throw new InsufficientPermissionsException();
}

if (isTrace()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ public void parse(String in, String err) throws ParseException {
//At least uid and gid must be present
if (!p.containsKey(UID) && !p.containsKey(GID)) {
throw new ParseException(
String.format("no %s or %s present", UID, GID), 0); //$NON-NLS-1$
String.format(
"no %s or %s present in %s", UID, GID, szLine), 0); //$NON-NLS-1$
}

//1.- Extract user
Expand Down
4 changes: 4 additions & 0 deletions src/com/cyanogenmod/filemanager/commands/shell/Shell.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.cyanogenmod.filemanager.console.NoSuchFileOrDirectory;
import com.cyanogenmod.filemanager.console.ReadOnlyFilesystemException;

import android.util.Log;

/**
* An abstract class that represents a command to wrap others commands,
Expand All @@ -33,6 +34,8 @@ public abstract class Shell extends Command {

private int mPid;

private final String TAG = "Shell";

/**
* @Constructor of <code>Shell</code>
*
Expand Down Expand Up @@ -72,6 +75,7 @@ public void checkExitCode(int exitCode)
throws InsufficientPermissionsException, CommandNotFoundException, ExecutionException {
//Command not found
if (exitCode == 127) {
Log.w(TAG, getCommand() + " " + getArguments() + ": error");
throw new CommandNotFoundException(getId());
}
//No exit code
Expand Down
20 changes: 5 additions & 15 deletions src/com/cyanogenmod/filemanager/console/ConsoleBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public static Console getConsole(Context context, boolean createIfNotExists)
public static boolean changeToNonPrivilegedConsole(Context context) {

//Check the current console
if (sHolder.getConsole() instanceof NonPriviledgeConsole) {
if (sHolder != null && sHolder.getConsole() instanceof NonPriviledgeConsole) {
//The current console is non-privileged. Not needed
return true;
}
Expand Down Expand Up @@ -147,7 +147,7 @@ public static boolean changeToNonPrivilegedConsole(Context context) {
public static boolean changeToPrivilegedConsole(Context context) {

//Destroy and create the new console
if (sHolder.getConsole() instanceof PrivilegedConsole) {
if (sHolder != null && sHolder.getConsole() instanceof PrivilegedConsole) {
//The current console is privileged. Not needed
return true;
}
Expand Down Expand Up @@ -375,19 +375,9 @@ public static Console createAndCheckPrivilegedConsole(
throws FileNotFoundException, IOException, InvalidCommandDefinitionException,
ConsoleAllocException, InsufficientPermissionsException {
try {
PrivilegedConsole console = new PrivilegedConsole(initialDirectory);
console.setBufferSize(context.getResources().getInteger(R.integer.buffer_size));
console.alloc();
if (console.getIdentity().getUser().getId() != ROOT_UID) {
//The console is not a privileged console
try {
console.dealloc();
} catch (Throwable ex) {
/**NON BLOCK**/
}
throw new InsufficientPermissionsException(null);
}
return console;
// Create the privileged console
return createPrivilegedConsole(context, initialDirectory);

} catch (ConsoleAllocException caEx) {
//Show a message with the problem?
Log.w(TAG, context.getString(R.string.msgs_privileged_console_alloc_failed), caEx);
Expand Down
Loading

0 comments on commit 6757d07

Please sign in to comment.