refresh the calendar after fetching google events
This commit is contained in:
parent
3767883d19
commit
84d710dd6d
|
@ -18,6 +18,7 @@ import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter
|
import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter
|
||||||
import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter
|
import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter
|
||||||
import com.simplemobiletools.calendar.adapters.MyYearPagerAdapter
|
import com.simplemobiletools.calendar.adapters.MyYearPagerAdapter
|
||||||
|
import com.simplemobiletools.calendar.asynctasks.FetchGoogleEventsTask
|
||||||
import com.simplemobiletools.calendar.dialogs.ExportEventsDialog
|
import com.simplemobiletools.calendar.dialogs.ExportEventsDialog
|
||||||
import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog
|
import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog
|
||||||
import com.simplemobiletools.calendar.dialogs.ImportEventsDialog
|
import com.simplemobiletools.calendar.dialogs.ImportEventsDialog
|
||||||
|
@ -26,6 +27,7 @@ import com.simplemobiletools.calendar.fragments.EventListFragment
|
||||||
import com.simplemobiletools.calendar.fragments.WeekFragment
|
import com.simplemobiletools.calendar.fragments.WeekFragment
|
||||||
import com.simplemobiletools.calendar.helpers.*
|
import com.simplemobiletools.calendar.helpers.*
|
||||||
import com.simplemobiletools.calendar.helpers.Formatter
|
import com.simplemobiletools.calendar.helpers.Formatter
|
||||||
|
import com.simplemobiletools.calendar.interfaces.GoogleSyncListener
|
||||||
import com.simplemobiletools.calendar.interfaces.NavigationListener
|
import com.simplemobiletools.calendar.interfaces.NavigationListener
|
||||||
import com.simplemobiletools.calendar.models.Event
|
import com.simplemobiletools.calendar.models.Event
|
||||||
import com.simplemobiletools.calendar.models.EventType
|
import com.simplemobiletools.calendar.models.EventType
|
||||||
|
@ -87,6 +89,10 @@ class MainActivity : SimpleActivity(), NavigationListener {
|
||||||
if (!hasGetAccountsPermission()) {
|
if (!hasGetAccountsPermission()) {
|
||||||
config.googleSync = false
|
config.googleSync = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.syncAccountName.isNotEmpty()) {
|
||||||
|
FetchGoogleEventsTask(this, googleSyncListener).execute()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -527,6 +533,12 @@ class MainActivity : SimpleActivity(), NavigationListener {
|
||||||
supportFragmentManager.beginTransaction().replace(R.id.calendar_event_list_holder, EventListFragment(), "").commit()
|
supportFragmentManager.beginTransaction().replace(R.id.calendar_event_list_holder, EventListFragment(), "").commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val googleSyncListener = object : GoogleSyncListener {
|
||||||
|
override fun syncCompleted() {
|
||||||
|
refreshViewPager()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun goLeft() {
|
override fun goLeft() {
|
||||||
main_view_pager.currentItem = main_view_pager.currentItem - 1
|
main_view_pager.currentItem = main_view_pager.currentItem - 1
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,12 +14,13 @@ import com.simplemobiletools.calendar.extensions.dbHelper
|
||||||
import com.simplemobiletools.calendar.extensions.getGoogleSyncService
|
import com.simplemobiletools.calendar.extensions.getGoogleSyncService
|
||||||
import com.simplemobiletools.calendar.extensions.seconds
|
import com.simplemobiletools.calendar.extensions.seconds
|
||||||
import com.simplemobiletools.calendar.helpers.*
|
import com.simplemobiletools.calendar.helpers.*
|
||||||
|
import com.simplemobiletools.calendar.interfaces.GoogleSyncListener
|
||||||
import com.simplemobiletools.calendar.models.*
|
import com.simplemobiletools.calendar.models.*
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
// more info about event fields at https://developers.google.com/google-apps/calendar/v3/reference/events/insert
|
// more info about event fields at https://developers.google.com/google-apps/calendar/v3/reference/events/insert
|
||||||
class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List<Event>>() {
|
class FetchGoogleEventsTask(val activity: Activity, val googleSyncListener: GoogleSyncListener? = null) : AsyncTask<Void, Void, String>() {
|
||||||
private val CONFIRMED = "confirmed"
|
private val CONFIRMED = "confirmed"
|
||||||
private val ITEMS = "items"
|
private val ITEMS = "items"
|
||||||
private val OVERRIDES = "overrides"
|
private val OVERRIDES = "overrides"
|
||||||
|
@ -32,15 +33,16 @@ class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List
|
||||||
private var eventColors = SparseIntArray()
|
private var eventColors = SparseIntArray()
|
||||||
private var service = activity.getGoogleSyncService()
|
private var service = activity.getGoogleSyncService()
|
||||||
|
|
||||||
override fun doInBackground(vararg params: Void): List<Event>? {
|
override fun doInBackground(vararg params: Void): String {
|
||||||
return try {
|
try {
|
||||||
getColors()
|
getColors()
|
||||||
getDataFromApi()
|
getDataFromApi()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
lastError = e
|
lastError = e
|
||||||
cancel(true)
|
cancel(true)
|
||||||
null
|
|
||||||
}
|
}
|
||||||
|
googleSyncListener?.syncCompleted()
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getColors() {
|
private fun getColors() {
|
||||||
|
@ -50,8 +52,7 @@ class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getDataFromApi(): List<Event> {
|
private fun getDataFromApi() {
|
||||||
val parsedEvents = ArrayList<Event>()
|
|
||||||
var currToken = ""
|
var currToken = ""
|
||||||
while (true) {
|
while (true) {
|
||||||
val events = service.events().list(PRIMARY)
|
val events = service.events().list(PRIMARY)
|
||||||
|
@ -60,12 +61,10 @@ class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List
|
||||||
|
|
||||||
for ((key, value) in events) {
|
for ((key, value) in events) {
|
||||||
if (key == ITEMS) {
|
if (key == ITEMS) {
|
||||||
dbHelper.getEventTypes {
|
eventTypes = dbHelper.fetchEventTypes()
|
||||||
eventTypes = it
|
|
||||||
parseEvents(value.toString())
|
parseEvents(value.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (events.containsKey(NEXT_PAGE_TOKEN)) {
|
if (events.containsKey(NEXT_PAGE_TOKEN)) {
|
||||||
currToken = events[NEXT_PAGE_TOKEN] as String
|
currToken = events[NEXT_PAGE_TOKEN] as String
|
||||||
|
@ -73,15 +72,12 @@ class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return parsedEvents
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseEvents(json: String): List<Event> {
|
private fun parseEvents(json: String) {
|
||||||
var updateEvent = false
|
var updateEvent = false
|
||||||
var eventId = 0
|
var eventId = 0
|
||||||
val importIDs = activity.dbHelper.getImportIds()
|
val importIDs = activity.dbHelper.getImportIds()
|
||||||
val events = ArrayList<Event>()
|
|
||||||
val token = object : TypeToken<List<GoogleEvent>>() {}.type
|
val token = object : TypeToken<List<GoogleEvent>>() {}.type
|
||||||
val googleEvents = Gson().fromJson<ArrayList<GoogleEvent>>(json, token) ?: ArrayList<GoogleEvent>(8)
|
val googleEvents = Gson().fromJson<ArrayList<GoogleEvent>>(json, token) ?: ArrayList<GoogleEvent>(8)
|
||||||
for (googleEvent in googleEvents) {
|
for (googleEvent in googleEvents) {
|
||||||
|
@ -136,7 +132,6 @@ class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List
|
||||||
dbHelper.insert(event) {}
|
dbHelper.insert(event) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return events
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getEventTypeId(colorId: Int): Int {
|
private fun getEventTypeId(colorId: Int): Int {
|
||||||
|
|
|
@ -736,11 +736,11 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||||
|
|
||||||
fun getEventTypes(callback: (types: ArrayList<EventType>) -> Unit) {
|
fun getEventTypes(callback: (types: ArrayList<EventType>) -> Unit) {
|
||||||
Thread({
|
Thread({
|
||||||
fetchEventTypes(callback)
|
callback(fetchEventTypes())
|
||||||
}).start()
|
}).start()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fetchEventTypes(callback: (types: ArrayList<EventType>) -> Unit) {
|
fun fetchEventTypes(): ArrayList<EventType> {
|
||||||
val eventTypes = ArrayList<EventType>(3)
|
val eventTypes = ArrayList<EventType>(3)
|
||||||
val cols = arrayOf(COL_TYPE_ID, COL_TYPE_TITLE, COL_TYPE_COLOR)
|
val cols = arrayOf(COL_TYPE_ID, COL_TYPE_TITLE, COL_TYPE_COLOR)
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
|
@ -758,7 +758,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
callback.invoke(eventTypes)
|
return eventTypes
|
||||||
}
|
}
|
||||||
|
|
||||||
fun doEventTypesContainEvent(types: ArrayList<Int>): Boolean {
|
fun doEventTypesContainEvent(types: ArrayList<Int>): Boolean {
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package com.simplemobiletools.calendar.interfaces
|
||||||
|
|
||||||
|
interface GoogleSyncListener {
|
||||||
|
fun syncCompleted()
|
||||||
|
}
|
Loading…
Reference in New Issue