mirror of
https://github.com/nerzhul/ownCloud-SMS-App.git
synced 2025-06-21 14:56:27 +00:00
Fix JNI implementation, don't use static methods in Java
This commit is contained in:
parent
38e529e3f6
commit
d092ba4a4d
@ -28,29 +28,38 @@ const char *SmsBuffer::classPathName = "fr/unix_experience/owncloud_sms/jni/SmsB
|
||||
JNINativeMethod SmsBuffer::methods[] =
|
||||
{
|
||||
DECL_JNIMETHOD(createNativeObject, "()J")
|
||||
DECL_JNIMETHOD(deleteNativeObject, "(J)V")
|
||||
DECL_JNIMETHOD(empty, "(J)Z")
|
||||
DECL_JNIMETHOD(asRawJsonString, "(J)Ljava/lang/String;")
|
||||
DECL_JNIMETHOD(deleteNativeObject, "()V")
|
||||
DECL_JNIMETHOD(empty, "()Z")
|
||||
DECL_JNIMETHOD(asRawJsonString, "()Ljava/lang/String;")
|
||||
DECL_JNIMETHOD(push,
|
||||
"(JIIIJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")
|
||||
DECL_JNIMETHOD(print, "(J)V")
|
||||
"(IIIJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")
|
||||
DECL_JNIMETHOD(print, "()V")
|
||||
};
|
||||
DECL_METHODSIZE(SmsBuffer)
|
||||
|
||||
#define SMSBUFFER_CAST \
|
||||
if (!SmsBuffer::gJava_inited) { \
|
||||
SmsBuffer::gJava_inited = true; \
|
||||
SmsBuffer::gJava_mHandle = env->GetFieldID(env->GetObjectClass(self), "mHandle", "J"); \
|
||||
} \
|
||||
long ptr = env->GetLongField(self, SmsBuffer::gJava_mHandle); \
|
||||
SmsBuffer *me = reinterpret_cast<SmsBuffer *>(ptr); \
|
||||
if (!me) { \
|
||||
__android_log_print(ANDROID_LOG_FATAL, LOG_TAG, "It's not a SmsBuffer!"); \
|
||||
assert(false); \
|
||||
}
|
||||
|
||||
bool SmsBuffer::gJava_inited = false;
|
||||
jfieldID SmsBuffer::gJava_mHandle{};
|
||||
|
||||
jlong SmsBuffer::createNativeObject(JNIEnv *env, jobject self)
|
||||
{
|
||||
return reinterpret_cast<jlong>(new SmsBuffer());
|
||||
}
|
||||
|
||||
void SmsBuffer::deleteNativeObject(JNIEnv *env, jobject self, jlong ptr)
|
||||
void SmsBuffer::deleteNativeObject(JNIEnv *env, jobject self)
|
||||
{
|
||||
SMSBUFFER_CAST
|
||||
__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "deleteNativeObject 0x%li", ptr);
|
||||
delete reinterpret_cast<SmsBuffer *>(ptr);
|
||||
}
|
||||
@ -62,7 +71,7 @@ void SmsBuffer::reset_buffer()
|
||||
m_sms_count = 0;
|
||||
}
|
||||
|
||||
void SmsBuffer::push(JNIEnv *env, jobject self, jlong ptr, jint msg_id, jint mailbox_id, jint type,
|
||||
void SmsBuffer::push(JNIEnv *env, jobject self, jint msg_id, jint mailbox_id, jint type,
|
||||
jlong date, jstring address, jstring body, jstring read, jstring seen)
|
||||
{
|
||||
SMSBUFFER_CAST
|
||||
@ -97,7 +106,7 @@ void SmsBuffer::_push(int msg_id, int mailbox_id, int type,
|
||||
m_sms_count++;
|
||||
}
|
||||
|
||||
jboolean SmsBuffer::empty(JNIEnv *env, jobject self, jlong ptr)
|
||||
jboolean SmsBuffer::empty(JNIEnv *env, jobject self)
|
||||
{
|
||||
SMSBUFFER_CAST
|
||||
return (jboolean) (me->_empty() ? 1 : 0);
|
||||
@ -108,7 +117,7 @@ bool SmsBuffer::_empty() const
|
||||
return m_buffer_empty;
|
||||
}
|
||||
|
||||
void SmsBuffer::print(JNIEnv *env, jobject self, jlong ptr)
|
||||
void SmsBuffer::print(JNIEnv *env, jobject self)
|
||||
{
|
||||
SMSBUFFER_CAST
|
||||
me->_print();
|
||||
@ -120,7 +129,7 @@ void SmsBuffer::_print()
|
||||
m_buffer.str().c_str());
|
||||
}
|
||||
|
||||
jstring SmsBuffer::asRawJsonString(JNIEnv *env, jobject self, jlong ptr)
|
||||
jstring SmsBuffer::asRawJsonString(JNIEnv *env, jobject self)
|
||||
{
|
||||
SMSBUFFER_CAST
|
||||
std::string result;
|
||||
|
@ -28,12 +28,12 @@ public:
|
||||
~SmsBuffer() = default;
|
||||
|
||||
JNIEXPORT static jlong JNICALL createNativeObject(JNIEnv *env, jobject self);
|
||||
JNIEXPORT static void JNICALL deleteNativeObject(JNIEnv *env, jobject self, jlong ptr);
|
||||
JNIEXPORT static void JNICALL deleteNativeObject(JNIEnv *env, jobject self);
|
||||
|
||||
/*
|
||||
* push method
|
||||
*/
|
||||
JNIEXPORT static void JNICALL push(JNIEnv *env, jobject self, jlong ptr, jint msg_id,
|
||||
JNIEXPORT static void JNICALL push(JNIEnv *env, jobject self, jint msg_id,
|
||||
jint mailbox_id, jint type, jlong date, jstring address,
|
||||
jstring body, jstring read, jstring seen);
|
||||
void _push(int msg_id, int mailbox_id, int type,
|
||||
@ -44,19 +44,19 @@ public:
|
||||
* empty method
|
||||
*/
|
||||
|
||||
JNIEXPORT static jboolean JNICALL empty(JNIEnv *env, jobject self, jlong ptr);
|
||||
JNIEXPORT static jboolean JNICALL empty(JNIEnv *env, jobject self);
|
||||
bool _empty() const;
|
||||
|
||||
/*
|
||||
* print method
|
||||
*/
|
||||
JNIEXPORT static void JNICALL print(JNIEnv *env, jobject self, jlong ptr);
|
||||
JNIEXPORT static void JNICALL print(JNIEnv *env, jobject self);
|
||||
void _print();
|
||||
|
||||
/*
|
||||
* asRawJsonString method
|
||||
*/
|
||||
JNIEXPORT static jstring JNICALL asRawJsonString(JNIEnv *env, jobject self, jlong ptr);
|
||||
JNIEXPORT static jstring JNICALL asRawJsonString(JNIEnv *env, jobject self);
|
||||
void as_raw_json_string(std::string &result);
|
||||
|
||||
DECL_JNICLASSATTRS
|
||||
@ -66,4 +66,7 @@ private:
|
||||
std::stringstream m_buffer;
|
||||
uint32_t m_sms_count{0};
|
||||
bool m_buffer_empty{true};
|
||||
|
||||
static bool gJava_inited;
|
||||
static jfieldID gJava_mHandle;
|
||||
};
|
@ -36,53 +36,21 @@ public class SmsBuffer {
|
||||
}
|
||||
|
||||
private static native long createNativeObject();
|
||||
private static native void deleteNativeObject(long handle);
|
||||
|
||||
/*
|
||||
JNI: push method
|
||||
*/
|
||||
public static native void push(long handle, int id, int mbid, int type, long date,
|
||||
String address, String body, String read, String seen);
|
||||
|
||||
public void push(int id, int mbid, int type, long date, String address, String body,
|
||||
String read, String seen) {
|
||||
if (mHandle == 0) {
|
||||
throw new IllegalAccessError("Pushing data to empty native handler, aborting");
|
||||
}
|
||||
SmsBuffer.push(mHandle, id, mbid, type, date, address, body, read, seen);
|
||||
}
|
||||
private native void deleteNativeObject();
|
||||
public native void push(int id, int mbid, int type, long date, String address,
|
||||
String body, String read, String seen);
|
||||
public native boolean empty();
|
||||
public native void print();
|
||||
public native String asRawJsonString();
|
||||
|
||||
public void clear() {
|
||||
if (mHandle == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
SmsBuffer.deleteNativeObject(mHandle);
|
||||
deleteNativeObject();
|
||||
mHandle = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
JNI: Eepty method
|
||||
*/
|
||||
public static native boolean empty(long handle);
|
||||
|
||||
public boolean empty() {
|
||||
return SmsBuffer.empty(mHandle);
|
||||
}
|
||||
|
||||
/*
|
||||
JNI: print method
|
||||
*/
|
||||
public static native void print(long handle);
|
||||
public void print() {
|
||||
SmsBuffer.print(mHandle);
|
||||
}
|
||||
|
||||
/*
|
||||
JNI: asRawJsonString method
|
||||
*/
|
||||
public static native String asRawJsonString(long handle);
|
||||
public String asRawJsonString() {
|
||||
return SmsBuffer.asRawJsonString(mHandle);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user