diff --git a/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt index f9b5f862..8039dc1c 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt @@ -27,6 +27,7 @@ class AudioActivity : AppCompatActivity() { private var oldOpusBitrate = "" private var oldOpusPacketLoss = "" private var oldAec = false + private var toneCountry = BaresipService.toneCountry private val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { @@ -123,6 +124,27 @@ class AudioActivity : AppCompatActivity() { audioDelay = binding.AudioDelay audioDelay.setText(BaresipService.audioDelay.toString()) + val toneCountrySpinner = binding.ToneCountrySpinner + val toneCountryKeys = arrayListOf("bg", "br", "de", "cz", "es", "fi", "fr", "uk", "jp", "no", "nz", "se", "ru", "us") + val toneCountryVals = arrayListOf("BG", "BR", "DE", "CZ", "ES", "FI", "FR", "GB", "JP", "NO", "NZ", "SE", "RU", "US") + val keyIx = toneCountryKeys.indexOf(toneCountry) + val keyVal = toneCountryVals.elementAt(keyIx) + toneCountryKeys.removeAt(keyIx) + toneCountryVals.removeAt(keyIx) + toneCountryKeys.add(0, toneCountry) + toneCountryVals.add(0, keyVal) + val toneCountryAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_item, + toneCountryVals) + toneCountryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + toneCountrySpinner.adapter = toneCountryAdapter + toneCountrySpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { + toneCountry = toneCountryKeys[toneCountryVals.indexOf(parent.selectedItem.toString())] + } + override fun onNothingSelected(parent: AdapterView<*>) { + } + } + bindTitles() onBackPressedDispatcher.addCallback(this, onBackPressedCallback) @@ -228,6 +250,12 @@ class AudioActivity : AppCompatActivity() { save = true } + if (BaresipService.toneCountry != toneCountry) { + BaresipService.toneCountry = toneCountry + Config.replaceVariable("tone_country", toneCountry) + save = true + } + if (save) Config.save() @@ -279,6 +307,10 @@ class AudioActivity : AppCompatActivity() { Utils.alertView(this, getString(R.string.audio_delay), getString(R.string.audio_delay_help)) } + binding.ToneCountryTitle.setOnClickListener { + Utils.alertView(this, getString(R.string.tone_country), + getString(R.string.tone_country_help)) + } } private fun checkOpusBitRate(opusBitRate: String): Boolean { diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index f03455c5..4cd70ad5 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -564,7 +564,7 @@ class BaresipService: Service() { sendBroadcast(Intent("com.tutpro.baresip.Restart")) } - @SuppressLint("UnspecifiedImmutableFlag") + @SuppressLint("UnspecifiedImmutableFlag", "DiscouragedApi") @Keep fun uaEvent(event: String, uap: Long, callp: Long) { @@ -698,7 +698,16 @@ class BaresipService: Service() { 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) + val name = "callwaiting_$toneCountry" + val resourceId = applicationContext.resources.getIdentifier( + name, + "raw", + applicationContext.packageName) + if (resourceId != 0) { + playUnInterrupted(resourceId, 1) + } else { + Log.e(TAG, "Callwaiting tone $name.wav not found\")") + } if (ua.account.callHistory) { CallHistoryNew.add(CallHistoryNew(aor, peerUri, "in")) CallHistoryNew.save() @@ -1255,26 +1264,46 @@ class BaresipService: Service() { } } + @SuppressLint("DiscouragedApi") private fun playRingBack() { if (mediaPlayer == null) { - mediaPlayer = MediaPlayer.create(this, R.raw.ringback) - mediaPlayer?.isLooping = true - mediaPlayer?.start() + val name = "ringback_$toneCountry" + val resourceId = applicationContext.resources.getIdentifier( + name, + "raw", + applicationContext.packageName) + if (resourceId != 0) { + mediaPlayer = MediaPlayer.create(this, resourceId) + mediaPlayer?.isLooping = true + mediaPlayer?.start() + } else { + Log.e(TAG, "Ringback tone $name.wav not found") + } } } + @SuppressLint("DiscouragedApi") private fun playBusy() { if (mediaPlayer == null ) { - mediaPlayer = MediaPlayer.create(applicationContext, R.raw.busy) - mediaPlayer?.setOnCompletionListener { - stopMediaPlayer() - if (!Call.inCall()) { - resetCallVolume() - abandonAudioFocus(applicationContext) - proximitySensing(false) + val name = "busy_$toneCountry" + val resourceId = applicationContext.resources.getIdentifier( + name, + "raw", + applicationContext.packageName) + if (resourceId != 0) { + mediaPlayer = MediaPlayer.create(this, resourceId) + mediaPlayer?.setOnCompletionListener { + stopMediaPlayer() + if (!Call.inCall()) { + resetCallVolume() + abandonAudioFocus(applicationContext) + proximitySensing(false) + } } + mediaPlayer?.start() + } else { + Log.e(TAG, "Busy tone $name.wav not found") } - mediaPlayer?.start() } } @@ -1506,6 +1535,7 @@ class BaresipService: Service() { var isMainVisible = false var isMicMuted = false var isRecOn = false + var toneCountry = "us" val uas = ArrayList() val calls = ArrayList() diff --git a/app/src/main/kotlin/com/tutpro/baresip/Config.kt b/app/src/main/kotlin/com/tutpro/baresip/Config.kt index b0704f68..d5757fc8 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Config.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Config.kt @@ -129,6 +129,11 @@ object Config { config = "${config}audio_delay ${BaresipService.audioDelay}\n" } + val toneCountry = previousVariable("tone_country") + if (toneCountry != "") + BaresipService.toneCountry = toneCountry + config = "${config}tone_country ${BaresipService.toneCountry}\n" + save() BaresipService.isConfigInitialized = true diff --git a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt index b33cf1dd..48d68a6e 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ConfigActivity.kt @@ -535,9 +535,10 @@ class ConfigActivity : AppCompatActivity() { restart = true } - val dnsServers = addMissingPorts( - dnsServers.text.toString().trim().lowercase(Locale.ROOT)) - if (dnsServers != oldDnsServers) { + var dnsServers = dnsServers.text.toString().lowercase(Locale.ROOT) + .replace(" ", "") + dnsServers = addMissingPorts(dnsServers) + if (dnsServers != oldDnsServers.replace(" ", "")) { if (!checkDnsServers(dnsServers)) { Utils.alertView(this, getString(R.string.notice), "${getString(R.string.invalid_dns_servers)}: $dnsServers") diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt index 8454cf32..562067f5 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt @@ -1037,3 +1037,4 @@ object Utils { } } +. \ No newline at end of file diff --git a/app/src/main/res/layout/activity_audio.xml b/app/src/main/res/layout/activity_audio.xml index 2cda463a..7a77564b 100644 --- a/app/src/main/res/layout/activity_audio.xml +++ b/app/src/main/res/layout/activity_audio.xml @@ -176,6 +176,31 @@ + + + + + + + diff --git a/app/src/main/res/raw/busy.wav b/app/src/main/res/raw/busy.wav deleted file mode 100644 index 5078764b..00000000 Binary files a/app/src/main/res/raw/busy.wav and /dev/null differ diff --git a/app/src/main/res/raw/busy_bg.wav b/app/src/main/res/raw/busy_bg.wav new file mode 100644 index 00000000..e36d5f9b Binary files /dev/null and b/app/src/main/res/raw/busy_bg.wav differ diff --git a/app/src/main/res/raw/busy_br.wav b/app/src/main/res/raw/busy_br.wav new file mode 100644 index 00000000..3591e360 Binary files /dev/null and b/app/src/main/res/raw/busy_br.wav differ diff --git a/app/src/main/res/raw/busy_cz.wav b/app/src/main/res/raw/busy_cz.wav new file mode 100644 index 00000000..5fa9ad6e Binary files /dev/null and b/app/src/main/res/raw/busy_cz.wav differ diff --git a/app/src/main/res/raw/busy_de.wav b/app/src/main/res/raw/busy_de.wav new file mode 100644 index 00000000..41bd75e2 Binary files /dev/null and b/app/src/main/res/raw/busy_de.wav differ diff --git a/app/src/main/res/raw/busy_es.wav b/app/src/main/res/raw/busy_es.wav new file mode 100644 index 00000000..8ba2f1cf Binary files /dev/null and b/app/src/main/res/raw/busy_es.wav differ diff --git a/app/src/main/res/raw/busy_fi.wav b/app/src/main/res/raw/busy_fi.wav new file mode 100644 index 00000000..b19b6d6b Binary files /dev/null and b/app/src/main/res/raw/busy_fi.wav differ diff --git a/app/src/main/res/raw/busy_fr.wav b/app/src/main/res/raw/busy_fr.wav new file mode 100644 index 00000000..6af5ec4b Binary files /dev/null and b/app/src/main/res/raw/busy_fr.wav differ diff --git a/app/src/main/res/raw/busy_jp.wav b/app/src/main/res/raw/busy_jp.wav new file mode 100644 index 00000000..15d9e717 Binary files /dev/null and b/app/src/main/res/raw/busy_jp.wav differ diff --git a/app/src/main/res/raw/busy_no.wav b/app/src/main/res/raw/busy_no.wav new file mode 100644 index 00000000..e36d5f9b Binary files /dev/null and b/app/src/main/res/raw/busy_no.wav differ diff --git a/app/src/main/res/raw/busy_nz.wav b/app/src/main/res/raw/busy_nz.wav new file mode 100644 index 00000000..d4fd69a3 Binary files /dev/null and b/app/src/main/res/raw/busy_nz.wav differ diff --git a/app/src/main/res/raw/busy_ru.wav b/app/src/main/res/raw/busy_ru.wav new file mode 100644 index 00000000..b6ce0bf8 Binary files /dev/null and b/app/src/main/res/raw/busy_ru.wav differ diff --git a/app/src/main/res/raw/busy_se.wav b/app/src/main/res/raw/busy_se.wav new file mode 100644 index 00000000..3591e360 Binary files /dev/null and b/app/src/main/res/raw/busy_se.wav differ diff --git a/app/src/main/res/raw/busy_uk.wav b/app/src/main/res/raw/busy_uk.wav new file mode 100644 index 00000000..fc56165e Binary files /dev/null and b/app/src/main/res/raw/busy_uk.wav differ diff --git a/app/src/main/res/raw/busy_us.wav b/app/src/main/res/raw/busy_us.wav new file mode 100644 index 00000000..79065734 Binary files /dev/null and b/app/src/main/res/raw/busy_us.wav differ diff --git a/app/src/main/res/raw/callwaiting.wav b/app/src/main/res/raw/callwaiting.wav deleted file mode 100644 index 5bf45e87..00000000 Binary files a/app/src/main/res/raw/callwaiting.wav and /dev/null differ diff --git a/app/src/main/res/raw/callwaiting_bg.wav b/app/src/main/res/raw/callwaiting_bg.wav new file mode 100644 index 00000000..234b9575 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_bg.wav differ diff --git a/app/src/main/res/raw/callwaiting_br.wav b/app/src/main/res/raw/callwaiting_br.wav new file mode 100644 index 00000000..57a0ce10 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_br.wav differ diff --git a/app/src/main/res/raw/callwaiting_cz.wav b/app/src/main/res/raw/callwaiting_cz.wav new file mode 100644 index 00000000..16511016 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_cz.wav differ diff --git a/app/src/main/res/raw/callwaiting_de.wav b/app/src/main/res/raw/callwaiting_de.wav new file mode 100644 index 00000000..9001b003 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_de.wav differ diff --git a/app/src/main/res/raw/callwaiting_es.wav b/app/src/main/res/raw/callwaiting_es.wav new file mode 100644 index 00000000..74b480de Binary files /dev/null and b/app/src/main/res/raw/callwaiting_es.wav differ diff --git a/app/src/main/res/raw/callwaiting_fi.wav b/app/src/main/res/raw/callwaiting_fi.wav new file mode 100644 index 00000000..9b2a18b6 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_fi.wav differ diff --git a/app/src/main/res/raw/callwaiting_fr.wav b/app/src/main/res/raw/callwaiting_fr.wav new file mode 100644 index 00000000..e9ce4f67 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_fr.wav differ diff --git a/app/src/main/res/raw/callwaiting_jp.wav b/app/src/main/res/raw/callwaiting_jp.wav new file mode 100644 index 00000000..434f5561 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_jp.wav differ diff --git a/app/src/main/res/raw/callwaiting_no.wav b/app/src/main/res/raw/callwaiting_no.wav new file mode 100644 index 00000000..c5626829 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_no.wav differ diff --git a/app/src/main/res/raw/callwaiting_nz.wav b/app/src/main/res/raw/callwaiting_nz.wav new file mode 100644 index 00000000..ab361e16 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_nz.wav differ diff --git a/app/src/main/res/raw/callwaiting_ru.wav b/app/src/main/res/raw/callwaiting_ru.wav new file mode 100644 index 00000000..9438389c Binary files /dev/null and b/app/src/main/res/raw/callwaiting_ru.wav differ diff --git a/app/src/main/res/raw/callwaiting_se.wav b/app/src/main/res/raw/callwaiting_se.wav new file mode 100644 index 00000000..a35e4e2b Binary files /dev/null and b/app/src/main/res/raw/callwaiting_se.wav differ diff --git a/app/src/main/res/raw/callwaiting_uk.wav b/app/src/main/res/raw/callwaiting_uk.wav new file mode 100644 index 00000000..38c3e89f Binary files /dev/null and b/app/src/main/res/raw/callwaiting_uk.wav differ diff --git a/app/src/main/res/raw/callwaiting_us.wav b/app/src/main/res/raw/callwaiting_us.wav new file mode 100644 index 00000000..e9ce4f67 Binary files /dev/null and b/app/src/main/res/raw/callwaiting_us.wav differ diff --git a/app/src/main/res/raw/ringback.wav b/app/src/main/res/raw/ringback.wav deleted file mode 100644 index 7b3f8195..00000000 Binary files a/app/src/main/res/raw/ringback.wav and /dev/null differ diff --git a/app/src/main/res/raw/ringback_bg.wav b/app/src/main/res/raw/ringback_bg.wav new file mode 100644 index 00000000..d3e101e6 Binary files /dev/null and b/app/src/main/res/raw/ringback_bg.wav differ diff --git a/app/src/main/res/raw/ringback_br.wav b/app/src/main/res/raw/ringback_br.wav new file mode 100644 index 00000000..d3e101e6 Binary files /dev/null and b/app/src/main/res/raw/ringback_br.wav differ diff --git a/app/src/main/res/raw/ringback_cz.wav b/app/src/main/res/raw/ringback_cz.wav new file mode 100644 index 00000000..d3e101e6 Binary files /dev/null and b/app/src/main/res/raw/ringback_cz.wav differ diff --git a/app/src/main/res/raw/ringback_de.wav b/app/src/main/res/raw/ringback_de.wav new file mode 100644 index 00000000..71f5286f Binary files /dev/null and b/app/src/main/res/raw/ringback_de.wav differ diff --git a/app/src/main/res/raw/ringback_es.wav b/app/src/main/res/raw/ringback_es.wav new file mode 100644 index 00000000..200b26ca Binary files /dev/null and b/app/src/main/res/raw/ringback_es.wav differ diff --git a/app/src/main/res/raw/ringback_fi.wav b/app/src/main/res/raw/ringback_fi.wav new file mode 100644 index 00000000..d3e101e6 Binary files /dev/null and b/app/src/main/res/raw/ringback_fi.wav differ diff --git a/app/src/main/res/raw/ringback_fr.wav b/app/src/main/res/raw/ringback_fr.wav new file mode 100644 index 00000000..afedc92e Binary files /dev/null and b/app/src/main/res/raw/ringback_fr.wav differ diff --git a/app/src/main/res/raw/ringback_jp.wav b/app/src/main/res/raw/ringback_jp.wav new file mode 100644 index 00000000..3883165a Binary files /dev/null and b/app/src/main/res/raw/ringback_jp.wav differ diff --git a/app/src/main/res/raw/ringback_no.wav b/app/src/main/res/raw/ringback_no.wav new file mode 100644 index 00000000..d3e101e6 Binary files /dev/null and b/app/src/main/res/raw/ringback_no.wav differ diff --git a/app/src/main/res/raw/ringback_nz.wav b/app/src/main/res/raw/ringback_nz.wav new file mode 100644 index 00000000..c2b097ba Binary files /dev/null and b/app/src/main/res/raw/ringback_nz.wav differ diff --git a/app/src/main/res/raw/ringback_ru.wav b/app/src/main/res/raw/ringback_ru.wav new file mode 100644 index 00000000..d3e101e6 Binary files /dev/null and b/app/src/main/res/raw/ringback_ru.wav differ diff --git a/app/src/main/res/raw/ringback_se.wav b/app/src/main/res/raw/ringback_se.wav new file mode 100644 index 00000000..53736d67 Binary files /dev/null and b/app/src/main/res/raw/ringback_se.wav differ diff --git a/app/src/main/res/raw/ringback_uk.wav b/app/src/main/res/raw/ringback_uk.wav new file mode 100644 index 00000000..c2b097ba Binary files /dev/null and b/app/src/main/res/raw/ringback_uk.wav differ diff --git a/app/src/main/res/raw/ringback_us.wav b/app/src/main/res/raw/ringback_us.wav new file mode 100644 index 00000000..417c3da6 Binary files /dev/null and b/app/src/main/res/raw/ringback_us.wav differ diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index ea56fb5a..fb2f9643 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -383,8 +383,9 @@ Virheellinen audioviive \'%1$s\'. Sallittu arvo on välillä 100–3000. Oletus äänen voimakkuus Jos valittu, puhelun äänen voimakkuus - asteikolla 1–10. - + asteikolla 1–10. + Puheluäänien maa + Soitto-, odotus- ja varattuäänien maa Tumma teema Käytä aina tummaa näyttöteemaa Videon kehyskoko diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0986ac53..d6dbd761 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -359,6 +359,8 @@ Invalid Audio Delay \'%1$s\'. Valid values are from 100 to 3000. Default Call Volume If set, default call audio volume at scale 1–10. + Tone Country + Country of call ringing, waiting, and callee busy tones Dark Theme Force dark display theme Video Frame Size