mirror of https://github.com/tasks/tasks
Convert AlarmService to Kotlin
parent
4a96040f1f
commit
301ec9223a
@ -1,127 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
|
||||
package com.todoroo.astrid.alarms;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import org.tasks.data.Alarm;
|
||||
import org.tasks.data.AlarmDao;
|
||||
import org.tasks.jobs.AlarmEntry;
|
||||
import org.tasks.jobs.NotificationQueue;
|
||||
|
||||
/**
|
||||
* Provides operations for working with alerts
|
||||
*
|
||||
* @author Tim Su <tim@todoroo.com>
|
||||
*/
|
||||
@Singleton
|
||||
public class AlarmService {
|
||||
|
||||
private static final long NO_ALARM = Long.MAX_VALUE;
|
||||
|
||||
private final NotificationQueue jobs;
|
||||
private final AlarmDao alarmDao;
|
||||
|
||||
@Inject
|
||||
public AlarmService(AlarmDao alarmDao, NotificationQueue notificationQueue) {
|
||||
this.alarmDao = alarmDao;
|
||||
jobs = notificationQueue;
|
||||
}
|
||||
|
||||
public void rescheduleAlarms(long taskId, long oldDueDate, long newDueDate) {
|
||||
if (newDueDate <= 0 || newDueDate <= oldDueDate) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Set<Long> alarms = new LinkedHashSet<>();
|
||||
for (Alarm alarm : getAlarms(taskId)) {
|
||||
alarms.add(alarm.getTime() + (newDueDate - oldDueDate));
|
||||
}
|
||||
if (!alarms.isEmpty()) {
|
||||
synchronizeAlarms(taskId, alarms);
|
||||
}
|
||||
}
|
||||
|
||||
public List<Alarm> getAlarms(long taskId) {
|
||||
return alarmDao.getAlarms(taskId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the given array of alarms into the database
|
||||
*
|
||||
* @return true if data was changed
|
||||
*/
|
||||
public boolean synchronizeAlarms(final long taskId, Set<Long> timestamps) {
|
||||
boolean changed = false;
|
||||
|
||||
for (Alarm item : alarmDao.getAlarms(taskId)) {
|
||||
if (!timestamps.remove(item.getTime())) {
|
||||
jobs.cancelAlarm(item.getId());
|
||||
alarmDao.delete(item);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (Long timestamp : timestamps) {
|
||||
alarmDao.insert(new Alarm(taskId, timestamp));
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
scheduleAlarms(taskId);
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
// --- alarm scheduling
|
||||
|
||||
private List<Alarm> getActiveAlarms() {
|
||||
return alarmDao.getActiveAlarms();
|
||||
}
|
||||
|
||||
private List<Alarm> getActiveAlarmsForTask(long taskId) {
|
||||
return alarmDao.getActiveAlarms(taskId);
|
||||
}
|
||||
|
||||
/** Schedules all alarms */
|
||||
public void scheduleAllAlarms() {
|
||||
for (Alarm alarm : getActiveAlarms()) {
|
||||
scheduleAlarm(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelAlarms(long taskId) {
|
||||
for (Alarm alarm : getActiveAlarmsForTask(taskId)) {
|
||||
jobs.cancelAlarm(alarm.getId());
|
||||
}
|
||||
}
|
||||
|
||||
/** Schedules alarms for a single task */
|
||||
private void scheduleAlarms(long taskId) {
|
||||
for (Alarm alarm : getActiveAlarmsForTask(taskId)) {
|
||||
scheduleAlarm(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
/** Schedules alarms for a single task */
|
||||
private void scheduleAlarm(Alarm alarm) {
|
||||
if (alarm == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
AlarmEntry alarmEntry = new AlarmEntry(alarm);
|
||||
long time = alarmEntry.getTime();
|
||||
if (time == 0 || time == NO_ALARM) {
|
||||
jobs.cancelAlarm(alarmEntry.getId());
|
||||
} else {
|
||||
jobs.add(alarmEntry);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.alarms
|
||||
|
||||
import org.tasks.data.Alarm
|
||||
import org.tasks.data.AlarmDao
|
||||
import org.tasks.jobs.AlarmEntry
|
||||
import org.tasks.jobs.NotificationQueue
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Provides operations for working with alerts
|
||||
*
|
||||
* @author Tim Su <tim></tim>@todoroo.com>
|
||||
*/
|
||||
@Singleton
|
||||
class AlarmService @Inject constructor(
|
||||
private val alarmDao: AlarmDao,
|
||||
private val jobs: NotificationQueue) {
|
||||
|
||||
fun rescheduleAlarms(taskId: Long, oldDueDate: Long, newDueDate: Long) {
|
||||
if (newDueDate <= 0 || newDueDate <= oldDueDate) {
|
||||
return
|
||||
}
|
||||
val alarms: MutableSet<Long> = LinkedHashSet()
|
||||
for (alarm in getAlarms(taskId)) {
|
||||
alarms.add(alarm.time + (newDueDate - oldDueDate))
|
||||
}
|
||||
if (alarms.isNotEmpty()) {
|
||||
synchronizeAlarms(taskId, alarms)
|
||||
}
|
||||
}
|
||||
|
||||
fun getAlarms(taskId: Long): List<Alarm> {
|
||||
return alarmDao.getAlarms(taskId)
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the given array of alarms into the database
|
||||
*
|
||||
* @return true if data was changed
|
||||
*/
|
||||
fun synchronizeAlarms(taskId: Long, timestamps: MutableSet<Long>): Boolean {
|
||||
var changed = false
|
||||
for (item in alarmDao.getAlarms(taskId)) {
|
||||
if (!timestamps.remove(item.time)) {
|
||||
jobs.cancelAlarm(item.id)
|
||||
alarmDao.delete(item)
|
||||
changed = true
|
||||
}
|
||||
}
|
||||
for (timestamp in timestamps) {
|
||||
alarmDao.insert(Alarm(taskId, timestamp))
|
||||
changed = true
|
||||
}
|
||||
if (changed) {
|
||||
scheduleAlarms(taskId)
|
||||
}
|
||||
return changed
|
||||
}
|
||||
|
||||
private fun getActiveAlarmsForTask(taskId: Long): List<Alarm> {
|
||||
return alarmDao.getActiveAlarms(taskId)
|
||||
}
|
||||
|
||||
/** Schedules all alarms */
|
||||
fun scheduleAllAlarms() {
|
||||
for (alarm in alarmDao.getActiveAlarms()) {
|
||||
scheduleAlarm(alarm)
|
||||
}
|
||||
}
|
||||
|
||||
fun cancelAlarms(taskId: Long) {
|
||||
for (alarm in getActiveAlarmsForTask(taskId)) {
|
||||
jobs.cancelAlarm(alarm.id)
|
||||
}
|
||||
}
|
||||
|
||||
/** Schedules alarms for a single task */
|
||||
private fun scheduleAlarms(taskId: Long) {
|
||||
for (alarm in getActiveAlarmsForTask(taskId)) {
|
||||
scheduleAlarm(alarm)
|
||||
}
|
||||
}
|
||||
|
||||
/** Schedules alarms for a single task */
|
||||
private fun scheduleAlarm(alarm: Alarm?) {
|
||||
if (alarm == null) {
|
||||
return
|
||||
}
|
||||
val alarmEntry = AlarmEntry(alarm)
|
||||
val time = alarmEntry.time
|
||||
if (time == 0L || time == NO_ALARM) {
|
||||
jobs.cancelAlarm(alarmEntry.id)
|
||||
} else {
|
||||
jobs.add(alarmEntry)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val NO_ALARM = Long.MAX_VALUE
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue