Convert selected alarms to MutableStateFlow

pull/1792/head
Alex Baker 2 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) {
val newAlarm =
Alarm(vm.task?.id ?: 0, hours[position] * DateUtilities.ONE_HOUR, TYPE_RANDOM)
vm.selectedAlarms?.apply {
find { it.type == TYPE_RANDOM }?.let {
newAlarm.id = it.id
remove(it)
vm.selectedAlarms.value =
vm.selectedAlarms.value.toMutableList().apply {
find { it.type == TYPE_RANDOM }?.let {
newAlarm.id = it.id
remove(it)
}
add(newAlarm)
}
add(newAlarm)
}
}
override fun onNothingSelected(parent: AdapterView<*>?) {}

@ -70,7 +70,7 @@ class ReminderControlSet : TaskEditControlFragment() {
viewModel.ringFiveTimes!! -> setRingMode(1)
else -> setRingMode(0)
}
viewModel.selectedAlarms?.forEach(this::addAlarmRow)
viewModel.selectedAlarms.value.forEach(this::addAlarmRow)
}
override fun onSaveInstanceState(outState: Bundle) {
@ -217,9 +217,9 @@ class ReminderControlSet : TaskEditControlFragment() {
if (requestCode == REQUEST_NEW_ALARM) {
if (resultCode == Activity.RESULT_OK) {
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)
viewModel.selectedAlarms?.add(alarm)
viewModel.selectedAlarms.value = viewModel.selectedAlarms.value.plus(alarm)
addAlarmRow(alarm)
}
}
@ -231,15 +231,12 @@ class ReminderControlSet : TaskEditControlFragment() {
private fun addAlarmRow(alarm: Alarm) {
val alarmRow = addAlarmRow(alarm) {
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
} else {
viewModel.selectedAlarms?.removeIf {
it.type == alarm.type &&
it.time == alarm.time &&
it.repeat == alarm.repeat &&
it.interval == alarm.interval
}
viewModel.selectedAlarms.value =
viewModel.selectedAlarms.value.filterNot { it.same(alarm) }
}
}
if (alarm.type == TYPE_RANDOM) {
@ -267,7 +264,7 @@ class ReminderControlSet : TaskEditControlFragment() {
private fun addAlarmRow(alertItem: View, alarm: Alarm, onRemove: View.OnClickListener?) {
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)
alertItem
.findViewById<View>(R.id.clear)
@ -280,13 +277,13 @@ class ReminderControlSet : TaskEditControlFragment() {
private val options: List<String>
get() {
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))
}
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))
}
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))
}
if (randomControlSet == null) {

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

Loading…
Cancel
Save