added info button for ongoing call
This commit is contained in:
@@ -1167,6 +1167,25 @@ Java_com_tutpro_baresip_Api_call_1audio_1codecs(JNIEnv *env, jobject thiz, jstri
|
|||||||
return (*env)->NewStringUTF(env, codec_buf);
|
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
|
JNIEXPORT jint JNICALL
|
||||||
Java_com_tutpro_baresip_Api_message_1send(JNIEnv *env, jobject thiz, jstring javaUA,
|
Java_com_tutpro_baresip_Api_message_1send(JNIEnv *env, jobject thiz, jstring javaUA,
|
||||||
jstring javaPeer, jstring javaMsg, jstring javaTime) {
|
jstring javaPeer, jstring javaMsg, jstring javaTime) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ object Api {
|
|||||||
external fun call_start_audio(callp: String)
|
external fun call_start_audio(callp: String)
|
||||||
external fun call_stop_audio(callp: String)
|
external fun call_stop_audio(callp: String)
|
||||||
external fun call_audio_codecs(callp: String): 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 message_send(uap: String, peer_uri: String, message: String, time: String): Int
|
||||||
external fun reload_config(): Int
|
external fun reload_config(): Int
|
||||||
external fun cmd_exec(cmd: String): Int
|
external fun cmd_exec(cmd: String): Int
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
internal lateinit var callsButton: ImageButton
|
internal lateinit var callsButton: ImageButton
|
||||||
internal lateinit var dialpadButton: ImageButton
|
internal lateinit var dialpadButton: ImageButton
|
||||||
internal lateinit var dtmf: EditText
|
internal lateinit var dtmf: EditText
|
||||||
|
internal lateinit var infoButton: ImageButton
|
||||||
internal lateinit var uaAdapter: UaSpinnerAdapter
|
internal lateinit var uaAdapter: UaSpinnerAdapter
|
||||||
internal lateinit var aorSpinner: Spinner
|
internal lateinit var aorSpinner: Spinner
|
||||||
internal lateinit var am: AudioManager
|
internal lateinit var am: AudioManager
|
||||||
@@ -77,6 +78,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
rejectButton = findViewById(R.id.rejectButton) as ImageButton
|
rejectButton = findViewById(R.id.rejectButton) as ImageButton
|
||||||
holdButton = findViewById(R.id.holdButton) as ImageButton
|
holdButton = findViewById(R.id.holdButton) as ImageButton
|
||||||
dtmf = findViewById(R.id.dtmf) as EditText
|
dtmf = findViewById(R.id.dtmf) as EditText
|
||||||
|
infoButton = findViewById(R.id.info) as ImageButton
|
||||||
voicemailButton = findViewById(R.id.voicemailButton) as ImageButton
|
voicemailButton = findViewById(R.id.voicemailButton) as ImageButton
|
||||||
contactsButton = findViewById(R.id.contactsButton) as ImageButton
|
contactsButton = findViewById(R.id.contactsButton) as ImageButton
|
||||||
messagesButton = findViewById(R.id.messagesButton) as ImageButton
|
messagesButton = findViewById(R.id.messagesButton) as ImageButton
|
||||||
@@ -304,6 +306,27 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
dtmf.tag = ArrayList<TextWatcher>()
|
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 {
|
voicemailButton.setOnClickListener {
|
||||||
if (aorSpinner.selectedItemPosition >= 0) {
|
if (aorSpinner.selectedItemPosition >= 0) {
|
||||||
val ua = UserAgent.uas()[aorSpinner.selectedItemPosition]
|
val ua = UserAgent.uas()[aorSpinner.selectedItemPosition]
|
||||||
@@ -466,6 +489,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
rejectButton.isEnabled = true
|
rejectButton.isEnabled = true
|
||||||
holdButton.visibility = View.INVISIBLE
|
holdButton.visibility = View.INVISIBLE
|
||||||
dtmf.visibility = View.INVISIBLE
|
dtmf.visibility = View.INVISIBLE
|
||||||
|
infoButton.visibility = View.INVISIBLE
|
||||||
}
|
}
|
||||||
if (Utils.isVisible()) {
|
if (Utils.isVisible()) {
|
||||||
Log.d("Baresip", "Baresip is visible")
|
Log.d("Baresip", "Baresip is visible")
|
||||||
@@ -504,6 +528,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
dtmf.hint = "DTMF"
|
dtmf.hint = "DTMF"
|
||||||
dtmf.visibility = View.VISIBLE
|
dtmf.visibility = View.VISIBLE
|
||||||
dtmf.requestFocus()
|
dtmf.requestFocus()
|
||||||
|
infoButton.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
(dtmf.tag as ArrayList<TextWatcher>).add(call.dtmfWatcher!!)
|
(dtmf.tag as ArrayList<TextWatcher>).add(call.dtmfWatcher!!)
|
||||||
dtmf.addTextChangedListener(call.dtmfWatcher)
|
dtmf.addTextChangedListener(call.dtmfWatcher)
|
||||||
@@ -965,6 +990,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
rejectButton.visibility = View.INVISIBLE
|
rejectButton.visibility = View.INVISIBLE
|
||||||
holdButton.visibility = View.INVISIBLE
|
holdButton.visibility = View.INVISIBLE
|
||||||
dtmf.visibility = View.INVISIBLE
|
dtmf.visibility = View.INVISIBLE
|
||||||
|
infoButton.visibility = View.INVISIBLE
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log.w("Baresip", "ua_connect ${ua.uap}/$uri failed")
|
Log.w("Baresip", "ua_connect ${ua.uap}/$uri failed")
|
||||||
callButton.visibility = View.VISIBLE
|
callButton.visibility = View.VISIBLE
|
||||||
@@ -1025,6 +1052,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
rejectButton.visibility = View.INVISIBLE
|
rejectButton.visibility = View.INVISIBLE
|
||||||
holdButton.visibility = View.INVISIBLE
|
holdButton.visibility = View.INVISIBLE
|
||||||
dtmf.visibility = View.INVISIBLE
|
dtmf.visibility = View.INVISIBLE
|
||||||
|
infoButton.visibility = View.INVISIBLE
|
||||||
} else {
|
} else {
|
||||||
val callsOut = Call.uaCalls(ua, "out")
|
val callsOut = Call.uaCalls(ua, "out")
|
||||||
val callsIn = Call.uaCalls(ua, "in")
|
val callsIn = Call.uaCalls(ua, "in")
|
||||||
@@ -1050,6 +1078,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
rejectButton.visibility = View.INVISIBLE
|
rejectButton.visibility = View.INVISIBLE
|
||||||
holdButton.visibility = View.INVISIBLE
|
holdButton.visibility = View.INVISIBLE
|
||||||
dtmf.visibility = View.INVISIBLE
|
dtmf.visibility = View.INVISIBLE
|
||||||
|
infoButton.visibility = View.INVISIBLE
|
||||||
}
|
}
|
||||||
"incoming" -> {
|
"incoming" -> {
|
||||||
securityButton.visibility = View.INVISIBLE
|
securityButton.visibility = View.INVISIBLE
|
||||||
@@ -1061,6 +1090,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
rejectButton.isEnabled = true
|
rejectButton.isEnabled = true
|
||||||
holdButton.visibility = View.INVISIBLE
|
holdButton.visibility = View.INVISIBLE
|
||||||
dtmf.visibility = View.INVISIBLE
|
dtmf.visibility = View.INVISIBLE
|
||||||
|
infoButton.visibility = View.INVISIBLE
|
||||||
if (answerCall == call.callp) {
|
if (answerCall == call.callp) {
|
||||||
answerCall = ""
|
answerCall = ""
|
||||||
answerButton.performClick()
|
answerButton.performClick()
|
||||||
@@ -1091,6 +1121,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
holdButton.visibility = View.VISIBLE
|
holdButton.visibility = View.VISIBLE
|
||||||
dtmf.visibility = View.VISIBLE
|
dtmf.visibility = View.VISIBLE
|
||||||
dtmf.requestFocus()
|
dtmf.requestFocus()
|
||||||
|
infoButton.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -144,6 +144,19 @@
|
|||||||
android:visibility="invisible" >
|
android:visibility="invisible" >
|
||||||
</EditText>
|
</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>
|
</RelativeLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|||||||
Reference in New Issue
Block a user