From 927d07e72efce5aabdf4795cb1540e2581311620 Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Fri, 6 Apr 2018 00:57:43 -0400 Subject: [PATCH] Don't allow incoming messages if blocked via SIA --- .../src/main/java/repository/MessageRepositoryImpl.kt | 6 ------ domain/src/main/java/interactor/ReceiveMms.kt | 11 +++++++++++ domain/src/main/java/interactor/ReceiveSms.kt | 6 ++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/data/src/main/java/repository/MessageRepositoryImpl.kt b/data/src/main/java/repository/MessageRepositoryImpl.kt index dc8f3f76..666379c7 100644 --- a/data/src/main/java/repository/MessageRepositoryImpl.kt +++ b/data/src/main/java/repository/MessageRepositoryImpl.kt @@ -60,7 +60,6 @@ class MessageRepositoryImpl @Inject constructor( private val messageIds: KeyManager, private val cursorToConversation: CursorToConversation, private val cursorToRecipient: CursorToRecipient, - private val externalBlockingManager: ExternalBlockingManager, private val prefs: Preferences) : MessageRepository { override fun getConversations(archived: Boolean): Flowable> { @@ -625,11 +624,6 @@ class MessageRepositoryImpl @Inject constructor( } } - // If any of the addresses here should be blocked, then block the conversation - conversation.blocked = recipients.map { it.address }.any { address -> - externalBlockingManager.shouldBlock(address).blockingGet() - } - conversation.recipients.clear() conversation.recipients.addAll(recipients) conversation.insertOrUpdate() diff --git a/domain/src/main/java/interactor/ReceiveMms.kt b/domain/src/main/java/interactor/ReceiveMms.kt index 9509b9e2..76256922 100644 --- a/domain/src/main/java/interactor/ReceiveMms.kt +++ b/domain/src/main/java/interactor/ReceiveMms.kt @@ -20,6 +20,7 @@ package interactor import android.net.Uri import io.reactivex.Flowable +import manager.ExternalBlockingManager import manager.NotificationManager import repository.MessageRepository import repository.SyncRepository @@ -28,6 +29,7 @@ import java.util.concurrent.TimeUnit import javax.inject.Inject class ReceiveMms @Inject constructor( + private val externalBlockingManager: ExternalBlockingManager, private val syncManager: SyncRepository, private val messageRepo: MessageRepository, private val notificationManager: NotificationManager, @@ -37,6 +39,15 @@ class ReceiveMms @Inject constructor( override fun buildObservable(params: Uri): Flowable<*> { return Flowable.just(params) .flatMap { uri -> syncManager.syncMessage(uri) } // Sync the message + .filter { message -> + // Because we use the smsmms library for receiving and storing MMS, we'll need + // to check if it should be blocked after we've pulled it into realm. If it + // turns out that it should be blocked, then delete it + // TODO Don't store blocked messages in the first place + !externalBlockingManager.shouldBlock(message.address).blockingGet().also { blocked -> + if (blocked) messageRepo.deleteMessage(message.id) + } + } .doOnNext { message -> messageRepo.updateConversation(message.threadId) } // Update the conversation .mapNotNull { message -> messageRepo.getOrCreateConversation(message.threadId) } // Map message to conversation .filter { conversation -> !conversation.blocked } // Don't notify for blocked conversations diff --git a/domain/src/main/java/interactor/ReceiveSms.kt b/domain/src/main/java/interactor/ReceiveSms.kt index 3dbba824..62edd92c 100644 --- a/domain/src/main/java/interactor/ReceiveSms.kt +++ b/domain/src/main/java/interactor/ReceiveSms.kt @@ -20,6 +20,7 @@ package interactor import android.telephony.SmsMessage import io.reactivex.Flowable +import manager.ExternalBlockingManager import manager.NotificationManager import repository.MessageRepository import util.extensions.mapNotNull @@ -27,6 +28,7 @@ import java.util.concurrent.TimeUnit import javax.inject.Inject class ReceiveSms @Inject constructor( + private val externalBlockingManager: ExternalBlockingManager, private val messageRepo: MessageRepository, private val notificationManager: NotificationManager, private val updateBadge: UpdateBadge @@ -35,6 +37,10 @@ class ReceiveSms @Inject constructor( override fun buildObservable(params: Array): Flowable<*> { return Flowable.just(params) .filter { it.isNotEmpty() } + .filter { messages -> // Don't continue if the sender is blocked + val address = messages[0].displayOriginatingAddress + !externalBlockingManager.shouldBlock(address).blockingGet() + } .map { messages -> val address = messages[0].displayOriginatingAddress val time = messages[0].timestampMillis