From 89236fab5e9104ea6a33b52d4d72e5d48d7ebe9d Mon Sep 17 00:00:00 2001 From: "nikhil.a" Date: Mon, 24 Oct 2016 19:06:46 +0530 Subject: [PATCH] Bug fixes. 1)Fixing logic related to conversion of MediaContents to consider NULL object. 2) Fixing bug in switch statement . Change-Id: I615aca6e55d2bf39b7686331ec59d50f72deb5c4 Signed-off-by: nikhil.a Reviewed-on: https://gerrit.iotivity.org/gerrit/13631 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- .../main/jni/consumer/JniNotificationConsumer.cpp | 15 ++--- .../main/jni/provider/JniNotificationProvider.cpp | 78 +++++++++++----------- 2 files changed, 44 insertions(+), 49 deletions(-) diff --git a/service/notification/android/notification-service/src/main/jni/consumer/JniNotificationConsumer.cpp b/service/notification/android/notification-service/src/main/jni/consumer/JniNotificationConsumer.cpp index ce49ec3..ad4a123 100755 --- a/service/notification/android/notification-service/src/main/jni/consumer/JniNotificationConsumer.cpp +++ b/service/notification/android/notification-service/src/main/jni/consumer/JniNotificationConsumer.cpp @@ -156,31 +156,26 @@ jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsSta return NULL; } - jobject obj_topicState; switch (nsState) { case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED: { static jfieldID fieldID = env->GetStaticFieldID(cls_topicState, "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;"); - obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID); + return env->GetStaticObjectField(cls_topicState, fieldID); } case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED: { static jfieldID fieldID = env->GetStaticFieldID(cls_topicState, "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;"); - obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID); + return env->GetStaticObjectField(cls_topicState, fieldID); } - - } - if (obj_topicState == NULL) - { - LOGD("Error: object of field TopicState is null"); + default: + return NULL; } - env->DeleteLocalRef(cls_topicState); LOGD ("ConsumerService_getJavaTopicState - OUT"); - return obj_topicState; + return NULL; } jobject getJavaTopicsList(JNIEnv *env, OIC::Service::NSTopicsList *topicList) diff --git a/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp b/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp index 91c4fc5..3e96fe5 100755 --- a/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp +++ b/service/notification/android/notification-service/src/main/jni/provider/JniNotificationProvider.cpp @@ -214,36 +214,41 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) return nullptr; } jobject jmedia = env->GetObjectField( jMsg, fid_media); + OIC::Service::NSMediaContents *media = nullptr; if (jmedia == NULL) { - LOGE("Error: jmedia object of MediaContents inside Message is null"); - return nullptr; - } - jclass cls_MediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents)); - if (!cls_MediaContents) - { - LOGE ("Failed to Get ObjectClass for class MediaContents"); - return nullptr; - } - jfieldID fid_icon = env->GetFieldID( cls_MediaContents, "mIconImage", "Ljava/lang/String;"); - if (fid_icon == NULL) - { - LOGE("Error: jfieldID for iconImage is null"); - return nullptr; - } - jstring jiconImage = (jstring)env->GetObjectField( jmedia, fid_icon); - const char *iconImage = ""; - if (jiconImage) - { - iconImage = env->GetStringUTFChars( jiconImage, NULL); + LOGD("Info: jmedia object of MediaContents inside Message is null"); } else { - LOGD("Info: iconImage is null"); + jclass cls_MediaContents = (jclass) (env->NewLocalRef(g_cls_MediaContents)); + if (!cls_MediaContents) + { + LOGE ("Failed to Get ObjectClass for class MediaContents"); + return nullptr; + } + jfieldID fid_icon = env->GetFieldID( cls_MediaContents, "mIconImage", "Ljava/lang/String;"); + if (fid_icon == NULL) + { + LOGE("Error: jfieldID for iconImage is null"); + return nullptr; + } + jstring jiconImage = (jstring)env->GetObjectField( jmedia, fid_icon); + const char *iconImage = ""; + if (jiconImage) + { + iconImage = env->GetStringUTFChars( jiconImage, NULL); + media = new OIC::Service::NSMediaContents(std::string(iconImage)); + env->ReleaseStringUTFChars(jiconImage, iconImage); + } + else + { + LOGD("Info: iconImage is null"); + } + env->DeleteLocalRef(cls_MediaContents); + LOGD("iconImage: %s\n", iconImage); } - LOGD("iconImage: %s\n", iconImage); - // Message ExtraInfo jfieldID fid_extraInfo = env->GetFieldID( cls, "mExtraInfo", "Lorg/iotivity/base/OcRepresentation;"); @@ -270,7 +275,7 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) LOGE("Failed to get native object OcRepresentation"); } } - OIC::Service::NSMediaContents *media = new OIC::Service::NSMediaContents(std::string(iconImage)); + OIC::Service::NSMessage *nsMsg; jfieldID nativeHandle = env->GetFieldID(cls, "mNativeHandle", "J"); if (!nativeHandle) @@ -295,7 +300,10 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) nsMsg->setTitle(std::string(messageTitle)); nsMsg->setContentText(std::string(messageBody)); nsMsg->setSourceName(std::string(messageSource)); - nsMsg->setMediaContents(media); + if(media != nullptr) + { + nsMsg->setMediaContents(media); + } nsMsg->setTopic(std::string(topic)); if (representation != nullptr) { @@ -303,7 +311,6 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) } env->DeleteLocalRef(cls_messageType); - env->DeleteLocalRef(cls_MediaContents); if (jtime) { @@ -325,10 +332,6 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) { env->ReleaseStringUTFChars(jtopic, topic); } - if (jiconImage) - { - env->ReleaseStringUTFChars(jiconImage, iconImage); - } LOGD("JNIProviderService: getMessage - OUT"); return nsMsg; @@ -547,30 +550,27 @@ jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsSta return NULL; } - jobject obj_topicState; switch (nsState) { case OIC::Service::NSTopic::NSTopicState::UNSUBSCRIBED: { static jfieldID fieldID = env->GetStaticFieldID(cls_topicState, "UNSUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;"); - obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID); + return env->GetStaticObjectField(cls_topicState, fieldID); } case OIC::Service::NSTopic::NSTopicState::SUBSCRIBED: { static jfieldID fieldID = env->GetStaticFieldID(cls_topicState, "SUBSCRIBED", "Lorg/iotivity/service/ns/common/Topic$TopicState;"); - obj_topicState = env->GetStaticObjectField(cls_topicState, fieldID); + return env->GetStaticObjectField(cls_topicState, fieldID); } + default: + return NULL; } - if (obj_topicState == NULL) - { - LOGE("Error: object of field TopicState is null"); - } - env->DeleteLocalRef(cls_topicState); + LOGD("JNIProviderService: getJavaTopicState - OUT"); - return obj_topicState; + return NULL; } jobject getJavaTopicsList(JNIEnv *env, OIC::Service::NSTopicsList *topicList) -- 2.7.4