X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=android%2Fandroid_api%2Fbase%2Fjni%2FJniOnGetListener.cpp;h=496c5a6ba9f7b098078ced00a4b312656a6a250f;hb=a942f3c9ab2adb06d953dc99fb375399b7b82d61;hp=2bc8624bce7d960eb07f5c1b78e4d2d409fc1860;hpb=d0baf5ae6936a16de6a49588428204d8c386ac9e;p=platform%2Fupstream%2Fiotivity.git diff --git a/android/android_api/base/jni/JniOnGetListener.cpp b/android/android_api/base/jni/JniOnGetListener.cpp index 2bc8624..496c5a6 100644 --- a/android/android_api/base/jni/JniOnGetListener.cpp +++ b/android/android_api/base/jni/JniOnGetListener.cpp @@ -23,6 +23,9 @@ #include "JniOcResource.h" #include "JniOcRepresentation.h" #include "JniUtils.h" +#ifdef WITH_CLOUD +#include "JniOcAccountManager.h" +#endif JniOnGetListener::JniOnGetListener(JNIEnv *env, jobject jListener, JniOcResource* owner) : m_ownerResource(owner) @@ -30,34 +33,54 @@ JniOnGetListener::JniOnGetListener(JNIEnv *env, jobject jListener, JniOcResource m_jwListener = env->NewWeakGlobalRef(jListener); } +#ifdef WITH_CLOUD +JniOnGetListener::JniOnGetListener(JNIEnv *env, jobject jListener, JniOcAccountManager* owner) + : m_ownerAccountManager(owner) +{ + m_jwListener = env->NewWeakGlobalRef(jListener); +} +#endif + JniOnGetListener::~JniOnGetListener() { LOGD("~JniOnGetListener"); if (m_jwListener) { - jint ret; + jint ret = JNI_ERR; JNIEnv *env = GetJNIEnv(ret); - if (nullptr == env) return; + if (nullptr == env) + { + return; + } env->DeleteWeakGlobalRef(m_jwListener); m_jwListener = nullptr; - if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == ret) + { + g_jvm->DetachCurrentThread(); + } } } void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, const OCRepresentation& ocRepresentation, const int eCode) { - jint envRet; + jint envRet = JNI_ERR; JNIEnv *env = GetJNIEnv(envRet); - if (nullptr == env) return; + if (nullptr == env) + { + return; + } jobject jListener = env->NewLocalRef(m_jwListener); if (!jListener) { checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } jclass clsL = env->GetObjectClass(jListener); @@ -65,7 +88,10 @@ void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, if (!clsL) { checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } @@ -75,14 +101,20 @@ void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, if (!ex) { checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } jmethodID midL = env->GetMethodID(clsL, "onGetFailed", "(Ljava/lang/Throwable;)V"); if (!midL) { checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } env->CallVoidMethod(jListener, midL, ex); @@ -93,7 +125,10 @@ void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, if (!jHeaderOptionList) { checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } @@ -105,7 +140,10 @@ void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, { delete rep; checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } @@ -115,7 +153,10 @@ void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, { delete rep; checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } return; } env->CallVoidMethod(jListener, midL, jHeaderOptionList, jRepresentation); @@ -127,7 +168,10 @@ void JniOnGetListener::onGetCallback(const HeaderOptions& headerOptions, } checkExAndRemoveListener(env); - if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); + if (JNI_EDETACHED == envRet) + { + g_jvm->DetachCurrentThread(); + } } void JniOnGetListener::checkExAndRemoveListener(JNIEnv* env) @@ -136,11 +180,33 @@ void JniOnGetListener::checkExAndRemoveListener(JNIEnv* env) { jthrowable ex = env->ExceptionOccurred(); env->ExceptionClear(); +#ifndef WITH_CLOUD m_ownerResource->removeOnGetListener(env, m_jwListener); +#else + if (m_ownerResource) + { + m_ownerResource->removeOnGetListener(env, m_jwListener); + } + if (m_ownerAccountManager) + { + m_ownerAccountManager->removeOnGetListener(env, m_jwListener); + } +#endif env->Throw((jthrowable)ex); } else { +#ifndef WITH_CLOUD m_ownerResource->removeOnGetListener(env, m_jwListener); +#else + if (m_ownerResource) + { + m_ownerResource->removeOnGetListener(env, m_jwListener); + } + if (m_ownerAccountManager) + { + m_ownerAccountManager->removeOnGetListener(env, m_jwListener); + } +#endif } -} \ No newline at end of file +}