From ba3339bd6c6c112068d31d1b06740c172f1807f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sun, 15 Sep 2019 15:13:09 +0200 Subject: [PATCH] Deliver Events to Activity --- android/app/src/main/cpp/chiaki-jni.c | 5 +++-- .../main/java/com/metallic/chiaki/StreamActivity.kt | 6 ++++++ .../src/main/java/com/metallic/chiaki/lib/Chiaki.kt | 13 +++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/cpp/chiaki-jni.c b/android/app/src/main/cpp/chiaki-jni.c index 1116447..2d73417 100644 --- a/android/app/src/main/cpp/chiaki-jni.c +++ b/android/app/src/main/cpp/chiaki-jni.c @@ -118,12 +118,13 @@ static void android_chiaki_event_cb(ChiakiEvent *event, void *user) case CHIAKI_EVENT_QUIT: { char *reason_str = strdup_jni(event->quit.reason_str); - jstring reason_str_java = E->NewStringUTF(env, reason_str ? reason_str : ""); + jstring reason_str_java = reason_str ? E->NewStringUTF(env, reason_str) : NULL; E->CallVoidMethod(env, session->java_session, session->java_session_event_quit_meth, (jint)event->quit.reason, reason_str_java); - E->DeleteLocalRef(env, reason_str_java); + if(reason_str_java) + E->DeleteLocalRef(env, reason_str_java); free(reason_str); break; } diff --git a/android/app/src/main/java/com/metallic/chiaki/StreamActivity.kt b/android/app/src/main/java/com/metallic/chiaki/StreamActivity.kt index bc94e50..a396bd7 100644 --- a/android/app/src/main/java/com/metallic/chiaki/StreamActivity.kt +++ b/android/app/src/main/java/com/metallic/chiaki/StreamActivity.kt @@ -1,8 +1,10 @@ package com.metallic.chiaki import android.os.Bundle +import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.metallic.chiaki.lib.ConnectInfo +import com.metallic.chiaki.lib.Event import com.metallic.chiaki.lib.Session import com.metallic.chiaki.lib.SessionCreateError import kotlinx.android.synthetic.main.activity_stream.* @@ -31,6 +33,10 @@ class StreamActivity : AppCompatActivity() try { val session = Session(connectInfo) + session.eventCallback = { + Log.i("StreamActivity", "Got Event $it") + } + session.start() this.session = session } diff --git a/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt b/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt index b27525e..868cd1b 100644 --- a/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt +++ b/android/app/src/main/java/com/metallic/chiaki/lib/Chiaki.kt @@ -53,13 +53,19 @@ class QuitReason(val value: Int) sealed class Event data class LoginPinRequestEvent(val pinIncorrect: Boolean): Event() -data class QuitEvent(val reason: QuitReason, val reasonString: String): Event() +data class QuitEvent(val reason: QuitReason, val reasonString: String?): Event() class SessionCreateError(val errorCode: ErrorCode): Exception("Failed to create Session: $errorCode") class Session(connectInfo: ConnectInfo) { + interface EventCallback + { + fun sessionEvent(event: Event) + } + private var nativePtr: Long + var eventCallback: ((event: Event) -> Unit)? = null init { @@ -85,8 +91,7 @@ class Session(connectInfo: ConnectInfo) private fun event(event: Event) { - // TODO: send to callback - Log.d("ChiakiJNI", "Got event $event") + eventCallback?.let { it(event) } } private fun eventLoginPinRequest(pinIncorrect: Boolean) @@ -94,7 +99,7 @@ class Session(connectInfo: ConnectInfo) event(LoginPinRequestEvent(pinIncorrect)) } - private fun eventQuit(reasonValue: Int, reasonString: String) + private fun eventQuit(reasonValue: Int, reasonString: String?) { event(QuitEvent(QuitReason(reasonValue), reasonString)) }