Convert selected alarms to MutableStateFlow

pull/1792/head
Alex Baker 4 years ago
parent 656c856737
commit dfe64d5f6f

@ -43,13 +43,14 @@ internal class RandomReminderControlSet(context: Context, parentView: View, remi
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
val newAlarm = val newAlarm =
Alarm(vm.task?.id ?: 0, hours[position] * DateUtilities.ONE_HOUR, TYPE_RANDOM) Alarm(vm.task?.id ?: 0, hours[position] * DateUtilities.ONE_HOUR, TYPE_RANDOM)
vm.selectedAlarms?.apply { vm.selectedAlarms.value =
find { it.type == TYPE_RANDOM }?.let { vm.selectedAlarms.value.toMutableList().apply {
newAlarm.id = it.id find { it.type == TYPE_RANDOM }?.let {
remove(it) newAlarm.id = it.id
remove(it)
}
add(newAlarm)
} }
add(newAlarm)
}
} }
override fun onNothingSelected(parent: AdapterView<*>?) {} override fun onNothingSelected(parent: AdapterView<*>?) {}

@ -70,7 +70,7 @@ class ReminderControlSet : TaskEditControlFragment() {
viewModel.ringFiveTimes!! -> setRingMode(1) viewModel.ringFiveTimes!! -> setRingMode(1)
else -> setRingMode(0) else -> setRingMode(0)
} }
viewModel.selectedAlarms?.forEach(this::addAlarmRow) viewModel.selectedAlarms.value.forEach(this::addAlarmRow)
} }
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
@ -217,9 +217,9 @@ class ReminderControlSet : TaskEditControlFragment() {
if (requestCode == REQUEST_NEW_ALARM) { if (requestCode == REQUEST_NEW_ALARM) {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
val timestamp = data!!.getLongExtra(MyTimePickerDialog.EXTRA_TIMESTAMP, 0L) val timestamp = data!!.getLongExtra(MyTimePickerDialog.EXTRA_TIMESTAMP, 0L)
if (viewModel.selectedAlarms?.any { it.type == TYPE_DATE_TIME && timestamp == it.time } == false) { if (viewModel.selectedAlarms.value.none { it.type == TYPE_DATE_TIME && timestamp == it.time }) {
val alarm = Alarm(viewModel.task?.id ?: 0, timestamp, TYPE_DATE_TIME) val alarm = Alarm(viewModel.task?.id ?: 0, timestamp, TYPE_DATE_TIME)
viewModel.selectedAlarms?.add(alarm) viewModel.selectedAlarms.value = viewModel.selectedAlarms.value.plus(alarm)
addAlarmRow(alarm) addAlarmRow(alarm)
} }
} }
@ -231,15 +231,12 @@ class ReminderControlSet : TaskEditControlFragment() {
private fun addAlarmRow(alarm: Alarm) { private fun addAlarmRow(alarm: Alarm) {
val alarmRow = addAlarmRow(alarm) { val alarmRow = addAlarmRow(alarm) {
if (alarm.type == TYPE_RANDOM) { if (alarm.type == TYPE_RANDOM) {
viewModel.selectedAlarms?.removeIf { it.type == TYPE_RANDOM } viewModel.selectedAlarms.value =
viewModel.selectedAlarms.value.filterNot { it.type == TYPE_RANDOM }
randomControlSet = null randomControlSet = null
} else { } else {
viewModel.selectedAlarms?.removeIf { viewModel.selectedAlarms.value =
it.type == alarm.type && viewModel.selectedAlarms.value.filterNot { it.same(alarm) }
it.time == alarm.time &&
it.repeat == alarm.repeat &&
it.interval == alarm.interval
}
} }
} }
if (alarm.type == TYPE_RANDOM) { if (alarm.type == TYPE_RANDOM) {
@ -267,7 +264,7 @@ class ReminderControlSet : TaskEditControlFragment() {
private fun addAlarmRow(alertItem: View, alarm: Alarm, onRemove: View.OnClickListener?) { private fun addAlarmRow(alertItem: View, alarm: Alarm, onRemove: View.OnClickListener?) {
val display = alertItem.findViewById<TextView>(R.id.alarm_string) val display = alertItem.findViewById<TextView>(R.id.alarm_string)
viewModel.selectedAlarms?.add(alarm) viewModel.selectedAlarms.value = viewModel.selectedAlarms.value.plus(alarm)
display.text = alarmToString.toString(alarm) display.text = alarmToString.toString(alarm)
alertItem alertItem
.findViewById<View>(R.id.clear) .findViewById<View>(R.id.clear)
@ -280,13 +277,13 @@ class ReminderControlSet : TaskEditControlFragment() {
private val options: List<String> private val options: List<String>
get() { get() {
val options: MutableList<String> = ArrayList() val options: MutableList<String> = ArrayList()
if (viewModel.selectedAlarms?.find { it.type == TYPE_REL_START && it.time == 0L } == null) { if (viewModel.selectedAlarms.value.find { it.type == TYPE_REL_START && it.time == 0L } == null) {
options.add(getString(R.string.when_started)) options.add(getString(R.string.when_started))
} }
if (viewModel.selectedAlarms?.find { it.type == TYPE_REL_END && it.time == 0L } == null) { if (viewModel.selectedAlarms.value.find { it.type == TYPE_REL_END && it.time == 0L } == null) {
options.add(getString(R.string.when_due)) options.add(getString(R.string.when_due))
} }
if (viewModel.selectedAlarms?.find { it.type == TYPE_REL_END && it.time == TimeUnit.HOURS.toMillis(24) } == null) { if (viewModel.selectedAlarms.value.find { it.type == TYPE_REL_END && it.time == TimeUnit.HOURS.toMillis(24) } == null) {
options.add(getString(R.string.when_overdue)) options.add(getString(R.string.when_overdue))
} }
if (randomControlSet == null) { if (randomControlSet == null) {

@ -26,10 +26,9 @@ import com.todoroo.astrid.timers.TimerPlugin
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.ImmutableSet
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.toImmutableSet
import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import net.fortuna.ical4j.model.Recur import net.fortuna.ical4j.model.Recur
import org.tasks.Event import org.tasks.Event
@ -117,7 +116,7 @@ class TaskEditViewModel @Inject constructor(
} }
} else { } else {
alarms alarms
}.toImmutableSet() }
if (isNew && permissionChecker.canAccessCalendars()) { if (isNew && permissionChecker.canAccessCalendars()) {
originalCalendar = preferences.defaultCalendar originalCalendar = preferences.defaultCalendar
} }
@ -266,13 +265,13 @@ class TaskEditViewModel @Inject constructor(
var newSubtasks = ArrayList<Task>() var newSubtasks = ArrayList<Task>()
var originalAlarms: ImmutableSet<Alarm>? = null private var originalAlarms = emptyList<Alarm>()
private set(value) { private set(value) {
field = value field = value
selectedAlarms = value?.let { HashSet(it) } selectedAlarms.value = value
} }
var selectedAlarms: HashSet<Alarm>? = null var selectedAlarms = MutableStateFlow(emptyList<Alarm>())
var ringNonstop: Boolean? = null var ringNonstop: Boolean? = null
get() = field ?: task?.isNotifyModeNonstop get() = field ?: task?.isNotifyModeNonstop
@ -319,7 +318,7 @@ class TaskEditViewModel @Inject constructor(
originalTags?.toHashSet() != selectedTags?.toHashSet() || originalTags?.toHashSet() != selectedTags?.toHashSet() ||
newSubtasks.isNotEmpty() || newSubtasks.isNotEmpty() ||
it.ringFlags != getRingFlags() || it.ringFlags != getRingFlags() ||
originalAlarms != selectedAlarms originalAlarms.toHashSet() != selectedAlarms.value.toHashSet()
} ?: false } ?: false
fun cleared() = cleared.value?.value == true fun cleared() = cleared.value?.value == true
@ -412,19 +411,19 @@ class TaskEditViewModel @Inject constructor(
} }
if (!it.hasStartDate()) { if (!it.hasStartDate()) {
selectedAlarms?.removeIf { a -> a.type == TYPE_REL_START } selectedAlarms.value = selectedAlarms.value.filterNot { a -> a.type == TYPE_REL_START }
} }
if (!it.hasDueDate()) { if (!it.hasDueDate()) {
selectedAlarms?.removeIf { a -> a.type == TYPE_REL_END } selectedAlarms.value = selectedAlarms.value.filterNot { a -> a.type == TYPE_REL_END }
} }
taskDao.save(it, null) taskDao.save(it, null)
if ( if (
selectedAlarms != originalAlarms || selectedAlarms.value.toHashSet() != originalAlarms.toHashSet() ||
(isNew && selectedAlarms?.isNotEmpty() == true) (isNew && selectedAlarms.value.isNotEmpty())
) { ) {
alarmService.synchronizeAlarms(it.id, selectedAlarms!!) alarmService.synchronizeAlarms(it.id, selectedAlarms.value.toMutableSet())
it.putTransitory(SyncFlags.FORCE_CALDAV_SYNC, true) it.putTransitory(SyncFlags.FORCE_CALDAV_SYNC, true)
it.modificationDate = now() it.modificationDate = now()
} }

Loading…
Cancel
Save