- more chat related improvements
This commit is contained in:
@@ -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)
|
static void send_resp_handler(int err, const struct sip_msg *msg, void *arg)
|
||||||
{
|
{
|
||||||
(void)arg;
|
(void)arg;
|
||||||
|
char reason_buf[64];
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
LOGD("send_response_handler received error %d\n", err);
|
LOGD("send_response_handler received error %d\n", err);
|
||||||
return;
|
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);
|
BaresipContext *pctx = (BaresipContext*)(&g_ctx);
|
||||||
JavaVM *javaVM = pctx->javaVM;
|
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,
|
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);
|
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);
|
(*env)->DeleteLocalRef(env, javaTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|||||||
@@ -501,10 +501,11 @@ class BaresipService: Service() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
fun messageResponse(responseCode: Int, time: String) {
|
fun messageResponse(responseCode: Int, responseReason: String, time: String) {
|
||||||
Log.d(LOG_TAG, "Message response $responseCode at $time")
|
Log.d(LOG_TAG, "Message response '$responseCode $responseReason' at $time")
|
||||||
val intent = Intent("message response")
|
val intent = Intent("message response")
|
||||||
intent.putExtra("response code", responseCode)
|
intent.putExtra("response code", responseCode)
|
||||||
|
intent.putExtra("response reason", responseReason)
|
||||||
intent.putExtra("time", time)
|
intent.putExtra("time", time)
|
||||||
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
|
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,23 +118,27 @@ class ChatActivity : AppCompatActivity() {
|
|||||||
if (msgText.length > 0) {
|
if (msgText.length > 0) {
|
||||||
imm.hideSoftInputFromWindow(newMessage.windowToken, 0)
|
imm.hideSoftInputFromWindow(newMessage.windowToken, 0)
|
||||||
val time = System.currentTimeMillis()
|
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)
|
Message.add(msg)
|
||||||
chatMessages.add(msg)
|
chatMessages.add(msg)
|
||||||
mlAdapter.notifyDataSetChanged()
|
|
||||||
if (Api.message_send(ua.uap, peerUri, msgText, time.toString()) != 0) {
|
if (Api.message_send(ua.uap, peerUri, msgText, time.toString()) != 0) {
|
||||||
Toast.makeText(getApplicationContext(), "Sending of message failed!",
|
Toast.makeText(getApplicationContext(), "Sending of message failed!",
|
||||||
Toast.LENGTH_SHORT).show()
|
Toast.LENGTH_SHORT).show()
|
||||||
|
msg.direction = R.drawable.arrow_up_red
|
||||||
|
msg.responseReason = "Sending of message failed"
|
||||||
} else {
|
} else {
|
||||||
newMessage.text.clear()
|
newMessage.text.clear()
|
||||||
BaresipService.chatTexts.remove("$aor::$peerUri")
|
BaresipService.chatTexts.remove("$aor::$peerUri")
|
||||||
}
|
}
|
||||||
|
mlAdapter.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
messageResponseReceiver = object : BroadcastReceiver() {
|
messageResponseReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
handleMessageResponse(intent.getIntExtra("response code", 0),
|
handleMessageResponse(intent.getIntExtra("response code", 0),
|
||||||
|
intent.getStringExtra("response reason"),
|
||||||
intent.getStringExtra("time"))
|
intent.getStringExtra("time"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,14 +212,17 @@ class ChatActivity : AppCompatActivity() {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleMessageResponse(responseCode: Int, time: String) {
|
private fun handleMessageResponse(responseCode: Int, responseReason: String, time: String) {
|
||||||
val timeStamp = time.toLong()
|
val timeStamp = time.toLong()
|
||||||
for (m in chatMessages.reversed())
|
for (m in chatMessages.reversed())
|
||||||
if (m.timeStamp == timeStamp) {
|
if (m.timeStamp == timeStamp) {
|
||||||
if (responseCode < 300)
|
if (responseCode < 300) {
|
||||||
m.direction = R.drawable.arrow_up_green
|
m.direction = R.drawable.arrow_up_green
|
||||||
else
|
} else {
|
||||||
m.direction = R.drawable.arrow_up_red
|
m.direction = R.drawable.arrow_up_red
|
||||||
|
m.responseCode = responseCode
|
||||||
|
m.responseReason = responseReason
|
||||||
|
}
|
||||||
mlAdapter.notifyDataSetChanged()
|
mlAdapter.notifyDataSetChanged()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,11 @@ class ChatListAdapter(private val cxt: Context, private var rows: ArrayList<Mess
|
|||||||
if (info.length < 6) info = "Today $info"
|
if (info.length < 6) info = "Today $info"
|
||||||
infoView.text = "$info - $sender"
|
infoView.text = "$info - $sender"
|
||||||
if (message.direction == R.drawable.arrow_up_red) {
|
if (message.direction == R.drawable.arrow_up_red) {
|
||||||
infoView.text = "${infoView.text} - Message Delivery Failed"
|
if (message.responseCode != 0)
|
||||||
|
infoView.text = "${infoView.text} - Failed: ${message.responseCode} " +
|
||||||
|
"${message.responseReason}"
|
||||||
|
else
|
||||||
|
infoView.text = "${infoView.text} - Sending of message failed!"
|
||||||
infoView.setTextColor(ContextCompat.getColor(cxt, R.color.colorAccent))
|
infoView.setTextColor(ContextCompat.getColor(cxt, R.color.colorAccent))
|
||||||
}
|
}
|
||||||
val textView = chatView.findViewById(R.id.text) as TextView
|
val textView = chatView.findViewById(R.id.text) as TextView
|
||||||
|
|||||||
@@ -650,8 +650,9 @@ class MainActivity : AppCompatActivity() {
|
|||||||
val msgText = params[2]
|
val msgText = params[2]
|
||||||
val time = params[3]
|
val time = params[3]
|
||||||
Log.d("Baresip", "Incoming message $aor/$peerUri/$msgText")
|
Log.d("Baresip", "Incoming message $aor/$peerUri/$msgText")
|
||||||
Message.add(Message(aor, peerUri, R.drawable.arrow_down_green, msgText,
|
Message.add(Message(aor, peerUri, msgText, time.toLong(),
|
||||||
time.toLong(), true))
|
R.drawable.arrow_down_green, 0, "",
|
||||||
|
true))
|
||||||
if (Utils.isVisible()) {
|
if (Utils.isVisible()) {
|
||||||
if ((aorSpinner.selectedItemPosition == -1) ||
|
if ((aorSpinner.selectedItemPosition == -1) ||
|
||||||
(ua != UserAgent.uas()[aorSpinner.selectedItemPosition]))
|
(ua != UserAgent.uas()[aorSpinner.selectedItemPosition]))
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ package com.tutpro.baresip
|
|||||||
import java.io.*
|
import java.io.*
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
|
||||||
class Message(val aor: String, val peerUri: String, var direction: Int, val message: String,
|
class Message(val aor: String, val peerUri: String, val message: String, val timeStamp: Long,
|
||||||
val timeStamp: Long, var new: Boolean): Serializable {
|
var direction: Int, var responseCode: Int, var responseReason: String,
|
||||||
|
var new: Boolean): Serializable {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,11 @@ class MessageListAdapter(private val cxt: Context, private val rows: ArrayList<M
|
|||||||
if (info.length < 6) info = "Today $info"
|
if (info.length < 6) info = "Today $info"
|
||||||
infoView.text = "$info - $peer"
|
infoView.text = "$info - $peer"
|
||||||
if (message.direction == R.drawable.arrow_up_red) {
|
if (message.direction == R.drawable.arrow_up_red) {
|
||||||
infoView.text = "${infoView.text} - Message Delivery Failed"
|
if (message.responseCode != 0)
|
||||||
|
infoView.text = "${infoView.text} - Failed: ${message.responseCode} " +
|
||||||
|
"${message.responseReason}"
|
||||||
|
else
|
||||||
|
infoView.text = "${infoView.text} - Sending of message failed!"
|
||||||
infoView.setTextColor(ContextCompat.getColor(cxt, R.color.colorAccent))
|
infoView.setTextColor(ContextCompat.getColor(cxt, R.color.colorAccent))
|
||||||
}
|
}
|
||||||
val textView = messageView.findViewById(R.id.text) as TextView
|
val textView = messageView.findViewById(R.id.text) as TextView
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<item>
|
<item>
|
||||||
<shape android:shape="rectangle">
|
<shape android:shape="rectangle">
|
||||||
<solid android:color="@color/colorSecondaryLight"/>
|
<solid android:color="@color/colorGrayLight"/>
|
||||||
<corners android:radius="10dp"/>
|
<corners android:radius="10dp"/>
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -7,6 +7,6 @@
|
|||||||
<color name="colorSecondaryDark">#1c9588</color>
|
<color name="colorSecondaryDark">#1c9588</color>
|
||||||
<color name="colorSecondaryLight">#93d3cd</color>
|
<color name="colorSecondaryLight">#93d3cd</color>
|
||||||
<color name="colorGray">#9e9e9e</color>
|
<color name="colorGray">#9e9e9e</color>
|
||||||
<color name="colorGrayLight">#eeeeee</color>
|
<color name="colorGrayLight">#e0e0e0</color>
|
||||||
<color name="colorAccent">#b00020</color>
|
<color name="colorAccent">#b00020</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user