@@ -39,6 +39,13 @@ METHOD_LOOKUP_DEFINITION(
3939 " com/google/firebase/firestore/internal/cpp/QueryEventListener" ,
4040 QUERY_EVENT_LISTENER_METHODS)
4141
42+ #define VOID_EVENT_LISTENER_METHODS (X ) X(Constructor, " <init>" , " (J)V" )
43+ METHOD_LOOKUP_DECLARATION (void_event_listener, VOID_EVENT_LISTENER_METHODS)
44+ METHOD_LOOKUP_DEFINITION (
45+ void_event_listener,
46+ " com/google/firebase/firestore/internal/cpp/VoidEventListener" ,
47+ VOID_EVENT_LISTENER_METHODS)
48+
4249/* static */
4350void EventListenerInternal::DocumentEventListenerNativeOnEvent (
4451 JNIEnv* env, jclass clazz, jlong firestore_ptr, jlong listener_ptr,
@@ -83,6 +90,19 @@ void EventListenerInternal::QueryEventListenerNativeOnEvent(
8390 listener->OnEvent (snapshot, error_code);
8491}
8592
93+ /* static */
94+ void EventListenerInternal::VoidEventListenerNativeOnEvent (JNIEnv* env,
95+ jclass clazz,
96+ jlong listener_ptr) {
97+ if (listener_ptr == 0 ) {
98+ return ;
99+ }
100+ EventListener<void >* listener =
101+ reinterpret_cast <EventListener<void >*>(listener_ptr);
102+
103+ listener->OnEvent (Error::Ok);
104+ }
105+
86106/* static */
87107jobject EventListenerInternal::EventListenerToJavaEventListener (
88108 JNIEnv* env, FirestoreInternal* firestore,
@@ -108,6 +128,17 @@ jobject EventListenerInternal::EventListenerToJavaEventListener(
108128 return result;
109129}
110130
131+ /* static */
132+ jobject EventListenerInternal::EventListenerToJavaRunnable (
133+ JNIEnv* env, EventListener<void >* listener) {
134+ jobject result = env->NewObject (
135+ void_event_listener::GetClass (),
136+ void_event_listener::GetMethodId (void_event_listener::kConstructor ),
137+ reinterpret_cast <jlong>(listener));
138+ CheckAndClearJniExceptions (env);
139+ return result;
140+ }
141+
111142/* static */
112143bool EventListenerInternal::InitializeEmbeddedClasses (
113144 App* app, const std::vector<internal::EmbeddedFile>* embedded_files) {
@@ -123,6 +154,10 @@ bool EventListenerInternal::InitializeEmbeddedClasses(
123154 " FirebaseFirestoreException;)V" ,
124155 reinterpret_cast <void *>(
125156 &EventListenerInternal::QueryEventListenerNativeOnEvent)}};
157+ static const JNINativeMethod kVoidEventListenerNatives [] = {
158+ {" nativeOnEvent" , " (J)V" ,
159+ reinterpret_cast <void *>(
160+ &EventListenerInternal::VoidEventListenerNativeOnEvent)}};
126161
127162 JNIEnv* env = app->GetJNIEnv ();
128163 jobject activity = app->activity ();
@@ -133,17 +168,22 @@ bool EventListenerInternal::InitializeEmbeddedClasses(
133168 embedded_files) &&
134169 query_event_listener::CacheClassFromFiles (env, activity,
135170 embedded_files) &&
171+ void_event_listener::CacheClassFromFiles (env, activity, embedded_files) &&
136172 // Cache method-ids
137173 cpp_event_listener::CacheMethodIds (env, activity) &&
138174 document_event_listener::CacheMethodIds (env, activity) &&
139175 query_event_listener::CacheMethodIds (env, activity) &&
176+ void_event_listener::CacheMethodIds (env, activity) &&
140177 // Register natives
141178 document_event_listener::RegisterNatives (
142179 env, kDocumentEventListenerNatives ,
143180 FIREBASE_ARRAYSIZE (kDocumentEventListenerNatives )) &&
144181 query_event_listener::RegisterNatives (
145182 env, kQueryEventListenerNatives ,
146- FIREBASE_ARRAYSIZE (kQueryEventListenerNatives ));
183+ FIREBASE_ARRAYSIZE (kQueryEventListenerNatives )) &&
184+ void_event_listener::RegisterNatives (
185+ env, kVoidEventListenerNatives ,
186+ FIREBASE_ARRAYSIZE (kVoidEventListenerNatives ));
147187 util::CheckAndClearJniExceptions (env);
148188 return result;
149189}
@@ -155,6 +195,7 @@ void EventListenerInternal::Terminate(App* app) {
155195 cpp_event_listener::ReleaseClass (env);
156196 document_event_listener::ReleaseClass (env);
157197 query_event_listener::ReleaseClass (env);
198+ void_event_listener::ReleaseClass (env);
158199 util::CheckAndClearJniExceptions (env);
159200}
160201
0 commit comments