diff --git a/coreapi/account_creator.h b/coreapi/account_creator.h index d695ad1aa..85a933c51 100644 --- a/coreapi/account_creator.h +++ b/coreapi/account_creator.h @@ -266,8 +266,6 @@ LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_is_account **/ LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_create_account(LinphoneAccountCreator *creator); -LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_recover_account(LinphoneAccountCreator *creator); - /** * Send an XML-RPC request to activate a Linphone account. * @param[in] creator LinphoneAccountCreator object diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 552f09f48..d538ffbe6 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -7919,6 +7919,32 @@ static void account_creator_is_account_activated(LinphoneAccountCreator *creator env->CallVoidMethod(listener, method, getAccountCreator(env, creator), statusObject); } +static void account_creator_phone_account_recovered(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status) { + JNIEnv *env = 0; + jint result = jvm->AttachCurrentThread(&env,NULL); + if (result != 0) { + ms_error("cannot attach VM\n"); + return; + } + + LinphoneAccountCreatorCbs *cbs = linphone_account_creator_get_callbacks(creator); + jobject listener = (jobject) linphone_account_creator_cbs_get_user_data(cbs); + if (listener == NULL) { + ms_error("account_creator_response() notification without listener"); + return ; + } + + LinphoneCore *lc = (LinphoneCore *)creator->core; + LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc); + + jclass clazz = (jclass) env->GetObjectClass(listener); + jmethodID method = env->GetMethodID(clazz, "onAccountCreatorPhoneAccountRecovered","(Lorg/linphone/core/LinphoneAccountCreator;Lorg/linphone/core/LinphoneAccountCreator$Status;)V"); + env->DeleteLocalRef(clazz); + + jobject statusObject = env->CallStaticObjectMethod(ljb->accountCreatorStatusClass, ljb->accountCreatorStatusFromIntId, (jint)status); + env->CallVoidMethod(listener, method, getAccountCreator(env, creator), statusObject); +} + extern "C" jlong Java_org_linphone_core_LinphoneAccountCreatorImpl_newLinphoneAccountCreator(JNIEnv *env, jobject thiz, jlong core, jstring jurl) { const char *url = GetStringUTFChars(env, jurl); LinphoneAccountCreator *account_creator = linphone_account_creator_new((LinphoneCore *)core, url); @@ -7945,6 +7971,7 @@ extern "C" void Java_org_linphone_core_LinphoneAccountCreatorImpl_setListener(JN linphone_account_creator_cbs_set_link_phone_number_with_account(cbs, account_creator_link_phone_number_with_account); linphone_account_creator_cbs_set_activate_phone_number_link(cbs, account_creator_activate_phone_number_link); linphone_account_creator_cbs_set_is_account_activated(cbs, account_creator_is_account_activated); + linphone_account_creator_cbs_set_recover_phone_account(cbs, account_creator_phone_account_recovered); } extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_setUsername(JNIEnv *env, jobject thiz, jlong ptr, jstring jusername) { @@ -8097,6 +8124,11 @@ extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_activatePhoneN return (jint) linphone_account_creator_activate_phone_number_link(account_creator); } +extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_recoverPhoneAccount(JNIEnv *env, jobject thiz, jlong ptr) { + LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr; + return (jint) linphone_account_creator_recover_phone_account(account_creator); +} + extern "C" jobject Java_org_linphone_core_LinphoneAccountCreatorImpl_configure(JNIEnv *env, jobject thiz, jlong ptr) { LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr; LinphoneProxyConfig *lpc = linphone_account_creator_configure(account_creator); diff --git a/java/common/org/linphone/core/LinphoneAccountCreator.java b/java/common/org/linphone/core/LinphoneAccountCreator.java index 7888379ee..4457ec248 100644 --- a/java/common/org/linphone/core/LinphoneAccountCreator.java +++ b/java/common/org/linphone/core/LinphoneAccountCreator.java @@ -29,6 +29,7 @@ public interface LinphoneAccountCreator { void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, Status status); void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, Status status); void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, Status status); + void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, Status status); } public static class Status { @@ -132,5 +133,7 @@ public interface LinphoneAccountCreator { Status activatePhoneNumberLink(); + Status recoverPhoneAccount(); + LinphoneProxyConfig configure(); } diff --git a/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java b/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java index 1f5c4a840..2048ee8c6 100644 --- a/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java +++ b/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java @@ -184,6 +184,12 @@ public class LinphoneAccountCreatorImpl implements LinphoneAccountCreator { return Status.fromInt(activatePhoneNumberLink(nativePtr)); } + private native int recoverPhoneAccount(long ptr); + @Override + public Status recoverPhoneAccount() { + return Status.fromInt(recoverPhoneAccount(nativePtr)); + } + private native LinphoneProxyConfig configure(long ptr); @Override public LinphoneProxyConfig configure() {