Fix 2145588 jhead reports "Not JPEG"
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index b7f09bf..a8eb349 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -544,16 +544,15 @@
loc, // location for the database goes here
0, // the dsp will use the right orientation so
// don't "double set it"
- ImageManager.CAMERA_IMAGE_BUCKET_NAME,
- name);
+ ImageManager.CAMERA_IMAGE_BUCKET_NAME, name, null, data);
if (mLastContentUri == null) {
// this means we got an error
mCancel = true;
}
int degree = 0;
if (!mCancel) {
- degree = ImageManager.storeImage(mLastContentUri, mContentResolver,
- null, data);
+ degree = ImageManager.getExifOrientation(
+ ImageManager.CAMERA_IMAGE_BUCKET_NAME + "/" + name);
ImageManager.setImageSize(mContentResolver, mLastContentUri,
new File(ImageManager.CAMERA_IMAGE_BUCKET_NAME,
name).length());
diff --git a/src/com/android/camera/CropImage.java b/src/com/android/camera/CropImage.java
index 88060a2..358675e 100644
--- a/src/com/android/camera/CropImage.java
+++ b/src/com/android/camera/CropImage.java
@@ -374,14 +374,8 @@
// the location (gps).
0, // TODO this is going to cause the orientation
// to reset.
- directory.toString(),
- fileName + "-" + x + ".jpg");
-
- ImageManager.storeImage(
- newUri,
- mContentResolver,
- croppedImage,
- null);
+ directory.toString(), fileName + "-" + x + ".jpg",
+ croppedImage, null);
setResult(RESULT_OK, new Intent()
.setAction(newUri.toString())
diff --git a/src/com/android/camera/ImageManager.java b/src/com/android/camera/ImageManager.java
index 4b9b0cf..f4a5e6f 100644
--- a/src/com/android/camera/ImageManager.java
+++ b/src/com/android/camera/ImageManager.java
@@ -32,6 +32,7 @@
import android.content.ContentValues;
import android.database.Cursor;
import android.graphics.Bitmap;
+import android.graphics.Bitmap.CompressFormat;
import android.location.Location;
import android.media.ExifInterface;
import android.net.Uri;
@@ -45,7 +46,10 @@
import android.util.Log;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -223,7 +227,28 @@
public static Uri addImage(ContentResolver cr, String title,
long dateTaken, Location location,
- int orientation, String directory, String filename) {
+ int orientation, String directory, String filename, Bitmap source, byte[] jpegData) {
+ // We should store image data earlier than insert it to ContentProvider, otherwise
+ // we may not be able to generate thumbnail in time.
+ OutputStream outputStream = null;
+ File file = new File(directory, filename);
+ try {
+ file.mkdirs();
+ outputStream = new FileOutputStream(file);
+ if (source != null) {
+ source.compress(CompressFormat.JPEG, 75, outputStream);
+ } else {
+ outputStream.write(jpegData);
+ }
+ } catch (FileNotFoundException ex) {
+ Log.w(TAG, ex);
+ return null;
+ } catch (IOException ex) {
+ Log.w(TAG, ex);
+ return null;
+ } finally {
+ Util.closeSilently(outputStream);
+ }
ContentValues values = new ContentValues(7);
values.put(Images.Media.TITLE, title);
@@ -235,72 +260,16 @@
values.put(Images.Media.DATE_TAKEN, dateTaken);
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put(Images.Media.ORIENTATION, orientation);
+ values.put(Images.Media.DATA, directory + "/" + filename);
if (location != null) {
values.put(Images.Media.LATITUDE, location.getLatitude());
values.put(Images.Media.LONGITUDE, location.getLongitude());
}
- if (directory != null && filename != null) {
- String value = directory + "/" + filename;
- values.put(Images.Media.DATA, value);
- }
-
return cr.insert(STORAGE_URI, values);
}
- // Returns the rotation degree stored in the jpeg header.
- public static int storeImage(Uri uri, ContentResolver cr,
- Bitmap source, byte [] jpegData) {
-
- if (source == null && jpegData == null || uri == null) {
- throw new IllegalArgumentException("source cannot be null");
- }
-
- boolean complete = false;
- try {
- long id = ContentUris.parseId(uri);
- BaseImageList il = new ImageList(
- cr, STORAGE_URI, THUMB_URI, SORT_ASCENDING, null);
-
- // TODO: Redesign the process of adding new images. We should
- // create an <code>IImage</code> in "ImageManager.addImage"
- // and pass the image object to here.
- Image image = new Image(il, cr, id, 0, il.contentUri(id), null,
- 0, null, 0, null, null, 0);
- String[] projection = new String[] {
- ImageColumns._ID, ImageColumns.DATA};
- Cursor c = cr.query(uri, projection, null, null, null);
- String filepath;
- try {
- c.moveToPosition(0);
- filepath = c.getString(1);
- } finally {
- c.close();
- }
- image.saveImageContents(source, jpegData, true, filepath);
-
- ContentValues values = new ContentValues();
- values.put(ImageColumns.MINI_THUMB_MAGIC, 0);
- int degree = 0;
- if (jpegData != null) {
- degree = getExifOrientation(filepath);
- }
- values.put(Images.Media.ORIENTATION, degree);
- cr.update(uri, values, null, null);
- complete = true;
- return degree;
- } finally {
- if (!complete) {
- try {
- cr.delete(uri, null, null);
- } catch (Throwable t) {
- // ignore it while clean up.
- }
- }
- }
- }
-
public static int getExifOrientation(String filepath) {
int degree = 0;
ExifInterface exif = null;
diff --git a/src/com/android/camera/gallery/BaseImage.java b/src/com/android/camera/gallery/BaseImage.java
index aa7116d..5c9c07f 100644
--- a/src/com/android/camera/gallery/BaseImage.java
+++ b/src/com/android/camera/gallery/BaseImage.java
@@ -85,16 +85,11 @@
* @param uri where to store the bitmap
* @return true if we succeeded
*/
- protected boolean compressImageToFile(
- Bitmap bitmap, byte [] jpegData, Uri uri) {
+ protected boolean compressImageToFile(Bitmap bitmap, Uri uri) {
OutputStream outputStream = null;
try {
outputStream = mContentResolver.openOutputStream(uri);
- if (bitmap != null) {
- bitmap.compress(compressionType(), 75, outputStream);
- } else {
- outputStream.write(jpegData);
- }
+ bitmap.compress(compressionType(), 75, outputStream);
return true;
} catch (FileNotFoundException ex) {
return false;
diff --git a/src/com/android/camera/gallery/Image.java b/src/com/android/camera/gallery/Image.java
index 340ba79..d14c74e 100644
--- a/src/com/android/camera/gallery/Image.java
+++ b/src/com/android/camera/gallery/Image.java
@@ -98,10 +98,9 @@
mExif.setAttribute(tag, value);
}
- public void saveImageContents(Bitmap image, byte [] jpegData,
- boolean newFile, String filePath) {
+ public void saveImageContents(Bitmap image, String filePath) {
Uri uri = mContainer.contentUri(mId);
- compressImageToFile(image, jpegData, uri);
+ compressImageToFile(image, uri);
}
private void loadExifData() {
@@ -178,4 +177,4 @@
return bitmap;
}
-}
\ No newline at end of file
+}