You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by br...@apache.org on 2013/01/18 18:33:40 UTC

[1/8] android commit: Mostly working arraybuffer changes, needs Base64.

Mostly working arraybuffer changes, needs Base64.


Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/f145605c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/f145605c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/f145605c

Branch: refs/heads/master
Commit: f145605c630a6733f664ece6981e624b586259e7
Parents: 29230d0
Author: Braden Shepherdson <br...@chromium.org>
Authored: Tue Jan 15 11:16:32 2013 -0500
Committer: Braden Shepherdson <br...@chromium.org>
Committed: Tue Jan 15 11:16:32 2013 -0500

----------------------------------------------------------------------
 framework/src/org/apache/cordova/BinaryEcho.java   |   67 +++++++++++++++
 .../org/apache/cordova/NativeToJsMessageQueue.java |   22 ++++-
 .../src/org/apache/cordova/api/PluginResult.java   |   14 +++-
 3 files changed, 98 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f145605c/framework/src/org/apache/cordova/BinaryEcho.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/BinaryEcho.java b/framework/src/org/apache/cordova/BinaryEcho.java
new file mode 100644
index 0000000..1a25f6e
--- /dev/null
+++ b/framework/src/org/apache/cordova/BinaryEcho.java
@@ -0,0 +1,67 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+package org.apache.cordova;
+
+import org.apache.cordova.api.CallbackContext;
+import org.apache.cordova.api.CordovaPlugin;
+import org.apache.cordova.api.PluginResult;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.util.Log;
+
+public class BinaryEcho extends CordovaPlugin {
+
+    /**
+     * Executes the request.
+     *
+     * @param action        	The action to execute.
+     * @param args          	JSONArry of arguments for the plugin.
+     * @param callbackContext 	The callback context used when calling back into JavaScript.
+     * @return              	True if the action was valid, false if not.
+     */
+    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
+        try {
+            if (action.equals("echo")) {
+                //CordovaJSONArray cdvArgs = (CordovaJSONArray) args;
+                //byte[] data = cdvArgs.getArrayBuffer(0);
+                Log.i("Braden", "BinaryEcho top");
+                String str = args.getString(0);
+                byte[] data = args.getString(0).getBytes();
+                Log.i("Braden", "byte[] retrieved: " + data.length);
+                for (int i = 0; i < 10; i++) {
+                    Log.i("Braden", str.substring(i, i+1) + " " + data[i]);
+                }
+
+                // Don't return any result now, since status results will be sent when events come in from broadcast receiver
+                PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, data);
+                Log.i("Braden", "PluginResult created");
+                callbackContext.sendPluginResult(pluginResult);
+                Log.i("Braden", "sendPluginResult() complete");
+                return true;
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        return false;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f145605c/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
index 3146623..27de8ed 100755
--- a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
+++ b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
@@ -130,9 +130,13 @@ public class NativeToJsMessageQueue {
     }
     
     private void packMessage(JsMessage message, StringBuilder sb) {
-        sb.append(message.calculateEncodedLength())
+        int len = message.calculateEncodedLength();
+        Log.i("Braden", "Length " + len);
+        sb.append(len)
           .append(' ');
         message.encodeAsMessage(sb);
+        Log.i("Braden", "End of packMessage");
+        Log.i("Braden", sb.toString());
     }
     
     /**
@@ -166,7 +170,8 @@ public class NativeToJsMessageQueue {
                 // Attach a char to indicate that there are more messages pending.
                 sb.append('*');
             }
-            return sb.toString();
+            String ret = sb.toString();
+            return ret;
         }
     }
     
@@ -209,7 +214,8 @@ public class NativeToJsMessageQueue {
             for (int i = willSendAllMessages ? 1 : 0; i < numMessagesToSend; ++i) {
                 sb.append('}');
             }
-            return sb.toString();
+            String ret = sb.toString();
+            return ret;
         }
     }   
 
@@ -406,6 +412,9 @@ public class NativeToJsMessageQueue {
                 case PluginResult.MESSAGE_TYPE_STRING: // s
                     ret += 1 + pluginResult.getStrMessage().length();
                     break;
+                case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
+                    ret += 1 + pluginResult.getMessage().length();
+                    break;
                 case PluginResult.MESSAGE_TYPE_JSON:
                 default:
                     ret += pluginResult.getMessage().length();
@@ -445,6 +454,13 @@ public class NativeToJsMessageQueue {
                     sb.append('s');
                     sb.append(pluginResult.getStrMessage());
                     break;
+                case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
+                    Log.i("Braden", "ArrayBuffer response encoding");
+                    sb.append('A');
+                    String temp = pluginResult.getMessage();
+                    Log.i("Braden", temp);
+                    sb.append(temp);
+                    break;
                 case PluginResult.MESSAGE_TYPE_JSON:
                 default:
                     sb.append(pluginResult.getMessage()); // [ or {

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f145605c/framework/src/org/apache/cordova/api/PluginResult.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginResult.java b/framework/src/org/apache/cordova/api/PluginResult.java
index 0058f37..610da97 100755
--- a/framework/src/org/apache/cordova/api/PluginResult.java
+++ b/framework/src/org/apache/cordova/api/PluginResult.java
@@ -21,6 +21,8 @@ package org.apache.cordova.api;
 import org.json.JSONArray;
 import org.json.JSONObject;
 
+import android.util.Log;
+
 public class PluginResult {
     private final int status;
     private final int messageType;
@@ -68,6 +70,13 @@ public class PluginResult {
         this.encodedMessage = Boolean.toString(b);
     }
 
+    public PluginResult(Status status, byte[] data) {
+        this.status = status.ordinal();
+        this.messageType = MESSAGE_TYPE_ARRAYBUFFER;
+        this.encodedMessage = new String(data);
+        Log.i("Braden", "Message.length() = " + this.encodedMessage.length());
+    }
+
     public void setKeepCallback(boolean b) {
         this.keepCallback = b;
     }
@@ -79,7 +88,7 @@ public class PluginResult {
     public int getMessageType() {
         return messageType;
     }
-    
+
     public String getMessage() {
         if (encodedMessage == null) {
             encodedMessage = JSONObject.quote(strMessage);
@@ -134,7 +143,8 @@ public class PluginResult {
     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 final int MESSAGE_TYPE_ARRAYBUFFER = 6;
+
     public static String[] StatusMessages = new String[] {
         "No result",
         "OK",