#define _JniListenerManager
class JniOcResource;
-#ifdef WITH_CLOUD
-class JniOcAccountManager;
-#endif
template <class T>
class JniListenerManager
{
public:
- T* addListener(JNIEnv* env, jobject jListener, JniOcResource* owner)
+ T* addListener(JNIEnv* env, jobject jListener, RemoveListenerCallback removeListener)
{
T *onEventListener = nullptr;
if (!onEventListener)
{
- onEventListener = new T(env, jListener, owner);
+ onEventListener = new T(env, jListener, removeListener);
jobject jgListener = env->NewGlobalRef(jListener);
if (jgListener)
return onEventListener;
}
-#ifdef WITH_CLOUD
- T* addListener(JNIEnv* env, jobject jListener, JniOcAccountManager* owner)
- {
- T *onEventListener = nullptr;
-
- m_mapMutex.lock();
-
- for (auto it = m_listenerMap.begin(); it != m_listenerMap.end(); ++it)
- {
- if (env->IsSameObject(jListener, it->first))
- {
- auto refPair = it->second;
- onEventListener = refPair.first;
- refPair.second++;
- it->second = refPair;
- m_listenerMap.insert(*it);
- LOGD("OnEventListener: ref. count is incremented");
- break;
- }
- }
-
- if (!onEventListener)
- {
- onEventListener = new T(env, jListener, owner);
- jobject jgListener = env->NewGlobalRef(jListener);
-
- if (jgListener)
- {
- m_listenerMap.insert(
- std::pair<jobject,
- std::pair<T*, int>>(jgListener, std::pair<T*, int>(onEventListener, 1)));
- }
- else
- {
- LOGD("OnEventListener: Failed to create global listener ref.");
- delete onEventListener;
- m_mapMutex.unlock();
- return nullptr;
- }
- LOGD("OnEventListener: new listener");
- }
-
- m_mapMutex.unlock();
- return onEventListener;
- }
-#endif
-
void removeListener(JNIEnv* env, jobject jListener)
{
m_mapMutex.lock();