From c6aec9ef4fd61e3acd224d0c96a34d39f2dd0858 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 16 Nov 2021 10:26:09 +0200 Subject: [PATCH] Moved call mute button from call control to action bar --- app/src/main/cpp/baresip.c | 29 ++--- app/src/main/kotlin/com/tutpro/baresip/Api.kt | 4 +- .../com/tutpro/baresip/BaresipService.kt | 1 + .../main/kotlin/com/tutpro/baresip/Call.kt | 8 -- .../kotlin/com/tutpro/baresip/MainActivity.kt | 43 ++++--- app/src/main/res/drawable/mic.xml | 9 -- app/src/main/res/drawable/mic_off.xml | 3 +- app/src/main/res/drawable/mic_on.xml | 10 ++ app/src/main/res/layout/activity_main.xml | 109 ++++++++---------- 9 files changed, 102 insertions(+), 114 deletions(-) delete mode 100644 app/src/main/res/drawable/mic.xml create mode 100644 app/src/main/res/drawable/mic_on.xml diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index e02bd269..7956e28a 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -881,19 +881,6 @@ Java_com_tutpro_baresip_Api_account_1set_1medianat(JNIEnv *env, jobject thiz, return res; } -JNIEXPORT jstring JNICALL -Java_com_tutpro_baresip_Api_account_1sipnat(JNIEnv *env, jobject thiz, jstring javaAcc) -{ - const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); - struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); - (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); - if (acc) { - const char *sipnat = account_sipnat(acc); - if (sipnat) return (*env)->NewStringUTF(env, sipnat); - } - return (*env)->NewStringUTF(env, ""); -} - JNIEXPORT jint JNICALL Java_com_tutpro_baresip_Api_account_1set_1sipnat(JNIEnv *env, jobject thiz, jstring javaAcc, jstring javaSipNat) { @@ -1271,6 +1258,22 @@ Java_com_tutpro_baresip_Api_ua_1answer(JNIEnv *env, jobject thiz, jstring javaUA (*env)->ReleaseStringUTFChars(env, javaCall, native_call); } +JNIEXPORT void JNICALL +Java_com_tutpro_baresip_Api_calls_1mute(JNIEnv *env, jobject thiz, jboolean mute) { + struct le *ua_le; + struct le *call_le; + LOGD("muting calls %d\n", mute); + re_thread_enter(); + for (ua_le = list_head(uag_list()); ua_le != NULL; ua_le = ua_le->next) { + const struct ua *ua = ua_le->data; + for (call_le = list_head(ua_calls(ua)); call_le != NULL; call_le = call_le->next) { + const struct call *call = call_le->data; + audio_mute(call_audio(call), mute); + } + } + re_thread_leave(); +} + JNIEXPORT void JNICALL Java_com_tutpro_baresip_Api_ua_1debug(JNIEnv *env, jobject thiz, jstring javaUA) { const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); diff --git a/app/src/main/kotlin/com/tutpro/baresip/Api.kt b/app/src/main/kotlin/com/tutpro/baresip/Api.kt index c53ae361..40e85890 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Api.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Api.kt @@ -2,9 +2,6 @@ package com.tutpro.baresip object Api { - const val AF_UNSPEC = 0 - // const val AF_INET = 2 - const val AF_INET6 = 10 const val VIDMODE_OFF = 0 // const val VIDMODE_ON = 1 const val ANSWERMODE_MANUAL = 0 @@ -63,6 +60,7 @@ object Api { external fun ua_answer(uap: String, callp: String, video: Int) external fun ua_debug(uap: String) + external fun calls_mute(mute: Boolean) external fun call_peeruri(callp: String): String external fun message_send(uap: String, peer_uri: String, message: String, time: String): Int diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index fa184b93..08f9b75d 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -1404,6 +1404,7 @@ class BaresipService: Service() { var sipTrace = false var callActionUri = "" var isMainVisible = false + var isMicMuted = false val uas = ArrayList() val status = ArrayList() diff --git a/app/src/main/kotlin/com/tutpro/baresip/Call.kt b/app/src/main/kotlin/com/tutpro/baresip/Call.kt index 9d4385cd..7f6fd9ac 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Call.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Call.kt @@ -32,14 +32,6 @@ 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) } diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 810f8013..df468e99 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -53,9 +53,8 @@ class MainActivity : AppCompatActivity() { private lateinit var hangupButton: ImageButton private lateinit var answerButton: ImageButton private lateinit var rejectButton: ImageButton - private lateinit var callControl: HorizontalScrollView + private lateinit var callControl: RelativeLayout 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 @@ -74,6 +73,7 @@ class MainActivity : AppCompatActivity() { private lateinit var serviceEventReceiver: BroadcastReceiver private lateinit var quitTimer: CountDownTimer private lateinit var stopState: String + private var micIcon: MenuItem? = null private var speakerIcon: MenuItem? = null private lateinit var swipeRefresh: SwipeRefreshLayout private lateinit var requestPermissionLauncher: ActivityResultLauncher @@ -107,6 +107,8 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) + binding = ActivityMainBinding.inflate(layoutInflater) val intentAction = intent.getStringExtra("action") @@ -135,7 +137,6 @@ class MainActivity : AppCompatActivity() { rejectButton = binding.rejectButton callControl = binding.callControl holdButton = binding.holdButton - micButton = binding.micButton transferButton = binding.transferButton dtmf = binding.dtmf infoButton = binding.info @@ -371,21 +372,6 @@ 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]) } @@ -1137,13 +1123,23 @@ class MainActivity : AppCompatActivity() { } override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.main_menu, menu) + + menuInflater.inflate(R.menu.mic_icon, menu) + micIcon = menu.findItem(R.id.micIcon) + if (BaresipService.isMicMuted) + micIcon!!.setIcon(R.drawable.mic_off) + else + micIcon!!.setIcon(R.drawable.mic_on) + menuInflater.inflate(R.menu.speaker_icon, menu) speakerIcon = menu.findItem(R.id.speakerIcon) if (am.isSpeakerphoneOn) speakerIcon!!.setIcon(R.drawable.speaker_on) else speakerIcon!!.setIcon(R.drawable.speaker_off) + return super.onCreateOptionsMenu(menu) } @@ -1151,6 +1147,17 @@ class MainActivity : AppCompatActivity() { when (item.itemId) { + R.id.micIcon -> { + BaresipService.isMicMuted = !BaresipService.isMicMuted + if (BaresipService.isMicMuted) { + item.setIcon(R.drawable.mic_off) + Api.calls_mute(true) + } else { + item.setIcon(R.drawable.mic_on) + Api.calls_mute(false) + } + } + R.id.speakerIcon -> { am.isSpeakerphoneOn = !am.isSpeakerphoneOn if (am.isSpeakerphoneOn) diff --git a/app/src/main/res/drawable/mic.xml b/app/src/main/res/drawable/mic.xml deleted file mode 100644 index c6cc9756..00000000 --- a/app/src/main/res/drawable/mic.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/mic_off.xml b/app/src/main/res/drawable/mic_off.xml index fc6a440c..2eff6489 100644 --- a/app/src/main/res/drawable/mic_off.xml +++ b/app/src/main/res/drawable/mic_off.xml @@ -1,9 +1,10 @@ diff --git a/app/src/main/res/drawable/mic_on.xml b/app/src/main/res/drawable/mic_on.xml new file mode 100644 index 00000000..449f880c --- /dev/null +++ b/app/src/main/res/drawable/mic_on.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ccff1cbc..5eef38e0 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -146,80 +146,65 @@ android:contentDescription="@string/reject" > - - + android:padding="0dp" + android:src="@drawable/pause" + android:background="@null" + android:clickable="false" + android:contentDescription="@string/hold" > + - - + + - - + + - - + + - - - - - - - - - +