Merge pull request #27 from SimpleMobileTools/master

upd
This commit is contained in:
solokot 2019-09-24 08:47:24 +03:00 committed by GitHub
commit 31477c0148
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
66 changed files with 171 additions and 58 deletions

View file

@ -1,6 +1,22 @@
Changelog
==========
Version 6.6.1 *(2019-09-17)*
----------------------------
* Fixed a glitch with syncing all-day events via Radicale (by ddast)
* Use better messages at birthday/anniversary importing
* Fixed some UK holidays
Version 6.6.0 *(2019-08-28)*
----------------------------
* Use separate channels per event type reminders for more control
* Added some extra German and UK holidays
* Apply the Event List past limitation in the in-app view too, not just widget
* Fixing some glitches at importing events from .ics files
* Added some theming improvements
Version 6.5.7 *(2019-08-07)*
----------------------------

View file

@ -16,10 +16,11 @@ android {
applicationId "com.simplemobiletools.calendar.pro"
minSdkVersion 21
targetSdkVersion 28
versionCode 157
versionName "6.5.7"
versionCode 159
versionName "6.6.1"
multiDexEnabled true
setProperty("archivesBaseName", "calendar")
vectorDrawables.useSupportLibrary = true
}
signingConfigs {
@ -57,7 +58,7 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:5.16.7'
implementation 'com.simplemobiletools:commons:5.17.17'
implementation 'joda-time:joda-time:2.10.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'

View file

@ -534,4 +534,62 @@ DTEND;VALUE=DATE:20070101
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:Internationaler Frauentag
UID:4694f46a-aef0-49a0-a8eb-asdasd
DTSTART;VALUE=DATE:20170308
DTEND;VALUE=DATE:20170309
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:Reformationstag
UID:4694f46a-aef0-49a0-a8eb-reform
DTSTART;VALUE=DATE:20171031
DTEND;VALUE=DATE:20171101
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:Buß- und Bettag
UID:4694f46a-aef0-49a0-a8eb-b1
DTSTART;VALUE=DATE:20181121
DTEND;VALUE=DATE:20181122
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
SUMMARY:Buß- und Bettag
UID:4694f46a-aef0-49a0-a8eb-b2
DTSTART;VALUE=DATE:20191120
DTEND;VALUE=DATE:20191121
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
SUMMARY:Buß- und Bettag
UID:4694f46a-aef0-49a0-a8eb-b3
DTSTART;VALUE=DATE:20201118
DTEND;VALUE=DATE:20201119
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
SUMMARY:Buß- und Bettag
UID:4694f46a-aef0-49a0-a8eb-b4
DTSTART;VALUE=DATE:20211117
DTEND;VALUE=DATE:20211118
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
SUMMARY:Buß- und Bettag
UID:4694f46a-aef0-49a0-a8eb-b5
DTSTART;VALUE=DATE:20221116
DTEND;VALUE=DATE:20221117
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
SUMMARY:Buß- und Bettag
UID:4694f46a-aef0-49a0-a8eb-b6
DTSTART;VALUE=DATE:20231122
DTEND;VALUE=DATE:20231123
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR

View file

@ -18,8 +18,8 @@ END:VEVENT
BEGIN:VEVENT
SUMMARY:Summer Bank Holiday
UID:5dac6a63-e519-4ad1-a687-2fd5fccb4656
DTSTART;VALUE=DATE:20100802
DTEND;VALUE=DATE:20100803
DTSTART;VALUE=DATE:20130826
DTEND;VALUE=DATE:20130827
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8;BYDAY=-1MO
STATUS:CONFIRMED
END:VEVENT
@ -56,8 +56,8 @@ END:VEVENT
BEGIN:VEVENT
SUMMARY:Spring Bank Holiday
UID:5dac6a63-e519-4ad1-a687-2fd5fccb4
DTSTART;VALUE=DATE:20100802
DTEND;VALUE=DATE:20100803
DTSTART;VALUE=DATE:20130527
DTEND;VALUE=DATE:20130528
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYDAY=-1MO
STATUS:CONFIRMED
END:VEVENT

View file

@ -126,7 +126,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
val newShouldFilterBeVisible = it.size > 1 || config.displayEventTypes.isEmpty()
if (newShouldFilterBeVisible != mShouldFilterBeVisible) {
mShouldFilterBeVisible = newShouldFilterBeVisible
invalidateOptionsMenu()
}
}
@ -362,7 +361,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
startActivity(this)
}
} else {
toast(R.string.unknown_error_occurred)
toast(R.string.caldav_event_not_found, Toast.LENGTH_LONG)
}
}
} else if (intent?.extras?.getBoolean("DETAIL_VIEW", false) == true) {
@ -477,11 +476,13 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
val reminders = it
ensureBackgroundThread {
addContactEvents(true, reminders) {
if (it > 0) {
toast(R.string.birthdays_added)
updateViewPager()
} else {
toast(R.string.no_birthdays)
when {
it > 0 -> {
toast(R.string.birthdays_added)
updateViewPager()
}
it == -1 -> toast(R.string.no_new_birthdays)
else -> toast(R.string.no_birthdays)
}
}
}
@ -499,11 +500,13 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
val reminders = it
ensureBackgroundThread {
addContactEvents(false, reminders) {
if (it > 0) {
toast(R.string.anniversaries_added)
updateViewPager()
} else {
toast(R.string.no_anniversaries)
when {
it > 0 -> {
toast(R.string.anniversaries_added)
updateViewPager()
}
it == -1 -> toast(R.string.no_new_anniversaries)
else -> toast(R.string.no_anniversaries)
}
}
}
@ -525,6 +528,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
private fun addContactEvents(birthdays: Boolean, reminders: ArrayList<Int>, callback: (Int) -> Unit) {
var eventsAdded = 0
var eventsFound = 0
val uri = ContactsContract.Data.CONTENT_URI
val projection = arrayOf(ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
@ -581,6 +585,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
importIDs.remove(it)
}
eventsFound++
if (!importIDs.containsKey(contactId)) {
eventsHelper.insertEvent(event, false, false) {
eventsAdded++
@ -599,7 +604,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
}
runOnUiThread {
callback(eventsAdded)
callback(if (eventsAdded == 0 && eventsFound > 0) -1 else eventsAdded)
}
}
@ -807,7 +812,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
FAQItem(R.string.faq_2_title, R.string.faq_2_text),
FAQItem(R.string.faq_3_title, R.string.faq_3_text),
FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons),
FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons))
FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons),
FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
}

View file

@ -194,9 +194,15 @@ fun Context.notifyEvent(originalEvent: Event) {
val timeRange = if (event.getIsAllDay()) getString(R.string.all_day) else getFormattedEventTime(startTime, endTime)
val descriptionOrLocation = if (config.replaceDescription) event.location else event.description
val content = "$displayedStartDate $timeRange $descriptionOrLocation".trim()
val notification = getNotification(pendingIntent, event, content)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(event.id!!.toInt(), notification)
ensureBackgroundThread {
val notification = getNotification(pendingIntent, event, content)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
try {
notificationManager.notify(event.id!!.toInt(), notification)
} catch (e: Exception) {
showErrorToast(e)
}
}
}
@SuppressLint("NewApi")
@ -213,7 +219,7 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
if (soundUri != config.lastSoundUri || config.lastVibrateOnReminder != config.vibrateOnReminder) {
if (!publicVersion) {
if (isOreoPlus()) {
val oldChannelId = "simple_calendar_${config.lastReminderChannel}_${config.reminderAudioStream}"
val oldChannelId = "simple_calendar_${config.lastReminderChannel}_${config.reminderAudioStream}_${event.eventType}"
notificationManager.deleteNotificationChannel(oldChannelId)
}
}
@ -223,7 +229,7 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
config.lastSoundUri = soundUri
}
val channelId = "simple_calendar_${config.lastReminderChannel}_${config.reminderAudioStream}"
val channelId = "simple_calendar_${config.lastReminderChannel}_${config.reminderAudioStream}_${event.eventType}"
if (isOreoPlus()) {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
@ -231,7 +237,7 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
.setLegacyStreamType(config.reminderAudioStream)
.build()
val name = resources.getString(R.string.event_reminders)
val name = eventTypesDB.getEventTypeWithId(event.eventType)?.getDisplayTitle()
val importance = NotificationManager.IMPORTANCE_HIGH
NotificationChannel(channelId, name, importance).apply {
setBypassDnd(true)

View file

@ -1,16 +0,0 @@
package com.simplemobiletools.calendar.pro.extensions
import com.simplemobiletools.calendar.pro.helpers.CHOPPED_LIST_DEFAULT_SIZE
// inspired by https://stackoverflow.com/questions/2895342/java-how-can-i-split-an-arraylist-in-multiple-small-arraylists/2895365#2895365
fun MutableList<Long>.getChoppedList(chunkSize: Int = CHOPPED_LIST_DEFAULT_SIZE): ArrayList<ArrayList<Long>> {
val parts = ArrayList<ArrayList<Long>>()
val listSize = this.size
var i = 0
while (i < listSize) {
val newList = subList(i, Math.min(listSize, i + chunkSize)).toMutableList() as ArrayList<Long>
parts.add(newList)
i += chunkSize
}
return parts
}

View file

@ -26,7 +26,7 @@ import org.joda.time.DateTime
import java.util.*
class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
private var FETCH_INTERVAL = 6 * MONTH_SECONDS
private var FETCH_INTERVAL = 3 * MONTH_SECONDS
private var MIN_EVENTS_TRESHOLD = 30
private var mEvents = ArrayList<Event>()
@ -72,7 +72,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
private fun checkEvents() {
if (!wereInitialEventsAdded) {
minFetchedTS = DateTime().minusMonths(3).seconds()
minFetchedTS = DateTime().minusMinutes(context!!.config.displayPastEvents).seconds()
maxFetchedTS = DateTime().plusMonths(6).seconds()
}
@ -81,7 +81,6 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
receivedEvents(it, false)
} else {
if (!wereInitialEventsAdded) {
minFetchedTS -= FETCH_INTERVAL
maxFetchedTS += FETCH_INTERVAL
}
context!!.eventsHelper.getEvents(minFetchedTS, maxFetchedTS) {

View file

@ -409,7 +409,7 @@ class CalDAVHelper(val context: Context) {
put(CalendarContract.Events.RRULE, repeatRule)
}
if (event.getIsAllDay() && event.endTS > event.startTS)
if (event.getIsAllDay() && event.endTS >= event.startTS)
event.endTS += DAY
if (event.repeatInterval > 0) {

View file

@ -17,7 +17,6 @@ const val CALDAV = "Caldav"
const val VIEW_TO_OPEN = "view_to_open"
const val SHORTCUT_NEW_EVENT = "shortcut_new_event"
const val REGULAR_EVENT_TYPE_ID = 1L
const val CHOPPED_LIST_DEFAULT_SIZE = 100
const val MONTHLY_VIEW = 1
const val YEARLY_VIEW = 2

View file

@ -7,6 +7,7 @@ import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.extensions.*
import com.simplemobiletools.calendar.pro.models.Event
import com.simplemobiletools.calendar.pro.models.EventType
import com.simplemobiletools.commons.extensions.getChoppedList
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
class EventsHelper(val context: Context) {

View file

@ -39,6 +39,7 @@ class IcsImporter(val activity: SimpleActivity) {
private var isProperReminderAction = false
private var isDescription = false
private var isSequence = false
private var isParsingEvent = false
private var curReminderTriggerMinutes = REMINDER_OFF
private var curReminderTriggerAction = REMINDER_NOTIFICATION
private val eventsHelper = activity.eventsHelper
@ -83,8 +84,11 @@ class IcsImporter(val activity: SimpleActivity) {
if (line == BEGIN_EVENT) {
resetValues()
curEventTypeId = defaultEventTypeId
isParsingEvent = true
} else if (line.startsWith(DTSTART)) {
curStart = getTimestamp(line.substring(DTSTART.length))
if (isParsingEvent) {
curStart = getTimestamp(line.substring(DTSTART.length))
}
} else if (line.startsWith(DTEND)) {
curEnd = getTimestamp(line.substring(DTEND.length))
} else if (line.startsWith(DURATION)) {
@ -142,6 +146,7 @@ class IcsImporter(val activity: SimpleActivity) {
curReminderActions.add(curReminderTriggerAction)
}
} else if (line == END_EVENT) {
isParsingEvent = false
if (curStart != -1L && curEnd == -1L) {
curEnd = curStart
}
@ -163,7 +168,8 @@ class IcsImporter(val activity: SimpleActivity) {
Reminder(curReminderMinutes.getOrElse(2) { REMINDER_OFF }, curReminderActions.getOrElse(2) { REMINDER_NOTIFICATION })
)
reminders = reminders.sortedBy { it.minutes }.toMutableList() as ArrayList<Reminder>
reminders = reminders.sortedBy { it.minutes }.sortedBy { it.minutes == REMINDER_OFF }.toMutableList() as ArrayList<Reminder>
val eventType = eventTypes.firstOrNull { it.id == curEventTypeId }
val source = if (calDAVCalendarId == 0 || eventType?.isSyncedEventType() == false) SOURCE_IMPORTED_ICS else "$CALDAV-$calDAVCalendarId"
val event = Event(null, curStart, curEnd, curTitle, curLocation, curDescription, reminders[0].minutes,
@ -304,6 +310,7 @@ class IcsImporter(val activity: SimpleActivity) {
isNotificationDescription = false
isProperReminderAction = false
isSequence = false
isParsingEvent = false
curReminderTriggerMinutes = REMINDER_OFF
curReminderTriggerAction = REMINDER_NOTIFICATION
}

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sinxronlaşma bitdi</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Echuet gant ar goubredañ</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synchronizace dokončena</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synkronisering gennemført</string>
<string name="select_a_different_caldav_color">Vælg en anden farve (den kan være tilføjet lokalt)</string>
<string name="insufficient_permissions">Du har ikke tilladelse til at skrive i den valgte kalender</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synchronisation erfolgreich</string>
<string name="select_a_different_caldav_color">Wähle eine andere Farbe (wird möglicherweise nur lokal angewendet)</string>
<string name="insufficient_permissions">Dir fehlt die Berechtigung zum Ändern des gewählten Kalenders</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->
@ -240,7 +241,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Calendar Pro - Termine &amp; Erinnerungen</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">A beautiful calendar without ads, 100% money back guarantee.</string>
<string name="app_short_description">Ein großartiger Kalender ohne Werbung, 100% Geld-zurück-Garantie.</string>
<string name="app_long_description">
Simple Calendar Pro ist ein vollständig anpassbarer Offline-Kalender, der genau das bietet, was man von einem Kalender erwartet. <b>Keine umständlichen Funktionen, keine unnötigen Berechtigungen und keine Werbung!</b>

View file

@ -52,7 +52,7 @@
<string name="update_all_occurrences">Ενημέρωση όλων των περιστατικών</string>
<string name="repeat_till_date">Επαναλάβετε μέχρι μια ημερομηνία</string>
<string name="stop_repeating_after_x">Παύση επαναλήψεων μετά από x εμφανίσεις</string>
<string name="repeat_forever">Επαναλάβετε για πάντα</string>
<string name="repeat_forever">Επανάληψη πάντα</string>
<string name="times">Φορές</string>
<string name="repeat">Επανάληψη</string>
<string name="repeat_on">Επανάληψη ενεργή</string>
@ -203,6 +203,7 @@
<string name="synchronization_completed">Ο συγχρονισμός ολοκληρώθηκε</string>
<string name="select_a_different_caldav_color">Επιλέξτε διαφορετικό χρώμα (μπορεί να εφαρμοστεί μόνο τοπικά)</string>
<string name="insufficient_permissions">Δεν επιτρέπεται η εγγραφή στο επιλεγμένο ημερολόγιο</string>
<string name="caldav_event_not_found">Δεν βρέθηκε Εκδήλωση. Παρακαλώ ενεργοποιήστε το συγχρονισμό CalDAV του Ημερολογίου από τις ρυθμίσεις της εφαρμογής.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sincronización completa</string>
<string name="select_a_different_caldav_color">Seleccionar un color diferente (localmente)</string>
<string name="insufficient_permissions">No tiene permiso para modificar el calendario</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -204,6 +204,7 @@
<string name="synchronization_completed">La synchronisation est terminée</string>
<string name="select_a_different_caldav_color">Sélectionnez une couleur différente (peut être appliqué localement uniquement)</string>
<string name="insufficient_permissions">Vous n\êtes pas autorisé à écrire dans l\agenda sélectionné</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sincronización completa</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">הסנכרון הסתיים</string>
<string name="select_a_different_caldav_color">בחירת צבע שונה (ייתכן שיישמר מקומית בלבד)</string>
<string name="insufficient_permissions">לא קיימת הרשאת כתיבה ליומנים הנבחרים</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sinkronizacija završena</string>
<string name="select_a_different_caldav_color">Odaberite drugu boju (može se primijeniti samo lokalno)</string>
<string name="insufficient_permissions">Nije vam dopušteno pisati u odabranom kalendaru</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sinkronisasi selesai</string>
<string name="select_a_different_caldav_color">Pilih warna yang berbeda (mungkin hanya diterapkan secara lokal)</string>
<string name="insufficient_permissions">Anda tidak diizinkan untuk membuat/mengubah acara pada kalender yang dipilih</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->
@ -239,7 +240,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Calendar Pro - Acara &amp; Pengingat</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">A beautiful calendar without ads, 100% money back guarantee.</string>
<string name="app_short_description">Kalender yang indah tanpa iklan, 100% garansi uang kembali.</string>
<string name="app_long_description">
Simple Calendar Pro adalah kalender luring sederhana yang mudah digunakan dan dibuat sesuai dengan fungsi-fungsi dasar sebuah kalender. <b>Tanpa fitur yang terlalu rumit, perizinan yang tidak diperlukan dan sama sekali tanpa iklan!</b>

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sinkronisasi selesai</string>
<string name="select_a_different_caldav_color">Pilih warna yang berbeda (mungkin hanya diterapkan secara lokal)</string>
<string name="insufficient_permissions">Anda tidak diizinkan untuk membuat/mengubah acara pada kalender yang dipilih</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->
@ -239,7 +240,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Calendar Pro - Acara &amp; Pengingat</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">A beautiful calendar without ads, 100% money back guarantee.</string>
<string name="app_short_description">Kalender yang indah tanpa iklan, 100% garansi uang kembali.</string>
<string name="app_long_description">
Simple Calendar Pro adalah kalender luring sederhana yang mudah digunakan dan dibuat sesuai dengan fungsi-fungsi dasar sebuah kalender. <b>Tanpa fitur yang terlalu rumit, perizinan yang tidak diperlukan dan sama sekali tanpa iklan!</b>

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sincronizzazione completata</string>
<string name="select_a_different_caldav_color">Seleziona un colore differente (potrebbe essere applicato solamente in locale)</string>
<string name="insufficient_permissions">Non si hanno i permessi per scrivere nel calendario selezionato</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">הסנכרון הסתיים</string>
<string name="select_a_different_caldav_color">בחירת צבע שונה (ייתכן שיישמר מקומית בלבד)</string>
<string name="insufficient_permissions">לא קיימת הרשאת כתיבה ליומנים הנבחרים</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">同期が完了しました</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">동기화 완료</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sinchronizacija baigta</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synkronisering fullført</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synchroniseren voltooid</string>
<string name="select_a_different_caldav_color">Kies een andere kleur (mogelijk alleen voor dit apparaat)</string>
<string name="insufficient_permissions">Kan geen wijzigingen aanbrengen in deze agenda</string>
<string name="caldav_event_not_found">Afspraak niet gevonden. Schakel via Instellingen de CalDAV-synchronisatie in voor deze agenda.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synkronisering fullført</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synchronizacja zakończona</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sincronização completa</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sincronização terminada</string>
<string name="select_a_different_caldav_color">Selecione uma cor diferente (pode ser aplicada apenas localmente)</string>
<string name="insufficient_permissions">Não tem permissão para escrever no calendário selecionado</string>
<string name="caldav_event_not_found">Evento não encontrado. Ative a sincronização CalDAV para os calendários apropriados nas definições.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Синхронизация завершена</string>
<string name="select_a_different_caldav_color">Выберите другой цвет (применяется локально)</string>
<string name="insufficient_permissions">Запись в выбранный календарь запрещена</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synchronizácia ukončená</string>
<string name="select_a_different_caldav_color">Zvoliť inú farbu (možno bude aplikovaná iba lokálne)</string>
<string name="insufficient_permissions">Nemáte dostatočné oprávnenie na písanie do zvoleného kalendára</string>
<string name="caldav_event_not_found">Udalosť nebola nájdená. Prosím povoľte CalDAV synchronizáciu príslušného kalendára v nastaveniach aplikácie.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Synkroniseringen är klar</string>
<string name="select_a_different_caldav_color">Välj en annan färg (tillämpas kanske bara lokalt)</string>
<string name="insufficient_permissions">Du har inte behörighet att redigera den valda kalendern</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Senkronizasyon tamamlandı</string>
<string name="select_a_different_caldav_color">Farklı bir renk seçin (yalnızca yerel olarak uygulanabilir)</string>
<string name="insufficient_permissions">Seçili takvime yazmanıza izin verilmiyor</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Синхронізацію завершено</string>
<string name="select_a_different_caldav_color">Обрати інший колір (можна застосувати лише локально)</string>
<string name="insufficient_permissions">Ви не можете редагувати обраний календар</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
    <string name="synchronization_completed">同步完成</string>
    <string name="select_a_different_caldav_color">选择不同的颜色 (只能被添加于本机端)</string>
    <string name="insufficient_permissions">你不被允许对选择的行事历写入</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
    <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
    <!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">同步完成</string>
<string name="select_a_different_caldav_color">選擇不同的顏色 (只能被添加於本機端)</string>
<string name="insufficient_permissions">你不被允許對選擇的行事曆寫入</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">同步完成</string>
<string name="select_a_different_caldav_color">選擇不同的顏色 (只能被添加於本機端)</string>
<string name="insufficient_permissions">你不被允許對選擇的行事曆寫入</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -203,6 +203,7 @@
<string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<string name="insufficient_permissions">You are not allowed to write in the selected calendar</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" -->

View file

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.41'
ext.kotlin_version = '1.3.50'
repositories {
google()
@ -10,7 +10,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "de.timfreiheit.resourceplaceholders:placeholders:0.3"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 463 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 KiB

After

Width:  |  Height:  |  Size: 148 KiB

View file

@ -1,6 +1,6 @@
#Tue Apr 30 17:49:00 CEST 2019
#Sun Aug 25 21:51:10 CEST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip