From 214a95eb5d89cce53f98de484bf822249eb9221c Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 12 Aug 2017 22:13:57 +0200 Subject: [PATCH] remove Google Sync as a standalone feature --- app/build.gradle | 13 - app/src/main/AndroidManifest.xml | 10 +- .../calendar/activities/EventActivity.kt | 2 - .../calendar/activities/MainActivity.kt | 17 -- .../calendar/activities/SettingsActivity.kt | 173 +------------ .../asynctasks/FetchGoogleEventsTask.kt | 227 ------------------ .../calendar/extensions/Context.kt | 38 --- .../calendar/extensions/Exception.kt | 10 - .../calendar/helpers/Config.kt | 24 -- .../calendar/helpers/Constants.kt | 14 -- .../calendar/helpers/DBHelper.kt | 25 +- .../calendar/helpers/GoogleSyncHandler.kt | 126 ---------- .../calendar/helpers/GoogleSyncQueueDB.kt | 112 --------- .../calendar/interfaces/GoogleSyncListener.kt | 5 - .../calendar/models/GoogleError.kt | 3 - .../calendar/models/GoogleEvent.kt | 7 - .../calendar/models/GoogleEventDateTime.kt | 3 - .../calendar/models/GoogleEventReminder.kt | 3 - .../calendar/models/GoogleOperation.kt | 3 - .../receivers/BootCompletedReceiver.kt | 3 - .../calendar/receivers/GoogleSyncReceiver.kt | 13 - app/src/main/res/layout/activity_settings.xml | 20 -- app/src/main/res/values-de/strings.xml | 9 - app/src/main/res/values-es/strings.xml | 9 - app/src/main/res/values-fr/strings.xml | 9 - app/src/main/res/values-hi-rIN/strings.xml | 9 - app/src/main/res/values-hu/strings.xml | 9 - app/src/main/res/values-it/strings.xml | 9 - app/src/main/res/values-iw/strings.xml | 9 - app/src/main/res/values-ja/strings.xml | 9 - app/src/main/res/values-pl/strings.xml | 9 - app/src/main/res/values-pt-rBR/strings.xml | 9 - app/src/main/res/values-pt/strings.xml | 9 - app/src/main/res/values-ru/strings.xml | 9 - app/src/main/res/values-sk/strings.xml | 9 - app/src/main/res/values-sv/strings.xml | 9 - app/src/main/res/values-tr/strings.xml | 9 - app/src/main/res/values/strings.xml | 9 - 38 files changed, 10 insertions(+), 985 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/asynctasks/FetchGoogleEventsTask.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Exception.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncHandler.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/helpers/GoogleSyncQueueDB.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/GoogleSyncListener.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleError.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEvent.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventDateTime.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleEventReminder.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/models/GoogleOperation.kt delete mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/receivers/GoogleSyncReceiver.kt 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