Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b946975 authored by Moez Bhatti's avatar Moez Bhatti
Browse files

If we can't access the blocking manager, don't unblock the conversation

parent 2bcb0594
Loading
Loading
Loading
Loading
+15 −21
Original line number Diff line number Diff line
@@ -25,10 +25,10 @@ import android.net.Uri
import androidx.core.database.getStringOrNull
import com.moez.QKSMS.common.util.extensions.isInstalled
import com.moez.QKSMS.extensions.map
import com.moez.QKSMS.util.tryOrNull
import io.reactivex.Completable
import io.reactivex.Single
import java.util.ArrayList
import timber.log.Timber
import java.util.*
import javax.inject.Inject

class CallBlockerBlockingClient @Inject constructor(
@@ -43,32 +43,26 @@ class CallBlockerBlockingClient @Inject constructor(

    override fun getClientCapability() = BlockingClient.Capability.BLOCK_WITH_PERMISSION

    override fun shouldBlock(address: String): Single<BlockingClient.Action> = Single.fromCallable {
        val uri = Uri.parse("content://com.cuiet.blockCalls.ContProvBlockCalls/lookup/is.blocked.lookup")
        val blockReason = tryOrNull {
            context.contentResolver.query(uri, arrayOf("result"), "incomingNumber", arrayOf(address), null)
                    ?.use { cursor -> cursor.map(::LookupResult) }
                    ?.find { result -> result.blockReason != null }
        }?.blockReason
    override fun shouldBlock(address: String): Single<BlockingClient.Action> = lookup(address, "incomingNumber")

        when (blockReason) {
            "true" -> BlockingClient.Action.Block()
            else ->  BlockingClient.Action.Unblock
        }
    }
    override fun isBlacklisted(address: String): Single<BlockingClient.Action> = lookup(address, "blacklistLookup")

    override fun isBlacklisted(address: String): Single<BlockingClient.Action> = Single.fromCallable {
    private fun lookup(address: String, reason: String): Single<BlockingClient.Action> = Single.fromCallable {
        val uri = Uri.parse("content://com.cuiet.blockCalls.ContProvBlockCalls/lookup/is.blocked.lookup")
        val blockReason = tryOrNull {
            context.contentResolver.query(uri, arrayOf("result"), "blacklistLookup", arrayOf(address), null)
        return@fromCallable try {
            val blockReason = context.contentResolver.query(uri, arrayOf("result"), reason, arrayOf(address), null)
                    ?.use { cursor -> cursor.map(::LookupResult) }
                    ?.find { result -> result.blockReason != null }
        }?.blockReason
                    ?.blockReason

            when (blockReason) {
                "true" -> BlockingClient.Action.Block()
                else -> BlockingClient.Action.Unblock
            }
        } catch (e: Exception) {
            Timber.w(e)
            BlockingClient.Action.DoNothing
        }
    }

    override fun block(addresses: List<String>): Completable = Completable.fromCallable {
+11 −7
Original line number Diff line number Diff line
@@ -26,9 +26,9 @@ import androidx.core.database.getStringOrNull
import com.callcontrol.datashare.CallControl
import com.moez.QKSMS.common.util.extensions.isInstalled
import com.moez.QKSMS.extensions.map
import com.moez.QKSMS.util.tryOrNull
import io.reactivex.Completable
import io.reactivex.Single
import timber.log.Timber
import javax.inject.Inject

class CallControlBlockingClient @Inject constructor(
@@ -52,16 +52,20 @@ class CallControlBlockingClient @Inject constructor(

    override fun isBlacklisted(address: String): Single<BlockingClient.Action> = Single.fromCallable {
        val uri = Uri.withAppendedPath(CallControl.LOOKUP_TEXT_URI, address)
        val blockReason = tryOrNull {
            context.contentResolver.query(uri, projection, null, null, null) // Query URI
        return@fromCallable try {
            val blockReason = context.contentResolver.query(uri, projection, null, null, null) // Query URI
                    ?.use { cursor -> cursor.map(::LookupResult) } // Map to Result object
                    ?.find { result -> result.blockReason != null } // Check if any are blocked
        }?.blockReason // If none are blocked or we errored at some point, return false
                    ?.blockReason // If none are blocked or we errored at some point, return false

            when (blockReason) {
                null -> BlockingClient.Action.Unblock
                else -> BlockingClient.Action.Block(blockReason)
            }
        } catch (e: Exception) {
            Timber.w(e)
            BlockingClient.Action.DoNothing
        }
    }

    override fun block(addresses: List<String>): Completable = Completable.fromCallable {