properly update event type color

- before updating the color, check if the color has a key
- if it does, we update the CALENDAR_COLOR_KEY column (which will also update the CALENDAR_COLOR column internally)
- if it does not have a key (ie, if it is not a defined color), we update the CALENDAR_COLOR column and set the CALENDAR_COLOR_KEY to empty string
- one note here is that transparent color (0) is not usually a defined color and setting CALENDAR_COLOR to 0 can cause some Calendar apps (like Google Calendar) to convert this to black color (#FF00000).
This commit is contained in:
darthpaul 2021-10-06 12:51:38 +01:00
parent 52c22e2a98
commit 528e0878bf
1 changed files with 20 additions and 5 deletions

View File

@ -85,22 +85,37 @@ class CalDAVHelper(val context: Context) {
return calendars
}
// check if the calendars color or title has changed
fun updateCalDAVCalendar(eventType: EventType) {
val uri = Calendars.CONTENT_URI
val newUri = ContentUris.withAppendedId(uri, eventType.caldavCalendarId.toLong())
val uri = ContentUris.withAppendedId(Calendars.CONTENT_URI, eventType.caldavCalendarId.toLong())
val values = ContentValues().apply {
put(Calendars.CALENDAR_COLOR, eventType.color)
val colorKey = getCalDAVColorKey(eventType)
if (colorKey != null) {
put(Calendars.CALENDAR_COLOR_KEY, getCalDAVColorKey(eventType))
} else {
put(Calendars.CALENDAR_COLOR, eventType.color)
put(Calendars.CALENDAR_COLOR_KEY, "")
}
put(Calendars.CALENDAR_DISPLAY_NAME, eventType.title)
}
try {
context.contentResolver.update(newUri, values, null, null)
context.contentResolver.update(uri, values, null, null)
context.eventTypesDB.insertOrUpdate(eventType)
} catch (e: IllegalArgumentException) {
e.printStackTrace()
}
}
private fun getCalDAVColorKey(eventType: EventType): String? {
val colors = getAvailableCalDAVCalendarColors(eventType)
val colorKey = colors.indexOf(eventType.color)
return if (colorKey > 0) {
colorKey.toString()
} else {
null
}
}
@SuppressLint("MissingPermission")
fun getAvailableCalDAVCalendarColors(eventType: EventType): ArrayList<Int> {
val colors = SparseIntArray()