From d91c9043da9df1afdc1d7e5781fdbe213153047b Mon Sep 17 00:00:00 2001 From: moezbhatti Date: Thu, 22 Aug 2019 22:14:27 +0200 Subject: [PATCH] Don't use system blocking provider, since it won't let messages reach QKSMS anyway --- .../QKSMS/blocking/AndroidBlockingClient.kt | 84 ------------------- .../moez/QKSMS/blocking/BlockingManager.kt | 4 +- .../QKSMS/blocking/QksmsBlockingClient.kt | 50 +++++++++++ .../java/com/moez/QKSMS/util/Preferences.kt | 4 +- .../QKSMS/feature/blocking/BlockingDialog.kt | 2 +- .../feature/blocking/BlockingPresenter.kt | 2 +- .../manager/BlockingManagerController.kt | 6 +- .../manager/BlockingManagerPresenter.kt | 19 ++--- .../blocking/manager/BlockingManagerView.kt | 4 +- .../main/res/layout/blocking_controller.xml | 2 +- .../layout/blocking_manager_controller.xml | 6 +- presentation/src/main/res/values/strings.xml | 4 +- 12 files changed, 74 insertions(+), 113 deletions(-) delete mode 100644 data/src/main/java/com/moez/QKSMS/blocking/AndroidBlockingClient.kt create mode 100644 data/src/main/java/com/moez/QKSMS/blocking/QksmsBlockingClient.kt diff --git a/data/src/main/java/com/moez/QKSMS/blocking/AndroidBlockingClient.kt b/data/src/main/java/com/moez/QKSMS/blocking/AndroidBlockingClient.kt deleted file mode 100644 index d78bfb1f..00000000 --- a/data/src/main/java/com/moez/QKSMS/blocking/AndroidBlockingClient.kt +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -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 -import androidx.core.content.contentValuesOf -import com.moez.QKSMS.repository.BlockingRepository -import io.reactivex.Completable -import io.reactivex.Single -import javax.inject.Inject - -class AndroidBlockingClient @Inject constructor( - private val context: Context, - private val blockingRepo: BlockingRepository -) : BlockingClient { - - override fun isAvailable(): Boolean = true - - override fun isBlocked(address: String): Single = Single.fromCallable { - when { - Build.VERSION.SDK_INT >= 24 -> BlockedNumberContract.isBlocked(context, address) - - else -> blockingRepo.isBlocked(address) - } - } - - override fun canBlock(): Boolean = true - - override fun block(addresses: List): Completable = Completable.fromCallable { - when { - Build.VERSION.SDK_INT >= 24 -> addresses.forEach { address -> - val cv = contentValuesOf(BlockedNumberContract.BlockedNumbers.COLUMN_ORIGINAL_NUMBER to address) - context.contentResolver.insert(BlockedNumberContract.BlockedNumbers.CONTENT_URI, cv) - } - - else -> blockingRepo.blockNumber(*addresses.toTypedArray()) - } - } - - override fun canUnblock(): Boolean = true - - override fun unblock(addresses: List): Completable = Completable.fromCallable { - when { - Build.VERSION.SDK_INT >= 24 -> addresses.forEach { address -> - BlockedNumberContract.unblock(context, address) - } - - else -> blockingRepo.unblockNumbers(*addresses.toTypedArray()) - } - } - - override fun openSettings() = when { - Build.VERSION.SDK_INT >= 24 -> { - val telecomManager = context.getSystemService(Context.TELECOM_SERVICE) as TelecomManager - val intent = telecomManager.createManageBlockedNumbersIntent() - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - - context.startActivity(intent) - } - - else -> {} // TODO: Do this here once we implement AndroidX navigation - } - -} diff --git a/data/src/main/java/com/moez/QKSMS/blocking/BlockingManager.kt b/data/src/main/java/com/moez/QKSMS/blocking/BlockingManager.kt index 5f6b3cfa..e134eaef 100644 --- a/data/src/main/java/com/moez/QKSMS/blocking/BlockingManager.kt +++ b/data/src/main/java/com/moez/QKSMS/blocking/BlockingManager.kt @@ -13,7 +13,7 @@ import javax.inject.Singleton class BlockingManager @Inject constructor( private val prefs: Preferences, private val callControlBlockingClient: CallControlBlockingClient, - private val androidBlockingClient: AndroidBlockingClient, + private val qksmsBlockingClient: QksmsBlockingClient, private val shouldIAnswerBlockingClient: ShouldIAnswerBlockingClient ) : BlockingClient { @@ -21,7 +21,7 @@ class BlockingManager @Inject constructor( get() = when (prefs.blockingManager.get()) { Preferences.BLOCKING_MANAGER_SIA -> shouldIAnswerBlockingClient Preferences.BLOCKING_MANAGER_CC -> callControlBlockingClient - else -> androidBlockingClient + else -> qksmsBlockingClient } init { diff --git a/data/src/main/java/com/moez/QKSMS/blocking/QksmsBlockingClient.kt b/data/src/main/java/com/moez/QKSMS/blocking/QksmsBlockingClient.kt new file mode 100644 index 00000000..d3abb272 --- /dev/null +++ b/data/src/main/java/com/moez/QKSMS/blocking/QksmsBlockingClient.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2017 Moez Bhatti + * + * This file is part of QKSMS. + * + * QKSMS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QKSMS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QKSMS. If not, see . + */ +package com.moez.QKSMS.blocking + +import com.moez.QKSMS.repository.BlockingRepository +import io.reactivex.Completable +import io.reactivex.Single +import javax.inject.Inject + +class QksmsBlockingClient @Inject constructor( + private val blockingRepo: BlockingRepository +) : BlockingClient { + + override fun isAvailable(): Boolean = true + + override fun isBlocked(address: String): Single = Single.fromCallable { + blockingRepo.isBlocked(address) + } + + override fun canBlock(): Boolean = true + + override fun block(addresses: List): Completable = Completable.fromCallable { + blockingRepo.blockNumber(*addresses.toTypedArray()) + } + + override fun canUnblock(): Boolean = true + + override fun unblock(addresses: List): Completable = Completable.fromCallable { + blockingRepo.unblockNumbers(*addresses.toTypedArray()) + } + + override fun openSettings() = Unit // TODO: Do this here once we implement AndroidX navigation + +} diff --git a/domain/src/main/java/com/moez/QKSMS/util/Preferences.kt b/domain/src/main/java/com/moez/QKSMS/util/Preferences.kt index 45a99de3..e32f7986 100644 --- a/domain/src/main/java/com/moez/QKSMS/util/Preferences.kt +++ b/domain/src/main/java/com/moez/QKSMS/util/Preferences.kt @@ -61,7 +61,7 @@ class Preferences @Inject constructor(private val rxPrefs: RxSharedPreferences) const val SWIPE_ACTION_READ = 4 const val SWIPE_ACTION_UNREAD = 5 - const val BLOCKING_MANAGER_ANDROID = 0 + const val BLOCKING_MANAGER_QKSMS = 0 const val BLOCKING_MANAGER_CC = 1 const val BLOCKING_MANAGER_SIA = 2 } @@ -82,7 +82,7 @@ class Preferences @Inject constructor(private val rxPrefs: RxSharedPreferences) val textSize = rxPrefs.getInteger("textSize", TEXT_SIZE_NORMAL) @Deprecated("This should only be accessed when migrating to @blockingManager") val sia = rxPrefs.getBoolean("sia", false) - val blockingManager = rxPrefs.getInteger("blockingManager", BLOCKING_MANAGER_ANDROID) + val blockingManager = rxPrefs.getInteger("blockingManager", BLOCKING_MANAGER_QKSMS) val drop = rxPrefs.getBoolean("drop", false) val notifAction1 = rxPrefs.getInteger("notifAction1", NOTIFICATION_ACTION_READ) val notifAction2 = rxPrefs.getInteger("notifAction2", NOTIFICATION_ACTION_REPLY) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingDialog.kt b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingDialog.kt index d8eecf00..2b74467e 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingDialog.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingDialog.kt @@ -69,7 +69,7 @@ class BlockingDialog @Inject constructor( val manager = context.getString(when (prefs.blockingManager.get()) { Preferences.BLOCKING_MANAGER_SIA -> R.string.blocking_manager_sia_title Preferences.BLOCKING_MANAGER_CC -> R.string.blocking_manager_call_control_title - else -> R.string.blocking_manager_android_title + else -> R.string.blocking_manager_qksms_title }) val message = context.resources.getQuantityString(res, addresses.size, manager) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingPresenter.kt index dcbd8ab0..7f158f95 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/BlockingPresenter.kt @@ -44,7 +44,7 @@ class BlockingPresenter @Inject constructor( when (client) { Preferences.BLOCKING_MANAGER_SIA -> R.string.blocking_manager_sia_title Preferences.BLOCKING_MANAGER_CC -> R.string.blocking_manager_call_control_title - else -> R.string.blocking_manager_android_title + else -> R.string.blocking_manager_qksms_title } } .map(context::getString) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerController.kt b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerController.kt index 3b30e6ea..01f09cbc 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerController.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerController.kt @@ -42,7 +42,7 @@ class BlockingManagerController : QkController = activityResumedSubject - override fun androidClicked(): Observable<*> = android.clicks() - override fun launchAndroidClicked(): Observable<*> = android.launch.clicks() + override fun qksmsClicked(): Observable<*> = qksms.clicks() + override fun launchQksmsClicked(): Observable<*> = qksms.launch.clicks() override fun callControlClicked(): Observable<*> = callControl.clicks() override fun launchCallControlClicked(): Observable<*> = callControl.launch.clicks() override fun siaClicked(): Observable<*> = shouldIAnswer.clicks() diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerPresenter.kt index d0aa3960..9eef23e1 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerPresenter.kt @@ -1,8 +1,7 @@ package com.moez.QKSMS.feature.blocking.manager -import android.os.Build -import com.moez.QKSMS.blocking.AndroidBlockingClient import com.moez.QKSMS.blocking.CallControlBlockingClient +import com.moez.QKSMS.blocking.QksmsBlockingClient import com.moez.QKSMS.blocking.ShouldIAnswerBlockingClient import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkPresenter @@ -15,10 +14,10 @@ import javax.inject.Inject class BlockingManagerPresenter @Inject constructor( private val analytics: AnalyticsManager, - private val android: AndroidBlockingClient, private val callControl: CallControlBlockingClient, private val navigator: Navigator, private val prefs: Preferences, + private val qksms: QksmsBlockingClient, private val shouldIAnswer: ShouldIAnswerBlockingClient ) : QkPresenter(BlockingManagerState( blockingManager = prefs.blockingManager.get(), @@ -46,22 +45,18 @@ class BlockingManagerPresenter @Inject constructor( .autoDisposable(view.scope()) .subscribe { available -> newState { copy(siaInstalled = available) } } - view.androidClicked() + view.qksmsClicked() .autoDisposable(view.scope()) .subscribe { - analytics.setUserProperty("Blocking Manager", "Android") - prefs.blockingManager.set(Preferences.BLOCKING_MANAGER_ANDROID) + analytics.setUserProperty("Blocking Manager", "QKSMS") + prefs.blockingManager.set(Preferences.BLOCKING_MANAGER_QKSMS) } - view.launchAndroidClicked() + view.launchQksmsClicked() .autoDisposable(view.scope()) .subscribe { // TODO: This is a hack, get rid of it once we implement AndroidX navigation - if (Build.VERSION.SDK_INT < 24) { - view.openBlockedNumbers() - } else { - android.openSettings() - } + view.openBlockedNumbers() } view.callControlClicked() diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerView.kt b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerView.kt index ae3f3e8a..72e8af0f 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerView.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/blocking/manager/BlockingManagerView.kt @@ -6,8 +6,8 @@ import io.reactivex.Observable interface BlockingManagerView : QkViewContract { fun activityResumed(): Observable<*> - fun androidClicked(): Observable<*> - fun launchAndroidClicked(): Observable<*> + fun qksmsClicked(): Observable<*> + fun launchQksmsClicked(): Observable<*> fun callControlClicked(): Observable<*> fun launchCallControlClicked(): Observable<*> fun siaClicked(): Observable<*> diff --git a/presentation/src/main/res/layout/blocking_controller.xml b/presentation/src/main/res/layout/blocking_controller.xml index 58885686..dd9df8cc 100644 --- a/presentation/src/main/res/layout/blocking_controller.xml +++ b/presentation/src/main/res/layout/blocking_controller.xml @@ -39,7 +39,7 @@ app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintTop_toTopOf="parent" app:title="@string/blocking_manager_title" - tools:summary="@string/blocking_manager_android_title" /> + tools:summary="@string/blocking_manager_qksms_title" /> Your blocked conversations will appear here Blocking Manager - Android - Built-in blocking functionality in Android + QKSMS + Built-in blocking functionality in QKSMS Call Control Automatically filter your calls and messages in one convenient place! Community IQ™ allows you to prevent unwanted messages from community known spammers