diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index f877d2717..2e106b94c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -1,11 +1,15 @@ package com.simplemobiletools.calendar.activities import android.Manifest +import android.content.ContentResolver import android.content.Intent import android.content.pm.ActivityInfo import android.content.pm.PackageManager +import android.database.ContentObserver import android.net.Uri import android.os.Bundle +import android.os.Handler +import android.provider.CalendarContract import android.support.v4.app.ActivityCompat import android.support.v4.view.ViewPager import android.util.SparseIntArray @@ -45,6 +49,7 @@ import java.util.* import kotlin.collections.ArrayList class MainActivity : SimpleActivity(), NavigationListener { + private val CALDAV_SYNC_DELAY = 2000L private val PREFILLED_MONTHS = 97 private val PREFILLED_YEARS = 31 private val PREFILLED_WEEKS = 61 @@ -59,6 +64,7 @@ class MainActivity : SimpleActivity(), NavigationListener { private var mStoredIsSundayFirst = false private var mStoredUse24HourFormat = false private var mShouldFilterBeVisible = false + private var mCalDAVSyncHandler = Handler() private var mDefaultWeeklyPage = 0 private var mDefaultMonthlyPage = 0 @@ -88,7 +94,7 @@ class MainActivity : SimpleActivity(), NavigationListener { config.caldavSync = false } - recheckCalDAVCalendars() + recheckCalDAVCalendars {} } override fun onResume() { @@ -126,6 +132,12 @@ class MainActivity : SimpleActivity(), NavigationListener { mStoredUse24HourFormat = config.use24hourFormat } + override fun onStop() { + super.onStop() + mCalDAVSyncHandler.removeCallbacksAndMessages(null) + contentResolver.unregisterContentObserver(calDAVSyncObserver) + } + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) menu.findItem(R.id.filter).isVisible = mShouldFilterBeVisible @@ -214,7 +226,25 @@ class MainActivity : SimpleActivity(), NavigationListener { } private fun refreshCalDAVAccounts() { + toast(R.string.refreshing) + val uri = CalendarContract.Calendars.CONTENT_URI + contentResolver.registerContentObserver(uri, false, calDAVSyncObserver) + ContentResolver.requestSync(null, uri.authority, Bundle()) + } + private val calDAVSyncObserver = object : ContentObserver(Handler()) { + override fun onChange(selfChange: Boolean) { + super.onChange(selfChange) + if (!selfChange) { + mCalDAVSyncHandler.removeCallbacksAndMessages(null) + mCalDAVSyncHandler.postDelayed({ + recheckCalDAVCalendars { + refreshViewPager() + toast(R.string.refreshing_complete) + } + }, CALDAV_SYNC_DELAY) + } + } } private fun addHolidays() { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index 9dbd4ac9c..d0d97eac8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -143,15 +143,14 @@ class SettingsActivity : SimpleActivity() { Thread({ if (newCalendarIds.isNotEmpty()) { val eventTypeNames = dbHelper.fetchEventTypes().map { it.title.toLowerCase() } as ArrayList - val calendars = CalDAVEventsHandler(applicationContext).getCalDAVCalendars(config.caldavSyncedCalendarIDs) - calendars.forEach { + getSyncedCalDAVCalendars().forEach { if (!eventTypeNames.contains(it.displayName.toLowerCase())) { val eventType = EventType(0, it.displayName, it.color, it.id) eventTypeNames.add(it.displayName.toLowerCase()) dbHelper.insertEventType(eventType) } } - CalDAVEventsHandler(applicationContext).refreshCalendars() + CalDAVEventsHandler(applicationContext).refreshCalendars {} } oldCalendarIds.filter { !newCalendarIds.contains(it) }.forEach { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index b26626d35..33a9e73d7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -235,9 +235,11 @@ fun Context.getNewEventTimestampFromCode(dayCode: String) = Formatter.getLocalDa fun Context.getCurrentOffset() = SimpleDateFormat("Z", Locale.getDefault()).format(Date()) -fun Context.recheckCalDAVCalendars() { +fun Context.getSyncedCalDAVCalendars() = CalDAVEventsHandler(this).getCalDAVCalendars(config.caldavSyncedCalendarIDs) + +fun Context.recheckCalDAVCalendars(callback: () -> Unit) { if (config.caldavSync) { - CalDAVEventsHandler(this).refreshCalendars() + CalDAVEventsHandler(this).refreshCalendars(callback) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVEventsHandler.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVEventsHandler.kt index 8cd65a66d..5e4559b1f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVEventsHandler.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVEventsHandler.kt @@ -18,12 +18,13 @@ import com.simplemobiletools.commons.extensions.getStringValue import java.util.* class CalDAVEventsHandler(val context: Context) { - fun refreshCalendars() { + fun refreshCalendars(callback: () -> Unit) { getCalDAVCalendars(context.config.caldavSyncedCalendarIDs).forEach { val eventTypeId = context.dbHelper.getEventTypeIdWithTitle(it.displayName) CalDAVEventsHandler(context).fetchCalDAVCalendarEvents(it.id, eventTypeId) } context.scheduleCalDAVSync(true) + callback() } fun getCalDAVCalendars(ids: String = ""): List { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt index 8bdeeebce..96c163240 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt @@ -13,7 +13,7 @@ class BootCompletedReceiver : BroadcastReceiver() { context.apply { scheduleAllEvents() notifyRunningEvents() - recheckCalDAVCalendars() + recheckCalDAVCalendars {} } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/CalDAVSyncReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/CalDAVSyncReceiver.kt index 0b3322fed..1bc2cbb96 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/CalDAVSyncReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/CalDAVSyncReceiver.kt @@ -7,6 +7,6 @@ import com.simplemobiletools.calendar.extensions.recheckCalDAVCalendars class CalDAVSyncReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - context.recheckCalDAVCalendars() + context.recheckCalDAVCalendars {} } } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index fdbd0175b..7d109bde9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3c48c01d0..ac9ee8eab 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a34ea7c4d..c94865bea 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 85081f226..1ace08e32 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 7310e5b85..5f974822c 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c872bb54a..ac0adb8a1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 38af5bf92..5757653e0 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 5e7173b9f..76bcc42ba 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2ec24706e..3f27ddf57 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -202,6 +202,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minutę diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 28416a73b..1f5cfb83e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 74bbafde4..28cb50aec 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -197,6 +197,8 @@ Gerir calendários sincronizados Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minuto diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index eb22f4a55..58a5644f7 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -211,6 +211,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d минута diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index f339f72aa..de89fb3a1 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -203,7 +203,9 @@ Zvoľte kalendáre pre synchronizáciu Spravovať synchronizované kalendáre Uložiť iba lokálne - Obnoviť CalDAV účty Refresh CalDAV accounts + Obnoviť CalDAV účty + Obnovuje sa… + Obnovovanie ukončené %1$d minútu diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index ed2308eef..cea00a05c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minut diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5828e9606..b7c74cea5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fd8e2ed75..c8388baa9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -197,6 +197,8 @@ Manage synced calendars Store locally only Refresh CalDAV accounts + Refreshing… + Refreshing complete %1$d minute