mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
Merge pull request #358 from sdex/block_unknown_numbers
Add the service to block unknown numbers
This commit is contained in:
@ -61,6 +61,6 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:55c3180f98'
|
implementation 'com.github.SimpleMobileTools:Simple-Commons:10c8ac2f1e'
|
||||||
implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61'
|
implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61'
|
||||||
}
|
}
|
||||||
|
@ -168,6 +168,15 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</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
|
<receiver
|
||||||
android:name=".receivers.CallActionReceiver"
|
android:name=".receivers.CallActionReceiver"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
@ -4,6 +4,7 @@ import android.telecom.Call
|
|||||||
import android.telecom.Call.STATE_CONNECTING
|
import android.telecom.Call.STATE_CONNECTING
|
||||||
import android.telecom.Call.STATE_DIALING
|
import android.telecom.Call.STATE_DIALING
|
||||||
import android.telecom.Call.STATE_SELECT_PHONE_ACCOUNT
|
import android.telecom.Call.STATE_SELECT_PHONE_ACCOUNT
|
||||||
|
import com.simplemobiletools.commons.helpers.isQPlus
|
||||||
import com.simplemobiletools.commons.helpers.isSPlus
|
import com.simplemobiletools.commons.helpers.isSPlus
|
||||||
|
|
||||||
private val OUTGOING_CALL_STATES = arrayOf(STATE_CONNECTING, STATE_DIALING, STATE_SELECT_PHONE_ACCOUNT)
|
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 {
|
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
|
fun Call.hasCapability(capability: Int): Boolean = (details.callCapabilities and capability) != 0
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user