From 6858e9dc9dc39e79b2944c33e11299aaae7926d3 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 28 Apr 2023 18:52:42 +0300 Subject: [PATCH] Always auto-reject incoming call in baresip service Main activity intent filter improvements --- app/src/main/AndroidManifest.xml | 14 ++----- app/src/main/cpp/baresip.c | 12 ++---- .../com/tutpro/baresip/BaresipService.kt | 42 +++++++------------ 3 files changed, 20 insertions(+), 48 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d9793e30..2b379e95 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ tools:ignore="ScopedStorage" /> + @@ -54,22 +55,14 @@ - - - - - - - - - - + + @@ -178,7 +171,6 @@ - diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index b20757d2..c04a55ee 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -167,13 +167,7 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, len = re_snprintf(event_buf, sizeof event_buf, "registering failed,%s", prm); break; case UA_EVENT_CALL_INCOMING: - if (uag_call_count() > 1) { - LOGD("auto-rejecting call from %s\n", prm); - ua_hangup(ua, call, 486, "Busy Here"); - len = re_snprintf(event_buf, sizeof event_buf, "call rejected,%s", prm); - } else { - len = re_snprintf(event_buf, sizeof event_buf, "call incoming,%s", prm); - } + len = re_snprintf(event_buf, sizeof event_buf, "call incoming,%s", prm); break; case UA_EVENT_CALL_OUTGOING: len = re_snprintf(event_buf, sizeof event_buf, "call outgoing"); @@ -1065,12 +1059,12 @@ Java_com_tutpro_baresip_Api_ua_1hangup(JNIEnv *env, jobject thiz, jlong ua, jlon const uint16_t native_code = code; const char *native_reason = (*env)->GetStringUTFChars(env, reason, 0); LOGD("hanging up call %ld/%ld\n", (long)ua, (long)call); - re_thread_enter(); + // re_thread_enter(); if (strlen(native_reason) == 0) ua_hangup((struct ua *)ua, (struct call *)call, native_code, NULL); else ua_hangup((struct ua *)ua, (struct call *)call, native_code, native_reason); - re_thread_leave(); + // re_thread_leave(); (*env)->ReleaseStringUTFChars(env, reason, native_reason); } diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 665aaa8f..6f46af1a 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -23,6 +23,7 @@ import android.os.Build.VERSION import android.provider.ContactsContract import android.provider.Settings import android.telecom.TelecomManager +import android.telephony.TelephonyManager import android.text.Spannable import android.text.SpannableString import android.text.style.ForegroundColorSpan @@ -616,14 +617,11 @@ class BaresipService: Service() { Log.d(TAG, "got uaEvent $event/$aor/$callp") val call = Call.ofCallp(callp) - if (call == null && callp != 0L && - !setOf("call incoming", "call rejected", "call closed").contains(ev[0])) { + if (call == null && callp != 0L && !setOf("call incoming", "call closed").contains(ev[0])) { Log.w(TAG, "uaEvent $event did not find call $callp") return } - var newEvent: String? = null - for (accountIndex in uas.indices) { if (uas[accountIndex].account.aor == aor) { when (ev[0]) { @@ -685,22 +683,24 @@ class BaresipService: Service() { } "call incoming" -> { val peerUri = ev[1] - val toast = if (!Utils.checkPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO))) - R.string.no_calls + val toastMsg = if (!Utils.checkPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO))) + getString(R.string.no_calls) else if (!requestAudioFocus(applicationContext)) - R.string.audio_focus_denied + // request fails if there is an active telephony call + getString(R.string.audio_focus_denied) else - 0 - if (toast != 0) { - toast(getString(toast)) + "" + if (toastMsg != "") { + Log.d(TAG, "Auto-rejecting incoming call $uap/$callp/$peerUri") + Api.ua_hangup(uap, callp, 486, "Busy Here") + toast(toastMsg) + playUnInterrupted(R.raw.callwaiting, 1) if (ua.account.callHistory) { CallHistory.add(CallHistory(aor, peerUri, "in")) CallHistory.save() ua.account.missedCalls = true } - if (!isMainVisible) - return - newEvent = "call rejected" + return } else { Log.d(TAG, "Incoming call $uap/$callp/$peerUri") Call(callp, ua, peerUri, "in", "incoming", Utils.dtmfWatcher(callp)).add() @@ -766,19 +766,6 @@ class BaresipService: Service() { return } } - "call rejected" -> { - playUnInterrupted(R.raw.callwaiting, 1) - if (ua.account.callHistory) { - CallHistory.add(CallHistory(aor, ev[1], "in")) - CallHistory.save() - ua.account.missedCalls = true - if (!isMainVisible) - return - newEvent = "call rejected" - } else { - return - } - } "call answered" -> { stopMediaPlayer() if (call!!.status == "incoming") @@ -962,8 +949,7 @@ class BaresipService: Service() { } } - postServiceEvent(ServiceEvent(newEvent ?: event, arrayListOf(uap, callp), - System.nanoTime())) + postServiceEvent(ServiceEvent(event, arrayListOf(uap, callp), System.nanoTime())) }