mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-04-30 17:36:22 +00:00
Added LinphoneFriendList callbacks into JNI layer
This commit is contained in:
parent
7aedeaacb2
commit
a2b8ff8a6f
3 changed files with 112 additions and 7 deletions
|
|
@ -2058,7 +2058,15 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_removeFriendList(JNIEnv*
|
||||||
,jlong lc
|
,jlong lc
|
||||||
,jlong friendList
|
,jlong friendList
|
||||||
) {
|
) {
|
||||||
linphone_core_remove_friend_list((LinphoneCore*)lc,(LinphoneFriendList*)friendList);
|
LinphoneFriendList *list = (LinphoneFriendList *)friendList;
|
||||||
|
LinphoneFriendListCbs *cbs = linphone_friend_list_get_callbacks(list);
|
||||||
|
if (cbs != NULL) {
|
||||||
|
jobject listener = (jobject) linphone_friend_list_cbs_get_user_data(cbs);
|
||||||
|
if (listener != NULL) {
|
||||||
|
env->DeleteGlobalRef(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
linphone_core_remove_friend_list((LinphoneCore*)lc, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" jobjectArray Java_org_linphone_core_LinphoneCoreImpl_getFriendList(JNIEnv* env
|
extern "C" jobjectArray Java_org_linphone_core_LinphoneCoreImpl_getFriendList(JNIEnv* env
|
||||||
|
|
@ -3198,6 +3206,88 @@ extern "C" void Java_org_linphone_core_LinphoneFriendListImpl_synchronizeFriends
|
||||||
linphone_friend_list_synchronize_friends_from_server((LinphoneFriendList*)list);
|
linphone_friend_list_synchronize_friends_from_server((LinphoneFriendList*)list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void contact_created(LinphoneFriendList *list, LinphoneFriend *lf) {
|
||||||
|
JNIEnv *env = 0;
|
||||||
|
jint result = jvm->AttachCurrentThread(&env,NULL);
|
||||||
|
if (result != 0) {
|
||||||
|
ms_error("cannot attach VM\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinphoneFriendListCbs *cbs = linphone_friend_list_get_callbacks(list);
|
||||||
|
jobject listener = (jobject) linphone_friend_list_cbs_get_user_data(cbs);
|
||||||
|
|
||||||
|
if (listener == NULL) {
|
||||||
|
ms_error("contact_created() notification without listener");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
jclass clazz = (jclass) env->GetObjectClass(listener);
|
||||||
|
jmethodID method = env->GetMethodID(clazz, "onLinphoneFriendCreated","(Lorg/linphone/core/LinphoneFriendList;Lorg/linphone/core/LinphoneFriend;)V");
|
||||||
|
jobject jlist = getFriendList(env, list);
|
||||||
|
jobject jfriend = getFriend(env, lf);
|
||||||
|
env->DeleteLocalRef(clazz);
|
||||||
|
env->CallVoidMethod(listener, method, jlist, jfriend);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void contact_updated(LinphoneFriendList *list, LinphoneFriend *lf_new, LinphoneFriend *lf_old) {
|
||||||
|
JNIEnv *env = 0;
|
||||||
|
jint result = jvm->AttachCurrentThread(&env,NULL);
|
||||||
|
if (result != 0) {
|
||||||
|
ms_error("cannot attach VM\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinphoneFriendListCbs *cbs = linphone_friend_list_get_callbacks(list);
|
||||||
|
jobject listener = (jobject) linphone_friend_list_cbs_get_user_data(cbs);
|
||||||
|
|
||||||
|
if (listener == NULL) {
|
||||||
|
ms_error("contact_updated() notification without listener");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
jclass clazz = (jclass) env->GetObjectClass(listener);
|
||||||
|
jmethodID method = env->GetMethodID(clazz, "onLinphoneFriendUpdated","(Lorg/linphone/core/LinphoneFriendList;Lorg/linphone/core/LinphoneFriend;Lorg/linphone/core/LinphoneFriend;)V");
|
||||||
|
jobject jlist = getFriendList(env, list);
|
||||||
|
jobject jfriend_new = getFriend(env, lf_new);
|
||||||
|
jobject jfriend_old = getFriend(env, lf_old);
|
||||||
|
env->DeleteLocalRef(clazz);
|
||||||
|
env->CallVoidMethod(listener, method, jlist, jfriend_new, jfriend_old);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void contact_removed(LinphoneFriendList *list, LinphoneFriend *lf) {
|
||||||
|
JNIEnv *env = 0;
|
||||||
|
jint result = jvm->AttachCurrentThread(&env,NULL);
|
||||||
|
if (result != 0) {
|
||||||
|
ms_error("cannot attach VM\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinphoneFriendListCbs *cbs = linphone_friend_list_get_callbacks(list);
|
||||||
|
jobject listener = (jobject) linphone_friend_list_cbs_get_user_data(cbs);
|
||||||
|
|
||||||
|
if (listener == NULL) {
|
||||||
|
ms_error("contact_removed() notification without listener");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
jclass clazz = (jclass) env->GetObjectClass(listener);
|
||||||
|
jmethodID method = env->GetMethodID(clazz, "onLinphoneFriendDeleted","(Lorg/linphone/core/LinphoneFriendList;Lorg/linphone/core/LinphoneFriend;)V");
|
||||||
|
jobject jlist = getFriendList(env, list);
|
||||||
|
jobject jfriend = getFriend(env, lf);
|
||||||
|
env->DeleteLocalRef(clazz);
|
||||||
|
env->CallVoidMethod(listener, method, jlist, jfriend);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void Java_org_linphone_core_LinphoneFriendListImpl_setListener(JNIEnv* env, jobject thiz, jlong ptr, jobject jlistener) {
|
||||||
|
jobject listener = env->NewGlobalRef(jlistener);
|
||||||
|
LinphoneFriendList *list = (LinphoneFriendList *)ptr;
|
||||||
|
LinphoneFriendListCbs *cbs;
|
||||||
|
|
||||||
|
cbs = linphone_friend_list_get_callbacks(list);
|
||||||
|
linphone_friend_list_cbs_set_user_data(cbs, listener);
|
||||||
|
linphone_friend_list_cbs_set_contact_created(cbs, contact_created);
|
||||||
|
linphone_friend_list_cbs_set_contact_updated(cbs, contact_updated);
|
||||||
|
linphone_friend_list_cbs_set_contact_deleted(cbs, contact_removed);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setAddress(JNIEnv* env
|
extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setAddress(JNIEnv* env
|
||||||
,jobject thiz
|
,jobject thiz
|
||||||
,jlong ptr
|
,jlong ptr
|
||||||
|
|
|
||||||
|
|
@ -18,13 +18,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
package org.linphone.core;
|
package org.linphone.core;
|
||||||
|
|
||||||
|
|
||||||
public interface LinphoneFriendList {
|
public interface LinphoneFriendList {
|
||||||
public void setRLSUri(String uri);
|
public void setRLSUri(String uri);
|
||||||
public void addFriend(LinphoneFriend friend);
|
public void addFriend(LinphoneFriend friend);
|
||||||
public void updateSubscriptions(LinphoneProxyConfig proxyConfig,boolean onlyWhenRegistered);
|
public void updateSubscriptions(LinphoneProxyConfig proxyConfig,boolean onlyWhenRegistered);
|
||||||
public LinphoneFriend findFriendByUri(String uri);
|
public LinphoneFriend findFriendByUri(String uri);
|
||||||
public void setUri(String uri);
|
public void setUri(String uri);
|
||||||
public void synchronizeFriendsFromServer();
|
public void synchronizeFriendsFromServer();
|
||||||
long getNativePtr();
|
long getNativePtr();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the callbacks associated with the LinphoneFriendList.
|
||||||
|
*/
|
||||||
|
void setListener(LinphoneFriendList.LinphoneFriendListListener listener);
|
||||||
|
|
||||||
|
interface LinphoneFriendListListener {
|
||||||
|
void onLinphoneFriendCreated(LinphoneFriendList list, LinphoneFriend lf);
|
||||||
|
|
||||||
|
void onLinphoneFriendUpdated(LinphoneFriendList list, LinphoneFriend newFriend, LinphoneFriend oldFriend);
|
||||||
|
|
||||||
|
void onLinphoneFriendDeleted(LinphoneFriendList list, LinphoneFriend lf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
package org.linphone.core;
|
package org.linphone.core;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import org.linphone.core.LinphoneProxyConfigImpl;
|
|
||||||
|
|
||||||
class LinphoneFriendListImpl implements LinphoneFriendList, Serializable {
|
class LinphoneFriendListImpl implements LinphoneFriendList, Serializable {
|
||||||
|
|
||||||
|
|
@ -31,8 +30,7 @@ class LinphoneFriendListImpl implements LinphoneFriendList, Serializable {
|
||||||
private native void updateSubscriptions(long nativePtr,long proxyConfigPtr,boolean onlyWhenRegistered);
|
private native void updateSubscriptions(long nativePtr,long proxyConfigPtr,boolean onlyWhenRegistered);
|
||||||
private native Object getCore(long ptr);
|
private native Object getCore(long ptr);
|
||||||
private native LinphoneFriend findFriendByUri(long nativePtr,String uri);
|
private native LinphoneFriend findFriendByUri(long nativePtr,String uri);
|
||||||
|
private native void setListener(long ptr, LinphoneFriendListListener listener);
|
||||||
|
|
||||||
|
|
||||||
protected LinphoneFriendListImpl(LinphoneCoreImpl core) {
|
protected LinphoneFriendListImpl(LinphoneCoreImpl core) {
|
||||||
nativePtr = newLinphoneFriendList(core.nativePtr);
|
nativePtr = newLinphoneFriendList(core.nativePtr);
|
||||||
|
|
@ -82,6 +80,11 @@ class LinphoneFriendListImpl implements LinphoneFriendList, Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setListener(LinphoneFriendListListener listener) {
|
||||||
|
setListener(nativePtr, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*reserved for JNI */
|
/*reserved for JNI */
|
||||||
protected LinphoneFriendListImpl(long aNativePtr) {
|
protected LinphoneFriendListImpl(long aNativePtr) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue