Календарь Samsung не удаляет события - PullRequest
1 голос
/ 07 октября 2019

Я создаю календарь и вставляю в него событие. Затем после удаления с помощью Samsung Calendar событие не было удалено, а помечено как удаленное. Когда я пытаюсь вставить событие с тем же идентификатором, eventUri имеет значение NULL, и событие не отображается в календаре. Эта проблема возникает только на устройствах Samsung.

Создание календаря:

private fun createLocalCalendar(calendarName: String): String {
    val uri = createCalendarUri(calendarName)
    val values = createCalendarValues(calendarName)
    return contentResolver.insert(uri, values).lastPathSegment
}

private fun createCalendarValues(calendarName: String) = ContentValues().apply {
    put(CalendarContract.Calendars.ACCOUNT_NAME, calendarName)
    put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
    put(CalendarContract.Calendars.NAME, calendarName)
    put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, calendarName)
    put(CalendarContract.Calendars.OWNER_ACCOUNT, calendarName)
    put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().id)
    put(
        CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL,
        CalendarContract.Calendars.CAL_ACCESS_OWNER
    )
}

private fun createCalendarUri(calendarName: String) =
    CalendarContract.Calendars.CONTENT_URI.buildUpon().apply {
        appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, calendarName)
        appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
        appendQueryParameter(
            CalendarContract.Calendars.ACCOUNT_TYPE,
            CalendarContract.ACCOUNT_TYPE_LOCAL
        )
    }.build()

Создание события:

val eventValues = createCalendarEventValues(calendarId, event)

private fun createCalendarEventValues(calendarId: String) =
    ContentValues().apply {
        put(CalendarContract.Events.CALENDAR_ID, calendarId)
        put(CalendarContract.Events._ID, "123")
        put(CalendarContract.Events.TITLE, "title")
        put(CalendarContract.Events.HAS_ALARM, 1)
        put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().id)
        put(
            CalendarContract.Events.DTSTART,
            Calendar.getInstance().run {
                set(2019, 10, 11, 7, 30)
                timeInMillis
            }
        )
        put(
            CalendarContract.Events.DTEND,
            Calendar.getInstance().run {
                set(2019, 10, 11, 8, 30)
                timeInMillis
            }
        )
    }

Вставка события в календарь:

val eventUri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, eventValues)
...