diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 62396b464..0363c640a 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -3418,8 +3418,72 @@ extern "C" void Java_org_linphone_core_LinphoneFriendListImpl_updateSubscription linphone_friend_list_update_subscriptions((LinphoneFriendList*)friendListptr, (LinphoneProxyConfig*)proxyConfigPtr, jonlyWhenRegistered); } +extern "C" jlongArray Java_org_linphone_core_LinphoneFriendImpl_getAddresses(JNIEnv* env + ,jobject thiz + ,jlong ptr) { + MSList *addresses = linphone_friend_get_addresses((LinphoneFriend*)ptr); + int size = ms_list_size(addresses); + jlongArray jaddresses = env->NewLongArray(size); + jlong *jInternalArray = env->GetLongArrayElements(jaddresses, NULL); + for (int i = 0; i < size; i++) { + jInternalArray[i] = (unsigned long) (addresses->data); + addresses = ms_list_next(addresses); + } + ms_list_free(addresses); + env->ReleaseLongArrayElements(jaddresses, jInternalArray, 0); + return jaddresses; +} +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_addAddress(JNIEnv* env + ,jobject thiz + ,jlong ptr + ,jlong jaddress) { + linphone_friend_add_address((LinphoneFriend*)ptr, (LinphoneAddress*)jaddress); +} +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_removeAddress(JNIEnv* env + ,jobject thiz + ,jlong ptr + ,jlong jaddress) { + linphone_friend_remove_address((LinphoneFriend*)ptr, (LinphoneAddress*)jaddress); +} + +extern "C" jobjectArray Java_org_linphone_core_LinphoneFriendImpl_getPhoneNumbers(JNIEnv* env + ,jobject thiz + ,jlong ptr) { + MSList *phone_numbers = linphone_friend_get_phone_numbers((LinphoneFriend*)ptr); + int size = ms_list_size(phone_numbers); + jobjectArray jphonenumbers = env->NewObjectArray(size, env->FindClass("java/lang/String"), env->NewStringUTF("")); + for (int i = 0; i < size; i++) { + const char *phone = (const char *)phone_numbers->data; + env->SetObjectArrayElement(jphonenumbers, i, env->NewStringUTF(phone)); + phone_numbers = ms_list_next(phone_numbers); + } + ms_list_free(phone_numbers); + return jphonenumbers; +} + +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_addPhoneNumber(JNIEnv* env + ,jobject thiz + ,jlong ptr + ,jstring jphone) { + if (jphone) { + const char* phone = env->GetStringUTFChars(jphone, NULL); + linphone_friend_add_phone_number((LinphoneFriend*)ptr, phone); + env->ReleaseStringUTFChars(jphone, phone); + } +} + +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_removePhoneNumber(JNIEnv* env + ,jobject thiz + ,jlong ptr + ,jstring jphone) { + if (jphone) { + const char* phone = env->GetStringUTFChars(jphone, NULL); + linphone_friend_remove_phone_number((LinphoneFriend*)ptr, phone); + env->ReleaseStringUTFChars(jphone, phone); + } +} extern "C" jlong Java_org_linphone_core_LinphoneFriendImpl_getAddress(JNIEnv* env ,jobject thiz diff --git a/java/common/org/linphone/core/LinphoneFriend.java b/java/common/org/linphone/core/LinphoneFriend.java index af55605a6..a44b2546e 100644 --- a/java/common/org/linphone/core/LinphoneFriend.java +++ b/java/common/org/linphone/core/LinphoneFriend.java @@ -165,4 +165,12 @@ public interface LinphoneFriend { * @return */ String getOrganization(); + + LinphoneAddress[] getAddresses(); + void addAddress(LinphoneAddress addr); + void removeAddress(LinphoneAddress addr); + + String[] getPhoneNumbers(); + void addPhoneNumber(String phone); + void removePhoneNumber(String phone); } diff --git a/java/impl/org/linphone/core/LinphoneFriendImpl.java b/java/impl/org/linphone/core/LinphoneFriendImpl.java index 3cc45ec21..86240d8c9 100644 --- a/java/impl/org/linphone/core/LinphoneFriendImpl.java +++ b/java/impl/org/linphone/core/LinphoneFriendImpl.java @@ -146,4 +146,54 @@ class LinphoneFriendImpl implements LinphoneFriend, Serializable { public String getOrganization() { return getOrganization(nativePtr); } + + private native long[] getAddresses(long nativePtr); + @Override + public LinphoneAddress[] getAddresses() { + long[] ptrs = getAddresses(nativePtr); + if (ptrs == null) return null; + + LinphoneAddress[] addresses = new LinphoneAddress[ptrs.length]; + for (int i = 0; i < addresses.length; i++) { + addresses[i] = new LinphoneAddressImpl(ptrs[i], LinphoneAddressImpl.WrapMode.FromConst); + } + return addresses; + } + + private native void addAddress(long nativePtr, long addr); + @Override + public void addAddress(LinphoneAddress addr) { + addAddress(nativePtr, ((LinphoneAddressImpl)addr).nativePtr); + } + + private native void removeAddress(long nativePtr, long addr); + @Override + public void removeAddress(LinphoneAddress addr) { + removeAddress(nativePtr, ((LinphoneAddressImpl)addr).nativePtr); + } + + private native Object[] getPhoneNumbers(long nativePtr); + @Override + public String[] getPhoneNumbers() { + Object[] phones = getPhoneNumbers(nativePtr); + if (phones == null) return null; + + String[] phoneNumbers = new String[phones.length]; + for (int i = 0; i < phones.length; i++) { + phoneNumbers[i] = phones[i].toString(); + } + return phoneNumbers; + } + + private native void addPhoneNumber(long nativePtr, String phone); + @Override + public void addPhoneNumber(String phone) { + addPhoneNumber(nativePtr, phone); + } + + private native void removePhoneNumber(long nativePtr, String phone); + @Override + public void removePhoneNumber(String phone) { + removePhoneNumber(nativePtr, phone); + } }