use proper start and end date at all-day events

This commit is contained in:
tibbi 2017-07-24 23:08:03 +02:00
parent 62a0f5af2a
commit 4b530dd9c0
11 changed files with 23 additions and 16 deletions

View File

@ -509,8 +509,15 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
com.google.api.services.calendar.model.Event().apply {
summary = mEvent.title
description = mEvent.description
start = EventDateTime().setDateTime(com.google.api.client.util.DateTime(mEvent.startTS * 1000L))
end = EventDateTime().setDateTime(com.google.api.client.util.DateTime(mEvent.endTS * 1000L))
if (mEvent.getIsAllDay()) {
start = EventDateTime().setDate(com.google.api.client.util.DateTime(true, mEvent.startTS * 1000L, null))
end = EventDateTime().setDate(com.google.api.client.util.DateTime(true, (mEvent.endTS + DAY) * 1000L, null))
} else {
start = EventDateTime().setDateTime(com.google.api.client.util.DateTime(mEvent.startTS * 1000L))
end = EventDateTime().setDateTime(com.google.api.client.util.DateTime(mEvent.endTS * 1000L))
}
status = CONFIRMED.toLowerCase()
recurrence = listOf(Parser().getShortRepeatInterval(mEvent))
reminders = getEventReminders()

View File

@ -119,7 +119,7 @@ class DayEventsAdapter(val activity: SimpleActivity, val mItems: List<Event>, va
itemView.apply {
event_item_title.text = event.title
event_item_description.text = event.description
event_item_start.text = if (event.isAllDay) allDayString else Formatter.getTimeFromTS(context, event.startTS)
event_item_start.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(context, event.startTS)
event_item_end.beInvisibleIf(event.startTS == event.endTS)
toggleItemSelection(this, markedItems.contains(pos), pos)
@ -130,12 +130,12 @@ class DayEventsAdapter(val activity: SimpleActivity, val mItems: List<Event>, va
event_item_end.apply {
text = Formatter.getTimeFromTS(context, event.endTS)
if (startCode != endCode) {
if (event.isAllDay) {
if (event.getIsAllDay()) {
text = Formatter.getDateFromCode(context, endCode, true)
} else {
append(" (${Formatter.getDateFromCode(context, endCode, true)})")
}
} else if (event.isAllDay) {
} else if (event.getIsAllDay()) {
beInvisible()
}
}

View File

@ -119,7 +119,7 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
listItems.add(ListSection(day))
prevCode = code
}
listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description, it.isAllDay))
listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description, it.getIsAllDay()))
}
this@EventListWidgetAdapter.events = listItems

View File

@ -123,7 +123,7 @@ class FetchGoogleEventsTask(val activity: Activity, val googleSyncListener: Goog
reminders.getOrElse(1, { -1 }), reminders.getOrElse(2, { -1 }), repeatRule.repeatInterval, importId, flags, repeatRule.repeatLimit,
repeatRule.repeatRule, eventTypeId, lastUpdated = lastUpdate, source = SOURCE_GOOGLE_SYNC)
if (event.isAllDay && endTS > startTS) {
if (event.getIsAllDay() && endTS > startTS) {
event.endTS -= DAY
}

View File

@ -176,7 +176,7 @@ fun Context.notifyEvent(event: Event) {
val pendingIntent = getPendingIntent(this, event)
val startTime = Formatter.getTimeFromTS(this, event.startTS)
val endTime = Formatter.getTimeFromTS(this, event.endTS)
val timeRange = if (event.isAllDay) getString(R.string.all_day) else getFormattedEventTime(startTime, endTime)
val timeRange = if (event.getIsAllDay()) getString(R.string.all_day) else getFormattedEventTime(startTime, endTime)
val notification = getNotification(this, pendingIntent, event, "$timeRange ${event.description}")
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(event.id, notification)

View File

@ -80,7 +80,7 @@ class EventListFragment : Fragment(), DBHelper.EventUpdateListener, DeleteEvents
listItems.add(ListSection(day))
prevCode = code
}
listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description, it.isAllDay))
listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description, it.getIsAllDay()))
}
val eventsAdapter = EventListAdapter(activity as SimpleActivity, listItems, this) {

View File

@ -246,7 +246,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
var hadAllDayEvent = false
val sorted = filtered.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { it.description }))
for (event in sorted) {
if (event.isAllDay || Formatter.getDayCodeFromTS(event.startTS) != Formatter.getDayCodeFromTS(event.endTS)) {
if (event.getIsAllDay() || Formatter.getDayCodeFromTS(event.startTS) != Formatter.getDayCodeFromTS(event.endTS)) {
hadAllDayEvent = true
addAllDayEvent(event)
} else {

View File

@ -543,7 +543,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
}
}
if (event.isAllDay) {
if (event.getIsAllDay()) {
if (event.repeatInterval.isXWeeklyRepetition()) {
if (event.startTS.isTsOnProperDay(event)) {
if (isOnProperWeek(event, startTimes)) {
@ -579,7 +579,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
} else {
if (event.endTS >= fromTS) {
events.add(event.copy())
} else if (event.isAllDay) {
} else if (event.getIsAllDay()) {
val dayCode = Formatter.getDayCodeFromTS(fromTS)
val endDayCode = Formatter.getDayCodeFromTS(event.endTS)
if (dayCode == endDayCode) {

View File

@ -29,7 +29,7 @@ class IcsExporter {
event.eventType.let { out.writeLn("$CATEGORIES${activity.dbHelper.getEventType(it)?.title}") }
event.lastUpdated.let { out.writeLn("$LAST_MODIFIED:${Formatter.getExportedTime(it)}") }
if (event.isAllDay) {
if (event.getIsAllDay()) {
out.writeLn("$DTSTART;$VALUE=$DATE:${Formatter.getDayCodeFromTS(event.startTS)}")
out.writeLn("$DTEND;$VALUE=$DATE:${Formatter.getDayCodeFromTS(event.endTS + DAY)}")
} else {

View File

@ -101,7 +101,7 @@ class IcsImporter {
curImportId, curFlags, curRepeatLimit, curRepeatRule, curEventType, lastUpdated = curLastModified,
source = SOURCE_IMPORTED_ICS)
if (event.isAllDay && curEnd > curStart) {
if (event.getIsAllDay() && curEnd > curStart) {
event.endTS -= DAY
}

View File

@ -92,13 +92,13 @@ data class Event(var id: Int = 0, var startTS: Int = 0, var endTS: Int = 0, var
return addedProperOrder
}
val isAllDay = flags and FLAG_ALL_DAY != 0
fun getIsAllDay() = flags and FLAG_ALL_DAY != 0
fun getReminders() = setOf(reminder1Minutes, reminder2Minutes, reminder3Minutes).filter { it != REMINDER_OFF }
// properly return the start time of all-day events as midnight
fun getEventStartTS(): Int {
return if (isAllDay) {
return if (getIsAllDay()) {
Formatter.getDateTimeFromTS(startTS).withTime(0, 0, 0, 0).seconds()
} else {
startTS