diff options
author | Chih-Chung Chang <chihchung@google.com> | 2011-10-19 15:35:28 +0800 |
---|---|---|
committer | Chih-Chung Chang <chihchung@google.com> | 2011-10-19 15:36:28 +0800 |
commit | 6156a86c4c2232165575b243a284ff10a87f1663 (patch) | |
tree | 132ea16793e908fd18342e76bfb7a467941a257e /src/com/android/gallery3d/app/CropImage.java | |
parent | fff46c04cffa09f37cc45d53ad3ddc7b020d20df (diff) | |
download | android_packages_apps_Snap-6156a86c4c2232165575b243a284ff10a87f1663.tar.gz android_packages_apps_Snap-6156a86c4c2232165575b243a284ff10a87f1663.tar.bz2 android_packages_apps_Snap-6156a86c4c2232165575b243a284ff10a87f1663.zip |
Fix 5424444: Add code to save cropped image for non-local, non-picasa cases.
Change-Id: Ib9f780f71fc9c50fa68a03ebb49f1bd007ca333d
Diffstat (limited to 'src/com/android/gallery3d/app/CropImage.java')
-rw-r--r-- | src/com/android/gallery3d/app/CropImage.java | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/src/com/android/gallery3d/app/CropImage.java b/src/com/android/gallery3d/app/CropImage.java index a0fb0f89d..6dddae23d 100644 --- a/src/com/android/gallery3d/app/CropImage.java +++ b/src/com/android/gallery3d/app/CropImage.java @@ -70,6 +70,8 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.Date; /** * The activity can crop specific region of interest from an image. @@ -90,6 +92,11 @@ public class CropImage extends AbstractGalleryActivity { private static final int MAX_BACKUP_IMAGE_SIZE = 320; private static final int DEFAULT_COMPRESS_QUALITY = 90; + private static final String TIME_STAMP_NAME = "'IMG'_yyyyMMdd_HHmmss"; + + // Change these to Images.Media.WIDTH/HEIGHT after they are unhidden. + private static final String WIDTH = "width"; + private static final String HEIGHT = "height"; public static final String KEY_RETURN_DATA = "return-data"; public static final String KEY_CROPPED_RECT = "cropped-rect"; @@ -350,8 +357,7 @@ public class CropImage extends AbstractGalleryActivity { } else if (mMediaItem instanceof LocalImage) { return saveLocalImage(jc, cropped); } else { - Log.w(TAG, "no output for crop image " + mMediaItem); - return null; + return saveGenericImage(jc, cropped); } } @@ -375,10 +381,12 @@ public class CropImage extends AbstractGalleryActivity { values.put(Images.Media.DATE_TAKEN, PicasaSource.getDateTaken(mMediaItem)); values.put(Images.Media.DATE_MODIFIED, now); values.put(Images.Media.DATE_ADDED, now); - values.put(Images.Media.MIME_TYPE, "image/jpeg"); + values.put(Images.Media.MIME_TYPE, getOutputMimeType()); values.put(Images.Media.ORIENTATION, 0); values.put(Images.Media.DATA, output.getAbsolutePath()); values.put(Images.Media.SIZE, output.length()); + values.put(WIDTH, cropped.getWidth()); + values.put(HEIGHT, cropped.getHeight()); double latitude = PicasaSource.getLatitude(mMediaItem); double longitude = PicasaSource.getLongitude(mMediaItem); @@ -412,10 +420,12 @@ public class CropImage extends AbstractGalleryActivity { values.put(Images.Media.DATE_TAKEN, localImage.dateTakenInMs); values.put(Images.Media.DATE_MODIFIED, now); values.put(Images.Media.DATE_ADDED, now); - values.put(Images.Media.MIME_TYPE, "image/jpeg"); + values.put(Images.Media.MIME_TYPE, getOutputMimeType()); values.put(Images.Media.ORIENTATION, 0); values.put(Images.Media.DATA, output.getAbsolutePath()); values.put(Images.Media.SIZE, output.length()); + values.put(WIDTH, cropped.getWidth()); + values.put(HEIGHT, cropped.getHeight()); if (GalleryUtils.isValidLocation(localImage.latitude, localImage.longitude)) { values.put(Images.Media.LATITUDE, localImage.latitude); @@ -425,6 +435,35 @@ public class CropImage extends AbstractGalleryActivity { Images.Media.EXTERNAL_CONTENT_URI, values); } + private Uri saveGenericImage(JobContext jc, Bitmap cropped) { + if (!DOWNLOAD_BUCKET.isDirectory() && !DOWNLOAD_BUCKET.mkdirs()) { + throw new RuntimeException("cannot create download folder"); + } + + long now = System.currentTimeMillis(); + String filename = new SimpleDateFormat(TIME_STAMP_NAME). + format(new Date(now)); + + File output = saveMedia(jc, cropped, DOWNLOAD_BUCKET, filename); + if (output == null) return null; + + ContentValues values = new ContentValues(); + values.put(Images.Media.TITLE, filename); + values.put(Images.Media.DISPLAY_NAME, output.getName()); + values.put(Images.Media.DATE_TAKEN, now); + values.put(Images.Media.DATE_MODIFIED, now / 1000); + values.put(Images.Media.DATE_ADDED, now / 1000); + values.put(Images.Media.MIME_TYPE, getOutputMimeType()); + values.put(Images.Media.ORIENTATION, 0); + values.put(Images.Media.DATA, output.getAbsolutePath()); + values.put(Images.Media.SIZE, output.length()); + values.put(WIDTH, cropped.getWidth()); + values.put(HEIGHT, cropped.getHeight()); + + return getContentResolver().insert( + Images.Media.EXTERNAL_CONTENT_URI, values); + } + private boolean saveBitmapToOutputStream( JobContext jc, Bitmap bitmap, CompressFormat format, OutputStream os) { // We wrap the OutputStream so that it can be interrupted. @@ -460,6 +499,10 @@ public class CropImage extends AbstractGalleryActivity { : CompressFormat.JPEG; } + private String getOutputMimeType() { + return getFileExtension().equals("png") ? "image/png" : "image/jpeg"; + } + private String getFileExtension() { String requestFormat = getIntent().getStringExtra(KEY_OUTPUT_FORMAT); String outputFormat = (requestFormat == null) |