diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index ccb915d3..af1da6c4 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -1414,6 +1414,14 @@ JNIEXPORT jboolean JNICALL Java_com_tutpro_baresip_Api_call_1ismuted( return audio_ismuted(call_audio((struct call *)call)); } +JNIEXPORT jboolean JNICALL Java_com_tutpro_baresip_Api_call_1supported( + JNIEnv *env, jobject obj, jlong call, jint tags) +{ + (void)env; + (void)obj; + return call_supported((struct call *)call, tags); +} + JNIEXPORT jint JNICALL Java_com_tutpro_baresip_Api_call_1transfer( JNIEnv *env, jobject obj, jlong call, jstring jPeer) { diff --git a/app/src/main/kotlin/com/tutpro/baresip/Api.kt b/app/src/main/kotlin/com/tutpro/baresip/Api.kt index ffe97ab6..3fbe7c42 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Api.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Api.kt @@ -104,6 +104,8 @@ object Api { external fun call_replace_transfer(xfer_callp: Long, callp: Long): Boolean external fun call_peer_uri(callp: Long): String external fun call_diverter_uri(callp: Long): String + + external fun call_supported(callp: Long, header: Int): Boolean external fun call_destroy(callp: Long) external fun calls_mute(mute: Boolean) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Call.kt b/app/src/main/kotlin/com/tutpro/baresip/Call.kt index 3762fb6e..6780541e 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Call.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Call.kt @@ -129,6 +129,8 @@ class Call(val callp: Long, val ua: UserAgent, val peerUri: String, val dir: Str companion object { + const val REPLACES = 1 + fun calls(): ArrayList { return BaresipService.calls } diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt index 7ae3d0dc..ceb55ec9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt @@ -1579,13 +1579,20 @@ private fun CallRow( enabled = call.transferButtonEnabled.value, onClick = { if (call.onHoldCall != null) { - val connection = ConnectionService.connections[call.callp] - connection?.onHold() - if (!call.executeTransfer()) { - alertTitle.value = ctx.getString(R.string.notice) - alertMessage.value = ctx.getString(R.string.transfer_failed) + if (!Api.call_supported(call.callp, Call.REPLACES)) { + alertTitle.value = ctx.getString(R.string.notice) + alertMessage.value = ctx.getString(R.string.replaces_not_supported) showAlert.value = true } + else { + val connection = ConnectionService.connections[call.callp] + connection?.onHold() + if (!call.executeTransfer()) { + alertTitle.value = ctx.getString(R.string.notice) + alertMessage.value = ctx.getString(R.string.transfer_failed) + showAlert.value = true + } + } } else showTransferDialog = true diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 7d501e22..9e428b3e 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -521,6 +521,7 @@ Salli video videon lähetys puhelussa \'%1$s\'\? Salli video videon vastaanotto puhelussa \'%1$s\'\? Puhelu on pidossa + Puhelu on yhdistetty Tallennus voidaan asettaa päälle tai pois vain silloin, kun puhelu ei ole yhdistetty Puhelun siirto @@ -530,6 +531,7 @@ Valitse kohteen URI Siirto Siirto epäonnistui + Toinen osapuoli ei tue REPLACES ominaisuutta DTMF Puhelutiedot Ei saatavilla diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b40ea5ff..9c5d38a8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -515,6 +515,7 @@ Choose destination URI Transfer Transfer failed + Peer does not support REPLACES feature DTMF Call Info No info available