mirror of
https://github.com/quik-sms/quik.git
synced 2026-11-15 18:48:52 +01:00
When necessary, show dialog prompting user to go to external blocking manager
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package com.moez.QKSMS.blocking
|
||||
|
||||
import com.moez.QKSMS.util.Preferences
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.Single
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Delegates requests to the active blocking client
|
||||
*/
|
||||
@Singleton
|
||||
class BlockingManager @Inject constructor(
|
||||
private val prefs: Preferences,
|
||||
private val callControlBlockingClient: CallControlBlockingClient,
|
||||
private val qkBlockingClient: QkBlockingClient,
|
||||
private val shouldIAnswerBlockingClient: ShouldIAnswerBlockingClient
|
||||
) : BlockingClient {
|
||||
|
||||
private val client: BlockingClient
|
||||
get() = when (prefs.blockingManager.get()) {
|
||||
Preferences.BLOCKING_MANAGER_SIA -> shouldIAnswerBlockingClient
|
||||
Preferences.BLOCKING_MANAGER_CC -> callControlBlockingClient
|
||||
else -> qkBlockingClient
|
||||
}
|
||||
|
||||
override fun isBlocked(address: String): Single<Boolean> = client.isBlocked(address)
|
||||
|
||||
override fun canBlock(): Boolean = client.canBlock()
|
||||
|
||||
override fun block(addresses: List<String>): Completable = client.block(addresses)
|
||||
|
||||
override fun canUnblock(): Boolean = client.canUnblock()
|
||||
|
||||
override fun unblock(addresses: List<String>): Completable = client.unblock(addresses)
|
||||
|
||||
}
|
||||
@@ -55,11 +55,14 @@ class CallControlBlockingClient @Inject constructor(
|
||||
|
||||
override fun canBlock(): Boolean = true
|
||||
|
||||
override fun block(address: String): Completable = Completable.fromCallable {
|
||||
CallControl.report(context, CallControl.Report(address))
|
||||
override fun block(addresses: List<String>): Completable = Completable.fromCallable {
|
||||
val reports = addresses.map { CallControl.Report(it) }
|
||||
CallControl.report(context, arrayListOf<CallControl.Report>().apply { addAll(reports) })
|
||||
}
|
||||
|
||||
override fun unblock(address: String): Completable = Completable.fromCallable {
|
||||
override fun unblock(addresses: List<String>): Completable = Completable.fromCallable {
|
||||
// Only show a particular address if we're only unblocking that one
|
||||
val address = addresses.takeIf { it.size == 1 }?.first()
|
||||
CallControl.openBlockedList(context, address)
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.moez.QKSMS.blocking
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.provider.BlockedNumberContract
|
||||
import android.telecom.TelecomManager
|
||||
@@ -45,11 +46,12 @@ class QkBlockingClient @Inject constructor(private val context: Context) : Block
|
||||
|
||||
override fun canBlock(): Boolean = Build.VERSION.SDK_INT < 24
|
||||
|
||||
override fun block(address: String): Completable = Completable.fromCallable {
|
||||
override fun block(addresses: List<String>): Completable = Completable.fromCallable {
|
||||
when {
|
||||
Build.VERSION.SDK_INT >= 24 -> {
|
||||
val telecomManager = context.getSystemService(Context.TELECOM_SERVICE) as TelecomManager
|
||||
val intent = telecomManager.createManageBlockedNumbersIntent()
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
@@ -58,7 +60,7 @@ class QkBlockingClient @Inject constructor(private val context: Context) : Block
|
||||
.max("id")?.toLong() ?: -1
|
||||
|
||||
realm.executeTransaction {
|
||||
realm.insert(BlockedNumber(maxId + 1, address))
|
||||
realm.insert(addresses.mapIndexed { index, address -> BlockedNumber(maxId + 1 + index, address) })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,15 +68,19 @@ class QkBlockingClient @Inject constructor(private val context: Context) : Block
|
||||
|
||||
override fun canUnblock(): Boolean = true
|
||||
|
||||
override fun unblock(address: String): Completable = Completable.fromCallable {
|
||||
override fun unblock(addresses: List<String>): Completable = Completable.fromCallable {
|
||||
when {
|
||||
Build.VERSION.SDK_INT >= 24 -> BlockedNumberContract.unblock(context, address)
|
||||
Build.VERSION.SDK_INT >= 24 -> addresses.forEach { address ->
|
||||
BlockedNumberContract.unblock(context, address)
|
||||
}
|
||||
|
||||
else -> Realm.getDefaultInstance().use { realm ->
|
||||
val ids = realm
|
||||
.where(BlockedNumber::class.java)
|
||||
.findAll()
|
||||
.filter { number -> PhoneNumberUtils.compare(number.address, address) }
|
||||
.filter { number ->
|
||||
addresses.any { address -> PhoneNumberUtils.compare(number.address, address) }
|
||||
}
|
||||
.map { number -> number.id }
|
||||
.toLongArray()
|
||||
|
||||
|
||||
@@ -56,9 +56,9 @@ class ShouldIAnswerBlockingClient @Inject constructor(
|
||||
return Binder(context, prefs, address).isBlocked()
|
||||
}
|
||||
|
||||
override fun block(address: String): Completable = Completable.fromCallable { showSia() }
|
||||
override fun block(addresses: List<String>): Completable = Completable.fromCallable { showSia() }
|
||||
|
||||
override fun unblock(address: String): Completable = Completable.fromCallable { showSia() }
|
||||
override fun unblock(addresses: List<String>): Completable = Completable.fromCallable { showSia() }
|
||||
|
||||
private fun showSia() {
|
||||
val pm = context.packageManager
|
||||
|
||||
@@ -141,6 +141,13 @@ class ConversationRepositoryImpl @Inject constructor(
|
||||
.findFirst()
|
||||
}
|
||||
|
||||
override fun getConversations(vararg threadIds: Long): RealmResults<Conversation> {
|
||||
return Realm.getDefaultInstance()
|
||||
.where(Conversation::class.java)
|
||||
.anyOf("id", threadIds)
|
||||
.findAll()
|
||||
}
|
||||
|
||||
override fun getThreadId(recipient: String): Long? {
|
||||
return getThreadId(listOf(recipient))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user