From b4bc628f178893310fb885d36b3fe96d0e9c5ac5 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sat, 18 Aug 2018 18:58:27 +0200 Subject: [PATCH] make DcContext static --- jni/dc_wrapper.c | 317 +++++++++--------- src/com/b44t/messenger/DcChat.java | 2 +- src/com/b44t/messenger/DcChatlist.java | 2 +- src/com/b44t/messenger/DcContact.java | 2 +- src/com/b44t/messenger/DcContext.java | 232 +++++-------- src/com/b44t/messenger/DcLot.java | 2 +- src/com/b44t/messenger/DcMsg.java | 7 +- .../securesms/ApplicationContext.java | 5 +- 8 files changed, 243 insertions(+), 326 deletions(-) diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index 587c8188a..b72ff984c 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * @@ -24,7 +24,6 @@ #include -#include #include "messenger-backend/src/deltachat.h" #include "messenger-backend/cmdline/cmdline.h" @@ -80,11 +79,9 @@ static void s_init_globals(JNIEnv *env, jclass DcContext_class) s_global_init_done = 1; /* prepare calling back a Java function */ - __android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI: s_init_globals()..."); /* low-level logging, dc_log_*() may not be yet available. However, please note that __android_log_print() may not work (eg. on LG X Cam) */ - (*env)->GetJavaVM(env, &s_jvm); /* JNIEnv cannot be shared between threads, so we share the JavaVM object */ s_DcContext_class = (*env)->NewGlobalRef(env, DcContext_class); - s_DcCallback_methodID = (*env)->GetStaticMethodID(env, DcContext_class, "DcCallback","(IJJ)J" /*signature as "(param)ret" with I=int, J=long*/ ); + s_DcCallback_methodID = (*env)->GetStaticMethodID(env, DcContext_class, "handleEvent","(IJJ)J" /*signature as "(param)ret" with I=int, J=long*/ ); } @@ -155,14 +152,15 @@ static uint32_t* jintArray2uint32Pointer(JNIEnv* env, jintArray ja, int* ret_icn ******************************************************************************/ -static dc_context_t* get_dc_context(JNIEnv *env, jclass cls) +static dc_context_t* get_dc_context(JNIEnv *env, jobject obj) { static jfieldID fid = 0; if( fid == 0 ) { - fid = (*env)->GetStaticFieldID(env, cls, "m_hContext", "J" /*Signature, J=long*/); + jclass cls = (*env)->GetObjectClass(env, obj); + fid = (*env)->GetFieldID(env, cls, "m_hContext", "J" /*Signature, J=long*/); } if( fid ) { - return (dc_context_t*)(*env)->GetStaticLongField(env, cls, fid); + return (dc_chat_t*)(*env)->GetLongField(env, obj, fid); } return NULL; } @@ -175,17 +173,6 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t jlong l; JNIEnv* env; - #if 0 /* -- __android_log_print() does not log eg. on LG X Cam - but Javas Log.i() etc. do. So, we do not optimize these calls and just use the Java logging. */ - if( event==DC_EVENT_INFO || event==DC_EVENT_WARNING ) { - __android_log_print(event==DC_EVENT_INFO? ANDROID_LOG_INFO : ANDROID_LOG_WARN, "DeltaChat", "%s", (char*)data2); /* on problems, add `-llog` to `Android.mk` */ - return 0; /* speed up things for info/warning */ - } - else if( event == DC_EVENT_ERROR ) { - __android_log_print(ANDROID_LOG_ERROR, "DeltaChat", "%s", (char*)data2); - /* errors are also forwarded to Java to show them in a bubble or so */ - } - #endif - if( s_jvm==NULL || s_DcContext_class==NULL || s_DcCallback_methodID==NULL ) { return 0; /* may happen on startup */ } @@ -200,155 +187,159 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t } -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextNew(JNIEnv *env, jclass c) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextNew(JNIEnv *env, jobject obj, jstring osname) { - s_init_globals(env, c); - return (jlong)dc_context_new(s_context_callback_, NULL, "Android"); + jclass cls = (*env)->GetObjectClass(env, obj); + s_init_globals(env, cls); + CHAR_REF(osname); + jlong hContext = (jlong)dc_context_new(s_context_callback_, NULL, osnamePtr); + CHAR_UNREF(osname); + return hContext; } /* DcContext - open/configure/connect/fetch */ -JNIEXPORT jint Java_com_b44t_messenger_DcContext_open(JNIEnv *env, jclass cls, jstring dbfile) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_open(JNIEnv *env, jobject obj, jstring dbfile) { CHAR_REF(dbfile); - jint ret = dc_open(get_dc_context(env, cls), dbfilePtr, NULL); + jint ret = dc_open(get_dc_context(env, obj), dbfilePtr, NULL); CHAR_UNREF(dbfile) return ret; } -JNIEXPORT void Java_com_b44t_messenger_DcContext_close(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_close(JNIEnv *env, jobject obj) { - dc_close(get_dc_context(env, cls)); + dc_close(get_dc_context(env, obj)); } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getBlobdir(JNIEnv *env, jclass cls) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getBlobdir(JNIEnv *env, jobject obj) { - char* temp = dc_get_blobdir(get_dc_context(env, cls)); + char* temp = dc_get_blobdir(get_dc_context(env, obj)); jstring ret = JSTRING_NEW(temp); free(temp); return ret; } -JNIEXPORT void Java_com_b44t_messenger_DcContext_configure(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_configure(JNIEnv *env, jobject obj) { - dc_configure(get_dc_context(env, cls)); + dc_configure(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_stopOngoingProcess(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_stopOngoingProcess(JNIEnv *env, jobject obj) { - dc_stop_ongoing_process(get_dc_context(env, cls)); + dc_stop_ongoing_process(get_dc_context(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_isConfigured(JNIEnv *env, jclass cls) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_isConfigured(JNIEnv *env, jobject obj) { - return (jint)dc_is_configured(get_dc_context(env, cls)); + return (jint)dc_is_configured(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_performJobs(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_performJobs(JNIEnv *env, jobject obj) { - dc_perform_imap_jobs(get_dc_context(env, cls)); + dc_perform_imap_jobs(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_idle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_idle(JNIEnv *env, jobject obj) { - dc_perform_imap_idle(get_dc_context(env, cls)); + dc_perform_imap_idle(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptIdle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptIdle(JNIEnv *env, jobject obj) { - dc_interrupt_imap_idle(get_dc_context(env, cls)); + dc_interrupt_imap_idle(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_fetch(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_fetch(JNIEnv *env, jobject obj) { - dc_perform_imap_fetch(get_dc_context(env, cls)); + dc_perform_imap_fetch(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpJobs(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpJobs(JNIEnv *env, jobject obj) { - dc_perform_smtp_jobs(get_dc_context(env, cls)); + dc_perform_smtp_jobs(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpIdle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpIdle(JNIEnv *env, jobject obj) { - dc_perform_smtp_idle(get_dc_context(env, cls)); + dc_perform_smtp_idle(get_dc_context(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptSmtpIdle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptSmtpIdle(JNIEnv *env, jobject obj) { - dc_interrupt_smtp_idle(get_dc_context(env, cls)); + dc_interrupt_smtp_idle(get_dc_context(env, obj)); } /* DcContext - handle contacts */ -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getContacts(JNIEnv *env, jclass cls, jint flags, jstring query) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getContacts(JNIEnv *env, jobject obj, jint flags, jstring query) { CHAR_REF(query); - dc_array_t* ca = dc_get_contacts(get_dc_context(env, cls), flags, queryPtr); + dc_array_t* ca = dc_get_contacts(get_dc_context(env, obj), flags, queryPtr); CHAR_UNREF(query); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_getBlockedCount(JNIEnv *env, jclass cls) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getBlockedCount(JNIEnv *env, jobject obj) { - return dc_get_blocked_cnt(get_dc_context(env, cls)); + return dc_get_blocked_cnt(get_dc_context(env, obj)); } -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getBlockedContacts(JNIEnv *env, jclass cls) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getBlockedContacts(JNIEnv *env, jobject obj) { - dc_array_t* ca = dc_get_blocked_contacts(get_dc_context(env, cls)); + dc_array_t* ca = dc_get_blocked_contacts(get_dc_context(env, obj)); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetContact(JNIEnv *env, jclass c, jlong hContext, jint contact_id) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetContact(JNIEnv *env, jclass cls, jlong hContext, jint contact_id) { return (jlong)dc_get_contact((dc_context_t*)hContext, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_createContact(JNIEnv *env, jclass cls, jstring name, jstring addr) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createContact(JNIEnv *env, jobject obj, jstring name, jstring addr) { CHAR_REF(name); CHAR_REF(addr); - jint ret = (jint)dc_create_contact(get_dc_context(env, cls), namePtr, addrPtr); + jint ret = (jint)dc_create_contact(get_dc_context(env, obj), namePtr, addrPtr); CHAR_UNREF(addr); CHAR_UNREF(name); return ret; } -JNIEXPORT void Java_com_b44t_messenger_DcContext_blockContact(JNIEnv *env, jclass cls, jint contact_id, jint block) +JNIEXPORT void Java_com_b44t_messenger_DcContext_blockContact(JNIEnv *env, jobject obj, jint contact_id, jint block) { - dc_block_contact(get_dc_context(env, cls), contact_id, block); + dc_block_contact(get_dc_context(env, obj), contact_id, block); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_deleteContact(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_deleteContact(JNIEnv *env, jobject obj, jint contact_id) { - return (jint)dc_delete_contact(get_dc_context(env, cls), contact_id); + return (jint)dc_delete_contact(get_dc_context(env, obj), contact_id); } /* DcContext - handle chats */ -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *env, jclass c, jlong hContext, jint listflags, jstring query, jint queryId) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *env, jclass cls, jlong hContext, jint listflags, jstring query, jint queryId) { jlong ret; if( query ) { @@ -363,162 +354,162 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *e } -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChat(JNIEnv *env, jclass c, jlong hContext, jint chat_id) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChat(JNIEnv *env, jclass cls, jlong hContext, jint chat_id) { return (jlong)dc_get_chat((dc_context_t*)hContext, chat_id); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_getChatIdByContactId(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getChatIdByContactId(JNIEnv *env, jobject obj, jint contact_id) { - return (jint)dc_get_chat_id_by_contact_id(get_dc_context(env, cls), contact_id); + return (jint)dc_get_chat_id_by_contact_id(get_dc_context(env, obj), contact_id); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) +JNIEXPORT void Java_com_b44t_messenger_DcContext_markseenMsgs(JNIEnv *env, jobject obj, jintArray msg_ids) { int msg_ids_cnt = 0; const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); - dc_markseen_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt); + dc_markseen_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt); free(msg_ids_ptr); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedChat(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedChat(JNIEnv *env, jobject obj, jint chat_id) { - dc_marknoticed_chat(get_dc_context(env, cls), chat_id); + dc_marknoticed_chat(get_dc_context(env, obj), chat_id); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedContact(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedContact(JNIEnv *env, jobject obj, jint contact_id) { - dc_marknoticed_contact(get_dc_context(env, cls), contact_id); + dc_marknoticed_contact(get_dc_context(env, obj), contact_id); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_archiveChat(JNIEnv *env, jclass cls, jint chat_id, jint archive) +JNIEXPORT void Java_com_b44t_messenger_DcContext_archiveChat(JNIEnv *env, jobject obj, jint chat_id, jint archive) { - dc_archive_chat(get_dc_context(env, cls), chat_id, archive); + dc_archive_chat(get_dc_context(env, obj), chat_id, archive); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByContactId(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByContactId(JNIEnv *env, jobject obj, jint contact_id) { - return (jint)dc_create_chat_by_contact_id(get_dc_context(env, cls), contact_id); + return (jint)dc_create_chat_by_contact_id(get_dc_context(env, obj), contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByMsgId(JNIEnv *env, jclass cls, jint msg_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByMsgId(JNIEnv *env, jobject obj, jint msg_id) { - return (jint)dc_create_chat_by_msg_id(get_dc_context(env, cls), msg_id); + return (jint)dc_create_chat_by_msg_id(get_dc_context(env, obj), msg_id); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_createGroupChat(JNIEnv *env, jclass cls, jboolean verified, jstring name) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createGroupChat(JNIEnv *env, jobject obj, jboolean verified, jstring name) { CHAR_REF(name); - jint ret = (jint)dc_create_group_chat(get_dc_context(env, cls), verified, namePtr); + jint ret = (jint)dc_create_group_chat(get_dc_context(env, obj), verified, namePtr); CHAR_UNREF(name); return ret; } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_isContactInChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_isContactInChat(JNIEnv *env, jobject obj, jint chat_id, jint contact_id) { - return (jint)dc_is_contact_in_chat(get_dc_context(env, cls), chat_id, contact_id); + return (jint)dc_is_contact_in_chat(get_dc_context(env, obj), chat_id, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_addContactToChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_addContactToChat(JNIEnv *env, jobject obj, jint chat_id, jint contact_id) { - return (jint)dc_add_contact_to_chat(get_dc_context(env, cls), chat_id, contact_id); + return (jint)dc_add_contact_to_chat(get_dc_context(env, obj), chat_id, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_removeContactFromChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_removeContactFromChat(JNIEnv *env, jobject obj, jint chat_id, jint contact_id) { - return (jint)dc_remove_contact_from_chat(get_dc_context(env, cls), chat_id, contact_id); + return (jint)dc_remove_contact_from_chat(get_dc_context(env, obj), chat_id, contact_id); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jclass cls, jint chat_id, jstring draft /* NULL=delete */) +JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jobject obj, jint chat_id, jstring draft /* NULL=delete */) { CHAR_REF(draft); - dc_set_text_draft(get_dc_context(env, cls), chat_id, draftPtr /* NULL=delete */); + dc_set_text_draft(get_dc_context(env, obj), chat_id, draftPtr /* NULL=delete */); CHAR_UNREF(draft); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatName(JNIEnv *env, jclass cls, jint chat_id, jstring name) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatName(JNIEnv *env, jobject obj, jint chat_id, jstring name) { CHAR_REF(name); - jint ret = (jint)dc_set_chat_name(get_dc_context(env, cls), chat_id, namePtr); + jint ret = (jint)dc_set_chat_name(get_dc_context(env, obj), chat_id, namePtr); CHAR_UNREF(name); return ret; } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatProfileImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatProfileImage(JNIEnv *env, jobject obj, jint chat_id, jstring image/*NULL=delete*/) { CHAR_REF(image); - jint ret = (jint)dc_set_chat_profile_image(get_dc_context(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/); + jint ret = (jint)dc_set_chat_profile_image(get_dc_context(env, obj), chat_id, imagePtr/*CHAR_REF() preserves NULL*/); CHAR_UNREF(image); return ret; } -JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteChat(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteChat(JNIEnv *env, jobject obj, jint chat_id) { - dc_delete_chat(get_dc_context(env, cls), chat_id); + dc_delete_chat(get_dc_context(env, obj), chat_id); } /* DcContext - handle messages */ -JNIEXPORT jint Java_com_b44t_messenger_DcContext_getFreshMsgCount(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getFreshMsgCount(JNIEnv *env, jobject obj, jint chat_id) { - return dc_get_fresh_msg_cnt(get_dc_context(env, cls), chat_id); + return dc_get_fresh_msg_cnt(get_dc_context(env, obj), chat_id); } -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetMsg(JNIEnv *env, jclass c, jlong hContext, jint id) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetMsg(JNIEnv *env, jobject obj, jlong hContext, jint id) { return (jlong)dc_get_msg((dc_context_t*)hContext, id); } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jclass cls, jint msg_id) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jobject obj, jint msg_id) { - char* temp = dc_get_msg_info(get_dc_context(env, cls), msg_id); + char* temp = dc_get_msg_info(get_dc_context(env, obj), msg_id); jstring ret = JSTRING_NEW(temp); free(temp); return ret; } -JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) +JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jobject obj, jintArray msg_ids) { int msg_ids_cnt = 0; const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); - dc_delete_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt); + dc_delete_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt); free(msg_ids_ptr); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jclass cls, jintArray msg_ids, jint chat_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jobject obj, jintArray msg_ids, jint chat_id) { int msg_ids_cnt = 0; const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); - dc_forward_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt, chat_id); + dc_forward_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt, chat_id); free(msg_ids_ptr); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jclass cls, jint chat_id, jstring text) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jobject obj, jint chat_id, jstring text) { CHAR_REF(text); - jint msg_id = dc_send_text_msg(get_dc_context(env, cls), chat_id, textPtr); + jint msg_id = dc_send_text_msg(get_dc_context(env, obj), chat_id, textPtr); CHAR_UNREF(text); return msg_id; } @@ -530,7 +521,7 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendVcardMsg(JNIEnv *env, jobje } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclass cls, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jobject obj, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname) { jint msg_id = 0; CHAR_REF(file); @@ -538,11 +529,11 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclas CHAR_REF(author); CHAR_REF(trackname); switch( type ) { - case DC_MSG_IMAGE: msg_id = (jint)dc_send_image_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, w, h); break; - case DC_MSG_VIDEO: msg_id = (jint)dc_send_video_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, w, h, ms); break; - case DC_MSG_VOICE: msg_id = (jint)dc_send_voice_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, ms); break; - case DC_MSG_AUDIO: msg_id = (jint)dc_send_audio_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break; - default: msg_id = (jint)dc_send_file_msg (get_dc_context(env, cls), chat_id, filePtr, mimePtr); break; + case DC_MSG_IMAGE: msg_id = (jint)dc_send_image_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, w, h); break; + case DC_MSG_VIDEO: msg_id = (jint)dc_send_video_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, w, h, ms); break; + case DC_MSG_VOICE: msg_id = (jint)dc_send_voice_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, ms); break; + case DC_MSG_AUDIO: msg_id = (jint)dc_send_audio_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break; + default: msg_id = (jint)dc_send_file_msg (get_dc_context(env, obj), chat_id, filePtr, mimePtr); break; } CHAR_UNREF(trackname); CHAR_UNREF(author); @@ -554,29 +545,29 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclas /* DcContext - handle config */ -JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jclass cls, jstring key, jstring value /*may be NULL*/) +JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jobject obj, jstring key, jstring value /*may be NULL*/) { CHAR_REF(key); CHAR_REF(value); - dc_set_config(get_dc_context(env, cls), keyPtr, valuePtr /*is NULL if value is NULL, CHAR_REF() handles this*/); + dc_set_config(get_dc_context(env, obj), keyPtr, valuePtr /*is NULL if value is NULL, CHAR_REF() handles this*/); CHAR_UNREF(key); CHAR_UNREF(value); } -JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfigInt(JNIEnv *env, jclass cls, jstring key, jint value) +JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfigInt(JNIEnv *env, jobject obj, jstring key, jint value) { CHAR_REF(key); - dc_set_config_int(get_dc_context(env, cls), keyPtr, value); + dc_set_config_int(get_dc_context(env, obj), keyPtr, value); CHAR_UNREF(key); } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jclass cls, jstring key, jstring def/*may be NULL*/) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jobject obj, jstring key, jstring def/*may be NULL*/) { CHAR_REF(key); CHAR_REF(def); - char* temp = dc_get_config(get_dc_context(env, cls), keyPtr, defPtr /*is NULL if value is NULL, CHAR_REF() handles this*/); + char* temp = dc_get_config(get_dc_context(env, obj), keyPtr, defPtr /*is NULL if value is NULL, CHAR_REF() handles this*/); jstring ret = NULL; if( temp ) { ret = JSTRING_NEW(temp); @@ -588,10 +579,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jclas } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jclass cls, jstring key, jint def) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jobject obj, jstring key, jint def) { CHAR_REF(key); - jint ret = dc_get_config_int(get_dc_context(env, cls), keyPtr, def); + jint ret = dc_get_config_int(get_dc_context(env, obj), keyPtr, def); CHAR_UNREF(key); return ret; } @@ -599,26 +590,26 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jclas /* DcContext - out-of-band verification */ -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_checkQrCPtr(JNIEnv *env, jclass cls, jstring qr) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_checkQrCPtr(JNIEnv *env, jobject obj, jstring qr) { CHAR_REF(qr); - jlong ret = (jlong)dc_check_qr(get_dc_context(env, cls), qrPtr); + jlong ret = (jlong)dc_check_qr(get_dc_context(env, obj), qrPtr); CHAR_UNREF(qr); return ret; } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getSecurejoinQr(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getSecurejoinQr(JNIEnv *env, jobject obj, jint chat_id) { - char* temp = dc_get_securejoin_qr(get_dc_context(env, cls), chat_id); + char* temp = dc_get_securejoin_qr(get_dc_context(env, obj), chat_id); jstring ret = JSTRING_NEW(temp); free(temp); return ret; } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jclass cls, jstring qr) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jobject obj, jstring qr) { CHAR_REF(qr); - jint ret = dc_join_securejoin(get_dc_context(env, cls), qrPtr); + jint ret = dc_join_securejoin(get_dc_context(env, obj), qrPtr); CHAR_UNREF(qr); return ret; } @@ -626,28 +617,28 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jcl /* DcContext - misc. */ -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getInfo(JNIEnv *env, jclass cls) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getInfo(JNIEnv *env, jobject obj) { - char* temp = dc_get_info(get_dc_context(env, cls)); + char* temp = dc_get_info(get_dc_context(env, obj)); jstring ret = JSTRING_NEW(temp); free(temp); return ret; } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getContactEncrInfo(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getContactEncrInfo(JNIEnv *env, jobject obj, jint contact_id) { - char* temp = dc_get_contact_encrinfo(get_dc_context(env, cls), contact_id); + char* temp = dc_get_contact_encrinfo(get_dc_context(env, obj), contact_id); jstring ret = JSTRING_NEW(temp); free(temp); return ret; } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jclass cls, jstring cmd) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jobject obj, jstring cmd) { CHAR_REF(cmd); - char* temp = dc_cmdline(get_dc_context(env, cls), cmdPtr); + char* temp = dc_cmdline(get_dc_context(env, obj), cmdPtr); jstring ret = JSTRING_NEW(temp); free(temp); CHAR_UNREF(cmd); @@ -655,10 +646,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jclass } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *env, jclass cls) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *env, jobject obj) { jstring setup_code = NULL; - char* temp = dc_initiate_key_transfer(get_dc_context(env, cls)); + char* temp = dc_initiate_key_transfer(get_dc_context(env, obj)); if( temp ) { setup_code = JSTRING_NEW(temp); free(temp); @@ -667,37 +658,37 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv * } -JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode) +JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jobject obj, jint msg_id, jstring setupCode) { CHAR_REF(setupCode); - jboolean ret = dc_continue_key_transfer(get_dc_context(env, cls), msg_id, setupCodePtr); + jboolean ret = dc_continue_key_transfer(get_dc_context(env, obj), msg_id, setupCodePtr); CHAR_UNREF(setupCode); return ret; } -JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jclass cls, jint what, jstring dir) +JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jobject obj, jint what, jstring dir) { CHAR_REF(dir); - dc_imex(get_dc_context(env, cls), what, dirPtr, ""); + dc_imex(get_dc_context(env, obj), what, dirPtr, ""); CHAR_UNREF(dir); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_checkPassword(JNIEnv *env, jclass cls, jstring pw) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_checkPassword(JNIEnv *env, jobject obj, jstring pw) { CHAR_REF(pw); - jint r = dc_check_password(get_dc_context(env, cls), pwPtr); + jint r = dc_check_password(get_dc_context(env, obj), pwPtr); CHAR_UNREF(pw); return r; } -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, jclass cls, jstring dir) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, jobject obj, jstring dir) { CHAR_REF(dir); jstring ret = NULL; - char* temp = dc_imex_has_backup(get_dc_context(env, cls), dirPtr); + char* temp = dc_imex_has_backup(get_dc_context(env, obj), dirPtr); if( temp ) { ret = JSTRING_NEW(temp); free(temp); @@ -707,10 +698,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, j } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_addAddressBook(JNIEnv *env, jclass cls, jstring adrbook) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_addAddressBook(JNIEnv *env, jobject obj, jstring adrbook) { CHAR_REF(adrbook); - int modify_count = dc_add_address_book(get_dc_context(env, cls), adrbookPtr); + int modify_count = dc_add_address_book(get_dc_context(env, obj), adrbookPtr); CHAR_UNREF(adrbook); return modify_count; } @@ -787,7 +778,7 @@ static dc_chat_t* get_dc_chat(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_DcChat_DcChatUnref(JNIEnv *env, jclass c, jlong hChat) +JNIEXPORT void Java_com_b44t_messenger_DcChat_DcChatUnref(JNIEnv *env, jclass cls, jlong hChat) { dc_chat_unref((dc_chat_t*)hChat); } @@ -872,45 +863,45 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcChat_getDraftTimestamp(JNIEnv *env, jo } -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env, jclass cls, jint chat_id, jint msg_type, jint or_msg_type) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env, jobject obj, jint chat_id, jint msg_type, jint or_msg_type) { - dc_array_t* ca = dc_get_chat_media(get_dc_context(env, cls), chat_id, msg_type, or_msg_type); + dc_array_t* ca = dc_get_chat_media(get_dc_context(env, obj), chat_id, msg_type, or_msg_type); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jclass cls, jint msg_id, jint dir) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jobject obj, jint msg_id, jint dir) { - return dc_get_next_media(get_dc_context(env, cls), msg_id, dir); + return dc_get_next_media(get_dc_context(env, obj), msg_id, dir); } -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jobject obj, jint chat_id, jint flags, jint marker1before) { - dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, cls), chat_id, flags, marker1before); + dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, obj), chat_id, flags, marker1before); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_searchMsgs(JNIEnv *env, jobject obj, jint chat_id, jstring query) { CHAR_REF(query); - dc_array_t* ca = dc_search_msgs(get_dc_context(env, cls), chat_id, queryPtr); + dc_array_t* ca = dc_search_msgs(get_dc_context(env, obj), chat_id, queryPtr); CHAR_UNREF(query); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getFreshMsgs(JNIEnv *env, jclass cls) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getFreshMsgs(JNIEnv *env, jobject obj) { - dc_array_t* ca = dc_get_fresh_msgs(get_dc_context(env, cls)); + dc_array_t* ca = dc_get_fresh_msgs(get_dc_context(env, obj)); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatContacts(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatContacts(JNIEnv *env, jobject obj, jint chat_id) { - dc_array_t* ca = dc_get_chat_contacts(get_dc_context(env, cls), chat_id); + dc_array_t* ca = dc_get_chat_contacts(get_dc_context(env, obj), chat_id); return dc_array2jintArray_n_unref(env, ca); } @@ -934,7 +925,7 @@ static dc_msg_t* get_dc_msg(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_DcMsg_DcMsgUnref(JNIEnv *env, jclass c, jlong hMsg) +JNIEXPORT void Java_com_b44t_messenger_DcMsg_DcMsgUnref(JNIEnv *env, jclass cls, jlong hMsg) { dc_msg_unref((dc_msg_t*)hMsg); } @@ -1124,7 +1115,7 @@ static dc_contact_t* get_dc_contact(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_DcContact_DcContactUnref(JNIEnv *env, jclass c, jlong hContact) +JNIEXPORT void Java_com_b44t_messenger_DcContact_DcContactUnref(JNIEnv *env, jclass cls, jlong hContact) { dc_contact_unref((dc_contact_t*)hContact); } @@ -1206,12 +1197,6 @@ static dc_lot_t* get_dc_lot(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_DcLot_unref(JNIEnv *env, jclass cls, jlong hLot) -{ - dc_lot_unref((dc_lot_t*)hLot); -} - - JNIEXPORT jstring Java_com_b44t_messenger_DcLot_getText1(JNIEnv *env, jobject obj) { char* temp = dc_lot_get_text1(get_dc_lot(env, obj)); @@ -1254,7 +1239,7 @@ JNIEXPORT jint Java_com_b44t_messenger_DcLot_getId(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass c, jlong hLot) +JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass cls, jlong hLot) { dc_lot_unref((dc_lot_t*)hLot); } @@ -1265,7 +1250,7 @@ JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass c, j ******************************************************************************/ -JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jclass c, jlong hStr) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jclass cls, jlong hStr) { /* the callback may return a long that represents a pointer to a C-String; this function creates a Java-string from such values. */ if( hStr == 0 ) { @@ -1276,7 +1261,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jcl } -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_String2CPtr(JNIEnv *env, jclass c, jstring str) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_String2CPtr(JNIEnv *env, jclass cls, jstring str) { char* hStr = NULL; if( str ) { diff --git a/src/com/b44t/messenger/DcChat.java b/src/com/b44t/messenger/DcChat.java index c434c493b..4cd23fe11 100644 --- a/src/com/b44t/messenger/DcChat.java +++ b/src/com/b44t/messenger/DcChat.java @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * diff --git a/src/com/b44t/messenger/DcChatlist.java b/src/com/b44t/messenger/DcChatlist.java index 27f8c21be..126d28831 100644 --- a/src/com/b44t/messenger/DcChatlist.java +++ b/src/com/b44t/messenger/DcChatlist.java @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * diff --git a/src/com/b44t/messenger/DcContact.java b/src/com/b44t/messenger/DcContact.java index 60c3c6da5..3d764daf9 100644 --- a/src/com/b44t/messenger/DcContact.java +++ b/src/com/b44t/messenger/DcContact.java @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * diff --git a/src/com/b44t/messenger/DcContext.java b/src/com/b44t/messenger/DcContext.java index 4389e9b33..fc5551f0b 100644 --- a/src/com/b44t/messenger/DcContext.java +++ b/src/com/b44t/messenger/DcContext.java @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * @@ -23,16 +23,8 @@ package com.b44t.messenger; -import android.util.Log; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; - public class DcContext { + public final static int DC_EVENT_INFO = 100; public final static int DC_EVENT_WARNING = 300; public final static int DC_EVENT_ERROR = 400; @@ -75,153 +67,93 @@ public class DcContext { public final static int DC_QR_URL = 332; public final static int DC_QR_ERROR = 400; - public static void init () { - m_hContext = DcContextNew(); + public DcContext(String osName) { + handleEvent(0,0,0); + m_hContext = DcContextNew(osName); } - public native static int open(String dbfile); - public native static void close(); - public native static String getBlobdir(); - public native static void configure(); - public native static void stopOngoingProcess(); - public native static int isConfigured(); - public native static void performJobs(); - public native static void fetch(); - public native static void idle(); - public native static void interruptIdle(); - public native static void performSmtpJobs(); - public native static void performSmtpIdle(); - public native static void interruptSmtpIdle(); - public native static void setConfig(String key, String value); - public native static void setConfigInt(String key, int value); - public native static String getConfig(String key, String def); - public native static int getConfigInt(String key, int def); - public native static String getInfo(); - public native static String cmdline(String cmd); - public native static String initiateKeyTransfer(); - public native static boolean continueKeyTransfer(int msg_id, String setup_code); - public native static void imex(int what, String dir); - public native static String imexHasBackup(String dir); - public native static int checkPassword(String pw); - public native static int[] getContacts(int flags, String query); - public native static int getBlockedCount(); - public native static int[] getBlockedContacts(); - public static DcContact getContact(int contact_id) { return new DcContact(DcContextGetContact(m_hContext, contact_id)); } - public native static int createContact(String name, String addr); - public native static void blockContact(int id, int block); - public native static String getContactEncrInfo(int contact_id); - public native static int deleteContact(int id); - public native static int addAddressBook(String adrbook); - public static DcChatlist getChatlist(int listflags, String query, int queryId) { return new DcChatlist(DcContextGetChatlist(m_hContext, listflags, query, queryId)); } - public static DcChat getChat(int chat_id) { return new DcChat(DcContextGetChat(m_hContext, chat_id)); } - public native static void markseenMsgs(int msg_ids[]); - public native static void marknoticedChat(int chat_id); - public native static void marknoticedContact(int contact_id); - public native static void archiveChat(int chat_id, int archive); - public native static int getChatIdByContactId(int contact_id); - public native static int createChatByContactId(int contact_id); - public native static int createChatByMsgId(int msg_id); - public native static int createGroupChat(boolean verified, String name); - public native static int isContactInChat(int chat_id, int contact_id); - public native static int addContactToChat(int chat_id, int contact_id); - public native static int removeContactFromChat(int chat_id, int contact_id); - public native static void setDraft(int chat_id, String draft/*NULL=delete*/); - public native static int setChatName(int chat_id, String name); - public native static int setChatProfileImage(int chat_id, String name); - public native static int[] getChatMsgs(int chat_id, int flags, int marker1before); - public native static int[] searchMsgs(int chat_id, String query); - public native static int[] getFreshMsgs(); - public native static int[] getChatMedia(int chat_id, int msg_type, int or_msg_type); - public native static int getNextMedia(int msg_id, int dir); - public native static int[] getChatContacts(int chat_id); - public native static void deleteChat(int chat_id); - public static DcMsg getMsg(int msg_id) { return new DcMsg(DcContextGetMsg(m_hContext, msg_id)); } - public native static String getMsgInfo(int id); - public native static int getFreshMsgCount(int chat_id); - public native static void deleteMsgs(int msg_ids[]); - public native static void forwardMsgs(int msg_ids[], int chat_ids); - public native static int sendTextMsg(int chat_id, String text); - public native static int sendVcardMsg(int chat_id, int contact_id); - public native static int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname); - public native static int checkQrCPtr(String qr); - public static DcLot checkQr(String qr) { return new DcLot(checkQrCPtr(qr)); } - public native static String getSecurejoinQr(int chat_id); - public native static int joinSecurejoin(String qr); + public native int open(String dbfile); + public native void close(); + public native String getBlobdir(); + public native void configure(); + public native void stopOngoingProcess(); + public native int isConfigured(); + public native void performJobs(); + public native void fetch(); + public native void idle(); + public native void interruptIdle(); + public native void performSmtpJobs(); + public native void performSmtpIdle(); + public native void interruptSmtpIdle(); + public native void setConfig(String key, String value); + public native void setConfigInt(String key, int value); + public native String getConfig(String key, String def); + public native int getConfigInt(String key, int def); + public native String getInfo(); + public native String cmdline(String cmd); + public native String initiateKeyTransfer(); + public native boolean continueKeyTransfer(int msg_id, String setup_code); + public native void imex(int what, String dir); + public native String imexHasBackup(String dir); + public native int checkPassword(String pw); + public native int[] getContacts(int flags, String query); + public native int getBlockedCount(); + public native int[] getBlockedContacts(); + public DcContact getContact(int contact_id) { return new DcContact(DcContextGetContact(m_hContext, contact_id)); } + public native int createContact(String name, String addr); + public native void blockContact(int id, int block); + public native String getContactEncrInfo(int contact_id); + public native int deleteContact(int id); + public native int addAddressBook(String adrbook); + public DcChatlist getChatlist(int listflags, String query, int queryId) { return new DcChatlist(DcContextGetChatlist(m_hContext, listflags, query, queryId)); } + public DcChat getChat(int chat_id) { return new DcChat(DcContextGetChat(m_hContext, chat_id)); } + public native void markseenMsgs(int msg_ids[]); + public native void marknoticedChat(int chat_id); + public native void marknoticedContact(int contact_id); + public native void archiveChat(int chat_id, int archive); + public native int getChatIdByContactId(int contact_id); + public native int createChatByContactId(int contact_id); + public native int createChatByMsgId(int msg_id); + public native int createGroupChat(boolean verified, String name); + public native int isContactInChat(int chat_id, int contact_id); + public native int addContactToChat(int chat_id, int contact_id); + public native int removeContactFromChat(int chat_id, int contact_id); + public native void setDraft(int chat_id, String draft/*NULL=delete*/); + public native int setChatName(int chat_id, String name); + public native int setChatProfileImage(int chat_id, String name); + public native int[] getChatMsgs(int chat_id, int flags, int marker1before); + public native int[] searchMsgs(int chat_id, String query); + public native int[] getFreshMsgs(); + public native int[] getChatMedia(int chat_id, int msg_type, int or_msg_type); + public native int getNextMedia(int msg_id, int dir); + public native int[] getChatContacts(int chat_id); + public native void deleteChat(int chat_id); + public DcMsg getMsg(int msg_id) { return new DcMsg(DcContextGetMsg(m_hContext, msg_id)); } + public native String getMsgInfo(int id); + public native int getFreshMsgCount(int chat_id); + public native void deleteMsgs(int msg_ids[]); + public native void forwardMsgs(int msg_ids[], int chat_ids); + public native int sendTextMsg(int chat_id, String text); + public native int sendVcardMsg(int chat_id, int contact_id); + public native int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname); + public native int checkQrCPtr(String qr); + public DcLot checkQr(String qr) { return new DcLot(checkQrCPtr(qr)); } + public native String getSecurejoinQr(int chat_id); + public native int joinSecurejoin(String qr); + + // event handling + public static long handleEvent(final int event, final long data1, final long data2) // this function is called from within the C-wrapper + { + return 0; + } // working with raw c-data - private static long m_hContext = 0; // must not be renamed as referenced by JNI - private native static long DcContextNew(); + private long m_hContext = 0; // must not be renamed as referenced by JNI + private native long DcContextNew(String osName); private native static long DcContextGetChatlist(long hContext, int listflags, String query, int queryId); private native static long DcContextGetChat(long hContext, int chat_id); private native static long DcContextGetMsg(long hMailbox, int id); private native static long DcContextGetContact(long hContext, int id); - public native static String CPtr2String(long hString); // get strings eg. from data1 from the callback + public native static String CPtr2String(long hString); public native static long String2CPtr(String str); - - // event handling - public static final Object m_lastErrorLock = new Object(); - public static int m_lastErrorCode = 0; - public static String m_lastErrorString = ""; - public static boolean m_showNextErrorAsToast = true; - - public static long DcCallback(final int event, final long data1, final long data2) // this function is called from within the C-wrapper - { - switch(event) { - case DC_EVENT_INFO: - Log.i("DeltaChat", CPtr2String(data2)); - break; - - case DC_EVENT_WARNING: - Log.w("DeltaChat", CPtr2String(data2)); - break; - - case DC_EVENT_ERROR: - Log.e("DeltaChat", CPtr2String(data2)); - synchronized (m_lastErrorLock) { - m_lastErrorCode = (int)data1; - m_lastErrorString = CPtr2String(data2); - } - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - synchronized (m_lastErrorLock) { - if( m_showNextErrorAsToast ) { - if(ForegroundDetector.getInstance().isForeground()) { - AndroidUtilities.showHint(ApplicationLoader.applicationContext, m_lastErrorString); - } - } - m_showNextErrorAsToast = true; - } - } - });*/ - return 0; - - case DC_EVENT_HTTP_GET: - String httpContent = null; - try { - URL url = new URL(CPtr2String(data1)); - HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); - try { - urlConnection.setConnectTimeout(10*1000); - InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream()); - - BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); - - StringBuilder total = new StringBuilder(); - String line; - while ((line = r.readLine()) != null) { - total.append(line).append('\n'); - } - httpContent = total.toString(); - } finally { - urlConnection.disconnect(); - } - } - catch(Exception e) { - e.printStackTrace(); - } - return String2CPtr(httpContent); - } - return 0; - } } diff --git a/src/com/b44t/messenger/DcLot.java b/src/com/b44t/messenger/DcLot.java index cec0a4794..3db7efd8a 100644 --- a/src/com/b44t/messenger/DcLot.java +++ b/src/com/b44t/messenger/DcLot.java @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * diff --git a/src/com/b44t/messenger/DcMsg.java b/src/com/b44t/messenger/DcMsg.java index 74c95b7ee..42dc98485 100644 --- a/src/com/b44t/messenger/DcMsg.java +++ b/src/com/b44t/messenger/DcMsg.java @@ -1,6 +1,6 @@ /******************************************************************************* * - * Delta Chat Android + * Delta Chat Java Adapter * (C) 2017 Björn Petersen * Contact: r10s@b44t.com, http://b44t.com * @@ -71,11 +71,9 @@ public class DcMsg { public native int getBytes(); public DcLot getSummary(DcChat chat) { return new DcLot(getSummaryCPtr(chat.getCPtr())); } - private native long getSummaryCPtr(long hChat); public native String getSummarytext(int approx_characters); public native int showPadlock(); public DcLot getMediainfo() { return new DcLot(getMediainfoCPtr()); } - private native long getMediainfoCPtr(); public native String getFile(); public native String getFilemime(); public native String getFilename(); @@ -88,5 +86,6 @@ public class DcMsg { // working with raw c-data private long m_hMsg; // must not be renamed as referenced by JNI private native static void DcMsgUnref(long hMsg); - + private native long getSummaryCPtr(long hChat); + private native long getMediainfoCPtr(); }; diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index cb55ad1ae..f2b1cf031 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -82,6 +82,8 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc private volatile boolean isAppVisible; + public DcContext dcContext; + public static ApplicationContext getInstance(Context context) { return (ApplicationContext)context.getApplicationContext(); } @@ -91,8 +93,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc super.onCreate(); System.loadLibrary("native-utils"); - DcContext.DcCallback(0, 0, 0); // do not remove this call; this makes sure, the function is not removed from build or warnings are printed! - DcContext.init(); + dcContext = new DcContext("Android"); initializeRandomNumberFix(); initializeLogging();