Fix random reminders

pull/2884/head
Alex Baker 2 years ago
parent 8c0f7b952d
commit 10af5280a3

@ -82,8 +82,7 @@ class AlarmCalculator(
} }
`when` += (reminderPeriod * (0.85f + 0.3f * random.nextFloat())).toLong() `when` += (reminderPeriod * (0.85f + 0.3f * random.nextFloat())).toLong()
if (`when` < DateUtilities.now()) { if (`when` < DateUtilities.now()) {
`when` = `when` = Math.max(DateUtilities.now(), task.hideUntil)
DateUtilities.now() + ((0.5f + 6 * random.nextFloat()) * DateUtilities.ONE_HOUR).toLong()
} }
return `when` return `when`
} }

@ -39,22 +39,20 @@ class NotificationWork @AssistedInject constructor(
} }
repeat(3) { repeat(3) {
val (overdue, future) = alarmService.getAlarms() val (overdue, future) = alarmService.getAlarms()
if (overdue.isNotEmpty()) { nextAlarm = future.minOfOrNull { it.time } ?: 0
overdue if (overdue.isEmpty()) {
.sortedBy { it.time }
.also { alarms ->
alarms
.filter { it.type == TYPE_SNOOZE }
.map { it.id }
.let { alarmDao.deleteByIds(it) }
}
.map { it.toNotification() }
.let { notifier.triggerNotifications(it) }
} else {
nextAlarm = future.minOfOrNull { it.time } ?: 0
Timber.d("nextAlarm=${nextAlarm.toDateTime()}")
return Result.success() return Result.success()
} }
overdue
.sortedBy { it.time }
.also { alarms ->
alarms
.filter { it.type == TYPE_SNOOZE }
.map { it.id }
.let { alarmDao.deleteByIds(it) }
}
.map { it.toNotification() }
.let { notifier.triggerNotifications(it) }
} }
firebase.reportException(IllegalStateException("Should have returned already")) firebase.reportException(IllegalStateException("Should have returned already"))
return Result.failure() return Result.failure()
@ -62,6 +60,7 @@ class NotificationWork @AssistedInject constructor(
override suspend fun scheduleNext() { override suspend fun scheduleNext() {
if (nextAlarm > 0) { if (nextAlarm > 0) {
Timber.d("nextAlarm=${nextAlarm.toDateTime()}")
workManager.scheduleNotification(preferences.adjustForQuietHours(nextAlarm)) workManager.scheduleNotification(preferences.adjustForQuietHours(nextAlarm))
} }
} }

@ -227,7 +227,7 @@ class WorkManagerImpl(
if (expedited) { if (expedited) {
builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
} }
Timber.d("$key: ${DateTimeUtils.printTimestamp(delay)} (${DateTimeUtils.printDuration(delay)})") Timber.d("$key: expedited=$expedited ${DateTimeUtils.printTimestamp(delay)} (${DateTimeUtils.printDuration(delay)})")
enqueue(workManager.beginUniqueWork(key, REPLACE, builder.build())) enqueue(workManager.beginUniqueWork(key, REPLACE, builder.build()))
} }

@ -11,7 +11,6 @@ import com.todoroo.astrid.core.BuiltInFilterExposer
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.Alarm import org.tasks.data.Alarm
import org.tasks.data.LocationDao import org.tasks.data.LocationDao
import org.tasks.data.TaskDao import org.tasks.data.TaskDao
@ -296,16 +295,6 @@ class NotificationManager @Inject constructor(
return null return null
} }
// new task edit in progress
if (isNullOrEmpty(task.title)) {
return null
}
// it's hidden - don't sound, don't delete
if (task.isHidden && type == Alarm.TYPE_RANDOM) {
return null
}
// read properties // read properties
val markdown = markdownProvider.markdown(force = true) val markdown = markdownProvider.markdown(force = true)
val taskTitle = markdown.toMarkdown(task.title) val taskTitle = markdown.toMarkdown(task.title)

Loading…
Cancel
Save