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[] =
|
JNINativeMethod SmsBuffer::methods[] =
|
||||||
{
|
{
|
||||||
DECL_JNIMETHOD(createNativeObject, "()J")
|
DECL_JNIMETHOD(createNativeObject, "()J")
|
||||||
DECL_JNIMETHOD(deleteNativeObject, "(J)V")
|
DECL_JNIMETHOD(deleteNativeObject, "()V")
|
||||||
DECL_JNIMETHOD(empty, "(J)Z")
|
DECL_JNIMETHOD(empty, "()Z")
|
||||||
DECL_JNIMETHOD(asRawJsonString, "(J)Ljava/lang/String;")
|
DECL_JNIMETHOD(asRawJsonString, "()Ljava/lang/String;")
|
||||||
DECL_JNIMETHOD(push,
|
DECL_JNIMETHOD(push,
|
||||||
"(JIIIJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")
|
"(IIIJLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")
|
||||||
DECL_JNIMETHOD(print, "(J)V")
|
DECL_JNIMETHOD(print, "()V")
|
||||||
};
|
};
|
||||||
DECL_METHODSIZE(SmsBuffer)
|
DECL_METHODSIZE(SmsBuffer)
|
||||||
|
|
||||||
#define SMSBUFFER_CAST \
|
#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); \
|
SmsBuffer *me = reinterpret_cast<SmsBuffer *>(ptr); \
|
||||||
if (!me) { \
|
if (!me) { \
|
||||||
__android_log_print(ANDROID_LOG_FATAL, LOG_TAG, "It's not a SmsBuffer!"); \
|
__android_log_print(ANDROID_LOG_FATAL, LOG_TAG, "It's not a SmsBuffer!"); \
|
||||||
assert(false); \
|
assert(false); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SmsBuffer::gJava_inited = false;
|
||||||
|
jfieldID SmsBuffer::gJava_mHandle{};
|
||||||
|
|
||||||
jlong SmsBuffer::createNativeObject(JNIEnv *env, jobject self)
|
jlong SmsBuffer::createNativeObject(JNIEnv *env, jobject self)
|
||||||
{
|
{
|
||||||
return reinterpret_cast<jlong>(new SmsBuffer());
|
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);
|
__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "deleteNativeObject 0x%li", ptr);
|
||||||
delete reinterpret_cast<SmsBuffer *>(ptr);
|
delete reinterpret_cast<SmsBuffer *>(ptr);
|
||||||
}
|
}
|
||||||
@ -62,7 +71,7 @@ void SmsBuffer::reset_buffer()
|
|||||||
m_sms_count = 0;
|
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)
|
jlong date, jstring address, jstring body, jstring read, jstring seen)
|
||||||
{
|
{
|
||||||
SMSBUFFER_CAST
|
SMSBUFFER_CAST
|
||||||
@ -97,7 +106,7 @@ void SmsBuffer::_push(int msg_id, int mailbox_id, int type,
|
|||||||
m_sms_count++;
|
m_sms_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
jboolean SmsBuffer::empty(JNIEnv *env, jobject self, jlong ptr)
|
jboolean SmsBuffer::empty(JNIEnv *env, jobject self)
|
||||||
{
|
{
|
||||||
SMSBUFFER_CAST
|
SMSBUFFER_CAST
|
||||||
return (jboolean) (me->_empty() ? 1 : 0);
|
return (jboolean) (me->_empty() ? 1 : 0);
|
||||||
@ -108,7 +117,7 @@ bool SmsBuffer::_empty() const
|
|||||||
return m_buffer_empty;
|
return m_buffer_empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmsBuffer::print(JNIEnv *env, jobject self, jlong ptr)
|
void SmsBuffer::print(JNIEnv *env, jobject self)
|
||||||
{
|
{
|
||||||
SMSBUFFER_CAST
|
SMSBUFFER_CAST
|
||||||
me->_print();
|
me->_print();
|
||||||
@ -120,7 +129,7 @@ void SmsBuffer::_print()
|
|||||||
m_buffer.str().c_str());
|
m_buffer.str().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
jstring SmsBuffer::asRawJsonString(JNIEnv *env, jobject self, jlong ptr)
|
jstring SmsBuffer::asRawJsonString(JNIEnv *env, jobject self)
|
||||||
{
|
{
|
||||||
SMSBUFFER_CAST
|
SMSBUFFER_CAST
|
||||||
std::string result;
|
std::string result;
|
||||||
|
@ -28,12 +28,12 @@ public:
|
|||||||
~SmsBuffer() = default;
|
~SmsBuffer() = default;
|
||||||
|
|
||||||
JNIEXPORT static jlong JNICALL createNativeObject(JNIEnv *env, jobject self);
|
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
|
* 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,
|
jint mailbox_id, jint type, jlong date, jstring address,
|
||||||
jstring body, jstring read, jstring seen);
|
jstring body, jstring read, jstring seen);
|
||||||
void _push(int msg_id, int mailbox_id, int type,
|
void _push(int msg_id, int mailbox_id, int type,
|
||||||
@ -44,19 +44,19 @@ public:
|
|||||||
* empty method
|
* 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;
|
bool _empty() const;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print method
|
* print method
|
||||||
*/
|
*/
|
||||||
JNIEXPORT static void JNICALL print(JNIEnv *env, jobject self, jlong ptr);
|
JNIEXPORT static void JNICALL print(JNIEnv *env, jobject self);
|
||||||
void _print();
|
void _print();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* asRawJsonString method
|
* 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);
|
void as_raw_json_string(std::string &result);
|
||||||
|
|
||||||
DECL_JNICLASSATTRS
|
DECL_JNICLASSATTRS
|
||||||
@ -66,4 +66,7 @@ private:
|
|||||||
std::stringstream m_buffer;
|
std::stringstream m_buffer;
|
||||||
uint32_t m_sms_count{0};
|
uint32_t m_sms_count{0};
|
||||||
bool m_buffer_empty{true};
|
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 long createNativeObject();
|
||||||
private static native void deleteNativeObject(long handle);
|
private native void deleteNativeObject();
|
||||||
|
public native void push(int id, int mbid, int type, long date, String address,
|
||||||
/*
|
String body, String read, String seen);
|
||||||
JNI: push method
|
public native boolean empty();
|
||||||
*/
|
public native void print();
|
||||||
public static native void push(long handle, int id, int mbid, int type, long date,
|
public native String asRawJsonString();
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
if (mHandle == 0) {
|
if (mHandle == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SmsBuffer.deleteNativeObject(mHandle);
|
deleteNativeObject();
|
||||||
mHandle = 0;
|
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