From: masensio Date: Mon, 15 Jun 2015 12:51:13 +0000 (+0200) Subject: Merge branch 'develop' into forbidden_characters_from_server X-Git-Tag: oc-android-1.7.2~1^2~20^2~3 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/75fd0f40c642f3a4fc66dfa17620417d78dd2571?hp=1ef9c86b59575ece900b9770c39184e5e2011918 Merge branch 'develop' into forbidden_characters_from_server Conflicts: owncloud-android-library src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java src/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java --- diff --git a/owncloud-android-library b/owncloud-android-library index 639cb7ea..060ca75f 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 639cb7eacdae0b4b6dddbd8f446d8d42eb2617b5 +Subproject commit 060ca75f17c90b7c083bdeb8ba7376cf15f8c7ec diff --git a/res/values/strings.xml b/res/values/strings.xml index 7d180be4..f5ea7bcb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -222,6 +222,7 @@ File contents already synchronized Folder could not be created Forbidden characters: / \\ < > : " | ? * + File name contains at least one invalid character File name cannot be empty Wait a moment "Unexpected problem ; please select the file from a different app" diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java index b2f74f2f..5e6741bb 100644 --- a/src/com/owncloud/android/files/FileOperationsHelper.java +++ b/src/com/owncloud/android/files/FileOperationsHelper.java @@ -316,5 +316,17 @@ public class FileOperationsHelper { mWaitingForOpId = waitingForOpId; } - + /** + * @return 'True' if the server doesn't need to check forbidden characters + */ + public boolean isVersionWithForbiddenCharacters() { + if (mFileActivity.getAccount() != null) { + AccountManager accountManager = AccountManager.get(mFileActivity); + + String version = accountManager.getUserData(mFileActivity.getAccount(), + Constants.KEY_OC_VERSION); + return (new OwnCloudVersion(version)).isVersionWithForbiddenCharacters(); + } + return false; + } } diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index fcaf0c79..82114140 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -34,6 +34,7 @@ import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.lib.common.OwnCloudCredentials; import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; +import com.owncloud.android.lib.common.accounts.AccountUtils; import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; @@ -54,6 +55,7 @@ import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.operations.UnshareLinkOperation; import android.accounts.Account; +import android.accounts.AccountManager; import android.accounts.AccountsException; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; @@ -442,6 +444,12 @@ public class OperationsService extends Service { mService); mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton(). getClientFor(ocAccount, mService); + + AccountManager am = AccountManager.get(mService.getApplicationContext()); + String version = am.getUserData(mLastTarget.mAccount, + AccountUtils.Constants.KEY_OC_VERSION); + mOwnCloudClient.setOwnCloudVersion(version); + mStorageManager = new FileDataStorageManager( mLastTarget.mAccount, mService.getContentResolver() diff --git a/src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java b/src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java index 73ae8bd8..ac1e312d 100644 --- a/src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java +++ b/src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java @@ -51,9 +51,9 @@ public class CreateFolderDialogFragment /** * Public factory method to create new CreateFolderDialogFragment instances. - * - * @param parentFolder Folder to create - * @return Dialog ready to show. + * + * @param parentFolder Folder to create + * @return Dialog ready to show. */ public static CreateFolderDialogFragment newInstance(OCFile parentFolder) { CreateFolderDialogFragment frag = new CreateFolderDialogFragment(); @@ -106,12 +106,18 @@ public class CreateFolderDialogFragment Toast.LENGTH_LONG).show(); return; } - - if (!FileUtils.isValidName(newFolderName)) { - Toast.makeText( - getActivity(), - R.string.filename_forbidden_characters, - Toast.LENGTH_LONG).show(); + boolean serverWithForbiddenChars = ((ComponentsGetter)getActivity()). + getFileOperationsHelper().isVersionWithForbiddenCharacters(); + + if (!FileUtils.isValidName(newFolderName, serverWithForbiddenChars)) { + int messageId = 0; + if (serverWithForbiddenChars) { + messageId = R.string.filename_forbidden_charaters_from_server; + } else { + messageId = R.string.filename_forbidden_characters; + } + Toast.makeText(getActivity(), messageId, Toast.LENGTH_LONG).show(); + return; } diff --git a/src/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java b/src/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java index 40930608..d4bf31c2 100644 --- a/src/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java +++ b/src/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java @@ -118,17 +118,24 @@ public class RenameFileDialogFragment Toast.LENGTH_LONG).show(); return; } - - if (!FileUtils.isValidName(newFileName)) { - Toast.makeText( - getActivity(), - R.string.filename_forbidden_characters, - Toast.LENGTH_LONG).show(); + + boolean serverWithForbiddenChars = ((ComponentsGetter)getActivity()). + getFileOperationsHelper().isVersionWithForbiddenCharacters(); + + if (!FileUtils.isValidName(newFileName, serverWithForbiddenChars)) { + int messageId = 0; + if (serverWithForbiddenChars) { + messageId = R.string.filename_forbidden_charaters_from_server; + } else { + messageId = R.string.filename_forbidden_characters; + } + Toast.makeText(getActivity(), messageId, Toast.LENGTH_LONG).show(); return; } - ((ComponentsGetter)getActivity()).getFileOperationsHelper().renameFile(mTargetFile, - newFileName); + ((ComponentsGetter)getActivity()).getFileOperationsHelper(). + renameFile(mTargetFile, newFileName); + } } } diff --git a/src/com/owncloud/android/utils/ErrorMessageAdapter.java b/src/com/owncloud/android/utils/ErrorMessageAdapter.java index 12a1a5ac..75736e53 100644 --- a/src/com/owncloud/android/utils/ErrorMessageAdapter.java +++ b/src/com/owncloud/android/utils/ErrorMessageAdapter.java @@ -54,19 +54,22 @@ public class ErrorMessageAdapter { } - public static String getErrorCauseMessage(RemoteOperationResult result, RemoteOperation operation, Resources res) { + public static String getErrorCauseMessage(RemoteOperationResult result, + RemoteOperation operation, Resources res) { String message = null; if (operation instanceof UploadFileOperation) { if (result.isSuccess()) { - message = String.format(res.getString(R.string.uploader_upload_succeeded_content_single), + message = String.format( + res.getString(R.string.uploader_upload_succeeded_content_single), ((UploadFileOperation) operation).getFileName()); } else { if (result.getCode() == ResultCode.LOCAL_STORAGE_FULL || result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) { - message = String.format(res.getString(R.string.error__upload__local_file_not_copied), + message = String.format( + res.getString(R.string.error__upload__local_file_not_copied), ((UploadFileOperation) operation).getFileName(), res.getString(R.string.app_name)); /* @@ -78,8 +81,12 @@ public class ErrorMessageAdapter { message = String.format(res.getString(R.string.forbidden_permissions), res.getString(R.string.uploader_upload_forbidden_permissions)); + } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) { + message = res.getString(R.string.filename_forbidden_charaters_from_server); + } else { - message = String.format(res.getString(R.string.uploader_upload_failed_content_single), + message = String.format( + res.getString(R.string.uploader_upload_failed_content_single), ((UploadFileOperation) operation).getFileName()); } } @@ -87,7 +94,8 @@ public class ErrorMessageAdapter { } else if (operation instanceof DownloadFileOperation) { if (result.isSuccess()) { - message = String.format(res.getString(R.string.downloader_download_succeeded_content), + message = String.format( + res.getString(R.string.downloader_download_succeeded_content), new File(((DownloadFileOperation) operation).getSavePath()).getName()); } else { @@ -95,7 +103,8 @@ public class ErrorMessageAdapter { message = res.getString(R.string.downloader_download_file_not_found); } else { - message = String.format(res.getString(R.string.downloader_download_failed_content), new File( + message = String.format( + res.getString(R.string.downloader_download_failed_content), new File( ((DownloadFileOperation) operation).getSavePath()).getName()); } } @@ -132,6 +141,9 @@ public class ErrorMessageAdapter { } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); + } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) { + message = res.getString(R.string.filename_forbidden_charaters_from_server); + } else { message = res.getString(R.string.rename_server_fail_msg); } @@ -152,11 +164,13 @@ public class ErrorMessageAdapter { } else if (isNetworkError(result.getCode())) { message = getErrorMessage(result, res); + } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) { + message = res.getString(R.string.filename_forbidden_charaters_from_server); } else { message = res.getString(R.string.create_dir_fail_msg); } } else if (operation instanceof CreateShareOperation) { - if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND + if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND message = res.getString(R.string.share_link_file_no_exist); } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) { @@ -174,7 +188,7 @@ public class ErrorMessageAdapter { } else if (operation instanceof UnshareLinkOperation) { - if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND + if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND message = res.getString(R.string.unshare_link_file_no_exist); } else if (result.getCode() == ResultCode.SHARE_FORBIDDEN) { @@ -204,7 +218,10 @@ public class ErrorMessageAdapter { message = String.format(res.getString(R.string.forbidden_permissions), res.getString(R.string.forbidden_permissions_move)); - }else { // Generic error + } else if (result.getCode() == ResultCode.INVALID_CHARACTER_DETECT_IN_SERVER) { + message = res.getString(R.string.filename_forbidden_charaters_from_server); + + } else { // Generic error // Show a Message, operation finished without success message = res.getString(R.string.move_file_error); }