diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index 94b045ef..91f225c1 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -1406,6 +1406,22 @@ Java_com_tutpro_baresip_Call_call_1unhold(JNIEnv *env, jobject thiz, jstring jav return ret; } +JNIEXPORT jboolean JNICALL +Java_com_tutpro_baresip_Call_call_1ismuted(JNIEnv *env, jobject thiz, jstring jCall) { + const char *native_call = (*env)->GetStringUTFChars(env, jCall, 0); + struct call *call = (struct call *) strtoul(native_call, NULL, 10); + (*env)->ReleaseStringUTFChars(env, jCall, native_call); + return audio_ismuted(call_audio(call)); +} + +JNIEXPORT void JNICALL +Java_com_tutpro_baresip_Call_call_1mute(JNIEnv *env, jobject thiz, jstring jCall, jboolean mute) { + const char *native_call = (*env)->GetStringUTFChars(env, jCall, 0); + struct call *call = (struct call *) strtoul(native_call, NULL, 10); + (*env)->ReleaseStringUTFChars(env, jCall, native_call); + audio_mute(call_audio(call), mute); +} + JNIEXPORT jint JNICALL Java_com_tutpro_baresip_Call_call_1transfer(JNIEnv *env, jobject thiz, jstring jCall, jstring jPeer) { diff --git a/app/src/main/kotlin/com/tutpro/baresip/Call.kt b/app/src/main/kotlin/com/tutpro/baresip/Call.kt index 78c810c6..9d4385cd 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Call.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Call.kt @@ -32,6 +32,14 @@ class Call(val callp: String, val ua: UserAgent, val peerUri: String, val dir: S return call_hold(callp) } + fun isMuted(): Boolean { + return call_ismuted(callp) + } + + fun mute(mute: Boolean) { + call_mute(callp, mute) + } + fun unhold(): Int { return call_unhold(callp) } @@ -64,6 +72,8 @@ class Call(val callp: String, val ua: UserAgent, val peerUri: String, val dir: S private external fun call_connect(callp: String, peer_uri: String): Int private external fun call_hold(callp: String): Int private external fun call_unhold(callp: String): Int + private external fun call_ismuted(callp: String): Boolean + private external fun call_mute(callp: String, mute: Boolean) private external fun call_transfer(callp: String, peer_uri: String): Int private external fun call_send_digit(callp: String, digit: Char): Int private external fun call_notify_sipfrag(callp: String, code: Int, reason: String) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 31934130..eddb96a2 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -48,6 +48,7 @@ class MainActivity : AppCompatActivity() { private lateinit var answerButton: ImageButton private lateinit var rejectButton: ImageButton private lateinit var holdButton: ImageButton + private lateinit var micButton: ImageButton private lateinit var transferButton: ImageButton private lateinit var voicemailButton: ImageButton private lateinit var contactsButton: ImageButton @@ -124,6 +125,7 @@ class MainActivity : AppCompatActivity() { answerButton = binding.answerButton rejectButton = binding.rejectButton holdButton = binding.holdButton + micButton = binding.micButton transferButton = binding.transferButton dtmf = binding.dtmf infoButton = binding.info @@ -380,6 +382,21 @@ class MainActivity : AppCompatActivity() { } } + micButton.setOnClickListener { + val ua = UserAgent.uas()[aorSpinner.selectedItemPosition] + val aor = ua.account.aor + val call = Call.uaCalls(ua, "")[0] + if (call.isMuted()) { + Log.d(TAG, "AoR $aor un-muting call ${call.callp} with ${callUri.text}") + call.mute(false) + micButton.setImageResource(R.drawable.mic) + } else { + Log.d(TAG, "AoR $aor muting call ${call.callp} with ${callUri.text}") + call.mute(true) + micButton.setImageResource(R.drawable.mic_off) + } + } + transferButton.setOnClickListener { callTransfer(UserAgent.uas()[aorSpinner.selectedItemPosition]) } @@ -1605,6 +1622,7 @@ class MainActivity : AppCompatActivity() { answerButton.visibility = View.INVISIBLE rejectButton.visibility = View.INVISIBLE holdButton.visibility = View.INVISIBLE + micButton.visibility = View.INVISIBLE transferButton.visibility = View.INVISIBLE dtmf.visibility = View.INVISIBLE dialpadButton.isEnabled = true @@ -1626,6 +1644,7 @@ class MainActivity : AppCompatActivity() { answerButton.visibility = View.INVISIBLE rejectButton.visibility = View.INVISIBLE holdButton.visibility = View.INVISIBLE + micButton.visibility = View.INVISIBLE transferButton.visibility = View.INVISIBLE dtmf.visibility = View.INVISIBLE dialpadButton.isEnabled = false @@ -1645,6 +1664,7 @@ class MainActivity : AppCompatActivity() { rejectButton.visibility = View.VISIBLE rejectButton.isEnabled = true holdButton.visibility = View.INVISIBLE + micButton.visibility = View.INVISIBLE transferButton.visibility = View.INVISIBLE dtmf.visibility = View.INVISIBLE dialpadButton.isEnabled = false @@ -1684,6 +1704,7 @@ class MainActivity : AppCompatActivity() { holdButton.setImageResource(R.drawable.pause) } holdButton.visibility = View.VISIBLE + micButton.visibility = View.VISIBLE transferButton.visibility = View.VISIBLE dtmf.visibility = View.VISIBLE dtmf.isEnabled = true diff --git a/app/src/main/res/drawable/mic.xml b/app/src/main/res/drawable/mic.xml new file mode 100644 index 00000000..c6cc9756 --- /dev/null +++ b/app/src/main/res/drawable/mic.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/mic_off.xml b/app/src/main/res/drawable/mic_off.xml new file mode 100644 index 00000000..fc6a440c --- /dev/null +++ b/app/src/main/res/drawable/mic_off.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0a71fdf1..bafdd66b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -159,6 +159,19 @@ android:contentDescription="@string/hold" > + + + - - - + + + + + + + diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 85679a26..c2cb141b 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -428,6 +428,7 @@ Salli video videon lähetys puhelussa \'%1$s\'? Salli video videon vastaanotto puhelussa \'%1$s\'? Aseta puhelu pitoon + Mikrofoni päälle/pois Puhelun siirto Siirron kohde Siirto diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3cb7366..4d9b2b38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -388,7 +388,8 @@ Accept sending and receiving video with \'%1$s\'? Accept sending of video to \'%1$s\'? Accept receiving video from \'%1$s\'? - Hold + Call Hold/Unhold + Microphone On/Off Call Transfer Transfer destination Transfer