diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index 4192dcff..6ff5d8e2 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -1296,6 +1296,15 @@ Java_com_tutpro_baresip_Api_call_1replace_1transfer(JNIEnv *env, jobject thiz, j return res == 0 ? true : false; } +JNIEXPORT jstring JNICALL +Java_com_tutpro_baresip_Api_call_1diverter_1uri(JNIEnv *env, jobject thiz, jlong call) +{ + const char *uri = call_diverteruri((struct call *)call); + if (uri) + return (*env)->NewStringUTF(env, uri); + return (*env)->NewStringUTF(env, ""); +} + JNIEXPORT jint JNICALL Java_com_tutpro_baresip_Api_message_1send(JNIEnv *env, jobject thiz, jlong ua, jstring jPeer, jstring jMsg, jstring jTime) { diff --git a/app/src/main/kotlin/com/tutpro/baresip/Api.kt b/app/src/main/kotlin/com/tutpro/baresip/Api.kt index c25e20b5..f4b6a9f6 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Api.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Api.kt @@ -72,6 +72,7 @@ object Api { external fun call_has_video(callp: Long): Boolean external fun call_replaces(callp: Long): Boolean external fun call_replace_transfer(xfer_callp: Long, callp: Long): Boolean + external fun call_diverter_uri(callp: Long): String external fun calls_mute(mute: Boolean) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 40cbe9c1..ad043ef4 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -648,8 +648,7 @@ class BaresipService: Service() { newEvent = "call rejected" } else { Log.d(TAG, "Incoming call $uap/$callp/$peerUri") - Call(callp, ua, peerUri, "in", "incoming", - Utils.dtmfWatcher(callp)).add() + Call(callp, ua, peerUri, "in", "incoming", Utils.dtmfWatcher(callp)).add() if (ua.account.answerMode == Api.ANSWERMODE_MANUAL) { if (VERSION.SDK_INT >= 23) { Log.d(TAG, "CurrentInterruptionFilter ${nm.currentInterruptionFilter}") diff --git a/app/src/main/kotlin/com/tutpro/baresip/Call.kt b/app/src/main/kotlin/com/tutpro/baresip/Call.kt index 266b010e..7deebff0 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Call.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Call.kt @@ -78,6 +78,10 @@ class Call(val callp: Long, val ua: UserAgent, val peerUri: String, val dir: Str return Api.call_replaces(callp) } + fun diverterUri(): String { + return Api.call_diverter_uri(callp) + } + init { if (ua.account.mediaEnc != "") security = R.drawable.box_red } diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index d6b487de..b84c437a 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -46,6 +46,8 @@ class MainActivity : AppCompatActivity() { private lateinit var callTimer: Chronometer private lateinit var callUri: AutoCompleteTextView private lateinit var securityButton: ImageButton + private lateinit var diverter: LinearLayout + private lateinit var diverterUri: TextView private lateinit var callButton: ImageButton private lateinit var hangupButton: ImageButton private lateinit var answerButton: ImageButton @@ -128,6 +130,8 @@ class MainActivity : AppCompatActivity() { callTimer = binding.callTimer callUri = binding.callUri securityButton = binding.securityButton + diverter = binding.diverter + diverterUri = binding.diverterUri callButton = binding.callButton hangupButton = binding.hangupButton answerButton = binding.answerButton @@ -1797,6 +1801,7 @@ class MainActivity : AppCompatActivity() { callUri.setAdapter(ArrayAdapter(this, android.R.layout.select_dialog_item, Contact.contactNames())) securityButton.visibility = View.INVISIBLE + diverter.visibility = View.GONE callButton.visibility = View.VISIBLE callButton.isEnabled = true hangupButton.visibility = View.INVISIBLE @@ -1822,6 +1827,7 @@ class MainActivity : AppCompatActivity() { callUri.setText(Utils.friendlyUri(this, Contact.contactName(call.peerUri), Utils.aorDomain(ua.account.aor))) securityButton.visibility = View.INVISIBLE + diverter.visibility = View.GONE callButton.visibility = View.INVISIBLE hangupButton.visibility = View.VISIBLE hangupButton.isEnabled = true @@ -1838,6 +1844,14 @@ class MainActivity : AppCompatActivity() { Utils.aorDomain(ua.account.aor))) callUri.setAdapter(null) securityButton.visibility = View.INVISIBLE + val uri = call.diverterUri() + if (uri != "") { + diverterUri.text = Utils.friendlyUri(this, Contact.contactName(uri), + Utils.aorDomain(ua.account.aor)) + diverter.visibility = View.VISIBLE + } else { + diverter.visibility = View.GONE + } callButton.visibility = View.INVISIBLE hangupButton.visibility = View.INVISIBLE answerButton.visibility = View.VISIBLE diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9e9ccc7c..0e664bc3 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -84,8 +84,7 @@ android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_below="@id/callTitleRow" - android:paddingBottom="10dp" > + android:layout_below="@id/callTitleRow" > + + + + + + + + + + Lopeta Puhelu ulos … Puhelu sisään … + Siirtäjä … Puhelun siirto … Virheellinen SIP URI \'%1$s\' Millekään tilille ei ole konfiguroitu puhelinpalvelun diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d19d296..002608b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -399,6 +399,7 @@ Quit Call to … Call from … + Diverted by … Transferring call to … Invalid SIP URI \'%1$s\' Telephony Provider has not been configured for any account.