make google sync service fetching a context extension function

This commit is contained in:
tibbi
2017-07-23 17:34:20 +02:00
parent 2564c17434
commit d7dde0517c
4 changed files with 19 additions and 15 deletions

View File

@@ -328,7 +328,7 @@ class SettingsActivity : SimpleActivity() {
showAccountChooser() showAccountChooser()
} else { } else {
credential.selectedAccountName = config.syncAccountName credential.selectedAccountName = config.syncAccountName
FetchGoogleEventsTask(this, credential).execute() FetchGoogleEventsTask(this).execute()
} }
} }

View File

@@ -4,17 +4,14 @@ import android.app.Activity
import android.graphics.Color import android.graphics.Color
import android.os.AsyncTask import android.os.AsyncTask
import android.util.SparseIntArray 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.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException
import com.google.api.client.json.gson.GsonFactory
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SettingsActivity import com.simplemobiletools.calendar.activities.SettingsActivity
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
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.models.* import com.simplemobiletools.calendar.models.*
@@ -22,7 +19,7 @@ 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, credential: GoogleAccountCredential) : AsyncTask<Void, Void, List<Event>>() { class FetchGoogleEventsTask(val activity: Activity) : AsyncTask<Void, Void, List<Event>>() {
private val CONFIRMED = "confirmed" private val CONFIRMED = "confirmed"
private val PRIMARY = "primary" private val PRIMARY = "primary"
private val ITEMS = "items" private val ITEMS = "items"
@@ -30,18 +27,11 @@ class FetchGoogleEventsTask(val activity: Activity, credential: GoogleAccountCre
private val POPUP = "popup" private val POPUP = "popup"
private val NEXT_PAGE_TOKEN = "nextPageToken" private val NEXT_PAGE_TOKEN = "nextPageToken"
private var service: com.google.api.services.calendar.Calendar
private var lastError: Exception? = null private var lastError: Exception? = null
private var dbHelper = activity.dbHelper private var dbHelper = activity.dbHelper
private var eventTypes = ArrayList<EventType>() private var eventTypes = ArrayList<EventType>()
private var eventColors = SparseIntArray() private var eventColors = SparseIntArray()
private var service = activity.getGoogleSyncService()
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()
}
override fun doInBackground(vararg params: Void): List<Event>? { override fun doInBackground(vararg params: Void): List<Event>? {
return try { return try {

View File

@@ -13,6 +13,11 @@ import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.support.v7.app.NotificationCompat 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.R
import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.EventActivity
import com.simplemobiletools.calendar.helpers.* 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.getNewEventTimestampFromCode(dayCode: String) = Formatter.getLocalDateTimeFromCode(dayCode).withTime(13, 0, 0, 0).seconds()
fun Context.getCurrentOffset() = SimpleDateFormat("Z", Locale.getDefault()).format(Date()) fun Context.getCurrentOffset() = SimpleDateFormat("Z", Locale.getDefault()).format(Date())

View File

@@ -3,5 +3,5 @@ package com.simplemobiletools.calendar.models
import com.google.gson.JsonArray import com.google.gson.JsonArray
import com.google.gson.JsonObject 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) val reminders: JsonObject, val recurrence: JsonArray?, val iCalUID: String, val colorId: Int, val updated: String)