diff --git a/app/build.gradle b/app/build.gradle index 201a0d9f..12517af0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:28e3b108e7' + implementation 'com.github.SimpleMobileTools:Simple-Commons:15c753bd01' implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61' implementation 'me.grantland:autofittextview:0.2.1' } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Call.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Call.kt index 53ad1d1b..d48216ae 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Call.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Call.kt @@ -1,6 +1,5 @@ package com.simplemobiletools.dialer.extensions -import android.net.Uri import android.telecom.Call import android.telecom.Call.STATE_CONNECTING import android.telecom.Call.STATE_DIALING @@ -42,18 +41,3 @@ fun Call.isOutgoing(): Boolean { fun Call.hasCapability(capability: Int): Boolean = (details.callCapabilities and capability) != 0 fun Call?.isConference(): Boolean = this?.details?.hasProperty(Call.Details.PROPERTY_CONFERENCE) == true - -fun Call.getCallerNumber(): String? { - val handle = try { - details?.handle?.toString() - } catch (e: NullPointerException) { - null - } - if (handle != null) { - val uri = Uri.decode(handle) - if (uri.startsWith("tel:")) { - return uri.substringAfter("tel:") - } - } - return null -} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt index 7c859dd4..58b0d517 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt @@ -5,10 +5,10 @@ import android.content.ActivityNotFoundException import android.content.Context import android.telecom.Call import android.telecom.InCallService -import com.simplemobiletools.commons.extensions.isNumberBlocked -import com.simplemobiletools.commons.extensions.normalizePhoneNumber import com.simplemobiletools.dialer.activities.CallActivity -import com.simplemobiletools.dialer.extensions.* +import com.simplemobiletools.dialer.extensions.config +import com.simplemobiletools.dialer.extensions.isOutgoing +import com.simplemobiletools.dialer.extensions.powerManager import com.simplemobiletools.dialer.helpers.CallManager import com.simplemobiletools.dialer.helpers.CallNotificationManager import com.simplemobiletools.dialer.helpers.NoCall @@ -27,27 +27,21 @@ class CallService : InCallService() { override fun onCallAdded(call: Call) { super.onCallAdded(call) - val number = call.getCallerNumber().orEmpty() - if (!call.isOutgoing() && !call.isConference() && isNumberBlocked(number.normalizePhoneNumber())) { - call.reject(false, null) - return - } else { - CallManager.onCallAdded(call) - CallManager.inCallService = this - call.registerCallback(callListener) + CallManager.onCallAdded(call) + CallManager.inCallService = this + call.registerCallback(callListener) - val isScreenLocked = (getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager).isDeviceLocked - if (!powerManager.isInteractive || call.isOutgoing() || isScreenLocked || config.alwaysShowFullscreen) { - try { - callNotificationManager.setupNotification(true) - startActivity(CallActivity.getStartIntent(this)) - } catch (e: ActivityNotFoundException) { - // seems like startActivity can thrown AndroidRuntimeException and ActivityNotFoundException, not yet sure when and why, lets show a notification - callNotificationManager.setupNotification() - } - } else { + val isScreenLocked = (getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager).isDeviceLocked + if (!powerManager.isInteractive || call.isOutgoing() || isScreenLocked || config.alwaysShowFullscreen) { + try { + callNotificationManager.setupNotification(true) + startActivity(CallActivity.getStartIntent(this)) + } catch (e: ActivityNotFoundException) { + // seems like startActivity can thrown AndroidRuntimeException and ActivityNotFoundException, not yet sure when and why, lets show a notification callNotificationManager.setupNotification() } + } else { + callNotificationManager.setupNotification() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/services/SimpleCallScreeningService.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/services/SimpleCallScreeningService.kt index b705cfcf..a2bf3942 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/services/SimpleCallScreeningService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/services/SimpleCallScreeningService.kt @@ -7,23 +7,25 @@ import android.telecom.CallScreeningService import androidx.annotation.RequiresApi import com.simplemobiletools.commons.extensions.baseConfig import com.simplemobiletools.commons.extensions.getMyContactsCursor +import com.simplemobiletools.commons.extensions.isNumberBlocked +import com.simplemobiletools.commons.extensions.normalizePhoneNumber import com.simplemobiletools.commons.helpers.SimpleContactsHelper @RequiresApi(Build.VERSION_CODES.N) class SimpleCallScreeningService : CallScreeningService() { override fun onScreenCall(callDetails: Call.Details) { - if (baseConfig.blockUnknownNumbers) { - if (callDetails.handle != null) { - val simpleContactsHelper = SimpleContactsHelper(this) - val number = Uri.decode(callDetails.handle?.toString() ?: "").substringAfter("tel:") - val privateCursor = getMyContactsCursor(false, true) - simpleContactsHelper.exists(number, privateCursor) { exists -> - respondToCall(callDetails, !exists) - } + val number = Uri.decode(callDetails.handle?.toString())?.substringAfter("tel:") + if (number != null && isNumberBlocked(number.normalizePhoneNumber())) { + respondToCall(callDetails, isBlocked = true) + } else if (number != null && baseConfig.blockUnknownNumbers) { + val simpleContactsHelper = SimpleContactsHelper(this) + val privateCursor = getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true) + simpleContactsHelper.exists(number, privateCursor) { exists -> + respondToCall(callDetails, isBlocked = !exists) } } else { - respondToCall(callDetails, false) + respondToCall(callDetails, isBlocked = false) } }