Skip to content

Commit 26c8cb6

Browse files
authored
fix: resolve proper CalDAV calendar ID when saving events (#1023)
* fix: resolve proper CalDAV calendar ID when saving events Refs: #1019 * docs: update changelog * fix: properly reset last used calendar when switching to local calendars * refactor: break down code into smaller functions
1 parent 05ebed4 commit 26c8cb6

3 files changed

Lines changed: 99 additions & 60 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
### Changed
99
- Updated holiday data
1010

11+
### Fixed
12+
- Fixed last used default calendar preference for new events ([#1019])
13+
1114
## [1.10.0] - 2026-01-30
1215
### Added
1316
- Added support for custom fonts
@@ -217,6 +220,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
217220
[#889]: https://github.com/FossifyOrg/Calendar/issues/889
218221
[#917]: https://github.com/FossifyOrg/Calendar/issues/917
219222
[#1003]: https://github.com/FossifyOrg/Calendar/issues/1003
223+
[#1019]: https://github.com/FossifyOrg/Calendar/issues/1019
220224

221225
[Unreleased]: https://github.com/FossifyOrg/Calendar/compare/1.10.0...HEAD
222226
[1.10.0]: https://github.com/FossifyOrg/Calendar/compare/1.9.0...1.10.0

app/src/main/kotlin/org/fossify/calendar/activities/EventActivity.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,19 @@ class EventActivity : SimpleActivity() {
416416
}
417417

418418
mCalendarId = if (config.defaultCalendarId == -1L) {
419-
config.lastUsedLocalCalendarId
419+
val lastCaldavId = config.lastUsedCaldavCalendarId
420+
val canUseLastCaldav = config.caldavSync
421+
&& lastCaldavId != STORED_LOCALLY_ONLY
422+
&& config.getSyncedCalendarIdsAsList().contains(lastCaldavId)
423+
if (canUseLastCaldav) {
424+
mStoredCalendars.firstOrNull { it.caldavCalendarId == lastCaldavId }?.id
425+
?: config.lastUsedLocalCalendarId
426+
} else {
427+
config.lastUsedLocalCalendarId
428+
}
420429
} else {
421-
config.defaultCalendarId
430+
mStoredCalendars.firstOrNull { it.id == config.defaultCalendarId }?.id
431+
?: config.lastUsedLocalCalendarId
422432
}
423433

424434
if (event != null) {
@@ -760,7 +770,6 @@ class EventActivity : SimpleActivity() {
760770

761771
if (isSelectedCaldavOk) {
762772
mEventCalendarId = selectedCaldavId
763-
config.lastUsedCaldavCalendarId = selectedCaldavId
764773
} else {
765774
mEventCalendarId = STORED_LOCALLY_ONLY
766775
if (selectedCalendar == null || selectedCalendar.caldavCalendarId != 0) {
@@ -1157,6 +1166,7 @@ class EventActivity : SimpleActivity() {
11571166
if (calendar.caldavCalendarId == 0) {
11581167
mEventCalendarId = STORED_LOCALLY_ONLY
11591168
config.lastUsedLocalCalendarId = mCalendarId
1169+
config.lastUsedCaldavCalendarId = STORED_LOCALLY_ONLY
11601170
} else {
11611171
mEventCalendarId = calendar.caldavCalendarId
11621172
config.lastUsedCaldavCalendarId = calendar.caldavCalendarId
@@ -1624,6 +1634,7 @@ class EventActivity : SimpleActivity() {
16241634
config.lastUsedCaldavCalendarId = selectedCaldavId
16251635
} else {
16261636
config.lastUsedLocalCalendarId = mCalendarId
1637+
config.lastUsedCaldavCalendarId = STORED_LOCALLY_ONLY
16271638
}
16281639

16291640
val newCalendarId = mCalendarId

app/src/main/kotlin/org/fossify/calendar/activities/TaskActivity.kt

Lines changed: 81 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class TaskActivity : SimpleActivity() {
167167
storedCalendars.firstOrNull { it.id == config.lastUsedLocalCalendarId }
168168
runOnUiThread {
169169
if (!isDestroyed && !isFinishing) {
170-
gotTask(savedInstanceState, localCalendar, task)
170+
gotTask(savedInstanceState, storedCalendars, localCalendar, task)
171171
}
172172
}
173173
}
@@ -324,80 +324,104 @@ class TaskActivity : SimpleActivity() {
324324
updateActionBarTitle()
325325
}
326326

327-
private fun gotTask(savedInstanceState: Bundle?, localCalendar: CalendarEntity?, task: Event?) {
328-
if (localCalendar == null) {
327+
private fun gotTask(
328+
savedInstanceState: Bundle?,
329+
storedCalendars: ArrayList<CalendarEntity>,
330+
localCalendar: CalendarEntity?,
331+
task: Event?
332+
) {
333+
if (localCalendar == null || localCalendar.caldavCalendarId != 0) {
329334
config.lastUsedLocalCalendarId = LOCAL_CALENDAR_ID
330335
}
331336

332-
mCalendarId =
333-
if (config.defaultCalendarId == -1L) config.lastUsedLocalCalendarId else config.defaultCalendarId
337+
mCalendarId = resolveTaskCalendarId(storedCalendars)
334338

335339
if (task != null) {
336-
mTask = task
337-
mTaskOccurrenceTS = intent.getLongExtra(EVENT_OCCURRENCE_TS, 0L)
338-
mTaskCompleted = intent.getBooleanExtra(IS_TASK_COMPLETED, false)
339-
if (savedInstanceState == null) {
340-
setupEditTask()
341-
}
342-
343-
if (intent.getBooleanExtra(IS_DUPLICATE_INTENT, false)) {
344-
mTask.id = null
345-
binding.taskToolbar.title = getString(R.string.new_task)
346-
}
340+
setupExistingTask(task, savedInstanceState)
347341
} else {
348-
mTask = Event(null)
349-
config.apply {
350-
mReminder1Minutes =
351-
if (usePreviousEventReminders && lastEventReminderMinutes1 >= -1) lastEventReminderMinutes1 else defaultReminder1
352-
mReminder2Minutes =
353-
if (usePreviousEventReminders && lastEventReminderMinutes2 >= -1) lastEventReminderMinutes2 else defaultReminder2
354-
mReminder3Minutes =
355-
if (usePreviousEventReminders && lastEventReminderMinutes3 >= -1) lastEventReminderMinutes3 else defaultReminder3
356-
}
342+
setupNewTask(savedInstanceState)
343+
}
357344

358-
if (savedInstanceState == null) {
359-
setupNewTask()
360-
}
345+
setupTaskClickListeners()
346+
refreshMenuItems()
347+
setupMarkCompleteButton()
348+
349+
if (savedInstanceState == null) {
350+
updateCalendar()
351+
updateTexts()
361352
}
353+
}
362354

363-
binding.apply {
364-
taskAllDay.setOnCheckedChangeListener { _, isChecked -> toggleAllDay(isChecked) }
365-
taskAllDayHolder.setOnClickListener {
366-
taskAllDay.toggle()
355+
private fun setupExistingTask(task: Event, savedInstanceState: Bundle?) {
356+
mTask = task
357+
mTaskOccurrenceTS = intent.getLongExtra(EVENT_OCCURRENCE_TS, 0L)
358+
mTaskCompleted = intent.getBooleanExtra(IS_TASK_COMPLETED, false)
359+
if (savedInstanceState == null) {
360+
setupEditTask()
361+
}
362+
363+
if (intent.getBooleanExtra(IS_DUPLICATE_INTENT, false)) {
364+
mTask.id = null
365+
binding.taskToolbar.title = getString(R.string.new_task)
366+
}
367+
}
368+
369+
private fun setupNewTask(savedInstanceState: Bundle?) {
370+
mTask = Event(null)
371+
config.apply {
372+
mReminder1Minutes =
373+
if (usePreviousEventReminders && lastEventReminderMinutes1 >= -1) lastEventReminderMinutes1 else defaultReminder1
374+
mReminder2Minutes =
375+
if (usePreviousEventReminders && lastEventReminderMinutes2 >= -1) lastEventReminderMinutes2 else defaultReminder2
376+
mReminder3Minutes =
377+
if (usePreviousEventReminders && lastEventReminderMinutes3 >= -1) lastEventReminderMinutes3 else defaultReminder3
378+
}
379+
380+
if (savedInstanceState == null) setupNewTask()
381+
}
382+
383+
private fun resolveTaskCalendarId(storedCalendars: ArrayList<CalendarEntity>): Long {
384+
return if (config.defaultCalendarId == -1L) {
385+
config.lastUsedLocalCalendarId
386+
} else {
387+
val defaultCalendar = storedCalendars.firstOrNull { it.id == config.defaultCalendarId }
388+
if (defaultCalendar?.caldavCalendarId == 0) {
389+
config.defaultCalendarId
390+
} else {
391+
config.lastUsedLocalCalendarId
367392
}
393+
}
394+
}
368395

369-
taskDate.setOnClickListener { setupDate() }
370-
taskTime.setOnClickListener { setupTime() }
371-
calendarHolder.setOnClickListener { showCalendarDialog() }
372-
taskRepetition.setOnClickListener { showRepeatIntervalDialog() }
373-
taskRepetitionRuleHolder.setOnClickListener { showRepetitionRuleDialog() }
374-
taskRepetitionLimitHolder.setOnClickListener { showRepetitionTypePicker() }
396+
private fun setupTaskClickListeners() = binding.apply {
397+
taskAllDay.setOnCheckedChangeListener { _, isChecked -> toggleAllDay(isChecked) }
398+
taskAllDayHolder.setOnClickListener {
399+
taskAllDay.toggle()
400+
}
375401

376-
taskReminder1.setOnClickListener {
377-
handleNotificationAvailability {
378-
if (config.wasAlarmWarningShown) {
402+
taskDate.setOnClickListener { setupDate() }
403+
taskTime.setOnClickListener { setupTime() }
404+
calendarHolder.setOnClickListener { showCalendarDialog() }
405+
taskRepetition.setOnClickListener { showRepeatIntervalDialog() }
406+
taskRepetitionRuleHolder.setOnClickListener { showRepetitionRuleDialog() }
407+
taskRepetitionLimitHolder.setOnClickListener { showRepetitionTypePicker() }
408+
409+
taskReminder1.setOnClickListener {
410+
handleNotificationAvailability {
411+
if (config.wasAlarmWarningShown) {
412+
showReminder1Dialog()
413+
} else {
414+
ReminderWarningDialog(this@TaskActivity) {
415+
config.wasAlarmWarningShown = true
379416
showReminder1Dialog()
380-
} else {
381-
ReminderWarningDialog(this@TaskActivity) {
382-
config.wasAlarmWarningShown = true
383-
showReminder1Dialog()
384-
}
385417
}
386418
}
387419
}
388-
389-
taskReminder2.setOnClickListener { showReminder2Dialog() }
390-
taskReminder3.setOnClickListener { showReminder3Dialog() }
391-
taskColorHolder.setOnClickListener { showTaskColorDialog() }
392420
}
393421

394-
refreshMenuItems()
395-
setupMarkCompleteButton()
396-
397-
if (savedInstanceState == null) {
398-
updateCalendar()
399-
updateTexts()
400-
}
422+
taskReminder2.setOnClickListener { showReminder2Dialog() }
423+
taskReminder3.setOnClickListener { showReminder3Dialog() }
424+
taskColorHolder.setOnClickListener { showTaskColorDialog() }
401425
}
402426

403427
private fun setupEditTask() {

0 commit comments

Comments
 (0)