Added "Block Hidden" account setting

This commit is contained in:
Juha Heinanen
2026-06-14 09:59:58 +03:00
parent 2cf304bb80
commit fe28ce7967
6 changed files with 83 additions and 10 deletions

View File

@ -31,6 +31,7 @@ class Account(val accp: Long, virtualAor: String? = null) {
var answerMode = if (accp != 0L) Api.account_answermode(accp) else Api.ANSWERMODE_MANUAL var answerMode = if (accp != 0L) Api.account_answermode(accp) else Api.ANSWERMODE_MANUAL
var autoRedirect = if (accp != 0L) Api.account_sip_autoredirect(accp) else false var autoRedirect = if (accp != 0L) Api.account_sip_autoredirect(accp) else false
var blockUnknown = false var blockUnknown = false
var blockHidden = false
var vmUri = if (accp != 0L) Api.account_vm_uri(accp) else "" var vmUri = if (accp != 0L) Api.account_vm_uri(accp) else ""
var vmNew = 0 var vmNew = 0
var vmOld = 0 var vmOld = 0
@ -79,6 +80,7 @@ class Account(val accp: Long, virtualAor: String? = null) {
configuredRegInt = Utils.paramValue(extra, "regint").toInt() configuredRegInt = Utils.paramValue(extra, "regint").toInt()
callHistory = Utils.paramValue(extra, "call_history") == "" callHistory = Utils.paramValue(extra, "call_history") == ""
blockUnknown = Utils.paramExists(extra, "block_unknown") blockUnknown = Utils.paramExists(extra, "block_unknown")
blockHidden = Utils.paramExists(extra, "block_hidden")
if (Utils.paramExists(extra, "country_code")) if (Utils.paramExists(extra, "country_code"))
countryCode = Utils.paramValue(extra, "country_code") countryCode = Utils.paramValue(extra, "country_code")
if (Utils.paramExists(extra, "tel_provider")) if (Utils.paramExists(extra, "tel_provider"))
@ -182,6 +184,9 @@ class Account(val accp: Long, virtualAor: String? = null) {
if (blockUnknown) if (blockUnknown)
extra += ";block_unknown=yes" extra += ";block_unknown=yes"
if (blockHidden)
extra += ";block_hidden=yes"
if (telProvider != "") if (telProvider != "")
extra += ";tel_provider=${URLEncoder.encode(telProvider, "UTF-8")}" extra += ";tel_provider=${URLEncoder.encode(telProvider, "UTF-8")}"

View File

@ -646,6 +646,33 @@ private fun AccountContent(
} }
} }
@Composable
fun BlockHidden() {
val blockHiddenTitle = stringResource(R.string.block_hidden)
val blockHiddenHelp = stringResource(R.string.block_hidden_help)
val block by viewModel.blockHidden.collectAsState()
Row(
Modifier.fillMaxWidth().padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
Text(text = blockHiddenTitle,
modifier = Modifier
.weight(1f)
.clickable {
alertTitle.value = blockHiddenTitle
alertMessage.value = blockHiddenHelp
showAlert.value = true
},
fontSize = 18.sp
)
Switch(
checked = block,
onCheckedChange = { viewModel.blockHidden.value = it }
)
}
}
@Composable @Composable
fun AudioCodecs(navController: NavController, aor: String) { fun AudioCodecs(navController: NavController, aor: String) {
Row( Row(
@ -1333,6 +1360,7 @@ private fun AccountContent(
} }
} }
BlockUnknown() BlockUnknown()
BlockHidden()
if (!ua.account.isMobile) { if (!ua.account.isMobile) {
AudioCodecs(navController, aor) AudioCodecs(navController, aor)
MediaEnc() MediaEnc()
@ -1673,6 +1701,12 @@ private fun checkOnClick(ctx: Context, viewModel: AccountViewModel, ua: UserAgen
Log.d(TAG, "New blockUnknown is ${acc.blockUnknown}") Log.d(TAG, "New blockUnknown is ${acc.blockUnknown}")
} }
val newBlockHidden = viewModel.blockHidden.value
if (newBlockHidden != acc.blockHidden) {
acc.blockHidden = newBlockHidden
Log.d(TAG, "New blockHidden is ${acc.blockHidden}")
}
var newVmUri = viewModel.vmUri.value.trim() var newVmUri = viewModel.vmUri.value.trim()
if (newVmUri != acc.vmUri) { if (newVmUri != acc.vmUri) {
if (newVmUri != "") { if (newVmUri != "") {

View File

@ -25,6 +25,7 @@ class AccountViewModel: ViewModel() {
val answerMode = MutableStateFlow(0) val answerMode = MutableStateFlow(0)
val autoRedirect = MutableStateFlow(false) val autoRedirect = MutableStateFlow(false)
val blockUnknown = MutableStateFlow(false) val blockUnknown = MutableStateFlow(false)
val blockHidden = MutableStateFlow(false)
val vmUri = MutableStateFlow("") val vmUri = MutableStateFlow("")
val countryCode = MutableStateFlow("") val countryCode = MutableStateFlow("")
val telProvider = MutableStateFlow("") val telProvider = MutableStateFlow("")
@ -60,6 +61,7 @@ class AccountViewModel: ViewModel() {
answerMode.value = acc.answerMode answerMode.value = acc.answerMode
autoRedirect.value = acc.autoRedirect autoRedirect.value = acc.autoRedirect
blockUnknown.value = acc.blockUnknown blockUnknown.value = acc.blockUnknown
blockHidden.value = acc.blockHidden
vmUri.value = acc.vmUri vmUri.value = acc.vmUri
countryCode.value = acc.countryCode countryCode.value = acc.countryCode
telProvider.value = acc.telProvider telProvider.value = acc.telProvider

View File

@ -960,6 +960,8 @@ class BaresipService: Service() {
getString(R.string.call_blocked), getString(R.string.call_blocked),
Utils.friendlyUri(this, peerUri, ua.account) Utils.friendlyUri(this, peerUri, ua.account)
) )
else if (ua.account.blockHidden && peerUri.contains("anonymous"))
getString(R.string.hidden_call_blocked)
else if (!Utils.checkPermissions(this, arrayOf(RECORD_AUDIO))) else if (!Utils.checkPermissions(this, arrayOf(RECORD_AUDIO)))
getString(R.string.no_calls) getString(R.string.no_calls)
else else
@ -969,7 +971,8 @@ class BaresipService: Service() {
Api.sip_treply(callp, 486, "Busy Here") Api.sip_treply(callp, 486, "Busy Here")
Api.bevent_stop(ev[2].toLong()) Api.bevent_stop(ev[2].toLong())
toast(toastMsg) toast(toastMsg)
if (toastMsg.contains(getString(R.string.call_blocked))) { if (toastMsg.contains(getString(R.string.call_blocked)) ||
toastMsg.contains(getString(R.string.hidden_call_blocked))) {
if (ua.account.callHistory) if (ua.account.callHistory)
Blocked( Blocked(
ua.account.aor, ua.account.aor,
@ -1372,7 +1375,10 @@ class BaresipService: Service() {
return return
} }
if (ua.account.blockUnknown && Contact.contactName(peerUri) == peerUri) { val blockedHidden = ua.account.blockHidden && peerUri.contains("anonymous")
val blockedUnknown = ua.account.blockUnknown && Contact.contactName(peerUri) == peerUri
if (blockedHidden || blockedUnknown) {
Log.d(TAG, "Auto-rejecting incoming message by $uap from $peerUri") Log.d(TAG, "Auto-rejecting incoming message by $uap from $peerUri")
Blocked( Blocked(
ua.account.aor, ua.account.aor,
@ -1380,13 +1386,14 @@ class BaresipService: Service() {
"message", "message",
GregorianCalendar().timeInMillis GregorianCalendar().timeInMillis
).add() ).add()
toast(String.format( toast(if (blockedHidden)
getString(R.string.hidden_message_blocked)
else
String.format(
getString(R.string.message_blocked), getString(R.string.message_blocked),
Utils.friendlyUri(this, peerUri, ua.account) Utils.friendlyUri(this, peerUri, ua.account)
) )
) )
// Api.sip_treply(callp, 486, "Busy Here")
// Api.bevent_stop(bevent)
return return
} }
@ -1968,6 +1975,23 @@ class BaresipService: Service() {
if (isIncoming) { if (isIncoming) {
val e164Uri = e164Uri(uri, ua.account.countryCode) val e164Uri = e164Uri(uri, ua.account.countryCode)
val presentation = telecomCall.details.handlePresentation
if (ua.account.blockHidden &&
(presentation == TelecomManager.PRESENTATION_RESTRICTED ||
presentation == TelecomManager.PRESENTATION_UNKNOWN)) {
Log.d(TAG, "Auto-rejecting incoming PSTN hidden call")
telecomCall.disconnect()
toast(getString(R.string.hidden_call_blocked))
if (ua.account.callHistory) {
Blocked(
ua.account.aor,
uri,
"invite",
GregorianCalendar().timeInMillis
).add()
}
return
}
if (ua.account.blockUnknown && Contact.contactName(e164Uri) == e164Uri) { if (ua.account.blockUnknown && Contact.contactName(e164Uri) == e164Uri) {
Log.d(TAG, "Auto-rejecting incoming PSTN call from $uri") Log.d(TAG, "Auto-rejecting incoming PSTN call from $uri")
telecomCall.disconnect() telecomCall.disconnect()

View File

@ -211,11 +211,13 @@
<string name="dtmf_info">SIP INFO -pyyntö</string> <string name="dtmf_info">SIP INFO -pyyntö</string>
<string name="dtmf_auto">RTP tai SIP INFO</string> <string name="dtmf_auto">RTP tai SIP INFO</string>
<string name="answer_mode">Vastaustapa</string> <string name="answer_mode">Vastaustapa</string>
<string name="answer_mode_help">Valitsee tulevien puheluiden vastaustavan.</string> <string name="answer_mode_help">Valitsee tulevien puheluiden vastaustavan</string>
<string name="manual">Manuaalinen</string> <string name="manual">Manuaalinen</string>
<string name="auto">Automaattinen</string> <string name="auto">Automaattinen</string>
<string name="block_unknown">Estä tuntemattomat</string> <string name="block_unknown">Estä vieraat</string>
<string name="block_unknown_help">Estä puhelut ja viestit, joiden lähdettä ei löydy yhteystiedoista.</string> <string name="block_unknown_help">Estä puhelut ja viestit, joiden lähdettä ei löydy yhteystiedoista.</string>
<string name="block_hidden">Estä tuntemattomat</string>
<string name="block_hidden_help">Estä puhelut ja viestit, joiden lähde on tuntematon.</string>
<string name="redirect_mode">Uudelleenohjaustapa</string> <string name="redirect_mode">Uudelleenohjaustapa</string>
<string name="redirect_mode_help">Valitsee toteutetaanko puhelun uudelleenohjauspyyntö <string name="redirect_mode_help">Valitsee toteutetaanko puhelun uudelleenohjauspyyntö
automaattisesti vai kysytäänkö vahvistusta.</string> automaattisesti vai kysytäänkö vahvistusta.</string>
@ -273,8 +275,10 @@
<string name="missed_calls_count">%1$d vastaamatonta puhelua</string> <string name="missed_calls_count">%1$d vastaamatonta puhelua</string>
<string name="transfer_request_to">Puhelun siirtopyyntö kohteeseen</string> <string name="transfer_request_to">Puhelun siirtopyyntö kohteeseen</string>
<string name="call_auto_rejected">Automaattisesti hylätty puhelu soittajalta \`%1$s\`</string> <string name="call_auto_rejected">Automaattisesti hylätty puhelu soittajalta \`%1$s\`</string>
<string name="call_blocked">Estetty puhelu hylätty soittajalta \`%1$s\`</string> <string name="call_blocked">Estetty puhelu vieraalta soittajalta \`%1$s\`</string>
<string name="message_blocked">Estetty viesti hylätty lähettäjältä \`%1$s\`</string> <string name="hidden_call_blocked">Estetty puhelu tuntemattomalta soittajalta</string>
<string name="message_blocked">Estetty viesti vieraalta lähettäjältä \`%1$s\`</string>
<string name="hidden_message_blocked">Estetty viesti tuntemattomalta lähettäjältä</string>
<!-- Blocked Activity --> <!-- Blocked Activity -->
<string name="blocked">Estetyt</string> <string name="blocked">Estetyt</string>
<string name="blocked_calls">Estetyt puhelut</string> <string name="blocked_calls">Estetyt puhelut</string>

View File

@ -213,8 +213,10 @@
if confirmation is requested.</string> if confirmation is requested.</string>
<string name="manual">Manual</string> <string name="manual">Manual</string>
<string name="auto">Automatic</string> <string name="auto">Automatic</string>
<string name="block_unknown">Block Unknown</string> <string name="block_unknown">Block Strangers</string>
<string name="block_unknown_help">Block calls and messages from peers that are not found in contacts.</string> <string name="block_unknown_help">Block calls and messages from peers that are not found in contacts.</string>
<string name="block_hidden">Block Hidden</string>
<string name="block_hidden_help">Block calls and messages from peers with hidden identification.</string>
<string name="voicemail_uri">Voicemail URI</string> <string name="voicemail_uri">Voicemail URI</string>
<string name="voicemain_uri_help">SIP URI for checking of voicemail messages. If left empty, voicemail <string name="voicemain_uri_help">SIP URI for checking of voicemail messages. If left empty, voicemail
messages (Message Waiting Indications) are not subscribed to. messages (Message Waiting Indications) are not subscribed to.
@ -266,7 +268,9 @@
<string name="transfer_request_to">Call transfer request to</string> <string name="transfer_request_to">Call transfer request to</string>
<string name="call_auto_rejected">Auto-rejected call from \`%1$s\`</string> <string name="call_auto_rejected">Auto-rejected call from \`%1$s\`</string>
<string name="call_blocked">Auto-rejected blocked call from \`%1$s\`</string> <string name="call_blocked">Auto-rejected blocked call from \`%1$s\`</string>
<string name="hidden_call_blocked">Auto-rejected hidden call</string>
<string name="message_blocked">Auto-rejected blocked message from \`%1$s\`</string> <string name="message_blocked">Auto-rejected blocked message from \`%1$s\`</string>
<string name="hidden_message_blocked">Auto-rejected hidden message</string>
<!-- Blocked Activity --> <!-- Blocked Activity -->
<string name="blocked">Blocked</string> <string name="blocked">Blocked</string>
<string name="blocked_calls">Blocked Calls</string> <string name="blocked_calls">Blocked Calls</string>