Deliver Events to Activity

This commit is contained in:
Florian Märkl 2019-09-15 15:13:09 +02:00
commit ba3339bd6c
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
3 changed files with 18 additions and 6 deletions

View file

@ -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;
}

View file

@ -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
}

View file

@ -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))
}