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 cf94728aa..466225d96 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -328,7 +328,7 @@ class SettingsActivity : SimpleActivity() { showAccountChooser() } else { credential.selectedAccountName = config.syncAccountName - FetchGoogleEventsTask(this, credential).execute() + FetchGoogleEventsTask(this).execute() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt index 33636e8b3..6eacb7f89 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt @@ -4,17 +4,14 @@ import android.app.Activity import android.graphics.Color import android.os.AsyncTask import android.util.SparseIntArray -import com.google.api.client.extensions.android.http.AndroidHttp -import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException -import com.google.api.client.json.gson.GsonFactory import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken -import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.activities.SettingsActivity import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.dbHelper +import com.simplemobiletools.calendar.extensions.getGoogleSyncService import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.models.* @@ -22,7 +19,7 @@ import org.joda.time.DateTime import java.util.* // more info about event fields at https://developers.google.com/google-apps/calendar/v3/reference/events/insert -class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCredential) : AsyncTask>() { +class FetchGoogleEventsTask(val activity: Activity) : AsyncTask>() { private val CONFIRMED = "confirmed" private val PRIMARY = "primary" private val ITEMS = "items" @@ -30,18 +27,11 @@ class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCre private val POPUP = "popup" private val NEXT_PAGE_TOKEN = "nextPageToken" - private var service: com.google.api.services.calendar.Calendar private var lastError: Exception? = null private var dbHelper = activity.dbHelper private var eventTypes = ArrayList() private var eventColors = SparseIntArray() - - init { - val transport = AndroidHttp.newCompatibleTransport() - service = com.google.api.services.calendar.Calendar.Builder(transport, GsonFactory(), credential) - .setApplicationName(activity.resources.getString(R.string.app_name)) - .build() - } + private var service = activity.getGoogleSyncService() override fun doInBackground(vararg params: Void): List? { return try { 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 c724f895f..24b212bd2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -13,6 +13,11 @@ import android.graphics.Color import android.net.Uri import android.os.Build import android.support.v7.app.NotificationCompat +import com.google.api.client.extensions.android.http.AndroidHttp +import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential +import com.google.api.client.json.gson.GsonFactory +import com.google.api.client.util.ExponentialBackOff +import com.google.api.services.calendar.CalendarScopes import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.helpers.* @@ -225,6 +230,15 @@ fun Context.launchNewEventIntent(startNewTask: Boolean = false, today: Boolean = } } +fun Context.getGoogleSyncService(): com.google.api.services.calendar.Calendar { + val credential = GoogleAccountCredential.usingOAuth2(this, arrayListOf(CalendarScopes.CALENDAR)).setBackOff(ExponentialBackOff()) + credential.selectedAccountName = config.syncAccountName + val transport = AndroidHttp.newCompatibleTransport() + return com.google.api.services.calendar.Calendar.Builder(transport, GsonFactory(), credential) + .setApplicationName(resources.getString(R.string.app_name)) + .build() +} + fun Context.getNewEventTimestampFromCode(dayCode: String) = Formatter.getLocalDateTimeFromCode(dayCode).withTime(13, 0, 0, 0).seconds() fun Context.getCurrentOffset() = SimpleDateFormat("Z", Locale.getDefault()).format(Date()) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt index 2d6259433..f1d293aaf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt @@ -3,5 +3,5 @@ package com.simplemobiletools.calendar.models import com.google.gson.JsonArray import com.google.gson.JsonObject -data class GoogleEvent(val summary: String, val description: String, val status: String, val start: GoogleEventDateTime, val end: GoogleEventDateTime, +data class GoogleEvent(val summary: String, val description: String?, val status: String, val start: GoogleEventDateTime, val end: GoogleEventDateTime, val reminders: JsonObject, val recurrence: JsonArray?, val iCalUID: String, val colorId: Int, val updated: String)