diff options
Diffstat (limited to 'StoneIsland/platforms/android')
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 Binary files differnew file mode 100644 index 00000000..90ab97cc --- /dev/null +++ b/StoneIsland/platforms/android/libs/Parse-1.9.0.jar diff --git a/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar b/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar Binary files differnew file mode 100644 index 00000000..d04acb3b --- /dev/null +++ b/StoneIsland/platforms/android/libs/bolts-android-1.1.4.jar 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; + } + } +} |
