diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 3ec646ad0..72864e1d8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -45,11 +45,11 @@ class EventActivity : SimpleActivity() { private var mReminder2Minutes = 0 private var mReminder3Minutes = 0 private var mRepeatInterval = 0 - private var mRepeatLimit = 0 + private var mRepeatLimit = 0L private var mRepeatRule = 0 private var mEventTypeId = REGULAR_EVENT_TYPE_ID private var mDialogTheme = 0 - private var mEventOccurrenceTS = 0 + private var mEventOccurrenceTS = 0L private var mEventCalendarId = STORED_LOCALLY_ONLY private var wasActivityInitialized = false @@ -89,7 +89,7 @@ class EventActivity : SimpleActivity() { if (event != null) { mEvent = event - mEventOccurrenceTS = intent.getIntExtra(EVENT_OCCURRENCE_TS, 0) + mEventOccurrenceTS = intent.getLongExtra(EVENT_OCCURRENCE_TS, 0L) if (savedInstanceState == null) { setupEditEvent() } @@ -178,16 +178,16 @@ class EventActivity : SimpleActivity() { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putInt(START_TS, mEventStartDateTime.seconds()) - outState.putInt(END_TS, mEventEndDateTime.seconds()) + outState.putLong(START_TS, mEventStartDateTime.seconds()) + outState.putLong(END_TS, mEventEndDateTime.seconds()) outState.putInt(REMINDER_1_MINUTES, mReminder1Minutes) outState.putInt(REMINDER_2_MINUTES, mReminder2Minutes) outState.putInt(REMINDER_3_MINUTES, mReminder3Minutes) outState.putInt(REPEAT_INTERVAL, mRepeatInterval) - outState.putInt(REPEAT_LIMIT, mRepeatLimit) outState.putInt(REPEAT_RULE, mRepeatRule) + outState.putLong(REPEAT_LIMIT, mRepeatLimit) outState.putLong(EVENT_TYPE_ID, mEventTypeId) outState.putInt(EVENT_CALENDAR_ID, mEventCalendarId) @@ -196,16 +196,16 @@ class EventActivity : SimpleActivity() { override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) savedInstanceState.apply { - mEventStartDateTime = Formatter.getDateTimeFromTS(getInt(START_TS)) - mEventEndDateTime = Formatter.getDateTimeFromTS(getInt(END_TS)) + mEventStartDateTime = Formatter.getDateTimeFromTS(getLong(START_TS)) + mEventEndDateTime = Formatter.getDateTimeFromTS(getLong(END_TS)) mReminder1Minutes = getInt(REMINDER_1_MINUTES) mReminder2Minutes = getInt(REMINDER_2_MINUTES) mReminder3Minutes = getInt(REMINDER_3_MINUTES) mRepeatInterval = getInt(REPEAT_INTERVAL) - mRepeatLimit = getInt(REPEAT_LIMIT) mRepeatRule = getInt(REPEAT_RULE) + mRepeatLimit = getLong(REPEAT_LIMIT) mEventTypeId = getLong(EVENT_TYPE_ID) mEventCalendarId = getInt(EVENT_CALENDAR_ID) @@ -226,7 +226,7 @@ class EventActivity : SimpleActivity() { } private fun setupEditEvent() { - val realStart = if (mEventOccurrenceTS == 0) mEvent.startTS else mEventOccurrenceTS + val realStart = if (mEventOccurrenceTS == 0L) mEvent.startTS else mEventOccurrenceTS val duration = mEvent.endTS - mEvent.startTS window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) updateActionBarTitle(getString(R.string.edit_event)) @@ -255,10 +255,10 @@ class EventActivity : SimpleActivity() { mEventCalendarId = if (isLastCaldavCalendarOK) config.lastUsedCaldavCalendarId else STORED_LOCALLY_ONLY if (intent.action == Intent.ACTION_EDIT || intent.action == Intent.ACTION_INSERT) { - val startTS = (intent.getLongExtra("beginTime", System.currentTimeMillis()) / 1000).toInt() + val startTS = intent.getLongExtra("beginTime", System.currentTimeMillis()) / 1000L mEventStartDateTime = Formatter.getDateTimeFromTS(startTS) - val endTS = (intent.getLongExtra("endTime", System.currentTimeMillis()) / 1000).toInt() + val endTS = intent.getLongExtra("endTime", System.currentTimeMillis()) / 1000L mEventEndDateTime = Formatter.getDateTimeFromTS(endTS) event_title.setText(intent.getStringExtra("title")) @@ -268,7 +268,7 @@ class EventActivity : SimpleActivity() { event_description.movementMethod = LinkMovementMethod.getInstance() } } else { - val startTS = intent.getIntExtra(NEW_EVENT_START_TS, 0) + val startTS = intent.getLongExtra(NEW_EVENT_START_TS, 0L) val dateTime = Formatter.getDateTimeFromTS(startTS) mEventStartDateTime = dateTime @@ -341,14 +341,14 @@ class EventActivity : SimpleActivity() { } } - private fun setRepeatLimit(limit: Int) { + private fun setRepeatLimit(limit: Long) { mRepeatLimit = limit checkRepetitionLimitText() } private fun checkRepetitionLimitText() { event_repetition_limit.text = when { - mRepeatLimit == 0 -> { + mRepeatLimit == 0L -> { event_repetition_limit_label.text = getString(R.string.repeat) resources.getString(R.string.forever) } @@ -946,7 +946,7 @@ class EventActivity : SimpleActivity() { updateStartDateText() checkRepeatRule() - mEventEndDateTime = mEventStartDateTime.plusSeconds(diff) + mEventEndDateTime = mEventStartDateTime.plusSeconds(diff.toInt()) updateEndTexts() } else { mEventEndDateTime = mEventEndDateTime.withDate(year, month + 1, day) @@ -961,7 +961,7 @@ class EventActivity : SimpleActivity() { mEventStartDateTime = mEventStartDateTime.withHourOfDay(hours).withMinuteOfHour(minutes) updateStartTimeText() - mEventEndDateTime = mEventStartDateTime.plusSeconds(diff) + mEventEndDateTime = mEventStartDateTime.plusSeconds(diff.toInt()) updateEndTexts() } else { mEventEndDateTime = mEventEndDateTime.withHourOfDay(hours).withMinuteOfHour(minutes) 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 8afd3b206..98aa0172d 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 @@ -498,10 +498,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { date.year = 70 } - val timestamp = (date.time / 1000).toInt() + val timestamp = date.time / 1000L val source = if (birthdays) SOURCE_CONTACT_BIRTHDAY else SOURCE_CONTACT_ANNIVERSARY val lastUpdated = cursor.getLongValue(ContactsContract.CommonDataKinds.Event.CONTACT_LAST_UPDATED_TIMESTAMP) - val event = Event(0, timestamp, timestamp, name, importId = contactId, flags = FLAG_ALL_DAY, repeatInterval = YEAR, + val event = Event(null, timestamp, timestamp, name, importId = contactId, flags = FLAG_ALL_DAY, repeatInterval = YEAR, eventType = eventTypeId, source = source, lastUpdated = lastUpdated) if (!importIDs.contains(contactId)) { @@ -775,7 +775,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } private fun openDayAt(timestamp: Long) { - val dayCode = Formatter.getDayCodeFromTS((timestamp / 1000).toInt()) + val dayCode = Formatter.getDayCodeFromTS(timestamp / 1000L) calendar_fab.beVisible() config.storedView = DAILY_VIEW updateViewPager(dayCode) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/EventListWidgetAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/EventListWidgetAdapter.kt index 92c42156e..074356261 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/EventListWidgetAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/EventListWidgetAdapter.kt @@ -9,7 +9,7 @@ import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R.id.event_item_holder import com.simplemobiletools.calendar.pro.R.id.event_section_title import com.simplemobiletools.calendar.pro.extensions.config -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.extensions.seconds import com.simplemobiletools.calendar.pro.helpers.* import com.simplemobiletools.calendar.pro.helpers.Formatter @@ -156,7 +156,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi mediumFontSize = context.config.getFontSize() val fromTS = DateTime().seconds() - context.config.displayPastEvents * 60 val toTS = DateTime().plusYears(1).seconds() - context.dbHelper.getEventsInBackground(fromTS, toTS, applyTypeFilter = true) { + context.eventsHelper.getEventsSync(fromTS, toTS, applyTypeFilter = true) { val listItems = ArrayList(it.size) val replaceDescription = context.config.replaceDescription val sorted = it.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description })) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/MyWeekPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/MyWeekPagerAdapter.kt index e6d1a2533..08efebd56 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/MyWeekPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/MyWeekPagerAdapter.kt @@ -9,7 +9,7 @@ import com.simplemobiletools.calendar.pro.fragments.WeekFragment import com.simplemobiletools.calendar.pro.helpers.WEEK_START_TIMESTAMP import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener -class MyWeekPagerAdapter(fm: FragmentManager, val mWeekTimestamps: List, val mListener: WeekFragmentListener) : FragmentStatePagerAdapter(fm) { +class MyWeekPagerAdapter(fm: FragmentManager, val mWeekTimestamps: List, val mListener: WeekFragmentListener) : FragmentStatePagerAdapter(fm) { private val mFragments = SparseArray() override fun getCount() = mWeekTimestamps.size @@ -17,7 +17,7 @@ class MyWeekPagerAdapter(fm: FragmentManager, val mWeekTimestamps: List, va override fun getItem(position: Int): Fragment { val bundle = Bundle() val weekTimestamp = mWeekTimestamps[position] - bundle.putInt(WEEK_START_TIMESTAMP, weekTimestamp) + bundle.putLong(WEEK_START_TIMESTAMP, weekTimestamp) val fragment = WeekFragment() fragment.arguments = bundle diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/RepeatLimitTypePickerDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/RepeatLimitTypePickerDialog.kt index 6f3261674..91d73d5bc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/RepeatLimitTypePickerDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/RepeatLimitTypePickerDialog.kt @@ -16,7 +16,7 @@ import kotlinx.android.synthetic.main.dialog_repeat_limit_type_picker.view.* import org.joda.time.DateTime import java.util.* -class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Int, val startTS: Int, val callback: (repeatLimit: Int) -> Unit) { +class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long, val startTS: Long, val callback: (repeatLimit: Long) -> Unit) { lateinit var dialog: AlertDialog var view: View @@ -76,14 +76,14 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Int, } else { "-$count" } - callback(count.toInt()) + callback(count.toLong()) } } dialog.dismiss() } private fun showRepetitionLimitDialog() { - val repeatLimitDateTime = Formatter.getDateTimeFromTS(if (repeatLimit != 0) repeatLimit else getNowSeconds()) + val repeatLimitDateTime = Formatter.getDateTimeFromTS(if (repeatLimit != 0L) repeatLimit else getNowSeconds()) val datepicker = DatePickerDialog(activity, activity.getDialogTheme(), repetitionLimitDateSetListener, repeatLimitDateTime.year, repeatLimitDateTime.monthOfYear - 1, repeatLimitDateTime.dayOfMonth) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt index 34ba35c4e..41d8be7f9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt @@ -94,7 +94,7 @@ fun Context.scheduleNextEventReminder(event: Event, dbHelper: DBHelper, activity val now = getNowSeconds() val reminderSeconds = event.getReminders().reversed().map { it * 60 } - dbHelper.getEvents(now, now + YEAR, event.id!!, false) { + eventsHelper.getEvents(now, now + YEAR, event.id!!, false) { if (it.isNotEmpty()) { for (curEvent in it) { for (curReminder in reminderSeconds) { @@ -300,7 +300,7 @@ fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode()) { } } -fun Context.getNewEventTimestampFromCode(dayCode: String): Int { +fun Context.getNewEventTimestampFromCode(dayCode: String): Long { val currHour = DateTime(System.currentTimeMillis(), DateTimeZone.getDefault()).hourOfDay val dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(currHour) val newDateTime = dateTime.plusHours(1).withMinuteOfHour(0).withSecondOfMinute(0).withMillisOfSecond(0) @@ -441,7 +441,7 @@ fun Context.getEventListItems(events: List): ArrayList { return listItems } -fun Context.handleEventDeleting(eventIds: List, timestamps: List, action: Int) { +fun Context.handleEventDeleting(eventIds: List, timestamps: List, action: Int) { when (action) { DELETE_SELECTED_OCCURRENCE -> { eventIds.forEachIndexed { index, value -> diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/DateTime.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/DateTime.kt index 622c8a476..c538b3a30 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/DateTime.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/DateTime.kt @@ -2,4 +2,4 @@ package com.simplemobiletools.calendar.pro.extensions import org.joda.time.DateTime -fun DateTime.seconds() = (millis / 1000).toInt() +fun DateTime.seconds() = millis / 1000L diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Int.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Int.kt index ce43cd970..16bf1faf4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Int.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Int.kt @@ -1,16 +1,8 @@ package com.simplemobiletools.calendar.pro.extensions -import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.MONTH import com.simplemobiletools.calendar.pro.helpers.WEEK import com.simplemobiletools.calendar.pro.helpers.YEAR -import com.simplemobiletools.calendar.pro.models.Event - -fun Int.isTsOnProperDay(event: Event): Boolean { - val dateTime = Formatter.getDateTimeFromTS(this) - val power = Math.pow(2.0, (dateTime.dayOfWeek - 1).toDouble()).toInt() - return event.repeatRule and power != 0 -} fun Int.isXWeeklyRepetition() = this != 0 && this % WEEK == 0 diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Long.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Long.kt new file mode 100644 index 000000000..f49a24281 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Long.kt @@ -0,0 +1,10 @@ +package com.simplemobiletools.calendar.pro.extensions + +import com.simplemobiletools.calendar.pro.helpers.Formatter +import com.simplemobiletools.calendar.pro.models.Event + +fun Long.isTsOnProperDay(event: Event): Boolean { + val dateTime = Formatter.getDateTimeFromTS(this) + val power = Math.pow(2.0, (dateTime.dayOfWeek - 1).toDouble()).toInt() + return event.repeatRule and power != 0 +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt index b8824523a..e577c30a7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt @@ -14,7 +14,7 @@ import com.simplemobiletools.calendar.pro.activities.EventActivity import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.adapters.DayEventsAdapter import com.simplemobiletools.calendar.pro.extensions.config -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.helpers.DAY_CODE import com.simplemobiletools.calendar.pro.helpers.EVENT_ID import com.simplemobiletools.calendar.pro.helpers.EVENT_OCCURRENCE_TS @@ -105,7 +105,7 @@ class DayFragment : Fragment() { fun updateCalendar() { val startTS = Formatter.getDayStartTS(mDayCode) val endTS = Formatter.getDayEndTS(mDayCode) - context?.dbHelper?.getEvents(startTS, endTS) { + context?.eventsHelper?.getEvents(startTS, endTS) { receivedEvents(it) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt index 84c47144e..610b3bef6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt @@ -30,8 +30,8 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { private var MIN_EVENTS_TRESHOLD = 30 private var mEvents = ArrayList() - private var minFetchedTS = 0 - private var maxFetchedTS = 0 + private var minFetchedTS = 0L + private var maxFetchedTS = 0L private var wereInitialEventsAdded = false private var use24HourFormat = false @@ -76,7 +76,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { maxFetchedTS = DateTime().plusMonths(6).seconds() } - context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS) { + context!!.eventsHelper.getEvents(minFetchedTS, maxFetchedTS) { if (it.size >= MIN_EVENTS_TRESHOLD) { receivedEvents(it, false) } else { @@ -84,7 +84,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { minFetchedTS -= FETCH_INTERVAL maxFetchedTS += FETCH_INTERVAL } - context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS) { + context!!.eventsHelper.getEvents(minFetchedTS, maxFetchedTS) { mEvents = it receivedEvents(mEvents, false, !wereInitialEventsAdded) } @@ -150,7 +150,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { private fun fetchPreviousPeriod() { val oldMinFetchedTS = minFetchedTS - 1 minFetchedTS -= FETCH_INTERVAL - context!!.dbHelper.getEvents(minFetchedTS, oldMinFetchedTS) { + context!!.eventsHelper.getEvents(minFetchedTS, oldMinFetchedTS) { mEvents.addAll(0, it) receivedEvents(mEvents, false) } @@ -159,7 +159,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { private fun fetchNextPeriod(scrollAfterUpdating: Boolean) { val oldMaxFetchedTS = maxFetchedTS + 1 maxFetchedTS += FETCH_INTERVAL - context!!.dbHelper.getEvents(oldMaxFetchedTS, maxFetchedTS) { + context!!.eventsHelper.getEvents(oldMaxFetchedTS, maxFetchedTS) { mEvents.addAll(it) receivedEvents(mEvents, scrollAfterUpdating) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt index 587833689..32fc7e660 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt @@ -39,7 +39,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { private val PLUS_FADEOUT_DELAY = 5000L var mListener: WeekFragmentListener? = null - private var mWeekTimestamp = 0 + private var mWeekTimestamp = 0L private var mRowHeight = 0f private var minScrollY = -1 private var maxScrollY = -1 @@ -75,7 +75,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { mConfig = context!!.config mRowHeight = mRes.getDimension(R.dimen.weekly_view_row_height) minScrollY = (mRowHeight * mConfig.startWeeklyAt).toInt() - mWeekTimestamp = arguments!!.getInt(WEEK_START_TIMESTAMP) + mWeekTimestamp = arguments!!.getLong(WEEK_START_TIMESTAMP) dimPastEvents = mConfig.dimPastEvents primaryColor = context!!.getAdjustedPrimaryColor() allDayRows.add(HashSet()) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt index 6db03433b..7d7deeb89 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt @@ -28,8 +28,8 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { private var weekHolder: ViewGroup? = null private var defaultWeeklyPage = 0 - private var thisWeekTS = 0 - private var currentWeekTS = 0 + private var thisWeekTS = 0L + private var currentWeekTS = 0L private var isGoToTodayVisible = false private var weekScrollY = 0 @@ -95,15 +95,15 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { updateActionBarTitle() } - private fun getWeekTimestamps(targetSeconds: Int): List { - val weekTSs = ArrayList(PREFILLED_WEEKS) + private fun getWeekTimestamps(targetSeconds: Long): List { + val weekTSs = ArrayList(PREFILLED_WEEKS) for (i in -PREFILLED_WEEKS / 2..PREFILLED_WEEKS / 2) { weekTSs.add(Formatter.getDateTimeFromTS(targetSeconds).plusWeeks(i).seconds()) } return weekTSs } - private fun setupWeeklyActionbarTitle(timestamp: Int) { + private fun setupWeeklyActionbarTitle(timestamp: Long) { val startDateTime = Formatter.getDateTimeFromTS(timestamp) val endDateTime = Formatter.getDateTimeFromTS(timestamp + WEEK_SECONDS) val startMonthName = Formatter.getMonthName(context!!, startDateTime.monthOfYear) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 5d94ea319..af3c369e7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -183,8 +183,8 @@ class CalDAVHelper(val context: Context) { val id = cursor.getLongValue(CalendarContract.Events._ID) val title = cursor.getStringValue(CalendarContract.Events.TITLE) ?: "" val description = cursor.getStringValue(CalendarContract.Events.DESCRIPTION) ?: "" - val startTS = (cursor.getLongValue(CalendarContract.Events.DTSTART) / 1000).toInt() - var endTS = (cursor.getLongValue(CalendarContract.Events.DTEND) / 1000).toInt() + val startTS = cursor.getLongValue(CalendarContract.Events.DTSTART) / 1000L + var endTS = cursor.getLongValue(CalendarContract.Events.DTEND) / 1000L val allDay = cursor.getIntValue(CalendarContract.Events.ALL_DAY) val rrule = cursor.getStringValue(CalendarContract.Events.RRULE) ?: "" val location = cursor.getStringValue(CalendarContract.Events.EVENT_LOCATION) ?: "" @@ -192,7 +192,7 @@ class CalDAVHelper(val context: Context) { val originalInstanceTime = cursor.getLongValue(CalendarContract.Events.ORIGINAL_INSTANCE_TIME) val reminders = getCalDAVEventReminders(id) - if (endTS == 0) { + if (endTS == 0L) { val duration = cursor.getStringValue(CalendarContract.Events.DURATION) ?: "" endTS = startTS + Parser().parseDurationSeconds(duration) } @@ -234,7 +234,7 @@ class CalDAVHelper(val context: Context) { val parentEventId = context.eventsDB.getEventIdWithImportId(parentImportId) if (parentEventId != null) { event.parentId = parentEventId - eventsHelper.addEventRepeatException(parentEventId, (originalInstanceTime / 1000).toInt(), false, event.importId) + eventsHelper.addEventRepeatException(parentEventId, originalInstanceTime / 1000L, false, event.importId) } } @@ -353,7 +353,7 @@ class CalDAVHelper(val context: Context) { val dur = Math.max(1, (event.endTS - event.startTS) / DAY) "P${dur}D" } else { - Parser().getDurationCode((event.endTS - event.startTS) / 60) + Parser().getDurationCode((event.endTS - event.startTS) / 60L) } } @@ -373,7 +373,7 @@ class CalDAVHelper(val context: Context) { } @SuppressLint("MissingPermission") - fun insertEventRepeatException(event: Event, occurrenceTS: Int): Long { + fun insertEventRepeatException(event: Event, occurrenceTS: Long): Long { val uri = CalendarContract.Events.CONTENT_URI val values = fillEventRepeatExceptionValues(event, occurrenceTS) val newUri = context.contentResolver.insert(uri, values) @@ -381,7 +381,7 @@ class CalDAVHelper(val context: Context) { return java.lang.Long.parseLong(newUri.lastPathSegment) } - private fun fillEventRepeatExceptionValues(event: Event, occurrenceTS: Int): ContentValues { + private fun fillEventRepeatExceptionValues(event: Event, occurrenceTS: Long): ContentValues { return ContentValues().apply { put(CalendarContract.Events.CALENDAR_ID, event.getCalDAVCalendarId()) put(CalendarContract.Events.DTSTART, occurrenceTS) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt index d786aa778..5e979c838 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt @@ -143,4 +143,4 @@ const val DELETE_SELECTED_OCCURRENCE = 0 const val DELETE_FUTURE_OCCURRENCES = 1 const val DELETE_ALL_OCCURRENCES = 2 -fun getNowSeconds() = (System.currentTimeMillis() / 1000).toInt() +fun getNowSeconds() = System.currentTimeMillis() / 1000L 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 6c3906b37..28dda70de 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 @@ -55,49 +55,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {} - fun getEvents(fromTS: Int, toTS: Int, eventId: Long = -1L, applyTypeFilter: Boolean = true, callback: (events: ArrayList) -> Unit) { - Thread { - getEventsInBackground(fromTS, toTS, eventId, applyTypeFilter, callback) - }.start() - } - - fun getEventsInBackground(fromTS: Int, toTS: Int, eventId: Long = -1L, applyTypeFilter: Boolean, callback: (events: ArrayList) -> Unit) { - var events = ArrayList() - - //var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL AND $COL_START_TS != 0" - var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_START_TS != 0" - if (eventId != -1L) { - selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId" - } - - if (applyTypeFilter) { - val displayEventTypes = context.config.displayEventTypes - if (displayEventTypes.isEmpty()) { - callback(ArrayList()) - return - } else { - val types = TextUtils.join(",", displayEventTypes) - selection += " AND $COL_EVENT_TYPE IN ($types)" - } - } - - val selectionArgs = arrayOf(toTS.toString(), fromTS.toString()) - val cursor = getEventsCursor(selection, selectionArgs) - events.addAll(fillEvents(cursor)) - - //events.addAll(getRepeatableEventsFor(fromTS, toTS, eventId, applyTypeFilter)) - - events.addAll(getAllDayEvents(fromTS, eventId, applyTypeFilter)) - - events = events - .asSequence() - .distinct() - .filterNot { context.eventsHelper.getEventRepetitionIgnoredOccurrences(it).contains(Formatter.getDayCodeFromTS(it.startTS)) } - .toMutableList() as ArrayList - callback(events) - } - - fun getRepeatableEventsFor(fromTS: Int, toTS: Int, eventId: Long = -1L, applyTypeFilter: Boolean = false): List { + fun getRepeatableEventsFor(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean = false): List { val newEvents = ArrayList() //var selection = "$COL_REPEAT_INTERVAL != 0 AND $COL_START_TS <= $toTS AND $COL_START_TS != 0" var selection = "$COL_START_TS <= $toTS AND $COL_START_TS != 0" @@ -115,7 +73,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont } val events = getEvents(selection) - val startTimes = LongSparseArray() + val startTimes = LongSparseArray() events.forEach { startTimes.put(it.id!!, it.startTS) if (it.repeatLimit >= 0) { @@ -128,10 +86,10 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont return newEvents } - private fun getEventsRepeatingTillDateOrForever(fromTS: Int, toTS: Int, startTimes: LongSparseArray, event: Event): ArrayList { + private fun getEventsRepeatingTillDateOrForever(fromTS: Long, toTS: Long, startTimes: LongSparseArray, event: Event): ArrayList { val original = event.copy() val events = ArrayList() - while (event.startTS <= toTS && (event.repeatLimit == 0 || event.repeatLimit >= event.startTS)) { + while (event.startTS <= toTS && (event.repeatLimit == 0L || event.repeatLimit >= event.startTS)) { if (event.endTS >= fromTS) { if (event.repeatInterval.isXWeeklyRepetition()) { if (event.startTS.isTsOnProperDay(event)) { @@ -180,7 +138,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont return events } - private fun getEventsRepeatingXTimes(fromTS: Int, toTS: Int, startTimes: LongSparseArray, event: Event): ArrayList { + private fun getEventsRepeatingXTimes(fromTS: Long, toTS: Long, startTimes: LongSparseArray, event: Event): ArrayList { val original = event.copy() val events = ArrayList() while (event.repeatLimit < 0 && event.startTS <= toTS) { @@ -222,7 +180,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont return events } - private fun getAllDayEvents(fromTS: Int, eventId: Long = -1L, applyTypeFilter: Boolean = false): List { + private fun getAllDayEvents(fromTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean = false): List { val events = ArrayList() var selection = "($COL_FLAGS & $FLAG_ALL_DAY) != 0" if (eventId != -1L) @@ -326,14 +284,14 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont if (cursor.moveToFirst()) { do { val id = cursor.getLongValue(COL_ID) - val startTS = cursor.getIntValue(COL_START_TS) - val endTS = cursor.getIntValue(COL_END_TS) + val startTS = cursor.getLongValue(COL_START_TS) + val endTS = cursor.getLongValue(COL_END_TS) val reminder1Minutes = cursor.getIntValue(COL_REMINDER_MINUTES) val reminder2Minutes = cursor.getIntValue(COL_REMINDER_MINUTES_2) val reminder3Minutes = cursor.getIntValue(COL_REMINDER_MINUTES_3) val repeatInterval = 0 var repeatRule = 0 - val repeatLimit = 0 + val repeatLimit = 0L val title = cursor.getStringValue(COL_TITLE) val location = cursor.getStringValue(COL_LOCATION) val description = cursor.getStringValue(COL_DESCRIPTION) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt index 33763a89f..f16c0f517 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt @@ -181,7 +181,7 @@ class EventsHelper(val context: Context) { deleteEvents(eventIds, true) } - fun addEventRepeatLimit(eventId: Long, limitTS: Int) { + fun addEventRepeatLimit(eventId: Long, limitTS: Long) { val time = Formatter.getDateTimeFromTS(limitTS) eventRepetitionsDB.updateEventRepetitionLimit(limitTS - time.hourOfDay, eventId) @@ -212,7 +212,7 @@ class EventsHelper(val context: Context) { }.start() } - fun addEventRepeatException(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String? = null) { + fun addEventRepeatException(parentEventId: Long, occurrenceTS: Long, addToCalDAV: Boolean, childImportId: String? = null) { fillExceptionValues(parentEventId, occurrenceTS, addToCalDAV, childImportId) { context.eventRepetitionExceptionsDB.insert(it) @@ -223,7 +223,7 @@ class EventsHelper(val context: Context) { } } - private fun fillExceptionValues(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String?, callback: (eventRepetitionException: EventRepetitionException) -> Unit) { + private fun fillExceptionValues(parentEventId: Long, occurrenceTS: Long, addToCalDAV: Boolean, childImportId: String?, callback: (eventRepetitionException: EventRepetitionException) -> Unit) { val childEvent = eventsDB.getEventWithId(parentEventId) ?: return childEvent.apply { @@ -253,4 +253,46 @@ class EventsHelper(val context: Context) { }.start() } } + + fun getEvents(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean = true, callback: (events: ArrayList) -> Unit) { + Thread { + getEventsSync(fromTS, toTS, eventId, applyTypeFilter, callback) + }.start() + } + + fun getEventsSync(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean, callback: (events: ArrayList) -> Unit) { + /*var events = ArrayList() + + var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL AND $COL_START_TS != 0" + var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_START_TS != 0" + if (eventId != -1L) { + selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId" + } + + if (applyTypeFilter) { + val displayEventTypes = context.config.displayEventTypes + if (displayEventTypes.isEmpty()) { + callback(ArrayList()) + return + } else { + val types = TextUtils.join(",", displayEventTypes) + selection += " AND $COL_EVENT_TYPE IN ($types)" + } + } + + val selectionArgs = arrayOf(toTS.toString(), fromTS.toString()) + val cursor = getEventsCursor(selection, selectionArgs) + events.addAll(fillEvents(cursor)) + + events.addAll(getRepeatableEventsFor(fromTS, toTS, eventId, applyTypeFilter)) + + events.addAll(getAllDayEvents(fromTS, eventId, applyTypeFilter)) + + events = events + .asSequence() + .distinct() + .filterNot { context.eventsHelper.getEventRepetitionIgnoredOccurrences(it).contains(Formatter.getDayCodeFromTS(it.startTS)) } + .toMutableList() as ArrayList + callback(events)*/ + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Formatter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Formatter.kt index fd94181b9..5a2dd697f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Formatter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Formatter.kt @@ -46,7 +46,7 @@ object Formatter { date } - fun getLongestDate(ts: Int) = getDateTimeFromTS(ts).toString(LONGEST_PATTERN) + fun getLongestDate(ts: Long) = getDateTimeFromTS(ts).toString(LONGEST_PATTERN) fun getDate(context: Context, dateTime: DateTime, addDayOfWeek: Boolean = true) = getDayTitle(context, getDayCodeFromDateTime(dateTime), addDayOfWeek) @@ -68,7 +68,7 @@ object Formatter { fun getLocalDateTimeFromCode(dayCode: String) = DateTimeFormat.forPattern(DAYCODE_PATTERN).withZone(DateTimeZone.getDefault()).parseLocalDate(dayCode).toDateTimeAtStartOfDay() - fun getTimeFromTS(context: Context, ts: Int) = getTime(context, getDateTimeFromTS(ts)) + fun getTimeFromTS(context: Context, ts: Long) = getTime(context, getDateTimeFromTS(ts)) fun getDayStartTS(dayCode: String) = getLocalDateTimeFromCode(dayCode).seconds() @@ -76,11 +76,11 @@ object Formatter { fun getDayCodeFromDateTime(dateTime: DateTime) = dateTime.toString(DAYCODE_PATTERN) - fun getDateFromTS(ts: Int) = LocalDate(ts * 1000L, DateTimeZone.getDefault()) + fun getDateFromTS(ts: Long) = LocalDate(ts * 1000L, DateTimeZone.getDefault()) - fun getDateTimeFromTS(ts: Int) = DateTime(ts * 1000L, DateTimeZone.getDefault()) + fun getDateTimeFromTS(ts: Long) = DateTime(ts * 1000L, DateTimeZone.getDefault()) - fun getUTCDateTimeFromTS(ts: Int) = DateTime(ts * 1000L, DateTimeZone.UTC) + fun getUTCDateTimeFromTS(ts: Long) = DateTime(ts * 1000L, DateTimeZone.UTC) // use manually translated month names, as DateFormat and Joda have issues with a lot of languages fun getMonthName(context: Context, id: Int) = context.resources.getStringArray(R.array.months)[id - 1] @@ -94,7 +94,7 @@ object Formatter { return "${dateTime.toString(DAYCODE_PATTERN)}T${dateTime.toString(TIME_PATTERN)}Z" } - fun getDayCodeFromTS(ts: Int): String { + fun getDayCodeFromTS(ts: Long): String { val daycode = getDateTimeFromTS(ts).toString(DAYCODE_PATTERN) return if (daycode.isNotEmpty()) { daycode @@ -103,5 +103,5 @@ object Formatter { } } - fun getShiftedImportTimestamp(ts: Int) = getUTCDateTimeFromTS(ts).withTime(13, 0, 0, 0).withZoneRetainFields(DateTimeZone.getDefault()).seconds() + fun getShiftedImportTimestamp(ts: Long) = getUTCDateTimeFromTS(ts).withTime(13, 0, 0, 0).withZoneRetainFields(DateTimeZone.getDefault()).seconds() } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt index c9136f65f..ebb4b9441 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt @@ -86,7 +86,7 @@ class IcsExporter { out.apply { writeLn(BEGIN_ALARM) writeLn("$ACTION$DISPLAY") - writeLn("$TRIGGER-${Parser().getDurationCode(minutes)}") + writeLn("$TRIGGER-${Parser().getDurationCode(minutes.toLong())}") writeLn(END_ALARM) } } 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 98b256f8f..f80ec1ba2 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 @@ -17,17 +17,17 @@ class IcsImporter(val activity: SimpleActivity) { IMPORT_FAIL, IMPORT_OK, IMPORT_PARTIAL } - private var curStart = -1 - private var curEnd = -1 + private var curStart = -1L + private var curEnd = -1L private var curTitle = "" private var curLocation = "" private var curDescription = "" private var curImportId = "" private var curFlags = 0 private var curReminderMinutes = ArrayList() - private var curRepeatExceptions = ArrayList() + private var curRepeatExceptions = ArrayList() private var curRepeatInterval = 0 - private var curRepeatLimit = 0 + private var curRepeatLimit = 0L private var curRepeatRule = 0 private var curEventTypeId = REGULAR_EVENT_TYPE_ID private var curLastModified = 0L @@ -126,11 +126,11 @@ class IcsImporter(val activity: SimpleActivity) { curReminderMinutes.add(curReminderTriggerMinutes) } } else if (line == END_EVENT) { - if (curStart != -1 && curEnd == -1) { + if (curStart != -1L && curEnd == -1L) { curEnd = curStart } - if (curTitle.isEmpty() || curStart == -1) { + if (curTitle.isEmpty() || curStart == -1L) { continue } @@ -191,7 +191,7 @@ class IcsImporter(val activity: SimpleActivity) { } } - private fun getTimestamp(fullString: String): Int { + private fun getTimestamp(fullString: String): Long { return try { if (fullString.startsWith(';')) { val value = fullString.substring(fullString.lastIndexOf(':') + 1) @@ -244,8 +244,8 @@ class IcsImporter(val activity: SimpleActivity) { } private fun resetValues() { - curStart = -1 - curEnd = -1 + curStart = -1L + curEnd = -1L curTitle = "" curLocation = "" curDescription = "" @@ -254,7 +254,7 @@ class IcsImporter(val activity: SimpleActivity) { curReminderMinutes = ArrayList() curRepeatExceptions = ArrayList() curRepeatInterval = 0 - curRepeatLimit = 0 + curRepeatLimit = 0L curRepeatRule = 0 curEventTypeId = REGULAR_EVENT_TYPE_ID curLastModified = 0L 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 a7637d97f..bb5f68c7f 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 @@ -2,7 +2,7 @@ package com.simplemobiletools.calendar.pro.helpers import android.content.Context import com.simplemobiletools.calendar.pro.extensions.config -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.extensions.seconds import com.simplemobiletools.calendar.pro.interfaces.MonthlyCalendar import com.simplemobiletools.calendar.pro.models.DayMonthly @@ -24,7 +24,7 @@ class MonthlyCalendarImpl(val callback: MonthlyCalendar, val context: Context) { mTargetDate = targetDate val startTS = mTargetDate.minusDays(7).seconds() val endTS = mTargetDate.plusDays(43).seconds() - context.dbHelper.getEvents(startTS, endTS) { + context.eventsHelper.getEvents(startTS, endTS) { gotEvents(it) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Parser.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Parser.kt index 462f55efd..32353d180 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Parser.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Parser.kt @@ -12,11 +12,11 @@ import org.joda.time.format.DateTimeFormat class Parser { // from RRULE:FREQ=DAILY;COUNT=5 to Daily, 5x... - fun parseRepeatInterval(fullString: String, startTS: Int): EventRepetition { + fun parseRepeatInterval(fullString: String, startTS: Long): EventRepetition { val parts = fullString.split(";").filter { it.isNotEmpty() } var repeatInterval = 0 var repeatRule = 0 - var repeatLimit = 0 + var repeatLimit = 0L for (part in parts) { val keyValue = part.split("=") @@ -31,7 +31,7 @@ class Parser { repeatRule = REPEAT_SAME_DAY } } else if (key == COUNT) { - repeatLimit = -value.toInt() + repeatLimit = -value.toLong() } else if (key == UNTIL) { repeatLimit = parseDateTimeValue(value) } else if (key == INTERVAL) { @@ -76,7 +76,7 @@ class Parser { return newRepeatRule } - fun parseDateTimeValue(value: String): Int { + fun parseDateTimeValue(value: String): Long { val edited = value.replace("T", "").replace("Z", "") return if (edited.length == 14) { parseLongFormat(edited, value.endsWith("Z")) @@ -86,7 +86,7 @@ class Parser { } } - private fun parseLongFormat(digitString: String, useUTC: Boolean): Int { + private fun parseLongFormat(digitString: String, useUTC: Boolean): Long { val dateTimeFormat = DateTimeFormat.forPattern("yyyyMMddHHmmss") val dateTimeZone = if (useUTC) DateTimeZone.UTC else DateTimeZone.getDefault() return dateTimeFormat.parseDateTime(digitString).withZoneRetainFields(dateTimeZone).seconds() @@ -121,7 +121,7 @@ class Parser { } private fun getRepeatLimitString(event: Event) = when { - event.repeatLimit == 0 -> "" + event.repeatLimit == 0L -> "" event.repeatLimit < 0 -> ";$COUNT=${-event.repeatLimit}" else -> ";$UNTIL=${Formatter.getDayCodeFromTS(event.repeatLimit)}" } @@ -202,7 +202,7 @@ class Parser { private fun getDurationValue(duration: String, char: String) = Regex("[0-9]+(?=$char)").find(duration)?.value?.toInt() ?: 0 // from 65 to P0DT1H5M0S - fun getDurationCode(minutes: Int): String { + fun getDurationCode(minutes: Long): String { var days = 0 var hours = 0 var remainder = minutes diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/WeeklyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/WeeklyCalendarImpl.kt index ffcd140be..7aedef406 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/WeeklyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/WeeklyCalendarImpl.kt @@ -1,7 +1,7 @@ package com.simplemobiletools.calendar.pro.helpers import android.content.Context -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.interfaces.WeeklyCalendar import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.commons.helpers.WEEK_SECONDS @@ -10,9 +10,9 @@ import java.util.* class WeeklyCalendarImpl(val callback: WeeklyCalendar, val context: Context) { var mEvents = ArrayList() - fun updateWeeklyCalendar(weekStartTS: Int) { + fun updateWeeklyCalendar(weekStartTS: Long) { val endTS = weekStartTS + WEEK_SECONDS - context.dbHelper.getEvents(weekStartTS, endTS) { + context.eventsHelper.getEvents(weekStartTS, endTS) { mEvents = it callback.updateWeeklyCalendar(it) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/YearlyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/YearlyCalendarImpl.kt index 0f617b59b..ec9ac1cd6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/YearlyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/YearlyCalendarImpl.kt @@ -2,7 +2,7 @@ package com.simplemobiletools.calendar.pro.helpers import android.content.Context import android.util.SparseArray -import com.simplemobiletools.calendar.pro.extensions.dbHelper +import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.extensions.seconds import com.simplemobiletools.calendar.pro.interfaces.YearlyCalendar import com.simplemobiletools.calendar.pro.models.DayYearly @@ -16,7 +16,7 @@ class YearlyCalendarImpl(val callback: YearlyCalendar, val context: Context, val val startDateTime = DateTime().withTime(0, 0, 0, 0).withDate(year, 1, 1) val startTS = startDateTime.seconds() val endTS = startDateTime.plusYears(1).minusSeconds(1).seconds() - context.dbHelper.getEvents(startTS, endTS) { + context.eventsHelper.getEvents(startTS, endTS) { gotEvents(it) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt index 0f5f3d657..2584b1089 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt @@ -15,5 +15,5 @@ interface EventRepetitionsDao { fun deleteEventRepetitionsOfEvent(eventId: Long) @Query("UPDATE event_repetitions SET repeat_limit = :repeatLimit WHERE event_id = :eventId") - fun updateEventRepetitionLimit(repeatLimit: Int, eventId: Long) + fun updateEventRepetitionLimit(repeatLimit: Long, eventId: Long) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventsDao.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventsDao.kt index bc6b950fa..7a00a6cda 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventsDao.kt @@ -17,6 +17,9 @@ interface EventsDao { @Query("SELECT id FROM events") fun getEventIds(): List + @Query("SELECT * FROM events WHERE start_ts <= :startTS AND end_ts >= :endTS AND start_ts != 0") + fun getEventsFromTo(startTS: Long, endTS: Long): List + @Query("SELECT id FROM events WHERE import_id = :importId") fun getEventIdWithImportId(importId: String): Long? diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt index 8f9a8689e..4ec035581 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt @@ -15,8 +15,8 @@ import java.io.Serializable @Entity(tableName = "events", indices = [(Index(value = ["id"], unique = true))]) data class Event( @PrimaryKey(autoGenerate = true) var id: Long?, - @ColumnInfo(name = "start_ts") var startTS: Int = 0, - @ColumnInfo(name = "end_ts") var endTS: Int = 0, + @ColumnInfo(name = "start_ts") var startTS: Long = 0L, + @ColumnInfo(name = "end_ts") var endTS: Long = 0L, @ColumnInfo(name = "title") var title: String = "", @ColumnInfo(name = "location") var location: String = "", @ColumnInfo(name = "description") var description: String = "", @@ -25,7 +25,7 @@ data class Event( @ColumnInfo(name = "reminder_3_minutes") var reminder3Minutes: Int = -1, @ColumnInfo(name = "repeat_interval") var repeatInterval: Int = 0, @ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0, - @ColumnInfo(name = "repeat_limit") var repeatLimit: Int = 0, + @ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L, @ColumnInfo(name = "import_id") var importId: String = "", @ColumnInfo(name = "flags") var flags: Int = 0, @ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID, @@ -118,7 +118,7 @@ data class Event( fun getReminders() = setOf(reminder1Minutes, reminder2Minutes, reminder3Minutes).filter { it != REMINDER_OFF } // properly return the start time of all-day events as midnight - fun getEventStartTS(): Int { + fun getEventStartTS(): Long { return if (getIsAllDay()) { Formatter.getDateTimeFromTS(startTS).withTime(0, 0, 0, 0).seconds() } else { @@ -139,7 +139,7 @@ data class Event( fun getEventRepetition() = EventRepetition(null, id!!, repeatInterval, repeatRule, repeatLimit) // check if its the proper week, for events repeating every x weeks - fun isOnProperWeek(startTimes: LongSparseArray): Boolean { + fun isOnProperWeek(startTimes: LongSparseArray): Boolean { val initialWeekOfYear = Formatter.getDateTimeFromTS(startTimes[id!!]!!).weekOfWeekyear val currentWeekOfYear = Formatter.getDateTimeFromTS(startTS).weekOfWeekyear return (currentWeekOfYear - initialWeekOfYear) % (repeatInterval / WEEK) == 0 diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt index 253953ed3..86db25efb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt @@ -11,4 +11,4 @@ data class EventRepetition( @ColumnInfo(name = "event_id") val eventId: Long, @ColumnInfo(name = "repeat_interval") val repeatInterval: Int, @ColumnInfo(name = "repeat_rule") val repeatRule: Int, - @ColumnInfo(name = "repeat_limit") val repeatLimit: Int) + @ColumnInfo(name = "repeat_limit") val repeatLimit: Long) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/ListEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/ListEvent.kt index 8cd083d81..c04072bed 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/ListEvent.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/ListEvent.kt @@ -1,4 +1,4 @@ package com.simplemobiletools.calendar.pro.models -data class ListEvent(var id: Long, var startTS: Int, var endTS: Int, var title: String, var description: String, var isAllDay: Boolean, var color: Int, +data class ListEvent(var id: Long, var startTS: Long, var endTS: Long, var title: String, var description: String, var isAllDay: Boolean, var color: Int, var location: String, var isPastEvent: Boolean, var isRepeatable: Boolean) : ListItem() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/MonthViewEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/MonthViewEvent.kt index 4aa94fae2..24c861338 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/MonthViewEvent.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/MonthViewEvent.kt @@ -1,4 +1,4 @@ package com.simplemobiletools.calendar.pro.models -data class MonthViewEvent(val id: Long, val title: String, val startTS: Int, val color: Int, val startDayIndex: Int, val daysCnt: Int, val originalStartDayIndex: Int, +data class MonthViewEvent(val id: Long, val title: String, val startTS: Long, val color: Int, val startDayIndex: Int, val daysCnt: Int, val originalStartDayIndex: Int, val isAllDay: Boolean, val isPastEvent: Boolean)