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