diff --git a/app/src/main/java/me/lucky/silence/NotificationManager.kt b/app/src/main/java/me/lucky/silence/NotificationManager.kt
index 5807687..70c914a 100644
--- a/app/src/main/java/me/lucky/silence/NotificationManager.kt
+++ b/app/src/main/java/me/lucky/silence/NotificationManager.kt
@@ -1,7 +1,9 @@
package me.lucky.silence
import android.content.Context
+import android.net.Uri
import android.os.SystemClock
+import android.provider.ContactsContract
import androidx.core.app.NotificationChannelCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
@@ -22,16 +24,48 @@ class NotificationManager(private val ctx: Context) {
).setName(ctx.getString(R.string.notification_channel)).build())
}
+ private fun getContactName(phoneNumber: String): String? {
+ val uri = Uri.withAppendedPath(
+ ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
+ Uri.encode(phoneNumber)
+ )
+ val cursor = try {
+ ctx.contentResolver.query(
+ uri,
+ arrayOf(ContactsContract.PhoneLookup.DISPLAY_NAME),
+ null,
+ null,
+ null
+ )
+ } catch (_: SecurityException) {
+ null
+ }
+
+ var contactName: String? = null
+ cursor?.use {
+ if (it.moveToFirst()) {
+ contactName = it.getString(
+ it.getColumnIndexOrThrow(ContactsContract.PhoneLookup.DISPLAY_NAME)
+ )
+ }
+ }
+ return contactName
+ }
+
fun notifyBlockedCall(tel: String, sim: Sim?) {
var title = ctx.getString(R.string.notification_title)
if (sim != null) title = "$title (${sim.name.replace('_', ' ')})"
+
+ val contactName = getContactName(tel)
+ val displayText = contactName ?: tel
+
try {
manager.notify(
SystemClock.uptimeMillis().toInt(),
NotificationCompat.Builder(ctx, CHANNEL_BLOCKED_CALLS_ID)
.setSmallIcon(R.drawable.ic_tile)
.setContentTitle(title)
- .setContentText(tel)
+ .setContentText(displayText)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setCategory(NotificationCompat.CATEGORY_STATUS)
.setShowWhen(true)
diff --git a/app/src/main/java/me/lucky/silence/Preferences.kt b/app/src/main/java/me/lucky/silence/Preferences.kt
index e348a2d..7815bd0 100644
--- a/app/src/main/java/me/lucky/silence/Preferences.kt
+++ b/app/src/main/java/me/lucky/silence/Preferences.kt
@@ -162,7 +162,7 @@ class Preferences(ctx: Context) {
private fun defaultExtra(): Int {
var flags = 0
- if (prefs.getBoolean(CONTACTS_CHECKED, true))
+ if (prefs.getBoolean(CONTACTS_CHECKED, false))
flags = flags.or(Extra.CONTACTS.value)
if (prefs.getBoolean(SHORT_NUMBERS_CHECKED, false))
flags = flags.or(Extra.SHORT_NUMBERS.value)
diff --git a/app/src/main/java/me/lucky/silence/ui/ExtraScreen.kt b/app/src/main/java/me/lucky/silence/ui/ExtraScreen.kt
index 13ef282..3a80c9f 100644
--- a/app/src/main/java/me/lucky/silence/ui/ExtraScreen.kt
+++ b/app/src/main/java/me/lucky/silence/ui/ExtraScreen.kt
@@ -1,12 +1,21 @@
package me.lucky.silence.ui
import android.Manifest
+import android.content.Context
+import android.content.pm.PackageManager
import android.os.Build
+import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
+import androidx.core.content.ContextCompat
import me.lucky.silence.Extra
import me.lucky.silence.Preferences
import me.lucky.silence.R
@@ -16,21 +25,52 @@ import me.lucky.silence.ui.common.Screen
@Composable
fun ExtraScreen(prefs: Preferences, onBackPressed: () -> Boolean) {
+ val ctx = LocalContext.current
+ val contactsEnabledState = remember { mutableStateOf(prefs.extra.has(Extra.CONTACTS)) }
+
+ LaunchedEffect(Unit) {
+ if (contactsEnabledState.value && ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_CONTACTS)
+ != PackageManager.PERMISSION_GRANTED) {
+ // Si estaba activado pero ya no tiene permisos, desactivarlo
+ contactsEnabledState.value = false
+ prefs.setExtra(Extra.CONTACTS, false)
+ }
+ }
+
val registerForContactsPermissions =
- rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) {}
-
- fun requestContactsPermissions() =
- registerForContactsPermissions.launch(Manifest.permission.READ_CONTACTS)
+ rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
+ contactsEnabledState.value = isGranted
+ prefs.setExtra(Extra.CONTACTS, isGranted)
+ if (!isGranted) {
+ Toast.makeText(
+ ctx,
+ "Contacts permission not granted",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
val preferenceList = listOf(
Preference(
- getValue = { prefs.extra.has(Extra.CONTACTS) },
+ getValue = { contactsEnabledState.value },
setValue = { isChecked ->
- prefs.setExtra(Extra.CONTACTS, isChecked)
- if (!isChecked) requestContactsPermissions()
+ if (isChecked) {
+ if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_CONTACTS)
+ == PackageManager.PERMISSION_GRANTED
+ ) {
+ contactsEnabledState.value = true
+ prefs.setExtra(Extra.CONTACTS, true)
+ } else {
+ registerForContactsPermissions.launch(Manifest.permission.READ_CONTACTS)
+ }
+ } else {
+ contactsEnabledState.value = false
+ prefs.setExtra(Extra.CONTACTS, false)
+ }
},
name = R.string.extra_contacts,
description = R.string.extra_contacts_description,
+ state = contactsEnabledState,
), Preference(
getValue = { prefs.extra.has(Extra.SHORT_NUMBERS) },
setValue = { isChecked -> prefs.setExtra(Extra.SHORT_NUMBERS, isChecked) },
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index e104ca6..4061c59 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -42,7 +42,9 @@
تخطي سجل المكالمات
تخطي الإشعار
السماح بجميع المكالمات من شريحة الاتصال SIM 1.
+ حظر جميع المكالمات من الشريحة 1.
السماح بجميع المكالمات من شريحة الاتصال SIM 2.
+ حظر جميع المكالمات من الشريحة 2.
السماح بالمكالمات من الأرقام التي اتصلت بها.
السماح مؤقتا بالمكالمات من أرقام الهواتف المحمولة الموجودة في نص الرسائل الواردة.
تمكين جهاز استقبال البث من التحكم في الصمت بقصد.
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index bc46707..f3ed154 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -50,9 +50,11 @@
Legt fest, ob der eingehende Anruf getrennt werden soll, als ob der Benutzer ihn manuell abgelehnt hätte. Diese Option sollte nur aktiviert werden, wenn der Anruf nicht zugelassen ist.
Legt fest, ob der eingehende Anruf nicht in der Anrufliste angezeigt werden soll. Diese Option sollte nur aktiviert werden, wenn der Anruf nicht zugelassen ist. Die Anrufe werden weiterhin mit dem Typ BLOCKED_TYPE protokolliert.
Alle Anrufe von SIM 1 zulassen.
+ Alle Anrufe von SIM 1 blockieren.
Legt fest, ob das Klingeln für den eingehenden Anruf stummgeschaltet werden soll. Der Anruf wird jedoch weiterhin an die Standard-Dialer-App weitergeleitet, wenn er nicht blockiert ist. Die Aktivierung dieser Option ist nur dann sinnvoll, wenn der Anruf nicht blockiert wurde.
Legt fest, ob für den eingehenden Anruf keine Benachrichtigung über einen verpassten Anruf angezeigt werden soll. Diese Option sollte nur aktiviert werden, wenn der Anruf nicht zugelassen ist.
Alle Anrufe von SIM 2 zulassen.
+ Alle Anrufe von SIM 2 blockieren.
Wie lange die Nummer Sie anrufen kann. Modifikatoren: Tage [d], Stunden [h], Minuten [m]
zeit
7 Tage / 48 Stunden / 120 Minuten
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index f5872ba..ca08774 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -17,12 +17,14 @@
una aplicación desconocida
Tarjeta SIM 1
Permitir todas las llamadas desde la SIM 1.
+ Bloquear todas las llamadas desde la SIM 1.
Más información
Bloquear todas las llamadas entrantes. Para bloquear también los números de los contactos hay que conceder un permiso.
Bloquear
Contactos
Tarjeta SIM 2
Permitir todas las llamadas desde la Tarjeta SIM 2.
+ Bloquear todas las llamadas desde la SIM 2.
Permitir llamadas de extraños sin número.
Números cortos
Permitir llamadas desde números con una longitud de 3 a 5 dígitos.
@@ -79,8 +81,8 @@
¡Expresión regular no válida!
Permitir todas las llamadas desde una o ambas tarjetas SIM.
Volver
- Apagar
- Encender
+ Apagado
+ Encendido
Respuesta
Permitir llamadas de números que ya ha contestado.
Permitir llamadas de algunos grupos/identificadores varios.
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 7bfc431..373ab1b 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -39,8 +39,10 @@
不在着信通知がスキップされるかの設定。この設定は電話を防ぐ設定がセレクトした場合にのみセレクトしてください。
SIM 1
SIM 1 からの電話を許可する。
+ SIM 1 からの全ての電話をブロックする。
SIM 2
SIM 2 からの電話を許可する。
+ SIM 2 からの全ての電話をブロックする。
%1$sにパニック作用を許可することを確認しますか。
パニックアプリを確認
未知のアプリ
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 188bfef..f9cc06d 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -29,8 +29,10 @@
SIM
SIM 1
Leisti visus skambučius iš SIM 1.
+ Blokuoti visus skambučius iš SIM 1.
SIM 2
Leisti visus skambučius iš SIM 2.
+ Blokuoti visus skambučius iš SIM 2.
Papildoma
Kontaktai
Leisti skambučius iš adresinėje esančių numerių.
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 74ecc56..e63feba 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -41,7 +41,9 @@
Blokker alle innkommende anrop. For å blokkere nummer fra kontakter også må du innvilge tilgang.
SIM
Tillat alle anrop fra SIM 1.
+ Blokker alle anrop fra SIM 1.
Tillat alle anrop fra SIM 2.
+ Blokker alle anrop fra SIM 2.
Tillat anrop med nummer på 3 til 5 siffer.
Kontakter
Pluss-numre
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 2d61cae..3aa8705 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -42,8 +42,10 @@
Blokkeer alle inkomende oproepen. Om nummers van contacten te blokkeren, moet u autorisatie geven.
SIM 1
Sta alle oproepen toe van SIM 1.
+ Blokkeer alle oproepen van SIM 1.
SIM 2
Sta alle oproepen toe van SIM 2.
+ Blokkeer alle oproepen van SIM 2.
Verder
Contact
Sta oproepen toe van telefoonnummers in uw contacten.
diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml
index 4cf3e9e..5b4b41f 100644
--- a/app/src/main/res/values-pa/strings.xml
+++ b/app/src/main/res/values-pa/strings.xml
@@ -26,8 +26,10 @@
ਨੰਬਰ ਤੁਹਾਨੂੰ ਕਿੰਨਾ ਚਿਰ ਕਾਲ ਕਰਨ ਦੇ ਸਮਰੱਥ ਹੋਵੇਗਾ। ਸੋਧਕ: [d]ays [h]ours [m]inutes
ਸਿਮ
ਪਹਿਲੀ ਸਿਮ ਤੋਂ ਸਾਰੀਆਂ ਕਾਲਾਂ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ।
+ ਪਹਿਲੀ ਸਿਮ ਤੋਂ ਸਾਰੀਆਂ ਕਾਲਾਂ ਨੂੰ ਬਲਾਕ ਕਰੋ।
ਦੂਜੀ ਸਿਮ
ਦੂਜੀ ਸਿਮ ਤੋਂ ਸਾਰੀਆਂ ਕਾਲਾਂ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ।
+ ਦੂਜੀ ਸਿਮ ਤੋਂ ਸਾਰੀਆਂ ਕਾਲਾਂ ਨੂੰ ਬਲਾਕ ਕਰੋ।
ਆਪਣੇ ਸੰਪਰਕਾਂ ਵਿੱਚਲੇ ਨੰਬਰਾਂ ਤੋਂ ਕਾਲਾਂ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ।
ਅਣਪਛਾਤੇ ਨੰਬਰ
ਬਿਨਾਂ ਨੰਬਰ ਵਾਲੇ ਓਪਰੇ ਲੋਕਾਂ ਦੀਆਂ ਕਾਲਾਂ ਨੂੰ ਮਨਜ਼ੂਰੀ ਦਿਓ।
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 7ed92d0..ff820fd 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -39,7 +39,9 @@
Pomiń powiadomienie
Określa, czy powiadomienie o nieodebranym połączeniu nie powinno być wyświetlane dla połączenia przychodzącego. To powinno być włączone tylko wtedy, gdy połączenie jest odrzucone.
Zezwalaj na wszystkie połączenia z karty SIM 1.
+ Blokuj wszystkie połączenia z karty SIM 1.
Zezwalaj na wszystkie połączenia z karty SIM 2.
+ Blokuj wszystkie połączenia z karty SIM 2.
IDŹ
Tymczasowo zezwalaj na połączenia od numerów telefonów komórkowych znalezionych w treści wiadomości przychodzących.
Wycisz połączenie
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 98d78c7..3f01438 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -45,8 +45,10 @@
Pular o registro de ligações
IR_PARA
Permitir todas as ligações do SIM 1.
+ Bloquear todas as ligações do SIM 1.
Ativar o receptor de transmissão para controlar o Silêncio com intents.
Permitir todas as ligações do SIM 2.
+ Bloquear todas as ligações do SIM 2.
Permitir ligações de números que contêm de 3 a 5 dígitos.
Define se o som de toque deve ser silenciado para ligação recebida. A própria ligação, se não for bloqueada, ainda será enviada ao app de discagem padrão. Esta opção só é válida se você escolheu não bloquear as ligações.
Define se a ligação recebida deve ou não ser exibida no registro de ligações. Isto só deve ser selecionado se a ligação for bloqueada. As ligações ainda serão registradas como BLOCKED_TYPE.
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index caf2528..feac7c3 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -5,6 +5,7 @@
Bloquear
Bloquear todas as chamadas recebidas. Para também bloquear números de contactos, tem de conceder a permissão.
Permitir todas as chamadas do SIM 2.
+ Bloquear todas as chamadas do SIM 2.
Bloquear chamada
Não notificar
Tem a certeza de que quer permitir que %1$s desencadeie ações de pânico destrutivas\?
@@ -45,6 +46,7 @@
SIM
SIM 1
Permitir todas as chamadas do SIM 1.
+ Bloquear todas as chamadas do SIM 1.
SIM 2
Extra
Contactos
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 53a3bec..15dd236 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -16,6 +16,7 @@
Permitir chamadas de desconhecidos com número oculto.
7d / 48h / 120m
Permitir todas as chamadas do SIM 2.
+ Bloquear todas as chamadas do SIM 2.
Permitir chamadas de números que passam a verificação STRI.
Define se a chamada recebida deve ser rejeitada automaticamente como se o utilizador a tivesse rejeitado manualmente. Isso só deve ser ativado se a chamada for bloqueada.
Define se o toque da chamada recebida deve ser silenciado. No entanto a chamada ainda será enviada para a aplicação de chamadas padrão, se não estiver bloqueada. Ativar isto só faz sentido quando a chamada não foi bloqueada.
@@ -44,6 +45,7 @@
SIM
SIM 1
Permitir todas as chamadas do SIM 1.
+ Bloquear todas as chamadas do SIM 1.
SIM 2
Extra
Contactos
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index cad96c3..aa3c96a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -51,7 +51,9 @@
Устанавливает, должен ли входящий вызов отображаться в журнале вызовов. Вызовы по-прежнему будут регистрироваться с типом BLOCKED_TYPE.
Пропускать уведомления
Разрешить все вызовы для SIM 1.
+ Заблокировать все вызовы с SIM 1.
Разрешить все вызовы для SIM 2.
+ Заблокировать все вызовы с SIM 2.
Контакты
Разрешить звонки с номеров в контактах.
Международные номера
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 50b7d58..57e911e 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -44,8 +44,10 @@
தொகுதி
உள்வரும் அனைத்து அழைப்புகளையும் தடுக்கவும். தொடர்புகளிலிருந்து எண்களைத் தடுக்க நீங்கள் இசைவு வழங்க வேண்டும்.
சிம் 1 இலிருந்து அனைத்து அழைப்புகளையும் அனுமதிக்கவும்.
+ சிம் 1 இலிருந்து அனைத்து அழைப்புகளையும் தடுக்கவும்.
சிம் 2
சிம் 2 இலிருந்து அனைத்து அழைப்புகளையும் அனுமதிக்கவும்.
+ சிம் 2 இலிருந்து அனைத்து அழைப்புகளையும் தடுக்கவும்.
கூடுதல்
தொடர்புகள்
உங்கள் தொடர்புகளில் உள்ள எண்களிலிருந்து அழைப்புகளை அனுமதிக்கவும்.
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index cd24a51..ed4740e 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -48,7 +48,9 @@
Gelen aramanın arama günlüğünde görüntülenmemesi gerekip gerekmediğini ayarlar. Bu yalnızca aramaya izin verilmiyorsa işaretlenmelidir. Aramalar yine de BLOCKED_TYPE türüyle kaydedilecektir.
Gelen arama için bir cevapsız arama bildiriminin gösterilmemesi gerekip gerekmediğini ayarlar. Bu yalnızca aramaya izin verilmiyorsa işaretlenmelidir.
SIM 1\'den gelen tüm aramalara izin ver.
+ SIM 1\'den gelen tüm aramaları engelle.
SIM 2\'den gelen tüm aramalara izin ver.
+ SIM 2\'den gelen tüm aramaları engelle.
Gelen mesajlar metninde bulunan cep telefonu numaralarından gelen aramalara geçici olarak izin ver.
Genel yayın alıcısının Silence\'ı intent\'lerle denetlemesini etkinleştirir.
Gelen aramanın engellenip engellenmeyeceğini ayarlar.
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 7922560..143e2da 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -38,8 +38,10 @@
封鎖所有來電。若要同時封鎖聯絡人的號碼,你必須授予權限。
SIM 1
允許來自 SIM 1 的所有來電。
+ 封鎖來自 SIM 1 的所有來電。
SIM 2
允許來自 SIM 2 的所有來電。
+ 封鎖來自 SIM 2 的所有來電。
時間
文字
7 天/48 小時/120 分鐘
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f5e9891..f1361e5 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.13.1"
+agp = "8.12.1"
kotlin = "2.2.21"
coreKtx = "1.17.0"
junit = "4.13.2"