added info button for ongoing call

This commit is contained in:
Juha Heinanen
2018-12-11 08:29:10 +02:00
parent 00e52964dd
commit c4878bc978
5 changed files with 69 additions and 0 deletions

View File

@ -1167,6 +1167,25 @@ Java_com_tutpro_baresip_Api_call_1audio_1codecs(JNIEnv *env, jobject thiz, jstri
return (*env)->NewStringUTF(env, codec_buf);
}
JNIEXPORT jstring JNICALL
Java_com_tutpro_baresip_Api_call_1status(JNIEnv *env, jobject thiz, jstring javaCall) {
const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0);
(*env)->ReleaseStringUTFChars(env, javaCall, native_call);
struct call *call = (struct call *) strtoul(native_call, NULL, 10);
char status_buf[256];
int len = re_snprintf(&(status_buf[0]), 256, "%H", call_status, call);
if (len != -1) {
if (len < 256)
status_buf[len] = '\0';
else
status_buf[255] = '\0';
} else {
LOGE("failed to get call status\n");
status_buf[0] = '\0';
}
return (*env)->NewStringUTF(env, status_buf);
}
JNIEXPORT jint JNICALL
Java_com_tutpro_baresip_Api_message_1send(JNIEnv *env, jobject thiz, jstring javaUA,
jstring javaPeer, jstring javaMsg, jstring javaTime) {

View File

@ -24,6 +24,7 @@ object Api {
external fun call_start_audio(callp: String)
external fun call_stop_audio(callp: String)
external fun call_audio_codecs(callp: String): String
external fun call_status(callp: String): String
external fun message_send(uap: String, peer_uri: String, message: String, time: String): Int
external fun reload_config(): Int
external fun cmd_exec(cmd: String): Int

View File

@ -44,6 +44,7 @@ class MainActivity : AppCompatActivity() {
internal lateinit var callsButton: ImageButton
internal lateinit var dialpadButton: ImageButton
internal lateinit var dtmf: EditText
internal lateinit var infoButton: ImageButton
internal lateinit var uaAdapter: UaSpinnerAdapter
internal lateinit var aorSpinner: Spinner
internal lateinit var am: AudioManager
@ -77,6 +78,7 @@ class MainActivity : AppCompatActivity() {
rejectButton = findViewById(R.id.rejectButton) as ImageButton
holdButton = findViewById(R.id.holdButton) as ImageButton
dtmf = findViewById(R.id.dtmf) as EditText
infoButton = findViewById(R.id.info) as ImageButton
voicemailButton = findViewById(R.id.voicemailButton) as ImageButton
contactsButton = findViewById(R.id.contactsButton) as ImageButton
messagesButton = findViewById(R.id.messagesButton) as ImageButton
@ -304,6 +306,27 @@ class MainActivity : AppCompatActivity() {
dtmf.tag = ArrayList<TextWatcher>()
infoButton.setOnClickListener {
val ua = UserAgent.uas()[aorSpinner.selectedItemPosition]
val calls = Call.uaCalls(ua,"")
if (calls.size > 0) {
val status = Api.call_status(calls[0].callp)
val codecs = Api.call_audio_codecs(calls[0].callp)
if (status.contains('[') && status.contains(']') &&
status.contains('=') && codecs.contains(',')) {
val duration = status.split("[")[1].split("]")[0]
val rate = status.split('=')[1]
val txCodec = codecs.split(',')[0].split("/")
val rxCodec = codecs.split(',')[1].split("/")
Utils.alertView(this, "Call Info",
"Duration: $duration\n" +
"Codecs: ${txCodec[0]} ch ${txCodec[2]}/" +
"${rxCodec[0]} ch ${rxCodec[2]}\n" +
"Rate: $rate")
}
}
}
voicemailButton.setOnClickListener {
if (aorSpinner.selectedItemPosition >= 0) {
val ua = UserAgent.uas()[aorSpinner.selectedItemPosition]
@ -466,6 +489,7 @@ class MainActivity : AppCompatActivity() {
rejectButton.isEnabled = true
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
}
if (Utils.isVisible()) {
Log.d("Baresip", "Baresip is visible")
@ -504,6 +528,7 @@ class MainActivity : AppCompatActivity() {
dtmf.hint = "DTMF"
dtmf.visibility = View.VISIBLE
dtmf.requestFocus()
infoButton.visibility = View.VISIBLE
}
(dtmf.tag as ArrayList<TextWatcher>).add(call.dtmfWatcher!!)
dtmf.addTextChangedListener(call.dtmfWatcher)
@ -965,6 +990,8 @@ class MainActivity : AppCompatActivity() {
rejectButton.visibility = View.INVISIBLE
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
} else {
Log.w("Baresip", "ua_connect ${ua.uap}/$uri failed")
callButton.visibility = View.VISIBLE
@ -1025,6 +1052,7 @@ class MainActivity : AppCompatActivity() {
rejectButton.visibility = View.INVISIBLE
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
} else {
val callsOut = Call.uaCalls(ua, "out")
val callsIn = Call.uaCalls(ua, "in")
@ -1050,6 +1078,7 @@ class MainActivity : AppCompatActivity() {
rejectButton.visibility = View.INVISIBLE
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
}
"incoming" -> {
securityButton.visibility = View.INVISIBLE
@ -1061,6 +1090,7 @@ class MainActivity : AppCompatActivity() {
rejectButton.isEnabled = true
holdButton.visibility = View.INVISIBLE
dtmf.visibility = View.INVISIBLE
infoButton.visibility = View.INVISIBLE
if (answerCall == call.callp) {
answerCall = ""
answerButton.performClick()
@ -1091,6 +1121,7 @@ class MainActivity : AppCompatActivity() {
holdButton.visibility = View.VISIBLE
dtmf.visibility = View.VISIBLE
dtmf.requestFocus()
infoButton.visibility = View.VISIBLE
}
}
}

View File

@ -0,0 +1,5 @@
<vector android:height="48dp" android:tint="#00ACC1"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
</vector>

View File

@ -144,6 +144,19 @@
android:visibility="invisible" >
</EditText>
<ImageButton
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/uriRow"
android:layout_alignParentEnd="true"
android:src="@drawable/info"
android:padding="0dp"
android:background="@null"
android:clickable="false"
android:visibility="invisible" >
</ImageButton>
</RelativeLayout>
</ScrollView>