diff options
Diffstat (limited to 'StoneIsland/plugins/com.parse.cordova.core.pushplugin/src/android/ParsePlugin.java')
| -rw-r--r-- | StoneIsland/plugins/com.parse.cordova.core.pushplugin/src/android/ParsePlugin.java | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/StoneIsland/plugins/com.parse.cordova.core.pushplugin/src/android/ParsePlugin.java b/StoneIsland/plugins/com.parse.cordova.core.pushplugin/src/android/ParsePlugin.java new file mode 100644 index 00000000..0ae772be --- /dev/null +++ b/StoneIsland/plugins/com.parse.cordova.core.pushplugin/src/android/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; + } + } +} |
