@@ -10,6 +10,7 @@ import android.content.pm.PackageManager
1010import android.os.Build
1111import android.telephony.TelephonyManager
1212import android.widget.Toast
13+ import androidx.annotation.RequiresApi
1314import androidx.core.app.ActivityCompat
1415import androidx.core.app.NotificationCompat
1516import androidx.core.app.NotificationManagerCompat
@@ -23,10 +24,12 @@ class MyCallReceiver : BroadcastReceiver() {
2324 private const val SPAM_PREFS = " SPAM_PREFS"
2425 private const val BLOCK_NUMBERS_KEY = " BLOCK_NUMBERS"
2526 private const val SPAM_URL_TEMPLATE = " https://www.listaspam.com/busca.php?Telefono=%s"
27+ private const val RESPONDERONO_URL_TEMPLATE = " https://www.responderono.es/numero-de-telefono/%s"
2628 private const val NOTIFICATION_CHANNEL_ID = " NOTIFICATION_CHANNEL"
2729 private const val NOTIFICATION_ID = 1
2830 }
2931
32+ @RequiresApi(Build .VERSION_CODES .CUPCAKE )
3033 override fun onReceive (context : Context , intent : Intent ) {
3134 val state = intent.getStringExtra(TelephonyManager .EXTRA_STATE )
3235 val incomingNumber = intent.getStringExtra(TelephonyManager .EXTRA_INCOMING_NUMBER )
@@ -48,7 +51,7 @@ class MyCallReceiver : BroadcastReceiver() {
4851 OkHttpClient ().newCall(request).enqueue(object : Callback {
4952 override fun onFailure (call : Call , e : IOException ) {
5053 // Handle error gracefully
51- showToast(context, " Failed to check spam number" , Toast .LENGTH_LONG )
54+ showToast(context, " Failed to check number in www.responderono.es " , Toast .LENGTH_LONG )
5255 }
5356
5457 override fun onResponse (call : Call , response : Response ) {
@@ -58,13 +61,39 @@ class MyCallReceiver : BroadcastReceiver() {
5861 saveSpamNumber(context, number)
5962 sendNotification(context, number)
6063 } else {
61- removeSpamNumber(context, number)
64+ checkResponderono(context, number, spamData)
65+ if (spamData.responderONoNegative) {
66+ saveSpamNumber(context, number)
67+ sendNotification(context, number)
68+ } else {
69+ removeSpamNumber(context, number)
70+ showToast(context, " Incoming call is not spam" , Toast .LENGTH_LONG )
71+ }
6272 }
6373 }
6474 }
6575 })
6676 }
6777
78+ private fun checkResponderono (context : Context , number : String , spamData : SpamData ) {
79+ val url = RESPONDERONO_URL_TEMPLATE .format(number)
80+ val request = Request .Builder ().url(url).build()
81+
82+ OkHttpClient ().newCall(request).enqueue(object : Callback {
83+ override fun onFailure (call : Call , e : IOException ) {
84+ // Handle error gracefully
85+ showToast(context, " Failed to check number in www.responderono.es" , Toast .LENGTH_LONG )
86+ }
87+
88+ override fun onResponse (call : Call , response : Response ) {
89+ response.body?.string()?.let { body ->
90+ val isResponderONoNegative = body.contains(" .scoreContainer .score.negative" )
91+ spamData.responderONoNegative = isResponderONoNegative
92+ }
93+ }
94+ })
95+ }
96+
6897 private fun saveSpamNumber (context : Context , number : String ) {
6998 val sharedPreferences = context.getSharedPreferences(SPAM_PREFS , Context .MODE_PRIVATE )
7099 val blockedNumbers = sharedPreferences.getStringSet(BLOCK_NUMBERS_KEY , mutableSetOf ())?.toMutableSet()
@@ -131,6 +160,6 @@ class MyCallReceiver : BroadcastReceiver() {
131160 val reports = elementReports?.text()?.toIntOrNull() ? : 0
132161 val searches = elementSearches?.text()?.toIntOrNull() ? : 0
133162
134- return SpamData (reports, searches)
163+ return SpamData (reports, searches, false )
135164 }
136165}
0 commit comments