mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-31 17:32:51 +08:00
Merge branch 'master' of git@github.com:phonegap/phonegap-android
This commit is contained in:
commit
45c9a88fd7
@ -70,8 +70,6 @@ Camera.prototype.getPicture = function(successCallback, errorCallback, options)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.successCallback = successCallback;
|
|
||||||
this.errorCallback = errorCallback;
|
|
||||||
this.options = options;
|
this.options = options;
|
||||||
var quality = 80;
|
var quality = 80;
|
||||||
if (options.quality) {
|
if (options.quality) {
|
||||||
@ -85,40 +83,7 @@ Camera.prototype.getPicture = function(successCallback, errorCallback, options)
|
|||||||
if (typeof this.options.sourceType == "number") {
|
if (typeof this.options.sourceType == "number") {
|
||||||
sourceType = this.options.sourceType;
|
sourceType = this.options.sourceType;
|
||||||
}
|
}
|
||||||
PhoneGap.exec(null, null, "Camera", "takePicture", [quality, destinationType, sourceType]);
|
PhoneGap.exec(successCallback, errorCallback, "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.addConstructor(function() {
|
PhoneGap.addConstructor(function() {
|
||||||
|
@ -383,18 +383,16 @@ PhoneGap.clone = function(obj) {
|
|||||||
PhoneGap.callbackId = 0;
|
PhoneGap.callbackId = 0;
|
||||||
PhoneGap.callbacks = {};
|
PhoneGap.callbacks = {};
|
||||||
PhoneGap.callbackStatus = {
|
PhoneGap.callbackStatus = {
|
||||||
OK: 0,
|
NO_RESULT: 0,
|
||||||
CLASS_NOT_FOUND_EXCEPTION: 1,
|
OK: 1,
|
||||||
ILLEGAL_ACCESS_EXCEPTION: 2,
|
CLASS_NOT_FOUND_EXCEPTION: 2,
|
||||||
INSTANTIATION_EXCEPTION: 3,
|
ILLEGAL_ACCESS_EXCEPTION: 3,
|
||||||
MALFORMED_URL_EXCEPTION: 4,
|
INSTANTIATION_EXCEPTION: 4,
|
||||||
IO_EXCEPTION: 5,
|
MALFORMED_URL_EXCEPTION: 5,
|
||||||
INVALID_ACTION: 6,
|
IO_EXCEPTION: 6,
|
||||||
JSON_EXCEPTION: 7,
|
INVALID_ACTION: 7,
|
||||||
ERROR: 8,
|
JSON_EXCEPTION: 8,
|
||||||
RESULT_TO_BE_SENT: 9,
|
ERROR: 9
|
||||||
NEXT_RESULT: 10,
|
|
||||||
NO_MORE_RESULTS: 11
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -427,7 +425,7 @@ PhoneGap.exec = function(success, fail, service, action, args) {
|
|||||||
eval("var v="+r+";");
|
eval("var v="+r+";");
|
||||||
|
|
||||||
// If status is OK, then return value back to caller
|
// If status is OK, then return value back to caller
|
||||||
if ((v.status == PhoneGap.callbackStatus.OK) || (v.status == PhoneGap.callbackStatus.NEXT_RESULT)) {
|
if (v.status == PhoneGap.callbackStatus.OK) {
|
||||||
|
|
||||||
// If there is a success callback, then call it now with returned value
|
// If there is a success callback, then call it now with returned value
|
||||||
if (success) {
|
if (success) {
|
||||||
@ -439,15 +437,24 @@ PhoneGap.exec = function(success, fail, service, action, args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clear callback if not expecting any more results
|
// Clear callback if not expecting any more results
|
||||||
if ((v.status == PhoneGap.callbackStatus.OK) || (v.status == PhoneGap.callbackStatus.NO_MORE_RESULTS)) {
|
if (!v.keepCallback) {
|
||||||
delete PhoneGap.callbacks[callbackId];
|
delete PhoneGap.callbacks[callbackId];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return v.message;
|
return v.message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If no result
|
||||||
|
else if (v.status == PhoneGap.callbackStatus.NO_RESULT) {
|
||||||
|
|
||||||
|
// Clear callback if not expecting any more results
|
||||||
|
if (!v.keepCallback) {
|
||||||
|
delete PhoneGap.callbacks[callbackId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If error, then display error
|
// If error, then display error
|
||||||
else if (v.status != PhoneGap.callbackStatus.RESULT_TO_BE_SENT) {
|
else {
|
||||||
console.log("Error: Status="+r.status+" Message="+v.message);
|
console.log("Error: Status="+r.status+" Message="+v.message);
|
||||||
|
|
||||||
// If there is a fail callback, then call it now with returned value
|
// If there is a fail callback, then call it now with returned value
|
||||||
@ -458,7 +465,11 @@ PhoneGap.exec = function(success, fail, service, action, args) {
|
|||||||
catch (e) {
|
catch (e) {
|
||||||
console.log("Error in error callback: "+callbackId+" = "+e);
|
console.log("Error in error callback: "+callbackId+" = "+e);
|
||||||
}
|
}
|
||||||
delete PhoneGap.callbacks[callbackId];
|
|
||||||
|
// Clear callback if not expecting any more results
|
||||||
|
if (!v.keepCallback) {
|
||||||
|
delete PhoneGap.callbacks[callbackId];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -478,7 +489,7 @@ PhoneGap.callbackSuccess = function(callbackId, args) {
|
|||||||
if (PhoneGap.callbacks[callbackId]) {
|
if (PhoneGap.callbacks[callbackId]) {
|
||||||
|
|
||||||
// If result is to be sent to callback
|
// If result is to be sent to callback
|
||||||
if ((args.status == PhoneGap.callbackStatus.OK) || (args.status == PhoneGap.callbackStatus.NEXT_RESULT)) {
|
if (args.status == PhoneGap.callbackStatus.OK) {
|
||||||
try {
|
try {
|
||||||
if (PhoneGap.callbacks[callbackId].success) {
|
if (PhoneGap.callbacks[callbackId].success) {
|
||||||
PhoneGap.callbacks[callbackId].success(args.message);
|
PhoneGap.callbacks[callbackId].success(args.message);
|
||||||
@ -490,7 +501,7 @@ PhoneGap.callbackSuccess = function(callbackId, args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clear callback if not expecting any more results
|
// Clear callback if not expecting any more results
|
||||||
if ((args.status == PhoneGap.callbackStatus.OK) || (args.status == PhoneGap.callbackStatus.NO_MORE_RESULTS)) {
|
if (!args.keepCallback) {
|
||||||
delete PhoneGap.callbacks[callbackId];
|
delete PhoneGap.callbacks[callbackId];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -512,7 +523,11 @@ PhoneGap.callbackError = function(callbackId, args) {
|
|||||||
catch (e) {
|
catch (e) {
|
||||||
console.log("Error in error callback: "+callbackId+" = "+e);
|
console.log("Error in error callback: "+callbackId+" = "+e);
|
||||||
}
|
}
|
||||||
delete PhoneGap.callbacks[callbackId];
|
|
||||||
|
// Clear callback if not expecting any more results
|
||||||
|
if (!args.keepCallback) {
|
||||||
|
delete PhoneGap.callbacks[callbackId];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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 int mQuality; // Compression quality hint (0-100: 0=low quality & high compression, 100=compress of max quality)
|
||||||
private Uri imageUri; // Uri of captured image
|
private Uri imageUri; // Uri of captured image
|
||||||
|
public String callbackId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
@ -63,6 +64,7 @@ public class CameraLauncher extends Plugin {
|
|||||||
public PluginResult execute(String action, JSONArray args, String callbackId) {
|
public PluginResult execute(String action, JSONArray args, String callbackId) {
|
||||||
PluginResult.Status status = PluginResult.Status.OK;
|
PluginResult.Status status = PluginResult.Status.OK;
|
||||||
String result = "";
|
String result = "";
|
||||||
|
this.callbackId = callbackId;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (action.equals("takePicture")) {
|
if (action.equals("takePicture")) {
|
||||||
@ -80,6 +82,9 @@ public class CameraLauncher extends Plugin {
|
|||||||
else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) {
|
else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) {
|
||||||
this.getImage(srcType, destType);
|
this.getImage(srcType, destType);
|
||||||
}
|
}
|
||||||
|
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
|
||||||
|
r.setKeepCallback(true);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
return new PluginResult(status, result);
|
return new PluginResult(status, result);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
@ -190,7 +195,7 @@ public class CameraLauncher extends Plugin {
|
|||||||
os.close();
|
os.close();
|
||||||
|
|
||||||
// Send Uri back to JavaScript for viewing image
|
// 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) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -227,7 +232,7 @@ public class CameraLauncher extends Plugin {
|
|||||||
|
|
||||||
// If sending filename back
|
// If sending filename back
|
||||||
else if (destType == FILE_URI) {
|
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) {
|
else if (resultCode == Activity.RESULT_CANCELED) {
|
||||||
@ -251,7 +256,7 @@ public class CameraLauncher extends Plugin {
|
|||||||
byte[] code = jpeg_data.toByteArray();
|
byte[] code = jpeg_data.toByteArray();
|
||||||
byte[] output = Base64.encodeBase64(code);
|
byte[] output = Base64.encodeBase64(code);
|
||||||
String js_out = new String(output);
|
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) {
|
catch(Exception e) {
|
||||||
@ -265,6 +270,6 @@ public class CameraLauncher extends Plugin {
|
|||||||
* @param err
|
* @param err
|
||||||
*/
|
*/
|
||||||
public void failPicture(String err) {
|
public void failPicture(String err) {
|
||||||
this.sendJavascript("navigator.camera.error('" + err + "');");
|
this.error(new PluginResult(PluginResult.Status.ERROR, err), this.callbackId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,11 +56,15 @@ public class Notification extends Plugin {
|
|||||||
}
|
}
|
||||||
else if (action.equals("alert")) {
|
else if (action.equals("alert")) {
|
||||||
this.alert(args.getString(0),args.getString(1),args.getString(2), callbackId);
|
this.alert(args.getString(0),args.getString(1),args.getString(2), callbackId);
|
||||||
return new PluginResult(PluginResult.Status.RESULT_TO_BE_SENT);
|
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
|
||||||
|
r.setKeepCallback(true);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
else if (action.equals("confirm")) {
|
else if (action.equals("confirm")) {
|
||||||
this.confirm(args.getString(0),args.getString(1),args.getString(2), callbackId);
|
this.confirm(args.getString(0),args.getString(1),args.getString(2), callbackId);
|
||||||
return new PluginResult(PluginResult.Status.RESULT_TO_BE_SENT);
|
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
|
||||||
|
r.setKeepCallback(true);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
else if (action.equals("activityStart")) {
|
else if (action.equals("activityStart")) {
|
||||||
this.activityStart(args.getString(0),args.getString(1));
|
this.activityStart(args.getString(0),args.getString(1));
|
||||||
|
@ -88,19 +88,16 @@ public final class PluginManager {
|
|||||||
// Call execute on the plugin so that it can do it's thing
|
// Call execute on the plugin so that it can do it's thing
|
||||||
PluginResult cr = plugin.execute(action, args, callbackId);
|
PluginResult cr = plugin.execute(action, args, callbackId);
|
||||||
int status = cr.getStatus();
|
int status = cr.getStatus();
|
||||||
|
|
||||||
// Check the success (OK, NEXT_RESULT, NO_MORE_RESULTS)
|
// If no result to be sent and keeping callback, then no need to sent back to JavaScript
|
||||||
if ((status == PluginResult.Status.OK.ordinal()) ||
|
if ((status == PluginResult.Status.NO_RESULT.ordinal()) && cr.getKeepCallback()) {
|
||||||
(status == PluginResult.Status.NEXT_RESULT.ordinal()) ||
|
}
|
||||||
(status == PluginResult.Status.NO_MORE_RESULTS.ordinal())
|
|
||||||
) {
|
// Check the success (OK, NO_RESULT & !KEEP_CALLBACK)
|
||||||
|
else if ((status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal())) {
|
||||||
ctx.sendJavascript(cr.toSuccessCallbackString(callbackId));
|
ctx.sendJavascript(cr.toSuccessCallbackString(callbackId));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If return result will be sent later, no need to sent back to JavaScript
|
|
||||||
else if (status == PluginResult.Status.RESULT_TO_BE_SENT.ordinal()) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// If error
|
// If error
|
||||||
else {
|
else {
|
||||||
ctx.sendJavascript(cr.toErrorCallbackString(callbackId));
|
ctx.sendJavascript(cr.toErrorCallbackString(callbackId));
|
||||||
@ -117,8 +114,8 @@ public final class PluginManager {
|
|||||||
// Call execute on the plugin so that it can do it's thing
|
// Call execute on the plugin so that it can do it's thing
|
||||||
cr = plugin.execute(action, args, callbackId);
|
cr = plugin.execute(action, args, callbackId);
|
||||||
|
|
||||||
// If return result will be sent later
|
// If no result to be sent and keeping callback, then no need to sent back to JavaScript
|
||||||
if (cr.getStatus() == PluginResult.Status.RESULT_TO_BE_SENT.ordinal()) {
|
if ((cr.getStatus() == PluginResult.Status.NO_RESULT.ordinal()) && cr.getKeepCallback()) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import org.json.JSONObject;
|
|||||||
public class PluginResult {
|
public class PluginResult {
|
||||||
private final int status;
|
private final int status;
|
||||||
private final String message;
|
private final String message;
|
||||||
|
private boolean keepCallback = false;
|
||||||
|
|
||||||
public PluginResult(Status status) {
|
public PluginResult(Status status) {
|
||||||
this.status = status.ordinal();
|
this.status = status.ordinal();
|
||||||
@ -49,6 +50,10 @@ public class PluginResult {
|
|||||||
this.message = ""+b;
|
this.message = ""+b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setKeepCallback(boolean b) {
|
||||||
|
this.keepCallback = b;
|
||||||
|
}
|
||||||
|
|
||||||
public int getStatus() {
|
public int getStatus() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -56,9 +61,13 @@ public class PluginResult {
|
|||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getKeepCallback() {
|
||||||
|
return this.keepCallback;
|
||||||
|
}
|
||||||
|
|
||||||
public String getJSONString() {
|
public String getJSONString() {
|
||||||
return "{ status: " + this.getStatus() + ", message: " + this.getMessage() + " }";
|
return "{status:" + this.status + ",message:" + this.message + ",keepCallback:" + this.keepCallback + "}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toSuccessCallbackString(String callbackId) {
|
public String toSuccessCallbackString(String callbackId) {
|
||||||
@ -70,6 +79,7 @@ public class PluginResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String[] StatusMessages = new String[] {
|
public static String[] StatusMessages = new String[] {
|
||||||
|
"No result",
|
||||||
"OK",
|
"OK",
|
||||||
"Class not found",
|
"Class not found",
|
||||||
"Illegal access",
|
"Illegal access",
|
||||||
@ -78,13 +88,11 @@ public class PluginResult {
|
|||||||
"IO error",
|
"IO error",
|
||||||
"Invalid action",
|
"Invalid action",
|
||||||
"JSON error",
|
"JSON error",
|
||||||
"Error",
|
"Error"
|
||||||
"Result to be sent later",
|
|
||||||
"Next result",
|
|
||||||
"No more results"
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public enum Status {
|
public enum Status {
|
||||||
|
NO_RESULT,
|
||||||
OK,
|
OK,
|
||||||
CLASS_NOT_FOUND_EXCEPTION,
|
CLASS_NOT_FOUND_EXCEPTION,
|
||||||
ILLEGAL_ACCESS_EXCEPTION,
|
ILLEGAL_ACCESS_EXCEPTION,
|
||||||
@ -93,9 +101,6 @@ public class PluginResult {
|
|||||||
IO_EXCEPTION,
|
IO_EXCEPTION,
|
||||||
INVALID_ACTION,
|
INVALID_ACTION,
|
||||||
JSON_EXCEPTION,
|
JSON_EXCEPTION,
|
||||||
ERROR,
|
ERROR
|
||||||
RESULT_TO_BE_SENT,
|
|
||||||
NEXT_RESULT,
|
|
||||||
NO_MORE_RESULTS
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user