55#include < vector>
66#include " session/config/contacts.hpp"
77#include " util.h"
8+ #include " jni_utils.h"
89
910inline session::config::Contacts *ptrToContacts (JNIEnv *env, jobject obj) {
10- jclass contactsClass = env->FindClass (" network/loki/messenger/libsession_util/Contacts" );
11- jfieldID pointerField = env->GetFieldID (contactsClass, " pointer" , " J" );
11+ auto contactsClass = jni_utils::JavaLocalRef ( env, env ->FindClass (" network/loki/messenger/libsession_util/Contacts" ) );
12+ jfieldID pointerField = env->GetFieldID (contactsClass. get () , " pointer" , " J" );
1213 return (session::config::Contacts *) env->GetLongField (obj, pointerField);
1314}
1415
1516inline jobject serialize_contact (JNIEnv *env, session::config::contact_info info) {
16- jclass contactClass = env->FindClass (" network/loki/messenger/libsession_util/util/Contact" );
17- jmethodID constructor = env->GetMethodID (contactClass, " <init>" , " (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZLnetwork/loki/messenger/libsession_util/util/UserPic;JLnetwork/loki/messenger/libsession_util/util/ExpiryMode;)V" );
18- jstring id = env->NewStringUTF (info.session_id .data ());
19- jstring name = env->NewStringUTF (info.name .data ());
20- jstring nickname = env->NewStringUTF (info.nickname .data ());
17+ auto contactClass = jni_utils::JavaLocalRef ( env, env ->FindClass (" network/loki/messenger/libsession_util/util/Contact" ) );
18+ jmethodID constructor = env->GetMethodID (contactClass. get () , " <init>" , " (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZZLnetwork/loki/messenger/libsession_util/util/UserPic;JLnetwork/loki/messenger/libsession_util/util/ExpiryMode;)V" );
19+ auto id = jni_utils::JavaLocalRef ( env, env ->NewStringUTF (info.session_id .data () ));
20+ auto name = jni_utils::JavaLocalRef ( env, env ->NewStringUTF (info.name .data () ));
21+ auto nickname = jni_utils::JavaLocalRef ( env, env ->NewStringUTF (info.nickname .data () ));
2122 jboolean approved, approvedMe, blocked;
2223 approved = info.approved ;
2324 approvedMe = info.approved_me ;
2425 blocked = info.blocked ;
2526 auto created = info.created ;
26- jobject profilePic = util::serialize_user_pic (env, info.profile_picture );
27- jobject returnObj = env->NewObject (contactClass, constructor, id, name, nickname, approved,
28- approvedMe, blocked, profilePic, (jlong)info.priority ,
27+ auto profilePic = jni_utils::JavaLocalRef (env, util::serialize_user_pic (env, info.profile_picture ) );
28+ jobject returnObj = env->NewObject (contactClass. get () , constructor, id. get () , name. get () , nickname. get () , approved,
29+ approvedMe, blocked, profilePic. get () , (jlong)info.priority ,
2930 util::serialize_expiry (env, info.exp_mode , info.exp_timer ));
3031 return returnObj;
3132}
@@ -44,35 +45,34 @@ inline session::config::contact_info deserialize_contact(JNIEnv *env, jobject in
4445 " Lnetwork/loki/messenger/libsession_util/util/UserPic;" );
4546 getPriority = env->GetFieldID (contactClass, " priority" , " J" );
4647 getExpiry = env->GetFieldID (contactClass, " expiryMode" , " Lnetwork/loki/messenger/libsession_util/util/ExpiryMode;" );
47- jstring name, nickname, account_id;
48- account_id = static_cast <jstring>(env->GetObjectField (info, getId));
49- name = static_cast <jstring>(env->GetObjectField (info, getName));
50- nickname = static_cast <jstring>(env->GetObjectField (info, getNick));
48+ auto account_id = jni_utils::JavaLocalRef (env, static_cast <jstring>(env->GetObjectField (info, getId)));
49+ auto name = jni_utils::JavaLocalRef (env, static_cast <jstring>(env->GetObjectField (info, getName)));
50+ auto nickname = jni_utils::JavaLocalRef (env, static_cast <jstring>(env->GetObjectField (info, getNick)));
5151 bool approved, approvedMe, blocked, hidden;
5252 int priority = env->GetLongField (info, getPriority);
5353 approved = env->GetBooleanField (info, getApproved);
5454 approvedMe = env->GetBooleanField (info, getApprovedMe);
5555 blocked = env->GetBooleanField (info, getBlocked);
56- jobject user_pic = env->GetObjectField (info, getUserPic);
57- jobject expiry_mode = env->GetObjectField (info, getExpiry);
56+ auto user_pic = jni_utils::JavaLocalRef ( env, env ->GetObjectField (info, getUserPic) );
57+ auto expiry_mode = jni_utils::JavaLocalRef ( env, env ->GetObjectField (info, getExpiry) );
5858
59- auto expiry_pair = util::deserialize_expiry (env, expiry_mode);
59+ auto expiry_pair = util::deserialize_expiry (env, expiry_mode. get () );
6060
6161 std::string url;
6262 std::vector<unsigned char > key;
6363
64- if (user_pic != nullptr ) {
65- auto deserialized_pic = util::deserialize_user_pic (env, user_pic);
64+ if (user_pic. get () != nullptr ) {
65+ auto deserialized_pic = util::deserialize_user_pic (env, user_pic. get () );
6666 auto url_jstring = deserialized_pic.first ;
6767 auto url_bytes = env->GetStringUTFChars (url_jstring, nullptr );
6868 url = std::string (url_bytes);
6969 env->ReleaseStringUTFChars (url_jstring, url_bytes);
7070 key = util::vector_from_bytes (env, deserialized_pic.second );
7171 }
7272
73- auto account_id_bytes = env->GetStringUTFChars (account_id, nullptr );
74- auto name_bytes = name ? env->GetStringUTFChars (name, nullptr ) : nullptr ;
75- auto nickname_bytes = nickname ? env->GetStringUTFChars (nickname, nullptr ) : nullptr ;
73+ auto account_id_bytes = env->GetStringUTFChars (account_id. get () , nullptr );
74+ auto name_bytes = name. get () ? env->GetStringUTFChars (name. get () , nullptr ) : nullptr ;
75+ auto nickname_bytes = nickname. get () ? env->GetStringUTFChars (nickname. get () , nullptr ) : nullptr ;
7676
7777 auto contact_info = conf->get_or_construct (account_id_bytes);
7878 if (name_bytes) {
@@ -90,12 +90,12 @@ inline session::config::contact_info deserialize_contact(JNIEnv *env, jobject in
9090 contact_info.profile_picture = session::config::profile_pic ();
9191 }
9292
93- env->ReleaseStringUTFChars (account_id, account_id_bytes);
93+ env->ReleaseStringUTFChars (account_id. get () , account_id_bytes);
9494 if (name_bytes) {
95- env->ReleaseStringUTFChars (name, name_bytes);
95+ env->ReleaseStringUTFChars (name. get () , name_bytes);
9696 }
9797 if (nickname_bytes) {
98- env->ReleaseStringUTFChars (nickname, nickname_bytes);
98+ env->ReleaseStringUTFChars (nickname. get () , nickname_bytes);
9999 }
100100
101101 contact_info.priority = priority;
0 commit comments