replace repeat_day and repeat_month with repeat_rule

This commit is contained in:
tibbi 2017-04-14 16:01:01 +02:00
parent 449432cc75
commit 7a17bce90f
4 changed files with 55 additions and 9 deletions

View File

@ -25,6 +25,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
private var mReminder3Minutes = 0
private var mRepeatInterval = 0
private var mRepeatLimit = 0
private var mRepeatRule = 0
private var mEventTypeId = DBHelper.REGULAR_EVENT_TYPE_ID
private var mDialogTheme = 0
private var mEventOccurrenceTS = 0
@ -104,6 +105,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
mReminder3Minutes = mEvent.reminder3Minutes
mRepeatInterval = mEvent.repeatInterval
mRepeatLimit = mEvent.repeatLimit
mRepeatRule = mEvent.repeatRule
mEventTypeId = mEvent.eventType
checkRepeatLimit(mRepeatInterval)
}
@ -151,6 +153,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
checkRepetitionLimitText()
event_repetition_rule_holder.beGoneIf(mRepeatInterval != DAY && mRepeatInterval != MONTH)
checkRepetitionRuleText()
}
private fun showRepetitionLimitDialog() {
@ -183,6 +186,10 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
}
private fun checkRepetitionRuleText() {
event_repetition_rule.text = ""
}
private fun showEventTypeDialog() {
SelectEventTypeDialog(this, mEventTypeId) {
mEventTypeId = it
@ -304,6 +311,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
repeatInterval = mRepeatInterval
flags = if (event_all_day.isChecked) (mEvent.flags or FLAG_ALL_DAY) else (mEvent.flags.removeFlag(FLAG_ALL_DAY))
repeatLimit = if (repeatInterval == 0) 0 else mRepeatLimit
repeatRule = mRepeatRule
eventType = mEventTypeId
}

View File

@ -54,6 +54,12 @@ val THURSDAY = 8
val FRIDAY = 16
val SATURDAY = 32
val SUNDAY = 64
val ALL_DAYS = 127
// repeat_rule for monthly repetition
val REPEAT_MONTH_SAME_DAY = 1
val REPEAT_MONTH_LAST_DAY = 2
val REPEAT_MONTH_EVERY_X = 3
// special event flags
val FLAG_ALL_DAY = 1

View File

@ -38,8 +38,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
private val COL_EVENT_ID = "event_id"
private val COL_REPEAT_START = "repeat_start"
private val COL_REPEAT_INTERVAL = "repeat_interval"
private val COL_REPEAT_MONTH = "repeat_month"
private val COL_REPEAT_DAY = "repeat_day"
private val COL_REPEAT_RULE = "repeat_rule"
private val COL_REPEAT_LIMIT = "repeat_limit"
private val TYPES_TABLE_NAME = "event_types"
@ -56,7 +55,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
private val mDb: SQLiteDatabase = writableDatabase
companion object {
private val DB_VERSION = 10
private val DB_VERSION = 11
val DB_NAME = "events.db"
val REGULAR_EVENT_TYPE_ID = 1
@ -119,11 +118,16 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
}
convertExceptionTimestampToDaycode(db)
}
if (oldVersion < 11) {
db.execSQL("ALTER TABLE $META_TABLE_NAME ADD COLUMN $COL_REPEAT_RULE INTEGER NOT NULL DEFAULT 0")
setupRepeatRules(db)
}
}
private fun createMetaTable(db: SQLiteDatabase) {
db.execSQL("CREATE TABLE $META_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY, $COL_EVENT_ID INTEGER UNIQUE, $COL_REPEAT_START INTEGER, " +
"$COL_REPEAT_INTERVAL INTEGER, $COL_REPEAT_MONTH INTEGER, $COL_REPEAT_DAY INTEGER, $COL_REPEAT_LIMIT INTEGER)")
"$COL_REPEAT_INTERVAL INTEGER, $COL_REPEAT_LIMIT INTEGER, $COL_REPEAT_RULE INTEGER)")
}
private fun createTypesTable(db: SQLiteDatabase) {
@ -202,7 +206,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
put(COL_REPEAT_START, event.startTS)
put(COL_REPEAT_INTERVAL, event.repeatInterval)
put(COL_REPEAT_LIMIT, event.repeatLimit)
put(COL_REPEAT_DAY, event.repeatDay)
put(COL_REPEAT_RULE, event.repeatRule)
}
}
@ -468,7 +472,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
private val allColumns: Array<String>
get() = arrayOf("$MAIN_TABLE_NAME.$COL_ID", COL_START_TS, COL_END_TS, COL_TITLE, COL_DESCRIPTION, COL_REMINDER_MINUTES, COL_REMINDER_MINUTES_2,
COL_REMINDER_MINUTES_3, COL_REPEAT_INTERVAL, COL_REPEAT_MONTH, COL_REPEAT_DAY, COL_IMPORT_ID, COL_FLAGS, COL_REPEAT_LIMIT, COL_EVENT_TYPE)
COL_REMINDER_MINUTES_3, COL_REPEAT_INTERVAL, COL_IMPORT_ID, COL_FLAGS, COL_REPEAT_LIMIT, COL_EVENT_TYPE)
private fun fillEvents(cursor: Cursor?): List<Event> {
val events = ArrayList<Event>()
@ -482,7 +486,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
val reminder2Minutes = cursor.getIntValue(COL_REMINDER_MINUTES_2)
val reminder3Minutes = cursor.getIntValue(COL_REMINDER_MINUTES_3)
val repeatInterval = cursor.getIntValue(COL_REPEAT_INTERVAL)
val repeatDay = cursor.getIntValue(COL_REPEAT_DAY)
val repeatRule = cursor.getIntValue(COL_REPEAT_RULE)
val title = cursor.getStringValue(COL_TITLE)
val description = cursor.getStringValue(COL_DESCRIPTION)
val importId = cursor.getStringValue(COL_IMPORT_ID)
@ -499,7 +503,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
}
val event = Event(id, startTS, endTS, title, description, reminder1Minutes, reminder2Minutes, reminder3Minutes,
repeatInterval, importId, flags, repeatLimit, repeatDay, eventType, ignoreEventOccurrences)
repeatInterval, importId, flags, repeatLimit, repeatRule, eventType, ignoreEventOccurrences)
events.add(event)
} while (cursor.moveToNext())
}
@ -578,6 +582,34 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
}
}
private fun setupRepeatRules(db: SQLiteDatabase) {
val projection = arrayOf(COL_EVENT_ID, COL_REPEAT_INTERVAL)
val selection = "$COL_REPEAT_INTERVAL = ? OR $COL_REPEAT_INTERVAL = ?"
val selectionArgs = arrayOf(DAY.toString(), MONTH.toString())
var cursor: Cursor? = null
try {
cursor = db.query(META_TABLE_NAME, projection, selection, selectionArgs, null, null, null)
if (cursor?.moveToFirst() == true) {
do {
val eventId = cursor.getIntValue(COL_EVENT_ID)
val interval = cursor.getIntValue(COL_REPEAT_INTERVAL)
var rule = ALL_DAYS
if (interval == MONTH) {
rule = REPEAT_MONTH_SAME_DAY
}
val values = ContentValues()
values.put(COL_REPEAT_RULE, rule)
val curSelection = "$COL_EVENT_ID = ?"
val curSelectionArgs = arrayOf(eventId.toString())
db.update(META_TABLE_NAME, values, curSelection, curSelectionArgs)
} while (cursor.moveToNext())
}
} finally {
cursor?.close()
}
}
interface EventUpdateListener {
fun eventInserted(event: Event)

View File

@ -9,7 +9,7 @@ import java.util.*
data class Event(var id: Int = 0, var startTS: Int = 0, var endTS: Int = 0, var title: String = "", var description: String = "",
var reminder1Minutes: Int = -1, var reminder2Minutes: Int = -1, var reminder3Minutes: Int = -1, var repeatInterval: Int = 0,
var importId: String? = "", var flags: Int = 0, var repeatLimit: Int = 0, var repeatDay: Int = 0,
var importId: String? = "", var flags: Int = 0, var repeatLimit: Int = 0, var repeatRule: Int = 0,
var eventType: Int = DBHelper.REGULAR_EVENT_TYPE_ID, var ignoreEventOccurrences: ArrayList<Int> = ArrayList()) : Serializable {
companion object {