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); |
} |