From 831670e4aeb01f678d8a99fd6cabc6ddc85f4d85 Mon Sep 17 00:00:00 2001 From: Bryce Curtis Date: Wed, 27 Oct 2010 07:56:50 +0800 Subject: [PATCH] Modify camera to use NO_RESULT, thus eliminating extra JS callback methods. --- framework/assets/js/camera.js | 37 +------------------ .../src/com/phonegap/CameraLauncher.java | 13 +++++-- 2 files changed, 10 insertions(+), 40 deletions(-) diff --git a/framework/assets/js/camera.js b/framework/assets/js/camera.js index e49777aa..0d9cf761 100755 --- a/framework/assets/js/camera.js +++ b/framework/assets/js/camera.js @@ -70,8 +70,6 @@ Camera.prototype.getPicture = function(successCallback, errorCallback, options) return; } - this.successCallback = successCallback; - this.errorCallback = errorCallback; this.options = options; var quality = 80; if (options.quality) { @@ -85,40 +83,7 @@ Camera.prototype.getPicture = function(successCallback, errorCallback, options) if (typeof this.options.sourceType == "number") { sourceType = this.options.sourceType; } - PhoneGap.exec(null, null, "Camera", "takePicture", [quality, destinationType, sourceType]); -}; - -/** - * Callback function from native code that is called when image has been captured. - * - * @param picture The base64 encoded string of the image - */ -Camera.prototype.success = function(picture) { - if (this.successCallback) { - try { - this.successCallback(picture); - } - catch (e) { - console.log("Camera error calling user's success callback: " + e); - } - } -}; - -/** - * Callback function from native code that is called when there is an error - * capturing an image, or the capture is cancelled. - * - * @param err The error message - */ -Camera.prototype.error = function(err) { - if (this.errorCallback) { - try { - this.errorCallback(err); - } - catch (e) { - console.log("Camera error calling user's error callback: " + e); - } - } + PhoneGap.exec(successCallback, errorCallback, "Camera", "takePicture", [quality, destinationType, sourceType]); }; PhoneGap.addConstructor(function() { diff --git a/framework/src/com/phonegap/CameraLauncher.java b/framework/src/com/phonegap/CameraLauncher.java index 9c8638a7..50ad55ae 100755 --- a/framework/src/com/phonegap/CameraLauncher.java +++ b/framework/src/com/phonegap/CameraLauncher.java @@ -45,6 +45,7 @@ public class CameraLauncher extends Plugin { private int mQuality; // Compression quality hint (0-100: 0=low quality & high compression, 100=compress of max quality) private Uri imageUri; // Uri of captured image + public String callbackId; /** * Constructor. @@ -63,6 +64,7 @@ public class CameraLauncher extends Plugin { public PluginResult execute(String action, JSONArray args, String callbackId) { PluginResult.Status status = PluginResult.Status.OK; String result = ""; + this.callbackId = callbackId; try { if (action.equals("takePicture")) { @@ -80,6 +82,9 @@ public class CameraLauncher extends Plugin { else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) { this.getImage(srcType, destType); } + PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT); + r.setKeepCallback(true); + return r; } return new PluginResult(status, result); } catch (JSONException e) { @@ -190,7 +195,7 @@ public class CameraLauncher extends Plugin { os.close(); // Send Uri back to JavaScript for viewing image - this.sendJavascript("navigator.camera.success('" + uri.toString() + "');"); + this.success(new PluginResult(PluginResult.Status.OK, uri.toString()), this.callbackId); } } catch (IOException e) { e.printStackTrace(); @@ -227,7 +232,7 @@ public class CameraLauncher extends Plugin { // If sending filename back else if (destType == FILE_URI) { - this.sendJavascript("navigator.camera.success('" + uri + "');"); + this.success(new PluginResult(PluginResult.Status.OK, uri.toString()), this.callbackId); } } else if (resultCode == Activity.RESULT_CANCELED) { @@ -251,7 +256,7 @@ public class CameraLauncher extends Plugin { byte[] code = jpeg_data.toByteArray(); byte[] output = Base64.encodeBase64(code); String js_out = new String(output); - this.sendJavascript("navigator.camera.success('" + js_out + "');"); + this.success(new PluginResult(PluginResult.Status.OK, js_out), this.callbackId); } } catch(Exception e) { @@ -265,6 +270,6 @@ public class CameraLauncher extends Plugin { * @param err */ public void failPicture(String err) { - this.sendJavascript("navigator.camera.error('" + err + "');"); + this.error(new PluginResult(PluginResult.Status.ERROR, err), this.callbackId); } }