You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ma...@apache.org on 2012/06/20 18:49:30 UTC
[2/2] android commit: CB-919: Camera Plugin returned with empty error
message
CB-919: Camera Plugin returned with empty error message
Instead of guarding against a null cursor we detect if the device is using internal or external storage to save the photos and adjust our DB queries accordingly.
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/4795133d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/4795133d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/4795133d
Branch: refs/heads/master
Commit: 4795133daf80f699379950677bb4fc1ed408348b
Parents: a691e9f
Author: macdonst <si...@gmail.com>
Authored: Wed Jun 20 12:20:37 2012 -0400
Committer: macdonst <si...@gmail.com>
Committed: Wed Jun 20 12:43:37 2012 -0400
----------------------------------------------------------------------
.../src/org/apache/cordova/CameraLauncher.java | 24 +++++++++--
framework/src/org/apache/cordova/Capture.java | 32 ++++++++++----
2 files changed, 42 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/4795133d/framework/src/org/apache/cordova/CameraLauncher.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CameraLauncher.java b/framework/src/org/apache/cordova/CameraLauncher.java
index 3520247..e9f4ea8 100755
--- a/framework/src/org/apache/cordova/CameraLauncher.java
+++ b/framework/src/org/apache/cordova/CameraLauncher.java
@@ -43,6 +43,7 @@ import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
+import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
@@ -167,7 +168,7 @@ public class CameraLauncher extends Plugin {
*/
public void takePicture(int returnType, int encodingType) {
// Save the number of images currently on disk for later
- this.numPics = queryImgDB().getCount();
+ this.numPics = queryImgDB(whichContentStore()).getCount();
// Display camera
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
@@ -505,9 +506,9 @@ public class CameraLauncher extends Plugin {
*
* @return a cursor
*/
- private Cursor queryImgDB() {
+ private Cursor queryImgDB(Uri contentStore) {
return this.cordova.getActivity().getContentResolver().query(
- android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+ contentStore,
new String[] { MediaStore.Images.Media._ID },
null,
null,
@@ -523,7 +524,8 @@ public class CameraLauncher extends Plugin {
*/
private void checkForDuplicateImage(int type) {
int diff = 1;
- Cursor cursor = queryImgDB();
+ Uri contentStore = whichContentStore();
+ Cursor cursor = queryImgDB(contentStore);
int currentNumOfImages = cursor.getCount();
if (type == FILE_URI) {
@@ -534,12 +536,24 @@ public class CameraLauncher extends Plugin {
if ((currentNumOfImages - numPics) == diff) {
cursor.moveToLast();
int id = Integer.valueOf(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID))) - 1;
- Uri uri = Uri.parse(MediaStore.Images.Media.EXTERNAL_CONTENT_URI + "/" + id);
+ Uri uri = Uri.parse(contentStore + "/" + id);
this.cordova.getActivity().getContentResolver().delete(uri, null, null);
}
}
/**
+ * Determine if we are storing the images in internal or external storage
+ * @return Uri
+ */
+ private Uri whichContentStore() {
+ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ return android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else {
+ return android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;
+ }
+ }
+
+ /**
* Compress bitmap using jpeg, convert to Base64 encoded string, and return to JavaScript.
*
* @param bitmap
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/4795133d/framework/src/org/apache/cordova/Capture.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Capture.java b/framework/src/org/apache/cordova/Capture.java
index cd115d4..d84c626 100644
--- a/framework/src/org/apache/cordova/Capture.java
+++ b/framework/src/org/apache/cordova/Capture.java
@@ -37,6 +37,7 @@ import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.net.Uri;
+import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
@@ -206,7 +207,7 @@ public class Capture extends Plugin {
*/
private void captureImage() {
// Save the number of images currently on disk for later
- this.numPics = queryImgDB().getCount();
+ this.numPics = queryImgDB(whichContentStore()).getCount();
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
@@ -409,13 +410,13 @@ public class Capture extends Plugin {
*
* @return a cursor
*/
- private Cursor queryImgDB() {
+ private Cursor queryImgDB(Uri contentStore) {
return this.cordova.getActivity().getContentResolver().query(
- android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- new String[] { MediaStore.Images.Media._ID },
- null,
- null,
- null);
+ contentStore,
+ new String[] { MediaStore.Images.Media._ID },
+ null,
+ null,
+ null);
}
/**
@@ -423,15 +424,28 @@ public class Capture extends Plugin {
* to the content store.
*/
private void checkForDuplicateImage() {
- Cursor cursor = queryImgDB();
+ Uri contentStore = whichContentStore();
+ Cursor cursor = queryImgDB(contentStore);
int currentNumOfImages = cursor.getCount();
// delete the duplicate file if the difference is 2
if ((currentNumOfImages - numPics) == 2) {
cursor.moveToLast();
int id = Integer.valueOf(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID))) - 1;
- Uri uri = Uri.parse(MediaStore.Images.Media.EXTERNAL_CONTENT_URI + "/" + id);
+ Uri uri = Uri.parse(contentStore + "/" + id);
this.cordova.getActivity().getContentResolver().delete(uri, null, null);
}
}
+
+ /**
+ * Determine if we are storing the images in internal or external storage
+ * @return Uri
+ */
+ private Uri whichContentStore() {
+ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ return android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else {
+ return android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;
+ }
+ }
}