From 33033ada88c0f638832caae4c28f2dac89a726b3 Mon Sep 17 00:00:00 2001 From: "nikhil.a" Date: Wed, 19 Oct 2016 18:03:32 +0530 Subject: [PATCH] fix issues relates to wrong syncInfo received Change-Id: I77f9ce5d0fa3e7c40e0fe390b42f210e5a188a50 Signed-off-by: nikhil.a Reviewed-on: https://gerrit.iotivity.org/gerrit/13451 Reviewed-by: Uze Choi Tested-by: Uze Choi (cherry picked from commit 5c7427328a1757f9555be3b4f0a6292c53ac933c) Reviewed-on: https://gerrit.iotivity.org/gerrit/13457 Tested-by: jenkins-iotivity --- .../main/jni/consumer/JniNotificationConsumer.cpp | 22 +++++-------- .../main/jni/provider/JniNotificationProvider.cpp | 38 ++++++++++++++-------- 2 files changed, 32 insertions(+), 28 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 78352ef..ce49ec3 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 @@ -116,38 +116,32 @@ jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType LOGE ("Failed to Get ObjectClass for SyncType"); return NULL; } - jobject syncType; switch (nsType) { case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD: { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ : { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED : { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } - - } - - if (syncType == NULL) - { - LOGD("Error: object of field Synctype is null"); + default: + return NULL; } - env->DeleteLocalRef(cls_SyncType); LOGD ("ConsumerService_getJavaSyncType - OUT"); - return syncType; + return NULL; } jobject getJavaTopicState(JNIEnv *env, OIC::Service::NSTopic::NSTopicState nsState) @@ -610,7 +604,7 @@ jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message) } env->SetObjectField(obj_message, fid_type, jType); } - + LOGD("Reading OCRepresentation Object from Native"); OC::OCRepresentation *ocRepresentation = new OC::OCRepresentation(message->getExtraInfo()); @@ -636,7 +630,7 @@ jobject getJavaMessage(JNIEnv *env, OIC::Service::NSMessage *message) } LOGD ("setting extraInfo field"); env->SetObjectField(obj_message, fid_extraInfo, jRepresentation); - + env->DeleteLocalRef(cls_message); LOGD ("ConsumerService_getJavaMessage - OUT"); return obj_message; 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 bbe0093..91c4fc5 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 @@ -127,7 +127,7 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) jlong jttl = (jlong) env->GetLongField( jMsg, fid_ttl); uint64_t ttl = jttl; - LOGD("Message ID: %lld\n", ttl); + LOGD("TTL: %d\n", ttl); // Message Title jfieldID fid_title = env->GetFieldID( cls, "mTitle", "Ljava/lang/String;"); @@ -271,7 +271,23 @@ OIC::Service::NSMessage *getNativeMessage(JNIEnv *env, jobject jMsg) } } OIC::Service::NSMediaContents *media = new OIC::Service::NSMediaContents(std::string(iconImage)); - OIC::Service::NSMessage *nsMsg = OIC::Service::NSProviderService::getInstance()->createMessage(); + OIC::Service::NSMessage *nsMsg; + jfieldID nativeHandle = env->GetFieldID(cls, "mNativeHandle", "J"); + if (!nativeHandle) + { + LOGE("Error: fieldID for mNativeHandle is null"); + return nullptr; + } + jlong jMessage = env->GetLongField(jMsg, nativeHandle); + if (jMessage) + { + LOGD ("calling sendMessage on mNativeHandle"); + nsMsg = (OIC::Service::NSMessage *) (jMessage); + } + else + { + nsMsg = OIC::Service::NSProviderService::getInstance()->createMessage(); + } nsMsg->setType(type); nsMsg->setTime(std::string(time)); @@ -608,38 +624,32 @@ jobject getJavaSyncType(JNIEnv *env, OIC::Service::NSSyncInfo::NSSyncType nsType LOGE ("Failed to Get ObjectClass for SyncType"); return NULL; } - jobject syncType; switch (nsType) { case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_UNREAD: { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "UNREAD", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ : { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "READ", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } case OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED : { static jfieldID fieldID = env->GetStaticFieldID(cls_SyncType, "DELETED", "Lorg/iotivity/service/ns/common/SyncInfo$SyncType;"); - syncType = env->GetStaticObjectField(cls_SyncType, fieldID); + return env->GetStaticObjectField(cls_SyncType, fieldID); } - - } - - if (syncType == NULL) - { - LOGE("Error: object of field Synctype is null"); + default: + return NULL; } - env->DeleteLocalRef(cls_SyncType); LOGD ("JNIProviderService: getJavaSyncType - OUT"); - return syncType; + return NULL; } -- 2.7.4