OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/gcm_driver/gcm_driver_android.h" | 5 #include "components/gcm_driver/gcm_driver_android.h" |
6 | 6 |
| 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_array.h" |
| 9 #include "base/android/jni_string.h" |
7 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
8 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "jni/GCMDriver_jni.h" |
9 | 13 |
10 namespace gcm { | 14 using base::android::AppendJavaStringArrayToStringVector; |
11 static void Java_GCMDriver_doNothing(JNIEnv* env) ALLOW_UNUSED; | 15 using base::android::AttachCurrentThread; |
12 } // namespace gcm | 16 using base::android::ConvertJavaStringToUTF8; |
13 | 17 using base::android::ConvertUTF8ToJavaString; |
14 // Must come after the ALLOW_UNUSED declaration. | 18 using base::android::ToJavaArrayOfStrings; |
15 #include "jni/GCMDriver_jni.h" | |
16 | 19 |
17 namespace gcm { | 20 namespace gcm { |
18 | 21 |
19 GCMDriverAndroid::GCMDriverAndroid() { | 22 GCMDriverAndroid::GCMDriverAndroid() { |
| 23 JNIEnv* env = AttachCurrentThread(); |
| 24 java_ref_.Reset( |
| 25 Java_GCMDriver_create(env, |
| 26 reinterpret_cast<intptr_t>(this), |
| 27 base::android::GetApplicationContext())); |
20 } | 28 } |
21 | 29 |
22 GCMDriverAndroid::~GCMDriverAndroid() { | 30 GCMDriverAndroid::~GCMDriverAndroid() { |
| 31 JNIEnv* env = AttachCurrentThread(); |
| 32 Java_GCMDriver_destroy(env, java_ref_.obj()); |
23 } | 33 } |
24 | 34 |
25 void GCMDriverAndroid::Enable() { | 35 void GCMDriverAndroid::Enable() { |
26 } | 36 } |
27 | 37 |
28 void GCMDriverAndroid::Disable() { | 38 void GCMDriverAndroid::Disable() { |
29 } | 39 } |
30 | 40 |
31 void GCMDriverAndroid::Register(const std::string& app_id, | 41 void GCMDriverAndroid::Register(const std::string& app_id, |
32 const std::vector<std::string>& sender_ids, | 42 const std::vector<std::string>& sender_ids, |
33 const RegisterCallback& callback) { | 43 const RegisterCallback& callback) { |
34 // TODO(johnme): Hook up to Android GCM API via JNI. | 44 // TODO(johnme): Store callback. |
35 NOTIMPLEMENTED(); | 45 |
| 46 JNIEnv* env = AttachCurrentThread(); |
| 47 Java_GCMDriver_register( |
| 48 env, java_ref_.obj(), |
| 49 ConvertUTF8ToJavaString(env, app_id).Release(), |
| 50 ToJavaArrayOfStrings(env, sender_ids).obj()); |
36 } | 51 } |
37 | 52 |
38 void GCMDriverAndroid::Unregister(const std::string& app_id, | 53 void GCMDriverAndroid::Unregister(const std::string& app_id, |
39 const UnregisterCallback& callback) { | 54 const UnregisterCallback& callback) { |
40 // TODO(johnme): Hook up to Android GCM API via JNI. | 55 // TODO(johnme): Store callback. |
41 NOTIMPLEMENTED(); | 56 |
| 57 JNIEnv* env = AttachCurrentThread(); |
| 58 Java_GCMDriver_unregister( |
| 59 env, java_ref_.obj(), |
| 60 ConvertUTF8ToJavaString(env, app_id).Release()); |
42 } | 61 } |
43 | 62 |
44 void GCMDriverAndroid::Send(const std::string& app_id, | 63 void GCMDriverAndroid::Send(const std::string& app_id, |
45 const std::string& receiver_id, | 64 const std::string& receiver_id, |
46 const GCMClient::OutgoingMessage& message, | 65 const GCMClient::OutgoingMessage& message, |
47 const SendCallback& callback) { | 66 const SendCallback& callback) { |
48 NOTIMPLEMENTED(); | 67 NOTIMPLEMENTED(); |
49 } | 68 } |
50 | 69 |
51 GCMClient* GCMDriverAndroid::GetGCMClientForTesting() const { | 70 GCMClient* GCMDriverAndroid::GetGCMClientForTesting() const { |
(...skipping 17 matching lines...) Expand all Loading... |
69 | 88 |
70 void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback, | 89 void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback, |
71 bool recording) { | 90 bool recording) { |
72 NOTIMPLEMENTED(); | 91 NOTIMPLEMENTED(); |
73 } | 92 } |
74 | 93 |
75 std::string GCMDriverAndroid::SignedInUserName() const { | 94 std::string GCMDriverAndroid::SignedInUserName() const { |
76 return std::string(); | 95 return std::string(); |
77 } | 96 } |
78 | 97 |
| 98 void GCMDriverAndroid::OnRegisterFinished(JNIEnv* env, |
| 99 jobject obj, |
| 100 jstring j_app_id, |
| 101 jstring j_registration_id, |
| 102 jboolean success) { |
| 103 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 104 std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id); |
| 105 GCMClient::Result result ALLOW_UNUSED = success ? GCMClient::SUCCESS |
| 106 : GCMClient::UNKNOWN_ERROR; |
| 107 |
| 108 NOTIMPLEMENTED(); // TODO(johnme): Fire callback. |
| 109 } |
| 110 |
| 111 void GCMDriverAndroid::OnUnregisterFinished(JNIEnv* env, |
| 112 jobject obj, |
| 113 jstring j_app_id, |
| 114 jboolean success) { |
| 115 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 116 GCMClient::Result result ALLOW_UNUSED = success ? GCMClient::SUCCESS |
| 117 : GCMClient::UNKNOWN_ERROR; |
| 118 |
| 119 NOTIMPLEMENTED(); // TODO(johnme): Fire callback. |
| 120 } |
| 121 |
| 122 void GCMDriverAndroid::OnMessageReceived(JNIEnv* env, |
| 123 jobject obj, |
| 124 jstring j_app_id, |
| 125 jstring j_sender_id, |
| 126 jstring j_collapse_key, |
| 127 jobjectArray j_data_keys_and_values) { |
| 128 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 129 GCMClient::IncomingMessage message; |
| 130 message.sender_id = ConvertJavaStringToUTF8(env, j_sender_id); |
| 131 message.collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key); |
| 132 // Expand j_data_keys_and_values from array to map. |
| 133 std::vector<std::string> data_keys_and_values; |
| 134 AppendJavaStringArrayToStringVector(env, |
| 135 j_data_keys_and_values, |
| 136 &data_keys_and_values); |
| 137 for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) { |
| 138 message.data[data_keys_and_values[i]] = data_keys_and_values[i+1]; |
| 139 } |
| 140 |
| 141 NOTIMPLEMENTED(); // TODO(johnme): Notify app handler. |
| 142 } |
| 143 |
| 144 void GCMDriverAndroid::OnMessagesDeleted(JNIEnv* env, |
| 145 jobject obj, |
| 146 jstring j_app_id) { |
| 147 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 148 |
| 149 NOTIMPLEMENTED(); // TODO(johnme): Notify app handler. |
| 150 } |
| 151 |
79 // static | 152 // static |
80 bool GCMDriverAndroid::RegisterBindings(JNIEnv* env) { | 153 bool GCMDriverAndroid::RegisterBindings(JNIEnv* env) { |
81 return RegisterNativesImpl(env); | 154 return RegisterNativesImpl(env); |
82 } | 155 } |
83 | 156 |
84 } // namespace gcm | 157 } // namespace gcm |
OLD | NEW |