From 0eee2293dc2604d35b786023cdd443c80e0b2c2e Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Thu, 25 Oct 2012 12:05:39 -0400 Subject: [PATCH] Add support for null PluginResult payloads. https://issues.apache.org/jira/browse/CB-1744 --- framework/src/org/apache/cordova/Echo.java | 2 +- .../apache/cordova/NativeToJsMessageQueue.java | 17 +++++++---------- .../org/apache/cordova/api/PluginResult.java | 3 ++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/framework/src/org/apache/cordova/Echo.java b/framework/src/org/apache/cordova/Echo.java index 78146e79..5f1fed66 100644 --- a/framework/src/org/apache/cordova/Echo.java +++ b/framework/src/org/apache/cordova/Echo.java @@ -27,7 +27,7 @@ public class Echo extends CordovaPlugin { @Override public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { - final String result = args.getString(0); + final String result = args.isNull(0) ? null : args.getString(0); if ("echo".equals(action)) { callbackContext.success(result); return true; diff --git a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java index 03a69b1d..4f9f9ad1 100755 --- a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java +++ b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java @@ -391,19 +391,15 @@ public class NativeToJsMessageQueue { int statusLen = String.valueOf(pluginResult.getStatus()).length(); int ret = 2 + statusLen + 1 + jsPayloadOrCallbackId.length() + 1; switch (pluginResult.getMessageType()) { - case PluginResult.MESSAGE_TYPE_BOOLEAN: + case PluginResult.MESSAGE_TYPE_BOOLEAN: // f or t + case PluginResult.MESSAGE_TYPE_NULL: // N ret += 1; break; case PluginResult.MESSAGE_TYPE_NUMBER: // n ret += 1 + pluginResult.getMessage().length(); break; case PluginResult.MESSAGE_TYPE_STRING: // s - if (pluginResult.getStrMessage() == null) { - ret += 1; - } - else { - ret += 1 + pluginResult.getStrMessage().length(); - } + ret += 1 + pluginResult.getStrMessage().length(); break; case PluginResult.MESSAGE_TYPE_JSON: default: @@ -433,15 +429,16 @@ public class NativeToJsMessageQueue { case PluginResult.MESSAGE_TYPE_BOOLEAN: sb.append(pluginResult.getMessage().charAt(0)); // t or f. break; + case PluginResult.MESSAGE_TYPE_NULL: // N + sb.append('N'); + break; case PluginResult.MESSAGE_TYPE_NUMBER: // n sb.append('n') .append(pluginResult.getMessage()); break; case PluginResult.MESSAGE_TYPE_STRING: // s sb.append('s'); - if (pluginResult.getStrMessage() != null) { - sb.append(pluginResult.getStrMessage()); - } + sb.append(pluginResult.getStrMessage()); break; case PluginResult.MESSAGE_TYPE_JSON: default: diff --git a/framework/src/org/apache/cordova/api/PluginResult.java b/framework/src/org/apache/cordova/api/PluginResult.java index 28c7b980..0058f375 100755 --- a/framework/src/org/apache/cordova/api/PluginResult.java +++ b/framework/src/org/apache/cordova/api/PluginResult.java @@ -34,7 +34,7 @@ public class PluginResult { public PluginResult(Status status, String message) { this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_STRING; + this.messageType = message == null ? MESSAGE_TYPE_NULL : MESSAGE_TYPE_STRING; this.strMessage = message; } @@ -133,6 +133,7 @@ public class PluginResult { public static final int MESSAGE_TYPE_JSON = 2; public static final int MESSAGE_TYPE_NUMBER = 3; public static final int MESSAGE_TYPE_BOOLEAN = 4; + public static final int MESSAGE_TYPE_NULL = 5; public static String[] StatusMessages = new String[] { "No result",