| 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..0b90a71b89ee874d369c0ad8c5352fc2ad30ad83 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;
|
| +
|
| + 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")
|
| + continue;
|
| + dataKeysAndValues.add(key);
|
| + dataKeysAndValues.add(extras.getString(key));
|
| + }
|
| +
|
| + nativeOnMessageReceived(mNativeGCMDriverAndroid, appId, senderId, collapseKey,
|
| + dataKeysAndValues.toArray(new String[dataKeysAndValues.size()]));
|
| + }
|
| +
|
| + public void onMessagesDeletedByServer(String appId) {
|
| + nativeOnMessagesDeletedByServer(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 nativeOnMessagesDeletedByServer(long nativeGCMDriverAndroid, String appId);
|
| }
|
|
|