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
==========
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)*
----------------------------

View file

@ -4,6 +4,11 @@ apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'de.timfreiheit.resourceplaceholders'
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 28
@ -13,13 +18,24 @@ android {
applicationId "com.simplemobiletools.calendar.pro"
minSdkVersion 21
targetSdkVersion 28
versionCode 168
versionName "6.8.1"
versionCode 170
versionName "6.8.3"
multiDexEnabled true
setProperty("archivesBaseName", "calendar")
vectorDrawables.useSupportLibrary = true
}
signingConfigs {
if (keystorePropertiesFile.exists()) {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
@ -27,6 +43,9 @@ android {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (keystorePropertiesFile.exists()) {
signingConfig signingConfigs.release
}
}
}
@ -45,7 +64,7 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:5.20.10'
implementation 'com.simplemobiletools:commons:5.21.9'
implementation 'joda-time:joda-time:2.10.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
@ -53,9 +72,4 @@ dependencies {
kapt 'androidx.room:room-compiler:2.2.2'
implementation 'androidx.room:room-runtime: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
SUMMARY:설날 Lunar New Year's Day
UID:3d064a26-70f2-431a-985a-ffd27be9e210
DTSTART;VALUE=DATE:20190205
DTEND;VALUE=DATE:20190206
DTSTART;VALUE=DATE:20190204
DTEND;VALUE=DATE:20190207
STATUS:CONFIRMED
END:VEVENT
BEGIN:VEVENT
@ -44,8 +44,15 @@ END:VEVENT
BEGIN:VEVENT
SUMMARY:추석(한가위) Harvest Festival
UID:14bd697c-a319-47fd-9abc-fdff74be58e5
DTSTART;VALUE=DATE:20201001
DTEND;VALUE=DATE:20201002
DTSTART;VALUE=DATE:20200930
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
END:VEVENT
BEGIN:VEVENT
@ -65,14 +72,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END: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
UID:5a0c39c0-da3b-407d-824b-890c6b82bd95
DTSTART;VALUE=DATE:20000505
@ -81,22 +80,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END: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
UID:c67d164c-c91c-4b46-a0fa-bff756119cde
DTSTART;VALUE=DATE:20000606
@ -105,22 +88,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END: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
UID:1aba5d05-a8a7-4253-a6d2-66665bd2490d
DTSTART;VALUE=DATE:20000815
@ -129,14 +96,6 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END: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
UID:220f5ee6-10a6-4227-87ca-197628adb976
DTSTART;VALUE=DATE:20001003

View file

@ -827,8 +827,7 @@ class EventActivity : SimpleActivity() {
event_caldav_calendar_email.text = currentCalendar.accountName
ensureBackgroundThread {
val calendarColor = eventsHelper.getEventTypeWithCalDAVCalendarId(currentCalendar.id)?.color
?: currentCalendar.color
val calendarColor = eventsHelper.getEventTypeWithCalDAVCalendarId(currentCalendar.id)?.color ?: currentCalendar.color
runOnUiThread {
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)) {
0
} 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

View file

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

View file

@ -198,7 +198,9 @@ fun Context.notifyEvent(originalEvent: Event) {
val notification = getNotification(pendingIntent, event, content)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
try {
notificationManager.notify(event.id!!.toInt(), notification)
if (notification != null) {
notificationManager.notify(event.id!!.toInt(), notification)
}
} catch (e: Exception) {
showErrorToast(e)
}
@ -206,7 +208,7 @@ fun Context.notifyEvent(originalEvent: Event) {
}
@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
if (soundUri == SILENT) {
soundUri = ""
@ -245,7 +247,12 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
lightColor = event.color
enableVibration(config.vibrateOnReminder)
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) {
builder.setPublicVersion(getNotification(pendingIntent, event, content, true))
val notification = getNotification(pendingIntent, event, content, true)
if (notification != null) {
builder.setPublicVersion(notification)
}
}
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.commons.extensions.areDigitsOnly
import com.simplemobiletools.commons.extensions.showErrorToast
import org.joda.time.DateTimeZone
import java.io.File
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 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,
curRepeatLimit, curRepeatExceptions, "", curImportId, "", curFlags, curEventTypeId, 0, curLastModified, source)
curRepeatLimit, curRepeatExceptions, "", curImportId, DateTimeZone.getDefault().id, curFlags, curEventTypeId, 0, curLastModified, source)
if (event.getIsAllDay() && curEnd > curStart) {
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
// 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
fun isOnProperWeek(startTimes: LongSparseArray<Long>): Boolean {
val initialWeekNumber = Formatter.getDateTimeFromTS(startTimes[id!!]!!).millis / (7 * 24 * 60 * 60 * 1000)
val currentWeekNumber = Formatter.getDateTimeFromTS(startTS).millis / (7 * 24 * 60 * 60 * 1000)
return (initialWeekNumber - currentWeekNumber) % (repeatInterval / WEEK) == 0L
val initialWeekNumber = Formatter.getDateTimeFromTS(startTimes[id!!]!!).withTimeAtStartOfDay().millis / (7 * 24 * 60 * 60 * 1000f)
val currentWeekNumber = Formatter.getDateTimeFromTS(startTS).withTimeAtStartOfDay().millis / (7 * 24 * 60 * 60 * 1000f)
return (Math.round(initialWeekNumber) - Math.round(currentWeekNumber)) % (repeatInterval / WEEK) == 0
}
fun updateIsPastEvent() {

View file

@ -32,7 +32,7 @@ class NotificationReceiver : BroadcastReceiver() {
context.updateListWidget()
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
}

View file

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

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Calendario Simple</string>
<string name="app_launcher_name">Calendar</string>
<string name="app_name">Simple Calendar</string>
<string name="app_launcher_name">Calendario</string>
<string name="change_view">Cambiar vista</string>
<string name="daily_view">Vista diaria</string>
<string name="weekly_view">Vista semanal</string>
@ -104,13 +104,13 @@
<!-- Event attendees -->
<string name="add_another_attendee">Añadir otros asistentes</string>
<string name="my_status">Mi estado:</string>
<string name="going">Voy</string>
<string name="not_going">No voy</string>
<string name="maybe_going">Quizás voy</string>
<string name="going">Iré</string>
<string name="not_going">No iré</string>
<string name="maybe_going">Quizás iré</string>
<string name="invited">Invitado</string>
<!-- 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 -->
<string name="import_events">Importar eventos</string>
@ -192,7 +192,7 @@
<string name="last_used_one">El último usado</string>
<string name="other_time">Otro momento</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 -->
<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,
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_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.
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>
<string name="faq_3_title">I see the visual reminders, but hear no audio. What can I do?</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,
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>
<string name="faq_4_title">Does the app support time zones?</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,
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>
<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.
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">Veo los recordatorios visuales, pero no oigo audio. ¿Qué puedo hacer?</string>
<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,
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">¿La aplicación soporta zonas horarias?</string>
<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,
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 -->
<!-- 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 -->
<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">
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>
----------------------------------------------------------
<b>Calendario Simple Pro Características &amp; beneficios</b>
<b>Calendario Simple Pro Características y beneficios</b>
----------------------------------------------------------
✔️ 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
✔️ Énfasis en la simplicidad hace lo que un calendario debería hacer
✔️ Código abierto (Open source)
@ -269,14 +269,14 @@
✔️ Exporta tu configuración a un fichero .txt para importarlo a otro dispositivo
✔️ Soporte de CalDAV para sincronizar tus eventos entre múltiples dispositivos
✔️ 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
✔️ Opción para posponer recordatorios
✔️ Añade fácilmente días festivos, cumpleaños, aniversarios y citas
✔️ Personalización de eventos: hora de inicio, duración, recordatorios, etc.
✔️ Añade asistentes para cada evento
✔️ 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!

View file

@ -110,7 +110,7 @@
<string name="invited">Invited</string>
<!-- 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 -->
<string name="import_events">Importer hendelser</string>
@ -192,7 +192,7 @@
<string name="last_used_one">Den sist brukte</string>
<string name="other_time">Annen tid</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 -->
<string name="caldav">CalDAV</string>

View file

@ -192,7 +192,7 @@
<string name="last_used_one">Última utilizada</string>
<string name="other_time">Outra</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 -->
<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
✔️ Opção Snooze
✔️ 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
✔️ Passível de ser utilizado como calendário pessoal mas também empresarial
✔️ 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>
----------------------------------------------------------
<b>Calendario Simple Pro Características & beneficios</b>
<b>Calendario Simple Pro Características y beneficios</b>
----------------------------------------------------------
✔️ 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
✔️ Énfasis en la simplicidad hace lo que un calendario debería hacer
✔️ 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
✔️ Soporte de CalDAV para sincronizar tus eventos entre múltiples dispositivos
✔️ 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
✔️ Opción para posponer recordatorios
✔️ Añade fácilmente días festivos, cumpleaños, aniversarios y citas
✔️ Personalización de eventos: hora de inicio, duración, recordatorios, etc.
✔️ Añade asistentes para cada evento
✔️ 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!

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
✔️ Opção Snooze
✔️ 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
✔️ Passível de ser utilizado como calendário pessoal mas também empresarial
✔️ Escolha entre lembretes e notificações por e-mail