aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDanesh Mondegarian <daneshm90@gmail.com>2014-12-14 12:00:27 -0800
committerDanesh Mondegarian <daneshm90@gmail.com>2014-12-14 12:04:56 -0800
commit86d69be562a3e5d5d9879a21709fd1aa0bec909d (patch)
tree9b350d06a4500f92349ff2f90f7efcdd78d61e56 /src
parentfb3405904df8f9261c2e19f7e86c9975871990f7 (diff)
downloadandroid_packages_apps_CMFileManager-86d69be562a3e5d5d9879a21709fd1aa0bec909d.tar.gz
android_packages_apps_CMFileManager-86d69be562a3e5d5d9879a21709fd1aa0bec909d.tar.bz2
android_packages_apps_CMFileManager-86d69be562a3e5d5d9879a21709fd1aa0bec909d.zip
CMFileManager : Pass appropriate media type uri when ACTION_VIEW
Passing the appropriate uri and not the generic File table uri, allows apps such as gallery to allow paging in the appropriate folder. Change-Id: I622680d0e27c304fb83532ccc2e026ff9e112a5b
Diffstat (limited to 'src')
-rw-r--r--src/com/cyanogenmod/filemanager/activities/PickerActivity.java6
-rw-r--r--src/com/cyanogenmod/filemanager/ui/policy/IntentsActionPolicy.java3
-rw-r--r--src/com/cyanogenmod/filemanager/util/MediaHelper.java43
-rw-r--r--src/com/cyanogenmod/filemanager/util/MimeTypeHelper.java33
4 files changed, 73 insertions, 12 deletions
diff --git a/src/com/cyanogenmod/filemanager/activities/PickerActivity.java b/src/com/cyanogenmod/filemanager/activities/PickerActivity.java
index 52297519..3fe9c5d1 100644
--- a/src/com/cyanogenmod/filemanager/activities/PickerActivity.java
+++ b/src/com/cyanogenmod/filemanager/activities/PickerActivity.java
@@ -434,7 +434,7 @@ public class PickerActivity extends Activity
// Return the picked file, as expected (this activity should fill the intent data
// and return RESULT_OK result)
Intent result = new Intent();
- result.setData(getResultUriForFileFromIntent(getContentResolver(), src, getIntent()));
+ result.setData(getResultUriForFileFromIntent(this, src, getIntent()));
setResult(Activity.RESULT_OK, result);
finish();
@@ -496,9 +496,9 @@ public class PickerActivity extends Activity
return file.getParentFile();
}
- private static Uri getResultUriForFileFromIntent(ContentResolver cr, File src, Intent intent) {
+ private static Uri getResultUriForFileFromIntent(Context context, File src, Intent intent) {
// Try to find the preferred uri scheme
- Uri result = MediaHelper.fileToContentUri(cr, src);
+ Uri result = MediaHelper.fileToContentUri(context, src);
if (result == null) {
result = Uri.fromFile(src);
}
diff --git a/src/com/cyanogenmod/filemanager/ui/policy/IntentsActionPolicy.java b/src/com/cyanogenmod/filemanager/ui/policy/IntentsActionPolicy.java
index 47be24ee..026e31c1 100644
--- a/src/com/cyanogenmod/filemanager/ui/policy/IntentsActionPolicy.java
+++ b/src/com/cyanogenmod/filemanager/ui/policy/IntentsActionPolicy.java
@@ -668,8 +668,7 @@ public final class IntentsActionPolicy extends ActionsPolicy {
// Try to resolve media data or return a file uri
final File file = new File(fso.getFullPath());
- ContentResolver cr = ctx.getContentResolver();
- Uri uri = MediaHelper.fileToContentUri(cr, file);
+ Uri uri = MediaHelper.fileToContentUri(ctx, file);
if (uri == null) {
uri = Uri.fromFile(file);
}
diff --git a/src/com/cyanogenmod/filemanager/util/MediaHelper.java b/src/com/cyanogenmod/filemanager/util/MediaHelper.java
index bb6a9c6b..d3d29318 100644
--- a/src/com/cyanogenmod/filemanager/util/MediaHelper.java
+++ b/src/com/cyanogenmod/filemanager/util/MediaHelper.java
@@ -17,6 +17,7 @@
package com.cyanogenmod.filemanager.util;
import android.content.ContentResolver;
+import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.UserHandle;
@@ -113,16 +114,16 @@ public final class MediaHelper {
* @param file The file reference
* @return Uri The content uri or null if file not exists in the media database
*/
- public static Uri fileToContentUri(ContentResolver cr, File file) {
+ public static Uri fileToContentUri(Context context, File file) {
// Normalize the path to ensure media search
final String normalizedPath = normalizeMediaPath(file.getAbsolutePath());
// Check in external and internal storages
- Uri uri = fileToContentUri(cr, normalizedPath, EXTERNAL_VOLUME);
+ Uri uri = fileToContentUri(context, normalizedPath, EXTERNAL_VOLUME);
if (uri != null) {
return uri;
}
- uri = fileToContentUri(cr, normalizedPath, INTERNAL_VOLUME);
+ uri = fileToContentUri(context, normalizedPath, INTERNAL_VOLUME);
if (uri != null) {
return uri;
}
@@ -137,16 +138,44 @@ public final class MediaHelper {
* @param volume The volume
* @return Uri The content uri or null if file not exists in the media database
*/
- private static Uri fileToContentUri(ContentResolver cr, String path, String volume) {
- final String[] projection = {BaseColumns._ID, MediaStore.Files.FileColumns.MEDIA_TYPE};
+ private static Uri fileToContentUri(Context context, String path, String volume) {
+ String[] projection = null;
final String where = MediaColumns.DATA + " = ?";
+ File file = new File(path);
Uri baseUri = MediaStore.Files.getContentUri(volume);
+ boolean isMimeTypeImage = false, isMimeTypeVideo = false, isMimeTypeAudio = false;
+ isMimeTypeImage = MimeTypeHelper.KnownMimeTypeResolver.isImage(context, file);
+ if (!isMimeTypeImage) {
+ isMimeTypeVideo = MimeTypeHelper.KnownMimeTypeResolver.isVideo(context, file);
+ if (!isMimeTypeVideo) {
+ isMimeTypeAudio = MimeTypeHelper.KnownMimeTypeResolver.isAudio(context, file);
+ }
+ }
+ if (isMimeTypeImage || isMimeTypeVideo || isMimeTypeAudio) {
+ projection = new String[]{BaseColumns._ID};
+ if (isMimeTypeImage) {
+ baseUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else if (isMimeTypeVideo) {
+ baseUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+ } else if (isMimeTypeAudio) {
+ baseUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+ }
+ } else {
+ projection = new String[]{BaseColumns._ID, MediaStore.Files.FileColumns.MEDIA_TYPE};
+ }
+ ContentResolver cr = context.getContentResolver();
Cursor c = cr.query(baseUri, projection, where, new String[]{path}, null);
try {
if (c != null && c.moveToNext()) {
- int type = c.getInt(c.getColumnIndexOrThrow(
+ boolean isValid = false;
+ if (isMimeTypeImage || isMimeTypeVideo || isMimeTypeAudio) {
+ isValid = true;
+ } else {
+ int type = c.getInt(c.getColumnIndexOrThrow(
MediaStore.Files.FileColumns.MEDIA_TYPE));
- if (type != 0) {
+ isValid = type != 0;
+ }
+ if (isValid) {
// Do not force to use content uri for no media files
long id = c.getLong(c.getColumnIndexOrThrow(BaseColumns._ID));
return Uri.withAppendedPath(baseUri, String.valueOf(id));
diff --git a/src/com/cyanogenmod/filemanager/util/MimeTypeHelper.java b/src/com/cyanogenmod/filemanager/util/MimeTypeHelper.java
index 38212a20..ebcdcadb 100644
--- a/src/com/cyanogenmod/filemanager/util/MimeTypeHelper.java
+++ b/src/com/cyanogenmod/filemanager/util/MimeTypeHelper.java
@@ -615,5 +615,38 @@ public final class MimeTypeHelper {
public static boolean isVideo(Context context, FileSystemObject fso) {
return MimeTypeHelper.getCategory(context, fso).compareTo(MimeTypeCategory.VIDEO) == 0;
}
+
+ /**
+ * Method that returns if the File is an image file.
+ *
+ * @param context The current context
+ * @param file The File to check
+ * @return boolean If the File is an image file.
+ */
+ public static boolean isImage(Context context, File file) {
+ return MimeTypeHelper.getCategory(context, file).compareTo(MimeTypeCategory.IMAGE) == 0;
+ }
+
+ /**
+ * Method that returns if the File is an video file.
+ *
+ * @param context The current context
+ * @param file The File to check
+ * @return boolean If the File is an video file.
+ */
+ public static boolean isVideo(Context context, File file) {
+ return MimeTypeHelper.getCategory(context, file).compareTo(MimeTypeCategory.VIDEO) == 0;
+ }
+
+ /**
+ * Method that returns if the File is an audio file.
+ *
+ * @param context The current context
+ * @param file The File to check
+ * @return boolean If the File is an audio file.
+ */
+ public static boolean isAudio(Context context, File file) {
+ return MimeTypeHelper.getCategory(context, file).compareTo(MimeTypeCategory.AUDIO) == 0;
+ }
}
}