From e87333b3054e72918e78218dc96c5189d33059da Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Wed, 13 Mar 2019 05:58:32 +0200 Subject: [PATCH] - more chat related improvements --- app/src/main/cpp/baresip.c | 13 +++++++++---- .../kotlin/com/tutpro/baresip/BaresipService.kt | 5 +++-- .../kotlin/com/tutpro/baresip/ChatActivity.kt | 17 ++++++++++++----- .../com/tutpro/baresip/ChatListAdapter.kt | 6 +++++- .../kotlin/com/tutpro/baresip/MainActivity.kt | 5 +++-- .../main/kotlin/com/tutpro/baresip/Message.kt | 5 +++-- .../com/tutpro/baresip/MessageListAdapter.kt | 6 +++++- app/src/main/res/drawable/peer_bg.xml | 2 +- app/src/main/res/values/colors.xml | 2 +- 9 files changed, 42 insertions(+), 19 deletions(-) diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index b6c0475d..9433909f 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -239,13 +239,16 @@ static void message_handler(struct ua *ua, const struct pl *peer, const struct p static void send_resp_handler(int err, const struct sip_msg *msg, void *arg) { (void)arg; + char reason_buf[64]; if (err) { LOGD("send_response_handler received error %d\n", err); return; } - LOGD("send_response_handler received response %u at %s\n", msg->scode, (char *)arg); + pl_strcpy(&(msg->reason), reason_buf, 64); + LOGD("send_response_handler received response '%u %s' at %s\n", msg->scode, + reason_buf, (char *)arg); BaresipContext *pctx = (BaresipContext*)(&g_ctx); JavaVM *javaVM = pctx->javaVM; @@ -259,11 +262,13 @@ static void send_resp_handler(int err, const struct sip_msg *msg, void *arg) } } jmethodID methodId = (*env)->GetMethodID(env, pctx->mainActivityClz, - "messageResponse", "(ILjava/lang/String;)V"); + "messageResponse", + "(ILjava/lang/String;Ljava/lang/String;)V"); + jstring javaReason = (*env)->NewStringUTF(env, reason_buf); jstring javaTime = (*env)->NewStringUTF(env, (char *)arg); - (*env)->CallVoidMethod(env, pctx->mainActivityObj, methodId, msg->scode, javaTime); + (*env)->CallVoidMethod(env, pctx->mainActivityObj, methodId, msg->scode, javaReason, javaTime); + (*env)->DeleteLocalRef(env, javaReason); (*env)->DeleteLocalRef(env, javaTime); - } enum { diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 3efc1f56..1925fc67 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -501,10 +501,11 @@ class BaresipService: Service() { } @Keep - fun messageResponse(responseCode: Int, time: String) { - Log.d(LOG_TAG, "Message response $responseCode at $time") + fun messageResponse(responseCode: Int, responseReason: String, time: String) { + Log.d(LOG_TAG, "Message response '$responseCode $responseReason' at $time") val intent = Intent("message response") intent.putExtra("response code", responseCode) + intent.putExtra("response reason", responseReason) intent.putExtra("time", time) LocalBroadcastManager.getInstance(this).sendBroadcast(intent) } diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt index 3ec4554b..e12da992 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt @@ -118,23 +118,27 @@ class ChatActivity : AppCompatActivity() { if (msgText.length > 0) { imm.hideSoftInputFromWindow(newMessage.windowToken, 0) val time = System.currentTimeMillis() - val msg = Message(aor, peerUri, R.drawable.arrow_up_yellow, msgText, time, true) + val msg = Message(aor, peerUri, msgText, time, R.drawable.arrow_up_yellow, + 0, "", true) Message.add(msg) chatMessages.add(msg) - mlAdapter.notifyDataSetChanged() if (Api.message_send(ua.uap, peerUri, msgText, time.toString()) != 0) { Toast.makeText(getApplicationContext(), "Sending of message failed!", Toast.LENGTH_SHORT).show() + msg.direction = R.drawable.arrow_up_red + msg.responseReason = "Sending of message failed" } else { newMessage.text.clear() BaresipService.chatTexts.remove("$aor::$peerUri") } + mlAdapter.notifyDataSetChanged() } } messageResponseReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { handleMessageResponse(intent.getIntExtra("response code", 0), + intent.getStringExtra("response reason"), intent.getStringExtra("time")) } } @@ -208,14 +212,17 @@ class ChatActivity : AppCompatActivity() { return res } - private fun handleMessageResponse(responseCode: Int, time: String) { + private fun handleMessageResponse(responseCode: Int, responseReason: String, time: String) { val timeStamp = time.toLong() for (m in chatMessages.reversed()) if (m.timeStamp == timeStamp) { - if (responseCode < 300) + if (responseCode < 300) { m.direction = R.drawable.arrow_up_green - else + } else { m.direction = R.drawable.arrow_up_red + m.responseCode = responseCode + m.responseReason = responseReason + } mlAdapter.notifyDataSetChanged() return } diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatListAdapter.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatListAdapter.kt index 3fc31440..0fcbb818 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatListAdapter.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatListAdapter.kt @@ -56,7 +56,11 @@ class ChatListAdapter(private val cxt: Context, private var rows: ArrayList - + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cfeae863..f11623cd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,6 +7,6 @@ #1c9588 #93d3cd #9e9e9e - #eeeeee + #e0e0e0 #b00020