summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/android
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/platforms/android')
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js97
-rw-r--r--StoneIsland/platforms/android/libs/Parse-1.9.0.jarbin0 -> 866629 bytes
-rw-r--r--StoneIsland/platforms/android/libs/bolts-android-1.1.4.jarbin0 -> 47225 bytes
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js97
-rw-r--r--StoneIsland/platforms/android/res/values/parseplugin.xml5
-rw-r--r--StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java216
-rw-r--r--StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java61
7 files changed, 476 insertions, 0 deletions
diff --git a/StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js b/StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js
new file mode 100644
index 00000000..e732f80d
--- /dev/null
+++ b/StoneIsland/platforms/android/assets/www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js
@@ -0,0 +1,97 @@
+cordova.define("com.parse.cordova.core.pushplugin.ParsePlugin", function(require, exports, module) { var parsePlugin = {
+
+ registerCallback: function(ecb, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'registerCallback',
+ [ecb]
+ );
+ },
+
+ initialize: function(appId, clientKey, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'initialize',
+ [appId, clientKey]
+ );
+ },
+
+ getInstallationId: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'getInstallationId',
+ []
+ );
+ },
+
+ getInstallationObjectId: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'getInstallationObjectId',
+ []
+ );
+ },
+
+ getSubscriptions: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'getSubscriptions',
+ []
+ );
+ },
+
+ subscribe: function(channel, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'subscribe',
+ [ channel ]
+ );
+ },
+
+ unsubscribe: function(channel, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'unsubscribe',
+ [ channel ]
+ );
+ },
+
+ // iOS only
+ resetBadge: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'resetBadge',
+ []
+ );
+ },
+
+ // iOS only
+ trackEvent: function(name, dimensions, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'trackEvent',
+ [ name, dimensions ]
+ );
+ }
+};
+module.exports = parsePlugin;
+
+});
diff --git a/StoneIsland/platforms/android/libs/Parse-1.9.0.jar b/StoneIsland/platforms/android/libs/Parse-1.9.0.jar
new file mode 100644
index 00000000..90ab97cc
--- /dev/null
+++ b/StoneIsland/platforms/android/libs/Parse-1.9.0.jar
Binary files differ
diff --git a/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar b/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar
new file mode 100644
index 00000000..d04acb3b
--- /dev/null
+++ b/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar
Binary files differ
diff --git a/StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js b/StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js
new file mode 100644
index 00000000..e732f80d
--- /dev/null
+++ b/StoneIsland/platforms/android/platform_www/plugins/com.parse.cordova.core.pushplugin/www/cdv-plugin-parse.js
@@ -0,0 +1,97 @@
+cordova.define("com.parse.cordova.core.pushplugin.ParsePlugin", function(require, exports, module) { var parsePlugin = {
+
+ registerCallback: function(ecb, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'registerCallback',
+ [ecb]
+ );
+ },
+
+ initialize: function(appId, clientKey, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'initialize',
+ [appId, clientKey]
+ );
+ },
+
+ getInstallationId: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'getInstallationId',
+ []
+ );
+ },
+
+ getInstallationObjectId: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'getInstallationObjectId',
+ []
+ );
+ },
+
+ getSubscriptions: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'getSubscriptions',
+ []
+ );
+ },
+
+ subscribe: function(channel, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'subscribe',
+ [ channel ]
+ );
+ },
+
+ unsubscribe: function(channel, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'unsubscribe',
+ [ channel ]
+ );
+ },
+
+ // iOS only
+ resetBadge: function(successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'resetBadge',
+ []
+ );
+ },
+
+ // iOS only
+ trackEvent: function(name, dimensions, successCallback, errorCallback) {
+ cordova.exec(
+ successCallback,
+ errorCallback,
+ 'ParsePlugin',
+ 'trackEvent',
+ [ name, dimensions ]
+ );
+ }
+};
+module.exports = parsePlugin;
+
+});
diff --git a/StoneIsland/platforms/android/res/values/parseplugin.xml b/StoneIsland/platforms/android/res/values/parseplugin.xml
new file mode 100644
index 00000000..771d375e
--- /dev/null
+++ b/StoneIsland/platforms/android/res/values/parseplugin.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>
+<resources>
+ <string name="parse_app_id">GS82ZxpN8Mecpc53rsyu6aLLGK0W4CKi42J25DLB</string>
+ <string name="parse_client_key">hQRtQfsgimYnX5PMivtcdXCG9eZhESeyTr0Rd8Sv</string>
+</resources>
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java
new file mode 100644
index 00000000..0ae772be
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePlugin.java
@@ -0,0 +1,216 @@
+package org.apache.cordova.core;
+
+import android.app.Application;
+import android.util.Log;
+
+import java.util.Set;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.CordovaInterface;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import com.parse.Parse;
+import com.parse.ParseInstallation;
+import com.parse.PushService;
+import com.parse.ParsePush;
+
+import android.util.Log;
+
+public class ParsePlugin extends CordovaPlugin {
+
+ private static final String TAG = "ParsePlugin";
+ private static final String ACTION_INITIALIZE = "initialize";
+ private static final String ACTION_GET_INSTALLATION_ID = "getInstallationId";
+ private static final String ACTION_GET_INSTALLATION_OBJECT_ID = "getInstallationObjectId";
+ private static final String ACTION_GET_SUBSCRIPTIONS = "getSubscriptions";
+ private static final String ACTION_SUBSCRIBE = "subscribe";
+ private static final String ACTION_UNSUBSCRIBE = "unsubscribe";
+ private static final String ACTION_REGISTER_CALLBACK = "registerCallback";
+
+ private static CordovaWebView sWebView;
+ private static String sEventCallback = null;
+ private static boolean sForeground = false;
+ private static JSONObject sLaunchNotification = null;
+
+ public static void initializeParseWithApplication(Application app) {
+ String appId = getStringByKey(app, "parse_app_id");
+ String clientKey = getStringByKey(app, "parse_client_key");
+ Parse.enableLocalDatastore(app);
+ Log.d(TAG, "Initializing with parse_app_id: " + appId + " and parse_client_key:" + clientKey);
+ Parse.initialize(app, appId, clientKey);
+ }
+
+ private static String getStringByKey(Application app, String key) {
+ int resourceId = app.getResources().getIdentifier(key, "string", app.getPackageName());
+ return app.getString(resourceId);
+ }
+
+ @Override
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ if (action.equals(ACTION_REGISTER_CALLBACK)) {
+ this.registerCallback(callbackContext, args);
+ return true;
+ }
+ if (action.equals(ACTION_INITIALIZE)) {
+ this.initialize(callbackContext, args);
+ return true;
+ }
+ if (action.equals(ACTION_GET_INSTALLATION_ID)) {
+ this.getInstallationId(callbackContext);
+ return true;
+ }
+
+ if (action.equals(ACTION_GET_INSTALLATION_OBJECT_ID)) {
+ this.getInstallationObjectId(callbackContext);
+ return true;
+ }
+ if (action.equals(ACTION_GET_SUBSCRIPTIONS)) {
+ this.getSubscriptions(callbackContext);
+ return true;
+ }
+ if (action.equals(ACTION_SUBSCRIBE)) {
+ this.subscribe(args.getString(0), callbackContext);
+ return true;
+ }
+ if (action.equals(ACTION_UNSUBSCRIBE)) {
+ this.unsubscribe(args.getString(0), callbackContext);
+ return true;
+ }
+ return false;
+ }
+
+ private void registerCallback(final CallbackContext callbackContext, final JSONArray args) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ sEventCallback = args.getString(0);
+ callbackContext.success();
+ // if the app was opened from a notification, handle it now that the device is ready
+ handleLaunchNotification();
+ } catch (JSONException e) {
+ callbackContext.error("JSONException");
+ }
+ }
+ });
+ }
+
+ private void initialize(final CallbackContext callbackContext, final JSONArray args) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ try {
+ String appId = args.getString(0);
+ String clientKey = args.getString(1);
+ Parse.initialize(cordova.getActivity(), appId, clientKey);
+ ParseInstallation.getCurrentInstallation().saveInBackground();
+ callbackContext.success();
+ } catch (JSONException e) {
+ callbackContext.error("JSONException");
+ }
+ }
+ });
+ }
+
+ private void getInstallationId(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ String installationId = ParseInstallation.getCurrentInstallation().getInstallationId();
+ callbackContext.success(installationId);
+ }
+ });
+ }
+
+ private void getInstallationObjectId(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ String objectId = ParseInstallation.getCurrentInstallation().getObjectId();
+ callbackContext.success(objectId);
+ }
+ });
+ }
+
+ private void getSubscriptions(final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ Set<String> subscriptions = PushService.getSubscriptions(cordova.getActivity());
+ callbackContext.success(subscriptions.toString());
+ }
+ });
+ }
+
+ private void subscribe(final String channel, final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ ParsePush.subscribeInBackground(channel);
+ callbackContext.success();
+ }
+ });
+ }
+
+ private void unsubscribe(final String channel, final CallbackContext callbackContext) {
+ cordova.getThreadPool().execute(new Runnable() {
+ public void run() {
+ ParsePush.unsubscribeInBackground(channel);
+ callbackContext.success();
+ }
+ });
+ }
+
+ /*
+ * Use the cordova bridge to call the jsCB and pass it jsonPayload as param
+ */
+ public static void javascriptEventCallback(JSONObject jsonPayload) {
+ if (sEventCallback != null && !sEventCallback.isEmpty() && sWebView != null) {
+ String snippet = "javascript:" + sEventCallback + "(" + jsonPayload.toString() + ")";
+ Log.v(TAG, "javascriptCB: " + snippet);
+ sWebView.sendJavascript(snippet);
+ }
+ }
+
+ @Override
+ public void initialize(CordovaInterface cordova, CordovaWebView webView) {
+ super.initialize(cordova, webView);
+ sEventCallback = null;
+ sWebView = this.webView;
+ sForeground = true;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ sEventCallback = null;
+ sWebView = null;
+ sForeground = false;
+ }
+
+ @Override
+ public void onPause(boolean multitasking) {
+ super.onPause(multitasking);
+ sForeground = false;
+ }
+
+ @Override
+ public void onResume(boolean multitasking) {
+ super.onResume(multitasking);
+ sForeground = true;
+ }
+
+ public static boolean isInForeground() {
+ return sForeground;
+ }
+
+ public static void setLaunchNotification(JSONObject jsonPayload) {
+ sLaunchNotification = jsonPayload;
+ }
+
+ private void handleLaunchNotification() {
+ if (isInForeground() && sLaunchNotification != null) {
+ javascriptEventCallback(sLaunchNotification);
+ sLaunchNotification = null;
+ }
+ }
+}
diff --git a/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java
new file mode 100644
index 00000000..fa917a48
--- /dev/null
+++ b/StoneIsland/platforms/android/src/org/apache/cordova/core/ParsePluginReceiver.java
@@ -0,0 +1,61 @@
+package org.apache.cordova.core;
+
+import com.parse.ParsePushBroadcastReceiver;
+import com.parse.ParseAnalytics;
+
+import android.app.Activity;
+import android.app.TaskStackBuilder;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.net.Uri;
+import android.util.Log;
+
+import org.json.JSONObject;
+import org.json.JSONException;
+
+public class ParsePluginReceiver extends ParsePushBroadcastReceiver
+{
+ private static final String TAG = "ParsePluginReceiver";
+ private static final String RECEIVED_IN_FOREGROUND = "receivedInForeground";
+
+ @Override
+ protected void onPushReceive(Context context, Intent intent) {
+ JSONObject pushData = getPushData(intent);
+
+ if (pushData != null) {
+ if (ParsePlugin.isInForeground()) {
+ ParsePlugin.javascriptEventCallback(pushData);
+ } else {
+ super.onPushReceive(context, intent);
+ }
+ }
+ }
+
+ @Override
+ protected void onPushOpen(Context context, Intent intent) {
+ JSONObject pushData = getPushData(intent);
+
+ if (pushData != null) {
+ if (ParsePlugin.isInForeground()) {
+ ParseAnalytics.trackAppOpened(intent);
+ ParsePlugin.javascriptEventCallback(pushData);
+ } else {
+ super.onPushOpen(context, intent);
+ ParsePlugin.setLaunchNotification(pushData);
+ }
+ }
+ }
+
+ private static JSONObject getPushData(Intent intent){
+ JSONObject pushData = null;
+ try {
+ pushData = new JSONObject(intent.getStringExtra("com.parse.Data"));
+ pushData.put(RECEIVED_IN_FOREGROUND, ParsePlugin.isInForeground());
+ } catch (JSONException e) {
+ Log.e(TAG, "JSONException while parsing push data:", e);
+ } finally{
+ return pushData;
+ }
+ }
+}