do not allow deleting event types belonging to caldav calendars

This commit is contained in:
tibbi
2017-08-24 13:50:52 +02:00
parent 91aeeee2bc
commit aa9adaa236
24 changed files with 52 additions and 32 deletions

View File

@ -492,7 +492,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
val oldSource = mEvent.source val oldSource = mEvent.source
val newImportId = if (mEvent.id != 0) mEvent.importId else UUID.randomUUID().toString().replace("-", "") + System.currentTimeMillis().toString() val newImportId = if (mEvent.id != 0) mEvent.importId else UUID.randomUUID().toString().replace("-", "") + System.currentTimeMillis().toString()
val newEventType = if (!config.caldavSync || config.lastUsedCaldavCalendar == 0) mEventTypeId else dbHelper.getEventTypeIdWithCalDAVCalendarId(config.lastUsedCaldavCalendar) val newEventType = if (!config.caldavSync || config.lastUsedCaldavCalendar == 0) mEventTypeId else dbHelper.getEventTypeWithCalDAVCalendarId(config.lastUsedCaldavCalendar)!!.id
val newSource = if (!config.caldavSync || config.lastUsedCaldavCalendar == 0) SOURCE_SIMPLE_CALENDAR else "$CALDAV-${config.lastUsedCaldavCalendar}" val newSource = if (!config.caldavSync || config.lastUsedCaldavCalendar == 0) SOURCE_SIMPLE_CALENDAR else "$CALDAV-${config.lastUsedCaldavCalendar}"
val reminders = sortedSetOf(mReminder1Minutes, mReminder2Minutes, mReminder3Minutes).filter { it != REMINDER_OFF } val reminders = sortedSetOf(mReminder1Minutes, mReminder2Minutes, mReminder3Minutes).filter { it != REMINDER_OFF }

View File

@ -53,12 +53,16 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener {
return true return true
} }
override fun deleteEventTypes(ids: ArrayList<Int>, deleteEvents: Boolean) { override fun deleteEventTypes(eventTypes: ArrayList<EventType>, deleteEvents: Boolean) {
if (ids.contains(DBHelper.REGULAR_EVENT_TYPE_ID)) { if (eventTypes.map { it.id }.contains(DBHelper.REGULAR_EVENT_TYPE_ID)) {
toast(R.string.cannot_delete_default_type) toast(R.string.cannot_delete_default_type)
} }
dbHelper.deleteEventTypes(ids, deleteEvents) { if (eventTypes.any { it.caldavCalendarId != 0 }) {
toast(R.string.unsync_caldav_calendar)
}
dbHelper.deleteEventTypes(eventTypes, deleteEvents) {
if (it > 0) { if (it > 0) {
getEventTypes() getEventTypes()
} else { } else {

View File

@ -156,8 +156,9 @@ class SettingsActivity : SimpleActivity() {
oldCalendarIds.filter { !newCalendarIds.contains(it) }.forEach { oldCalendarIds.filter { !newCalendarIds.contains(it) }.forEach {
CalDAVHandler(applicationContext).deleteCalDAVCalendarEvents(it.toLong()) CalDAVHandler(applicationContext).deleteCalDAVCalendarEvents(it.toLong())
val eventId = dbHelper.getEventTypeIdWithCalDAVCalendarId(it.toInt()) dbHelper.getEventTypeWithCalDAVCalendarId(it.toInt())?.apply {
dbHelper.deleteEventTypes(arrayListOf(eventId), true) {} dbHelper.deleteEventTypes(arrayListOf(this), true) {}
}
} }
}).start() }).start()
} }

View File

@ -71,10 +71,10 @@ class EventTypeAdapter(val activity: SimpleActivity, val mItems: List<EventType>
private fun askConfirmDelete() { private fun askConfirmDelete() {
val selections = multiSelector.selectedPositions val selections = multiSelector.selectedPositions
val ids = ArrayList<Int>(selections.size) val eventTypes = ArrayList<EventType>(selections.size)
selections.forEach { ids.add((mItems[it]).id) } selections.forEach { eventTypes.add(mItems[it]) }
if (activity.dbHelper.doEventTypesContainEvent(ids)) { if (activity.dbHelper.doEventTypesContainEvent(eventTypes)) {
val MOVE_EVENTS = 0 val MOVE_EVENTS = 0
val DELETE_EVENTS = 1 val DELETE_EVENTS = 1
val res = activity.resources val res = activity.resources
@ -84,15 +84,15 @@ class EventTypeAdapter(val activity: SimpleActivity, val mItems: List<EventType>
} }
RadioGroupDialog(activity, items, -1) { RadioGroupDialog(activity, items, -1) {
actMode?.finish() actMode?.finish()
deleteEventTypes(it == DELETE_EVENTS, ids) deleteEventTypes(it == DELETE_EVENTS, eventTypes)
} }
} else { } else {
deleteEventTypes(true, ids) deleteEventTypes(true, eventTypes)
} }
} }
private fun deleteEventTypes(deleteEvents: Boolean, ids: ArrayList<Int>) { private fun deleteEventTypes(deleteEvents: Boolean, eventTypes: ArrayList<EventType>) {
listener?.deleteEventTypes(ids, deleteEvents) listener?.deleteEventTypes(eventTypes, deleteEvents)
actMode?.finish() actMode?.finish()
} }

View File

@ -24,16 +24,14 @@ class CalDAVHandler(val context: Context) {
fun refreshCalendars(callback: () -> Unit) { fun refreshCalendars(callback: () -> Unit) {
val dbHelper = context.dbHelper val dbHelper = context.dbHelper
getCalDAVCalendars(context.config.caldavSyncedCalendarIDs).forEach { getCalDAVCalendars(context.config.caldavSyncedCalendarIDs).forEach {
val localEventTypeId = dbHelper.getEventTypeIdWithCalDAVCalendarId(it.id) val localEventType = dbHelper.getEventTypeWithCalDAVCalendarId(it.id)
if (localEventTypeId != -1) { localEventType?.apply {
dbHelper.getEventType(localEventTypeId)?.apply {
title = it.displayName title = it.displayName
caldavDisplayName = it.displayName caldavDisplayName = it.displayName
caldavEmail = it.accountName caldavEmail = it.accountName
color = it.color color = it.color
dbHelper.updateLocalEventType(this) dbHelper.updateLocalEventType(this)
} }
}
val eventTypeId = dbHelper.getEventTypeIdWithTitle(it.getFullTitle()) val eventTypeId = dbHelper.getEventTypeIdWithTitle(it.getFullTitle())
CalDAVHandler(context).fetchCalDAVCalendarEvents(it.id, eventTypeId) CalDAVHandler(context).fetchCalDAVCalendarEvents(it.id, eventTypeId)

View File

@ -345,7 +345,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
return -1 return -1
} }
fun getEventTypeIdWithCalDAVCalendarId(calendarId: Int): Int { fun getEventTypeWithCalDAVCalendarId(calendarId: Int): EventType? {
val cols = arrayOf(COL_TYPE_ID) val cols = arrayOf(COL_TYPE_ID)
val selection = "$COL_TYPE_CALDAV_CALENDAR_ID = ?" val selection = "$COL_TYPE_CALDAV_CALENDAR_ID = ?"
val selectionArgs = arrayOf(calendarId.toString()) val selectionArgs = arrayOf(calendarId.toString())
@ -353,12 +353,12 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
try { try {
cursor = mDb.query(TYPES_TABLE_NAME, cols, selection, selectionArgs, null, null, null) cursor = mDb.query(TYPES_TABLE_NAME, cols, selection, selectionArgs, null, null, null)
if (cursor?.moveToFirst() == true) { if (cursor?.moveToFirst() == true) {
return cursor.getIntValue(COL_TYPE_ID) return getEventType(cursor.getIntValue(COL_TYPE_ID))
} }
} finally { } finally {
cursor?.close() cursor?.close()
} }
return -1 return null
} }
fun getEventType(id: Int): EventType? { fun getEventType(id: Int): EventType? {
@ -446,10 +446,9 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
} }
} }
fun deleteEventTypes(ids: ArrayList<Int>, deleteEvents: Boolean, callback: (deletedCnt: Int) -> Unit) { fun deleteEventTypes(eventTypes: ArrayList<EventType>, deleteEvents: Boolean, callback: (deletedCnt: Int) -> Unit) {
var deleteIds = ids var deleteIds = eventTypes.filter { it.caldavCalendarId == 0 }.map { it.id }
if (ids.contains(DBHelper.REGULAR_EVENT_TYPE_ID)) deleteIds = deleteIds.filter { it != DBHelper.REGULAR_EVENT_TYPE_ID } as ArrayList<Int>
deleteIds = ids.filter { it != DBHelper.REGULAR_EVENT_TYPE_ID } as ArrayList<Int>
val deletedSet = HashSet<String>() val deletedSet = HashSet<String>()
deleteIds.map { deletedSet.add(it.toString()) } deleteIds.map { deletedSet.add(it.toString()) }
@ -827,8 +826,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
return eventTypes return eventTypes
} }
fun doEventTypesContainEvent(types: ArrayList<Int>): Boolean { fun doEventTypesContainEvent(types: ArrayList<EventType>): Boolean {
val args = TextUtils.join(", ", types) val args = TextUtils.join(", ", types.map { it.id })
val columns = arrayOf(COL_ID) val columns = arrayOf(COL_ID)
val selection = "$COL_EVENT_TYPE IN ($args)" val selection = "$COL_EVENT_TYPE IN ($args)"
var cursor: Cursor? = null var cursor: Cursor? = null

View File

@ -1,7 +1,8 @@
package com.simplemobiletools.calendar.interfaces package com.simplemobiletools.calendar.interfaces
import com.simplemobiletools.calendar.models.EventType
import java.util.* import java.util.*
interface DeleteEventTypesListener { interface DeleteEventTypesListener {
fun deleteEventTypes(ids: ArrayList<Int>, deleteEvents: Boolean) fun deleteEventTypes(eventTypes: ArrayList<EventType>, deleteEvents: Boolean)
} }

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Wähle einen Termin Typ</string> <string name="select_event_type">Wähle einen Termin Typ</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Seleccione un tipo de evento</string> <string name="select_event_type">Seleccione un tipo de evento</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Sélectionner un type d\'evénement</string> <string name="select_event_type">Sélectionner un type d\'evénement</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Select an event type</string> <string name="select_event_type">Select an event type</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Select an event type</string> <string name="select_event_type">Select an event type</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Select an event type</string> <string name="select_event_type">Select an event type</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Select an event type</string> <string name="select_event_type">Select an event type</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Select an event type</string> <string name="select_event_type">Select an event type</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">이벤트 유형 선택</string> <string name="select_event_type">이벤트 유형 선택</string>
<string name="move_events_into_default">영향을 받는 이벤트들을 기본 유형으로 이동</string> <string name="move_events_into_default">영향을 받는 이벤트들을 기본 유형으로 이동</string>
<string name="remove_affected_events">영향을 받는 이벤트들을 영구적으로 제거</string> <string name="remove_affected_events">영향을 받는 이벤트들을 영구적으로 제거</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">공휴일</string> <string name="holidays">공휴일</string>

View File

@ -168,6 +168,7 @@
<string name="select_event_type">Wybierz typ wydarzenia</string> <string name="select_event_type">Wybierz typ wydarzenia</string>
<string name="move_events_into_default">Przenieś powiązane wydarzenia do domyślnego typu wydarzeń</string> <string name="move_events_into_default">Przenieś powiązane wydarzenia do domyślnego typu wydarzeń</string>
<string name="remove_affected_events">Usuń nieodwracalnie powiązane wydarzenia</string> <string name="remove_affected_events">Usuń nieodwracalnie powiązane wydarzenia</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Święta</string> <string name="holidays">Święta</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Selecione um tipo de evento</string> <string name="select_event_type">Selecione um tipo de evento</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Selecione um tipo de evento</string> <string name="select_event_type">Selecione um tipo de evento</string>
<string name="move_events_into_default">Mover eventos afetados para o tipo de evento padrão</string> <string name="move_events_into_default">Mover eventos afetados para o tipo de evento padrão</string>
<string name="remove_affected_events">Remover permanentemente os eventos afetados</string> <string name="remove_affected_events">Remover permanentemente os eventos afetados</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Feriados</string> <string name="holidays">Feriados</string>

View File

@ -177,6 +177,7 @@
<string name="select_event_type">Выбрать тип события</string> <string name="select_event_type">Выбрать тип события</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Праздники</string> <string name="holidays">Праздники</string>

View File

@ -173,6 +173,7 @@
<string name="importing_holidays_failed">Importovanie udalostí zlyhalo</string> <string name="importing_holidays_failed">Importovanie udalostí zlyhalo</string>
<string name="move_events_into_default">Presunúť dotknuté udalosti do predvoleného typu udalostí</string> <string name="move_events_into_default">Presunúť dotknuté udalosti do predvoleného typu udalostí</string>
<string name="remove_affected_events">Natrvalo odstrániť dotknuté udalosti</string> <string name="remove_affected_events">Natrvalo odstrániť dotknuté udalosti</string>
<string name="unsync_caldav_calendar">Na odstránenie CalDAV kalendára musíte vypnúť jeho synchronizáciu</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Sviatky</string> <string name="holidays">Sviatky</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Välj en händelsetyp</string> <string name="select_event_type">Välj en händelsetyp</string>
<string name="move_events_into_default">Flytta berörda händelser till standardhändelsetypen</string> <string name="move_events_into_default">Flytta berörda händelser till standardhändelsetypen</string>
<string name="remove_affected_events">Ta bort berörda händelser permanent</string> <string name="remove_affected_events">Ta bort berörda händelser permanent</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Helgdagar</string> <string name="holidays">Helgdagar</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Bir etkinlik türü seçin</string> <string name="select_event_type">Bir etkinlik türü seçin</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<string name="select_event_type">Select an event type</string> <string name="select_event_type">Select an event type</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Move affected events into the default event type</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Permanently remove affected events</string>
<string name="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Holidays</string> <string name="holidays">Holidays</string>