From: Jorge Antonio Diaz-Benito Soriano Date: Mon, 24 Nov 2014 11:57:02 +0000 (+0100) Subject: Merge branch 'gradleWithInternalDependency' into us4_view_text_files X-Git-Tag: oc-android-1.8~17^2~8^2~9 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/10a12fb96085121482a500c55cd4784cd8970088 Merge branch 'gradleWithInternalDependency' into us4_view_text_files Conflicts: src/com/owncloud/android/ui/activity/FileDisplayActivity.java --- 10a12fb96085121482a500c55cd4784cd8970088 diff --cc .idea/misc.xml index 00000000,b153e48a..cded4964 mode 000000,100644..100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@@ -1,0 -1,10 +1,10 @@@ + + + + + - ++ + + + + diff --cc .idea/modules.xml index 00000000,92fbe54f..0ca17d19 mode 000000,100644..100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@@ -1,0 -1,10 +1,11 @@@ + + + + + + ++ + + + + diff --cc android.iml index 00000000,4d0d9af2..50ce0aa2 mode 000000,100644..100644 --- a/android.iml +++ b/android.iml @@@ -1,0 -1,92 +1,92 @@@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + ++ + + + + + + + + diff --cc src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 627d40cf,49259e9f..20507ea5 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@@ -99,10 -107,8 +105,11 @@@ import com.owncloud.android.ui.preview. 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; +import java.io.File; +import java.io.IOException; + /** * Displays, what files the user has available in his ownCloud. @@@ -873,22 -906,73 +913,74 @@@ public class FileDisplayActivity extend return dialog; } - /** - * Translates a content URI of an content to a physical path on the disk - * + * Translates a content URI of an image to a physical path + * on the disk + * * @param uri The URI to resolve - * @return The path to the image or null if it could not be found + * @return The path to the content or null if it could not be found */ public String getPath(Uri uri) { - String[] projection = {MediaStore.Images.Media.DATA}; - Cursor cursor = managedQuery(uri, projection, null, null, null); - if (cursor != null) { - int column_index = cursor - .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - return cursor.getString(column_index); + final boolean isKitKatOrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + + // DocumentProvider + if (isKitKatOrLater && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) { + // ExternalStorageProvider + if (UriUtils.isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + if ("primary".equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + split[1]; + } + } + // DownloadsProvider + 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 UriUtils.getDataColumn(getApplicationContext(), contentUri, null, null); + } + // MediaProvider + else if (UriUtils.isMediaDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + + final String selection = "_id=?"; - final String[] selectionArgs = new String[] { split[1] }; ++ final String[] selectionArgs = new String[]{split[1]}; + + return UriUtils.getDataColumn(getApplicationContext(), contentUri, selection, selectionArgs); + } + // Documents providers returned as content://... + else if (UriUtils.isContentDocument(uri)) { + return uri.toString(); + } + } + // MediaStore (and general) + else if ("content".equalsIgnoreCase(uri.getScheme())) { + + // Return the remote address + if (UriUtils.isGooglePhotosUri(uri)) + return uri.getLastPathSegment(); + + return UriUtils.getDataColumn(getApplicationContext(), uri, null, null); + } + // File + else if ("file".equalsIgnoreCase(uri.getScheme())) { + return uri.getPath(); } return null; }