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);
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
5
app/src/main/res/drawable/info.xml
Normal file
5
app/src/main/res/drawable/info.xml
Normal 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>
|
||||
@ -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>
|
||||
|
||||
Reference in New Issue
Block a user