Chromium Code Reviews| 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); |
| } |