Merge pull request #358 from sdex/block_unknown_numbers

Add the service to block unknown numbers
This commit is contained in:
Tibor Kaputa
2022-05-27 18:03:40 +02:00
committed by GitHub
4 changed files with 52 additions and 2 deletions

View File

@ -61,6 +61,6 @@ android {
}
dependencies {
implementation 'com.github.SimpleMobileTools:Simple-Commons:55c3180f98'
implementation 'com.github.SimpleMobileTools:Simple-Commons:10c8ac2f1e'
implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61'
}

View File

@ -168,6 +168,15 @@
</intent-filter>
</service>
<service
android:name=".services.SimpleCallScreeningService"
android:exported="true"
android:permission="android.permission.BIND_SCREENING_SERVICE">
<intent-filter>
<action android:name="android.telecom.CallScreeningService" />
</intent-filter>
</service>
<receiver
android:name=".receivers.CallActionReceiver"
android:enabled="true"

View File

@ -4,6 +4,7 @@ import android.telecom.Call
import android.telecom.Call.STATE_CONNECTING
import android.telecom.Call.STATE_DIALING
import android.telecom.Call.STATE_SELECT_PHONE_ACCOUNT
import com.simplemobiletools.commons.helpers.isQPlus
import com.simplemobiletools.commons.helpers.isSPlus
private val OUTGOING_CALL_STATES = arrayOf(STATE_CONNECTING, STATE_DIALING, STATE_SELECT_PHONE_ACCOUNT)
@ -32,7 +33,11 @@ fun Call?.getCallDuration(): Int {
}
fun Call.isOutgoing(): Boolean {
return OUTGOING_CALL_STATES.contains(getStateCompat())
return if (isQPlus()) {
details.callDirection == Call.Details.DIRECTION_OUTGOING
} else {
OUTGOING_CALL_STATES.contains(getStateCompat())
}
}
fun Call.hasCapability(capability: Int): Boolean = (details.callCapabilities and capability) != 0

View File

@ -0,0 +1,36 @@
package com.simplemobiletools.dialer.services
import android.net.Uri
import android.os.Build
import android.telecom.Call
import android.telecom.CallScreeningService
import androidx.annotation.RequiresApi
import com.simplemobiletools.commons.extensions.baseConfig
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
@RequiresApi(Build.VERSION_CODES.N)
class SimpleCallScreeningService : CallScreeningService() {
override fun onScreenCall(callDetails: Call.Details) {
val simpleContactsHelper = SimpleContactsHelper(this)
val number = Uri.decode(callDetails.handle.toString()).substringAfter("tel:")
if (baseConfig.blockUnknownNumbers) {
simpleContactsHelper.exists(number) { exists ->
respondToCall(callDetails, !exists)
}
} else {
respondToCall(callDetails, false)
}
}
private fun respondToCall(callDetails: Call.Details, isBlocked: Boolean) {
val response = CallResponse.Builder()
.setDisallowCall(isBlocked)
.setRejectCall(isBlocked)
.setSkipCallLog(isBlocked)
.setSkipNotification(isBlocked)
.build()
respondToCall(callDetails, response)
}
}