}
/**
- * 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
*
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.UriUtils;
private NotificationCompat.Builder mNotificationBuilder;
private int mLastPercent;
+ private static final String MIME_TYPE_PDF = "application/pdf";
+ private static final String FILE_EXTENSION_PDF = ".pdf";
+
public static String getUploadFinishMessage() {
return FileUploader.class.getName().toString() + UPLOAD_FINISH_MESSAGE;
private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType,
FileDataStorageManager storageManager) {
- OCFile newFile = new OCFile(remotePath);
- newFile.setStoragePath(localPath);
- newFile.setLastSyncDateForProperties(0);
- newFile.setLastSyncDateForData(0);
-
- // size
- if (localPath != null && localPath.length() > 0) {
- File localFile = new File(localPath);
- newFile.setFileLength(localFile.length());
- newFile.setLastSyncDateForData(localFile.lastModified());
- } // don't worry about not assigning size, the problems with localPath
- // are checked when the UploadFileOperation instance is created
// MIME type
if (mimeType == null || mimeType.length() <= 0) {
if (mimeType == null) {
mimeType = "application/octet-stream";
}
+
+ if (isPdfFileFromContentProviderWithoutExtension(localPath, mimeType)){
+ remotePath += FILE_EXTENSION_PDF;
+ }
+
+ OCFile newFile = new OCFile(remotePath);
+ newFile.setStoragePath(localPath);
+ newFile.setLastSyncDateForProperties(0);
+ newFile.setLastSyncDateForData(0);
+
+ // size
+ if (localPath != null && localPath.length() > 0) {
+ File localFile = new File(localPath);
+ newFile.setFileLength(localFile.length());
+ newFile.setLastSyncDateForData(localFile.lastModified());
+ } // don't worry about not assigning size, the problems with localPath
+ // are checked when the UploadFileOperation instance is created
+
+
newFile.setMimetype(mimeType);
return newFile;
sendStickyBroadcast(end);
}
+ /**
+ * Checks if content provider, using the content:// scheme, returns a file with mime-type
+ * 'application/pdf' but file has not extension
+ * @param localPath
+ * @param mimeType
+ * @return true if is needed to add the pdf file extension to the file
+ */
+ private boolean isPdfFileFromContentProviderWithoutExtension(String localPath, String mimeType) {
+ return localPath.startsWith(UriUtils.URI_CONTENT_SCHEME) &&
+ mimeType.equals(MIME_TYPE_PDF) &&
+ !localPath.endsWith(FILE_EXTENSION_PDF);
+ }
+
}
import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation;
import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.utils.UriUtils;
/**
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;
} 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);
try {
// In case document provider schema as 'content://'
- if (mOriginalStoragePath.startsWith(URI_CONTENT_SCHEME)) {
+ if (mOriginalStoragePath.startsWith(UriUtils.URI_CONTENT_SCHEME)) {
Uri uri = Uri.parse(mOriginalStoragePath);
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);
- }
}
import com.owncloud.android.ui.preview.PreviewVideoActivity;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.UriUtils;
/**
private OCFile mWaitingToSend;
- private static final String URI_CONTENT_SCHEME = "content://";
-
@Override
protected void onCreate(Bundle savedInstanceState) {
Log_OC.d(TAG, "onCreate() start");
if (!remotepath.endsWith(OCFile.PATH_SEPARATOR))
remotepath += OCFile.PATH_SEPARATOR;
- if (filepath.startsWith(URI_CONTENT_SCHEME)) {
+ if (filepath.startsWith(UriUtils.URI_CONTENT_SCHEME)) {
Cursor cursor = MainApp.getAppContext().getContentResolver()
.query(Uri.parse(filepath), null, null, null, null, null);
cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
Log.i(TAG, "Display Name: " + displayName + "; mimeType: " + mimeType);
- remotepath += displayName + getComposedFileExtension(filepath);
+ remotepath += displayName + DisplayUtils.getComposedFileExtension(filepath);
}
} finally {
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) {
// ExternalStorageProvider
- if (isExternalStorageDocument(uri)) {
+ if (UriUtils.isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
}
}
// DownloadsProvider
- else if (isDownloadsDocument(uri)) {
+ else if (UriUtils.isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
- return getDataColumn(getApplicationContext(), contentUri, null, null);
+ return UriUtils.getDataColumn(getApplicationContext(), contentUri, null, null);
}
// MediaProvider
- else if (isMediaDocument(uri)) {
+ else if (UriUtils.isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
final String selection = "_id=?";
final String[] selectionArgs = new String[] { split[1] };
- return getDataColumn(getApplicationContext(), contentUri, selection, selectionArgs);
+ return UriUtils.getDataColumn(getApplicationContext(), contentUri, selection, selectionArgs);
}
// Documents providers returned as content://...
- else if (isContentDocument(uri)) {
+ else if (UriUtils.isContentDocument(uri)) {
return uri.toString();
}
}
else if ("content".equalsIgnoreCase(uri.getScheme())) {
// Return the remote address
- if (isGooglePhotosUri(uri))
+ if (UriUtils.isGooglePhotosUri(uri))
return uri.getLastPathSegment();
- return getDataColumn(getApplicationContext(), uri, null, null);
+ return UriUtils.getDataColumn(getApplicationContext(), uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
}
/**
- * Get the value of the data column for this Uri. This is useful for
- * MediaStore Uris, and other file-based ContentProviders.
- *
- * @param context The context.
- * @param uri The Uri to query.
- * @param selection (Optional) Filter used in the query.
- * @param selectionArgs (Optional) Selection arguments used in the query.
- * @return The value of the _data column, which is typically a file path.
- */
- public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
-
- Cursor cursor = null;
- final String column = "_data";
- final String[] projection = { column };
-
- try {
- cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
- if (cursor != null && cursor.moveToFirst()) {
-
- final int column_index = cursor.getColumnIndexOrThrow(column);
- return cursor.getString(column_index);
- }
- } finally {
- if (cursor != null)
- cursor.close();
- }
- return null;
- }
-
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is ExternalStorageProvider.
- */
- public static boolean isExternalStorageDocument(Uri uri) {
- return "com.android.externalstorage.documents".equals(uri.getAuthority());
- }
-
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is DownloadsProvider.
- */
- public static boolean isDownloadsDocument(Uri uri) {
- return "com.android.providers.downloads.documents".equals(uri.getAuthority());
- }
-
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is MediaProvider.
- */
- public static boolean isMediaDocument(Uri uri) {
- return "com.android.providers.media.documents".equals(uri.getAuthority());
- }
-
- /**
- * @param uri The Uri to check.
- * @return Whether the Uri authority is Google Photos.
- */
- public static boolean isGooglePhotosUri(Uri uri) {
- return "com.google.android.apps.photos.content".equals(uri.getAuthority());
- }
-
- /**
- *
- * @param uri The Uri to check.
- * @return Whether the Uri is from a content provider as kind "content://..."
- */
- public static boolean isContentDocument(Uri uri) {
- return uri.toString().startsWith(URI_CONTENT_SCHEME);
- }
-
- /**
* Pushes a directory to the drop down list
* @param directory to push
* @throws IllegalArgumentException If the {@link OCFile#isFolder()} returns false.
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;
- }
}
return url;\r
}\r
}\r
+\r
+ /**\r
+ * Get the file extension if it is on path as type "content://.../DocInfo.doc"\r
+ * @param filepath: Content Uri converted to string format\r
+ * @return String: fileExtension (type '.pdf'). Empty if no extension\r
+ */\r
+ public static String getComposedFileExtension(String filepath) {\r
+ String fileExtension = "";\r
+ String fileNameInContentUri = filepath.substring(filepath.lastIndexOf("/"));\r
+\r
+ // Check if extension is included in uri\r
+ int pos = fileNameInContentUri.lastIndexOf('.');\r
+ if (pos >= 0) {\r
+ fileExtension = fileNameInContentUri.substring(pos);\r
+ }\r
+ return fileExtension;\r
+ }\r
}\r
--- /dev/null
+/* ownCloud Android client application
+ * Copyright (C) 2012-2014 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package com.owncloud.android.utils;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+
+
+/**
+ * A helper class for some Uri operations.
+ */
+public class UriUtils {
+
+ public static final String URI_CONTENT_SCHEME = "content://";
+
+
+ /**
+ * Get the value of the data column for this Uri. This is useful for
+ * MediaStore Uris, and other file-based ContentProviders.
+ *
+ * @param context The context.
+ * @param uri The Uri to query.
+ * @param selection (Optional) Filter used in the query.
+ * @param selectionArgs (Optional) Selection arguments used in the query.
+ * @return The value of the _data column, which is typically a file path.
+ */
+ public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
+
+ Cursor cursor = null;
+ final String column = "_data";
+ final String[] projection = { column };
+
+ try {
+ cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
+ if (cursor != null && cursor.moveToFirst()) {
+
+ final int column_index = cursor.getColumnIndexOrThrow(column);
+ return cursor.getString(column_index);
+ }
+ } finally {
+ if (cursor != null)
+ cursor.close();
+ }
+ return null;
+ }
+
+ /**
+ * @param uri The Uri to check.
+ * @return Whether the Uri authority is ExternalStorageProvider.
+ */
+ public static boolean isExternalStorageDocument(Uri uri) {
+ return "com.android.externalstorage.documents".equals(uri.getAuthority());
+ }
+
+ /**
+ * @param uri The Uri to check.
+ * @return Whether the Uri authority is DownloadsProvider.
+ */
+ public static boolean isDownloadsDocument(Uri uri) {
+ return "com.android.providers.downloads.documents".equals(uri.getAuthority());
+ }
+
+ /**
+ * @param uri The Uri to check.
+ * @return Whether the Uri authority is MediaProvider.
+ */
+ public static boolean isMediaDocument(Uri uri) {
+ return "com.android.providers.media.documents".equals(uri.getAuthority());
+ }
+
+ /**
+ * @param uri The Uri to check.
+ * @return Whether the Uri authority is Google Photos.
+ */
+ public static boolean isGooglePhotosUri(Uri uri) {
+ return "com.google.android.apps.photos.content".equals(uri.getAuthority());
+ }
+
+ /**
+ *
+ * @param uri The Uri to check.
+ * @return Whether the Uri is from a content provider as kind "content://..."
+ */
+ public static boolean isContentDocument(Uri uri) {
+ return uri.toString().startsWith(URI_CONTENT_SCHEME);
+ }
+}