summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app/CropImage.java
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2011-10-19 15:35:28 +0800
committerChih-Chung Chang <chihchung@google.com>2011-10-19 15:36:28 +0800
commit6156a86c4c2232165575b243a284ff10a87f1663 (patch)
tree132ea16793e908fd18342e76bfb7a467941a257e /src/com/android/gallery3d/app/CropImage.java
parentfff46c04cffa09f37cc45d53ad3ddc7b020d20df (diff)
downloadandroid_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.java51
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)