fixed calling of Kotlin functions from C that made it possible to move
remove UI related companion vars
This commit is contained in:
@ -18,7 +18,7 @@
|
|||||||
#define LOGE(...) \
|
#define LOGE(...) \
|
||||||
((void)__android_log_print(ANDROID_LOG_ERROR, "Baresip", __VA_ARGS__))
|
((void)__android_log_print(ANDROID_LOG_ERROR, "Baresip", __VA_ARGS__))
|
||||||
|
|
||||||
typedef struct tick_context {
|
typedef struct update_context {
|
||||||
JavaVM *javaVM;
|
JavaVM *javaVM;
|
||||||
jclass jniHelperClz;
|
jclass jniHelperClz;
|
||||||
jobject jniHelperObj;
|
jobject jniHelperObj;
|
||||||
@ -26,9 +26,9 @@ typedef struct tick_context {
|
|||||||
jobject mainActivityObj;
|
jobject mainActivityObj;
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
int done;
|
int done;
|
||||||
} TickContext;
|
} UpdateContext;
|
||||||
|
|
||||||
TickContext g_ctx;
|
UpdateContext g_ctx;
|
||||||
|
|
||||||
static void signal_handler(int sig)
|
static void signal_handler(int sig)
|
||||||
{
|
{
|
||||||
@ -103,7 +103,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev,
|
|||||||
}
|
}
|
||||||
event = event_buf;
|
event = event_buf;
|
||||||
|
|
||||||
TickContext *pctx = (TickContext*)(&g_ctx);
|
UpdateContext *pctx = (UpdateContext*)(&g_ctx);
|
||||||
JavaVM *javaVM = pctx->javaVM;
|
JavaVM *javaVM = pctx->javaVM;
|
||||||
JNIEnv *env;
|
JNIEnv *env;
|
||||||
jint res = (*javaVM)->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_6);
|
jint res = (*javaVM)->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_6);
|
||||||
@ -114,7 +114,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jmethodID statusId = (*env)->GetMethodID(env, pctx->jniHelperClz,
|
jmethodID statusId = (*env)->GetMethodID(env, pctx->mainActivityClz,
|
||||||
"updateStatus",
|
"updateStatus",
|
||||||
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
|
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
|
||||||
sprintf(ua_buf, "%lu", (unsigned long)ua);
|
sprintf(ua_buf, "%lu", (unsigned long)ua);
|
||||||
@ -123,7 +123,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev,
|
|||||||
jstring javaCall = (*env)->NewStringUTF(env, call_buf);
|
jstring javaCall = (*env)->NewStringUTF(env, call_buf);
|
||||||
jstring javaEvent = (*env)->NewStringUTF(env, event);
|
jstring javaEvent = (*env)->NewStringUTF(env, event);
|
||||||
LOGD("sending ua/call %s/%s event %s\n", ua_buf, call_buf, event);
|
LOGD("sending ua/call %s/%s event %s\n", ua_buf, call_buf, event);
|
||||||
(*env)->CallVoidMethod(env, pctx->jniHelperObj, statusId, javaEvent, javaUA, javaCall);
|
(*env)->CallVoidMethod(env, pctx->mainActivityObj, statusId, javaEvent, javaUA, javaCall);
|
||||||
(*env)->DeleteLocalRef(env, javaUA);
|
(*env)->DeleteLocalRef(env, javaUA);
|
||||||
(*env)->DeleteLocalRef(env, javaCall);
|
(*env)->DeleteLocalRef(env, javaCall);
|
||||||
(*env)->DeleteLocalRef(env, javaEvent);
|
(*env)->DeleteLocalRef(env, javaEvent);
|
||||||
@ -181,24 +181,25 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
|
|||||||
jclass clz = (*env)->FindClass(env, "com/tutpro/baresip/MainActivity");
|
jclass clz = (*env)->FindClass(env, "com/tutpro/baresip/MainActivity");
|
||||||
g_ctx.jniHelperClz = (*env)->NewGlobalRef(env, clz);
|
g_ctx.jniHelperClz = (*env)->NewGlobalRef(env, clz);
|
||||||
|
|
||||||
jmethodID jniHelperCtor = (*env)->GetMethodID(env, g_ctx.jniHelperClz,
|
jmethodID jniHelperCtor = (*env)->GetMethodID(env, g_ctx.jniHelperClz, "<init>", "()V");
|
||||||
"<init>", "()V");
|
jobject handler = (*env)->NewObject(env, g_ctx.jniHelperClz, jniHelperCtor);
|
||||||
jobject handler = (*env)->NewObject(env, g_ctx.jniHelperClz,
|
|
||||||
jniHelperCtor);
|
|
||||||
g_ctx.jniHelperObj = (*env)->NewGlobalRef(env, handler);
|
g_ctx.jniHelperObj = (*env)->NewGlobalRef(env, handler);
|
||||||
|
|
||||||
g_ctx.done = 0;
|
|
||||||
g_ctx.mainActivityObj = NULL;
|
g_ctx.mainActivityObj = NULL;
|
||||||
return JNI_VERSION_1_6;
|
return JNI_VERSION_1_6;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_com_tutpro_baresip_MainActivity_baresipStart(JNIEnv *env, jobject thiz, jstring javaPath)
|
Java_com_tutpro_baresip_MainActivity_baresipStart(JNIEnv *env, jobject instance, jstring javaPath)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
const char *path = (*env)->GetStringUTFChars(env, javaPath, 0);
|
const char *path = (*env)->GetStringUTFChars(env, javaPath, 0);
|
||||||
struct le *le;
|
struct le *le;
|
||||||
|
|
||||||
|
jclass clz = (*env)->GetObjectClass(env, instance);
|
||||||
|
g_ctx.mainActivityClz = (*env)->NewGlobalRef(env, clz);
|
||||||
|
g_ctx.mainActivityObj = (*env)->NewGlobalRef(env, instance);
|
||||||
|
|
||||||
runLoggingThread();
|
runLoggingThread();
|
||||||
|
|
||||||
err = libre_init();
|
err = libre_init();
|
||||||
@ -237,7 +238,7 @@ Java_com_tutpro_baresip_MainActivity_baresipStart(JNIEnv *env, jobject thiz, jst
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
TickContext *pctx = (TickContext*)(&g_ctx);
|
UpdateContext *pctx = (UpdateContext*)(&g_ctx);
|
||||||
JavaVM *javaVM = pctx->javaVM;
|
JavaVM *javaVM = pctx->javaVM;
|
||||||
jint res = (*javaVM)->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_6);
|
jint res = (*javaVM)->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_6);
|
||||||
if (res != JNI_OK) {
|
if (res != JNI_OK) {
|
||||||
@ -256,9 +257,9 @@ Java_com_tutpro_baresip_MainActivity_baresipStart(JNIEnv *env, jobject thiz, jst
|
|||||||
sprintf(ua_buf, "%lu", (unsigned long)ua);
|
sprintf(ua_buf, "%lu", (unsigned long)ua);
|
||||||
jstring javaUA = (*env)->NewStringUTF(env, ua_buf);
|
jstring javaUA = (*env)->NewStringUTF(env, ua_buf);
|
||||||
LOGD("adding account %s/%s\n", ua_aor(ua), ua_buf);
|
LOGD("adding account %s/%s\n", ua_aor(ua), ua_buf);
|
||||||
jmethodID accountId = (*env)->GetMethodID(env, pctx->jniHelperClz, "addAccount",
|
jmethodID accountId = (*env)->GetMethodID(env, pctx->mainActivityClz, "addAccount",
|
||||||
"(Ljava/lang/String;)V");
|
"(Ljava/lang/String;)V");
|
||||||
(*env)->CallVoidMethod(env, pctx->jniHelperObj, accountId, javaUA);
|
(*env)->CallVoidMethod(env, pctx->mainActivityObj, accountId, javaUA);
|
||||||
(*env)->DeleteLocalRef(env, javaUA);
|
(*env)->DeleteLocalRef(env, javaUA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,6 +24,14 @@ import android.widget.RelativeLayout
|
|||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
internal lateinit var appContext: Context
|
||||||
|
internal lateinit var layout: RelativeLayout
|
||||||
|
internal lateinit var callee: AutoCompleteTextView
|
||||||
|
internal lateinit var callButton: Button
|
||||||
|
internal lateinit var holdButton: Button
|
||||||
|
internal lateinit var accountAdapter: AccountSpinnerAdapter
|
||||||
|
internal lateinit var aorSpinner: Spinner
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@ -132,9 +140,9 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
EditContactsActivity.updateContactsAndNames(applicationContext.filesDir.absolutePath + "/contacts")
|
EditContactsActivity.updateContactsAndNames(applicationContext.filesDir.absolutePath + "/contacts")
|
||||||
|
|
||||||
calleeAdapter = ArrayAdapter(this, android.R.layout.select_dialog_item, EditContactsActivity.Names)
|
|
||||||
callee.threshold = 2
|
callee.threshold = 2
|
||||||
callee.setAdapter<ArrayAdapter<String>>(calleeAdapter)
|
callee.setAdapter<ArrayAdapter<String>>(ArrayAdapter(this,
|
||||||
|
android.R.layout.select_dialog_item, EditContactsActivity.Names))
|
||||||
|
|
||||||
callButton.text = "Call"
|
callButton.text = "Call"
|
||||||
callButton.setOnClickListener {
|
callButton.setOnClickListener {
|
||||||
@ -394,7 +402,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
Log.d("Baresip", "Updating Hangup and Hold")
|
Log.d("Baresip", "Updating Hangup and Hold")
|
||||||
callsIn[final_in_index].status = "Hangup"
|
callsIn[final_in_index].status = "Hangup"
|
||||||
callsIn[final_in_index].hold = false
|
callsIn[final_in_index].hold = false
|
||||||
runOnUiThread {
|
this@MainActivity.runOnUiThread {
|
||||||
val answer_id = (final_in_index + 1) * 10 + 2
|
val answer_id = (final_in_index + 1) * 10 + 2
|
||||||
val answer_but = layout.findViewById(answer_id) as Button
|
val answer_but = layout.findViewById(answer_id) as Button
|
||||||
answer_but.text = "Hangup"
|
answer_but.text = "Hangup"
|
||||||
@ -496,7 +504,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
accounts.add(Account(ua, aor, ""))
|
accounts.add(Account(ua, aor, ""))
|
||||||
aors.add(aor)
|
aors.add(aor)
|
||||||
images.add(R.drawable.yellow)
|
images.add(R.drawable.yellow)
|
||||||
runOnUiThread { accountAdapter.notifyDataSetChanged() }
|
this@MainActivity.runOnUiThread { accountAdapter.notifyDataSetChanged() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
@ -518,14 +526,14 @@ class MainActivity : AppCompatActivity() {
|
|||||||
accounts[account_index].status = "OK"
|
accounts[account_index].status = "OK"
|
||||||
aors[account_index] = aor
|
aors[account_index] = aor
|
||||||
images[account_index] = R.drawable.green
|
images[account_index] = R.drawable.green
|
||||||
runOnUiThread { accountAdapter.notifyDataSetChanged() }
|
this@MainActivity.runOnUiThread { accountAdapter.notifyDataSetChanged() }
|
||||||
}
|
}
|
||||||
"registering failed" -> {
|
"registering failed" -> {
|
||||||
Log.d("Baresip", "Setting status to red")
|
Log.d("Baresip", "Setting status to red")
|
||||||
accounts[account_index].status = "FAIL"
|
accounts[account_index].status = "FAIL"
|
||||||
aors[account_index] = aor
|
aors[account_index] = aor
|
||||||
images[account_index] = R.drawable.red
|
images[account_index] = R.drawable.red
|
||||||
runOnUiThread { accountAdapter.notifyDataSetChanged() }
|
this@MainActivity.runOnUiThread { accountAdapter.notifyDataSetChanged() }
|
||||||
}
|
}
|
||||||
"call ringing" -> {
|
"call ringing" -> {
|
||||||
}
|
}
|
||||||
@ -535,7 +543,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
Log.d("Baresip", "Outbound call " + call + " established")
|
Log.d("Baresip", "Outbound call " + call + " established")
|
||||||
callsOut[out_index].status = "Hangup"
|
callsOut[out_index].status = "Hangup"
|
||||||
callsOut[out_index].hold = false
|
callsOut[out_index].hold = false
|
||||||
runOnUiThread {
|
this@MainActivity.runOnUiThread {
|
||||||
if (ua == aor_ua(aors[aorSpinner.selectedItemPosition])) {
|
if (ua == aor_ua(aors[aorSpinner.selectedItemPosition])) {
|
||||||
callButton.text = "Hangup"
|
callButton.text = "Hangup"
|
||||||
holdButton.text = "Hold"
|
holdButton.text = "Hold"
|
||||||
@ -595,7 +603,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
Log.d("Baresip", "Removing outgoing call " + ua + "/" +
|
Log.d("Baresip", "Removing outgoing call " + ua + "/" +
|
||||||
call + "/" + callsOut[call_index].peerURI)
|
call + "/" + callsOut[call_index].peerURI)
|
||||||
callsOut.removeAt(call_index)
|
callsOut.removeAt(call_index)
|
||||||
runOnUiThread {
|
this@MainActivity.runOnUiThread {
|
||||||
if (ua == aor_ua(aors[aorSpinner.selectedItemPosition])) {
|
if (ua == aor_ua(aors[aorSpinner.selectedItemPosition])) {
|
||||||
callButton.text = "Call"
|
callButton.text = "Call"
|
||||||
callButton.isEnabled = true
|
callButton.isEnabled = true
|
||||||
@ -635,15 +643,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
internal lateinit var appContext: Context
|
|
||||||
internal lateinit var layout: RelativeLayout
|
|
||||||
internal lateinit var callee: AutoCompleteTextView
|
|
||||||
internal lateinit var callButton: Button
|
|
||||||
internal lateinit var holdButton: Button
|
|
||||||
internal lateinit var accountAdapter: AccountSpinnerAdapter
|
|
||||||
internal lateinit var aorSpinner: Spinner
|
|
||||||
internal lateinit var calleeAdapter: ArrayAdapter<String>
|
|
||||||
|
|
||||||
internal var running: Boolean = false
|
internal var running: Boolean = false
|
||||||
internal var accounts = ArrayList<Account>()
|
internal var accounts = ArrayList<Account>()
|
||||||
internal var aors = ArrayList<String>()
|
internal var aors = ArrayList<String>()
|
||||||
|
|||||||
Reference in New Issue
Block a user