diff --git a/app/build.gradle b/app/build.gradle
index ef6c24769..bfbb14e26 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,20 +42,7 @@ dependencies {
compile 'com.facebook.stetho:stetho:1.4.1'
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
compile 'com.android.support:multidex:1.0.1'
-
compile 'com.google.code.gson:gson:2.8.0'
- compile('com.google.http-client:google-http-client-gson:1.22.0') {
- exclude group: 'org.apache.httpcomponents'
- }
-
- compile 'com.google.android.gms:play-services-auth:10.0.1'
- compile('com.google.api-client:google-api-client-android:1.22.0') {
- exclude group: 'org.apache.httpcomponents'
- }
- compile('com.google.apis:google-api-services-calendar:v3-rev249-1.22.0') {
- exclude group: 'org.apache.httpcomponents'
- }
-
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2e07899cf..bf3c1014c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,12 +7,8 @@
-
-
-
-
-
-
+
+
-
-
()
- val reminders = calendar.defaultReminders
- reminders.forEach {
- if (it.method == POPUP) {
- reminderMinutes.add(it.minutes)
- }
- }
- config.googleDefaultReminders = reminderMinutes.joinToString(",")
- }
-
- private val googleSyncListener = object : GoogleSyncListener {
- override fun syncCompleted() {
- toast(R.string.events_imported_successfully)
- }
- }
-
- private fun offerEventsUpload(eventsToExport: ArrayList) {
- ConfirmationDialog(this, messageId = R.string.google_sync_existing) {
- Thread({
- eventsToExport.forEach {
- try {
- GoogleSyncHandler().tryInsertToGoogle(this, it)
- } catch (e: Exception) {
- }
- }
- }).start()
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- if (requestCode == ACCOUNTS_PERMISSION) {
- if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- showAccountChooser()
- } else {
- disableGoogleSync()
- }
- } else if (requestCode == CALENDAR_PERMISSION) {
+ if (requestCode == CALENDAR_PERMISSION) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
toggleCaldavSync()
}
}
}
-
- private fun showAccountChooser() {
- if (config.syncAccountName.isEmpty()) {
- // more about oauth at https://developers.google.com/google-apps/calendar/auth
- val credential = GoogleAccountCredential.usingOAuth2(this, arrayListOf(CalendarScopes.CALENDAR)).setBackOff(ExponentialBackOff())
- startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_NAME)
- }
- }
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt
deleted file mode 100644
index 82258c30c..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt
+++ /dev/null
@@ -1,227 +0,0 @@
-package com.simplemobiletools.calendar.asynctasks
-
-import android.content.Context
-import android.graphics.Color
-import android.os.AsyncTask
-import android.util.SparseIntArray
-import android.widget.Toast
-import com.google.api.client.googleapis.json.GoogleJsonResponseException
-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.extensions.*
-import com.simplemobiletools.calendar.helpers.*
-import com.simplemobiletools.calendar.interfaces.GoogleSyncListener
-import com.simplemobiletools.calendar.models.*
-import com.simplemobiletools.commons.extensions.isOnMainThread
-import com.simplemobiletools.commons.extensions.toast
-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 context: Context, val googleSyncListener: GoogleSyncListener? = null) : AsyncTask() {
- private val ITEMS = "items"
- private val NEXT_PAGE_TOKEN = "nextPageToken"
-
- private var dbHelper = context.dbHelper
- private var eventTypes = ArrayList()
- private var eventColors = SparseIntArray()
- private var service = context.getGoogleSyncService()
- private var parseError: Exception? = null
- private var noTitleText = context.getString(R.string.no_title)
-
- override fun doInBackground(vararg params: Void): String {
- if (!context.isGoogleSyncActive() || !context.isOnline())
- return ""
-
- // always handle queued operations before fetching new data
- val queuedOperations = context.googleSyncQueue.getOperations()
- queuedOperations.forEach {
- when (it.operation) {
- OPERATION_INSERT -> {
- val event = dbHelper.getEventWithId(it.eventId)
- if (event != null)
- GoogleSyncHandler().insertToGoogle(context, event)
- context.googleSyncQueue.clearOperationsOf(it.eventId)
- }
- OPERATION_UPDATE -> {
- val event = dbHelper.getEventWithId(it.eventId)
- if (event != null)
- GoogleSyncHandler().updateGoogleEvent(context, event)
- context.googleSyncQueue.clearOperationsOf(it.eventId)
- }
- OPERATION_DELETE -> {
- GoogleSyncHandler().deleteFromGoogle(context, it.importId)
- context.googleSyncQueue.clearOperationsOf(it.eventId)
- }
- }
- }
-
- try {
- getColors()
- getDataFromApi()
- googleSyncListener?.syncCompleted()
- } catch (e: Exception) {
- parseError = e
- }
- return ""
- }
-
- override fun onPostExecute(result: String?) {
- super.onPostExecute(result)
- if (context.isOnMainThread() && parseError != null && parseError is GoogleJsonResponseException) {
- val msg = String.format(context.getString(R.string.google_sync_error_fetch), parseError!!.getGoogleMessageError())
- context.toast(msg, Toast.LENGTH_LONG)
- }
- }
-
- private fun getColors() {
- val colors = service.colors().get().execute()
- for ((id, color) in colors.event.entries) {
- eventColors.put(id.toInt(), Color.parseColor(color.background))
- }
- }
-
- private fun getDataFromApi() {
- var currToken = ""
- while (true) {
- service.colors().get().execute()
- val events = service.events().list(PRIMARY)
- .setPageToken(currToken)
- .execute()
-
- for ((key, value) in events) {
- if (key == ITEMS) {
- eventTypes = dbHelper.fetchEventTypes()
- val localGoogleEvents = dbHelper.getGoogleSyncEvents()
- val remoteGoogleEvents = parseEvents(value.toString())
- removeRedundantLocalEvents(localGoogleEvents, remoteGoogleEvents)
- }
- }
-
- if (events.containsKey(NEXT_PAGE_TOKEN)) {
- currToken = events[NEXT_PAGE_TOKEN] as String
- } else {
- break
- }
- }
- }
-
- private fun parseEvents(json: String): ArrayList {
- val remoteImportIds = ArrayList()
- var updateEvent = false
- var eventId = 0
- val importIDs = context.dbHelper.getImportIds()
- val token = object : TypeToken>() {}.type
- val googleEvents = Gson().fromJson>(json, token) ?: ArrayList(8)
- for (googleEvent in googleEvents) {
- val importId = googleEvent.id
- remoteImportIds.add(importId)
- if (!googleEvent.status.equals(CONFIRMED, true))
- continue
-
- val lastUpdate = DateTime(googleEvent.updated).millis
- if (importIDs.contains(importId)) {
- val oldEvent = dbHelper.getEventWithImportId(importId)
- if (oldEvent != null) {
- if (oldEvent.lastUpdated >= lastUpdate) {
- continue
- } else {
- updateEvent = true
- eventId = oldEvent.id
- }
- }
- }
-
- val start = googleEvent.start
- val end = googleEvent.end
- var startTS: Int
- var endTS: Int
- var flags = 0
-
- if (start.date != null) {
- startTS = DateTime(start.date).withHourOfDay(1).seconds()
- endTS = DateTime(end.date).withHourOfDay(1).seconds()
- flags = flags or FLAG_ALL_DAY
- } else {
- startTS = DateTime(start.dateTime).seconds()
- endTS = DateTime(end.dateTime).seconds()
- }
-
- val summary = googleEvent.summary ?: "($noTitleText)"
- val description = googleEvent.description ?: ""
- val reminders = getReminders(googleEvent.reminders)
- val repeatRule = getRepeatRule(googleEvent, startTS)
- val eventTypeId = getEventTypeId(googleEvent.colorId)
- val event = Event(eventId, startTS, endTS, summary, description, reminders.getOrElse(0, { -1 }),
- reminders.getOrElse(1, { -1 }), reminders.getOrElse(2, { -1 }), repeatRule.repeatInterval, importId, flags, repeatRule.repeatLimit,
- repeatRule.repeatRule, eventTypeId, lastUpdated = lastUpdate, source = SOURCE_GOOGLE_SYNC)
-
- if (event.getIsAllDay() && endTS > startTS) {
- event.endTS -= DAY
- }
-
- if (updateEvent) {
- dbHelper.update(event) {}
- } else {
- importIDs.add(importId)
- dbHelper.insert(event) {}
- }
- }
- return remoteImportIds
- }
-
- private fun removeRedundantLocalEvents(localGoogleEvents: List, remoteGoogleEvents: ArrayList) {
- val filtered = localGoogleEvents.filter { !remoteGoogleEvents.contains(it.importId) }
- val filteredIds = Array(filtered.size, { i -> (filtered[i].id.toString()) })
- dbHelper.deleteEvents(filteredIds, false)
- }
-
- private fun getEventTypeId(colorId: Int): Int {
- var eventTypeId = -1
- val eventType = "google_sync_$colorId"
- eventTypes.forEach {
- if (it.title.toLowerCase() == eventType)
- eventTypeId = it.id
- }
-
- if (eventTypeId == -1) {
- val newColor = if (eventColors[colorId] != 0) eventColors[colorId] else context.config.googleDefaultEventColor
- val newEventType = EventType(0, eventType, newColor)
- eventTypeId = dbHelper.insertEventType(newEventType)
- eventTypes.add(newEventType)
- }
-
- return eventTypeId
- }
-
- private fun getRepeatRule(googleEvent: GoogleEvent, startTS: Int): RepeatRule {
- val recurrence = googleEvent.recurrence?.firstOrNull()
- return if (recurrence != null) {
- Parser().parseRepeatInterval(recurrence.toString().trim('\"').substring(RRULE.length), startTS)
- } else {
- RepeatRule(0, 0, 0)
- }
- }
-
- private fun getReminders(json: JsonObject?): List {
- val reminderMinutes = ArrayList()
- if (json?.has(OVERRIDES) == true) {
- val array = json.getAsJsonArray(OVERRIDES)
- val token = object : TypeToken>() {}.type
- val reminders = Gson().fromJson>(array, token) ?: ArrayList(2)
- for ((method, minutes) in reminders) {
- if (method == POPUP) {
- reminderMinutes.add(minutes)
- }
- }
- } else if (json?.has(USE_DEFAULT) == true) {
- val minutes = context.config.googleDefaultReminders.splitToSequence(',')
- minutes.forEach {
- reminderMinutes.add(it.toInt())
- }
- }
- return reminderMinutes
- }
-}
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 34b55e48b..fdf1ff621 100644
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt
@@ -12,22 +12,15 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
-import android.net.ConnectivityManager
import android.net.Uri
import android.os.Build
import android.support.v4.content.ContextCompat
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.*
import com.simplemobiletools.calendar.helpers.Formatter
import com.simplemobiletools.calendar.models.Event
-import com.simplemobiletools.calendar.receivers.GoogleSyncReceiver
import com.simplemobiletools.calendar.receivers.NotificationReceiver
import com.simplemobiletools.calendar.services.SnoozeService
import com.simplemobiletools.commons.extensions.getContrastColor
@@ -237,41 +230,10 @@ 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.isOnline(): Boolean {
- val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
- return connectivityManager.activeNetworkInfo != null
-}
-
-fun Context.scheduleGoogleSync(activate: Boolean) {
- val syncIntent = Intent(this, GoogleSyncReceiver::class.java)
- val pendingIntent = PendingIntent.getBroadcast(this, 0, syncIntent, PendingIntent.FLAG_CANCEL_CURRENT)
- val alarm = getSystemService(Context.ALARM_SERVICE) as AlarmManager
-
- if (activate) {
- val syncCheckInterval = 4 * AlarmManager.INTERVAL_HOUR
- alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + syncCheckInterval, syncCheckInterval, pendingIntent)
- } else {
- alarm.cancel(pendingIntent)
- }
-}
-
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.isGoogleSyncActive() = config.googleSync && config.syncAccountName.isNotEmpty()
-
val Context.config: Config get() = Config.newInstance(this)
val Context.dbHelper: DBHelper get() = DBHelper.newInstance(this)
-
-val Context.googleSyncQueue: GoogleSyncQueueDB get() = GoogleSyncQueueDB.newInstance(this)
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Exception.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Exception.kt
deleted file mode 100644
index e80ed6dde..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Exception.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.simplemobiletools.calendar.extensions
-
-import com.google.gson.Gson
-import com.simplemobiletools.calendar.models.GoogleError
-
-fun Exception.getGoogleMessageError(): String {
- val json = message!!.substring(message!!.indexOf('{'))
- val error = Gson().fromJson(json, GoogleError::class.java)
- return error.message
-}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt
index 86b0d7eed..fc3751767 100644
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt
@@ -4,8 +4,6 @@ import android.content.Context
import android.media.RingtoneManager
import android.text.format.DateFormat
import com.simplemobiletools.calendar.R
-import com.simplemobiletools.calendar.extensions.googleSyncQueue
-import com.simplemobiletools.calendar.extensions.scheduleGoogleSync
import com.simplemobiletools.commons.helpers.BaseConfig
import java.util.*
@@ -72,32 +70,10 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getInt(FONT_SIZE, FONT_SIZE_MEDIUM)
set(size) = prefs.edit().putInt(FONT_SIZE, size).apply()
- var googleSync: Boolean
- get() = prefs.getBoolean(GOOGLE_SYNC, false)
- set(googleSync) {
- context.scheduleGoogleSync(googleSync)
- if (!googleSync)
- context.googleSyncQueue.clearQueue()
-
- prefs.edit().putBoolean(GOOGLE_SYNC, googleSync).apply()
- }
-
var caldavSync: Boolean
get() = prefs.getBoolean(CALDAV_SYNC, false)
set(caldavSync) = prefs.edit().putBoolean(CALDAV_SYNC, caldavSync).apply()
- var syncAccountName: String
- get() = prefs.getString(SYNC_ACCOUNT_NAME, "")
- set(syncAccountName) = prefs.edit().putString(SYNC_ACCOUNT_NAME, syncAccountName).apply()
-
- var googleDefaultEventColor: Int
- get() = prefs.getInt(GOOGLE_DEFAULT_EVENT_COLOR, primaryColor)
- set(color) = prefs.edit().putInt(GOOGLE_DEFAULT_EVENT_COLOR, color).apply()
-
- var googleDefaultReminders: String
- get() = prefs.getString(GOOGLE_DEFAULT_REMINDERS, "")
- set(reminders) = prefs.edit().putString(GOOGLE_DEFAULT_REMINDERS, reminders).apply()
-
fun addDisplayEventType(type: String) {
addDisplayEventTypes(HashSet(Arrays.asList(type)))
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt
index ad564622b..dd6a081ed 100644
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt
@@ -41,13 +41,10 @@ val VIEW = "view"
val REMINDER_MINUTES = "reminder_minutes"
val DISPLAY_EVENT_TYPES = "display_event_types"
val FONT_SIZE = "font_size"
-val GOOGLE_SYNC = "google_sync"
val CALDAV_SYNC = "caldav_sync"
val SYNC_ACCOUNT_NAME = "sync_account_name"
val SNOOZE_DELAY = "snooze_delay"
val DISPLAY_PAST_EVENTS = "display_past_events"
-val GOOGLE_DEFAULT_EVENT_COLOR = "google_default_event_color"
-val GOOGLE_DEFAULT_REMINDERS = "google_default_reminders"
val letterIDs = intArrayOf(R.string.sunday_letter, R.string.monday_letter, R.string.tuesday_letter, R.string.wednesday_letter,
R.string.thursday_letter, R.string.friday_letter, R.string.saturday_letter)
@@ -121,15 +118,4 @@ val FONT_SIZE_MEDIUM = 1
val FONT_SIZE_LARGE = 2
val SOURCE_SIMPLE_CALENDAR = 0
-val SOURCE_GOOGLE_SYNC = 1
val SOURCE_IMPORTED_ICS = 2
-
-// Google Sync
-val PRIMARY = "primary"
-val POPUP = "popup"
-val OPERATION_INSERT = 1
-val OPERATION_UPDATE = 2
-val OPERATION_DELETE = 3
-val OVERRIDES = "overrides"
-val DEFAULT_REMINDERS = "defaultReminders"
-val USE_DEFAULT = "useDefault"
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt
index 3629621ba..afd24c406 100644
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt
@@ -323,7 +323,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
return null
}
- fun deleteEvents(ids: Array, deleteFromGoogle: Boolean = true) {
+ fun deleteEvents(ids: Array) {
val args = TextUtils.join(", ", ids)
val selection = "$MAIN_TABLE_NAME.$COL_ID IN ($args)"
val cursor = getEventsCursor(selection)
@@ -344,15 +344,10 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
context.cancelNotification(it.toInt())
}
- deleteChildEvents(args, deleteFromGoogle)
- if (deleteFromGoogle) {
- events.forEach {
- GoogleSyncHandler().tryDeleteFromGoogle(context, it)
- }
- }
+ deleteChildEvents(args)
}
- private fun deleteChildEvents(ids: String, deleteFromGoogle: Boolean) {
+ private fun deleteChildEvents(ids: String) {
val projection = arrayOf(COL_ID)
val selection = "$COL_PARENT_EVENT_ID IN ($ids)"
val childIds = ArrayList()
@@ -370,19 +365,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
}
if (childIds.isNotEmpty())
- deleteEvents(childIds.toTypedArray(), deleteFromGoogle)
- }
-
- fun getGoogleSyncEvents(): List {
- val selection = "$COL_SOURCE = $SOURCE_GOOGLE_SYNC"
- val cursor = getEventsCursor(selection)
- return fillEvents(cursor)
- }
-
- fun deleteAllGoogleSyncEvents() {
- val events = getGoogleSyncEvents()
- val eventIDs = Array(events.size, { i -> (events[i].id.toString()) })
- deleteEvents(eventIDs, false)
+ deleteEvents(childIds.toTypedArray())
}
fun addEventRepeatException(parentEventId: Int, occurrenceTS: Int) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncHandler.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncHandler.kt
deleted file mode 100644
index cdf387967..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncHandler.kt
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.simplemobiletools.calendar.helpers
-
-import android.content.Context
-import android.widget.Toast
-import com.google.api.client.googleapis.json.GoogleJsonResponseException
-import com.google.api.services.calendar.model.EventDateTime
-import com.google.api.services.calendar.model.EventReminder
-import com.simplemobiletools.calendar.R
-import com.simplemobiletools.calendar.activities.SimpleActivity
-import com.simplemobiletools.calendar.extensions.*
-import com.simplemobiletools.calendar.models.Event
-import com.simplemobiletools.commons.extensions.toast
-import java.util.*
-
-class GoogleSyncHandler {
- fun tryInsertToGoogle(activity: SimpleActivity, event: Event) {
- if (activity.isGoogleSyncActive()) {
- if (activity.isOnline()) {
- Thread({
- val errorMsg = insertToGoogle(activity, event)
- if (errorMsg.isNotEmpty()) {
- val msg = String.format(activity.getString(R.string.google_sync_error_insert), errorMsg)
- activity.toast(msg, Toast.LENGTH_LONG)
- }
- }).start()
- } else {
- activity.googleSyncQueue.addOperation(event.id, OPERATION_INSERT, event.importId)
- }
- }
- }
-
- fun insertToGoogle(context: Context, event: Event): String {
- val googleEvent = mergeMyEventToGoogleEvent(com.google.api.services.calendar.model.Event(), event)
- try {
- context.getGoogleSyncService().events().insert(PRIMARY, googleEvent).execute()
- } catch (e: GoogleJsonResponseException) {
- return e.getGoogleMessageError()
- }
- return ""
- }
-
- fun tryUpdateGoogleEvent(activity: SimpleActivity, event: Event) {
- if (activity.isGoogleSyncActive()) {
- if (activity.isOnline()) {
- Thread({
- val errorMsg = updateGoogleEvent(activity.applicationContext, event)
- if (errorMsg.isNotEmpty()) {
- val msg = String.format(activity.getString(R.string.google_sync_error_update), errorMsg)
- activity.toast(msg, Toast.LENGTH_LONG)
- }
- }).start()
- } else {
- activity.googleSyncQueue.addOperation(event.id, OPERATION_UPDATE, event.importId)
- }
- }
- }
-
- fun updateGoogleEvent(context: Context, event: Event): String {
- try {
- val googleEvent = context.getGoogleSyncService().events().get(PRIMARY, event.importId).execute()
- val newGoogleEvent = mergeMyEventToGoogleEvent(googleEvent, event)
- context.getGoogleSyncService().events().update(PRIMARY, newGoogleEvent.id, newGoogleEvent).execute()
- } catch (e: GoogleJsonResponseException) {
- return e.getGoogleMessageError()
- }
- return ""
- }
-
- fun tryDeleteFromGoogle(context: Context, event: Event) {
- Thread({
- if (context.isOnline()) {
- deleteFromGoogle(context, event.importId)
- } else {
- context.googleSyncQueue.addOperation(event.id, OPERATION_DELETE, event.importId)
- }
- }).start()
- }
-
- fun deleteFromGoogle(context: Context, importId: String) {
- try {
- context.getGoogleSyncService().events().delete(PRIMARY, importId).execute()
- } catch (ignored: Exception) {
- }
- }
-
- private fun mergeMyEventToGoogleEvent(googleEvent: com.google.api.services.calendar.model.Event, event: Event): com.google.api.services.calendar.model.Event {
- googleEvent.apply {
- summary = event.title
- description = event.description
-
- if (event.getIsAllDay()) {
- start = EventDateTime().setDate(com.google.api.client.util.DateTime(true, event.startTS * 1000L, null))
- end = EventDateTime().setDate(com.google.api.client.util.DateTime(true, (event.endTS + DAY) * 1000L, null))
- } else {
- start = EventDateTime().setDateTime(com.google.api.client.util.DateTime(event.startTS * 1000L)).setTimeZone(TimeZone.getDefault().id)
- end = EventDateTime().setDateTime(com.google.api.client.util.DateTime(event.endTS * 1000L)).setTimeZone(TimeZone.getDefault().id)
- }
-
- id = event.importId
- status = CONFIRMED.toLowerCase()
- Parser().getShortRepeatInterval(event).let {
- if (it.isNotEmpty()) {
- recurrence = listOf(it)
- } else {
- recurrence = null
- }
- }
-
- if (event.getReminders().isNotEmpty()) {
- reminders = getEventReminders(event).setUseDefault(false)
- } else {
- reminders = com.google.api.services.calendar.model.Event.Reminders().setUseDefault(false)
- }
- }
- return googleEvent
- }
-
- private fun getEventReminders(event: Event): com.google.api.services.calendar.model.Event.Reminders {
- val reminders = ArrayList()
- event.getReminders().forEach {
- val reminder = EventReminder().setMinutes(it).setMethod(POPUP)
- reminders.add(reminder)
- }
- return com.google.api.services.calendar.model.Event.Reminders().setOverrides(reminders)
- }
-}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncQueueDB.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncQueueDB.kt
deleted file mode 100644
index c9ad93a89..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncQueueDB.kt
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.simplemobiletools.calendar.helpers
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import android.database.sqlite.SQLiteDatabase
-import android.database.sqlite.SQLiteOpenHelper
-import com.simplemobiletools.calendar.models.GoogleOperation
-import com.simplemobiletools.commons.extensions.getIntValue
-import com.simplemobiletools.commons.extensions.getStringValue
-
-// database for storing operations performed on google events locally, while the user was offline
-class GoogleSyncQueueDB private constructor(val context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
- private val OPERATIONS_TABLE_NAME = "operations"
- private val COL_ID = "id"
- private val COL_EVENT_ID = "event_id"
- private val COL_OPERATION = "operation"
- private val COL_IMPORT_ID = "import_id"
-
- private val mDb: SQLiteDatabase = writableDatabase
-
- companion object {
- private val DB_VERSION = 1
- private val DB_NAME = "googlesyncqueue.db"
- var dbInstance: GoogleSyncQueueDB? = null
-
- fun newInstance(context: Context): GoogleSyncQueueDB {
- if (dbInstance == null)
- dbInstance = GoogleSyncQueueDB(context)
-
- return dbInstance!!
- }
- }
-
- override fun onCreate(db: SQLiteDatabase) {
- db.execSQL("CREATE TABLE $OPERATIONS_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COL_EVENT_ID INTEGER, $COL_OPERATION INTEGER, " +
- "$COL_IMPORT_ID TEXT)")
- }
-
- override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
-
- }
-
- fun addOperation(eventId: Int, operation: Int, importId: String) {
- val hadInsertOperation = getOperationOf(eventId)?.operation?.equals(OPERATION_INSERT) == true
- if (operation == OPERATION_DELETE) {
- clearOperationsOf(eventId)
- if (hadInsertOperation) {
- return
- }
- }
-
- if (operation == OPERATION_UPDATE) {
- if (hadInsertOperation) {
- return
- }
- }
-
- val contentValues = ContentValues().apply {
- put(COL_EVENT_ID, eventId)
- put(COL_OPERATION, operation)
- put(COL_IMPORT_ID, importId)
- }
- mDb.insert(OPERATIONS_TABLE_NAME, null, contentValues)
- }
-
- fun getOperationOf(eventId: Int): GoogleOperation? {
- val selection = "$COL_EVENT_ID = $eventId"
- val projection = arrayOf(COL_OPERATION, COL_IMPORT_ID)
- var cursor: Cursor? = null
- try {
- cursor = mDb.query(OPERATIONS_TABLE_NAME, projection, selection, null, null, null, null)
- if (cursor?.moveToFirst() == true) {
- val operation = cursor.getIntValue(COL_OPERATION)
- val importId = cursor.getStringValue(COL_IMPORT_ID)
- return GoogleOperation(eventId, operation, importId)
- }
- } finally {
- cursor?.close()
- }
- return null
- }
-
- fun getOperations(): ArrayList {
- val operations = ArrayList()
- val projection = arrayOf(COL_EVENT_ID, COL_OPERATION, COL_IMPORT_ID)
- var cursor: Cursor? = null
- try {
- cursor = mDb.query(OPERATIONS_TABLE_NAME, projection, null, null, null, null, null)
- if (cursor?.moveToFirst() == true) {
- do {
- val eventId = cursor.getIntValue(COL_EVENT_ID)
- val operation = cursor.getIntValue(COL_OPERATION)
- val importId = cursor.getStringValue(COL_IMPORT_ID)
- operations.add(GoogleOperation(eventId, operation, importId))
- } while (cursor.moveToNext())
- }
- } finally {
- cursor?.close()
- }
- return operations
- }
-
- fun clearOperationsOf(eventId: Int) {
- val selection = "$COL_EVENT_ID = $eventId"
- mDb.delete(OPERATIONS_TABLE_NAME, selection, null)
- }
-
- fun clearQueue() {
- mDb.delete(OPERATIONS_TABLE_NAME, null, null)
- }
-}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/GoogleSyncListener.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/GoogleSyncListener.kt
deleted file mode 100644
index 73bdfe1cd..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/GoogleSyncListener.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.simplemobiletools.calendar.interfaces
-
-interface GoogleSyncListener {
- fun syncCompleted()
-}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleError.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleError.kt
deleted file mode 100644
index 1f5cd41cd..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleError.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package com.simplemobiletools.calendar.models
-
-data class GoogleError(val message: String)
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt
deleted file mode 100644
index 194eb7950..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-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,
- val reminders: JsonObject, val recurrence: JsonArray?, val id: String, val colorId: Int, val updated: String)
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventDateTime.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventDateTime.kt
deleted file mode 100644
index 05f06a844..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventDateTime.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package com.simplemobiletools.calendar.models
-
-data class GoogleEventDateTime(val date: String?, val dateTime: String?, val timeZone: String?)
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventReminder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventReminder.kt
deleted file mode 100644
index 3fda84bdc..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventReminder.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package com.simplemobiletools.calendar.models
-
-data class GoogleEventReminder(val method: String, val minutes: Int)
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleOperation.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleOperation.kt
deleted file mode 100644
index d61d74fe3..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleOperation.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package com.simplemobiletools.calendar.models
-
-data class GoogleOperation(val eventId: Int, val operation: Int, val importId: String)
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 18c3dfb82..fd48ea442 100644
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt
@@ -3,10 +3,8 @@ package com.simplemobiletools.calendar.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import com.simplemobiletools.calendar.extensions.isGoogleSyncActive
import com.simplemobiletools.calendar.extensions.notifyRunningEvents
import com.simplemobiletools.calendar.extensions.scheduleAllEvents
-import com.simplemobiletools.calendar.extensions.scheduleGoogleSync
class BootCompletedReceiver : BroadcastReceiver() {
@@ -14,7 +12,6 @@ class BootCompletedReceiver : BroadcastReceiver() {
context.apply {
scheduleAllEvents()
notifyRunningEvents()
- scheduleGoogleSync(isGoogleSyncActive())
}
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/GoogleSyncReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/GoogleSyncReceiver.kt
deleted file mode 100644
index d6b20350e..000000000
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/GoogleSyncReceiver.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.simplemobiletools.calendar.receivers
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import com.simplemobiletools.calendar.asynctasks.FetchGoogleEventsTask
-
-class GoogleSyncReceiver : BroadcastReceiver() {
-
- override fun onReceive(context: Context, arg1: Intent) {
- FetchGoogleEventsTask(context).execute()
- }
-}
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index d94568074..a0861383e 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -109,26 +109,6 @@
-
-
-
-
-
-
Keine App zum Setzen des Klingentons gefunden
Kein Klingelton gewählt
Terminbeginn kann nicht vor Terminende liegen
- Google Sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 2717821e5..2dfda7398 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -186,21 +186,12 @@
No se ha encontrado ninguna aplicación capaz de establecer el tono de llamada
Ninguno
El día no puede terminar antes de que comience
- Sincronización de Google
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index a7b928864..2b36d13c1 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -186,21 +186,12 @@
Aucune application capable de configurer la sonnerie trouvée
Aucune
Le jour ne peut pas se terminer plus tôt qu\'il ne débute
- Synchronisation Google
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml
index f964ec993..a569738c4 100644
--- a/app/src/main/res/values-hi-rIN/strings.xml
+++ b/app/src/main/res/values-hi-rIN/strings.xml
@@ -186,21 +186,12 @@
No app capable of setting ringtone found
None
The day cannot end earlier than it starts
- Google sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 000b6ca83..1e143ce17 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -186,21 +186,12 @@
No app capable of setting ringtone found
None
The day cannot end earlier than it starts
- Google sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 324f59ca9..169e580dd 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -186,21 +186,12 @@
No app capable of setting ringtone found
None
The day cannot end earlier than it starts
- Google sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 4a3a98b16..cede253c2 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -186,21 +186,12 @@
לא נמצאה אפליקציה להגדרת רינגטון
ללא
היום לא יכול להסתיים מוקדם משהוא מתחיל
- Google sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index e3774b8f3..178833d4e 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -186,21 +186,12 @@
No app capable of setting ringtone found
None
The day cannot end earlier than it starts
- Google sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 361b432ac..0bbea0196 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -191,21 +191,12 @@
Nie znalazłem aplikacji mogącej ustawiać dzwonki
Żaden
Dzień nie może zakończyć się wcześniej niż się zaczyna
- Synchronizacja z Google
CalDAV sync
Pokazuj wydarzenia z przeszłości
Opóźnij przypomnienie o
Widżety
Nie możesz tego zrobić bez dostępu do internetu.
-
- Synchronizacja z Google jest w fazie testów, sync is in a testing mode. Polegasz na niej na własną odpowiedzialność. Wszelkie raporty odnośnie tej funkcji pisane na adres hello@simplemobiletools.com są mile widziane.
- Wysłać istniejące wydarzenia na Dysk Google?
- Wyłączenie synchronizacji z Google usunie wszelkie zsynchronizowane z Twoim urządzeniem wydarzenia, pozostwiając je nienaruszone w chmurze.
- Wystąił błąd podczas wysyłania wydarzeń na Dysk Google: %1$s
- Wystąił błąd podczas aktualizacji wydarzeń na Dysku Google: %1$s
- Wystąił błąd podczas pobierania wydarzeń z Dysku Google: %1$s
-
- %1$d minutę
- %1$d minuty
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index da97ff727..8a4643077 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -186,21 +186,12 @@
Não foi encontrado nenhum aplicativo capaz de definir o som
Nenhum
O dia final não pode ser antes do início
- Sincronização Google
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 249223212..77e66e0f0 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -186,21 +186,12 @@
Não foi encontrada uma aplicação capaz de definir o som
Nenhum
O dia final não pode ser antes do inicial
- Sincronização Google
CalDAV sync
Mostrar eventos passados
Adiar lembrete com a opção Snooze
Widgets
You cannot do that while offline.
-
- A sincronização Google ainda não está terminada. Reporte os erros encontrados para hello@simplemobiletools.com. Obrigado!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minuto
- %1$d minutos
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 5c3c3f261..c001ad119 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -200,21 +200,12 @@
Не найдено приложение для выбора рингтона
Нет
Конец дня не может быть раньше начала
- Синхронизация с Google
CalDAV sync
Показывать прошедшие события
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d минута
- %1$d минуты
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 18fb55e90..4363db67d 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -193,21 +193,12 @@
Nenašla sa žiadna aplikácia na zmenu zvučky
Žiadna
Deň nemôže skončiť skôr než začne
- Google synchronizácia
CalDAV synchronizácia
Zobraziť minulé udalosti spred
Posunúť pripomienku s Odložiť o
Widgety
Nemôžete to urobiť bez internetu.
-
- Google synchronizácia je v testovacej prevádzke, buďte opatrní pri spoliehaní sa na ňu. Nahlásenie akýchkoľvek ohlasov na hello@simplemobiletools.com je vítané. Vďaka!
- Nahrať momentálne existujúce udalosti Googlu?
- Vypnutie Google synchonizácie odstráni všetky synchronizované udalosti zo zariadenia, no v oblakoch ostanú nedotknuté.
- Chyba pri nahrávaní udalosti na Google: %1$s
- Chyba pri úprave udalosti na Googli: %1$s
- Chyba pri čítaní Google udalostí: %1$s
-
- %1$d minútu
- %1$d minúty
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 3d4aba913..dd75ebf81 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -186,21 +186,12 @@
Hittade ingen app som kan ställa in ljudet
Ingen
Dagen kan inte börja innan den tar slut
- Google Synk
CalDAV sync
Visa tidigare händelser
Skjut upp påminnelse med Snooza
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minut
- %1$d minuter
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index c2fc3e9eb..0844c0e97 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -186,21 +186,12 @@
Zil sesi ayarlayabilen hiçbir uygulama bulunamadı
Boş
Gün başlamadan önce bitemez
- Google senkronizasyonu
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dd7762500..95ac100fa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -186,21 +186,12 @@
No app capable of setting ringtone found
None
The day cannot end earlier than it starts
- Google sync
CalDAV sync
Display events from the past
Postpone reminder with Snooze by
Widgets
You cannot do that while offline.
-
- Google sync is in a testing mode, please be cautions when relying on it. Reporting any feedback at hello@simplemobiletools.com would be appreciated. Thanks!
- Upload currently existing events to Google?
- Disabling Google sync will delete all synced events from your device, while leaving them intact in the cloud.
- Error uploading event to Google: %1$s
- Error updating event at Google: %1$s
- Error fetching Google events: %1$s
-
- %1$d minute
- %1$d minutes