- Added Answer Mode (Manual or Automatic) account configuration option.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user