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;
+        }
+    }
 }