From: jabarros Date: Wed, 12 Nov 2014 15:07:37 +0000 (+0100) Subject: Get file mimeType and pass it for being checked on UploadFileOperation class. Take... X-Git-Tag: oc-android-1.7.0_signed~101^2~7 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/5d784d98b4b86e0d047ac2bdf5539495ccfb81f8?hp=--cc Get file mimeType and pass it for being checked on UploadFileOperation class. Take into account if file extension comes in content Uri --- 5d784d98b4b86e0d047ac2bdf5539495ccfb81f8 diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index 392d03bc..70296d5f 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -157,6 +157,15 @@ public class OCFile implements Parcelable, Comparable { } /** + * Can be used to set the path where the file will be stored + * + * @param remote_path to set + */ + public void setRemotePath(String remote_path) { + mRemotePath = remote_path; + } + + /** * Can be used to check, whether or not this file exists in the database * already * diff --git a/src/com/owncloud/android/operations/UploadFileOperation.java b/src/com/owncloud/android/operations/UploadFileOperation.java index 819d218f..f9590698 100644 --- a/src/com/owncloud/android/operations/UploadFileOperation.java +++ b/src/com/owncloud/android/operations/UploadFileOperation.java @@ -61,6 +61,10 @@ public class UploadFileOperation extends RemoteOperation { private static final String TAG = UploadFileOperation.class.getSimpleName(); + private static final String URI_CONTENT_SCHEME = "content://"; + private static final String MIME_TYPE_PDF = "application/pdf"; + private static final String FILE_EXTENSION_PDF = ".pdf"; + private Account mAccount; private OCFile mFile; private OCFile mOldFile; @@ -221,6 +225,12 @@ public class UploadFileOperation extends RemoteOperation { } else { String temporalPath = FileStorageUtils.getTemporalPath(mAccount.name) + mFile.getRemotePath(); + + if (isPdfFileFromContentProviderWithoutExtension()){ + temporalPath += FILE_EXTENSION_PDF; + mFile.setRemotePath(mFile.getRemotePath() + FILE_EXTENSION_PDF); + } + mFile.setStoragePath(temporalPath); temporalFile = new File(temporalPath); @@ -239,7 +249,8 @@ public class UploadFileOperation extends RemoteOperation { try { - if (mOriginalStoragePath.startsWith("content://")) { + // In case document provider schema as 'content://' + if (mOriginalStoragePath.startsWith(URI_CONTENT_SCHEME)) { Uri uri = Uri.parse(mOriginalStoragePath); @@ -442,4 +453,15 @@ public class UploadFileOperation extends RemoteOperation { public void cancel() { mUploadOperation.cancel(); } + + /** + * Checks if content provider, using the content:// scheme, returns a file with mime-type + * 'application/pdf' but file has not extension + * @return true if is needed to add the pdf file extension to the file + */ + private boolean isPdfFileFromContentProviderWithoutExtension() { + return mOriginalStoragePath.startsWith(URI_CONTENT_SCHEME) && + mFile.getMimetype().equals(MIME_TYPE_PDF) && + !mFile.getFileName().endsWith(FILE_EXTENSION_PDF); + } } diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index c258498e..57656d64 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -158,7 +158,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { private OCFile mWaitingToSend; - private static final String URI_TYPE_OF_CONTENT_PROVIDER = "content://"; + private static final String URI_CONTENT_SCHEME = "content://"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -662,8 +662,12 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { private void requestSimpleUpload(Intent data, int resultCode) { String filepath = null; + String mimeType = null; + + Uri selectedImageUri = data.getData(); + try { - Uri selectedImageUri = data.getData(); + mimeType = getContentResolver().getType(selectedImageUri); String filemanagerstring = selectedImageUri.getPath(); String selectedImagePath = getPath(selectedImageUri); @@ -696,9 +700,8 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { if (!remotepath.endsWith(OCFile.PATH_SEPARATOR)) remotepath += OCFile.PATH_SEPARATOR; - if (filepath.startsWith(URI_TYPE_OF_CONTENT_PROVIDER)) { - // The query, since it only applies to a single document, will only return - // one row. + if (filepath.startsWith(URI_CONTENT_SCHEME)) { + Cursor cursor = MainApp.getAppContext().getContentResolver() .query(Uri.parse(filepath), null, null, null, null, null); @@ -706,9 +709,10 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { if (cursor != null && cursor.moveToFirst()) { String displayName = cursor.getString( cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); - Log.i(TAG, "Display Name: " + displayName); + Log.i(TAG, "Display Name: " + displayName + "; mimeType: " + mimeType); + + remotepath += displayName + getComposedFileExtension(filepath); - remotepath += displayName; } } finally { cursor.close(); @@ -720,6 +724,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath); i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath); + i.putExtra(FileUploader.KEY_MIME_TYPE, mimeType); i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE); if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE) i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE); @@ -1034,7 +1039,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { * @return Whether the Uri is from a content provider as kind "content://..." */ public static boolean isContentDocument(Uri uri) { - return uri.toString().startsWith(URI_TYPE_OF_CONTENT_PROVIDER); + return uri.toString().startsWith(URI_CONTENT_SCHEME); } /** @@ -1946,4 +1951,21 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { private void sortByName(boolean ascending){ getListOfFilesFragment().sortByName(ascending); } + + /** + * Get the file extension if it is on path as type "content://.../DocInfo.doc" + * @param filepath: Content Uri converted to string format + * @return String: fileExtension (type '.pdf'). Empty if no extension + */ + private String getComposedFileExtension(String filepath) { + String fileExtension = ""; + String fileNameInContentUri = filepath.substring(filepath.lastIndexOf("/")); + + // Check if extension is included in uri + int pos = fileNameInContentUri.lastIndexOf('.'); + if (pos >= 0) { + fileExtension = fileNameInContentUri.substring(pos); + } + return fileExtension; + } }