From 260e36b305a4c3a9bdb31378d700959fedac3484 Mon Sep 17 00:00:00 2001 From: Azuo Date: Sun, 15 Aug 2021 19:13:46 +0800 Subject: [PATCH] Show & hide all-day events at the right time. --- .../helpers/SettingsStringHelper.kt | 2 +- .../services/UpdateCalendarService.kt | 38 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt index 5e38c04..3402c91 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/helpers/SettingsStringHelper.kt @@ -99,7 +99,7 @@ object SettingsStringHelper { TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.HIGH.rawValue && TimeUnit.MILLISECONDS.toMinutes(difference) > 5 -> { return DateUtils.getRelativeTimeSpanString(start, start - 1000 * 60 * (TimeUnit.MILLISECONDS.toMinutes(difference) - 1 - (TimeUnit.MILLISECONDS.toMinutes(difference) - 1) % 5), DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE).toString() } - TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.DEFAULT.rawValue && TimeUnit.MILLISECONDS.toMinutes(difference) > 5 -> { + TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.DEFAULT.rawValue && TimeUnit.MILLISECONDS.toMinutes(difference) > 15 -> { return DateUtils.getRelativeTimeSpanString(start, start - 1000 * 60 * (TimeUnit.MILLISECONDS.toMinutes(difference) - 1 - (TimeUnit.MILLISECONDS.toMinutes(difference) - 1) % 15), DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE).toString() } TimeUnit.MILLISECONDS.toHours(difference) < 1 && Preferences.widgetUpdateFrequency == Constants.WidgetUpdateFrequency.LOW.rawValue -> { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarService.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarService.kt index 2ca944b..c584cb6 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarService.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/services/UpdateCalendarService.kt @@ -88,26 +88,31 @@ class UpdateCalendarService : Service() { } else { try { val provider = CalendarProvider(this@UpdateCalendarService) - val data = provider.getInstances(begin.timeInMillis, limit.timeInMillis) + val data = provider.getInstances( + begin.timeInMillis + begin.timeZone.getOffset(begin.timeInMillis).coerceAtMost(0), + limit.timeInMillis + limit.timeZone.getOffset(limit.timeInMillis).coerceAtLeast(0) + ) if (data != null) { val instances = data.list for (instance in instances) { try { val e = provider.getEvent(instance.eventId) - if (e != null && !e.deleted && instance.begin <= limit.timeInMillis && now.timeInMillis < instance.end && !CalendarHelper.getFilteredCalendarIdList() - .contains(e.calendarId) - ) { - if (e.allDay) { - val start = Calendar.getInstance() - start.timeInMillis = instance.begin - val end = Calendar.getInstance() - end.timeInMillis = instance.end - instance.begin = - start.timeInMillis - start.timeZone.getOffset(start.timeInMillis) - instance.end = - end.timeInMillis - end.timeZone.getOffset(end.timeInMillis) - } - + if (e == null || e.deleted || CalendarHelper.getFilteredCalendarIdList().contains(e.calendarId)) + continue + if (e.allDay) { + val start = Calendar.getInstance() + start.timeInMillis = instance.begin + val end = Calendar.getInstance() + end.timeInMillis = instance.end + instance.begin = + start.timeInMillis - start.timeZone.getOffset(start.timeInMillis) + instance.end = + end.timeInMillis - end.timeZone.getOffset(end.timeInMillis) + } + if (instance.begin <= limit.timeInMillis && now.timeInMillis < instance.end) { + /* Following check may result in "fake" all-day events with + * non-UTC start/end time, and therefore cannot be found by + * Calendar when tapped to open details. // Check all day events val startDate = Calendar.getInstance() startDate.timeInMillis = instance.begin @@ -124,6 +129,7 @@ class UpdateCalendarService : Service() { && endDate.get(Calendar.MINUTE) == 0 && endDate.get(Calendar.HOUR_OF_DAY) == 0 ) + */ eventList.add( Event( @@ -133,7 +139,7 @@ class UpdateCalendarService : Service() { startDate = instance.begin, endDate = instance.end, calendarID = e.calendarId.toInt(), - allDay = isAllDay, + allDay = e.allDay, address = e.eventLocation ?: "", selfAttendeeStatus = e.selfAttendeeStatus.toInt(), availability = e.availability