summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/data/UriSource.java
diff options
context:
space:
mode:
authorOwen Lin <owenlin@google.com>2012-04-20 18:42:22 +0800
committerOwen Lin <owenlin@google.com>2012-04-25 15:27:42 +0800
commit56363ddedc94981a0745065d792603bbf7d23878 (patch)
tree4faee2c40a139c709434950af028cb3b1554319c /src/com/android/gallery3d/data/UriSource.java
parentc79766a95de4635145a0426ed822af6c4732a70c (diff)
downloadandroid_packages_apps_Snap-56363ddedc94981a0745065d792603bbf7d23878.tar.gz
android_packages_apps_Snap-56363ddedc94981a0745065d792603bbf7d23878.tar.bz2
android_packages_apps_Snap-56363ddedc94981a0745065d792603bbf7d23878.zip
Fix NPE in Gallery.
This happens if user set type in an intent. But we get a different type from content resolver. Change-Id: Iabafce7f7aaff23a7a9ee09e1d38ab50049abc88 fix: 6358473
Diffstat (limited to 'src/com/android/gallery3d/data/UriSource.java')
-rw-r--r--src/com/android/gallery3d/data/UriSource.java34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/com/android/gallery3d/data/UriSource.java b/src/com/android/gallery3d/data/UriSource.java
index ac53dd5e0..76f7ac0e5 100644
--- a/src/com/android/gallery3d/data/UriSource.java
+++ b/src/com/android/gallery3d/data/UriSource.java
@@ -16,7 +16,9 @@
package com.android.gallery3d.data;
+import android.content.ContentResolver;
import android.net.Uri;
+import android.webkit.MimeTypeMap;
import com.android.gallery3d.app.GalleryApp;
@@ -37,21 +39,35 @@ class UriSource extends MediaSource {
@Override
public MediaObject createMediaObject(Path path) {
String segment[] = path.split();
- if (segment.length != 2) {
+ if (segment.length != 3) {
throw new RuntimeException("bad path: " + path);
}
-
- String decoded = URLDecoder.decode(segment[1]);
- return new UriImage(mApplication, path, Uri.parse(decoded));
+ String uri = URLDecoder.decode(segment[1]);
+ String type = URLDecoder.decode(segment[2]);
+ return new UriImage(mApplication, path, Uri.parse(uri), type);
}
- @Override
- public Path findPathByUri(Uri uri) {
- String type = mApplication.getContentResolver().getType(uri);
+ private String getMimeType(Uri uri) {
+ if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
+ String extension =
+ MimeTypeMap.getFileExtensionFromUrl(uri.toString());
+ String type = MimeTypeMap.getSingleton()
+ .getMimeTypeFromExtension(extension.toLowerCase());
+ if (type != null) return type;
+ }
// Assume the type is image if the type cannot be resolved
// This could happen for "http" URI.
- if (type == null || type.startsWith("image/")) {
- return Path.fromString("/uri/" + URLEncoder.encode(uri.toString()));
+ String type = mApplication.getContentResolver().getType(uri);
+ if (type == null) type = "image/*";
+ return type;
+ }
+
+ @Override
+ public Path findPathByUri(Uri uri, String type) {
+ if (type == null) type = getMimeType(uri);
+ if (type.startsWith("image/")) {
+ return Path.fromString("/uri/" + URLEncoder.encode(uri.toString())
+ + "/" +URLEncoder.encode(type));
}
return null;
}