X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/e4d6f267f7373aeac535747cb05e48e6dfc7e166..e901b609baa4dd5f681e2a5257c9e504997e3377:/src/com/owncloud/android/ui/activity/FileDisplayActivity.java diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index c258498e..49259e9f 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -107,6 +107,7 @@ import com.owncloud.android.ui.preview.PreviewMediaFragment; 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; /** @@ -158,8 +159,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { private OCFile mWaitingToSend; - private static final String URI_TYPE_OF_CONTENT_PROVIDER = "content://"; - @Override protected void onCreate(Bundle savedInstanceState) { Log_OC.d(TAG, "onCreate() start"); @@ -571,6 +570,11 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { builder.setExpedited(true); builder.setManual(true); builder.syncOnce(); + + // Fix bug in Android Lollipop when you click on refresh the whole account + Bundle extras = new Bundle(); + builder.setExtras(extras); + SyncRequest request = builder.build(); ContentResolver.requestSync(request); } @@ -662,8 +666,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 +704,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(UriUtils.URI_CONTENT_SCHEME)) { + Cursor cursor = MainApp.getAppContext().getContentResolver() .query(Uri.parse(filepath), null, null, null, null, null); @@ -706,9 +713,12 @@ 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); + + displayName.replace(File.separatorChar, '_'); + displayName.replace(File.pathSeparatorChar, '_'); + remotepath += displayName + DisplayUtils.getComposedFileExtension(filepath); - remotepath += displayName; } } finally { cursor.close(); @@ -720,6 +730,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); @@ -902,12 +913,12 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { * @return The path to the content or null if it could not be found */ public String getPath(Uri uri) { - final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + final boolean isKitKatOrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider - if (isKitKat && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) { + if (isKitKatOrLater && 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]; @@ -917,16 +928,16 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { } } // 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]; @@ -943,10 +954,10 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { 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(); } } @@ -954,10 +965,10 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { 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())) { @@ -967,77 +978,6 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { } /** - * 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_TYPE_OF_CONTENT_PROVIDER); - } - - /** * Pushes a directory to the drop down list * @param directory to push * @throws IllegalArgumentException If the {@link OCFile#isFolder()} returns false.