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

Unified Diff: components/gcm_driver/gcm_driver_android.cc

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
Index: components/gcm_driver/gcm_driver_android.cc
diff --git a/components/gcm_driver/gcm_driver_android.cc b/components/gcm_driver/gcm_driver_android.cc
index 76f187e60b4e4c25da971236603d7f4065c95876..f88c0c2d82f33642d43fea2cd819b54c89228e55 100644
--- a/components/gcm_driver/gcm_driver_android.cc
+++ b/components/gcm_driver/gcm_driver_android.cc
@@ -4,22 +4,32 @@
#include "components/gcm_driver/gcm_driver_android.h"
+#include "base/android/jni_android.h"
+#include "base/android/jni_array.h"
+#include "base/android/jni_string.h"
#include "base/compiler_specific.h"
#include "base/logging.h"
-
-namespace gcm {
-static void Java_GCMDriver_doNothing(JNIEnv* env) ALLOW_UNUSED;
-} // namespace gcm
-
-// Must come after the ALLOW_UNUSED declaration.
#include "jni/GCMDriver_jni.h"
+using base::android::AppendJavaStringArrayToStringVector;
+using base::android::AttachCurrentThread;
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::ToJavaArrayOfStrings;
+
namespace gcm {
-GCMDriverAndroid::GCMDriverAndroid() {
+ GCMDriverAndroid::GCMDriverAndroid() {
+ JNIEnv* env = AttachCurrentThread();
+ java_ref_.Reset(
+ Java_GCMDriver_create(env,
+ reinterpret_cast<intptr_t>(this),
+ base::android::GetApplicationContext()));
}
GCMDriverAndroid::~GCMDriverAndroid() {
+ JNIEnv* env = AttachCurrentThread();
+ Java_GCMDriver_destroy(env, java_ref_.obj());
}
void GCMDriverAndroid::Enable() {
@@ -31,14 +41,23 @@ void GCMDriverAndroid::Disable() {
void GCMDriverAndroid::Register(const std::string& app_id,
const std::vector<std::string>& sender_ids,
const RegisterCallback& callback) {
- // TODO(johnme): Hook up to Android GCM API via JNI.
- NOTIMPLEMENTED();
+ // TODO(johnme): Store callback.
+
+ JNIEnv* env = AttachCurrentThread();
+ Java_GCMDriver_register(
+ env, java_ref_.obj(),
+ ConvertUTF8ToJavaString(env, app_id).Release(),
+ ToJavaArrayOfStrings(env, sender_ids).obj());
}
void GCMDriverAndroid::Unregister(const std::string& app_id,
const UnregisterCallback& callback) {
- // TODO(johnme): Hook up to Android GCM API via JNI.
- NOTIMPLEMENTED();
+ // TODO(johnme): Store callback.
+
+ JNIEnv* env = AttachCurrentThread();
+ Java_GCMDriver_unregister(
+ env, java_ref_.obj(),
+ ConvertUTF8ToJavaString(env, app_id).Release());
}
void GCMDriverAndroid::Send(const std::string& app_id,
@@ -76,6 +95,60 @@ std::string GCMDriverAndroid::SignedInUserName() const {
return std::string();
}
+void GCMDriverAndroid::OnRegisterFinished(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id,
+ jstring j_registration_id,
+ jboolean success) {
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+ std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id);
+ GCMClient::Result result ALLOW_UNUSED = success ? GCMClient::SUCCESS
+ : GCMClient::UNKNOWN_ERROR;
+
+ NOTIMPLEMENTED(); // TODO(johnme): Fire callback.
+}
+
+void GCMDriverAndroid::OnUnregisterFinished(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id,
+ jboolean success) {
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+ GCMClient::Result result ALLOW_UNUSED = success ? GCMClient::SUCCESS
+ : GCMClient::UNKNOWN_ERROR;
+
+ NOTIMPLEMENTED(); // TODO(johnme): Fire callback.
+}
+
+void GCMDriverAndroid::OnMessageReceived(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id,
+ jstring j_sender_id,
+ jstring j_collapse_key,
+ jobjectArray j_data_keys_and_values) {
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+ GCMClient::IncomingMessage message;
+ message.sender_id = ConvertJavaStringToUTF8(env, j_sender_id);
+ message.collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key);
+ // Expand j_data_keys_and_values from array to map.
+ std::vector<std::string> data_keys_and_values;
+ AppendJavaStringArrayToStringVector(env,
+ j_data_keys_and_values,
+ &data_keys_and_values);
+ for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) {
+ message.data[data_keys_and_values[i]] = data_keys_and_values[i+1];
+ }
+
+ NOTIMPLEMENTED(); // TODO(johnme): Notify app handler.
+}
+
+void GCMDriverAndroid::OnMessagesDeleted(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id) {
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+
+ NOTIMPLEMENTED(); // TODO(johnme): Notify app handler.
+}
+
// static
bool GCMDriverAndroid::RegisterBindings(JNIEnv* env) {
return RegisterNativesImpl(env);

Powered by Google App Engine
This is Rietveld 408576698