Merge pull request #52 from juha-h/auto
- Added Answer Mode (Manual or Automatic) account configuration option.
This commit is contained in:
@ -923,41 +923,19 @@ Java_com_tutpro_baresip_AccountKt_account_1vm_1uri(JNIEnv *env, jobject thiz, js
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_com_tutpro_baresip_AccountKt_account_1answermode(JNIEnv *env, jobject thiz, jstring javaAcc)
|
||||
Java_com_tutpro_baresip_AccountKt_account_1extra(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) {
|
||||
enum answermode am = account_answermode(acc);
|
||||
if (am == ANSWERMODE_EARLY)
|
||||
return (*env)->NewStringUTF(env, "early");
|
||||
if (am == ANSWERMODE_AUTO)
|
||||
return (*env)->NewStringUTF(env, "auto");
|
||||
return (*env)->NewStringUTF(env, "manual");
|
||||
const char *extra = account_extra(acc);
|
||||
if (extra)
|
||||
return (*env)->NewStringUTF(env, extra);
|
||||
}
|
||||
return (*env)->NewStringUTF(env, "");
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_com_tutpro_baresip_AccountKt_account_1set_1answermode(JNIEnv *env, jobject thiz,
|
||||
jstring javaAcc, jstring javaAnswerMode) {
|
||||
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);
|
||||
const char *mode = (*env)->GetStringUTFChars(env, javaAnswerMode, 0);
|
||||
int res, am;
|
||||
if (strcmp(mode, "early") == 0)
|
||||
am = ANSWERMODE_EARLY;
|
||||
else if (strcmp(mode, "auto") == 0)
|
||||
am = ANSWERMODE_AUTO;
|
||||
else
|
||||
am = ANSWERMODE_MANUAL;
|
||||
(*env)->ReleaseStringUTFChars(env, javaAnswerMode, mode);
|
||||
res = account_set_answermode(acc, am);
|
||||
return res;
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_com_tutpro_baresip_Api_ua_1alloc(JNIEnv *env, jobject thiz, jstring javaUri) {
|
||||
const char *uri = (*env)->GetStringUTFChars(env, javaUri, 0);
|
||||
|
||||
@ -14,6 +14,7 @@ class Account(val accp: String) {
|
||||
var audioCodec = ArrayList<String>()
|
||||
var regint = account_regint(accp)
|
||||
var mediaEnc = account_mediaenc(accp)
|
||||
var answerMode = ""
|
||||
var vmUri = account_vm_uri(accp)
|
||||
var vmNew = 0
|
||||
var vmOld = 0
|
||||
@ -49,6 +50,8 @@ class Account(val accp: String) {
|
||||
break
|
||||
}
|
||||
}
|
||||
answerMode = Utils.paramValue(account_extra(accp),"answer_mode")
|
||||
if (answerMode == "") answerMode = "manual"
|
||||
}
|
||||
|
||||
fun print() : String {
|
||||
@ -95,7 +98,8 @@ class Account(val accp: String) {
|
||||
else
|
||||
res = res + ";vm_uri=\"$vmUri\""
|
||||
|
||||
res = res + ";ptime=20;regint=${regint};regq=0.5;pubint=0;answermode=manual;call_transfer=yes"
|
||||
res += ";ptime=20;regint=${regint};regq=0.5;pubint=0;call_transfer=yes"
|
||||
if (answerMode == "auto") res += ";extra=\"answer_mode=auto\""
|
||||
|
||||
return res
|
||||
}
|
||||
@ -188,3 +192,4 @@ external fun account_set_medianat(acc: String, medianat: String): Int
|
||||
external fun account_set_audio_codecs(acc: String, codecs: String): Int
|
||||
external fun account_set_mwi(acc: String, value: String): Int
|
||||
external fun account_vm_uri(acc: String): String
|
||||
external fun account_extra(acc: String): String
|
||||
|
||||
@ -26,6 +26,7 @@ class AccountActivity : AppCompatActivity() {
|
||||
internal lateinit var stunServer: EditText
|
||||
internal lateinit var regCheck: CheckBox
|
||||
internal lateinit var mediaEnc: String
|
||||
internal lateinit var answerMode: String
|
||||
internal lateinit var vmUri: EditText
|
||||
internal lateinit var defaultCheck: CheckBox
|
||||
|
||||
@ -147,6 +148,28 @@ class AccountActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
answerMode = acc.answerMode
|
||||
val answerModeSpinner = findViewById(R.id.answerModeSpinner) as Spinner
|
||||
val answerModeKeys = arrayListOf("manual", "auto")
|
||||
val answerModeVals = arrayListOf(getString(R.string.manual), getString(R.string.auto))
|
||||
keyIx = answerModeKeys.indexOf(acc.answerMode)
|
||||
keyVal = answerModeVals.elementAt(keyIx)
|
||||
answerModeKeys.removeAt(keyIx)
|
||||
answerModeVals.removeAt(keyIx)
|
||||
answerModeKeys.add(0, acc.answerMode)
|
||||
answerModeVals.add(0, keyVal)
|
||||
val answerModeAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,
|
||||
answerModeVals)
|
||||
answerModeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||
answerModeSpinner.adapter = answerModeAdapter
|
||||
answerModeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
||||
answerMode = answerModeKeys[answerModeVals.indexOf(parent.selectedItem.toString())]
|
||||
}
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
}
|
||||
}
|
||||
|
||||
vmUri = findViewById(R.id.voicemailUri) as EditText
|
||||
vmUri.setText(acc.vmUri)
|
||||
|
||||
@ -343,6 +366,12 @@ class AccountActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
if (answerMode != acc.answerMode) {
|
||||
acc.answerMode = answerMode
|
||||
Log.d("Baresip", "New answermode is ${acc.answerMode}")
|
||||
save = true
|
||||
}
|
||||
|
||||
var vmUri = voicemailUri.text.toString().trim()
|
||||
if (vmUri != acc.vmUri) {
|
||||
if (vmUri != "") {
|
||||
@ -432,6 +461,10 @@ class AccountActivity : AppCompatActivity() {
|
||||
Utils.alertView(this, getString(R.string.media_encryption),
|
||||
getString(R.string.media_encryption_help))
|
||||
}
|
||||
findViewById(R.id.AnswerModeTitle) as TextView -> {
|
||||
Utils.alertView(this, getString(R.string.answer_mode),
|
||||
getString(R.string.answer_mode_help))
|
||||
}
|
||||
findViewById(R.id.VoicemailUriTitle) as TextView -> {
|
||||
Utils.alertView(this, getString(R.string.voicemail_uri),
|
||||
getString(R.string.voicemain_uri_help))
|
||||
|
||||
@ -412,12 +412,22 @@ class BaresipService: Service() {
|
||||
Log.d(LOG_TAG, "Incoming call $uap/$callp/$peerUri")
|
||||
calls.add(Call(callp, ua, peerUri, "in", "incoming",
|
||||
Utils.dtmfWatcher(callp)))
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
Log.d(LOG_TAG, "CurrentInterruptionFilter ${nm.currentInterruptionFilter}")
|
||||
if (nm.currentInterruptionFilter <= NotificationManager.INTERRUPTION_FILTER_ALL)
|
||||
if (ua.account.answerMode == "manual") {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
Log.d(LOG_TAG, "CurrentInterruptionFilter ${nm.currentInterruptionFilter}")
|
||||
if (nm.currentInterruptionFilter <= NotificationManager.INTERRUPTION_FILTER_ALL)
|
||||
startRinging()
|
||||
} else {
|
||||
startRinging()
|
||||
}
|
||||
} else {
|
||||
startRinging()
|
||||
val newIntent = Intent(this, MainActivity::class.java)
|
||||
newIntent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP or
|
||||
Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
newIntent.putExtra("action", "call answer")
|
||||
newIntent.putExtra("callp", callp)
|
||||
startActivity(newIntent)
|
||||
return
|
||||
}
|
||||
}
|
||||
if (!Utils.isVisible()) {
|
||||
|
||||
@ -235,6 +235,17 @@ object Utils {
|
||||
return false
|
||||
}
|
||||
|
||||
fun paramValue(params: String, name: String): String {
|
||||
if (params == "") return ""
|
||||
for (param in params.split(";")) {
|
||||
val nameValue = param.split("=")
|
||||
if (nameValue.size == 2) {
|
||||
if (nameValue[0] == name) return nameValue[1]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
fun checkHostPortParams(hpp: String) : Boolean {
|
||||
val restParams = hpp.split(";", limit = 2)
|
||||
if (restParams.size == 1)
|
||||
|
||||
@ -210,6 +210,24 @@
|
||||
android:paddingTop="8dp" >
|
||||
</Spinner>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/AnswerModeTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="10dp"
|
||||
android:textSize="18sp"
|
||||
android:textColor="@android:color/black"
|
||||
android:onClick="onClick"
|
||||
android:text="@string/answer_mode" >
|
||||
</TextView>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/answerModeSpinner"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8dp" >
|
||||
</Spinner>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/VoicemailUriTitle"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@ -84,6 +84,10 @@
|
||||
lähteviin puheluihin ja että RTP/SAVP- tai RTP/SAVPF-protokollaa
|
||||
käytetään, jos sellaista tarjotaan tulevissa puheluissa.
|
||||
</string>
|
||||
<string name="answer_mode">Vastaustapa</string>
|
||||
<string name="answer_mode_help">Valitsee tulevien puheluiden vastaustavan.</string>
|
||||
<string name="manual">Manuaalinen</string>
|
||||
<string name="auto">Automaattinen</string>
|
||||
<string name="voicemail_uri">Puhepostin URI</string>
|
||||
<string name="voicemain_uri_help">SIP URI, jota käytetään
|
||||
puhepostiviestien kuunteluun. Jos URI:a ei ole annettu, tietoa
|
||||
|
||||
@ -75,6 +75,10 @@
|
||||
\n • SRTP means that RTP/AVP is offered in outgoing call and that RTP/SAVP or RTP/SAVPF is used
|
||||
if offered in incoming call.
|
||||
</string>
|
||||
<string name="answer_mode">Answer Mode</string>
|
||||
<string name="answer_mode_help">Selects how incoming calls are answered.</string>
|
||||
<string name="manual">Manual</string>
|
||||
<string name="auto">Automatic</string>
|
||||
<string name="voicemail_uri">Voicemail URI</string>
|
||||
<string name="voicemain_uri_help">SIP URI for checking of voicemail messages. If left empty, voicemail
|
||||
messages (Message Waiting Indications) are not subscribed to.
|
||||
|
||||
Reference in New Issue
Block a user