diff options
-rw-r--r-- | src/com/android/gallery3d/app/CropImage.java | 8 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/Gallery.java | 7 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/PhotoPage.java | 11 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/DataManager.java | 4 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/LocalSource.java | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/MediaSource.java | 2 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/UriImage.java | 16 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/UriSource.java | 34 |
8 files changed, 39 insertions, 45 deletions
diff --git a/src/com/android/gallery3d/app/CropImage.java b/src/com/android/gallery3d/app/CropImage.java index 7e1572f0c..40b357d72 100644 --- a/src/com/android/gallery3d/app/CropImage.java +++ b/src/com/android/gallery3d/app/CropImage.java @@ -887,13 +887,9 @@ public class CropImage extends AbstractGalleryActivity { private MediaItem getMediaItemFromIntentData() { Uri uri = getIntent().getData(); DataManager manager = getDataManager(); - if (uri == null) { - Log.w(TAG, "no data given"); - return null; - } - Path path = manager.findPathByUri(uri); + Path path = manager.findPathByUri(uri, getIntent().getType()); if (path == null) { - Log.w(TAG, "cannot get path for: " + uri); + Log.w(TAG, "cannot get path for: " + uri + ", or no data given"); return null; } return (MediaItem) manager.getMediaObject(path); diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java index c8fbd537e..0fbe7ac0e 100644 --- a/src/com/android/gallery3d/app/Gallery.java +++ b/src/com/android/gallery3d/app/Gallery.java @@ -27,7 +27,6 @@ import android.net.Uri; import android.os.Bundle; import android.provider.OpenableColumns; import android.view.Menu; -import android.view.MenuItem; import android.view.Window; import android.widget.Toast; @@ -137,7 +136,7 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi if (slideshow) { getActionBar().hide(); DataManager manager = getDataManager(); - Path path = manager.findPathByUri(intent.getData()); + Path path = manager.findPathByUri(intent.getData(), intent.getType()); if (path == null || manager.getMediaObject(path) instanceof MediaItem) { path = Path.fromString( @@ -173,7 +172,7 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi KEY_MEDIA_TYPES, String.valueOf(mediaType)) .build(); } - Path setPath = dm.findPathByUri(uri); + Path setPath = dm.findPathByUri(uri, null); MediaSet mediaSet = null; if (setPath != null) { mediaSet = (MediaSet) dm.getMediaObject(setPath); @@ -192,7 +191,7 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi startDefaultPage(); } } else { - Path itemPath = dm.findPathByUri(uri); + Path itemPath = dm.findPathByUri(uri, intent.getType()); Path albumPath = dm.getDefaultSetOf(itemPath); // TODO: Make this parameter public so other activities can reference it. boolean singleItemOnly = intent.getBooleanExtra("SingleItemOnly", false); diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java index 6e5343ba8..bdc406019 100644 --- a/src/com/android/gallery3d/app/PhotoPage.java +++ b/src/com/android/gallery3d/app/PhotoPage.java @@ -19,13 +19,10 @@ package com.android.gallery3d.app; import android.app.ActionBar.OnMenuVisibilityListener; import android.app.Activity; import android.content.ActivityNotFoundException; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.net.Uri; -import android.nfc.NdefMessage; -import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.Handler; @@ -34,8 +31,6 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.View.MeasureSpec; -import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ShareActionProvider; import android.widget.Toast; @@ -57,9 +52,9 @@ import com.android.gallery3d.ui.GLCanvas; import com.android.gallery3d.ui.GLView; import com.android.gallery3d.ui.ImportCompleteListener; import com.android.gallery3d.ui.MenuExecutor; +import com.android.gallery3d.ui.PhotoView; import com.android.gallery3d.ui.ScreenNail; import com.android.gallery3d.ui.ScreenNailHolder; -import com.android.gallery3d.ui.PhotoView; import com.android.gallery3d.ui.SelectionManager; import com.android.gallery3d.ui.SynchronizedHandler; import com.android.gallery3d.ui.UserInteractionListener; @@ -578,8 +573,8 @@ public class PhotoPage extends ActivityState case REQUEST_CROP: if (resultCode == Activity.RESULT_OK) { if (data == null) break; - Path path = mApplication - .getDataManager().findPathByUri(data.getData()); + Path path = mApplication.getDataManager() + .findPathByUri(data.getData(), data.getType()); if (path != null) { mModel.setCurrentPhoto(path, mCurrentIndex); } diff --git a/src/com/android/gallery3d/data/DataManager.java b/src/com/android/gallery3d/data/DataManager.java index 1da3b76ca..0eb6af55e 100644 --- a/src/com/android/gallery3d/data/DataManager.java +++ b/src/com/android/gallery3d/data/DataManager.java @@ -242,10 +242,10 @@ public class DataManager { return getMediaObject(path).getMediaType(); } - public Path findPathByUri(Uri uri) { + public Path findPathByUri(Uri uri, String type) { if (uri == null) return null; for (MediaSource source : mSourceMap.values()) { - Path path = source.findPathByUri(uri); + Path path = source.findPathByUri(uri, type); if (path != null) return path; } return null; diff --git a/src/com/android/gallery3d/data/LocalSource.java b/src/com/android/gallery3d/data/LocalSource.java index 19b2fec4f..6735b16e4 100644 --- a/src/com/android/gallery3d/data/LocalSource.java +++ b/src/com/android/gallery3d/data/LocalSource.java @@ -151,7 +151,7 @@ class LocalSource extends MediaSource { } @Override - public Path findPathByUri(Uri uri) { + public Path findPathByUri(Uri uri, String type) { try { switch (mUriMatcher.match(uri)) { case LOCAL_IMAGE_ITEM: { diff --git a/src/com/android/gallery3d/data/MediaSource.java b/src/com/android/gallery3d/data/MediaSource.java index 07479a7d0..9f7561ec6 100644 --- a/src/com/android/gallery3d/data/MediaSource.java +++ b/src/com/android/gallery3d/data/MediaSource.java @@ -34,7 +34,7 @@ public abstract class MediaSource { return mPrefix; } - public Path findPathByUri(Uri uri) { + public Path findPathByUri(Uri uri, String type) { return null; } diff --git a/src/com/android/gallery3d/data/UriImage.java b/src/com/android/gallery3d/data/UriImage.java index 05850bbb3..b5bfe964b 100644 --- a/src/com/android/gallery3d/data/UriImage.java +++ b/src/com/android/gallery3d/data/UriImage.java @@ -23,7 +23,6 @@ import android.graphics.BitmapFactory.Options; import android.graphics.BitmapRegionDecoder; import android.net.Uri; import android.os.ParcelFileDescriptor; -import android.webkit.MimeTypeMap; import com.android.gallery3d.app.GalleryApp; import com.android.gallery3d.common.BitmapUtils; @@ -58,22 +57,11 @@ public class UriImage extends MediaItem { private GalleryApp mApplication; - public UriImage(GalleryApp application, Path path, Uri uri) { + public UriImage(GalleryApp application, Path path, Uri uri, String contentType) { super(path, nextVersionNumber()); mUri = uri; mApplication = Utils.checkNotNull(application); - mContentType = getMimeType(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; - } - return mApplication.getContentResolver().getType(uri); + mContentType = contentType; } @Override 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; } |