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 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 reminders = sortedSetOf(mReminder1Minutes, mReminder2Minutes, mReminder3Minutes).filter { it != REMINDER_OFF }

View File

@ -53,12 +53,16 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener {
return true
}
override fun deleteEventTypes(ids: ArrayList<Int>, deleteEvents: Boolean) {
if (ids.contains(DBHelper.REGULAR_EVENT_TYPE_ID)) {
override fun deleteEventTypes(eventTypes: ArrayList<EventType>, deleteEvents: Boolean) {
if (eventTypes.map { it.id }.contains(DBHelper.REGULAR_EVENT_TYPE_ID)) {
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) {
getEventTypes()
} else {

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,8 @@
package com.simplemobiletools.calendar.interfaces
import com.simplemobiletools.calendar.models.EventType
import java.util.*
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="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="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<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="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="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Holidays</string>

View File

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

View File

@ -168,6 +168,7 @@
<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="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 -->
<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="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="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Feriados</string>

View File

@ -177,6 +177,7 @@
<string name="select_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="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays -->
<string name="holidays">Праздники</string>

View File

@ -173,6 +173,7 @@
<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="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 -->
<string name="holidays">Sviatky</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<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="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="unsync_caldav_calendar">To remove a CalDAV calendar you have to unsynchronize it</string>
<!-- Holidays -->
<string name="holidays">Holidays</string>

View File

@ -163,6 +163,7 @@
<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="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 -->
<string name="holidays">Holidays</string>