Added JNI wrapper

This commit is contained in:
Sylvain Berfini 2016-03-25 15:43:38 +01:00
parent b068c854ef
commit 6f31200e50
3 changed files with 122 additions and 0 deletions

View file

@ -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

View file

@ -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);
}

View file

@ -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);
}
}