Show warning when enabling autoDelete

This commit is contained in:
Moez Bhatti
2020-12-22 00:00:42 -05:00
parent 0cfca58350
commit b087de8f73
7 changed files with 54 additions and 4 deletions
@@ -66,8 +66,11 @@ import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.util.*
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.collections.ArrayList
import kotlin.math.sqrt
@Singleton
@@ -724,4 +727,14 @@ class MessageRepositoryImpl @Inject constructor(
}
}
}
override fun getOldMessageCounts(maxAgeDays: Int): Map<Long, Int> {
return Realm.getDefaultInstance().use { realm ->
realm.where(Message::class.java)
.lessThan("date", now() - TimeUnit.DAYS.toMillis(maxAgeDays.toLong()))
.findAll()
.groupingBy { message -> message.threadId }
.eachCount()
}
}
}
@@ -91,4 +91,4 @@ interface ConversationRepository {
fun deleteConversations(vararg threadIds: Long)
}
}
@@ -102,4 +102,9 @@ interface MessageRepository {
fun deleteMessages(vararg messageIds: Long)
/**
* Returns the number of messages older than [maxAgeDays] per conversation
*/
fun getOldMessageCounts(maxAgeDays: Int): Map<Long, Int>
}
@@ -24,6 +24,7 @@ import android.content.Context
import android.os.Build
import android.text.format.DateFormat
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.core.view.isVisible
import com.bluelinelabs.conductor.RouterTransaction
import com.google.android.material.snackbar.Snackbar
@@ -39,9 +40,9 @@ import com.moez.QKSMS.common.util.Colors
import com.moez.QKSMS.common.util.extensions.animateLayoutChanges
import com.moez.QKSMS.common.util.extensions.setBackgroundTint
import com.moez.QKSMS.common.util.extensions.setVisible
import com.moez.QKSMS.common.widget.TextInputDialog
import com.moez.QKSMS.common.widget.PreferenceView
import com.moez.QKSMS.common.widget.QkSwitch
import com.moez.QKSMS.common.widget.TextInputDialog
import com.moez.QKSMS.databinding.SettingsControllerBinding
import com.moez.QKSMS.feature.settings.about.AboutController
import com.moez.QKSMS.feature.settings.autodelete.AutoDeleteDialog
@@ -55,7 +56,11 @@ import com.uber.autodispose.autoDisposable
import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject
import io.reactivex.subjects.Subject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
import javax.inject.Inject
import kotlin.coroutines.resume
class SettingsController : QkController<SettingsView, SettingsState, SettingsPresenter, SettingsControllerBinding>(
SettingsControllerBinding::inflate
@@ -192,7 +197,8 @@ class SettingsController : QkController<SettingsView, SettingsState, SettingsPre
is SyncRepository.SyncProgress.Running -> {
binding.syncingProgress.isVisible = true
binding.syncingProgress.max = state.syncProgress.max
progressAnimator.apply { setIntValues(binding.syncingProgress.progress, state.syncProgress.progress) }.start()
progressAnimator.apply { setIntValues(binding.syncingProgress.progress, state.syncProgress.progress) }
.start()
binding.syncingProgress.isIndeterminate = state.syncProgress.indeterminate
}
}
@@ -231,6 +237,17 @@ class SettingsController : QkController<SettingsView, SettingsState, SettingsPre
override fun showAutoDeleteDialog(days: Int) = autoDeleteDialog.setExpiry(days).show()
override suspend fun showAutoDeleteWarningDialog(messages: Int): Boolean = withContext(Dispatchers.Main) {
suspendCancellableCoroutine<Boolean> { cont ->
AlertDialog.Builder(activity!!)
.setMessage(context.resources.getString(R.string.settings_auto_delete_warning, messages))
.setOnCancelListener { cont.resume(false) }
.setNegativeButton(R.string.button_cancel) { _, _ -> cont.resume(false) }
.setPositiveButton(R.string.button_yes) { _, _ -> cont.resume(true) }
.show()
}
}
override fun showMmsSizePicker() = mmsSizeDialog.show(activity!!)
override fun showSwipeActions() {
@@ -28,6 +28,7 @@ import com.moez.QKSMS.common.util.DateFormatter
import com.moez.QKSMS.common.util.extensions.makeToast
import com.moez.QKSMS.interactor.SyncMessages
import com.moez.QKSMS.manager.AnalyticsManager
import com.moez.QKSMS.repository.MessageRepository
import com.moez.QKSMS.repository.SyncRepository
import com.moez.QKSMS.util.NightModeManager
import com.moez.QKSMS.util.Preferences
@@ -35,6 +36,8 @@ import com.uber.autodispose.android.lifecycle.scope
import com.uber.autodispose.autoDisposable
import io.reactivex.rxkotlin.plusAssign
import io.reactivex.rxkotlin.withLatestFrom
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.runBlocking
import timber.log.Timber
import java.util.*
import java.util.concurrent.TimeUnit
@@ -47,6 +50,7 @@ class SettingsPresenter @Inject constructor(
private val context: Context,
private val billingManager: BillingManager,
private val dateFormatter: DateFormatter,
private val messageRepo: MessageRepository,
private val navigator: Navigator,
private val nightModeManager: NightModeManager,
private val prefs: Preferences,
@@ -253,6 +257,15 @@ class SettingsPresenter @Inject constructor(
.subscribe()
view.autoDeleteChanged()
.observeOn(Schedulers.io())
.filter { maxAge ->
if (maxAge == 0) {
return@filter true
}
val counts = messageRepo.getOldMessageCounts(maxAge)
runBlocking { view.showAutoDeleteWarningDialog(counts.values.sum()) }
}
.doOnNext(prefs.autoDelete::set)
.autoDisposable(view.scope())
.subscribe()
@@ -43,6 +43,7 @@ interface SettingsView : QkViewContract<SettingsState> {
fun showDelayDurationDialog()
fun showSignatureDialog(signature: String)
fun showAutoDeleteDialog(days: Int)
suspend fun showAutoDeleteWarningDialog(messages: Int): Boolean
fun showMmsSizePicker()
fun showSwipeActions()
fun showThemePicker()
@@ -262,6 +262,7 @@
<string name="settings_auto_delete_dialog_message">Messages will be deleted after the specified number of days</string>
<string name="settings_auto_delete_dialog_hint">Number of days</string>
<string name="settings_auto_delete_never">Never</string>
<string name="settings_auto_delete_warning">Are you sure you would like to enable this setting? %1$d messages will be deleted</string>
<plurals name="settings_auto_delete_summary">
<item quantity="zero">Never</item>
<item quantity="one">After 1 day</item>