Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(365)

Unified Diff: components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java

Issue 312683004: JNI bindings for GCMDriverAndroid (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renamed OnMessagesDeletedByServer Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/gcm_driver/gcm_driver_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
diff --git a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
index 13b975201dae9d497fc98388a6ab8973c3fbc8e0..b931881ccd05b1d717bc008d0993371a890c400c 100644
--- a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
+++ b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
@@ -4,19 +4,96 @@
package org.chromium.components.gcm_driver;
+import android.content.Context;
+import android.os.Bundle;
+
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
+import java.util.ArrayList;
+import java.util.List;
+
/**
- * This will provide an implementation of GCMDriver using the Java GCM APIs.
+ * An implementation of GCMDriver using Android's Java GCM APIs.
+ * Threading model: all calls to/from C++ happen on the UI thread.
*/
@JNINamespace("gcm")
public final class GCMDriver {
- /*
- * JNI Generator complains if there are no methods exposed to JNI.
- * TODO(johnme): Replace this with something useful.
+ private long mNativeGCMDriverAndroid;
+ private Context mContext;
Michael van Ouwerkerk 2014/06/04 12:19:14 final?
+
+ private GCMDriver(long nativeGCMDriverAndroid, Context context) {
+ mNativeGCMDriverAndroid = nativeGCMDriverAndroid;
+ mContext = context;
+ }
+
+ /**
+ * Create a GCMDriver object, which is owned by GCMDriverAndroid
+ * on the C++ side.
+ *
+ * @param nativeGCMDriverAndroid The C++ object that owns us.
+ * @param context The app context.
*/
@CalledByNative
- private static void doNothing() {
+ private static GCMDriver create(long nativeGCMDriverAndroid,
+ Context context) {
+ return new GCMDriver(nativeGCMDriverAndroid, context);
}
+
+ /**
+ * Called when our C++ counterpart is deleted. Clear the handle to our
+ * native C++ object, ensuring it's never called.
+ */
+ @CalledByNative
+ private void destroy() {
+ mNativeGCMDriverAndroid = 0;
+ }
+
+ @CalledByNative
+ private void register(String appId, String[] senderIds) {
+ // TODO(johnme): Actually try to register.
+ nativeOnRegisterFinished(mNativeGCMDriverAndroid, appId, "", false);
+ }
+ @CalledByNative
+ private void unregister(String appId) {
+ // TODO(johnme): Actually try to unregister.
+ nativeOnUnregisterFinished(mNativeGCMDriverAndroid, appId, false);
+ }
+
+ public void onRegistered(String appId, String registrationId) {
+ nativeOnRegisterFinished(mNativeGCMDriverAndroid, appId, registrationId, true);
+ }
+
+ public void onUnregistered(String appId) {
+ nativeOnUnregisterFinished(mNativeGCMDriverAndroid, appId, true);
+ }
+
+ public void onMessageReceived(String appId, Bundle extras) {
+ String senderId = extras.getString("from");
+ String collapseKey = extras.getString("collapse_key");
+
+ List<String> dataKeysAndValues = new ArrayList<String>();
+ for (String key : extras.keySet()) {
+ // TODO(johnme): Check there aren't other default keys that we need to exclude.
+ if (key == "from" || key == "collapse_key")
Michael van Ouwerkerk 2014/06/04 12:19:14 That's the second time you're using these strings.
+ continue;
+ dataKeysAndValues.add(key);
+ dataKeysAndValues.add(extras.getString(key));
+ }
+
+ nativeOnMessageReceived(mNativeGCMDriverAndroid, appId, senderId, collapseKey,
+ dataKeysAndValues.toArray(new String[dataKeysAndValues.size()]));
+ }
+
+ public void onMessagesDeleted(String appId) {
+ nativeOnMessagesDeleted(mNativeGCMDriverAndroid, appId);
+ }
+
+ private native void nativeOnRegisterFinished(long nativeGCMDriverAndroid, String appId,
+ String registrationId, boolean success);
+ private native void nativeOnUnregisterFinished(long nativeGCMDriverAndroid, String appId,
+ boolean success);
+ private native void nativeOnMessageReceived(long nativeGCMDriverAndroid, String appId,
+ String senderId, String collapseKey, String[] dataKeysAndValues);
+ private native void nativeOnMessagesDeleted(long nativeGCMDriverAndroid, String appId);
}
« no previous file with comments | « no previous file | components/gcm_driver/gcm_driver_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698