It's important to understand the role of DAVdroid: DAVdroid synchronizes the events between the CalDAV server and the Android Calendar Provider, which is then responsible for processing them internally. For instance, it calculates the instances of recurring events. Finally, a calendar app (like Google Calendar or Samsung S Planner) is used to display and edit the events.
The most important operations with recurring events and exceptions should work with Android and DAVdroid, but there are many cases that are not handled by
- the Android Calendar Provider (e.g. first instances are missing when using RDATE or when events have time zone definitions which are not known to Android),
- your calendar app (for instance, most calendar apps create a new exception with status "cancelled" when you delete an instance of a recurring event instead of setting an EXDATE),
- the CalDAV server (we have found various conditions where CalDAV servers changed and "repaired" recurring events or rejected some variants of exceptions),
- Web GUIs (many CalDAV services provide Web GUIs, and if you play around, you will experience that many operations don't work correctly even if you don't synchronize with external clients),
- other clients (for instance, Gnome Evolution doesn't handle RDATE, and even with iOS there are problems),
- DAVdroid (because nothing is perfect and recurring events are really complicated).
If you experience problems with recurring events, please make sure that the iCalendar files on your CalDAV server are correct before reporting any bugs. Also, there are many cases that are not supported by reasons which are out of DAVdroid's scope (see above).
If a recurring event or its instances "don't work" anymore, i.e. you can't edit it or its instances anymore, or if there are HTTP errors, try to
- delete the whole event on your Android device and force synchronization.
- Then create it again (if possible, on the server or Web GUI) and edit it as little as possible.
Changing the "master event" of recurring events with exceptions is generally error-prone. When in doubt, create a whole new event and/or change the file name and UID on the server side.