diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index ed6657564..dab7a7c61 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -111,7 +111,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { updateViewPager() } - dbHelper.getEventTypes { + EventTypesHelper().getEventTypes(this) { mShouldFilterBeVisible = it.size > 1 || config.displayEventTypes.isEmpty() } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/ManageEventTypesActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/ManageEventTypesActivity.kt index 68b006fcc..7a1c267d2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/ManageEventTypesActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/ManageEventTypesActivity.kt @@ -7,6 +7,7 @@ import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.adapters.ManageEventTypesAdapter import com.simplemobiletools.calendar.pro.dialogs.EditEventTypeDialog import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.helpers.EventTypesHelper import com.simplemobiletools.calendar.pro.interfaces.DeleteEventTypesListener import com.simplemobiletools.calendar.pro.models.EventType import com.simplemobiletools.commons.extensions.toast @@ -30,13 +31,11 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener { } private fun getEventTypes() { - dbHelper.getEventTypes { - runOnUiThread { - val adapter = ManageEventTypesAdapter(this, it, this, manage_event_types_list) { - showEventTypeDialog(it as EventType) - } - manage_event_types_list.adapter = adapter + EventTypesHelper().getEventTypes(this) { + val adapter = ManageEventTypesAdapter(this, it, this, manage_event_types_list) { + showEventTypeDialog(it as EventType) } + manage_event_types_list.adapter = adapter } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt index b996a37ac..f36857b7c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt @@ -92,13 +92,14 @@ class SettingsActivity : SimpleActivity() { private fun checkPrimaryColor() { if (config.primaryColor != mStoredPrimaryColor) { - dbHelper.getEventTypes { - if (it.filter { it.caldavCalendarId == 0 }.size == 1) { - val eventType = it.first { it.caldavCalendarId == 0 } + Thread { + val eventTypes = EventTypesHelper().getEventTypesSync(this) + if (eventTypes.filter { it.caldavCalendarId == 0 }.size == 1) { + val eventType = eventTypes.first { it.caldavCalendarId == 0 } eventType.color = config.primaryColor dbHelper.updateEventType(eventType) } - } + }.start() } } @@ -211,7 +212,7 @@ class SettingsActivity : SimpleActivity() { Thread { if (newCalendarIds.isNotEmpty()) { - val existingEventTypeNames = dbHelper.getEventTypesSync().map { it.getDisplayTitle().toLowerCase() } as ArrayList + val existingEventTypeNames = EventTypesHelper().getEventTypesSync(applicationContext).map { it.getDisplayTitle().toLowerCase() } as ArrayList getSyncedCalDAVCalendars().forEach { val calendarTitle = it.getFullTitle() if (!existingEventTypeNames.contains(calendarTitle.toLowerCase())) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/ExportEventsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/ExportEventsDialog.kt index 148fe397a..6379a66ee 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/ExportEventsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/ExportEventsDialog.kt @@ -6,7 +6,7 @@ import androidx.appcompat.app.AlertDialog import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.adapters.FilterEventTypeAdapter -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.helpers.EventTypesHelper import com.simplemobiletools.commons.extensions.* import kotlinx.android.synthetic.main.dialog_export_events.view.* import java.io.File @@ -19,18 +19,16 @@ class ExportEventsDialog(val activity: SimpleActivity, val path: String, val cal export_events_folder.text = activity.humanizePath(path) export_events_filename.setText("${activity.getString(R.string.events)}_${activity.getCurrentFormattedDateTime()}") - activity.dbHelper.getEventTypes { + EventTypesHelper().getEventTypes(activity) { val eventTypes = HashSet() it.mapTo(eventTypes) { it.id.toString() } - activity.runOnUiThread { - export_events_types_list.adapter = FilterEventTypeAdapter(activity, it, eventTypes) - if (it.size > 1) { - export_events_pick_types.beVisible() + export_events_types_list.adapter = FilterEventTypeAdapter(activity, it, eventTypes) + if (it.size > 1) { + export_events_pick_types.beVisible() - val margin = activity.resources.getDimension(R.dimen.normal_margin).toInt() - (export_events_checkbox.layoutParams as LinearLayout.LayoutParams).leftMargin = margin - } + val margin = activity.resources.getDimension(R.dimen.normal_margin).toInt() + (export_events_checkbox.layoutParams as LinearLayout.LayoutParams).leftMargin = margin } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/FilterEventTypesDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/FilterEventTypesDialog.kt index 60f21fc91..2829664f5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/FilterEventTypesDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/FilterEventTypesDialog.kt @@ -5,7 +5,7 @@ import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.adapters.FilterEventTypeAdapter import com.simplemobiletools.calendar.pro.extensions.config -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.helpers.EventTypesHelper import com.simplemobiletools.commons.extensions.setupDialogStuff import kotlinx.android.synthetic.main.dialog_filter_event_types.view.* @@ -14,18 +14,16 @@ class FilterEventTypesDialog(val activity: SimpleActivity, val callback: () -> U private val view = activity.layoutInflater.inflate(R.layout.dialog_filter_event_types, null) init { - activity.dbHelper.getEventTypes { + EventTypesHelper().getEventTypes(activity) { val displayEventTypes = activity.config.displayEventTypes - activity.runOnUiThread { - view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, it, displayEventTypes) + view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, it, displayEventTypes) - dialog = AlertDialog.Builder(activity) - .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() } - .setNegativeButton(R.string.cancel, null) - .create().apply { - activity.setupDialogStuff(view, this, R.string.filter_events_by_type) - } - } + dialog = AlertDialog.Builder(activity) + .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() } + .setNegativeButton(R.string.cancel, null) + .create().apply { + activity.setupDialogStuff(view, this, R.string.filter_events_by_type) + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SelectEventCalendarDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SelectEventCalendarDialog.kt index 7c27909a7..20c8ea939 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SelectEventCalendarDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SelectEventCalendarDialog.kt @@ -26,7 +26,7 @@ class SelectEventCalendarDialog(val activity: Activity, val calendars: List>() private var eventTypeColors = LongSparseArray() - lateinit var inflater: LayoutInflater - lateinit var mView: View - lateinit var mScrollView: MyScrollView - lateinit var mCalendar: WeeklyCalendarImpl - lateinit var mRes: Resources - lateinit var mConfig: Config + private lateinit var inflater: LayoutInflater + private lateinit var mView: View + private lateinit var mScrollView: MyScrollView + private lateinit var mCalendar: WeeklyCalendarImpl + private lateinit var mRes: Resources + private lateinit var mConfig: Config override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - context!!.dbHelper.getEventTypes { + EventTypesHelper().getEventTypes(activity!!) { it.map { eventTypeColors.put(it.id!!, it.color) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt index 4251c964d..625ab5a3e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt @@ -838,7 +838,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont private fun fillEvents(cursor: Cursor?): List { val eventTypeColors = LongSparseArray() - getEventTypesSync().forEach { + context.eventTypesDB.getEventTypes().forEach { eventTypeColors.put(it.id!!, it.color) } @@ -880,38 +880,6 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont return events } - fun getEventTypes(callback: (types: ArrayList) -> Unit) { - Thread { - callback(getEventTypesSync()) - }.start() - } - - fun getEventTypesSync(): ArrayList { - val eventTypes = ArrayList() - val cols = arrayOf(COL_ID, COL_TYPE_TITLE, COL_TYPE_COLOR, COL_TYPE_CALDAV_CALENDAR_ID, COL_TYPE_CALDAV_DISPLAY_NAME, COL_TYPE_CALDAV_EMAIL) - var cursor: Cursor? = null - try { - cursor = mDb.query(TYPES_TABLE_NAME, cols, null, null, null, null, "$COL_TYPE_TITLE ASC") - if (cursor?.moveToFirst() == true) { - do { - val id = cursor.getLongValue(COL_ID) - val title = cursor.getStringValue(COL_TYPE_TITLE) - val color = cursor.getIntValue(COL_TYPE_COLOR) - val calendarId = cursor.getIntValue(COL_TYPE_CALDAV_CALENDAR_ID) - val displayName = cursor.getStringValue(COL_TYPE_CALDAV_DISPLAY_NAME) - val email = cursor.getStringValue(COL_TYPE_CALDAV_EMAIL) - val eventType = EventType(id, title, color, calendarId, displayName, email) - eventTypes.add(eventType) - } while (cursor.moveToNext()) - } - } catch (ignored: Exception) { - } finally { - cursor?.close() - } - - return eventTypes - } - fun doEventTypesContainEvents(types: ArrayList, callback: (contain: Boolean) -> Unit) { Thread { val args = TextUtils.join(", ", types.map { it.id }) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventTypesHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventTypesHelper.kt new file mode 100644 index 000000000..9bac00746 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventTypesHelper.kt @@ -0,0 +1,19 @@ +package com.simplemobiletools.calendar.pro.helpers + +import android.app.Activity +import android.content.Context +import com.simplemobiletools.calendar.pro.extensions.eventTypesDB +import com.simplemobiletools.calendar.pro.models.EventType + +class EventTypesHelper { + fun getEventTypes(activity: Activity, callback: (notes: ArrayList) -> Unit) { + Thread { + val eventTypes = activity.eventTypesDB.getEventTypes().toMutableList() as ArrayList + activity.runOnUiThread { + callback(eventTypes) + } + }.start() + } + + fun getEventTypesSync(context: Context) = context.eventTypesDB.getEventTypes().toMutableList() as ArrayList +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt index d206c2c70..748f96b92 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt @@ -42,7 +42,7 @@ class IcsImporter(val activity: SimpleActivity) { fun importEvents(path: String, defaultEventTypeId: Long, calDAVCalendarId: Int, overrideFileEventTypes: Boolean): ImportResult { try { - val eventTypes = activity.dbHelper.getEventTypesSync() + val eventTypes = EventTypesHelper().getEventTypesSync(activity) val existingEvents = activity.dbHelper.getEventsWithImportIds() val eventsToInsert = ArrayList() var prevLine = "" diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/MonthlyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/MonthlyCalendarImpl.kt index ee2bffbb7..a7637d97f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/MonthlyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/MonthlyCalendarImpl.kt @@ -82,33 +82,31 @@ class MonthlyCalendarImpl(val callback: MonthlyCalendar, val context: Context) { // it works more often than not, dont touch private fun markDaysWithEvents(days: ArrayList) { - context.dbHelper.getEventTypes { - val dayEvents = HashMap>() - mEvents.forEach { - val startDateTime = Formatter.getDateTimeFromTS(it.startTS) - val endDateTime = Formatter.getDateTimeFromTS(it.endTS) - val endCode = Formatter.getDayCodeFromDateTime(endDateTime) + val dayEvents = HashMap>() + mEvents.forEach { + val startDateTime = Formatter.getDateTimeFromTS(it.startTS) + val endDateTime = Formatter.getDateTimeFromTS(it.endTS) + val endCode = Formatter.getDayCodeFromDateTime(endDateTime) - var currDay = startDateTime - var dayCode = Formatter.getDayCodeFromDateTime(currDay) - var currDayEvents = dayEvents[dayCode] ?: ArrayList() + var currDay = startDateTime + var dayCode = Formatter.getDayCodeFromDateTime(currDay) + var currDayEvents = dayEvents[dayCode] ?: ArrayList() + currDayEvents.add(it) + dayEvents[dayCode] = currDayEvents + + while (Formatter.getDayCodeFromDateTime(currDay) != endCode) { + currDay = currDay.plusDays(1) + dayCode = Formatter.getDayCodeFromDateTime(currDay) + currDayEvents = dayEvents[dayCode] ?: ArrayList() currDayEvents.add(it) dayEvents[dayCode] = currDayEvents - - while (Formatter.getDayCodeFromDateTime(currDay) != endCode) { - currDay = currDay.plusDays(1) - dayCode = Formatter.getDayCodeFromDateTime(currDay) - currDayEvents = dayEvents[dayCode] ?: ArrayList() - currDayEvents.add(it) - dayEvents[dayCode] = currDayEvents - } } - - days.filter { dayEvents.keys.contains(it.code) }.forEach { - it.dayEvents = dayEvents[it.code]!! - } - callback.updateMonthlyCalendar(context, monthName, days, true, mTargetDate) } + + days.filter { dayEvents.keys.contains(it.code) }.forEach { + it.dayEvents = dayEvents[it.code]!! + } + callback.updateMonthlyCalendar(context, monthName, days, true, mTargetDate) } private fun isToday(targetDate: DateTime, curDayInMonth: Int): Boolean {