Merge remote-tracking branch 'upstream/master'

# Conflicts:
#	app/build.gradle
This commit is contained in:
t-regbs 2019-12-31 15:41:03 +01:00
commit 97dca61a40
19 changed files with 113 additions and 112 deletions

View File

@ -1,6 +1,19 @@
Changelog Changelog
========== ==========
Version 6.8.3 *(2019-12-29)*
----------------------------
* Fixed a glitch at events repeating every X weeks
* Added an extra check to avoid showing reminders of deleted event repetition instances
* Some stability and translation improvements
Version 6.8.2 *(2019-12-18)*
----------------------------
* Improved some holidays
* Added a few stability and translation improvements
Version 6.8.1 *(2019-12-11)* Version 6.8.1 *(2019-12-11)*
---------------------------- ----------------------------

View File

@ -4,6 +4,11 @@ apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: 'de.timfreiheit.resourceplaceholders' apply plugin: 'de.timfreiheit.resourceplaceholders'
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android { android {
compileSdkVersion 28 compileSdkVersion 28
@ -13,13 +18,24 @@ android {
applicationId "com.simplemobiletools.calendar.pro" applicationId "com.simplemobiletools.calendar.pro"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 168 versionCode 170
versionName "6.8.1" versionName "6.8.3"
multiDexEnabled true multiDexEnabled true
setProperty("archivesBaseName", "calendar") setProperty("archivesBaseName", "calendar")
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }
signingConfigs {
if (keystorePropertiesFile.exists()) {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
}
buildTypes { buildTypes {
debug { debug {
applicationIdSuffix ".debug" applicationIdSuffix ".debug"
@ -27,6 +43,9 @@ android {
release { release {
minifyEnabled true minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (keystorePropertiesFile.exists()) {
signingConfig signingConfigs.release
}
} }
} }
@ -45,7 +64,7 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:5.20.10' implementation 'com.simplemobiletools:commons:5.21.9'
implementation 'joda-time:joda-time:2.10.1' implementation 'joda-time:joda-time:2.10.1'
implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
@ -53,9 +72,4 @@ dependencies {
kapt 'androidx.room:room-compiler:2.2.2' kapt 'androidx.room:room-compiler:2.2.2'
implementation 'androidx.room:room-runtime:2.2.2' implementation 'androidx.room:room-runtime:2.2.2'
annotationProcessor 'androidx.room:room-compiler:2.2.2' annotationProcessor 'androidx.room:room-compiler:2.2.2'
implementation "androidx.core:core-ktx:+"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
repositories {
mavenCentral()
} }

View File

@ -23,8 +23,8 @@ END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:설날 Lunar New Year's Day SUMMARY:설날 Lunar New Year's Day
UID:3d064a26-70f2-431a-985a-ffd27be9e210 UID:3d064a26-70f2-431a-985a-ffd27be9e210
DTSTART;VALUE=DATE:20190205 DTSTART;VALUE=DATE:20190204
DTEND;VALUE=DATE:20190206 DTEND;VALUE=DATE:20190207
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
@ -44,8 +44,15 @@ END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:추석(한가위) Harvest Festival SUMMARY:추석(한가위) Harvest Festival
UID:14bd697c-a319-47fd-9abc-fdff74be58e5 UID:14bd697c-a319-47fd-9abc-fdff74be58e5
DTSTART;VALUE=DATE:20201001 DTSTART;VALUE=DATE:20200930
DTEND;VALUE=DATE:20201002 DTEND;VALUE=DATE:20201003
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
SUMMARY:추석(한가위) Harvest Festival
UID:14bd697c-a319-47fd-9abc-fdffse58aa
DTSTART;VALUE=DATE:20210920
DTEND;VALUE=DATE:20210923
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
@ -65,14 +72,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:식목일 Arbor Day
UID:5ae39a0f-5ef9-44d9-9dd5-e90049578e07
DTSTART;VALUE=DATE:20000405
DTEND;VALUE=DATE:20000406
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:어린이 날 Children's Day SUMMARY:어린이 날 Children's Day
UID:5a0c39c0-da3b-407d-824b-890c6b82bd95 UID:5a0c39c0-da3b-407d-824b-890c6b82bd95
DTSTART;VALUE=DATE:20000505 DTSTART;VALUE=DATE:20000505
@ -81,22 +80,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:어버이 날 Paren't Day
UID:741d7127-995f-43e0-a014-04280dcbb661
DTSTART;VALUE=DATE:20000510
DTEND;VALUE=DATE:20000511
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:스승의 날 Teacher's Day
UID:5309e45c-acca-4b4f-b7c4-fe7b3ddd545f
DTSTART;VALUE=DATE:20000515
DTEND;VALUE=DATE:20000516
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:현충일 Memorial Day SUMMARY:현충일 Memorial Day
UID:c67d164c-c91c-4b46-a0fa-bff756119cde UID:c67d164c-c91c-4b46-a0fa-bff756119cde
DTSTART;VALUE=DATE:20000606 DTSTART;VALUE=DATE:20000606
@ -105,22 +88,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:6-25 사변일 6/25 War Memorial
UID:c5907e9d-4314-423f-9441-d7309d39db45
DTSTART;VALUE=DATE:20000625
DTEND;VALUE=DATE:20000626
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:제헌절 Constitution Day
UID:4f97c701-816b-4c23-a71e-13d2d2419c8f
DTSTART;VALUE=DATE:20000717
DTEND;VALUE=DATE:20000718
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:광복절 Liberation Day SUMMARY:광복절 Liberation Day
UID:1aba5d05-a8a7-4253-a6d2-66665bd2490d UID:1aba5d05-a8a7-4253-a6d2-66665bd2490d
DTSTART;VALUE=DATE:20000815 DTSTART;VALUE=DATE:20000815
@ -129,14 +96,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:국군의 날 Armed Forces Day
UID:99c12465-6366-4c9e-99c8-8635969cc7ee
DTSTART;VALUE=DATE:20001001
DTEND;VALUE=DATE:20001002
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:개천절 Foundation Day SUMMARY:개천절 Foundation Day
UID:220f5ee6-10a6-4227-87ca-197628adb976 UID:220f5ee6-10a6-4227-87ca-197628adb976
DTSTART;VALUE=DATE:20001003 DTSTART;VALUE=DATE:20001003

View File

@ -827,8 +827,7 @@ class EventActivity : SimpleActivity() {
event_caldav_calendar_email.text = currentCalendar.accountName event_caldav_calendar_email.text = currentCalendar.accountName
ensureBackgroundThread { ensureBackgroundThread {
val calendarColor = eventsHelper.getEventTypeWithCalDAVCalendarId(currentCalendar.id)?.color val calendarColor = eventsHelper.getEventTypeWithCalDAVCalendarId(currentCalendar.id)?.color ?: currentCalendar.color
?: currentCalendar.color
runOnUiThread { runOnUiThread {
event_caldav_calendar_color.setFillWithStroke(calendarColor, config.backgroundColor) event_caldav_calendar_color.setFillWithStroke(calendarColor, config.backgroundColor)
@ -916,7 +915,8 @@ class EventActivity : SimpleActivity() {
val offset = if (!config.allowChangingTimeZones || mEvent.getTimeZoneString().equals(mOriginalTimeZone, true)) { val offset = if (!config.allowChangingTimeZones || mEvent.getTimeZoneString().equals(mOriginalTimeZone, true)) {
0 0
} else { } else {
(DateTimeZone.forID(mEvent.timeZone).getOffset(System.currentTimeMillis()) - DateTimeZone.forID(mOriginalTimeZone).getOffset(System.currentTimeMillis())) / 1000L val original = if (mOriginalTimeZone.isEmpty()) DateTimeZone.getDefault().id else mOriginalTimeZone
(DateTimeZone.forID(mEvent.getTimeZoneString()).getOffset(System.currentTimeMillis()) - DateTimeZone.forID(original).getOffset(System.currentTimeMillis())) / 1000L
} }
val newStartTS = mEventStartDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset val newStartTS = mEventStartDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset

View File

@ -58,7 +58,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
override fun onActionModeDestroyed() {} override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyRecyclerViewAdapter.ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutId = when (viewType) { val layoutId = when (viewType) {
ITEM_EVENT -> R.layout.event_item_day_view ITEM_EVENT -> R.layout.event_item_day_view
else -> R.layout.event_item_day_view_simple else -> R.layout.event_item_day_view_simple
@ -66,7 +66,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
return createViewHolder(layoutId, parent) return createViewHolder(layoutId, parent)
} }
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val event = events[position] val event = events[position]
holder.bindView(event, true, true) { itemView, layoutPosition -> holder.bindView(event, true, true) { itemView, layoutPosition ->
setupView(itemView, event) setupView(itemView, event)

View File

@ -198,7 +198,9 @@ fun Context.notifyEvent(originalEvent: Event) {
val notification = getNotification(pendingIntent, event, content) val notification = getNotification(pendingIntent, event, content)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
try { try {
notificationManager.notify(event.id!!.toInt(), notification) if (notification != null) {
notificationManager.notify(event.id!!.toInt(), notification)
}
} catch (e: Exception) { } catch (e: Exception) {
showErrorToast(e) showErrorToast(e)
} }
@ -206,7 +208,7 @@ fun Context.notifyEvent(originalEvent: Event) {
} }
@SuppressLint("NewApi") @SuppressLint("NewApi")
fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: String, publicVersion: Boolean = false): Notification { fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: String, publicVersion: Boolean = false): Notification? {
var soundUri = config.reminderSoundUri var soundUri = config.reminderSoundUri
if (soundUri == SILENT) { if (soundUri == SILENT) {
soundUri = "" soundUri = ""
@ -245,7 +247,12 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
lightColor = event.color lightColor = event.color
enableVibration(config.vibrateOnReminder) enableVibration(config.vibrateOnReminder)
setSound(Uri.parse(soundUri), audioAttributes) setSound(Uri.parse(soundUri), audioAttributes)
notificationManager.createNotificationChannel(this) try {
notificationManager.createNotificationChannel(this)
} catch (e: Exception) {
showErrorToast(e)
return null
}
} }
} }
@ -271,7 +278,10 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
} }
if (!publicVersion) { if (!publicVersion) {
builder.setPublicVersion(getNotification(pendingIntent, event, content, true)) val notification = getNotification(pendingIntent, event, content, true)
if (notification != null) {
builder.setPublicVersion(notification)
}
} }
val notification = builder.build() val notification = builder.build()

View File

@ -11,6 +11,7 @@ import com.simplemobiletools.calendar.pro.models.EventType
import com.simplemobiletools.calendar.pro.models.Reminder import com.simplemobiletools.calendar.pro.models.Reminder
import com.simplemobiletools.commons.extensions.areDigitsOnly import com.simplemobiletools.commons.extensions.areDigitsOnly
import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.extensions.showErrorToast
import org.joda.time.DateTimeZone
import java.io.File import java.io.File
class IcsImporter(val activity: SimpleActivity) { class IcsImporter(val activity: SimpleActivity) {
@ -180,7 +181,7 @@ class IcsImporter(val activity: SimpleActivity) {
val source = if (calDAVCalendarId == 0 || eventType?.isSyncedEventType() == false) SOURCE_IMPORTED_ICS else "$CALDAV-$calDAVCalendarId" 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, val event = Event(null, curStart, curEnd, curTitle, curLocation, curDescription, reminders[0].minutes,
reminders[1].minutes, reminders[2].minutes, reminders[0].type, reminders[1].type, reminders[2].type, curRepeatInterval, curRepeatRule, reminders[1].minutes, reminders[2].minutes, reminders[0].type, reminders[1].type, reminders[2].type, curRepeatInterval, curRepeatRule,
curRepeatLimit, curRepeatExceptions, "", curImportId, "", curFlags, curEventTypeId, 0, curLastModified, source) curRepeatLimit, curRepeatExceptions, "", curImportId, DateTimeZone.getDefault().id, curFlags, curEventTypeId, 0, curLastModified, source)
if (event.getIsAllDay() && curEnd > curStart) { if (event.getIsAllDay() && curEnd > curStart) {
event.endTS -= DAY event.endTS -= DAY

View File

@ -147,12 +147,12 @@ data class Event(
fun getCalDAVCalendarId() = if (source.startsWith(CALDAV)) (source.split("-").lastOrNull() ?: "0").toString().toInt() else 0 fun getCalDAVCalendarId() = if (source.startsWith(CALDAV)) (source.split("-").lastOrNull() ?: "0").toString().toInt() else 0
// check if its the proper week, for events repeating every x weeks // check if it's the proper week, for events repeating every x weeks
// get the week number since 1970, not just in the current year // get the week number since 1970, not just in the current year
fun isOnProperWeek(startTimes: LongSparseArray<Long>): Boolean { fun isOnProperWeek(startTimes: LongSparseArray<Long>): Boolean {
val initialWeekNumber = Formatter.getDateTimeFromTS(startTimes[id!!]!!).millis / (7 * 24 * 60 * 60 * 1000) val initialWeekNumber = Formatter.getDateTimeFromTS(startTimes[id!!]!!).withTimeAtStartOfDay().millis / (7 * 24 * 60 * 60 * 1000f)
val currentWeekNumber = Formatter.getDateTimeFromTS(startTS).millis / (7 * 24 * 60 * 60 * 1000) val currentWeekNumber = Formatter.getDateTimeFromTS(startTS).withTimeAtStartOfDay().millis / (7 * 24 * 60 * 60 * 1000f)
return (initialWeekNumber - currentWeekNumber) % (repeatInterval / WEEK) == 0L return (Math.round(initialWeekNumber) - Math.round(currentWeekNumber)) % (repeatInterval / WEEK) == 0
} }
fun updateIsPastEvent() { fun updateIsPastEvent() {

View File

@ -32,7 +32,7 @@ class NotificationReceiver : BroadcastReceiver() {
context.updateListWidget() context.updateListWidget()
val event = context.eventsDB.getEventWithId(id) val event = context.eventsDB.getEventWithId(id)
if (event == null || event.getReminders().none { it.type == REMINDER_NOTIFICATION }) { if (event == null || event.getReminders().none { it.type == REMINDER_NOTIFICATION } || event.repetitionExceptions.contains(Formatter.getTodayCode())) {
return return
} }

View File

@ -945,9 +945,9 @@
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingStart="@dimen/normal_margin" android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/normal_margin" android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_dim_past_events" android:id="@+id/settings_dim_past_events"
@ -964,12 +964,11 @@
android:id="@+id/settings_allow_changing_time_zones_holder" android:id="@+id/settings_allow_changing_time_zones_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingStart="@dimen/normal_margin" android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/normal_margin" android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_allow_changing_time_zones" android:id="@+id/settings_allow_changing_time_zones"

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">Calendario Simple</string> <string name="app_name">Simple Calendar</string>
<string name="app_launcher_name">Calendar</string> <string name="app_launcher_name">Calendario</string>
<string name="change_view">Cambiar vista</string> <string name="change_view">Cambiar vista</string>
<string name="daily_view">Vista diaria</string> <string name="daily_view">Vista diaria</string>
<string name="weekly_view">Vista semanal</string> <string name="weekly_view">Vista semanal</string>
@ -104,13 +104,13 @@
<!-- Event attendees --> <!-- Event attendees -->
<string name="add_another_attendee">Añadir otros asistentes</string> <string name="add_another_attendee">Añadir otros asistentes</string>
<string name="my_status">Mi estado:</string> <string name="my_status">Mi estado:</string>
<string name="going">Voy</string> <string name="going">Iré</string>
<string name="not_going">No voy</string> <string name="not_going">No iré</string>
<string name="maybe_going">Quizás voy</string> <string name="maybe_going">Quizás iré</string>
<string name="invited">Invitado</string> <string name="invited">Invitado</string>
<!-- Time zones --> <!-- Time zones -->
<string name="enter_a_country">Enter a country or time zone</string> <string name="enter_a_country">Ingresa un país o zona horaria</string>
<!-- Export / Import --> <!-- Export / Import -->
<string name="import_events">Importar eventos</string> <string name="import_events">Importar eventos</string>
@ -192,7 +192,7 @@
<string name="last_used_one">El último usado</string> <string name="last_used_one">El último usado</string>
<string name="other_time">Otro momento</string> <string name="other_time">Otro momento</string>
<string name="highlight_weekends">Destacar los fines de semana en algunas vistas</string> <string name="highlight_weekends">Destacar los fines de semana en algunas vistas</string>
<string name="allow_changing_time_zones">Allow changing event time zones</string> <string name="allow_changing_time_zones">Permitir cambiar zona horaria del evento</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@ -234,20 +234,20 @@
<string name="faq_1_text">Los eventos creados de esa manera tienen un tipo de evento llamado \"Días Festivos\". Puede seleccionarlos todos desde Ajustes->Gestionar tipos de eventos, <string name="faq_1_text">Los eventos creados de esa manera tienen un tipo de evento llamado \"Días Festivos\". Puede seleccionarlos todos desde Ajustes->Gestionar tipos de eventos,
y usar una pulsación larga para eliminar el tipo de evento y todos sus eventos pulsando en la papelera.</string> y usar una pulsación larga para eliminar el tipo de evento y todos sus eventos pulsando en la papelera.</string>
<string name="faq_2_title">¿Puedo sincronizar mis eventos a través de Google Calendar, o otros servicios que soporten CalDAV?</string> <string name="faq_2_title">¿Puedo sincronizar mis eventos a través de Google Calendar, o otros servicios que soporten CalDAV?</string>
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers. <string name="faq_2_text">Sí, Solamente activa \"Sincronizar CalDAV\" en los ajustes de la aplicación y selecciona los calendarios que quieras sincronizar. Sin embargo, vas a necesitar algúna aplicación externa para manejar la sincronización entre el dispositivo y los servidores.
In case you want to synchronize a Google calendar, their official Calendar app will do the job. For other calendars you will need a third party sync adapter, for example DAVx5.</string> En caso de que quieras sincronizar un calendario de Google, su aplicación oficial de Calendario hará el trabajo. Para otros calendarios, necesitarás un sincronizador externo, por ejemplo: DAVx5.</string>
<string name="faq_3_title">I see the visual reminders, but hear no audio. What can I do?</string> <string name="faq_3_title">Veo los recordatorios visuales, pero no oigo audio. ¿Qué puedo hacer?</string>
<string name="faq_3_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings, <string name="faq_3_text">No solo mostrar el recordatorio, si no también reproducir el sonido, es altamente afectado por el sistema. Si no puedes escuchar ningún sonido, prueba ir a los ajustes de la aplicación,
pressing the \"Audio stream used by reminders\" option and changing it to a different value. If it still won\'t work, check your sound settings, if the particular stream isn\'t muted.</string> presionar la opción de \"Sonido usado en recordatorios\" y cambiarlo a un valor diferente. Si continúa fallando, verifica tus opciones de sonido, si el sonido en particular no está silenciado.</string>
<string name="faq_4_title">Does the app support time zones?</string> <string name="faq_4_title">¿La aplicación soporta zonas horarias?</string>
<string name="faq_4_text">Yes, it does. By default all events are created in your current time zone. If you want to change an events\' time zone, <string name="faq_4_text">Sí, lo hace. Por defecto, todos los eventos son creados en tu zona horaria actual. Si quieres cambiar la zona horaria de un evento,
you will first have to enable the time zone picker at the app settings, then change it at the Event Details screen. It is disabled by default as most people won\'t need it.</string> primero vas a tener que activar el seleccionador de zona horaria en los ajustes de la app, después, cambiarlo en la pantalla de Detalles del Evento. Está desactivado por defecto porque la mayoría de las personas no lo necesita.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Calendario Simple Pro - Eventos &amp; Recordatorios</string> <string name="app_title">Calendario Simple Pro - Eventos y Recordatorios</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Be notified of the important moments in your life.</string> <string name="app_short_description">Se notificado de los momentos importantes en tu vida.</string>
<string name="app_long_description"> <string name="app_long_description">
Calendario Simple Pro es un calendario fuera de línea, totalmente personalizable y diseñado para hacer exactamente lo que debe hacer un calendario. <b> ¡Sin funcionalidades complicadas, permisos innecesarios y sin anuncios! </b> Calendario Simple Pro es un calendario fuera de línea, totalmente personalizable y diseñado para hacer exactamente lo que debe hacer un calendario. <b> ¡Sin funcionalidades complicadas, permisos innecesarios y sin anuncios! </b>
@ -256,11 +256,11 @@
Las vistas diarias, semanales y mensuales permiten verificar tus próximos eventos y citas con facilidad. Incluso puedes ver todos los eventos como si se tratara de una lista en lugar de usar un calendario, para que <b> sepas exactamente lo que está sucediendo en tu vida y cuándo. </b> Las vistas diarias, semanales y mensuales permiten verificar tus próximos eventos y citas con facilidad. Incluso puedes ver todos los eventos como si se tratara de una lista en lugar de usar un calendario, para que <b> sepas exactamente lo que está sucediendo en tu vida y cuándo. </b>
---------------------------------------------------------- ----------------------------------------------------------
<b>Calendario Simple Pro Características &amp; beneficios</b> <b>Calendario Simple Pro Características y beneficios</b>
---------------------------------------------------------- ----------------------------------------------------------
✔️ Sin anuncios ni ventanas emergentes ✔️ Sin anuncios ni ventanas emergentes
✔️ No requiere acceso a internet, dándote más privacidad &amp; seguridad ✔️ No requiere acceso a internet, dándote más privacidad y seguridad
✔️ Solo se requieren los permisos mínimos para que funcione la aplicación ✔️ Solo se requieren los permisos mínimos para que funcione la aplicación
✔️ Énfasis en la simplicidad hace lo que un calendario debería hacer ✔️ Énfasis en la simplicidad hace lo que un calendario debería hacer
✔️ Código abierto (Open source) ✔️ Código abierto (Open source)
@ -269,14 +269,14 @@
✔️ Exporta tu configuración a un fichero .txt para importarlo a otro dispositivo ✔️ Exporta tu configuración a un fichero .txt para importarlo a otro dispositivo
✔️ Soporte de CalDAV para sincronizar tus eventos entre múltiples dispositivos ✔️ Soporte de CalDAV para sincronizar tus eventos entre múltiples dispositivos
✔️ Vista diaria, semanal, mensual, anual y de eventos en el calendario ✔️ Vista diaria, semanal, mensual, anual y de eventos en el calendario
✔️ Soporte a la exportación &amp; importación de eventos a través de ficheros .ics ✔️ Soporte a la exportación y importación de eventos a través de ficheros .ics
✔️ Establece múltiples recordatorios de eventos, personalice el sonido y la vibración ✔️ Establece múltiples recordatorios de eventos, personalice el sonido y la vibración
✔️ Opción para posponer recordatorios ✔️ Opción para posponer recordatorios
✔️ Añade fácilmente días festivos, cumpleaños, aniversarios y citas ✔️ Añade fácilmente días festivos, cumpleaños, aniversarios y citas
✔️ Personalización de eventos: hora de inicio, duración, recordatorios, etc. ✔️ Personalización de eventos: hora de inicio, duración, recordatorios, etc.
✔️ Añade asistentes para cada evento ✔️ Añade asistentes para cada evento
✔️ Utilizalo como un calendario personal o de trabajo ✔️ Utilizalo como un calendario personal o de trabajo
✔️ Escoge entre recordatorios &amp; notificaciones de correo para recordarte los eventos ✔️ Escoge entre recordatorios y notificaciones de correo para recordarte los eventos
DESCARGA CALENDARIO SIMPLE PRO - EL CALENDARIO SIMPLE, OFFLINE Y SIN ANUNCIOS! DESCARGA CALENDARIO SIMPLE PRO - EL CALENDARIO SIMPLE, OFFLINE Y SIN ANUNCIOS!

View File

@ -110,7 +110,7 @@
<string name="invited">Invited</string> <string name="invited">Invited</string>
<!-- Time zones --> <!-- Time zones -->
<string name="enter_a_country">Enter a country or time zone</string> <string name="enter_a_country">Angi et land eller tidssone</string>
<!-- Export / Import --> <!-- Export / Import -->
<string name="import_events">Importer hendelser</string> <string name="import_events">Importer hendelser</string>
@ -192,7 +192,7 @@
<string name="last_used_one">Den sist brukte</string> <string name="last_used_one">Den sist brukte</string>
<string name="other_time">Annen tid</string> <string name="other_time">Annen tid</string>
<string name="highlight_weekends">Fremhev helger på noen visninger</string> <string name="highlight_weekends">Fremhev helger på noen visninger</string>
<string name="allow_changing_time_zones">Allow changing event time zones</string> <string name="allow_changing_time_zones">Tillat å endre hendelsestidssoner</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>

View File

@ -192,7 +192,7 @@
<string name="last_used_one">Última utilizada</string> <string name="last_used_one">Última utilizada</string>
<string name="other_time">Outra</string> <string name="other_time">Outra</string>
<string name="highlight_weekends">Destacar fim de semana em algumas vistas</string> <string name="highlight_weekends">Destacar fim de semana em algumas vistas</string>
<string name="allow_changing_time_zones">Allow changing event time zones</string> <string name="allow_changing_time_zones">Permitir alteração do fuso horário dos eventos</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@ -273,7 +273,7 @@
✔️ Possibilidade de definir diversos lembretes e personalização de sons e vibração para os mesmos ✔️ Possibilidade de definir diversos lembretes e personalização de sons e vibração para os mesmos
✔️ Opção Snooze ✔️ Opção Snooze
✔️ Possibilidade de importar, feriados, aniversários e datas de nascimento ✔️ Possibilidade de importar, feriados, aniversários e datas de nascimento
✔️ Personalização de eventos data/hora inicial, duração dos eventos, lemvretes... ✔️ Personalização de eventos data/hora inicial, duração dos eventos, lembretes...
✔️ Possibilidade de adicionar convidados para os eventos ✔️ Possibilidade de adicionar convidados para os eventos
✔️ Passível de ser utilizado como calendário pessoal mas também empresarial ✔️ Passível de ser utilizado como calendário pessoal mas também empresarial
✔️ Escolha entre lembretes e notificações por e-mail ✔️ Escolha entre lembretes e notificações por e-mail

View File

@ -0,0 +1,2 @@
* Improved some holidays
* Added a few stability and translation improvements

View File

@ -0,0 +1,3 @@
Fixed a glitch at events repeating every X weeks
Added an extra check to avoid showing reminders of deleted event repetition instances
Some stability and translation improvements

View File

@ -5,11 +5,11 @@ Ya sea que estes organizando eventos individuales o recurrentes, cumpleaños, an
Las vistas diarias, semanales y mensuales permiten verificar tus próximos eventos y citas con facilidad. Incluso puedes ver todos los eventos como si se tratara de una lista en lugar de usar un calendario, para que <b> sepas exactamente lo que está sucediendo en tu vida y cuándo. </b> Las vistas diarias, semanales y mensuales permiten verificar tus próximos eventos y citas con facilidad. Incluso puedes ver todos los eventos como si se tratara de una lista en lugar de usar un calendario, para que <b> sepas exactamente lo que está sucediendo en tu vida y cuándo. </b>
---------------------------------------------------------- ----------------------------------------------------------
<b>Calendario Simple Pro Características & beneficios</b> <b>Calendario Simple Pro Características y beneficios</b>
---------------------------------------------------------- ----------------------------------------------------------
✔️ Sin anuncios ni ventanas emergentes ✔️ Sin anuncios ni ventanas emergentes
✔️ No requiere acceso a internet, dándote más privacidad & seguridad ✔️ No requiere acceso a internet, dándote más privacidad y seguridad
✔️ Solo se requieren los permisos mínimos para que funcione la aplicación ✔️ Solo se requieren los permisos mínimos para que funcione la aplicación
✔️ Énfasis en la simplicidad hace lo que un calendario debería hacer ✔️ Énfasis en la simplicidad hace lo que un calendario debería hacer
✔️ Código abierto (Open source) ✔️ Código abierto (Open source)
@ -18,14 +18,14 @@ Las vistas diarias, semanales y mensuales permiten verificar tus próximos event
✔️ Exporta tu configuración a un fichero .txt para importarlo a otro dispositivo ✔️ Exporta tu configuración a un fichero .txt para importarlo a otro dispositivo
✔️ Soporte de CalDAV para sincronizar tus eventos entre múltiples dispositivos ✔️ Soporte de CalDAV para sincronizar tus eventos entre múltiples dispositivos
✔️ Vista diaria, semanal, mensual, anual y de eventos en el calendario ✔️ Vista diaria, semanal, mensual, anual y de eventos en el calendario
✔️ Soporte a la exportación & importación de eventos a través de ficheros .ics ✔️ Soporte a la exportación y importación de eventos a través de ficheros .ics
✔️ Establece múltiples recordatorios de eventos, personalice el sonido y la vibración ✔️ Establece múltiples recordatorios de eventos, personalice el sonido y la vibración
✔️ Opción para posponer recordatorios ✔️ Opción para posponer recordatorios
✔️ Añade fácilmente días festivos, cumpleaños, aniversarios y citas ✔️ Añade fácilmente días festivos, cumpleaños, aniversarios y citas
✔️ Personalización de eventos: hora de inicio, duración, recordatorios, etc. ✔️ Personalización de eventos: hora de inicio, duración, recordatorios, etc.
✔️ Añade asistentes para cada evento ✔️ Añade asistentes para cada evento
✔️ Utilizalo como un calendario personal o de trabajo ✔️ Utilizalo como un calendario personal o de trabajo
✔️ Escoge entre recordatorios & notificaciones de correo para recordarte los eventos ✔️ Escoge entre recordatorios y notificaciones de correo para recordarte los eventos
DESCARGA CALENDARIO SIMPLE PRO - EL CALENDARIO SIMPLE, OFFLINE Y SIN ANUNCIOS! DESCARGA CALENDARIO SIMPLE PRO - EL CALENDARIO SIMPLE, OFFLINE Y SIN ANUNCIOS!

View File

@ -1 +1 @@
Un bonito calendario sin anuncios, garantía del 100% en la devolución del dinero Se notificado de los momentos importantes en tu vida.

View File

@ -1 +1 @@
Calendario Simple Pro - Eventos & Recordatorios Calendario Simple Pro - Eventos y Recordatorios

View File

@ -22,7 +22,7 @@ As vistas diária, semanal e mensal ajudam o utilizador a verificar os próximos
✔️ Possibilidade de definir diversos lembretes e personalização de sons e vibração para os mesmos ✔️ Possibilidade de definir diversos lembretes e personalização de sons e vibração para os mesmos
✔️ Opção Snooze ✔️ Opção Snooze
✔️ Possibilidade de importar, feriados, aniversários e datas de nascimento ✔️ Possibilidade de importar, feriados, aniversários e datas de nascimento
✔️ Personalização de eventos data/hora inicial, duração dos eventos, lemvretes... ✔️ Personalização de eventos data/hora inicial, duração dos eventos, lembretes...
✔️ Possibilidade de adicionar convidados para os eventos ✔️ Possibilidade de adicionar convidados para os eventos
✔️ Passível de ser utilizado como calendário pessoal mas também empresarial ✔️ Passível de ser utilizado como calendário pessoal mas também empresarial
✔️ Escolha entre lembretes e notificações por e-mail ✔️ Escolha entre lembretes e notificações por e-mail