forked from upstream-mirrors/quik
Show warning when enabling autoDelete
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user