From ae0441b5b1078fe9b73d1023777cefd4595cb695 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 23 Mar 2018 22:42:18 +0100 Subject: [PATCH 01/99] update kotlin to 1.2.31 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f056ba19c..584467619 100644 --- a/build.gradle +++ b/build.gradle @@ -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.2.30' + ext.kotlin_version = '1.2.31' repositories { jcenter() From 5665a687a7571d0c949c9d91e8578d44789cfffc Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 23 Mar 2018 22:49:55 +0100 Subject: [PATCH 02/99] update commons to 3.16.16 --- app/build.gradle | 2 +- .../calendar/activities/EventActivity.kt | 16 ++++++++-------- .../calendar/activities/MainActivity.kt | 6 +++--- .../calendar/activities/SettingsActivity.kt | 8 ++++---- .../activities/SnoozeReminderActivity.kt | 8 ++++---- .../calendar/adapters/EventListAdapter.kt | 2 +- .../calendar/fragments/EventListFragment.kt | 6 +++--- .../calendar/helpers/Formatter.kt | 5 ++--- app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 10 files changed, 26 insertions(+), 29 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9ed92cbc7..02772008c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.15.6' + implementation 'com.simplemobiletools:commons:3.16.16' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt index 29a7c2409..1d54552cf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt @@ -174,22 +174,22 @@ class EventActivity : SimpleActivity() { } private fun showReminder1Dialog() { - showPickIntervalDialog(mReminder1Minutes) { - mReminder1Minutes = it + showPickSecondsDialog(mReminder1Minutes * 60) { + mReminder1Minutes = it / 60 checkReminderTexts() } } private fun showReminder2Dialog() { - showPickIntervalDialog(mReminder2Minutes) { - mReminder2Minutes = it + showPickSecondsDialog(mReminder2Minutes * 60) { + mReminder2Minutes = it / 60 checkReminderTexts() } } private fun showReminder3Dialog() { - showPickIntervalDialog(mReminder3Minutes) { - mReminder3Minutes = it + showPickSecondsDialog(mReminder3Minutes * 60) { + mReminder3Minutes = it / 60 checkReminderTexts() } } @@ -700,7 +700,7 @@ class EventActivity : SimpleActivity() { private fun setupStartTime() { hideKeyboard() - TimePickerDialog(this, mDialogTheme, startTimeSetListener, mEventStartDateTime.hourOfDay, mEventStartDateTime.minuteOfHour, config.use24hourFormat).show() + TimePickerDialog(this, mDialogTheme, startTimeSetListener, mEventStartDateTime.hourOfDay, mEventStartDateTime.minuteOfHour, config.use24HourFormat).show() } @SuppressLint("NewApi") @@ -718,7 +718,7 @@ class EventActivity : SimpleActivity() { private fun setupEndTime() { hideKeyboard() - TimePickerDialog(this, mDialogTheme, endTimeSetListener, mEventEndDateTime.hourOfDay, mEventEndDateTime.minuteOfHour, config.use24hourFormat).show() + TimePickerDialog(this, mDialogTheme, endTimeSetListener, mEventEndDateTime.hourOfDay, mEventEndDateTime.minuteOfHour, config.use24HourFormat).show() } private val startDateSetListener = DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth -> diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index bd4d4eb6e..a889e2943 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -126,7 +126,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } if (config.storedView == WEEKLY_VIEW) { - if (mStoredIsSundayFirst != config.isSundayFirst || mStoredUse24HourFormat != config.use24hourFormat) { + if (mStoredIsSundayFirst != config.isSundayFirst || mStoredUse24HourFormat != config.use24HourFormat) { updateViewPager() } } @@ -206,7 +206,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { mStoredTextColor = textColor mStoredPrimaryColor = primaryColor mStoredBackgroundColor = backgroundColor - mStoredUse24HourFormat = use24hourFormat + mStoredUse24HourFormat = use24HourFormat } mStoredDayCode = Formatter.getTodayCode(applicationContext) } @@ -673,7 +673,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { FAQItem(getString(R.string.faq_1_title), getString(R.string.faq_1_text)), FAQItem(getString(R.string.faq_2_title), getString(R.string.faq_2_text))) - startAboutActivity(R.string.app_name, LICENSE_KOTLIN or LICENSE_JODA or LICENSE_STETHO or LICENSE_MULTISELECT or LICENSE_LEAK_CANARY, + startAboutActivity(R.string.app_name, LICENSE_JODA or LICENSE_STETHO or LICENSE_MULTISELECT or LICENSE_LEAK_CANARY, BuildConfig.VERSION_NAME, faqItems) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index c91c6fe72..5fcd67fd6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -113,10 +113,10 @@ class SettingsActivity : SimpleActivity() { } private fun setupHourFormat() { - settings_hour_format.isChecked = config.use24hourFormat + settings_hour_format.isChecked = config.use24HourFormat settings_hour_format_holder.setOnClickListener { settings_hour_format.toggle() - config.use24hourFormat = settings_hour_format.isChecked + config.use24HourFormat = settings_hour_format.isChecked } } @@ -319,8 +319,8 @@ class SettingsActivity : SimpleActivity() { private fun setupSnoozeTime() { updateSnoozeTime() settings_snooze_time_holder.setOnClickListener { - showPickIntervalDialog(config.snoozeTime, true) { - config.snoozeTime = it + showPickSecondsDialog(config.snoozeTime * 60, true) { + config.snoozeTime = it / 60 updateSnoozeTime() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt index 75f7c0431..ec05c36ee 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt @@ -6,17 +6,17 @@ import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.rescheduleReminder import com.simplemobiletools.calendar.helpers.EVENT_ID -import com.simplemobiletools.commons.extensions.showPickIntervalDialog +import com.simplemobiletools.commons.extensions.showPickSecondsDialog class SnoozeReminderActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - showPickIntervalDialog(config.snoozeTime, true, cancelCallback = { dialogCancelled() }) { + showPickSecondsDialog(config.snoozeTime * 60, true, cancelCallback = { dialogCancelled() }) { val eventId = intent.getIntExtra(EVENT_ID, 0) val event = dbHelper.getEventWithId(eventId) - config.snoozeTime = it - rescheduleReminder(event, it) + config.snoozeTime = it / 60 + rescheduleReminder(event, it / 60) finishActivity() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListAdapter.kt index df29b56fc..8d3a8c29a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventListAdapter.kt @@ -35,7 +35,7 @@ class EventListAdapter(activity: SimpleActivity, val listItems: ArrayList Erinnerung - Morgen vorher Füge eine weitere Erinnerung hinzu Ereignis Erinnerungen diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b8e8cd71..fad828cb1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,7 +89,6 @@ Reminder - Tomorrow before Add another reminder Event reminders From 5d5be23915ce65396cd4f12a9e8ef35950576967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kompiuteri=C5=B3=20meistras=20+37060040020?= Date: Fri, 23 Mar 2018 23:56:14 +0200 Subject: [PATCH 03/99] Update strings.xml --- app/src/main/res/values-lt/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 1c8404837..900ca87f8 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -203,7 +203,7 @@ Saugyklos leidimas reikalingas tik eksportuoti ir importuoti įvykius iš .ics bylų. - Contaktų leidimas naudojamas tik importuoti kontaktų gimtadienius ir sukaktis. + Kontaktų leidimas naudojamas tik importuoti kontaktų gimtadienius ir sukaktis. Ši programėle yra vienintelė iš keletos mūsų programėlių. Likusias Jūs galite rasti čia http://www.simplemobiletools.com From 1d54ea77883ef17aa56a0f81fd3e58743e99123b Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 23 Mar 2018 23:09:07 +0100 Subject: [PATCH 04/99] fix #403, tweak some things around notifications --- .../calendar/extensions/Context.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 2dc798663..49136f8ae 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -159,17 +159,15 @@ fun Context.notifyEvent(event: Event) { val startTime = Formatter.getTimeFromTS(applicationContext, event.startTS) val endTime = Formatter.getTimeFromTS(applicationContext, event.endTS) val startDate = Formatter.getDateFromTS(event.startTS) - val displayedStartDate: String - if (startDate == LocalDate.now()) { - displayedStartDate = "" - } else if (startDate == LocalDate.now().plusDays(1)) { - displayedStartDate = getString(R.string.tomorrow) - } else /* At least 2 days in the future */ { - displayedStartDate = Formatter.getDayAndMonth(startDate) + val displayedStartDate = when (startDate) { + LocalDate.now() -> "" + LocalDate.now().plusDays(1) -> getString(R.string.tomorrow) + else -> Formatter.getDayAndMonth(startDate) } + 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 = arrayOf(displayedStartDate, timeRange, descriptionOrLocation).joinToString(" ") + val content = "$displayedStartDate $timeRange $descriptionOrLocation".trim() val notification = getNotification(applicationContext, pendingIntent, event, content) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.notify(event.id, notification) @@ -221,7 +219,7 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even return builder.build() } -private fun getFormattedEventTime(startTime: String, endTime: String) = if (startTime == endTime) startTime else "$startTime\u2013$endTime" +private fun getFormattedEventTime(startTime: String, endTime: String) = if (startTime == endTime) startTime else "$startTime \u2013 $endTime" private fun getPendingIntent(context: Context, event: Event): PendingIntent { val intent = Intent(context, EventActivity::class.java) From 72645d1fcb5decb9c06fff881988807ff22886c9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 09:49:51 +0100 Subject: [PATCH 05/99] fix #404, properly handle an Insert intent with a different mimetype --- app/src/main/AndroidManifest.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c8f601054..abffa3001 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -112,6 +112,14 @@ + + + + + + + + Date: Sat, 24 Mar 2018 11:06:22 +0100 Subject: [PATCH 06/99] start rewriting the monthly view into a custom view for better performance --- .../WidgetMonthlyConfigureActivity.kt | 4 +- .../calendar/fragments/MonthFragment.kt | 14 +- .../calendar/views/MonthView.kt | 51 ++ .../calendar/views/SmallMonthView.kt | 1 + app/src/main/res/layout/fragment_month.xml | 488 +----------------- 5 files changed, 65 insertions(+), 493 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt index 311976787..76aa6fcaf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt @@ -152,7 +152,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { } private fun updateDays() { - val len = mDays!!.size + /*val len = mDays!!.size if (applicationContext.config.displayWeekNumbers) { week_num.setTextColor(mTextColor) @@ -176,7 +176,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { context.addDayNumber(mTextColor, day, this, dayLabelHeight) { dayLabelHeight = it } context.addDayEvents(day, this, mRes, dividerMargin) } - } + }*/ } private val bgSeekbarChangeListener = object : SeekBar.OnSeekBarChangeListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index 6c43546d5..d809ccc17 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -9,13 +9,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.DatePicker -import android.widget.LinearLayout import android.widget.RelativeLayout import android.widget.TextView import com.simplemobiletools.calendar.R -import com.simplemobiletools.calendar.activities.MainActivity -import com.simplemobiletools.calendar.extensions.addDayEvents -import com.simplemobiletools.calendar.extensions.addDayNumber import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.helpers.Config import com.simplemobiletools.calendar.helpers.DAY_CODE @@ -24,8 +20,10 @@ import com.simplemobiletools.calendar.helpers.MonthlyCalendarImpl import com.simplemobiletools.calendar.interfaces.MonthlyCalendar import com.simplemobiletools.calendar.interfaces.NavigationListener import com.simplemobiletools.calendar.models.DayMonthly -import com.simplemobiletools.commons.extensions.* -import kotlinx.android.synthetic.main.first_row.* +import com.simplemobiletools.commons.extensions.applyColorFilter +import com.simplemobiletools.commons.extensions.beGone +import com.simplemobiletools.commons.extensions.getDialogTheme +import com.simplemobiletools.commons.extensions.setupDialogStuff import kotlinx.android.synthetic.main.fragment_month.view.* import kotlinx.android.synthetic.main.top_navigation.view.* import org.joda.time.DateTime @@ -169,7 +167,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { } private fun updateDays(days: List) { - val displayWeekNumbers = mConfig.displayWeekNumbers + /*val displayWeekNumbers = mConfig.displayWeekNumbers val len = days.size if (week_num == null) @@ -198,6 +196,6 @@ class MonthFragment : Fragment(), MonthlyCalendar { context.addDayNumber(mTextColor, day, this, mDayLabelHeight) { mDayLabelHeight = it } context.addDayEvents(day, this, mRes, dividerMargin) } - } + }*/ } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt new file mode 100644 index 000000000..5a5b65655 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -0,0 +1,51 @@ +package com.simplemobiletools.calendar.views + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.util.AttributeSet +import android.view.View +import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.extensions.config + +// used in the Monthly view fragment, 1 view per screen +class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { + private var paint: Paint + private var dayWidth = 0f + private var dayHeight = 0f + private var textColor = 0 + private var days = 42 + + constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) + + init { + textColor = context.config.textColor + + paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = textColor + textSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat() + textAlign = Paint.Align.CENTER + } + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + if (dayWidth == 0f) { + dayWidth = (canvas.width / 7).toFloat() + } + + if (dayHeight == 0f) { + dayHeight = (canvas.height / 6).toFloat() + } + + var curId = 1 + for (y in 0..5) { + for (x in 1..7) { + if (curId in 1..days) { + canvas.drawText(curId.toString(), x * dayWidth - dayWidth / 2, y * dayHeight + paint.textSize, paint) + } + curId++ + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/SmallMonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/SmallMonthView.kt index 9ba798b32..af53d3b8c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/SmallMonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/SmallMonthView.kt @@ -14,6 +14,7 @@ import com.simplemobiletools.commons.extensions.adjustAlpha import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import java.util.* +// used for displaying months at Yearly view class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { private var paint: Paint private var todayCirclePaint: Paint diff --git a/app/src/main/res/layout/fragment_month.xml b/app/src/main/res/layout/fragment_month.xml index a7c627fdb..71db5cb06 100644 --- a/app/src/main/res/layout/fragment_month.xml +++ b/app/src/main/res/layout/fragment_month.xml @@ -17,489 +17,11 @@ android:layout_below="@+id/top_value" tools:ignore="UnknownIdInLayout"/> - + android:layout_centerInParent="true"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From e9ab1dbde8b4e6e327d809a71e1e512903eeb0c1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 12:25:33 +0100 Subject: [PATCH 07/99] properly update the days at month view --- .../WidgetMonthlyConfigureActivity.kt | 2 +- .../calendar/fragments/MonthFragment.kt | 6 ++- .../calendar/helpers/MonthlyCalendarImpl.kt | 14 +++---- .../helpers/MyWidgetMonthlyProvider.kt | 2 +- .../calendar/interfaces/MonthlyCalendar.kt | 2 +- .../calendar/views/MonthView.kt | 41 +++++++++++++++++-- app/src/main/res/layout/fragment_month.xml | 2 +- 7 files changed, 51 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt index 76aa6fcaf..55adf051e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt @@ -194,7 +194,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { } } - override fun updateMonthlyCalendar(context: Context, month: String, days: List, checkedEvents: Boolean) { + override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList, checkedEvents: Boolean) { runOnUiThread { mDays = days top_value.text = month diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index d809ccc17..3bcc96e9c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -83,7 +83,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { mCalendar?.updateMonthlyCalendar(Formatter.getDateTimeFromCode(mDayCode)) } - override fun updateMonthlyCalendar(context: Context, month: String, days: List, checkedEvents: Boolean) { + override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList, checkedEvents: Boolean) { val newHash = month.hashCode() + days.hashCode().toLong() if ((mLastHash != 0L && !checkedEvents) || mLastHash == newHash) { return @@ -166,7 +166,9 @@ class MonthFragment : Fragment(), MonthlyCalendar { } } - private fun updateDays(days: List) { + private fun updateDays(days: ArrayList) { + mHolder.month_view.updateDays(days) + /*val displayWeekNumbers = mConfig.displayWeekNumbers val len = days.size diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt index 5e43361e7..09e1cf632 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt @@ -47,7 +47,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) var isThisMonth = false var isToday: Boolean var value = prevMonthDays - firstDayIndex + 1 - var curDay: DateTime = mTargetDate + var curDay = mTargetDate for (i in 0 until DAYS_CNT) { when { @@ -67,7 +67,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) } } - isToday = isThisMonth && isToday(mTargetDate, value) + isToday = isToday(curDay, value) val newDay = curDay.withDayOfMonth(value) val dayCode = Formatter.getDayCodeFromDateTime(newDay) @@ -95,13 +95,13 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) var currDay = startDateTime var dayCode = Formatter.getDayCodeFromDateTime(currDay) var currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) } - dayEvents.put(dayCode, currDayEvents) + dayEvents[dayCode] = currDayEvents while (Formatter.getDayCodeFromDateTime(currDay) != endCode) { currDay = currDay.plusDays(1) dayCode = Formatter.getDayCodeFromDateTime(currDay) currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) } - dayEvents.put(dayCode, currDayEvents) + dayEvents[dayCode] = currDayEvents } } @@ -113,10 +113,8 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) } private fun isToday(targetDate: DateTime, curDayInMonth: Int): Boolean { - return if (curDayInMonth > targetDate.dayOfMonth().maximumValue) - false - else - targetDate.withDayOfMonth(curDayInMonth).toString(Formatter.DAYCODE_PATTERN) == mToday + val targetMonthDays = targetDate.dayOfMonth().maximumValue + return targetDate.withDayOfMonth(Math.min(curDayInMonth, targetMonthDays)).toString(Formatter.DAYCODE_PATTERN) == mToday } private val monthName: String diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt index 7ebff7fdd..1d2c7e998 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt @@ -149,7 +149,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() { } private val monthlyCalendar = object : MonthlyCalendar { - override fun updateMonthlyCalendar(context: Context, month: String, days: List, checkedEvents: Boolean) { + override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList, checkedEvents: Boolean) { val largerFontSize = context.config.getFontSize() + 3f val textColor = context.config.widgetTextColor val resources = context.resources diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/MonthlyCalendar.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/MonthlyCalendar.kt index 1f7c188b5..1ada47f89 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/MonthlyCalendar.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/interfaces/MonthlyCalendar.kt @@ -4,5 +4,5 @@ import android.content.Context import com.simplemobiletools.calendar.models.DayMonthly interface MonthlyCalendar { - fun updateMonthlyCalendar(context: Context, month: String, days: List, checkedEvents: Boolean) + fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList, checkedEvents: Boolean) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 5a5b65655..ff71b0f41 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -7,6 +7,10 @@ import android.util.AttributeSet import android.view.View import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.extensions.config +import com.simplemobiletools.calendar.helpers.LOW_ALPHA +import com.simplemobiletools.calendar.models.DayMonthly +import com.simplemobiletools.commons.extensions.adjustAlpha +import com.simplemobiletools.commons.extensions.getContrastColor // used in the Monthly view fragment, 1 view per screen class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { @@ -14,12 +18,16 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var dayWidth = 0f private var dayHeight = 0f private var textColor = 0 - private var days = 42 + private var weakTextColor = 0 + private var todayTextColor = 0 + private var days = ArrayList() constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) init { textColor = context.config.textColor + weakTextColor = textColor.adjustAlpha(LOW_ALPHA) + todayTextColor = context.config.primaryColor.getContrastColor() paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor @@ -28,6 +36,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } + fun updateDays(newDays: ArrayList) { + days = newDays + invalidate() + } + override fun onDraw(canvas: Canvas) { super.onDraw(canvas) if (dayWidth == 0f) { @@ -38,14 +51,34 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con dayHeight = (canvas.height / 6).toFloat() } - var curId = 1 + var curId = 0 for (y in 0..5) { for (x in 1..7) { - if (curId in 1..days) { - canvas.drawText(curId.toString(), x * dayWidth - dayWidth / 2, y * dayHeight + paint.textSize, paint) + val day = days.getOrNull(curId) + if (day != null) { + canvas.drawText(day.value.toString(), x * dayWidth - dayWidth / 2, y * dayHeight + paint.textSize, getPaint(day)) } curId++ } } } + + private fun getPaint(day: DayMonthly): Paint { + var paintColor = textColor + if (day.isToday) { + paintColor = paintColor.getContrastColor() + } + + if (!day.isThisMonth) { + paintColor = paintColor.adjustAlpha(LOW_ALPHA) + } + + return getColoredPaint(paintColor) + } + + private fun getColoredPaint(color: Int): Paint { + val curPaint = Paint(paint) + curPaint.color = color + return curPaint + } } diff --git a/app/src/main/res/layout/fragment_month.xml b/app/src/main/res/layout/fragment_month.xml index 71db5cb06..768c1cd12 100644 --- a/app/src/main/res/layout/fragment_month.xml +++ b/app/src/main/res/layout/fragment_month.xml @@ -18,7 +18,7 @@ tools:ignore="UnknownIdInLayout"/> Date: Sat, 24 Mar 2018 16:12:09 +0100 Subject: [PATCH 08/99] draw a circle around todays date --- .../calendar/views/MonthView.kt | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index ff71b0f41..b148b9e29 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -10,6 +10,7 @@ import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.helpers.LOW_ALPHA import com.simplemobiletools.calendar.models.DayMonthly import com.simplemobiletools.commons.extensions.adjustAlpha +import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getContrastColor // used in the Monthly view fragment, 1 view per screen @@ -17,17 +18,17 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var paint: Paint private var dayWidth = 0f private var dayHeight = 0f + private var primaryColor = 0 private var textColor = 0 private var weakTextColor = 0 - private var todayTextColor = 0 private var days = ArrayList() constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) init { + primaryColor = context.getAdjustedPrimaryColor() textColor = context.config.textColor weakTextColor = textColor.adjustAlpha(LOW_ALPHA) - todayTextColor = context.config.primaryColor.getContrastColor() paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor @@ -56,17 +57,22 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con for (x in 1..7) { val day = days.getOrNull(curId) if (day != null) { - canvas.drawText(day.value.toString(), x * dayWidth - dayWidth / 2, y * dayHeight + paint.textSize, getPaint(day)) + val xPos = x * dayWidth - dayWidth / 2 + val yPos = y * dayHeight + if (day.isToday) { + canvas.drawCircle(xPos, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) + } + canvas.drawText(day.value.toString(), xPos, yPos + paint.textSize, getTextPaint(day)) } curId++ } } } - private fun getPaint(day: DayMonthly): Paint { + private fun getTextPaint(day: DayMonthly): Paint { var paintColor = textColor if (day.isToday) { - paintColor = paintColor.getContrastColor() + paintColor = primaryColor.getContrastColor() } if (!day.isThisMonth) { @@ -81,4 +87,14 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con curPaint.color = color return curPaint } + + private fun getCirclePaint(day: DayMonthly): Paint { + val curPaint = Paint(paint) + var paintColor = primaryColor + if (!day.isThisMonth) { + paintColor = paintColor.adjustAlpha(LOW_ALPHA) + } + curPaint.color = paintColor + return curPaint + } } From 503d941d65e59440d5adbf58b794dc60d7a125fe Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 17:41:04 +0100 Subject: [PATCH 09/99] move the week day letters in MonthView too --- .../WidgetMonthlyConfigureActivity.kt | 4 ++-- .../calendar/fragments/MonthFragment.kt | 5 ++--- .../calendar/views/MonthView.kt | 21 ++++++++++++++++--- app/src/main/res/layout/fragment_month.xml | 12 +---------- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt index 55adf051e..9861b53f0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt @@ -203,10 +203,10 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { } private fun updateLabels() { - for (i in 0..6) { + /*for (i in 0..6) { findViewById(mRes.getIdentifier("label_$i", "id", mPackageName)).apply { setTextColor(mTextColor) } - } + }*/ } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index 3bcc96e9c..acac56d02 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -10,7 +10,6 @@ import android.view.View import android.view.ViewGroup import android.widget.DatePicker import android.widget.RelativeLayout -import android.widget.TextView import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.helpers.Config @@ -152,7 +151,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { } private fun setupLabels() { - val letters = context!!.resources.getStringArray(R.array.week_day_letters) + /*val letters = context!!.resources.getStringArray(R.array.week_day_letters) for (i in 0..6) { var index = i if (mSundayFirst) { @@ -163,7 +162,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { setTextColor(mTextColor) text = letters[index] } - } + }*/ } private fun updateDays(days: ArrayList) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index b148b9e29..f26431979 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -12,6 +12,7 @@ import com.simplemobiletools.calendar.models.DayMonthly import com.simplemobiletools.commons.extensions.adjustAlpha import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getContrastColor +import com.simplemobiletools.commons.extensions.moveLastItemToFront // used in the Monthly view fragment, 1 view per screen class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { @@ -21,6 +22,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var primaryColor = 0 private var textColor = 0 private var weakTextColor = 0 + private var weekDaysLetterHeight = 0 + private var dayLetters = ArrayList() private var days = ArrayList() constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) @@ -30,11 +33,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con textColor = context.config.textColor weakTextColor = textColor.adjustAlpha(LOW_ALPHA) + val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat() paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor - textSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat() + textSize = normalTextSize textAlign = Paint.Align.CENTER } + + weekDaysLetterHeight = 2 * normalTextSize.toInt() + dayLetters = context.resources.getStringArray(R.array.week_day_letters).toList() as ArrayList + if (context.config.isSundayFirst) { + dayLetters.moveLastItemToFront() + } } fun updateDays(newDays: ArrayList) { @@ -49,7 +59,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } if (dayHeight == 0f) { - dayHeight = (canvas.height / 6).toFloat() + dayHeight = ((canvas.height - weekDaysLetterHeight) / 6).toFloat() + } + + for (i in 0..6) { + val xPos = (i + 1) * dayWidth - dayWidth / 2 + canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight / 2f, paint) } var curId = 0 @@ -58,7 +73,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val day = days.getOrNull(curId) if (day != null) { val xPos = x * dayWidth - dayWidth / 2 - val yPos = y * dayHeight + val yPos = y * dayHeight + weekDaysLetterHeight if (day.isToday) { canvas.drawCircle(xPos, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) } diff --git a/app/src/main/res/layout/fragment_month.xml b/app/src/main/res/layout/fragment_month.xml index 768c1cd12..6cccd9c7d 100644 --- a/app/src/main/res/layout/fragment_month.xml +++ b/app/src/main/res/layout/fragment_month.xml @@ -1,7 +1,6 @@ - - + android:layout_below="@+id/top_left_arrow"/> From f59933564e397aa49cf2d13c9d53b0fdbc9b7a1b Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 18:56:21 +0100 Subject: [PATCH 10/99] recheck week day letters in MonthView at updating items --- .../simplemobiletools/calendar/views/MonthView.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index f26431979..b627722bd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -41,14 +41,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } weekDaysLetterHeight = 2 * normalTextSize.toInt() - dayLetters = context.resources.getStringArray(R.array.week_day_letters).toList() as ArrayList - if (context.config.isSundayFirst) { - dayLetters.moveLastItemToFront() - } + initWeekDayLetters() } fun updateDays(newDays: ArrayList) { days = newDays + initWeekDayLetters() invalidate() } @@ -112,4 +110,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con curPaint.color = paintColor return curPaint } + + private fun initWeekDayLetters() { + dayLetters = context.resources.getStringArray(R.array.week_day_letters).toList() as ArrayList + if (context.config.isSundayFirst) { + dayLetters.moveLastItemToFront() + } + } } From e3c08831986d0468eb5c09e91dbaa37766826a34 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 19:26:11 +0100 Subject: [PATCH 11/99] mark the current day of the week, if it is at the current month --- .../calendar/views/MonthView.kt | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index b627722bd..57169879a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -13,6 +13,7 @@ import com.simplemobiletools.commons.extensions.adjustAlpha import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getContrastColor import com.simplemobiletools.commons.extensions.moveLastItemToFront +import org.joda.time.DateTime // used in the Monthly view fragment, 1 view per screen class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { @@ -23,6 +24,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var textColor = 0 private var weakTextColor = 0 private var weekDaysLetterHeight = 0 + private var currDayOfWeek = 0 private var dayLetters = ArrayList() private var days = ArrayList() @@ -42,11 +44,13 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con weekDaysLetterHeight = 2 * normalTextSize.toInt() initWeekDayLetters() + setupCurrentDayOfWeekIndex() } fun updateDays(newDays: ArrayList) { days = newDays initWeekDayLetters() + setupCurrentDayOfWeekIndex() invalidate() } @@ -62,7 +66,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con for (i in 0..6) { val xPos = (i + 1) * dayWidth - dayWidth / 2 - canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight / 2f, paint) + var weekDayLetterPaint = paint + if (i == currDayOfWeek) { + weekDayLetterPaint = getColoredPaint(primaryColor) + } + canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight / 2f, weekDayLetterPaint) } var curId = 0 @@ -117,4 +125,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con dayLetters.moveLastItemToFront() } } + + private fun setupCurrentDayOfWeekIndex() { + if (days.firstOrNull { it.isToday && it.isThisMonth } == null) { + currDayOfWeek = -1 + return + } + + currDayOfWeek = DateTime().dayOfWeek + if (context.config.isSundayFirst) { + currDayOfWeek %= 7 + } else { + currDayOfWeek-- + } + } } From 7c17438c0c173759355e70251e0b34fa60601dbf Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 21:30:47 +0100 Subject: [PATCH 12/99] wrap the month view in a framelayout and add click effects --- .../calendar/fragments/MonthFragment.kt | 2 +- .../calendar/views/MonthView.kt | 11 +-- .../calendar/views/MonthViewWrapper.kt | 88 +++++++++++++++++++ app/src/main/res/layout/fragment_month.xml | 8 +- app/src/main/res/layout/month_view.xml | 6 ++ .../main/res/layout/month_view_background.xml | 7 ++ 6 files changed, 112 insertions(+), 10 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt create mode 100644 app/src/main/res/layout/month_view.xml create mode 100644 app/src/main/res/layout/month_view_background.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index acac56d02..fecc85416 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -166,7 +166,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { } private fun updateDays(days: ArrayList) { - mHolder.month_view.updateDays(days) + mHolder.month_view_wrapper.updateDays(days) /*val displayWeekNumbers = mConfig.displayWeekNumbers val len = days.size diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 57169879a..619c911a7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -36,13 +36,14 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con weakTextColor = textColor.adjustAlpha(LOW_ALPHA) val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat() + weekDaysLetterHeight = 2 * normalTextSize.toInt() + paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor textSize = normalTextSize textAlign = Paint.Align.CENTER } - weekDaysLetterHeight = 2 * normalTextSize.toInt() initWeekDayLetters() setupCurrentDayOfWeekIndex() } @@ -57,11 +58,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con override fun onDraw(canvas: Canvas) { super.onDraw(canvas) if (dayWidth == 0f) { - dayWidth = (canvas.width / 7).toFloat() + dayWidth = canvas.width / 7f } if (dayHeight == 0f) { - dayHeight = ((canvas.height - weekDaysLetterHeight) / 6).toFloat() + dayHeight = (canvas.height - weekDaysLetterHeight) / 6f } for (i in 0..6) { @@ -75,10 +76,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con var curId = 0 for (y in 0..5) { - for (x in 1..7) { + for (x in 0..6) { val day = days.getOrNull(curId) if (day != null) { - val xPos = x * dayWidth - dayWidth / 2 + val xPos = x * dayWidth + dayWidth / 2 val yPos = y * dayHeight + weekDaysLetterHeight if (day.isToday) { canvas.drawCircle(xPos, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt new file mode 100644 index 000000000..b412dc780 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt @@ -0,0 +1,88 @@ +package com.simplemobiletools.calendar.views + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.FrameLayout +import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.models.DayMonthly +import com.simplemobiletools.commons.extensions.onGlobalLayout +import kotlinx.android.synthetic.main.month_view.view.* + +// used in the Monthly view fragment, 1 view per screen +class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) { + private var dayWidth = 0f + private var dayHeight = 0f + private var weekDaysLetterHeight = 0 + private var wereViewsAdded = false + private var days = ArrayList() + private var inflater: LayoutInflater + private var monthView: MonthView + + constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) + + init { + val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat() + weekDaysLetterHeight = 2 * normalTextSize.toInt() + + inflater = LayoutInflater.from(context) + monthView = inflater.inflate(R.layout.month_view, this).month_view + + onGlobalLayout { + measureSizes() + if (!wereViewsAdded && days.isNotEmpty()) { + addViews() + monthView.updateDays(days) + } + } + } + + fun updateDays(newDays: ArrayList) { + days = newDays + if (dayWidth != 0f) { + addViews() + monthView.updateDays(days) + } + } + + private fun measureSizes() { + if (dayWidth == 0f) { + dayWidth = width / 7f + } + + if (dayHeight == 0f) { + dayHeight = (height - weekDaysLetterHeight) / 6f + } + } + + private fun addViews() { + removeAllViews() + monthView = inflater.inflate(R.layout.month_view, this).month_view + wereViewsAdded = true + var curId = 0 + for (y in 0..5) { + for (x in 0..6) { + val day = days.getOrNull(curId) + if (day != null) { + val xPos = x * dayWidth + val yPos = y * dayHeight + weekDaysLetterHeight + addViewBackground(xPos, yPos, day) + } + curId++ + } + } + } + + private fun addViewBackground(xPos: Float, yPos: Float, day: DayMonthly) { + inflater.inflate(R.layout.month_view_background, this, false).apply { + layoutParams.width = dayWidth.toInt() + layoutParams.height = dayHeight.toInt() + x = xPos + y = yPos + setOnClickListener { + + } + addView(this) + } + } +} diff --git a/app/src/main/res/layout/fragment_month.xml b/app/src/main/res/layout/fragment_month.xml index 6cccd9c7d..401c4883f 100644 --- a/app/src/main/res/layout/fragment_month.xml +++ b/app/src/main/res/layout/fragment_month.xml @@ -8,10 +8,10 @@ - diff --git a/app/src/main/res/layout/month_view.xml b/app/src/main/res/layout/month_view.xml new file mode 100644 index 000000000..0294b179d --- /dev/null +++ b/app/src/main/res/layout/month_view.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/layout/month_view_background.xml b/app/src/main/res/layout/month_view_background.xml new file mode 100644 index 000000000..f7eb272d5 --- /dev/null +++ b/app/src/main/res/layout/month_view_background.xml @@ -0,0 +1,7 @@ + + From aeaa4c265f2fdb39c3e7e47e02528d516eecb254 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 24 Mar 2018 23:31:02 +0100 Subject: [PATCH 13/99] open the appropriate day after clicking it on the monthly view --- .../simplemobiletools/calendar/fragments/MonthFragment.kt | 5 ++++- .../simplemobiletools/calendar/views/MonthViewWrapper.kt | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index fecc85416..6497b26e8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -11,6 +11,7 @@ import android.view.ViewGroup import android.widget.DatePicker import android.widget.RelativeLayout import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.helpers.Config import com.simplemobiletools.calendar.helpers.DAY_CODE @@ -166,7 +167,9 @@ class MonthFragment : Fragment(), MonthlyCalendar { } private fun updateDays(days: ArrayList) { - mHolder.month_view_wrapper.updateDays(days) + mHolder.month_view_wrapper.updateDays(days) { + (activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(it.code)) + } /*val displayWeekNumbers = mConfig.displayWeekNumbers val len = days.size diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt index b412dc780..610c08e56 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt @@ -18,6 +18,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F private var days = ArrayList() private var inflater: LayoutInflater private var monthView: MonthView + private var dayClickCallback: ((day: DayMonthly) -> Unit)? = null constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) @@ -37,7 +38,8 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F } } - fun updateDays(newDays: ArrayList) { + fun updateDays(newDays: ArrayList, callback: ((DayMonthly) -> Unit)? = null) { + dayClickCallback = callback days = newDays if (dayWidth != 0f) { addViews() @@ -80,7 +82,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F x = xPos y = yPos setOnClickListener { - + dayClickCallback?.invoke(day) } addView(this) } From edd3bd0737240bf3a2973010a094490691326717 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 18:03:23 +0200 Subject: [PATCH 14/99] add event titles on the monthly view --- .../calendar/helpers/MonthlyCalendarImpl.kt | 2 +- .../calendar/models/DayMonthly.kt | 3 +- .../calendar/views/MonthView.kt | 40 ++++++++++++++++--- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt index 09e1cf632..d4d26b9e2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt @@ -71,7 +71,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) val newDay = curDay.withDayOfMonth(value) val dayCode = Formatter.getDayCodeFromDateTime(newDay) - val day = DayMonthly(value, isThisMonth, isToday, dayCode, newDay.weekOfWeekyear, ArrayList()) + val day = DayMonthly(value, isThisMonth, isToday, dayCode, newDay.weekOfWeekyear, ArrayList(), i) days.add(day) value++ } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/DayMonthly.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/DayMonthly.kt index 8f8cfe30e..55e9d57a4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/DayMonthly.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/DayMonthly.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.calendar.models -data class DayMonthly(val value: Int, val isThisMonth: Boolean, val isToday: Boolean, val code: String, val weekOfYear: Int, var dayEvents: ArrayList) { +data class DayMonthly(val value: Int, val isThisMonth: Boolean, val isToday: Boolean, val code: String, val weekOfYear: Int, var dayEvents: ArrayList, + var indexOnMonthView: Int) { fun hasEvent() = dayEvents.isNotEmpty() } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 619c911a7..82803be1c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -3,7 +3,10 @@ package com.simplemobiletools.calendar.views import android.content.Context import android.graphics.Canvas import android.graphics.Paint +import android.text.TextPaint +import android.text.TextUtils import android.util.AttributeSet +import android.util.SparseIntArray import android.view.View import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.extensions.config @@ -18,15 +21,19 @@ import org.joda.time.DateTime // used in the Monthly view fragment, 1 view per screen class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { private var paint: Paint + private var eventTitlePaint: TextPaint private var dayWidth = 0f private var dayHeight = 0f private var primaryColor = 0 private var textColor = 0 private var weakTextColor = 0 private var weekDaysLetterHeight = 0 + private var eventTitleHeight = 0 private var currDayOfWeek = 0 + private var eventTitlePadding = 0 private var dayLetters = ArrayList() private var days = ArrayList() + private var dayVerticalOffsets = SparseIntArray() constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) @@ -35,15 +42,24 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con textColor = context.config.textColor weakTextColor = textColor.adjustAlpha(LOW_ALPHA) - val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat() - weekDaysLetterHeight = 2 * normalTextSize.toInt() + eventTitlePadding = resources.getDimensionPixelSize(R.dimen.tiny_margin) + val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size) + weekDaysLetterHeight = 2 * normalTextSize paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor - textSize = normalTextSize + textSize = normalTextSize.toFloat() textAlign = Paint.Align.CENTER } + val smallerTextSize = resources.getDimensionPixelSize(R.dimen.smaller_text_size) + eventTitleHeight = smallerTextSize + 2 * eventTitlePadding + eventTitlePaint = TextPaint(Paint.ANTI_ALIAS_FLAG).apply { + color = textColor + textSize = smallerTextSize.toFloat() + textAlign = Paint.Align.LEFT + } + initWeekDayLetters() setupCurrentDayOfWeekIndex() } @@ -79,18 +95,30 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con for (x in 0..6) { val day = days.getOrNull(curId) if (day != null) { - val xPos = x * dayWidth + dayWidth / 2 + val xPos = x * dayWidth val yPos = y * dayHeight + weekDaysLetterHeight + val xPosCenter = xPos + dayWidth / 2 if (day.isToday) { - canvas.drawCircle(xPos, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) + canvas.drawCircle(xPosCenter, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) + } + canvas.drawText(day.value.toString(), xPosCenter, yPos + paint.textSize, getTextPaint(day)) + dayVerticalOffsets.put(day.indexOnMonthView, weekDaysLetterHeight) + + day.dayEvents.forEach { + drawEventTitle(it.title, canvas, xPos, yPos + dayVerticalOffsets[day.indexOnMonthView]) + dayVerticalOffsets.put(day.indexOnMonthView, dayVerticalOffsets[day.indexOnMonthView] + eventTitleHeight) } - canvas.drawText(day.value.toString(), xPos, yPos + paint.textSize, getTextPaint(day)) } curId++ } } } + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float) { + val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth - 2 * eventTitlePadding, TextUtils.TruncateAt.END) + canvas.drawText(title, 0, ellipsized.length, x + eventTitlePadding, y, eventTitlePaint) + } + private fun getTextPaint(day: DayMonthly): Paint { var paintColor = textColor if (day.isToday) { From b38e8ffbdb726899998e94cbfea377871ab28d62 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 20:25:48 +0200 Subject: [PATCH 15/99] draw colored background behind event titles --- .../calendar/views/MonthView.kt | 50 ++++++++++++++----- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 82803be1c..cef900d44 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.calendar.views import android.content.Context import android.graphics.Canvas import android.graphics.Paint +import android.graphics.RectF import android.text.TextPaint import android.text.TextUtils import android.util.AttributeSet @@ -20,6 +21,9 @@ import org.joda.time.DateTime // used in the Monthly view fragment, 1 view per screen class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { + private val BG_CORNER_RADIUS = 4f + private val ROW_COUNT = 6 + private var paint: Paint private var eventTitlePaint: TextPaint private var dayWidth = 0f @@ -30,7 +34,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var weekDaysLetterHeight = 0 private var eventTitleHeight = 0 private var currDayOfWeek = 0 - private var eventTitlePadding = 0 + private var smallPadding = 0 + private var bgRectF = RectF() private var dayLetters = ArrayList() private var days = ArrayList() private var dayVerticalOffsets = SparseIntArray() @@ -42,9 +47,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con textColor = context.config.textColor weakTextColor = textColor.adjustAlpha(LOW_ALPHA) - eventTitlePadding = resources.getDimensionPixelSize(R.dimen.tiny_margin) + smallPadding = resources.displayMetrics.density.toInt() val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size) - weekDaysLetterHeight = 2 * normalTextSize + weekDaysLetterHeight = normalTextSize * 2 paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor @@ -53,7 +58,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } val smallerTextSize = resources.getDimensionPixelSize(R.dimen.smaller_text_size) - eventTitleHeight = smallerTextSize + 2 * eventTitlePadding + eventTitleHeight = smallerTextSize eventTitlePaint = TextPaint(Paint.ANTI_ALIAS_FLAG).apply { color = textColor textSize = smallerTextSize.toFloat() @@ -73,14 +78,16 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con override fun onDraw(canvas: Canvas) { super.onDraw(canvas) + dayVerticalOffsets.clear() if (dayWidth == 0f) { dayWidth = canvas.width / 7f } if (dayHeight == 0f) { - dayHeight = (canvas.height - weekDaysLetterHeight) / 6f + dayHeight = (canvas.height - weekDaysLetterHeight) / ROW_COUNT.toFloat() } + // week day letters for (i in 0..6) { val xPos = (i + 1) * dayWidth - dayWidth / 2 var weekDayLetterPaint = paint @@ -91,22 +98,33 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } var curId = 0 - for (y in 0..5) { + for (y in 0 until ROW_COUNT) { for (x in 0..6) { val day = days.getOrNull(curId) if (day != null) { + dayVerticalOffsets.put(day.indexOnMonthView, dayVerticalOffsets[day.indexOnMonthView] + weekDaysLetterHeight) val xPos = x * dayWidth - val yPos = y * dayHeight + weekDaysLetterHeight + val yPos = y * dayHeight + dayVerticalOffsets[day.indexOnMonthView] val xPosCenter = xPos + dayWidth / 2 if (day.isToday) { canvas.drawCircle(xPosCenter, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) } canvas.drawText(day.value.toString(), xPosCenter, yPos + paint.textSize, getTextPaint(day)) - dayVerticalOffsets.put(day.indexOnMonthView, weekDaysLetterHeight) day.dayEvents.forEach { - drawEventTitle(it.title, canvas, xPos, yPos + dayVerticalOffsets[day.indexOnMonthView]) - dayVerticalOffsets.put(day.indexOnMonthView, dayVerticalOffsets[day.indexOnMonthView] + eventTitleHeight) + val verticalOffset = dayVerticalOffsets[day.indexOnMonthView] + + // background rectangle + val backgroundY = yPos + verticalOffset + val bgLeft = xPos + smallPadding + val bgTop = backgroundY + smallPadding - eventTitleHeight + val bgRight = xPos + dayWidth - smallPadding + val bgBottom = backgroundY + smallPadding * 2 + bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) + canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getColoredPaint(it.color)) + + drawEventTitle(it.title, canvas, xPos, yPos + verticalOffset, it.color) + dayVerticalOffsets.put(day.indexOnMonthView, verticalOffset + eventTitleHeight + smallPadding * 2) } } curId++ @@ -114,9 +132,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } - private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float) { - val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth - 2 * eventTitlePadding, TextUtils.TruncateAt.END) - canvas.drawText(title, 0, ellipsized.length, x + eventTitlePadding, y, eventTitlePaint) + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int) { + val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth - smallPadding * 4, TextUtils.TruncateAt.END) + canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor)) } private fun getTextPaint(day: DayMonthly): Paint { @@ -138,6 +156,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con return curPaint } + private fun getEventTitlePaint(color: Int): Paint { + val curPaint = Paint(eventTitlePaint) + curPaint.color = color.getContrastColor() + return curPaint + } + private fun getCirclePaint(day: DayMonthly): Paint { val curPaint = Paint(paint) var paintColor = primaryColor From 18d8fe5747b481477bb70020ef71abeb442cb353 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 20:53:32 +0200 Subject: [PATCH 16/99] use longer rectangles and event titles at events spanning multiple days --- .../calendar/fragments/WeekFragment.kt | 6 +++--- .../calendar/views/MonthView.kt | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt index 2cd5070ab..ab37b8062 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt @@ -359,10 +359,10 @@ class WeekFragment : Fragment(), WeeklyCalendar { val minTS = Math.max(startDateTime.seconds(), mWeekTimestamp) val maxTS = Math.min(endDateTime.seconds(), mWeekTimestamp + WEEK_SECONDS) - val startDateTimeInWeek = Formatter.getDateTimeFromTS(minTS) - val firstDayIndex = (startDateTimeInWeek.dayOfWeek - if (context!!.config.isSundayFirst) 0 else 1) % 7 val daysCnt = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days + val startDateTimeInWeek = Formatter.getDateTimeFromTS(minTS) + val firstDayIndex = (startDateTimeInWeek.dayOfWeek - if (context!!.config.isSundayFirst) 0 else 1) % 7 var doesEventFit: Boolean val cnt = allDayRows.size - 1 var wasEventHandled = false @@ -383,7 +383,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { wasEventHandled = true } else if (index == cnt) { if (allDayRows.size == index + 1) { - allDayRows.add(HashSet()) + allDayRows.add(HashSet()) addNewLine() drawAtLine++ wasEventHandled = true diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index cef900d44..85bb498c6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -11,6 +11,8 @@ import android.util.SparseIntArray import android.view.View import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.extensions.config +import com.simplemobiletools.calendar.extensions.seconds +import com.simplemobiletools.calendar.helpers.Formatter import com.simplemobiletools.calendar.helpers.LOW_ALPHA import com.simplemobiletools.calendar.models.DayMonthly import com.simplemobiletools.commons.extensions.adjustAlpha @@ -18,6 +20,7 @@ import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getContrastColor import com.simplemobiletools.commons.extensions.moveLastItemToFront import org.joda.time.DateTime +import org.joda.time.Days // used in the Monthly view fragment, 1 view per screen class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { @@ -114,16 +117,22 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con day.dayEvents.forEach { val verticalOffset = dayVerticalOffsets[day.indexOnMonthView] + val startDateTime = Formatter.getDateTimeFromTS(it.startTS) + val endDateTime = Formatter.getDateTimeFromTS(it.endTS) + val minTS = Math.max(startDateTime.seconds(), 0) + val maxTS = Math.min(endDateTime.seconds(), Int.MAX_VALUE) + val daysCnt = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days + 1 + // background rectangle val backgroundY = yPos + verticalOffset val bgLeft = xPos + smallPadding val bgTop = backgroundY + smallPadding - eventTitleHeight - val bgRight = xPos + dayWidth - smallPadding + val bgRight = xPos - smallPadding + dayWidth * daysCnt val bgBottom = backgroundY + smallPadding * 2 bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getColoredPaint(it.color)) - drawEventTitle(it.title, canvas, xPos, yPos + verticalOffset, it.color) + drawEventTitle(it.title, canvas, xPos, yPos + verticalOffset, it.color, daysCnt) dayVerticalOffsets.put(day.indexOnMonthView, verticalOffset + eventTitleHeight + smallPadding * 2) } } @@ -132,8 +141,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } - private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int) { - val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth - smallPadding * 4, TextUtils.TruncateAt.END) + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int, daysCnt: Int) { + val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth * daysCnt - smallPadding * 4, TextUtils.TruncateAt.END) canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor)) } From 35afd48f42171ecdd5c3a31d440a21ee2a486a57 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 20:56:49 +0200 Subject: [PATCH 17/99] use the array of week day letters at the week fragment --- .../calendar/fragments/WeekFragment.kt | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt index ab37b8062..661e9656f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/WeekFragment.kt @@ -143,7 +143,9 @@ class WeekFragment : Fragment(), WeeklyCalendar { val todayCode = Formatter.getDayCodeFromDateTime(DateTime()) for (i in 0..6) { val dayCode = Formatter.getDayCodeFromDateTime(curDay) - val dayLetter = getDayLetter(curDay.dayOfWeek) + val dayLetters = mRes.getStringArray(R.array.week_day_letters).toList() as ArrayList + val dayLetter = dayLetters[curDay.dayOfWeek - 1] + mView.findViewById(mRes.getIdentifier("week_day_label_$i", "id", context!!.packageName)).apply { text = "$dayLetter\n${curDay.dayOfMonth}" setTextColor(if (todayCode == dayCode) primaryColor else textColor) @@ -155,18 +157,6 @@ class WeekFragment : Fragment(), WeeklyCalendar { } } - private fun getDayLetter(pos: Int): String { - return mRes.getString(when (pos) { - 1 -> R.string.monday_letter - 2 -> R.string.tuesday_letter - 3 -> R.string.wednesday_letter - 4 -> R.string.thursday_letter - 5 -> R.string.friday_letter - 6 -> R.string.saturday_letter - else -> R.string.sunday_letter - }) - } - private fun checkScrollLimits(y: Int) { if (minScrollY != -1 && y < minScrollY) { mScrollView.scrollY = minScrollY From 369317e2e6f66c357bd3dd50cea981171fe62061 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 22:42:49 +0200 Subject: [PATCH 18/99] limit the max amount of events per day shown on the monthly view --- .../com/simplemobiletools/calendar/views/MonthView.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 85bb498c6..f352ab546 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -38,6 +38,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var eventTitleHeight = 0 private var currDayOfWeek = 0 private var smallPadding = 0 + private var availableHeightForEvents = 0 + private var maxEventsPerDay = 0 private var bgRectF = RectF() private var dayLetters = ArrayList() private var days = ArrayList() @@ -88,6 +90,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con if (dayHeight == 0f) { dayHeight = (canvas.height - weekDaysLetterHeight) / ROW_COUNT.toFloat() + availableHeightForEvents = dayHeight.toInt() - weekDaysLetterHeight + maxEventsPerDay = availableHeightForEvents / eventTitleHeight } // week day letters @@ -103,6 +107,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con var curId = 0 for (y in 0 until ROW_COUNT) { for (x in 0..6) { + var shownDayEvents = 0 val day = days.getOrNull(curId) if (day != null) { dayVerticalOffsets.put(day.indexOnMonthView, dayVerticalOffsets[day.indexOnMonthView] + weekDaysLetterHeight) @@ -115,6 +120,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con canvas.drawText(day.value.toString(), xPosCenter, yPos + paint.textSize, getTextPaint(day)) day.dayEvents.forEach { + if (shownDayEvents >= maxEventsPerDay) { + return@forEach + } + val verticalOffset = dayVerticalOffsets[day.indexOnMonthView] val startDateTime = Formatter.getDateTimeFromTS(it.startTS) @@ -134,6 +143,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con drawEventTitle(it.title, canvas, xPos, yPos + verticalOffset, it.color, daysCnt) dayVerticalOffsets.put(day.indexOnMonthView, verticalOffset + eventTitleHeight + smallPadding * 2) + shownDayEvents++ } } curId++ From 0ad79384aaef003bcdb80b4ec588bd72bbc2a3f2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 22:49:18 +0200 Subject: [PATCH 19/99] add three dots below the monthly view events, if theres some hidden ones --- .../kotlin/com/simplemobiletools/calendar/views/MonthView.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index f352ab546..ac0137271 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -121,6 +121,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con day.dayEvents.forEach { if (shownDayEvents >= maxEventsPerDay) { + canvas.drawText("...", xPosCenter, yPos + paint.textSize * 2 + maxEventsPerDay * eventTitleHeight, getTextPaint(day)) return@forEach } From d12949fb2c74120d7ad59c3396ef3972d2850c9e Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 25 Mar 2018 23:04:35 +0200 Subject: [PATCH 20/99] small cleanup at MonthView --- .../calendar/views/MonthView.kt | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index ac0137271..3b7f527ff 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -84,25 +84,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con override fun onDraw(canvas: Canvas) { super.onDraw(canvas) dayVerticalOffsets.clear() - if (dayWidth == 0f) { - dayWidth = canvas.width / 7f + if (dayWidth == 0f || dayHeight == 0f) { + measureDaySize(canvas) } - if (dayHeight == 0f) { - dayHeight = (canvas.height - weekDaysLetterHeight) / ROW_COUNT.toFloat() - availableHeightForEvents = dayHeight.toInt() - weekDaysLetterHeight - maxEventsPerDay = availableHeightForEvents / eventTitleHeight - } - - // week day letters - for (i in 0..6) { - val xPos = (i + 1) * dayWidth - dayWidth / 2 - var weekDayLetterPaint = paint - if (i == currDayOfWeek) { - weekDayLetterPaint = getColoredPaint(primaryColor) - } - canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight / 2f, weekDayLetterPaint) - } + addWeekDayLetters(canvas) var curId = 0 for (y in 0 until ROW_COUNT) { @@ -133,7 +119,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val maxTS = Math.min(endDateTime.seconds(), Int.MAX_VALUE) val daysCnt = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days + 1 - // background rectangle + // event background rectangle val backgroundY = yPos + verticalOffset val bgLeft = xPos + smallPadding val bgTop = backgroundY + smallPadding - eventTitleHeight @@ -152,6 +138,24 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } + private fun addWeekDayLetters(canvas: Canvas) { + for (i in 0..6) { + val xPos = (i + 1) * dayWidth - dayWidth / 2 + var weekDayLetterPaint = paint + if (i == currDayOfWeek) { + weekDayLetterPaint = getColoredPaint(primaryColor) + } + canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight / 2f, weekDayLetterPaint) + } + } + + private fun measureDaySize(canvas: Canvas) { + dayWidth = canvas.width / 7f + dayHeight = (canvas.height - weekDaysLetterHeight) / ROW_COUNT.toFloat() + availableHeightForEvents = dayHeight.toInt() - weekDaysLetterHeight + maxEventsPerDay = availableHeightForEvents / eventTitleHeight + } + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int, daysCnt: Int) { val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth * daysCnt - smallPadding * 4, TextUtils.TruncateAt.END) canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor)) From ea345169fac9faf9a825e1c7b82ec9219e9f3ba9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 10:44:45 +0200 Subject: [PATCH 21/99] fix setting No Reminder at events --- app/build.gradle | 2 +- .../simplemobiletools/calendar/activities/EventActivity.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 02772008c..d3f6071ea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.16.16' + implementation 'com.simplemobiletools:commons:3.16.17' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt index 1d54552cf..96855c82c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt @@ -175,21 +175,21 @@ class EventActivity : SimpleActivity() { private fun showReminder1Dialog() { showPickSecondsDialog(mReminder1Minutes * 60) { - mReminder1Minutes = it / 60 + mReminder1Minutes = if (it <= 0) it else it / 60 checkReminderTexts() } } private fun showReminder2Dialog() { showPickSecondsDialog(mReminder2Minutes * 60) { - mReminder2Minutes = it / 60 + mReminder2Minutes = if (it <= 0) it else it / 60 checkReminderTexts() } } private fun showReminder3Dialog() { showPickSecondsDialog(mReminder3Minutes * 60) { - mReminder3Minutes = it / 60 + mReminder3Minutes = if (it <= 0) it else it / 60 checkReminderTexts() } } From a61168d3dc055d27e9845afdd4150d8d62091a68 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 10:58:57 +0200 Subject: [PATCH 22/99] group and sort all month events in a list to avoid duplicates --- .../calendar/models/MonthViewEvent.kt | 3 + .../calendar/views/MonthView.kt | 87 ++++++++++++------- 2 files changed, 60 insertions(+), 30 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt new file mode 100644 index 000000000..64008cba4 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.calendar.models + +data class MonthViewEvent(val id: Int, val title: String, val startTS: Int, val color: Int, val startDayIndex: Int, val daysCnt: Int) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 3b7f527ff..bbade7607 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -15,6 +15,8 @@ import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.helpers.Formatter import com.simplemobiletools.calendar.helpers.LOW_ALPHA import com.simplemobiletools.calendar.models.DayMonthly +import com.simplemobiletools.calendar.models.Event +import com.simplemobiletools.calendar.models.MonthViewEvent import com.simplemobiletools.commons.extensions.adjustAlpha import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getContrastColor @@ -40,10 +42,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var smallPadding = 0 private var availableHeightForEvents = 0 private var maxEventsPerDay = 0 + private var allEvents = ArrayList() private var bgRectF = RectF() private var dayLetters = ArrayList() private var days = ArrayList() private var dayVerticalOffsets = SparseIntArray() + private var dayEventsCount = SparseIntArray() constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) @@ -78,6 +82,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con days = newDays initWeekDayLetters() setupCurrentDayOfWeekIndex() + days.forEach { + val day = it + day.dayEvents.forEach { + val event = it + if (allEvents.firstOrNull { it.id == event.id } == null) { + val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, getEventLastingDaysCount(event)) + allEvents.add(monthViewEvent) + } + } + } + + allEvents = allEvents.sortedWith(compareBy({ -it.daysCnt }, { it.startTS }, { it.startDayIndex }, { it.title })).toMutableList() as ArrayList invalidate() } @@ -93,49 +109,24 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con var curId = 0 for (y in 0 until ROW_COUNT) { for (x in 0..6) { - var shownDayEvents = 0 val day = days.getOrNull(curId) if (day != null) { dayVerticalOffsets.put(day.indexOnMonthView, dayVerticalOffsets[day.indexOnMonthView] + weekDaysLetterHeight) + val verticalOffset = dayVerticalOffsets[day.indexOnMonthView] val xPos = x * dayWidth - val yPos = y * dayHeight + dayVerticalOffsets[day.indexOnMonthView] + val yPos = y * dayHeight + verticalOffset val xPosCenter = xPos + dayWidth / 2 if (day.isToday) { canvas.drawCircle(xPosCenter, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) } canvas.drawText(day.value.toString(), xPosCenter, yPos + paint.textSize, getTextPaint(day)) - - day.dayEvents.forEach { - if (shownDayEvents >= maxEventsPerDay) { - canvas.drawText("...", xPosCenter, yPos + paint.textSize * 2 + maxEventsPerDay * eventTitleHeight, getTextPaint(day)) - return@forEach - } - - val verticalOffset = dayVerticalOffsets[day.indexOnMonthView] - - val startDateTime = Formatter.getDateTimeFromTS(it.startTS) - val endDateTime = Formatter.getDateTimeFromTS(it.endTS) - val minTS = Math.max(startDateTime.seconds(), 0) - val maxTS = Math.min(endDateTime.seconds(), Int.MAX_VALUE) - val daysCnt = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days + 1 - - // event background rectangle - val backgroundY = yPos + verticalOffset - val bgLeft = xPos + smallPadding - val bgTop = backgroundY + smallPadding - eventTitleHeight - val bgRight = xPos - smallPadding + dayWidth * daysCnt - val bgBottom = backgroundY + smallPadding * 2 - bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) - canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getColoredPaint(it.color)) - - drawEventTitle(it.title, canvas, xPos, yPos + verticalOffset, it.color, daysCnt) - dayVerticalOffsets.put(day.indexOnMonthView, verticalOffset + eventTitleHeight + smallPadding * 2) - shownDayEvents++ - } + dayVerticalOffsets.put(day.indexOnMonthView, (verticalOffset + paint.textSize * 2).toInt()) } curId++ } } + + drawEvents(canvas) } private fun addWeekDayLetters(canvas: Canvas) { @@ -156,6 +147,36 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con maxEventsPerDay = availableHeightForEvents / eventTitleHeight } + private fun drawEvents(canvas: Canvas) { + for (event in allEvents) { + val verticalOffset = dayVerticalOffsets[event.startDayIndex] + val xPos = event.startDayIndex % 7 * dayWidth + val yPos = (event.startDayIndex / 7) * dayHeight + val xPosCenter = xPos + dayWidth / 2 + + if (dayEventsCount[event.startDayIndex] >= maxEventsPerDay) { + canvas.drawText("...", xPosCenter, yPos + verticalOffset - eventTitleHeight / 2, getTextPaint(days[event.startDayIndex])) + continue + } + + // event background rectangle + val backgroundY = yPos + verticalOffset + val bgLeft = xPos + smallPadding + val bgTop = backgroundY + smallPadding - eventTitleHeight + val bgRight = xPos - smallPadding + dayWidth * event.daysCnt + val bgBottom = backgroundY + smallPadding * 2 + bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) + canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getColoredPaint(event.color)) + + drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, event.color, event.daysCnt) + dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) + + for (i in 0 until event.daysCnt) { + dayEventsCount.put(event.startDayIndex + i, dayEventsCount[event.startDayIndex + i] + 1) + } + } + } + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int, daysCnt: Int) { val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth * daysCnt - smallPadding * 4, TextUtils.TruncateAt.END) canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor)) @@ -216,4 +237,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con currDayOfWeek-- } } + + private fun getEventLastingDaysCount(event: Event): Int { + val startDateTime = Formatter.getDateTimeFromTS(event.startTS) + val endDateTime = Formatter.getDateTimeFromTS(event.endTS) + return Days.daysBetween(Formatter.getDateTimeFromTS(startDateTime.seconds()).toLocalDate(), Formatter.getDateTimeFromTS(endDateTime.seconds()).toLocalDate()).days + 1 + } } From 4f4c1f2ca237962dd8f6da82caec3e7a02861742 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 12:03:01 +0200 Subject: [PATCH 23/99] reduce the alpha of event color, if it isnt in the currently displayed month --- .../calendar/views/MonthView.kt | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index bbade7607..026060edb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -166,9 +166,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val bgRight = xPos - smallPadding + dayWidth * event.daysCnt val bgBottom = backgroundY + smallPadding * 2 bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) - canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getColoredPaint(event.color)) + canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, days[event.startDayIndex])) - drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, event.color, event.daysCnt) + drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, event.color, event.daysCnt, days[event.startDayIndex]) dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) for (i in 0 until event.daysCnt) { @@ -177,9 +177,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } - private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int, daysCnt: Int) { + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int, daysCnt: Int, day: DayMonthly) { val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth * daysCnt - smallPadding * 4, TextUtils.TruncateAt.END) - canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor)) + canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor, day)) } private fun getTextPaint(day: DayMonthly): Paint { @@ -201,9 +201,23 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con return curPaint } - private fun getEventTitlePaint(color: Int): Paint { + private fun getEventBackgroundColor(event: MonthViewEvent, day: DayMonthly): Paint { + var paintColor = event.color + if (!day.isThisMonth) { + paintColor = paintColor.adjustAlpha(LOW_ALPHA) + } + + return getColoredPaint(paintColor) + } + + private fun getEventTitlePaint(color: Int, day: DayMonthly): Paint { + var paintColor = color.getContrastColor() + if (!day.isThisMonth) { + paintColor = paintColor.adjustAlpha(LOW_ALPHA) + } + val curPaint = Paint(eventTitlePaint) - curPaint.color = color.getContrastColor() + curPaint.color = paintColor return curPaint } From 2ddefb7fe198f4a82f75651d26b293f4069fc60d Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 13:29:56 +0200 Subject: [PATCH 24/99] properly handle drawing events spanning across multiple weeks --- .../calendar/views/MonthView.kt | 65 +++++++++++-------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 026060edb..4e6365d0a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -149,36 +149,47 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private fun drawEvents(canvas: Canvas) { for (event in allEvents) { - val verticalOffset = dayVerticalOffsets[event.startDayIndex] - val xPos = event.startDayIndex % 7 * dayWidth - val yPos = (event.startDayIndex / 7) * dayHeight - val xPosCenter = xPos + dayWidth / 2 - - if (dayEventsCount[event.startDayIndex] >= maxEventsPerDay) { - canvas.drawText("...", xPosCenter, yPos + verticalOffset - eventTitleHeight / 2, getTextPaint(days[event.startDayIndex])) - continue - } - - // event background rectangle - val backgroundY = yPos + verticalOffset - val bgLeft = xPos + smallPadding - val bgTop = backgroundY + smallPadding - eventTitleHeight - val bgRight = xPos - smallPadding + dayWidth * event.daysCnt - val bgBottom = backgroundY + smallPadding * 2 - bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) - canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, days[event.startDayIndex])) - - drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, event.color, event.daysCnt, days[event.startDayIndex]) - dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) - - for (i in 0 until event.daysCnt) { - dayEventsCount.put(event.startDayIndex + i, dayEventsCount[event.startDayIndex + i] + 1) - } + drawEvent(event, canvas) } } - private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, eventColor: Int, daysCnt: Int, day: DayMonthly) { - val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, dayWidth * daysCnt - smallPadding * 4, TextUtils.TruncateAt.END) + private fun drawEvent(event: MonthViewEvent, canvas: Canvas) { + val verticalOffset = dayVerticalOffsets[event.startDayIndex] + val xPos = event.startDayIndex % 7 * dayWidth + val yPos = (event.startDayIndex / 7) * dayHeight + val xPosCenter = xPos + dayWidth / 2 + + if (dayEventsCount[event.startDayIndex] >= maxEventsPerDay) { + canvas.drawText("...", xPosCenter, yPos + verticalOffset - eventTitleHeight / 2, getTextPaint(days[event.startDayIndex])) + return + } + + // event background rectangle + val backgroundY = yPos + verticalOffset + val bgLeft = xPos + smallPadding + val bgTop = backgroundY + smallPadding - eventTitleHeight + var bgRight = xPos - smallPadding + dayWidth * event.daysCnt + if (bgRight > canvas.width.toFloat()) { + bgRight = canvas.width.toFloat() - smallPadding + val newStartDayIndex = (event.startDayIndex / 7 + 1) * 7 + val newEvent = event.copy(startDayIndex = newStartDayIndex, daysCnt = event.daysCnt - (newStartDayIndex - event.startDayIndex)) + drawEvent(newEvent, canvas) + } + + val bgBottom = backgroundY + smallPadding * 2 + bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) + canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, days[event.startDayIndex])) + + drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, days[event.startDayIndex]) + dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) + + for (i in 0 until event.daysCnt) { + dayEventsCount.put(event.startDayIndex + i, dayEventsCount[event.startDayIndex + i] + 1) + } + } + + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, availableWidth: Float, eventColor: Int, day: DayMonthly) { + val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, availableWidth - smallPadding, TextUtils.TruncateAt.END) canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor, day)) } From f62be2ac406e1740820674fdf41830f1fabdfa4e Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 14:06:05 +0200 Subject: [PATCH 25/99] color longer events with full alpha, if they touch the current month --- .../calendar/models/MonthViewEvent.kt | 2 +- .../calendar/views/MonthView.kt | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt index 64008cba4..67ab73600 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt @@ -1,3 +1,3 @@ package com.simplemobiletools.calendar.models -data class MonthViewEvent(val id: Int, val title: String, val startTS: Int, val color: Int, val startDayIndex: Int, val daysCnt: Int) +data class MonthViewEvent(val id: Int, val title: String, val startTS: Int, val color: Int, val startDayIndex: Int, val daysCnt: Int, val originalStartDayIndex: Int) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 4e6365d0a..362da75e0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -87,7 +87,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con day.dayEvents.forEach { val event = it if (allEvents.firstOrNull { it.id == event.id } == null) { - val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, getEventLastingDaysCount(event)) + val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, getEventLastingDaysCount(event), day.indexOnMonthView) allEvents.add(monthViewEvent) } } @@ -178,9 +178,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val bgBottom = backgroundY + smallPadding * 2 bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) - canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, days[event.startDayIndex])) + canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, days[event.originalStartDayIndex], days[event.startDayIndex + event.daysCnt - 1])) - drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, days[event.startDayIndex]) + drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, days[event.originalStartDayIndex], days[event.startDayIndex + event.daysCnt - 1]) dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) for (i in 0 until event.daysCnt) { @@ -188,18 +188,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } - private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, availableWidth: Float, eventColor: Int, day: DayMonthly) { + private fun drawEventTitle(title: String, canvas: Canvas, x: Float, y: Float, availableWidth: Float, eventColor: Int, startDay: DayMonthly, endDay: DayMonthly) { val ellipsized = TextUtils.ellipsize(title, eventTitlePaint, availableWidth - smallPadding, TextUtils.TruncateAt.END) - canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor, day)) + canvas.drawText(title, 0, ellipsized.length, x + smallPadding * 2, y, getEventTitlePaint(eventColor, startDay, endDay)) } - private fun getTextPaint(day: DayMonthly): Paint { + private fun getTextPaint(startDay: DayMonthly): Paint { var paintColor = textColor - if (day.isToday) { + if (startDay.isToday) { paintColor = primaryColor.getContrastColor() } - if (!day.isThisMonth) { + if (!startDay.isThisMonth) { paintColor = paintColor.adjustAlpha(LOW_ALPHA) } @@ -212,18 +212,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con return curPaint } - private fun getEventBackgroundColor(event: MonthViewEvent, day: DayMonthly): Paint { + private fun getEventBackgroundColor(event: MonthViewEvent, startDay: DayMonthly, endDay: DayMonthly): Paint { var paintColor = event.color - if (!day.isThisMonth) { + if (!startDay.isThisMonth && !endDay.isThisMonth) { paintColor = paintColor.adjustAlpha(LOW_ALPHA) } return getColoredPaint(paintColor) } - private fun getEventTitlePaint(color: Int, day: DayMonthly): Paint { + private fun getEventTitlePaint(color: Int, startDay: DayMonthly, endDay: DayMonthly): Paint { var paintColor = color.getContrastColor() - if (!day.isThisMonth) { + if (!startDay.isThisMonth && !endDay.isThisMonth) { paintColor = paintColor.adjustAlpha(LOW_ALPHA) } From 40ac88dc836a560bd44b2fe0cdf9382494945f08 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 14:09:21 +0200 Subject: [PATCH 26/99] small cleanup at MonthView --- .../com/simplemobiletools/calendar/views/MonthView.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 362da75e0..869a0a349 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -169,6 +169,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val bgLeft = xPos + smallPadding val bgTop = backgroundY + smallPadding - eventTitleHeight var bgRight = xPos - smallPadding + dayWidth * event.daysCnt + val bgBottom = backgroundY + smallPadding * 2 if (bgRight > canvas.width.toFloat()) { bgRight = canvas.width.toFloat() - smallPadding val newStartDayIndex = (event.startDayIndex / 7 + 1) * 7 @@ -176,11 +177,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con drawEvent(newEvent, canvas) } - val bgBottom = backgroundY + smallPadding * 2 + val startDayIndex = days[event.originalStartDayIndex] + val endDayIndex = days[event.startDayIndex + event.daysCnt - 1] bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) - canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, days[event.originalStartDayIndex], days[event.startDayIndex + event.daysCnt - 1])) + canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, startDayIndex, endDayIndex)) - drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, days[event.originalStartDayIndex], days[event.startDayIndex + event.daysCnt - 1]) + drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, startDayIndex, endDayIndex) dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) for (i in 0 until event.daysCnt) { From 687927b24ae140acbbb0dd61cbe87008db7e2f50 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 14:45:57 +0200 Subject: [PATCH 27/99] couple improvements to handling events lasting multiple days --- .../kotlin/com/simplemobiletools/calendar/views/MonthView.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 869a0a349..d3bfe1a83 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -100,6 +100,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con override fun onDraw(canvas: Canvas) { super.onDraw(canvas) dayVerticalOffsets.clear() + dayEventsCount.clear() if (dayWidth == 0f || dayHeight == 0f) { measureDaySize(canvas) } @@ -183,10 +184,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, startDayIndex, endDayIndex)) drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, startDayIndex, endDayIndex) - dayVerticalOffsets.put(event.startDayIndex, verticalOffset + eventTitleHeight + smallPadding * 2) - for (i in 0 until event.daysCnt) { + for (i in 0 until Math.min(event.daysCnt, 7 - event.startDayIndex % 7)) { dayEventsCount.put(event.startDayIndex + i, dayEventsCount[event.startDayIndex + i] + 1) + dayVerticalOffsets.put(event.startDayIndex + i, verticalOffset + eventTitleHeight + smallPadding * 2) } } From 34c145d32858628b759c5cd31834e39408a1a96c Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 14:55:20 +0200 Subject: [PATCH 28/99] show all-day events above others on some views in some cases --- .../com/simplemobiletools/calendar/fragments/DayFragment.kt | 6 +++--- .../com/simplemobiletools/calendar/models/MonthViewEvent.kt | 3 ++- .../com/simplemobiletools/calendar/views/MonthView.kt | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt index 4e2b04304..0d015f74d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt @@ -94,8 +94,8 @@ class DayFragment : Fragment() { .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.ok) { dialog, which -> positivePressed(dateTime, datePicker) } .create().apply { - activity?.setupDialogStuff(view, this) - } + activity?.setupDialogStuff(view, this) + } } private fun positivePressed(dateTime: DateTime, datePicker: DatePicker) { @@ -123,7 +123,7 @@ class DayFragment : Fragment() { lastHash = newHash val replaceDescription = context!!.config.replaceDescription - val sorted = ArrayList(filtered.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { + val sorted = ArrayList(filtered.sortedWith(compareBy({ !it.getIsAllDay() }, { it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description }))) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt index 67ab73600..e68b819b3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/MonthViewEvent.kt @@ -1,3 +1,4 @@ package com.simplemobiletools.calendar.models -data class MonthViewEvent(val id: Int, val title: String, val startTS: Int, val color: Int, val startDayIndex: Int, val daysCnt: Int, val originalStartDayIndex: Int) +data class MonthViewEvent(val id: Int, val title: String, val startTS: Int, val color: Int, val startDayIndex: Int, val daysCnt: Int, val originalStartDayIndex: Int, + val isAllDay: Boolean) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index d3bfe1a83..6ad80dc4d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -87,13 +87,14 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con day.dayEvents.forEach { val event = it if (allEvents.firstOrNull { it.id == event.id } == null) { - val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, getEventLastingDaysCount(event), day.indexOnMonthView) + val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, + getEventLastingDaysCount(event), day.indexOnMonthView, event.getIsAllDay()) allEvents.add(monthViewEvent) } } } - allEvents = allEvents.sortedWith(compareBy({ -it.daysCnt }, { it.startTS }, { it.startDayIndex }, { it.title })).toMutableList() as ArrayList + allEvents = allEvents.sortedWith(compareBy({ -it.daysCnt }, { !it.isAllDay }, { it.startTS }, { it.startDayIndex }, { it.title })).toMutableList() as ArrayList invalidate() } From ceab4354100d5d7ecc4def0b80de21357e56016a Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 15:26:00 +0200 Subject: [PATCH 29/99] catch runtime exceptions thrown at monthly widget provider --- .../calendar/helpers/MyWidgetMonthlyProvider.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt index 1d2c7e998..b2f03e6c9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt @@ -182,7 +182,10 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() { val monthCode = days.firstOrNull { it.code.substring(6) == "01" }?.code ?: Formatter.getTodayCode(context) setupAppOpenIntent(context, views, R.id.top_value, monthCode) - appWidgetManager.updateAppWidget(it, views) + try { + appWidgetManager.updateAppWidget(it, views) + } catch (ignored: RuntimeException) { + } } } } From aa14d3022db0f950d96ddbe48447cadf1ca4712b Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 16:34:09 +0200 Subject: [PATCH 30/99] fix #357, handle com.android.calendar/events intent --- app/src/main/AndroidManifest.xml | 6 ++++++ .../calendar/activities/MainActivity.kt | 16 ++++++++++++++-- .../calendar/helpers/DBHelper.kt | 12 ++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index abffa3001..51fc63868 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,12 @@ + + + + + + ) -> Unit) { Thread { val searchQuery = "%$text%" From e6568beb3217d0009432dd5b35adb72430d2d1b4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 17:50:31 +0200 Subject: [PATCH 31/99] fix showing repeatable events on the monthly view --- .../calendar/helpers/MonthlyCalendarImpl.kt | 6 ++++-- .../com/simplemobiletools/calendar/views/MonthView.kt | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt index d4d26b9e2..bbefee5dc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt @@ -94,13 +94,15 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) var currDay = startDateTime var dayCode = Formatter.getDayCodeFromDateTime(currDay) - var currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) } + var currDayEvents = dayEvents[dayCode] ?: ArrayList() + currDayEvents.add(it) dayEvents[dayCode] = currDayEvents while (Formatter.getDayCodeFromDateTime(currDay) != endCode) { currDay = currDay.plusDays(1) dayCode = Formatter.getDayCodeFromDateTime(currDay) - currDayEvents = (dayEvents[dayCode] ?: ArrayList()).apply { add(it) } + currDayEvents = dayEvents[dayCode] ?: ArrayList() + currDayEvents.add(it) dayEvents[dayCode] = currDayEvents } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 6ad80dc4d..a77254ce9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -86,9 +86,11 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val day = it day.dayEvents.forEach { val event = it - if (allEvents.firstOrNull { it.id == event.id } == null) { + val lastEvent = allEvents.lastOrNull { it.id == event.id } + val daysCnt = getEventLastingDaysCount(event) + if (lastEvent == null || lastEvent.startDayIndex + daysCnt < day.indexOnMonthView) { val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, - getEventLastingDaysCount(event), day.indexOnMonthView, event.getIsAllDay()) + daysCnt, day.indexOnMonthView, event.getIsAllDay()) allEvents.add(monthViewEvent) } } @@ -184,7 +186,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, startDayIndex, endDayIndex)) - drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft, event.color, startDayIndex, endDayIndex) + drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft - smallPadding, event.color, startDayIndex, endDayIndex) for (i in 0 until Math.min(event.daysCnt, 7 - event.startDayIndex % 7)) { dayEventsCount.put(event.startDayIndex + i, dayEventsCount[event.startDayIndex + i] + 1) From f2bc8ba5c8c6e52ac54b3c51f05a27c63275efcd Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 18:27:23 +0200 Subject: [PATCH 32/99] couple misc month view improvements --- .../calendar/views/MonthView.kt | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index a77254ce9..b92833558 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -86,6 +86,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val day = it day.dayEvents.forEach { val event = it + + // make sure we properly handle events lasting multiple days and repeating ones val lastEvent = allEvents.lastOrNull { it.id == event.id } val daysCnt = getEventLastingDaysCount(event) if (lastEvent == null || lastEvent.startDayIndex + daysCnt < day.indexOnMonthView) { @@ -123,6 +125,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con if (day.isToday) { canvas.drawCircle(xPosCenter, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) } + canvas.drawText(day.value.toString(), xPosCenter, yPos + paint.textSize, getTextPaint(day)) dayVerticalOffsets.put(day.indexOnMonthView, (verticalOffset + paint.textSize * 2).toInt()) } @@ -177,12 +180,14 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con if (bgRight > canvas.width.toFloat()) { bgRight = canvas.width.toFloat() - smallPadding val newStartDayIndex = (event.startDayIndex / 7 + 1) * 7 - val newEvent = event.copy(startDayIndex = newStartDayIndex, daysCnt = event.daysCnt - (newStartDayIndex - event.startDayIndex)) - drawEvent(newEvent, canvas) + if (newStartDayIndex < 42) { + val newEvent = event.copy(startDayIndex = newStartDayIndex, daysCnt = event.daysCnt - (newStartDayIndex - event.startDayIndex)) + drawEvent(newEvent, canvas) + } } val startDayIndex = days[event.originalStartDayIndex] - val endDayIndex = days[event.startDayIndex + event.daysCnt - 1] + val endDayIndex = days[Math.min(event.startDayIndex + event.daysCnt - 1, 41)] bgRectF.set(bgLeft, bgTop, bgRight, bgBottom) canvas.drawRoundRect(bgRectF, BG_CORNER_RADIUS, BG_CORNER_RADIUS, getEventBackgroundColor(event, startDayIndex, endDayIndex)) @@ -269,9 +274,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } + // take into account cases when an event starts on the previous screen, subtract those days private fun getEventLastingDaysCount(event: Event): Int { val startDateTime = Formatter.getDateTimeFromTS(event.startTS) val endDateTime = Formatter.getDateTimeFromTS(event.endTS) - return Days.daysBetween(Formatter.getDateTimeFromTS(startDateTime.seconds()).toLocalDate(), Formatter.getDateTimeFromTS(endDateTime.seconds()).toLocalDate()).days + 1 + val code = days.first().code + val screenStartDateTime = Formatter.getDateTimeFromCode(code).toLocalDate() + var eventStartDateTime = Formatter.getDateTimeFromTS(startDateTime.seconds()).toLocalDate() + val eventEndDateTime = Formatter.getDateTimeFromTS(endDateTime.seconds()).toLocalDate() + val diff = Days.daysBetween(screenStartDateTime, eventStartDateTime).days + if (diff < 0) { + eventStartDateTime = screenStartDateTime + } + return Days.daysBetween(eventStartDateTime, eventEndDateTime).days + 1 } } From baa1c44bcd508139306c14674e5dbbbf9f708a9f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 18:44:19 +0200 Subject: [PATCH 33/99] adding a helper function in MonthView --- .../calendar/activities/SettingsActivity.kt | 4 ++-- .../com/simplemobiletools/calendar/helpers/Config.kt | 4 ++-- .../calendar/helpers/MyWidgetMonthlyProvider.kt | 2 +- .../com/simplemobiletools/calendar/views/MonthView.kt | 9 ++++++++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index 5fcd67fd6..f1729d9fb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -268,10 +268,10 @@ class SettingsActivity : SimpleActivity() { } private fun setupWeekNumbers() { - settings_week_numbers.isChecked = config.displayWeekNumbers + settings_week_numbers.isChecked = config.showWeekNumbers settings_week_numbers_holder.setOnClickListener { settings_week_numbers.toggle() - config.displayWeekNumbers = settings_week_numbers.isChecked + config.showWeekNumbers = settings_week_numbers.isChecked } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt index 919659d9f..ee6457b7a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt @@ -12,9 +12,9 @@ class Config(context: Context) : BaseConfig(context) { fun newInstance(context: Context) = Config(context) } - var displayWeekNumbers: Boolean + var showWeekNumbers: Boolean get() = prefs.getBoolean(WEEK_NUMBERS, false) - set(displayWeekNumbers) = prefs.edit().putBoolean(WEEK_NUMBERS, displayWeekNumbers).apply() + set(showWeekNumbers) = prefs.edit().putBoolean(WEEK_NUMBERS, showWeekNumbers).apply() var startWeeklyAt: Int get() = prefs.getInt(START_WEEKLY_AT, 7) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt index b2f03e6c9..d2a777666 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt @@ -82,7 +82,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() { } private fun updateDays(context: Context, views: RemoteViews, days: List) { - val displayWeekNumbers = context.config.displayWeekNumbers + val displayWeekNumbers = context.config.showWeekNumbers val textColor = context.config.widgetTextColor val smallerFontSize = context.config.getFontSize() - 3f val res = context.resources diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index b92833558..7c981141b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -42,6 +42,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var smallPadding = 0 private var availableHeightForEvents = 0 private var maxEventsPerDay = 0 + private var showWeekNumbers = false private var allEvents = ArrayList() private var bgRectF = RectF() private var dayLetters = ArrayList() @@ -54,6 +55,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con init { primaryColor = context.getAdjustedPrimaryColor() textColor = context.config.textColor + showWeekNumbers = context.config.showWeekNumbers weakTextColor = textColor.adjustAlpha(LOW_ALPHA) smallPadding = resources.displayMetrics.density.toInt() @@ -82,6 +84,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con days = newDays initWeekDayLetters() setupCurrentDayOfWeekIndex() + showWeekNumbers = context.config.showWeekNumbers + groupAllEvents() + invalidate() + } + + private fun groupAllEvents() { days.forEach { val day = it day.dayEvents.forEach { @@ -99,7 +107,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } allEvents = allEvents.sortedWith(compareBy({ -it.daysCnt }, { !it.isAllDay }, { it.startTS }, { it.startDayIndex }, { it.title })).toMutableList() as ArrayList - invalidate() } override fun onDraw(canvas: Canvas) { From 972ff9d0230c3322ceab20804168bdeb21bd7af0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 26 Mar 2018 18:51:48 +0200 Subject: [PATCH 34/99] remove a couple redundant variables --- .../kotlin/com/simplemobiletools/calendar/views/MonthView.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 7c981141b..ee2ea01ec 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -35,12 +35,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var dayHeight = 0f private var primaryColor = 0 private var textColor = 0 - private var weakTextColor = 0 private var weekDaysLetterHeight = 0 private var eventTitleHeight = 0 private var currDayOfWeek = 0 private var smallPadding = 0 - private var availableHeightForEvents = 0 private var maxEventsPerDay = 0 private var showWeekNumbers = false private var allEvents = ArrayList() @@ -56,7 +54,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con primaryColor = context.getAdjustedPrimaryColor() textColor = context.config.textColor showWeekNumbers = context.config.showWeekNumbers - weakTextColor = textColor.adjustAlpha(LOW_ALPHA) smallPadding = resources.displayMetrics.density.toInt() val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size) @@ -157,7 +154,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private fun measureDaySize(canvas: Canvas) { dayWidth = canvas.width / 7f dayHeight = (canvas.height - weekDaysLetterHeight) / ROW_COUNT.toFloat() - availableHeightForEvents = dayHeight.toInt() - weekDaysLetterHeight + val availableHeightForEvents = dayHeight.toInt() - weekDaysLetterHeight maxEventsPerDay = availableHeightForEvents / eventTitleHeight } From 7e3277f0adbda58be298e36e592eb8efe3e2c557 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 26 Mar 2018 22:35:02 +0200 Subject: [PATCH 35/99] Added Croatian translations The app has been fully translated to the Croatian language. If something else is needed, please let me know. Cheers! --- app/src/main/res/values-hr/strings.xml | 215 +++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 app/src/main/res/values-hr/strings.xml diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml new file mode 100644 index 000000000..ea32cef8e --- /dev/null +++ b/app/src/main/res/values-hr/strings.xml @@ -0,0 +1,215 @@ + + + Simple Calendar + Kalendar + Promijeni prikaz + Dnevni pregled + Tjedni pregled + Mjesečni pregled + Godišnji pregled + Jednostavan popis događaja + Izgleda da nemate nadolazećih događaja. + Možete dodati neke događaje s gumbom Plus na dnu. + Idi na danas + + + Mjesečni raspored + Popis događaja kalendara + + + Događaj + Uredi događaj + Novi događaj + Naslov ne može biti prazan + Događaj ne može završiti prije nego što počne + Događaj je uspješno dodan + Događaj je uspješno ažuriran + Sortiranje prema vrsti događaja + Ispunite lokaciju za prikazivanje na karti + + + Ponavljanje + Nema ponavljanja + Dnevno + Tjedno + Mjesečno + Godišnje + tjedana + mjeseci + godina + Ponovi do + Zauvijek + Događaj je ponovljiv + Odabir sadrži ponavljajuće događaje + Izbriši samo odabrano ponavljanje + Izbriši sva ponavljanja + Ažuriraj samo odabrano ponavljanje + Ažuriraj sva ponavljanja + Ponovi do datuma + Ponovi x puta + Ponovi zauvijek + puta + Ponavljanje + Ponovi na + Svaki dan + Na odabrane dane + Isti dan + Zadnji dan + Ponovi isti dan svaki mjesec + Ponovi zadnjeg dana u mjesecu + Ponovi svaki + Svaki + prvi + drugi + treći + četvrti + peti + + + + Ponovi svaki + Svaki + prvi + drugi + treći + četvrti + peti + + + Rođendani + Dodaj rođendane za kontakt + Nisu pronađeni rođendani + Rođendani su uspješno dodani + + + Obljetnice + Dodaj obljetnice za kontakt + Nisu pronađene obljetnice + Obljetnice uspješno dodane + + + Podsjetnik + prije + Dodaj još jedan podsjetnik + Podsjetnici na događaj + + + Uvezi događaje + Izvezi događaje + Uvoz događaja iz .ics datoteke + Izvoz događaja u .ics datoteku + Zadani tip događaja + Izvoz prošlih događaja + Uključi vrste događaja + Naziv datoteke (bez .ics) + + + Naslov + Lokacija + Opis + Cjelodnevni + + + Tjedan + + + Vrste događaja + Dodaj novu vrstu + Uredi vrstu + Događaj s ovim naslovom već postoji + Boja + Redoviti događaj + Zadana vrsta događaja se ne može izbrisati + Odaberite vrstu događaja + Premjesti zahvaćene događaje u zadanu vrstu događaja + Trajno ukloni zahvaćene događaje + Da biste uklonili CalDAV kalendar, morate ga desinkronizirati + + + Praznici + Dodaj praznik + Nacionalni praznici + Vjerski praznici + Praznici su uspješno uvezeni u novu vrstu događaja + Uvoz nekih događaja nije uspio + Uvoz praznika nije uspio + + + Upravljanje vrstama događaja + Započni dan u + Završi dan u + Pokaži tjedne brojeve + Vibrirajte na obavijesti podsjetnika + Zvuk podsjetnika + Nije pronađena nijedna aplikacija koja može postaviti zvuk zvona + Nijedan + Dan ne može završiti prije nego što počne + CalDAV sinkronizacija + Popis događaja + Prikaži događaje iz prošlosti + Zamijenite opis događaja s lokacijom + Izbriši sve događaje + Jeste li sigurni da želite izbrisati sve događaje? To će ostaviti Vaše vrste događaja i druge postavke netaknutima. + + + CalDAV + Odaberi kalendare za sinkronizaciju + Upravljanje sinkroniziranim kalendarima + Pohrani samo lokalno + Osvježi CalDAV kalendare + Osvježavanje... + Osvježavanje završeno + Uređivanje kalendara nije uspjelo + Sinkronizacija... + Sinkronizacija završena + + + + Ponedjeljak + Utorak + Srijeda + Četvrtak + Petak + Subota + Nedjelja + + + Trening + Vježbanje nogu + Sastanak s Ivanom + U vrtu Rockstone + Knjižnica + Ručak s Marijom + U Plaza + Vrijeme za kavu + + + Kako mogu ukloniti praznike uvezene putem gumba \"Dodaj praznik\"? + Praznik koji je stvoren na taj način umetnut je u novu vrstu događaja pod nazivom \"Praznici\". Možete otići u Postavke -> Upravljanje vrstama događaja, + dugo pritisnite datu vrstu događaja i izbrišite ga odabirom koša za smeće. + Mogu li sinkronizirati događaje putem Google Kalendara ili druge usluge koje podržavaju CalDAV? + Da, samo uključite \"CalDAV sinkronizacija\" u postavkama aplikacije i odaberite kalendare koje želite sinkronizirati. Međutim, potrebna je aplikacija između Vašeg uređaja i poslužitelja. + U slučaju da želite sinkronizirati Google kalendar, njihova službena aplikacija Kalendar obavlja navedeni posao. Za ostale kalendare potreban Vam je aplikacija treće strane za upravljanje sinkronizacijom, na primjer DAVdroid. + + + + Jednostavan kalendar s događajima, prilagodljivim widget i bez oglasa. + + Jednostavan kalendar s dodatnom CalDAV sinkronizacijom. Možete jednostavno stvoriti ponavljajuće događaje i postaviti podsjetnike, također je moguće prikazati tjedne brojeve. + + Sadrži mjesečni prikaz i widget s popisom događaja gdje možete prilagoditi boju teksta, kao i transparentnost te boju pozadine. + + Ne sadrži oglase ili nepotrebne dozvole. Aplikacije je otvorenog koda, pruža prilagodljive boje. + + Dopuštenje za pohranu podataka potrebna je samo za izvoz ili uvoz događaja iz .ics datoteka. + + Dopuštenje za kontakte upotrebljava se samo pri uvozu rođendana i obljetnica kontakata. + + Ova je aplikacija samo dio većeg broja aplikacija. Možete pronaći ostatak na http://www.simplemobiletools.com + + + + From f794be6116d2885d27480869f2a7be9c303c4496 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 13:36:01 +0200 Subject: [PATCH 36/99] add week numbers to monthly view when appropriate --- .../calendar/fragments/MonthFragment.kt | 18 +++++++++-- .../calendar/views/MonthView.kt | 32 ++++++++++++++----- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index 6497b26e8..52983243c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -31,6 +31,7 @@ import org.joda.time.DateTime class MonthFragment : Fragment(), MonthlyCalendar { private var mTextColor = 0 private var mSundayFirst = false + private var mShowWeekNumbers = false private var mDayCode = "" private var mPackageName = "" private var mDayLabelHeight = 0 @@ -50,7 +51,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { mHolder = view.month_calendar_holder mDayCode = arguments!!.getString(DAY_CODE) mConfig = context!!.config - mSundayFirst = mConfig.isSundayFirst + storeStateVariables() setupButtons() setupLabels() @@ -61,24 +62,35 @@ class MonthFragment : Fragment(), MonthlyCalendar { override fun onPause() { super.onPause() - mSundayFirst = context!!.config.isSundayFirst + storeStateVariables() } override fun onResume() { super.onResume() if (mConfig.isSundayFirst != mSundayFirst) { - mSundayFirst = mConfig.isSundayFirst setupLabels() } + if (mConfig.showWeekNumbers != mShowWeekNumbers) { + mLastHash = -1L + } + mCalendar!!.apply { mTargetDate = Formatter.getDateTimeFromCode(mDayCode) getDays(false) // prefill the screen asap, even if without events } + storeStateVariables() updateCalendar() } + private fun storeStateVariables() { + mConfig.apply { + mSundayFirst = isSundayFirst + mShowWeekNumbers = showWeekNumbers + } + } + fun updateCalendar() { mCalendar?.updateMonthlyCalendar(Formatter.getDateTimeFromCode(mDayCode)) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index ee2ea01ec..d3d3a2af3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -40,6 +40,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var currDayOfWeek = 0 private var smallPadding = 0 private var maxEventsPerDay = 0 + private var horizontalOffset = 0 private var showWeekNumbers = false private var allEvents = ArrayList() private var bgRectF = RectF() @@ -79,9 +80,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con fun updateDays(newDays: ArrayList) { days = newDays + showWeekNumbers = context.config.showWeekNumbers + horizontalOffset = if (showWeekNumbers) eventTitleHeight * 2 else 0 initWeekDayLetters() setupCurrentDayOfWeekIndex() - showWeekNumbers = context.config.showWeekNumbers groupAllEvents() invalidate() } @@ -110,11 +112,12 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con super.onDraw(canvas) dayVerticalOffsets.clear() dayEventsCount.clear() - if (dayWidth == 0f || dayHeight == 0f) { - measureDaySize(canvas) - } + measureDaySize(canvas) addWeekDayLetters(canvas) + if (showWeekNumbers) { + addWeekNumbers(canvas) + } var curId = 0 for (y in 0 until ROW_COUNT) { @@ -123,7 +126,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con if (day != null) { dayVerticalOffsets.put(day.indexOnMonthView, dayVerticalOffsets[day.indexOnMonthView] + weekDaysLetterHeight) val verticalOffset = dayVerticalOffsets[day.indexOnMonthView] - val xPos = x * dayWidth + val xPos = x * dayWidth + horizontalOffset val yPos = y * dayHeight + verticalOffset val xPosCenter = xPos + dayWidth / 2 if (day.isToday) { @@ -142,7 +145,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private fun addWeekDayLetters(canvas: Canvas) { for (i in 0..6) { - val xPos = (i + 1) * dayWidth - dayWidth / 2 + val xPos = horizontalOffset + (i + 1) * dayWidth - dayWidth / 2 var weekDayLetterPaint = paint if (i == currDayOfWeek) { weekDayLetterPaint = getColoredPaint(primaryColor) @@ -151,8 +154,21 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } } + private fun addWeekNumbers(canvas: Canvas) { + val weekNumberPaint = Paint(paint) + weekNumberPaint.textAlign = Paint.Align.RIGHT + + for (i in 0 until ROW_COUNT) { + // fourth day of the week matters + val id = "${days[i * 7 + 3].weekOfYear}:" + + val yPos = i * dayHeight + weekDaysLetterHeight + canvas.drawText(id, horizontalOffset.toFloat(), yPos + paint.textSize, weekNumberPaint) + } + } + private fun measureDaySize(canvas: Canvas) { - dayWidth = canvas.width / 7f + dayWidth = (canvas.width - horizontalOffset) / 7f dayHeight = (canvas.height - weekDaysLetterHeight) / ROW_COUNT.toFloat() val availableHeightForEvents = dayHeight.toInt() - weekDaysLetterHeight maxEventsPerDay = availableHeightForEvents / eventTitleHeight @@ -166,7 +182,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private fun drawEvent(event: MonthViewEvent, canvas: Canvas) { val verticalOffset = dayVerticalOffsets[event.startDayIndex] - val xPos = event.startDayIndex % 7 * dayWidth + val xPos = event.startDayIndex % 7 * dayWidth + horizontalOffset val yPos = (event.startDayIndex / 7) * dayHeight val xPosCenter = xPos + dayWidth / 2 From 80c59cb41b9ceacefa5b3e8f09f00bdf6714dd23 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 14:12:52 +0200 Subject: [PATCH 37/99] properly position the clickable background at month view --- .../calendar/views/MonthViewWrapper.kt | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt index 610c08e56..1d0d7fe1b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt @@ -5,6 +5,7 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout import com.simplemobiletools.calendar.R +import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.models.DayMonthly import com.simplemobiletools.commons.extensions.onGlobalLayout import kotlinx.android.synthetic.main.month_view.view.* @@ -18,6 +19,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F private var days = ArrayList() private var inflater: LayoutInflater private var monthView: MonthView + private var horizontalOffset = 0 private var dayClickCallback: ((day: DayMonthly) -> Unit)? = null constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) @@ -28,9 +30,9 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F inflater = LayoutInflater.from(context) monthView = inflater.inflate(R.layout.month_view, this).month_view + setupHorizontalOffset() onGlobalLayout { - measureSizes() if (!wereViewsAdded && days.isNotEmpty()) { addViews() monthView.updateDays(days) @@ -39,22 +41,21 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F } fun updateDays(newDays: ArrayList, callback: ((DayMonthly) -> Unit)? = null) { + setupHorizontalOffset() + measureSizes() dayClickCallback = callback days = newDays - if (dayWidth != 0f) { - addViews() - monthView.updateDays(days) - } + addViews() + monthView.updateDays(days) + } + + private fun setupHorizontalOffset() { + horizontalOffset = if (context.config.showWeekNumbers) resources.getDimensionPixelSize(R.dimen.smaller_text_size) * 2 else 0 } private fun measureSizes() { - if (dayWidth == 0f) { - dayWidth = width / 7f - } - - if (dayHeight == 0f) { - dayHeight = (height - weekDaysLetterHeight) / 6f - } + dayWidth = (width - horizontalOffset) / 7f + dayHeight = (height - weekDaysLetterHeight) / 6f } private fun addViews() { @@ -66,7 +67,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F for (x in 0..6) { val day = days.getOrNull(curId) if (day != null) { - val xPos = x * dayWidth + val xPos = x * dayWidth + horizontalOffset val yPos = y * dayHeight + weekDaysLetterHeight addViewBackground(xPos, yPos, day) } From c619dc0e8a7e3fe3034ec4b10271f382a66f2e62 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 15:04:22 +0200 Subject: [PATCH 38/99] ensure proper height limit is applied at monthly view days --- .../kotlin/com/simplemobiletools/calendar/views/MonthView.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index d3d3a2af3..aa8f527d9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -47,7 +47,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var dayLetters = ArrayList() private var days = ArrayList() private var dayVerticalOffsets = SparseIntArray() - private var dayEventsCount = SparseIntArray() constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) @@ -111,7 +110,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con override fun onDraw(canvas: Canvas) { super.onDraw(canvas) dayVerticalOffsets.clear() - dayEventsCount.clear() measureDaySize(canvas) addWeekDayLetters(canvas) @@ -186,7 +184,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val yPos = (event.startDayIndex / 7) * dayHeight val xPosCenter = xPos + dayWidth / 2 - if (dayEventsCount[event.startDayIndex] >= maxEventsPerDay) { + if (verticalOffset - eventTitleHeight * 2 > dayHeight) { canvas.drawText("...", xPosCenter, yPos + verticalOffset - eventTitleHeight / 2, getTextPaint(days[event.startDayIndex])) return } @@ -214,7 +212,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con drawEventTitle(event.title, canvas, xPos, yPos + verticalOffset, bgRight - bgLeft - smallPadding, event.color, startDayIndex, endDayIndex) for (i in 0 until Math.min(event.daysCnt, 7 - event.startDayIndex % 7)) { - dayEventsCount.put(event.startDayIndex + i, dayEventsCount[event.startDayIndex + i] + 1) dayVerticalOffsets.put(event.startDayIndex + i, verticalOffset + eventTitleHeight + smallPadding * 2) } } From fc777e388681c1cc3c1a34f1ac7f2abddd9e5920 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 18:47:28 +0200 Subject: [PATCH 39/99] update commons to 3.17.3 --- app/build.gradle | 2 +- .../simplemobiletools/calendar/activities/EventActivity.kt | 6 +++--- .../calendar/activities/SettingsActivity.kt | 2 +- .../calendar/activities/SnoozeReminderActivity.kt | 4 ++-- build.gradle | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d3f6071ea..a58103c20 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.16.17' + implementation 'com.simplemobiletools:commons:3.17.3' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt index 96855c82c..7a3e6feeb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/EventActivity.kt @@ -174,21 +174,21 @@ class EventActivity : SimpleActivity() { } private fun showReminder1Dialog() { - showPickSecondsDialog(mReminder1Minutes * 60) { + showPickSecondsDialogHelper(mReminder1Minutes) { mReminder1Minutes = if (it <= 0) it else it / 60 checkReminderTexts() } } private fun showReminder2Dialog() { - showPickSecondsDialog(mReminder2Minutes * 60) { + showPickSecondsDialogHelper(mReminder2Minutes) { mReminder2Minutes = if (it <= 0) it else it / 60 checkReminderTexts() } } private fun showReminder3Dialog() { - showPickSecondsDialog(mReminder3Minutes * 60) { + showPickSecondsDialogHelper(mReminder3Minutes) { mReminder3Minutes = if (it <= 0) it else it / 60 checkReminderTexts() } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index f1729d9fb..eae50e682 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -319,7 +319,7 @@ class SettingsActivity : SimpleActivity() { private fun setupSnoozeTime() { updateSnoozeTime() settings_snooze_time_holder.setOnClickListener { - showPickSecondsDialog(config.snoozeTime * 60, true) { + showPickSecondsDialogHelper(config.snoozeTime, true) { config.snoozeTime = it / 60 updateSnoozeTime() } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt index ec05c36ee..455a6313d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SnoozeReminderActivity.kt @@ -6,13 +6,13 @@ import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.rescheduleReminder import com.simplemobiletools.calendar.helpers.EVENT_ID -import com.simplemobiletools.commons.extensions.showPickSecondsDialog +import com.simplemobiletools.commons.extensions.showPickSecondsDialogHelper class SnoozeReminderActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - showPickSecondsDialog(config.snoozeTime * 60, true, cancelCallback = { dialogCancelled() }) { + showPickSecondsDialogHelper(config.snoozeTime, true, cancelCallback = { dialogCancelled() }) { val eventId = intent.getIntExtra(EVENT_ID, 0) val event = dbHelper.getEventWithId(eventId) config.snoozeTime = it / 60 diff --git a/build.gradle b/build.gradle index 584467619..e6abf43e1 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong From 13a22a1f4a246eb58d45efa8d67d070b46656788 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 27 Mar 2018 18:58:44 +0200 Subject: [PATCH 40/99] Translated the app name As the Dev suggested, the app name was translated also. --- app/src/main/res/values-hr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index ea32cef8e..a97feaf98 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -1,6 +1,6 @@ - Simple Calendar + Jednostavan kalendar Kalendar Promijeni prikaz Dnevni pregled From 19372288c26125a60d648474d902a02b88646fa9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 20:53:15 +0200 Subject: [PATCH 41/99] fix #407, add or update some country holidays --- app/src/main/assets/china.ics | 289 +++ app/src/main/assets/colombia.ics | 422 +++++ app/src/main/assets/croatia.ics | 296 +++ app/src/main/assets/denmark.ics | 254 +++ app/src/main/assets/estonia.ics | 373 ++-- app/src/main/assets/finland.ics | 8 +- app/src/main/assets/latvia.ics | 326 ++++ app/src/main/assets/lithuania.ics | 317 ++++ app/src/main/assets/luxembourg.ics | 212 +++ app/src/main/assets/macedonia.ics | 239 +++ app/src/main/assets/mexico.ics | 156 ++ app/src/main/assets/netherlands.ics | 1673 +---------------- app/src/main/assets/romania.ics | 296 +++ app/src/main/assets/serbia.ics | 247 +++ app/src/main/assets/southafrica.ics | 275 +++ app/src/main/assets/sweden.ics | 655 +++---- app/src/main/assets/ukraine.ics | 316 ++++ .../calendar/activities/MainActivity.kt | 13 + 18 files changed, 4218 insertions(+), 2149 deletions(-) create mode 100644 app/src/main/assets/china.ics create mode 100644 app/src/main/assets/colombia.ics create mode 100644 app/src/main/assets/croatia.ics create mode 100644 app/src/main/assets/denmark.ics create mode 100644 app/src/main/assets/latvia.ics create mode 100644 app/src/main/assets/lithuania.ics create mode 100644 app/src/main/assets/luxembourg.ics create mode 100644 app/src/main/assets/macedonia.ics create mode 100644 app/src/main/assets/mexico.ics create mode 100644 app/src/main/assets/romania.ics create mode 100644 app/src/main/assets/serbia.ics create mode 100644 app/src/main/assets/southafrica.ics mode change 100755 => 100644 app/src/main/assets/sweden.ics create mode 100644 app/src/main/assets/ukraine.ics diff --git a/app/src/main/assets/china.ics b/app/src/main/assets/china.ics new file mode 100644 index 000000000..9022a5f14 --- /dev/null +++ b/app/src/main/assets/china.ics @@ -0,0 +1,289 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-chn-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:元旦 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180215@kayaposoft.com +DTSTART;VALUE=DATE:20180215 +DTEND;VALUE=DATE:20180216 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180216@kayaposoft.com +DTSTART;VALUE=DATE:20180216 +DTEND;VALUE=DATE:20180217 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180217@kayaposoft.com +DTSTART;VALUE=DATE:20180217 +DTEND;VALUE=DATE:20180218 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180218@kayaposoft.com +DTSTART;VALUE=DATE:20180218 +DTEND;VALUE=DATE:20180219 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180219@kayaposoft.com +DTSTART;VALUE=DATE:20180219 +DTEND;VALUE=DATE:20180220 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180220@kayaposoft.com +DTSTART;VALUE=DATE:20180220 +DTEND;VALUE=DATE:20180221 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180221@kayaposoft.com +DTSTART;VALUE=DATE:20180221 +DTEND;VALUE=DATE:20180222 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180405@kayaposoft.com +DTSTART;VALUE=DATE:20180405 +DTEND;VALUE=DATE:20180406 +SUMMARY:清明节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180406@kayaposoft.com +DTSTART;VALUE=DATE:20180406 +DTEND;VALUE=DATE:20180407 +SUMMARY:清明节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180407@kayaposoft.com +DTSTART;VALUE=DATE:20180407 +DTEND;VALUE=DATE:20180408 +SUMMARY:清明节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180429@kayaposoft.com +DTSTART;VALUE=DATE:20180429 +DTEND;VALUE=DATE:20180430 +SUMMARY:劳动节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180430@kayaposoft.com +DTSTART;VALUE=DATE:20180430 +DTEND;VALUE=DATE:20180501 +SUMMARY:劳动节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:劳动节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180616@kayaposoft.com +DTSTART;VALUE=DATE:20180616 +DTEND;VALUE=DATE:20180617 +SUMMARY:端午节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180617@kayaposoft.com +DTSTART;VALUE=DATE:20180617 +DTEND;VALUE=DATE:20180618 +SUMMARY:端午节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180618@kayaposoft.com +DTSTART;VALUE=DATE:20180618 +DTEND;VALUE=DATE:20180619 +SUMMARY:端午节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180922@kayaposoft.com +DTSTART;VALUE=DATE:20180922 +DTEND;VALUE=DATE:20180923 +SUMMARY:中秋节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180923@kayaposoft.com +DTSTART;VALUE=DATE:20180923 +DTEND;VALUE=DATE:20180924 +SUMMARY:中秋节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20180924@kayaposoft.com +DTSTART;VALUE=DATE:20180924 +DTEND;VALUE=DATE:20180925 +SUMMARY:中秋节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181001@kayaposoft.com +DTSTART;VALUE=DATE:20181001 +DTEND;VALUE=DATE:20181002 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181002@kayaposoft.com +DTSTART;VALUE=DATE:20181002 +DTEND;VALUE=DATE:20181003 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181003@kayaposoft.com +DTSTART;VALUE=DATE:20181003 +DTEND;VALUE=DATE:20181004 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181004@kayaposoft.com +DTSTART;VALUE=DATE:20181004 +DTEND;VALUE=DATE:20181005 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181005@kayaposoft.com +DTSTART;VALUE=DATE:20181005 +DTEND;VALUE=DATE:20181006 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181006@kayaposoft.com +DTSTART;VALUE=DATE:20181006 +DTEND;VALUE=DATE:20181007 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20181007@kayaposoft.com +DTSTART;VALUE=DATE:20181007 +DTEND;VALUE=DATE:20181008 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:元旦 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20190205@kayaposoft.com +DTSTART;VALUE=DATE:20190205 +DTEND;VALUE=DATE:20190206 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20190405@kayaposoft.com +DTSTART;VALUE=DATE:20190405 +DTEND;VALUE=DATE:20190406 +SUMMARY:清明节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:劳动节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20190607@kayaposoft.com +DTSTART;VALUE=DATE:20190607 +DTEND;VALUE=DATE:20190608 +SUMMARY:端午节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20190913@kayaposoft.com +DTSTART;VALUE=DATE:20190913 +DTEND;VALUE=DATE:20190914 +SUMMARY:中秋节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20191001@kayaposoft.com +DTSTART;VALUE=DATE:20191001 +DTEND;VALUE=DATE:20191002 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:元旦 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20200125@kayaposoft.com +DTSTART;VALUE=DATE:20200125 +DTEND;VALUE=DATE:20200126 +SUMMARY:春节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20200404@kayaposoft.com +DTSTART;VALUE=DATE:20200404 +DTEND;VALUE=DATE:20200405 +SUMMARY:清明节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:劳动节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20200625@kayaposoft.com +DTSTART;VALUE=DATE:20200625 +DTEND;VALUE=DATE:20200626 +SUMMARY:端午节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20201001@kayaposoft.com +DTSTART;VALUE=DATE:20201001 +DTEND;VALUE=DATE:20201002 +SUMMARY:国庆节 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-chn-20201001-529562@kayaposoft.com +DTSTART;VALUE=DATE:20201001 +DTEND;VALUE=DATE:20201002 +SUMMARY:中秋节 +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/colombia.ics b/app/src/main/assets/colombia.ics new file mode 100644 index 000000000..81b232bd0 --- /dev/null +++ b/app/src/main/assets/colombia.ics @@ -0,0 +1,422 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-col-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Año Nuevo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180108@kayaposoft.com +DTSTART;VALUE=DATE:20180108 +DTEND;VALUE=DATE:20180109 +SUMMARY:Día de los Reyes Magos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180319@kayaposoft.com +DTSTART;VALUE=DATE:20180319 +DTEND;VALUE=DATE:20180320 +SUMMARY:Día de San José +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180325@kayaposoft.com +DTSTART;VALUE=DATE:20180325 +DTEND;VALUE=DATE:20180326 +SUMMARY:Domingo de Ramos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180329@kayaposoft.com +DTSTART;VALUE=DATE:20180329 +DTEND;VALUE=DATE:20180330 +SUMMARY:Jueves Santo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180330@kayaposoft.com +DTSTART;VALUE=DATE:20180330 +DTEND;VALUE=DATE:20180331 +SUMMARY:Viernes Santo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180401@kayaposoft.com +DTSTART;VALUE=DATE:20180401 +DTEND;VALUE=DATE:20180402 +SUMMARY:Domingo de Pascuas o Resurrección +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Día del Trabajo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180514@kayaposoft.com +DTSTART;VALUE=DATE:20180514 +DTEND;VALUE=DATE:20180515 +SUMMARY:Día de la Ascensión +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180604@kayaposoft.com +DTSTART;VALUE=DATE:20180604 +DTEND;VALUE=DATE:20180605 +SUMMARY:Corpus Christi +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180611@kayaposoft.com +DTSTART;VALUE=DATE:20180611 +DTEND;VALUE=DATE:20180612 +SUMMARY:Sagrado Corazón de Jesús +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180702@kayaposoft.com +DTSTART;VALUE=DATE:20180702 +DTEND;VALUE=DATE:20180703 +SUMMARY:San Pedro y San Pablo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180720@kayaposoft.com +DTSTART;VALUE=DATE:20180720 +DTEND;VALUE=DATE:20180721 +SUMMARY:Declaracion de la Independencia de Colombia +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180807@kayaposoft.com +DTSTART;VALUE=DATE:20180807 +DTEND;VALUE=DATE:20180808 +SUMMARY:Batalla de Boyacá +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20180820@kayaposoft.com +DTSTART;VALUE=DATE:20180820 +DTEND;VALUE=DATE:20180821 +SUMMARY:Asunción de la Virgen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20181015@kayaposoft.com +DTSTART;VALUE=DATE:20181015 +DTEND;VALUE=DATE:20181016 +SUMMARY:Día de la Raza +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20181105@kayaposoft.com +DTSTART;VALUE=DATE:20181105 +DTEND;VALUE=DATE:20181106 +SUMMARY:Día de todos los Santos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20181112@kayaposoft.com +DTSTART;VALUE=DATE:20181112 +DTEND;VALUE=DATE:20181113 +SUMMARY:Independencia de Cartagena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20181208@kayaposoft.com +DTSTART;VALUE=DATE:20181208 +DTEND;VALUE=DATE:20181209 +SUMMARY:Día de la Inmaculada Concepción +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Navidad +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Año Nuevo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190107@kayaposoft.com +DTSTART;VALUE=DATE:20190107 +DTEND;VALUE=DATE:20190108 +SUMMARY:Día de los Reyes Magos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190325@kayaposoft.com +DTSTART;VALUE=DATE:20190325 +DTEND;VALUE=DATE:20190326 +SUMMARY:Día de San José +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190414@kayaposoft.com +DTSTART;VALUE=DATE:20190414 +DTEND;VALUE=DATE:20190415 +SUMMARY:Domingo de Ramos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190418@kayaposoft.com +DTSTART;VALUE=DATE:20190418 +DTEND;VALUE=DATE:20190419 +SUMMARY:Jueves Santo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190419@kayaposoft.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190420 +SUMMARY:Viernes Santo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:Domingo de Pascuas o Resurrección +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Día del Trabajo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190603@kayaposoft.com +DTSTART;VALUE=DATE:20190603 +DTEND;VALUE=DATE:20190604 +SUMMARY:Día de la Ascensión +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190624@kayaposoft.com +DTSTART;VALUE=DATE:20190624 +DTEND;VALUE=DATE:20190625 +SUMMARY:Corpus Christi +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190701@kayaposoft.com +DTSTART;VALUE=DATE:20190701 +DTEND;VALUE=DATE:20190702 +SUMMARY:Sagrado Corazón de Jesús +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190701-289927@kayaposoft.com +DTSTART;VALUE=DATE:20190701 +DTEND;VALUE=DATE:20190702 +SUMMARY:San Pedro y San Pablo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190720@kayaposoft.com +DTSTART;VALUE=DATE:20190720 +DTEND;VALUE=DATE:20190721 +SUMMARY:Declaracion de la Independencia de Colombia +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190807@kayaposoft.com +DTSTART;VALUE=DATE:20190807 +DTEND;VALUE=DATE:20190808 +SUMMARY:Batalla de Boyacá +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20190819@kayaposoft.com +DTSTART;VALUE=DATE:20190819 +DTEND;VALUE=DATE:20190820 +SUMMARY:Asunción de la Virgen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20191014@kayaposoft.com +DTSTART;VALUE=DATE:20191014 +DTEND;VALUE=DATE:20191015 +SUMMARY:Día de la Raza +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20191104@kayaposoft.com +DTSTART;VALUE=DATE:20191104 +DTEND;VALUE=DATE:20191105 +SUMMARY:Día de todos los Santos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20191111@kayaposoft.com +DTSTART;VALUE=DATE:20191111 +DTEND;VALUE=DATE:20191112 +SUMMARY:Independencia de Cartagena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20191208@kayaposoft.com +DTSTART;VALUE=DATE:20191208 +DTEND;VALUE=DATE:20191209 +SUMMARY:Día de la Inmaculada Concepción +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Navidad +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Año Nuevo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200106@kayaposoft.com +DTSTART;VALUE=DATE:20200106 +DTEND;VALUE=DATE:20200107 +SUMMARY:Día de los Reyes Magos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200323@kayaposoft.com +DTSTART;VALUE=DATE:20200323 +DTEND;VALUE=DATE:20200324 +SUMMARY:Día de San José +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200405@kayaposoft.com +DTSTART;VALUE=DATE:20200405 +DTEND;VALUE=DATE:20200406 +SUMMARY:Domingo de Ramos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200409@kayaposoft.com +DTSTART;VALUE=DATE:20200409 +DTEND;VALUE=DATE:20200410 +SUMMARY:Jueves Santo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200410@kayaposoft.com +DTSTART;VALUE=DATE:20200410 +DTEND;VALUE=DATE:20200411 +SUMMARY:Viernes Santo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:Domingo de Pascuas o Resurrección +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Día del Trabajo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200525@kayaposoft.com +DTSTART;VALUE=DATE:20200525 +DTEND;VALUE=DATE:20200526 +SUMMARY:Día de la Ascensión +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200615@kayaposoft.com +DTSTART;VALUE=DATE:20200615 +DTEND;VALUE=DATE:20200616 +SUMMARY:Corpus Christi +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200622@kayaposoft.com +DTSTART;VALUE=DATE:20200622 +DTEND;VALUE=DATE:20200623 +SUMMARY:Sagrado Corazón de Jesús +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200629@kayaposoft.com +DTSTART;VALUE=DATE:20200629 +DTEND;VALUE=DATE:20200630 +SUMMARY:San Pedro y San Pablo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200720@kayaposoft.com +DTSTART;VALUE=DATE:20200720 +DTEND;VALUE=DATE:20200721 +SUMMARY:Declaracion de la Independencia de Colombia +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200807@kayaposoft.com +DTSTART;VALUE=DATE:20200807 +DTEND;VALUE=DATE:20200808 +SUMMARY:Batalla de Boyacá +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20200817@kayaposoft.com +DTSTART;VALUE=DATE:20200817 +DTEND;VALUE=DATE:20200818 +SUMMARY:Asunción de la Virgen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20201012@kayaposoft.com +DTSTART;VALUE=DATE:20201012 +DTEND;VALUE=DATE:20201013 +SUMMARY:Día de la Raza +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20201102@kayaposoft.com +DTSTART;VALUE=DATE:20201102 +DTEND;VALUE=DATE:20201103 +SUMMARY:Día de todos los Santos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20201116@kayaposoft.com +DTSTART;VALUE=DATE:20201116 +DTEND;VALUE=DATE:20201117 +SUMMARY:Independencia de Cartagena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20201208@kayaposoft.com +DTSTART;VALUE=DATE:20201208 +DTEND;VALUE=DATE:20201209 +SUMMARY:Día de la Inmaculada Concepción +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-col-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Navidad +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/croatia.ics b/app/src/main/assets/croatia.ics new file mode 100644 index 000000000..9fd155e13 --- /dev/null +++ b/app/src/main/assets/croatia.ics @@ -0,0 +1,296 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-hrv-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180106@kayaposoft.com +DTSTART;VALUE=DATE:20180106 +DTEND;VALUE=DATE:20180107 +SUMMARY:Bogojavljanje ili Sveta tri kralja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180401@kayaposoft.com +DTSTART;VALUE=DATE:20180401 +DTEND;VALUE=DATE:20180402 +SUMMARY:Uskrs +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:Uskrsni ponedjeljak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180531@kayaposoft.com +DTSTART;VALUE=DATE:20180531 +DTEND;VALUE=DATE:20180601 +SUMMARY:Tijelovo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180622@kayaposoft.com +DTSTART;VALUE=DATE:20180622 +DTEND;VALUE=DATE:20180623 +SUMMARY:Dan antifašističke borbe +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180625@kayaposoft.com +DTSTART;VALUE=DATE:20180625 +DTEND;VALUE=DATE:20180626 +SUMMARY:Dan državnosti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180805@kayaposoft.com +DTSTART;VALUE=DATE:20180805 +DTEND;VALUE=DATE:20180806 +SUMMARY:Dan pobjede i domovinske zahvalnosti i Dan hrvatskih branitelja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20180815@kayaposoft.com +DTSTART;VALUE=DATE:20180815 +DTEND;VALUE=DATE:20180816 +SUMMARY:Velika Gospa +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20181008@kayaposoft.com +DTSTART;VALUE=DATE:20181008 +DTEND;VALUE=DATE:20181009 +SUMMARY:Dan neovisnosti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20181101@kayaposoft.com +DTSTART;VALUE=DATE:20181101 +DTEND;VALUE=DATE:20181102 +SUMMARY:Svi sveti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Božić +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Prvi dan po Božiću\, Sveti Stjepan +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190106@kayaposoft.com +DTSTART;VALUE=DATE:20190106 +DTEND;VALUE=DATE:20190107 +SUMMARY:Bogojavljanje ili Sveta tri kralja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:Uskrs +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Uskrsni ponedjeljak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190620@kayaposoft.com +DTSTART;VALUE=DATE:20190620 +DTEND;VALUE=DATE:20190621 +SUMMARY:Tijelovo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190622@kayaposoft.com +DTSTART;VALUE=DATE:20190622 +DTEND;VALUE=DATE:20190623 +SUMMARY:Dan antifašističke borbe +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190625@kayaposoft.com +DTSTART;VALUE=DATE:20190625 +DTEND;VALUE=DATE:20190626 +SUMMARY:Dan državnosti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190805@kayaposoft.com +DTSTART;VALUE=DATE:20190805 +DTEND;VALUE=DATE:20190806 +SUMMARY:Dan pobjede i domovinske zahvalnosti i Dan hrvatskih branitelja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20190815@kayaposoft.com +DTSTART;VALUE=DATE:20190815 +DTEND;VALUE=DATE:20190816 +SUMMARY:Velika Gospa +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20191008@kayaposoft.com +DTSTART;VALUE=DATE:20191008 +DTEND;VALUE=DATE:20191009 +SUMMARY:Dan neovisnosti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20191101@kayaposoft.com +DTSTART;VALUE=DATE:20191101 +DTEND;VALUE=DATE:20191102 +SUMMARY:Svi sveti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Božić +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Prvi dan po Božiću\, Sveti Stjepan +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200106@kayaposoft.com +DTSTART;VALUE=DATE:20200106 +DTEND;VALUE=DATE:20200107 +SUMMARY:Bogojavljanje ili Sveta tri kralja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:Uskrs +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Uskrsni ponedjeljak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200611@kayaposoft.com +DTSTART;VALUE=DATE:20200611 +DTEND;VALUE=DATE:20200612 +SUMMARY:Tijelovo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200622@kayaposoft.com +DTSTART;VALUE=DATE:20200622 +DTEND;VALUE=DATE:20200623 +SUMMARY:Dan antifašističke borbe +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200625@kayaposoft.com +DTSTART;VALUE=DATE:20200625 +DTEND;VALUE=DATE:20200626 +SUMMARY:Dan državnosti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200805@kayaposoft.com +DTSTART;VALUE=DATE:20200805 +DTEND;VALUE=DATE:20200806 +SUMMARY:Dan pobjede i domovinske zahvalnosti i Dan hrvatskih branitelja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20200815@kayaposoft.com +DTSTART;VALUE=DATE:20200815 +DTEND;VALUE=DATE:20200816 +SUMMARY:Velika Gospa +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20201008@kayaposoft.com +DTSTART;VALUE=DATE:20201008 +DTEND;VALUE=DATE:20201009 +SUMMARY:Dan neovisnosti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20201101@kayaposoft.com +DTSTART;VALUE=DATE:20201101 +DTEND;VALUE=DATE:20201102 +SUMMARY:Svi sveti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Božić +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-hrv-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Prvi dan po Božiću\, Sveti Stjepan +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/denmark.ics b/app/src/main/assets/denmark.ics new file mode 100644 index 000000000..1b7ccc624 --- /dev/null +++ b/app/src/main/assets/denmark.ics @@ -0,0 +1,254 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-dnk-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Nytårsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180325@kayaposoft.com +DTSTART;VALUE=DATE:20180325 +DTEND;VALUE=DATE:20180326 +SUMMARY:Palmesøndag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180329@kayaposoft.com +DTSTART;VALUE=DATE:20180329 +DTEND;VALUE=DATE:20180330 +SUMMARY:Skærtorsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180330@kayaposoft.com +DTSTART;VALUE=DATE:20180330 +DTEND;VALUE=DATE:20180331 +SUMMARY:Langfredag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180401@kayaposoft.com +DTSTART;VALUE=DATE:20180401 +DTEND;VALUE=DATE:20180402 +SUMMARY:1. Påskedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:2. Påskedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180427@kayaposoft.com +DTSTART;VALUE=DATE:20180427 +DTEND;VALUE=DATE:20180428 +SUMMARY:Store Bededag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180510@kayaposoft.com +DTSTART;VALUE=DATE:20180510 +DTEND;VALUE=DATE:20180511 +SUMMARY:Kristi Himmelfartsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180520@kayaposoft.com +DTSTART;VALUE=DATE:20180520 +DTEND;VALUE=DATE:20180521 +SUMMARY:1. Pinsedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20180521@kayaposoft.com +DTSTART;VALUE=DATE:20180521 +DTEND;VALUE=DATE:20180522 +SUMMARY:2. Pinsedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:1. Juledag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:2. Juledag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Nytårsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190414@kayaposoft.com +DTSTART;VALUE=DATE:20190414 +DTEND;VALUE=DATE:20190415 +SUMMARY:Palmesøndag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190418@kayaposoft.com +DTSTART;VALUE=DATE:20190418 +DTEND;VALUE=DATE:20190419 +SUMMARY:Skærtorsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190419@kayaposoft.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190420 +SUMMARY:Langfredag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:1. Påskedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:2. Påskedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190517@kayaposoft.com +DTSTART;VALUE=DATE:20190517 +DTEND;VALUE=DATE:20190518 +SUMMARY:Store Bededag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190530@kayaposoft.com +DTSTART;VALUE=DATE:20190530 +DTEND;VALUE=DATE:20190531 +SUMMARY:Kristi Himmelfartsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190609@kayaposoft.com +DTSTART;VALUE=DATE:20190609 +DTEND;VALUE=DATE:20190610 +SUMMARY:1. Pinsedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20190610@kayaposoft.com +DTSTART;VALUE=DATE:20190610 +DTEND;VALUE=DATE:20190611 +SUMMARY:2. Pinsedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:1. Juledag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:2. Juledag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Nytårsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200405@kayaposoft.com +DTSTART;VALUE=DATE:20200405 +DTEND;VALUE=DATE:20200406 +SUMMARY:Palmesøndag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200409@kayaposoft.com +DTSTART;VALUE=DATE:20200409 +DTEND;VALUE=DATE:20200410 +SUMMARY:Skærtorsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200410@kayaposoft.com +DTSTART;VALUE=DATE:20200410 +DTEND;VALUE=DATE:20200411 +SUMMARY:Langfredag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:1. Påskedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:2. Påskedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200508@kayaposoft.com +DTSTART;VALUE=DATE:20200508 +DTEND;VALUE=DATE:20200509 +SUMMARY:Store Bededag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200521@kayaposoft.com +DTSTART;VALUE=DATE:20200521 +DTEND;VALUE=DATE:20200522 +SUMMARY:Kristi Himmelfartsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200531@kayaposoft.com +DTSTART;VALUE=DATE:20200531 +DTEND;VALUE=DATE:20200601 +SUMMARY:1. Pinsedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20200601@kayaposoft.com +DTSTART;VALUE=DATE:20200601 +DTEND;VALUE=DATE:20200602 +SUMMARY:2. Pinsedag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:1. Juledag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-dnk-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:2. Juledag +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/estonia.ics b/app/src/main/assets/estonia.ics index 211dbc295..ffe6ebb2e 100755 --- a/app/src/main/assets/estonia.ics +++ b/app/src/main/assets/estonia.ics @@ -1,219 +1,254 @@ BEGIN:VCALENDAR BEGIN:VEVENT -SUMMARY:Leheristipäev -UID:87aea25e-f592-47eb-b603-81640c074097 -DTSTART;VALUE=DATE:20170518 -DTEND;VALUE=DATE:20170519 +UID:enrico-est-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:uusaasta STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Taevaminemispüha -UID:6e5e0af9-0230-427b-97f3-e799ddad9294 -DTSTART;VALUE=DATE:20170525 -DTEND;VALUE=DATE:20170526 +UID:enrico-est-20180224@kayaposoft.com +DTSTART;VALUE=DATE:20180224 +DTEND;VALUE=DATE:20180225 +SUMMARY:iseseisvuspäev STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:1. nelipüha -UID:496869e4-af27-425b-ac0d-67c6dcb01adc -DTSTART;VALUE=DATE:20170604 -DTEND;VALUE=DATE:20170605 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:2. nelipüha -UID:b70ead8d-fad3-484a-bf67-5a52632c579d -DTSTART;VALUE=DATE:20170605 -DTEND;VALUE=DATE:20170606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Suve algus kell 07:24 -UID:328ecee3-576a-44e8-9c1e-2f3a5e357f83 -DTSTART;VALUE=DATE:20170621 -DTEND;VALUE=DATE:20170622 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sügise algus kell 23:02 -UID:afc4d254-2139-497a-a8d8-38df0bbaea0d -DTSTART;VALUE=DATE:20170922 -DTEND;VALUE=DATE:20170923 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Kohaliku omavalitsuse volikogu valimised -UID:8da59f54-176f-446e-a270-c111ea3e18dd -DTSTART;VALUE=DATE:20171015 -DTEND;VALUE=DATE:20171016 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:1. advent -UID:47dc3b6a-d95b-44b5-bfc7-1b3a35f7205d -DTSTART;VALUE=DATE:20171203 -DTEND;VALUE=DATE:20171204 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:2. advent -UID:4864b353-09b9-4efa-83d0-a972392b84bb -DTSTART;VALUE=DATE:20171210 -DTEND;VALUE=DATE:20171211 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:3. advent -UID:329a9209-d449-4bbf-a34c-ad1d5a5c614b -DTSTART;VALUE=DATE:20171217 -DTEND;VALUE=DATE:20171218 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Talve algus kell 18:28 -UID:8f789507-7ebb-43a0-98c3-7d43e02383ab -DTSTART;VALUE=DATE:20171221 -DTEND;VALUE=DATE:20171222 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:4. advent -UID:b2be7f14-42d6-4315-ae41-a8e70cc0389d -DTSTART;VALUE=DATE:20171224 -DTEND;VALUE=DATE:20171225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Vastlapäev -UID:a95dc427-9bc3-42c2-bf73-e28475488119 -DTSTART;VALUE=DATE:20180213 -DTEND;VALUE=DATE:20180214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tuhkapäev -UID:f154d202-d199-47d7-8c9b-2f7e9b6ee566 -DTSTART;VALUE=DATE:20180214 -DTEND;VALUE=DATE:20180215 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Kevade algus kell 18:15 -UID:bf16eef0-f725-4bad-8f08-782b799d3c23 -DTSTART;VALUE=DATE:20180320 -DTEND;VALUE=DATE:20180321 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Suur reede -UID:c6622440-ffcb-4ac1-b74e-9585bbd4201f +UID:enrico-est-20180330@kayaposoft.com DTSTART;VALUE=DATE:20180330 DTEND;VALUE=DATE:20180331 +SUMMARY:suur reede STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:1. ülestõusmispüha -UID:e2b4326b-a759-4139-983c-010e11c00ed6 +UID:enrico-est-20180401@kayaposoft.com DTSTART;VALUE=DATE:20180401 DTEND;VALUE=DATE:20180402 +SUMMARY:ülestõusmispühade 1. püha STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:2. ülestõusmispüha -UID:7953c329-b375-453d-aa22-3178ab4c8635 -DTSTART;VALUE=DATE:20180402 -DTEND;VALUE=DATE:20180403 +UID:enrico-est-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:kevadpüha STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tuuleristipäev -UID:3bcd442c-cfb7-4ce2-b094-5c8faa2eb6e3 -DTSTART;VALUE=DATE:20180419 -DTEND;VALUE=DATE:20180420 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Linnuristipäev -UID:ed690184-a077-404a-9898-526fc30c0edd -DTSTART;VALUE=DATE:20180426 -DTEND;VALUE=DATE:20180427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Leheristipäev -UID:3ee1e9ca-4a0f-4b50-95e2-9d6f0df602b4 -DTSTART;VALUE=DATE:20180503 -DTEND;VALUE=DATE:20180504 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Taevaminemispüha -UID:77e33601-6e4a-451d-8f05-f0e32aae10e8 -DTSTART;VALUE=DATE:20180510 -DTEND;VALUE=DATE:20180511 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:1. nelipüha -UID:b1ec19e5-7aad-4c68-9b57-afb2fdc443d7 +UID:enrico-est-20180520@kayaposoft.com DTSTART;VALUE=DATE:20180520 DTEND;VALUE=DATE:20180521 +SUMMARY:nelipühade 1. püha STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:2. nelipüha -UID:fbd7814f-0b3b-4916-94de-3c20d7a32fae -DTSTART;VALUE=DATE:20180521 -DTEND;VALUE=DATE:20180522 +UID:enrico-est-20180623@kayaposoft.com +DTSTART;VALUE=DATE:20180623 +DTEND;VALUE=DATE:20180624 +SUMMARY:võidupüha STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Suve algus kell 13:07 -UID:2c96272e-c227-46ba-8219-54e5ae360ffd -DTSTART;VALUE=DATE:20180621 -DTEND;VALUE=DATE:20180622 +UID:enrico-est-20180624@kayaposoft.com +DTSTART;VALUE=DATE:20180624 +DTEND;VALUE=DATE:20180625 +SUMMARY:jaanipäev STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Sügise algus kell 04:54 -UID:5f22d789-9b4b-4aeb-9691-f813e2a01aa8 -DTSTART;VALUE=DATE:20180923 -DTEND;VALUE=DATE:20180924 +UID:enrico-est-20180820@kayaposoft.com +DTSTART;VALUE=DATE:20180820 +DTEND;VALUE=DATE:20180821 +SUMMARY:taasiseseisvumispäev STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:1. advent -UID:ec10f2a1-aa5f-44d3-afe1-a6d1cf3e5a9e -DTSTART;VALUE=DATE:20181202 -DTEND;VALUE=DATE:20181203 +UID:enrico-est-20181224@kayaposoft.com +DTSTART;VALUE=DATE:20181224 +DTEND;VALUE=DATE:20181225 +SUMMARY:jõululaupäev STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:2. advent -UID:c29c4c4a-6905-4864-9bb9-ebf6c1ed394e -DTSTART;VALUE=DATE:20181209 -DTEND;VALUE=DATE:20181210 +UID:enrico-est-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:esimene jõulupüha STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:3. advent -UID:fc82eb9d-15b2-4182-9e7c-30096371decc -DTSTART;VALUE=DATE:20181216 -DTEND;VALUE=DATE:20181217 +UID:enrico-est-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:teine jõulupüha STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Talve algus kell 00:23 -UID:89ae6fc6-699f-4189-80db-c118f2aca9c4 -DTSTART;VALUE=DATE:20181222 -DTEND;VALUE=DATE:20181223 +UID:enrico-est-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:uusaasta STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:4. advent -UID:6b3cd6d7-77ab-4d12-97c8-92fbe78264a8 -DTSTART;VALUE=DATE:20181223 -DTEND;VALUE=DATE:20181224 +UID:enrico-est-20190224@kayaposoft.com +DTSTART;VALUE=DATE:20190224 +DTEND;VALUE=DATE:20190225 +SUMMARY:iseseisvuspäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190419@kayaposoft.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190420 +SUMMARY:suur reede +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:ülestõusmispühade 1. püha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:kevadpüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190609@kayaposoft.com +DTSTART;VALUE=DATE:20190609 +DTEND;VALUE=DATE:20190610 +SUMMARY:nelipühade 1. püha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190623@kayaposoft.com +DTSTART;VALUE=DATE:20190623 +DTEND;VALUE=DATE:20190624 +SUMMARY:võidupüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190624@kayaposoft.com +DTSTART;VALUE=DATE:20190624 +DTEND;VALUE=DATE:20190625 +SUMMARY:jaanipäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20190820@kayaposoft.com +DTSTART;VALUE=DATE:20190820 +DTEND;VALUE=DATE:20190821 +SUMMARY:taasiseseisvumispäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20191224@kayaposoft.com +DTSTART;VALUE=DATE:20191224 +DTEND;VALUE=DATE:20191225 +SUMMARY:jõululaupäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:esimene jõulupüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:teine jõulupüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:uusaasta +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200224@kayaposoft.com +DTSTART;VALUE=DATE:20200224 +DTEND;VALUE=DATE:20200225 +SUMMARY:iseseisvuspäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200410@kayaposoft.com +DTSTART;VALUE=DATE:20200410 +DTEND;VALUE=DATE:20200411 +SUMMARY:suur reede +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:ülestõusmispühade 1. püha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:kevadpüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200531@kayaposoft.com +DTSTART;VALUE=DATE:20200531 +DTEND;VALUE=DATE:20200601 +SUMMARY:nelipühade 1. püha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200623@kayaposoft.com +DTSTART;VALUE=DATE:20200623 +DTEND;VALUE=DATE:20200624 +SUMMARY:võidupüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200624@kayaposoft.com +DTSTART;VALUE=DATE:20200624 +DTEND;VALUE=DATE:20200625 +SUMMARY:jaanipäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20200820@kayaposoft.com +DTSTART;VALUE=DATE:20200820 +DTEND;VALUE=DATE:20200821 +SUMMARY:taasiseseisvumispäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20201224@kayaposoft.com +DTSTART;VALUE=DATE:20201224 +DTEND;VALUE=DATE:20201225 +SUMMARY:jõululaupäev +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:esimene jõulupüha +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-est-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:teine jõulupüha STATUS:CONFIRMED END:VEVENT END:VCALENDAR diff --git a/app/src/main/assets/finland.ics b/app/src/main/assets/finland.ics index 637121ade..da9373306 100755 --- a/app/src/main/assets/finland.ics +++ b/app/src/main/assets/finland.ics @@ -65,16 +65,16 @@ END:VEVENT BEGIN:VEVENT SUMMARY:Naistenpäivä UID:55954496-9c99-4eeb-871e-b015d0f8ce40 -DTSTART;VALUE=DATE:19750308 -DTEND;VALUE=DATE:19750309 +DTSTART;VALUE=DATE:20170308 +DTEND;VALUE=DATE:20170309 STATUS:CONFIRMED RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT SUMMARY:Ruotsalaisuuden päivä UID:ac081b74-6737-49a2-aeaf-4993eec75d0e -DTSTART;VALUE=DATE:19801106 -DTEND;VALUE=DATE:19801107 +DTSTART;VALUE=DATE:20171106 +DTEND;VALUE=DATE:20171107 STATUS:CONFIRMED RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT diff --git a/app/src/main/assets/latvia.ics b/app/src/main/assets/latvia.ics new file mode 100644 index 000000000..a9865a11c --- /dev/null +++ b/app/src/main/assets/latvia.ics @@ -0,0 +1,326 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-lva-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Jaungada dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180330@kayaposoft.com +DTSTART;VALUE=DATE:20180330 +DTEND;VALUE=DATE:20180331 +SUMMARY:Lielo Piektdienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180401@kayaposoft.com +DTSTART;VALUE=DATE:20180401 +DTEND;VALUE=DATE:20180402 +SUMMARY:Pirmās Lieldienas +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:Otro Lieldienu dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180430@kayaposoft.com +DTSTART;VALUE=DATE:20180430 +DTEND;VALUE=DATE:20180501 +SUMMARY:Darba svētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Darba svētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180504@kayaposoft.com +DTSTART;VALUE=DATE:20180504 +DTEND;VALUE=DATE:20180505 +SUMMARY:Latvijas Republikas Neatkarības atjaunošanas dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180513@kayaposoft.com +DTSTART;VALUE=DATE:20180513 +DTEND;VALUE=DATE:20180514 +SUMMARY:Mātes diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180520@kayaposoft.com +DTSTART;VALUE=DATE:20180520 +DTEND;VALUE=DATE:20180521 +SUMMARY:Vasarsvētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180623@kayaposoft.com +DTSTART;VALUE=DATE:20180623 +DTEND;VALUE=DATE:20180624 +SUMMARY:Līgo dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20180624@kayaposoft.com +DTSTART;VALUE=DATE:20180624 +DTEND;VALUE=DATE:20180625 +SUMMARY:Jāņu dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20181119@kayaposoft.com +DTSTART;VALUE=DATE:20181119 +DTEND;VALUE=DATE:20181120 +SUMMARY:Latvijas Republikas proklamēšanas diena +DESCRIPTION:Holiday in lieu of 18 Nov 2018 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20181224@kayaposoft.com +DTSTART;VALUE=DATE:20181224 +DTEND;VALUE=DATE:20181225 +SUMMARY:Ziemassvētku vakars +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Ziemassvētki +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:2. Ziemassvētki +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20181231@kayaposoft.com +DTSTART;VALUE=DATE:20181231 +DTEND;VALUE=DATE:20190101 +SUMMARY:Vecgada vakars +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Jaungada dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190419@kayaposoft.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190420 +SUMMARY:Lielo Piektdienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:Pirmās Lieldienas +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Otro Lieldienu dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Darba svētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190506@kayaposoft.com +DTSTART;VALUE=DATE:20190506 +DTEND;VALUE=DATE:20190507 +SUMMARY:Latvijas Republikas Neatkarības atjaunošanas dienu +DESCRIPTION:Holiday in lieu of 4 May 2019 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190512@kayaposoft.com +DTSTART;VALUE=DATE:20190512 +DTEND;VALUE=DATE:20190513 +SUMMARY:Mātes diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190609@kayaposoft.com +DTSTART;VALUE=DATE:20190609 +DTEND;VALUE=DATE:20190610 +SUMMARY:Vasarsvētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190623@kayaposoft.com +DTSTART;VALUE=DATE:20190623 +DTEND;VALUE=DATE:20190624 +SUMMARY:Līgo dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20190624@kayaposoft.com +DTSTART;VALUE=DATE:20190624 +DTEND;VALUE=DATE:20190625 +SUMMARY:Jāņu dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20191118@kayaposoft.com +DTSTART;VALUE=DATE:20191118 +DTEND;VALUE=DATE:20191119 +SUMMARY:Latvijas Republikas proklamēšanas diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20191224@kayaposoft.com +DTSTART;VALUE=DATE:20191224 +DTEND;VALUE=DATE:20191225 +SUMMARY:Ziemassvētku vakars +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Ziemassvētki +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:2. Ziemassvētki +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20191231@kayaposoft.com +DTSTART;VALUE=DATE:20191231 +DTEND;VALUE=DATE:20200101 +SUMMARY:Vecgada vakars +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Jaungada dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200410@kayaposoft.com +DTSTART;VALUE=DATE:20200410 +DTEND;VALUE=DATE:20200411 +SUMMARY:Lielo Piektdienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:Pirmās Lieldienas +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Otro Lieldienu dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Darba svētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200504@kayaposoft.com +DTSTART;VALUE=DATE:20200504 +DTEND;VALUE=DATE:20200505 +SUMMARY:Latvijas Republikas Neatkarības atjaunošanas dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200510@kayaposoft.com +DTSTART;VALUE=DATE:20200510 +DTEND;VALUE=DATE:20200511 +SUMMARY:Mātes diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200531@kayaposoft.com +DTSTART;VALUE=DATE:20200531 +DTEND;VALUE=DATE:20200601 +SUMMARY:Vasarsvētkus +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200623@kayaposoft.com +DTSTART;VALUE=DATE:20200623 +DTEND;VALUE=DATE:20200624 +SUMMARY:Līgo dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20200624@kayaposoft.com +DTSTART;VALUE=DATE:20200624 +DTEND;VALUE=DATE:20200625 +SUMMARY:Jāņu dienu +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20201118@kayaposoft.com +DTSTART;VALUE=DATE:20201118 +DTEND;VALUE=DATE:20201119 +SUMMARY:Latvijas Republikas proklamēšanas diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20201224@kayaposoft.com +DTSTART;VALUE=DATE:20201224 +DTEND;VALUE=DATE:20201225 +SUMMARY:Ziemassvētku vakars +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Ziemassvētki +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:2. Ziemassvētki +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lva-20201231@kayaposoft.com +DTSTART;VALUE=DATE:20201231 +DTEND;VALUE=DATE:20210101 +SUMMARY:Vecgada vakars +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/lithuania.ics b/app/src/main/assets/lithuania.ics new file mode 100644 index 000000000..7ea76b935 --- /dev/null +++ b/app/src/main/assets/lithuania.ics @@ -0,0 +1,317 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-ltu-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Naujieji metai +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180216@kayaposoft.com +DTSTART;VALUE=DATE:20180216 +DTEND;VALUE=DATE:20180217 +SUMMARY:Lietuvos valstybės atkūrimo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180311@kayaposoft.com +DTSTART;VALUE=DATE:20180311 +DTEND;VALUE=DATE:20180312 +SUMMARY:Lietuvos nepriklausomybės atkūrimo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180401@kayaposoft.com +DTSTART;VALUE=DATE:20180401 +DTEND;VALUE=DATE:20180402 +SUMMARY:Velykos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:Velykos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Tarptautinė darbo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180506@kayaposoft.com +DTSTART;VALUE=DATE:20180506 +DTEND;VALUE=DATE:20180507 +SUMMARY:Motinos diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180603@kayaposoft.com +DTSTART;VALUE=DATE:20180603 +DTEND;VALUE=DATE:20180604 +SUMMARY:Tėvo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180624@kayaposoft.com +DTSTART;VALUE=DATE:20180624 +DTEND;VALUE=DATE:20180625 +SUMMARY:Rasos (Joninės) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180706@kayaposoft.com +DTSTART;VALUE=DATE:20180706 +DTEND;VALUE=DATE:20180707 +SUMMARY:Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20180815@kayaposoft.com +DTSTART;VALUE=DATE:20180815 +DTEND;VALUE=DATE:20180816 +SUMMARY:Žolinė (Švč. Mergelės Marijos ėmimo į dangų diena) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20181101@kayaposoft.com +DTSTART;VALUE=DATE:20181101 +DTEND;VALUE=DATE:20181102 +SUMMARY:Visų šventųjų diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20181224@kayaposoft.com +DTSTART;VALUE=DATE:20181224 +DTEND;VALUE=DATE:20181225 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Naujieji metai +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190216@kayaposoft.com +DTSTART;VALUE=DATE:20190216 +DTEND;VALUE=DATE:20190217 +SUMMARY:Lietuvos valstybės atkūrimo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190311@kayaposoft.com +DTSTART;VALUE=DATE:20190311 +DTEND;VALUE=DATE:20190312 +SUMMARY:Lietuvos nepriklausomybės atkūrimo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:Velykos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Velykos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Tarptautinė darbo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190505@kayaposoft.com +DTSTART;VALUE=DATE:20190505 +DTEND;VALUE=DATE:20190506 +SUMMARY:Motinos diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190602@kayaposoft.com +DTSTART;VALUE=DATE:20190602 +DTEND;VALUE=DATE:20190603 +SUMMARY:Tėvo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190624@kayaposoft.com +DTSTART;VALUE=DATE:20190624 +DTEND;VALUE=DATE:20190625 +SUMMARY:Rasos (Joninės) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190706@kayaposoft.com +DTSTART;VALUE=DATE:20190706 +DTEND;VALUE=DATE:20190707 +SUMMARY:Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20190815@kayaposoft.com +DTSTART;VALUE=DATE:20190815 +DTEND;VALUE=DATE:20190816 +SUMMARY:Žolinė (Švč. Mergelės Marijos ėmimo į dangų diena) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20191101@kayaposoft.com +DTSTART;VALUE=DATE:20191101 +DTEND;VALUE=DATE:20191102 +SUMMARY:Visų šventųjų diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20191224@kayaposoft.com +DTSTART;VALUE=DATE:20191224 +DTEND;VALUE=DATE:20191225 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Naujieji metai +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200216@kayaposoft.com +DTSTART;VALUE=DATE:20200216 +DTEND;VALUE=DATE:20200217 +SUMMARY:Lietuvos valstybės atkūrimo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200311@kayaposoft.com +DTSTART;VALUE=DATE:20200311 +DTEND;VALUE=DATE:20200312 +SUMMARY:Lietuvos nepriklausomybės atkūrimo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:Velykos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Velykos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Tarptautinė darbo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200503@kayaposoft.com +DTSTART;VALUE=DATE:20200503 +DTEND;VALUE=DATE:20200504 +SUMMARY:Motinos diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200607@kayaposoft.com +DTSTART;VALUE=DATE:20200607 +DTEND;VALUE=DATE:20200608 +SUMMARY:Tėvo diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200624@kayaposoft.com +DTSTART;VALUE=DATE:20200624 +DTEND;VALUE=DATE:20200625 +SUMMARY:Rasos (Joninės) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200706@kayaposoft.com +DTSTART;VALUE=DATE:20200706 +DTEND;VALUE=DATE:20200707 +SUMMARY:Valstybės (Lietuvos karaliaus Mindaugo karūnavimo) diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20200815@kayaposoft.com +DTSTART;VALUE=DATE:20200815 +DTEND;VALUE=DATE:20200816 +SUMMARY:Žolinė (Švč. Mergelės Marijos ėmimo į dangų diena) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20201101@kayaposoft.com +DTSTART;VALUE=DATE:20201101 +DTEND;VALUE=DATE:20201102 +SUMMARY:Visų šventųjų diena +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20201224@kayaposoft.com +DTSTART;VALUE=DATE:20201224 +DTEND;VALUE=DATE:20201225 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ltu-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Šv. Kalėdos +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/luxembourg.ics b/app/src/main/assets/luxembourg.ics new file mode 100644 index 000000000..985c6fee7 --- /dev/null +++ b/app/src/main/assets/luxembourg.ics @@ -0,0 +1,212 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-lux-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Neijoerschdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:Ouschterméindeg +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Dag vun der Aarbecht +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20180510@kayaposoft.com +DTSTART;VALUE=DATE:20180510 +DTEND;VALUE=DATE:20180511 +SUMMARY:Christi Himmelfaart +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20180521@kayaposoft.com +DTSTART;VALUE=DATE:20180521 +DTEND;VALUE=DATE:20180522 +SUMMARY:Péngschtméindeg +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20180623@kayaposoft.com +DTSTART;VALUE=DATE:20180623 +DTEND;VALUE=DATE:20180624 +SUMMARY:Nationalfeierdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20180815@kayaposoft.com +DTSTART;VALUE=DATE:20180815 +DTEND;VALUE=DATE:20180816 +SUMMARY:Mariä Himmelfaart +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20181101@kayaposoft.com +DTSTART;VALUE=DATE:20181101 +DTEND;VALUE=DATE:20181102 +SUMMARY:Allerhellgen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Chrëschtdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Stiefesdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Neijoerschdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Ouschterméindeg +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Dag vun der Aarbecht +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190530@kayaposoft.com +DTSTART;VALUE=DATE:20190530 +DTEND;VALUE=DATE:20190531 +SUMMARY:Christi Himmelfaart +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190610@kayaposoft.com +DTSTART;VALUE=DATE:20190610 +DTEND;VALUE=DATE:20190611 +SUMMARY:Péngschtméindeg +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190623@kayaposoft.com +DTSTART;VALUE=DATE:20190623 +DTEND;VALUE=DATE:20190624 +SUMMARY:Nationalfeierdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20190815@kayaposoft.com +DTSTART;VALUE=DATE:20190815 +DTEND;VALUE=DATE:20190816 +SUMMARY:Mariä Himmelfaart +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20191101@kayaposoft.com +DTSTART;VALUE=DATE:20191101 +DTEND;VALUE=DATE:20191102 +SUMMARY:Allerhellgen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Chrëschtdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Stiefesdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Neijoerschdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Ouschterméindeg +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Dag vun der Aarbecht +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200521@kayaposoft.com +DTSTART;VALUE=DATE:20200521 +DTEND;VALUE=DATE:20200522 +SUMMARY:Christi Himmelfaart +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200601@kayaposoft.com +DTSTART;VALUE=DATE:20200601 +DTEND;VALUE=DATE:20200602 +SUMMARY:Péngschtméindeg +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200623@kayaposoft.com +DTSTART;VALUE=DATE:20200623 +DTEND;VALUE=DATE:20200624 +SUMMARY:Nationalfeierdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20200815@kayaposoft.com +DTSTART;VALUE=DATE:20200815 +DTEND;VALUE=DATE:20200816 +SUMMARY:Mariä Himmelfaart +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20201101@kayaposoft.com +DTSTART;VALUE=DATE:20201101 +DTEND;VALUE=DATE:20201102 +SUMMARY:Allerhellgen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Chrëschtdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-lux-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Stiefesdag +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/macedonia.ics b/app/src/main/assets/macedonia.ics new file mode 100644 index 000000000..be8f14122 --- /dev/null +++ b/app/src/main/assets/macedonia.ics @@ -0,0 +1,239 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-mkd-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Нова Година\, Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180108@kayaposoft.com +DTSTART;VALUE=DATE:20180108 +DTEND;VALUE=DATE:20180109 +SUMMARY:Прв ден Божик\, Prv den Božik +DESCRIPTION:Holiday in lieu of 7 Jan 2018 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180409@kayaposoft.com +DTSTART;VALUE=DATE:20180409 +DTEND;VALUE=DATE:20180410 +SUMMARY:Втор ден Велигден\, Vtor den Veligden +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Ден на трудот\, Den na trudot +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180524@kayaposoft.com +DTSTART;VALUE=DATE:20180524 +DTEND;VALUE=DATE:20180525 +SUMMARY:Св. Кирил и Методиј\, Ден на сèсловенските просветители; Sv. Kiril i Metodij\, Den na sèslovenskite prosvetiteli +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180615@kayaposoft.com +DTSTART;VALUE=DATE:20180615 +DTEND;VALUE=DATE:20180616 +SUMMARY:Рамазан Бајрам\, Ramazan Bajram +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180802@kayaposoft.com +DTSTART;VALUE=DATE:20180802 +DTEND;VALUE=DATE:20180803 +SUMMARY:Ден на Републиката\, Den na Republikata +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20180908@kayaposoft.com +DTSTART;VALUE=DATE:20180908 +DTEND;VALUE=DATE:20180909 +SUMMARY:Ден на независноста\, Den na nezavisnosta +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20181011@kayaposoft.com +DTSTART;VALUE=DATE:20181011 +DTEND;VALUE=DATE:20181012 +SUMMARY:Ден на востанието\, Den na vostanieto +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20181023@kayaposoft.com +DTSTART;VALUE=DATE:20181023 +DTEND;VALUE=DATE:20181024 +SUMMARY:Ден на македонската револуционерна борба\, Den na makedonskata revolucionarna borba +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20181208@kayaposoft.com +DTSTART;VALUE=DATE:20181208 +DTEND;VALUE=DATE:20181209 +SUMMARY:Св. Климент Охридски\, Sv. Kliment Ohridski +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Нова Година\, Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190107@kayaposoft.com +DTSTART;VALUE=DATE:20190107 +DTEND;VALUE=DATE:20190108 +SUMMARY:Прв ден Божик\, Prv den Božik +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190429@kayaposoft.com +DTSTART;VALUE=DATE:20190429 +DTEND;VALUE=DATE:20190430 +SUMMARY:Втор ден Велигден\, Vtor den Veligden +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Ден на трудот\, Den na trudot +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190524@kayaposoft.com +DTSTART;VALUE=DATE:20190524 +DTEND;VALUE=DATE:20190525 +SUMMARY:Св. Кирил и Методиј\, Ден на сèсловенските просветители; Sv. Kiril i Metodij\, Den na sèslovenskite prosvetiteli +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190604@kayaposoft.com +DTSTART;VALUE=DATE:20190604 +DTEND;VALUE=DATE:20190605 +SUMMARY:Рамазан Бајрам\, Ramazan Bajram +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190802@kayaposoft.com +DTSTART;VALUE=DATE:20190802 +DTEND;VALUE=DATE:20190803 +SUMMARY:Ден на Републиката\, Den na Republikata +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20190909@kayaposoft.com +DTSTART;VALUE=DATE:20190909 +DTEND;VALUE=DATE:20190910 +SUMMARY:Ден на независноста\, Den na nezavisnosta +DESCRIPTION:Holiday in lieu of 8 Sep 2019 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20191011@kayaposoft.com +DTSTART;VALUE=DATE:20191011 +DTEND;VALUE=DATE:20191012 +SUMMARY:Ден на востанието\, Den na vostanieto +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20191023@kayaposoft.com +DTSTART;VALUE=DATE:20191023 +DTEND;VALUE=DATE:20191024 +SUMMARY:Ден на македонската револуционерна борба\, Den na makedonskata revolucionarna borba +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20191209@kayaposoft.com +DTSTART;VALUE=DATE:20191209 +DTEND;VALUE=DATE:20191210 +SUMMARY:Св. Климент Охридски\, Sv. Kliment Ohridski +DESCRIPTION:Holiday in lieu of 8 Dec 2019 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Нова Година\, Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200107@kayaposoft.com +DTSTART;VALUE=DATE:20200107 +DTEND;VALUE=DATE:20200108 +SUMMARY:Прв ден Божик\, Prv den Božik +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200420@kayaposoft.com +DTSTART;VALUE=DATE:20200420 +DTEND;VALUE=DATE:20200421 +SUMMARY:Втор ден Велигден\, Vtor den Veligden +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Ден на трудот\, Den na trudot +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200524@kayaposoft.com +DTSTART;VALUE=DATE:20200524 +DTEND;VALUE=DATE:20200525 +SUMMARY:Рамазан Бајрам\, Ramazan Bajram +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200525@kayaposoft.com +DTSTART;VALUE=DATE:20200525 +DTEND;VALUE=DATE:20200526 +SUMMARY:Св. Кирил и Методиј\, Ден на сèсловенските просветители; Sv. Kiril i Metodij\, Den na sèslovenskite prosvetiteli +DESCRIPTION:Holiday in lieu of 24 May 2020 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200803@kayaposoft.com +DTSTART;VALUE=DATE:20200803 +DTEND;VALUE=DATE:20200804 +SUMMARY:Ден на Републиката\, Den na Republikata +DESCRIPTION:Holiday in lieu of 2 Aug 2020 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20200908@kayaposoft.com +DTSTART;VALUE=DATE:20200908 +DTEND;VALUE=DATE:20200909 +SUMMARY:Ден на независноста\, Den na nezavisnosta +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20201012@kayaposoft.com +DTSTART;VALUE=DATE:20201012 +DTEND;VALUE=DATE:20201013 +SUMMARY:Ден на востанието\, Den na vostanieto +DESCRIPTION:Holiday in lieu of 11 Oct 2020 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20201023@kayaposoft.com +DTSTART;VALUE=DATE:20201023 +DTEND;VALUE=DATE:20201024 +SUMMARY:Ден на македонската револуционерна борба\, Den na makedonskata revolucionarna borba +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mkd-20201208@kayaposoft.com +DTSTART;VALUE=DATE:20201208 +DTEND;VALUE=DATE:20201209 +SUMMARY:Св. Климент Охридски\, Sv. Kliment Ohridski +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/mexico.ics b/app/src/main/assets/mexico.ics new file mode 100644 index 000000000..e169ec3f8 --- /dev/null +++ b/app/src/main/assets/mexico.ics @@ -0,0 +1,156 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-mex-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Año Nuevo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20180205@kayaposoft.com +DTSTART;VALUE=DATE:20180205 +DTEND;VALUE=DATE:20180206 +SUMMARY:Día de la Constitución Mexicana +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20180319@kayaposoft.com +DTSTART;VALUE=DATE:20180319 +DTEND;VALUE=DATE:20180320 +SUMMARY:Natalicio de Benito Juárez +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Día del Trabajo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20180916@kayaposoft.com +DTSTART;VALUE=DATE:20180916 +DTEND;VALUE=DATE:20180917 +SUMMARY:Día de la Independencia +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20181119@kayaposoft.com +DTSTART;VALUE=DATE:20181119 +DTEND;VALUE=DATE:20181120 +SUMMARY:Revolución Mexicana +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20181201@kayaposoft.com +DTSTART;VALUE=DATE:20181201 +DTEND;VALUE=DATE:20181202 +SUMMARY:Transmisión del Poder Ejecutivo Federal +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Día de Navidad +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Año Nuevo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20190204@kayaposoft.com +DTSTART;VALUE=DATE:20190204 +DTEND;VALUE=DATE:20190205 +SUMMARY:Día de la Constitución Mexicana +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20190318@kayaposoft.com +DTSTART;VALUE=DATE:20190318 +DTEND;VALUE=DATE:20190319 +SUMMARY:Natalicio de Benito Juárez +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Día del Trabajo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20190916@kayaposoft.com +DTSTART;VALUE=DATE:20190916 +DTEND;VALUE=DATE:20190917 +SUMMARY:Día de la Independencia +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20191118@kayaposoft.com +DTSTART;VALUE=DATE:20191118 +DTEND;VALUE=DATE:20191119 +SUMMARY:Revolución Mexicana +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Día de Navidad +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Año Nuevo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20200203@kayaposoft.com +DTSTART;VALUE=DATE:20200203 +DTEND;VALUE=DATE:20200204 +SUMMARY:Día de la Constitución Mexicana +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20200316@kayaposoft.com +DTSTART;VALUE=DATE:20200316 +DTEND;VALUE=DATE:20200317 +SUMMARY:Natalicio de Benito Juárez +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Día del Trabajo +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20200916@kayaposoft.com +DTSTART;VALUE=DATE:20200916 +DTEND;VALUE=DATE:20200917 +SUMMARY:Día de la Independencia +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20201116@kayaposoft.com +DTSTART;VALUE=DATE:20201116 +DTEND;VALUE=DATE:20201117 +SUMMARY:Revolución Mexicana +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-mex-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Día de Navidad +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/netherlands.ics b/app/src/main/assets/netherlands.ics index 05c635afc..cf145463c 100755 --- a/app/src/main/assets/netherlands.ics +++ b/app/src/main/assets/netherlands.ics @@ -1,1717 +1,198 @@ BEGIN:VCALENDAR BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0195-nl@katana -DTSTART;VALUE=DATE:20170525 -DTEND;VALUE=DATE:20170526 +UID:enrico-nld-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Nieuwjaar STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0113-nl@katana -DTSTART;VALUE=DATE:20170604 -DTEND;VALUE=DATE:20170605 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0314-nl@katana -DTSTART;VALUE=DATE:20170605 -DTEND;VALUE=DATE:20170606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0314-nl@katana -DTSTART;VALUE=DATE:20170605 -DTEND;VALUE=DATE:20170606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0032-nl@katana -DTSTART;VALUE=DATE:20180211 -DTEND;VALUE=DATE:20180214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0155-nl@katana -DTSTART;VALUE=DATE:20180330 -DTEND;VALUE=DATE:20180331 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0073-nl@katana +UID:enrico-nld-20180401@kayaposoft.com DTSTART;VALUE=DATE:20180401 DTEND;VALUE=DATE:20180402 +SUMMARY:Eerste Paasdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0274-nl@katana +UID:enrico-nld-20180402@kayaposoft.com DTSTART;VALUE=DATE:20180402 DTEND;VALUE=DATE:20180403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0274-nl@katana -DTSTART;VALUE=DATE:20180402 -DTEND;VALUE=DATE:20180403 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0233-nl@katana +UID:enrico-nld-20180427@kayaposoft.com DTSTART;VALUE=DATE:20180427 DTEND;VALUE=DATE:20180428 +SUMMARY:Koningsdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0196-nl@katana +UID:enrico-nld-20180510@kayaposoft.com DTSTART;VALUE=DATE:20180510 DTEND;VALUE=DATE:20180511 +SUMMARY:Hemelvaartsdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0114-nl@katana +UID:enrico-nld-20180520@kayaposoft.com DTSTART;VALUE=DATE:20180520 DTEND;VALUE=DATE:20180521 +SUMMARY:Eerste Pinksterdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0315-nl@katana +UID:enrico-nld-20180521@kayaposoft.com DTSTART;VALUE=DATE:20180521 DTEND;VALUE=DATE:20180522 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0315-nl@katana -DTSTART;VALUE=DATE:20180521 -DTEND;VALUE=DATE:20180522 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0033-nl@katana -DTSTART;VALUE=DATE:20190303 -DTEND;VALUE=DATE:20190306 +UID:enrico-nld-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Eerste Kerstdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0156-nl@katana -DTSTART;VALUE=DATE:20190419 -DTEND;VALUE=DATE:20190420 +UID:enrico-nld-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Tweede Kerstdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0074-nl@katana +UID:enrico-nld-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Nieuwjaar +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-nld-20190421@kayaposoft.com DTSTART;VALUE=DATE:20190421 DTEND;VALUE=DATE:20190422 +SUMMARY:Eerste Paasdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0275-nl@katana +UID:enrico-nld-20190422@kayaposoft.com DTSTART;VALUE=DATE:20190422 DTEND;VALUE=DATE:20190423 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0275-nl@katana -DTSTART;VALUE=DATE:20190422 -DTEND;VALUE=DATE:20190423 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0234-nl@katana +UID:enrico-nld-20190427@kayaposoft.com DTSTART;VALUE=DATE:20190427 DTEND;VALUE=DATE:20190428 +SUMMARY:Koningsdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0197-nl@katana +UID:enrico-nld-20190530@kayaposoft.com DTSTART;VALUE=DATE:20190530 DTEND;VALUE=DATE:20190531 +SUMMARY:Hemelvaartsdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0115-nl@katana +UID:enrico-nld-20190609@kayaposoft.com DTSTART;VALUE=DATE:20190609 DTEND;VALUE=DATE:20190610 +SUMMARY:Eerste Pinksterdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0316-nl@katana +UID:enrico-nld-20190610@kayaposoft.com DTSTART;VALUE=DATE:20190610 DTEND;VALUE=DATE:20190611 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0316-nl@katana -DTSTART;VALUE=DATE:20190610 -DTEND;VALUE=DATE:20190611 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0034-nl@katana -DTSTART;VALUE=DATE:20200223 -DTEND;VALUE=DATE:20200226 +UID:enrico-nld-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Eerste Kerstdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0157-nl@katana -DTSTART;VALUE=DATE:20200410 -DTEND;VALUE=DATE:20200411 +UID:enrico-nld-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Tweede Kerstdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0075-nl@katana +UID:enrico-nld-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Nieuwjaar +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-nld-20200412@kayaposoft.com DTSTART;VALUE=DATE:20200412 DTEND;VALUE=DATE:20200413 +SUMMARY:Eerste Paasdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0276-nl@katana +UID:enrico-nld-20200413@kayaposoft.com DTSTART;VALUE=DATE:20200413 DTEND;VALUE=DATE:20200414 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0276-nl@katana -DTSTART;VALUE=DATE:20200413 -DTEND;VALUE=DATE:20200414 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0235-nl@katana +UID:enrico-nld-20200427@kayaposoft.com DTSTART;VALUE=DATE:20200427 DTEND;VALUE=DATE:20200428 +SUMMARY:Koningsdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0198-nl@katana +UID:enrico-nld-20200505@kayaposoft.com +DTSTART;VALUE=DATE:20200505 +DTEND;VALUE=DATE:20200506 +SUMMARY:Bevrijdingsdag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-nld-20200521@kayaposoft.com DTSTART;VALUE=DATE:20200521 DTEND;VALUE=DATE:20200522 +SUMMARY:Hemelvaartsdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0116-nl@katana +UID:enrico-nld-20200531@kayaposoft.com DTSTART;VALUE=DATE:20200531 DTEND;VALUE=DATE:20200601 +SUMMARY:Eerste Pinksterdag STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0317-nl@katana +UID:enrico-nld-20200601@kayaposoft.com DTSTART;VALUE=DATE:20200601 DTEND;VALUE=DATE:20200602 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0317-nl@katana -DTSTART;VALUE=DATE:20200601 -DTEND;VALUE=DATE:20200602 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0035-nl@katana -DTSTART;VALUE=DATE:20210214 -DTEND;VALUE=DATE:20210217 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0158-nl@katana -DTSTART;VALUE=DATE:20210402 -DTEND;VALUE=DATE:20210403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0076-nl@katana -DTSTART;VALUE=DATE:20210404 -DTEND;VALUE=DATE:20210405 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0277-nl@katana -DTSTART;VALUE=DATE:20210405 -DTEND;VALUE=DATE:20210406 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0277-nl@katana -DTSTART;VALUE=DATE:20210405 -DTEND;VALUE=DATE:20210406 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0236-nl@katana -DTSTART;VALUE=DATE:20210427 -DTEND;VALUE=DATE:20210428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0199-nl@katana -DTSTART;VALUE=DATE:20210513 -DTEND;VALUE=DATE:20210514 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0117-nl@katana -DTSTART;VALUE=DATE:20210523 -DTEND;VALUE=DATE:20210524 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0318-nl@katana -DTSTART;VALUE=DATE:20210524 -DTEND;VALUE=DATE:20210525 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0318-nl@katana -DTSTART;VALUE=DATE:20210524 -DTEND;VALUE=DATE:20210525 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0036-nl@katana -DTSTART;VALUE=DATE:20220227 -DTEND;VALUE=DATE:20220302 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0077-nl@katana -DTSTART;VALUE=DATE:20220417 -DTEND;VALUE=DATE:20220418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0278-nl@katana -DTSTART;VALUE=DATE:20220418 -DTEND;VALUE=DATE:20220419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0278-nl@katana -DTSTART;VALUE=DATE:20220418 -DTEND;VALUE=DATE:20220419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0237-nl@katana -DTSTART;VALUE=DATE:20220427 -DTEND;VALUE=DATE:20220428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0237-nl@katana -DTSTART;VALUE=DATE:20220427 -DTEND;VALUE=DATE:20220428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0200-nl@katana -DTSTART;VALUE=DATE:20220526 -DTEND;VALUE=DATE:20220527 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0118-nl@katana -DTSTART;VALUE=DATE:20220605 -DTEND;VALUE=DATE:20220606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0319-nl@katana -DTSTART;VALUE=DATE:20220606 -DTEND;VALUE=DATE:20220607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0319-nl@katana -DTSTART;VALUE=DATE:20220606 -DTEND;VALUE=DATE:20220607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0037-nl@katana -DTSTART;VALUE=DATE:20230219 -DTEND;VALUE=DATE:20230222 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0078-nl@katana -DTSTART;VALUE=DATE:20230409 -DTEND;VALUE=DATE:20230410 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0160-nl@katana -DTSTART;VALUE=DATE:20230409 -DTEND;VALUE=DATE:20230410 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0279-nl@katana -DTSTART;VALUE=DATE:20230410 -DTEND;VALUE=DATE:20230411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0279-nl@katana -DTSTART;VALUE=DATE:20230410 -DTEND;VALUE=DATE:20230411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0238-nl@katana -DTSTART;VALUE=DATE:20230427 -DTEND;VALUE=DATE:20230428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0238-nl@katana -DTSTART;VALUE=DATE:20230427 -DTEND;VALUE=DATE:20230428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0201-nl@katana -DTSTART;VALUE=DATE:20230518 -DTEND;VALUE=DATE:20230519 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0119-nl@katana -DTSTART;VALUE=DATE:20230528 -DTEND;VALUE=DATE:20230529 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0320-nl@katana -DTSTART;VALUE=DATE:20230529 -DTEND;VALUE=DATE:20230530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0320-nl@katana -DTSTART;VALUE=DATE:20230529 -DTEND;VALUE=DATE:20230530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0038-nl@katana -DTSTART;VALUE=DATE:20240211 -DTEND;VALUE=DATE:20240214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0280-nl@katana -DTSTART;VALUE=DATE:20240401 -DTEND;VALUE=DATE:20240402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0280-nl@katana -DTSTART;VALUE=DATE:20240401 -DTEND;VALUE=DATE:20240402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0239-nl@katana -DTSTART;VALUE=DATE:20240427 -DTEND;VALUE=DATE:20240428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0239-nl@katana -DTSTART;VALUE=DATE:20240427 -DTEND;VALUE=DATE:20240428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0202-nl@katana -DTSTART;VALUE=DATE:20240509 -DTEND;VALUE=DATE:20240510 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0120-nl@katana -DTSTART;VALUE=DATE:20240519 -DTEND;VALUE=DATE:20240520 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0321-nl@katana -DTSTART;VALUE=DATE:20240520 -DTEND;VALUE=DATE:20240521 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0321-nl@katana -DTSTART;VALUE=DATE:20240520 -DTEND;VALUE=DATE:20240521 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0039-nl@katana -DTSTART;VALUE=DATE:20250302 -DTEND;VALUE=DATE:20250305 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0080-nl@katana -DTSTART;VALUE=DATE:20250420 -DTEND;VALUE=DATE:20250421 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0162-nl@katana -DTSTART;VALUE=DATE:20250420 -DTEND;VALUE=DATE:20250421 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0281-nl@katana -DTSTART;VALUE=DATE:20250421 -DTEND;VALUE=DATE:20250422 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0281-nl@katana -DTSTART;VALUE=DATE:20250421 -DTEND;VALUE=DATE:20250422 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0240-nl@katana -DTSTART;VALUE=DATE:20250426 -DTEND;VALUE=DATE:20250427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0240-nl@katana -DTSTART;VALUE=DATE:20250426 -DTEND;VALUE=DATE:20250427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0203-nl@katana -DTSTART;VALUE=DATE:20250529 -DTEND;VALUE=DATE:20250530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0121-nl@katana -DTSTART;VALUE=DATE:20250608 -DTEND;VALUE=DATE:20250609 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0322-nl@katana -DTSTART;VALUE=DATE:20250609 -DTEND;VALUE=DATE:20250610 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0322-nl@katana -DTSTART;VALUE=DATE:20250609 -DTEND;VALUE=DATE:20250610 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0040-nl@katana -DTSTART;VALUE=DATE:20260215 -DTEND;VALUE=DATE:20260218 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0081-nl@katana -DTSTART;VALUE=DATE:20260405 -DTEND;VALUE=DATE:20260406 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0282-nl@katana -DTSTART;VALUE=DATE:20260406 -DTEND;VALUE=DATE:20260407 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0282-nl@katana -DTSTART;VALUE=DATE:20260406 -DTEND;VALUE=DATE:20260407 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0163-nl@katana -DTSTART;VALUE=DATE:20260412 -DTEND;VALUE=DATE:20260413 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0241-nl@katana -DTSTART;VALUE=DATE:20260427 -DTEND;VALUE=DATE:20260428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0241-nl@katana -DTSTART;VALUE=DATE:20260427 -DTEND;VALUE=DATE:20260428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0204-nl@katana -DTSTART;VALUE=DATE:20260514 -DTEND;VALUE=DATE:20260515 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0122-nl@katana -DTSTART;VALUE=DATE:20260524 -DTEND;VALUE=DATE:20260525 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0323-nl@katana -DTSTART;VALUE=DATE:20260525 -DTEND;VALUE=DATE:20260526 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0323-nl@katana -DTSTART;VALUE=DATE:20260525 -DTEND;VALUE=DATE:20260526 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0041-nl@katana -DTSTART;VALUE=DATE:20270207 -DTEND;VALUE=DATE:20270210 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0283-nl@katana -DTSTART;VALUE=DATE:20270329 -DTEND;VALUE=DATE:20270330 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0283-nl@katana -DTSTART;VALUE=DATE:20270329 -DTEND;VALUE=DATE:20270330 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0242-nl@katana -DTSTART;VALUE=DATE:20270427 -DTEND;VALUE=DATE:20270428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0242-nl@katana -DTSTART;VALUE=DATE:20270427 -DTEND;VALUE=DATE:20270428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0205-nl@katana -DTSTART;VALUE=DATE:20270506 -DTEND;VALUE=DATE:20270507 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0123-nl@katana -DTSTART;VALUE=DATE:20270516 -DTEND;VALUE=DATE:20270517 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0324-nl@katana -DTSTART;VALUE=DATE:20270517 -DTEND;VALUE=DATE:20270518 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0324-nl@katana -DTSTART;VALUE=DATE:20270517 -DTEND;VALUE=DATE:20270518 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0042-nl@katana -DTSTART;VALUE=DATE:20280227 -DTEND;VALUE=DATE:20280301 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0083-nl@katana -DTSTART;VALUE=DATE:20280416 -DTEND;VALUE=DATE:20280417 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0165-nl@katana -DTSTART;VALUE=DATE:20280416 -DTEND;VALUE=DATE:20280417 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0284-nl@katana -DTSTART;VALUE=DATE:20280417 -DTEND;VALUE=DATE:20280418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0284-nl@katana -DTSTART;VALUE=DATE:20280417 -DTEND;VALUE=DATE:20280418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0243-nl@katana -DTSTART;VALUE=DATE:20280427 -DTEND;VALUE=DATE:20280428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0243-nl@katana -DTSTART;VALUE=DATE:20280427 -DTEND;VALUE=DATE:20280428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0206-nl@katana -DTSTART;VALUE=DATE:20280525 -DTEND;VALUE=DATE:20280526 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0124-nl@katana -DTSTART;VALUE=DATE:20280604 -DTEND;VALUE=DATE:20280605 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0325-nl@katana -DTSTART;VALUE=DATE:20280605 -DTEND;VALUE=DATE:20280606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0325-nl@katana -DTSTART;VALUE=DATE:20280605 -DTEND;VALUE=DATE:20280606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0043-nl@katana -DTSTART;VALUE=DATE:20290211 -DTEND;VALUE=DATE:20290214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0084-nl@katana -DTSTART;VALUE=DATE:20290401 -DTEND;VALUE=DATE:20290402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0285-nl@katana -DTSTART;VALUE=DATE:20290402 -DTEND;VALUE=DATE:20290403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0285-nl@katana -DTSTART;VALUE=DATE:20290402 -DTEND;VALUE=DATE:20290403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0166-nl@katana -DTSTART;VALUE=DATE:20290408 -DTEND;VALUE=DATE:20290409 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0244-nl@katana -DTSTART;VALUE=DATE:20290427 -DTEND;VALUE=DATE:20290428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0244-nl@katana -DTSTART;VALUE=DATE:20290427 -DTEND;VALUE=DATE:20290428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0207-nl@katana -DTSTART;VALUE=DATE:20290510 -DTEND;VALUE=DATE:20290511 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0125-nl@katana -DTSTART;VALUE=DATE:20290520 -DTEND;VALUE=DATE:20290521 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0326-nl@katana -DTSTART;VALUE=DATE:20290521 -DTEND;VALUE=DATE:20290522 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0326-nl@katana -DTSTART;VALUE=DATE:20290521 -DTEND;VALUE=DATE:20290522 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0044-nl@katana -DTSTART;VALUE=DATE:20300303 -DTEND;VALUE=DATE:20300306 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0167-nl@katana -DTSTART;VALUE=DATE:20300324 -DTEND;VALUE=DATE:20300325 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0085-nl@katana -DTSTART;VALUE=DATE:20300421 -DTEND;VALUE=DATE:20300422 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0286-nl@katana -DTSTART;VALUE=DATE:20300422 -DTEND;VALUE=DATE:20300423 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0286-nl@katana -DTSTART;VALUE=DATE:20300422 -DTEND;VALUE=DATE:20300423 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0245-nl@katana -DTSTART;VALUE=DATE:20300427 -DTEND;VALUE=DATE:20300428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0245-nl@katana -DTSTART;VALUE=DATE:20300427 -DTEND;VALUE=DATE:20300428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0208-nl@katana -DTSTART;VALUE=DATE:20300530 -DTEND;VALUE=DATE:20300531 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0126-nl@katana -DTSTART;VALUE=DATE:20300609 -DTEND;VALUE=DATE:20300610 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0327-nl@katana -DTSTART;VALUE=DATE:20300610 -DTEND;VALUE=DATE:20300611 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0327-nl@katana -DTSTART;VALUE=DATE:20300610 -DTEND;VALUE=DATE:20300611 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0045-nl@katana -DTSTART;VALUE=DATE:20310223 -DTEND;VALUE=DATE:20310226 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0086-nl@katana -DTSTART;VALUE=DATE:20310413 -DTEND;VALUE=DATE:20310414 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0168-nl@katana -DTSTART;VALUE=DATE:20310413 -DTEND;VALUE=DATE:20310414 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0287-nl@katana -DTSTART;VALUE=DATE:20310414 -DTEND;VALUE=DATE:20310415 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0287-nl@katana -DTSTART;VALUE=DATE:20310414 -DTEND;VALUE=DATE:20310415 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0246-nl@katana -DTSTART;VALUE=DATE:20310426 -DTEND;VALUE=DATE:20310427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0246-nl@katana -DTSTART;VALUE=DATE:20310426 -DTEND;VALUE=DATE:20310427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0209-nl@katana -DTSTART;VALUE=DATE:20310522 -DTEND;VALUE=DATE:20310523 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0127-nl@katana -DTSTART;VALUE=DATE:20310601 -DTEND;VALUE=DATE:20310602 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0328-nl@katana -DTSTART;VALUE=DATE:20310602 -DTEND;VALUE=DATE:20310603 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0328-nl@katana -DTSTART;VALUE=DATE:20310602 -DTEND;VALUE=DATE:20310603 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0046-nl@katana -DTSTART;VALUE=DATE:20320208 -DTEND;VALUE=DATE:20320211 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0288-nl@katana -DTSTART;VALUE=DATE:20320329 -DTEND;VALUE=DATE:20320330 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0288-nl@katana -DTSTART;VALUE=DATE:20320329 -DTEND;VALUE=DATE:20320330 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0169-nl@katana -DTSTART;VALUE=DATE:20320404 -DTEND;VALUE=DATE:20320405 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0247-nl@katana -DTSTART;VALUE=DATE:20320427 -DTEND;VALUE=DATE:20320428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0247-nl@katana -DTSTART;VALUE=DATE:20320427 -DTEND;VALUE=DATE:20320428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0210-nl@katana -DTSTART;VALUE=DATE:20320506 -DTEND;VALUE=DATE:20320507 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0128-nl@katana -DTSTART;VALUE=DATE:20320516 -DTEND;VALUE=DATE:20320517 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0329-nl@katana -DTSTART;VALUE=DATE:20320517 -DTEND;VALUE=DATE:20320518 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0329-nl@katana -DTSTART;VALUE=DATE:20320517 -DTEND;VALUE=DATE:20320518 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0047-nl@katana -DTSTART;VALUE=DATE:20330227 -DTEND;VALUE=DATE:20330302 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0088-nl@katana -DTSTART;VALUE=DATE:20330417 -DTEND;VALUE=DATE:20330418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0170-nl@katana -DTSTART;VALUE=DATE:20330417 -DTEND;VALUE=DATE:20330418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0289-nl@katana -DTSTART;VALUE=DATE:20330418 -DTEND;VALUE=DATE:20330419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0289-nl@katana -DTSTART;VALUE=DATE:20330418 -DTEND;VALUE=DATE:20330419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0248-nl@katana -DTSTART;VALUE=DATE:20330427 -DTEND;VALUE=DATE:20330428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0248-nl@katana -DTSTART;VALUE=DATE:20330427 -DTEND;VALUE=DATE:20330428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0211-nl@katana -DTSTART;VALUE=DATE:20330526 -DTEND;VALUE=DATE:20330527 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0129-nl@katana -DTSTART;VALUE=DATE:20330605 -DTEND;VALUE=DATE:20330606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0330-nl@katana -DTSTART;VALUE=DATE:20330606 -DTEND;VALUE=DATE:20330607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0330-nl@katana -DTSTART;VALUE=DATE:20330606 -DTEND;VALUE=DATE:20330607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0048-nl@katana -DTSTART;VALUE=DATE:20340219 -DTEND;VALUE=DATE:20340222 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0089-nl@katana -DTSTART;VALUE=DATE:20340409 -DTEND;VALUE=DATE:20340410 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0171-nl@katana -DTSTART;VALUE=DATE:20340409 -DTEND;VALUE=DATE:20340410 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0290-nl@katana -DTSTART;VALUE=DATE:20340410 -DTEND;VALUE=DATE:20340411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0290-nl@katana -DTSTART;VALUE=DATE:20340410 -DTEND;VALUE=DATE:20340411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0249-nl@katana -DTSTART;VALUE=DATE:20340427 -DTEND;VALUE=DATE:20340428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0249-nl@katana -DTSTART;VALUE=DATE:20340427 -DTEND;VALUE=DATE:20340428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0212-nl@katana -DTSTART;VALUE=DATE:20340518 -DTEND;VALUE=DATE:20340519 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0130-nl@katana -DTSTART;VALUE=DATE:20340528 -DTEND;VALUE=DATE:20340529 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0331-nl@katana -DTSTART;VALUE=DATE:20340529 -DTEND;VALUE=DATE:20340530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0331-nl@katana -DTSTART;VALUE=DATE:20340529 -DTEND;VALUE=DATE:20340530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0049-nl@katana -DTSTART;VALUE=DATE:20350204 -DTEND;VALUE=DATE:20350207 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0291-nl@katana -DTSTART;VALUE=DATE:20350326 -DTEND;VALUE=DATE:20350327 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0291-nl@katana -DTSTART;VALUE=DATE:20350326 -DTEND;VALUE=DATE:20350327 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0172-nl@katana -DTSTART;VALUE=DATE:20350401 -DTEND;VALUE=DATE:20350402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0250-nl@katana -DTSTART;VALUE=DATE:20350427 -DTEND;VALUE=DATE:20350428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0250-nl@katana -DTSTART;VALUE=DATE:20350427 -DTEND;VALUE=DATE:20350428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0213-nl@katana -DTSTART;VALUE=DATE:20350503 -DTEND;VALUE=DATE:20350504 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0131-nl@katana -DTSTART;VALUE=DATE:20350513 -DTEND;VALUE=DATE:20350514 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0332-nl@katana -DTSTART;VALUE=DATE:20350514 -DTEND;VALUE=DATE:20350515 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0332-nl@katana -DTSTART;VALUE=DATE:20350514 -DTEND;VALUE=DATE:20350515 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0050-nl@katana -DTSTART;VALUE=DATE:20360224 -DTEND;VALUE=DATE:20360227 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0091-nl@katana -DTSTART;VALUE=DATE:20360413 -DTEND;VALUE=DATE:20360414 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0292-nl@katana -DTSTART;VALUE=DATE:20360414 -DTEND;VALUE=DATE:20360415 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0292-nl@katana -DTSTART;VALUE=DATE:20360414 -DTEND;VALUE=DATE:20360415 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0173-nl@katana -DTSTART;VALUE=DATE:20360420 -DTEND;VALUE=DATE:20360421 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0251-nl@katana -DTSTART;VALUE=DATE:20360426 -DTEND;VALUE=DATE:20360427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0251-nl@katana -DTSTART;VALUE=DATE:20360426 -DTEND;VALUE=DATE:20360427 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0214-nl@katana -DTSTART;VALUE=DATE:20360522 -DTEND;VALUE=DATE:20360523 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0132-nl@katana -DTSTART;VALUE=DATE:20360601 -DTEND;VALUE=DATE:20360602 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0333-nl@katana -DTSTART;VALUE=DATE:20360602 -DTEND;VALUE=DATE:20360603 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0333-nl@katana -DTSTART;VALUE=DATE:20360602 -DTEND;VALUE=DATE:20360603 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Carnaval -UID:20161002T100016Z-26501-0051-nl@katana -DTSTART;VALUE=DATE:20370215 -DTEND;VALUE=DATE:20370218 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Paasdag -UID:20161002T100016Z-26501-0092-nl@katana -DTSTART;VALUE=DATE:20370405 -DTEND;VALUE=DATE:20370406 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede Vrijdag -UID:20161002T100016Z-26501-0174-nl@katana -DTSTART;VALUE=DATE:20370405 -DTEND;VALUE=DATE:20370406 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0293-nl@katana -DTSTART;VALUE=DATE:20370406 -DTEND;VALUE=DATE:20370407 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Paasdag -UID:20161002T100016Z-26501-0293-nl@katana -DTSTART;VALUE=DATE:20370406 -DTEND;VALUE=DATE:20370407 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0252-nl@katana -DTSTART;VALUE=DATE:20370427 -DTEND;VALUE=DATE:20370428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20161002T100016Z-26501-0252-nl@katana -DTSTART;VALUE=DATE:20370427 -DTEND;VALUE=DATE:20370428 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hemelvaartsdag -UID:20161002T100016Z-26501-0215-nl@katana -DTSTART;VALUE=DATE:20370514 -DTEND;VALUE=DATE:20370515 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Eerste Pinksterdag -UID:20161002T100016Z-26501-0133-nl@katana -DTSTART;VALUE=DATE:20370524 -DTEND;VALUE=DATE:20370525 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0334-nl@katana -DTSTART;VALUE=DATE:20370525 -DTEND;VALUE=DATE:20370526 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Tweede Pinksterdag -UID:20161002T100016Z-26501-0334-nl@katana -DTSTART;VALUE=DATE:20370525 -DTEND;VALUE=DATE:20370526 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nieuwjaarsdag -UID:20161002T100016Z-26501-0012-nl@katana -DTSTART;VALUE=DATE:20100101 -DTEND;VALUE=DATE:20100102 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Driekoningen -UID:20161002T100016Z-26501-0005-nl@katana -DTSTART;VALUE=DATE:20100106 -DTEND;VALUE=DATE:20100107 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Valentijnsdag -UID:20161002T100016Z-26501-0020-nl@katana -DTSTART;VALUE=DATE:20100214 -DTEND;VALUE=DATE:20100215 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Secretaressedag -UID:20161002T100016Z-26501-0016-nl@katana -DTSTART;VALUE=DATE:20100415 -DTEND;VALUE=DATE:20100416 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Dag van de Arbeid -UID:20161002T100016Z-26501-0002-nl@katana -DTSTART;VALUE=DATE:20100501 -DTEND;VALUE=DATE:20100502 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Dodenherdenking -UID:20161002T100016Z-26501-0004-nl@katana -DTSTART;VALUE=DATE:20100504 -DTEND;VALUE=DATE:20100505 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bevrijdingsdag -UID:20161002T100016Z-26501-0001-nl@katana -DTSTART;VALUE=DATE:20100505 -DTEND;VALUE=DATE:20100506 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Moederdag -UID:20161002T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20100509 -DTEND;VALUE=DATE:20100510 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Vaderdag -UID:20161002T100016Z-26501-0019-nl@katana -DTSTART;VALUE=DATE:20100620 -DTEND;VALUE=DATE:20100621 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Veteranendag -UID:20161002T100016Z-26501-0021-nl@katana -DTSTART;VALUE=DATE:20100626 -DTEND;VALUE=DATE:20100627 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Gronings Ontzet -UID:20161002T100016Z-26501-0007-nl@katana -DTSTART;VALUE=DATE:20100828 -DTEND;VALUE=DATE:20100829 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Prinsjesdag -UID:20161002T100016Z-26501-0015-nl@katana -DTSTART;VALUE=DATE:20100921 -DTEND;VALUE=DATE:20100922 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Leids Ontzet -UID:20161002T100016Z-26501-0009-nl@katana -DTSTART;VALUE=DATE:20101003 -DTEND;VALUE=DATE:20101004 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Dierendag -UID:20161002T100016Z-26501-0003-nl@katana -DTSTART;VALUE=DATE:20101004 -DTEND;VALUE=DATE:20101005 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Wintertijd - uur achteruit -UID:20161002T100016Z-26501-0022-nl@katana -DTSTART;VALUE=DATE:20101031 -DTEND;VALUE=DATE:20101101 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sint-Maarten -UID:20161002T100016Z-26501-0017-nl@katana -DTSTART;VALUE=DATE:20101111 -DTEND;VALUE=DATE:20101112 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Naturalisatiedag -UID:20161002T100016Z-26501-0011-nl@katana -DTSTART;VALUE=DATE:20101115 -DTEND;VALUE=DATE:20101116 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pakjesavond -UID:20161002T100016Z-26501-0014-nl@katana -DTSTART;VALUE=DATE:20101205 -DTEND;VALUE=DATE:20101206 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT +UID:enrico-nld-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 SUMMARY:Eerste Kerstdag -UID:20161002T100016Z-26501-0006-nl@katana -DTSTART;VALUE=DATE:20101225 -DTEND;VALUE=DATE:20101226 STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT BEGIN:VEVENT +UID:enrico-nld-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 SUMMARY:Tweede Kerstdag -UID:20161002T100016Z-26501-0018-nl@katana -DTSTART;VALUE=DATE:20101226 -DTEND;VALUE=DATE:20101227 STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Oudejaarsavond -UID:20161002T100016Z-26501-0013-nl@katana -DTSTART;VALUE=DATE:20101231 -DTEND;VALUE=DATE:20110101 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Drie koningen -UID:20100106T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20100106 -DTEND;VALUE=DATE:20100107 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Zomertijd -UID:20160526T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20100526 -DTEND;VALUE=DATE:20100527 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Goede vrijdag -UID:20160414T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20100414 -DTEND;VALUE=DATE:20100415 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Koningsdag -UID:20160427T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20100427 -DTEND;VALUE=DATE:20100428 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Dierendag -UID:20161004T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20101004 -DTEND;VALUE=DATE:20101005 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Wintertijd -UID:20161029T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20101029 -DTEND;VALUE=DATE:20101030 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sint Maarten -UID:20161111T100016Z-26501-0010-nl@katana -DTSTART;VALUE=DATE:20101111 -DTEND;VALUE=DATE:20101112 -STATUS:CONFIRMED -RRULE:FREQ=YEARLY;INTERVAL=1 END:VEVENT END:VCALENDAR diff --git a/app/src/main/assets/romania.ics b/app/src/main/assets/romania.ics new file mode 100644 index 000000000..8e47694ce --- /dev/null +++ b/app/src/main/assets/romania.ics @@ -0,0 +1,296 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-rou-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Anul nou +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180102@kayaposoft.com +DTSTART;VALUE=DATE:20180102 +DTEND;VALUE=DATE:20180103 +SUMMARY:Anul nou +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180124@kayaposoft.com +DTSTART;VALUE=DATE:20180124 +DTEND;VALUE=DATE:20180125 +SUMMARY:Unirea Principatelor Române/Mica Unire +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180408@kayaposoft.com +DTSTART;VALUE=DATE:20180408 +DTEND;VALUE=DATE:20180409 +SUMMARY:Paştele +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180409@kayaposoft.com +DTSTART;VALUE=DATE:20180409 +DTEND;VALUE=DATE:20180410 +SUMMARY:Doua zi de Pasti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Ziua muncii +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180527@kayaposoft.com +DTSTART;VALUE=DATE:20180527 +DTEND;VALUE=DATE:20180528 +SUMMARY:Rusaliile +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180528@kayaposoft.com +DTSTART;VALUE=DATE:20180528 +DTEND;VALUE=DATE:20180529 +SUMMARY:Doua zi de Rusaliile +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180601@kayaposoft.com +DTSTART;VALUE=DATE:20180601 +DTEND;VALUE=DATE:20180602 +SUMMARY:Ziua Copilului +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20180815@kayaposoft.com +DTSTART;VALUE=DATE:20180815 +DTEND;VALUE=DATE:20180816 +SUMMARY:Adormirea Maicii Domnului/Sfânta Maria Mare +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20181130@kayaposoft.com +DTSTART;VALUE=DATE:20181130 +DTEND;VALUE=DATE:20181201 +SUMMARY:Sfântul Andrei +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20181201@kayaposoft.com +DTSTART;VALUE=DATE:20181201 +DTEND;VALUE=DATE:20181202 +SUMMARY:Ziua Națională/Marea Unire +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Crăciunul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Crăciunul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Anul nou +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190102@kayaposoft.com +DTSTART;VALUE=DATE:20190102 +DTEND;VALUE=DATE:20190103 +SUMMARY:Anul nou +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190124@kayaposoft.com +DTSTART;VALUE=DATE:20190124 +DTEND;VALUE=DATE:20190125 +SUMMARY:Unirea Principatelor Române/Mica Unire +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190428@kayaposoft.com +DTSTART;VALUE=DATE:20190428 +DTEND;VALUE=DATE:20190429 +SUMMARY:Paştele +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190429@kayaposoft.com +DTSTART;VALUE=DATE:20190429 +DTEND;VALUE=DATE:20190430 +SUMMARY:Doua zi de Pasti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Ziua muncii +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190601@kayaposoft.com +DTSTART;VALUE=DATE:20190601 +DTEND;VALUE=DATE:20190602 +SUMMARY:Ziua Copilului +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190616@kayaposoft.com +DTSTART;VALUE=DATE:20190616 +DTEND;VALUE=DATE:20190617 +SUMMARY:Rusaliile +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190617@kayaposoft.com +DTSTART;VALUE=DATE:20190617 +DTEND;VALUE=DATE:20190618 +SUMMARY:Doua zi de Rusaliile +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20190815@kayaposoft.com +DTSTART;VALUE=DATE:20190815 +DTEND;VALUE=DATE:20190816 +SUMMARY:Adormirea Maicii Domnului/Sfânta Maria Mare +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20191130@kayaposoft.com +DTSTART;VALUE=DATE:20191130 +DTEND;VALUE=DATE:20191201 +SUMMARY:Sfântul Andrei +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20191201@kayaposoft.com +DTSTART;VALUE=DATE:20191201 +DTEND;VALUE=DATE:20191202 +SUMMARY:Ziua Națională/Marea Unire +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Crăciunul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Crăciunul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Anul nou +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200102@kayaposoft.com +DTSTART;VALUE=DATE:20200102 +DTEND;VALUE=DATE:20200103 +SUMMARY:Anul nou +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200124@kayaposoft.com +DTSTART;VALUE=DATE:20200124 +DTEND;VALUE=DATE:20200125 +SUMMARY:Unirea Principatelor Române/Mica Unire +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200419@kayaposoft.com +DTSTART;VALUE=DATE:20200419 +DTEND;VALUE=DATE:20200420 +SUMMARY:Paştele +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200420@kayaposoft.com +DTSTART;VALUE=DATE:20200420 +DTEND;VALUE=DATE:20200421 +SUMMARY:Doua zi de Pasti +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Ziua muncii +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200601@kayaposoft.com +DTSTART;VALUE=DATE:20200601 +DTEND;VALUE=DATE:20200602 +SUMMARY:Ziua Copilului +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200607@kayaposoft.com +DTSTART;VALUE=DATE:20200607 +DTEND;VALUE=DATE:20200608 +SUMMARY:Rusaliile +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200608@kayaposoft.com +DTSTART;VALUE=DATE:20200608 +DTEND;VALUE=DATE:20200609 +SUMMARY:Doua zi de Rusaliile +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20200815@kayaposoft.com +DTSTART;VALUE=DATE:20200815 +DTEND;VALUE=DATE:20200816 +SUMMARY:Adormirea Maicii Domnului/Sfânta Maria Mare +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20201130@kayaposoft.com +DTSTART;VALUE=DATE:20201130 +DTEND;VALUE=DATE:20201201 +SUMMARY:Sfântul Andrei +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20201201@kayaposoft.com +DTSTART;VALUE=DATE:20201201 +DTEND;VALUE=DATE:20201202 +SUMMARY:Ziua Națională/Marea Unire +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Crăciunul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-rou-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Crăciunul +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/serbia.ics b/app/src/main/assets/serbia.ics new file mode 100644 index 000000000..fcc5199b4 --- /dev/null +++ b/app/src/main/assets/serbia.ics @@ -0,0 +1,247 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-srb-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180102@kayaposoft.com +DTSTART;VALUE=DATE:20180102 +DTEND;VALUE=DATE:20180103 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180107@kayaposoft.com +DTSTART;VALUE=DATE:20180107 +DTEND;VALUE=DATE:20180108 +SUMMARY:Božić +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180215@kayaposoft.com +DTSTART;VALUE=DATE:20180215 +DTEND;VALUE=DATE:20180216 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180216@kayaposoft.com +DTSTART;VALUE=DATE:20180216 +DTEND;VALUE=DATE:20180217 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180406@kayaposoft.com +DTSTART;VALUE=DATE:20180406 +DTEND;VALUE=DATE:20180407 +SUMMARY:Veliki petak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180408@kayaposoft.com +DTSTART;VALUE=DATE:20180408 +DTEND;VALUE=DATE:20180409 +SUMMARY:Vaskrs +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180409@kayaposoft.com +DTSTART;VALUE=DATE:20180409 +DTEND;VALUE=DATE:20180410 +SUMMARY:Vaskrsni ponedeljak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20180502@kayaposoft.com +DTSTART;VALUE=DATE:20180502 +DTEND;VALUE=DATE:20180503 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20181111@kayaposoft.com +DTSTART;VALUE=DATE:20181111 +DTEND;VALUE=DATE:20181112 +SUMMARY:Dan primirja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20181112@kayaposoft.com +DTSTART;VALUE=DATE:20181112 +DTEND;VALUE=DATE:20181113 +SUMMARY:Dan primirja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190102@kayaposoft.com +DTSTART;VALUE=DATE:20190102 +DTEND;VALUE=DATE:20190103 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190107@kayaposoft.com +DTSTART;VALUE=DATE:20190107 +DTEND;VALUE=DATE:20190108 +SUMMARY:Božić +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190215@kayaposoft.com +DTSTART;VALUE=DATE:20190215 +DTEND;VALUE=DATE:20190216 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190216@kayaposoft.com +DTSTART;VALUE=DATE:20190216 +DTEND;VALUE=DATE:20190217 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190426@kayaposoft.com +DTSTART;VALUE=DATE:20190426 +DTEND;VALUE=DATE:20190427 +SUMMARY:Veliki petak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190428@kayaposoft.com +DTSTART;VALUE=DATE:20190428 +DTEND;VALUE=DATE:20190429 +SUMMARY:Vaskrs +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190429@kayaposoft.com +DTSTART;VALUE=DATE:20190429 +DTEND;VALUE=DATE:20190430 +SUMMARY:Vaskrsni ponedeljak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20190502@kayaposoft.com +DTSTART;VALUE=DATE:20190502 +DTEND;VALUE=DATE:20190503 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20191111@kayaposoft.com +DTSTART;VALUE=DATE:20191111 +DTEND;VALUE=DATE:20191112 +SUMMARY:Dan primirja +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200102@kayaposoft.com +DTSTART;VALUE=DATE:20200102 +DTEND;VALUE=DATE:20200103 +SUMMARY:Nova Godina +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200107@kayaposoft.com +DTSTART;VALUE=DATE:20200107 +DTEND;VALUE=DATE:20200108 +SUMMARY:Božić +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200215@kayaposoft.com +DTSTART;VALUE=DATE:20200215 +DTEND;VALUE=DATE:20200216 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200216@kayaposoft.com +DTSTART;VALUE=DATE:20200216 +DTEND;VALUE=DATE:20200217 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200217@kayaposoft.com +DTSTART;VALUE=DATE:20200217 +DTEND;VALUE=DATE:20200218 +SUMMARY:Dan državnosti Srbije +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200417@kayaposoft.com +DTSTART;VALUE=DATE:20200417 +DTEND;VALUE=DATE:20200418 +SUMMARY:Veliki petak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200419@kayaposoft.com +DTSTART;VALUE=DATE:20200419 +DTEND;VALUE=DATE:20200420 +SUMMARY:Vaskrs +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200420@kayaposoft.com +DTSTART;VALUE=DATE:20200420 +DTEND;VALUE=DATE:20200421 +SUMMARY:Vaskrsni ponedeljak +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20200502@kayaposoft.com +DTSTART;VALUE=DATE:20200502 +DTEND;VALUE=DATE:20200503 +SUMMARY:Praznik rada +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-srb-20201111@kayaposoft.com +DTSTART;VALUE=DATE:20201111 +DTEND;VALUE=DATE:20201112 +SUMMARY:Dan primirja +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/southafrica.ics b/app/src/main/assets/southafrica.ics new file mode 100644 index 000000000..f63d6c694 --- /dev/null +++ b/app/src/main/assets/southafrica.ics @@ -0,0 +1,275 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-zaf-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:New Year's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180321@kayaposoft.com +DTSTART;VALUE=DATE:20180321 +DTEND;VALUE=DATE:20180322 +SUMMARY:Human Rights Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180330@kayaposoft.com +DTSTART;VALUE=DATE:20180330 +DTEND;VALUE=DATE:20180331 +SUMMARY:Good Friday +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:Family Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180427@kayaposoft.com +DTSTART;VALUE=DATE:20180427 +DTEND;VALUE=DATE:20180428 +SUMMARY:Freedom Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Workers' Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180616@kayaposoft.com +DTSTART;VALUE=DATE:20180616 +DTEND;VALUE=DATE:20180617 +SUMMARY:Youth Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180809@kayaposoft.com +DTSTART;VALUE=DATE:20180809 +DTEND;VALUE=DATE:20180810 +SUMMARY:National Women's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20180924@kayaposoft.com +DTSTART;VALUE=DATE:20180924 +DTEND;VALUE=DATE:20180925 +SUMMARY:Heritage Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20181216@kayaposoft.com +DTSTART;VALUE=DATE:20181216 +DTEND;VALUE=DATE:20181217 +SUMMARY:Day of Reconciliation +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20181217@kayaposoft.com +DTSTART;VALUE=DATE:20181217 +DTEND;VALUE=DATE:20181218 +SUMMARY:Day of Reconciliation +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Christmas Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Day of Goodwill +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:New Year's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190321@kayaposoft.com +DTSTART;VALUE=DATE:20190321 +DTEND;VALUE=DATE:20190322 +SUMMARY:Human Rights Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190419@kayaposoft.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190420 +SUMMARY:Good Friday +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Family Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190427@kayaposoft.com +DTSTART;VALUE=DATE:20190427 +DTEND;VALUE=DATE:20190428 +SUMMARY:Freedom Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Workers' Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190616@kayaposoft.com +DTSTART;VALUE=DATE:20190616 +DTEND;VALUE=DATE:20190617 +SUMMARY:Youth Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190617@kayaposoft.com +DTSTART;VALUE=DATE:20190617 +DTEND;VALUE=DATE:20190618 +SUMMARY:Youth Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190809@kayaposoft.com +DTSTART;VALUE=DATE:20190809 +DTEND;VALUE=DATE:20190810 +SUMMARY:National Women's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20190924@kayaposoft.com +DTSTART;VALUE=DATE:20190924 +DTEND;VALUE=DATE:20190925 +SUMMARY:Heritage Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20191216@kayaposoft.com +DTSTART;VALUE=DATE:20191216 +DTEND;VALUE=DATE:20191217 +SUMMARY:Day of Reconciliation +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Christmas Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Day of Goodwill +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:New Year's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200321@kayaposoft.com +DTSTART;VALUE=DATE:20200321 +DTEND;VALUE=DATE:20200322 +SUMMARY:Human Rights Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200410@kayaposoft.com +DTSTART;VALUE=DATE:20200410 +DTEND;VALUE=DATE:20200411 +SUMMARY:Good Friday +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Family Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200427@kayaposoft.com +DTSTART;VALUE=DATE:20200427 +DTEND;VALUE=DATE:20200428 +SUMMARY:Freedom Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Workers' Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200616@kayaposoft.com +DTSTART;VALUE=DATE:20200616 +DTEND;VALUE=DATE:20200617 +SUMMARY:Youth Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200809@kayaposoft.com +DTSTART;VALUE=DATE:20200809 +DTEND;VALUE=DATE:20200810 +SUMMARY:National Women's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200810@kayaposoft.com +DTSTART;VALUE=DATE:20200810 +DTEND;VALUE=DATE:20200811 +SUMMARY:National Women's Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20200924@kayaposoft.com +DTSTART;VALUE=DATE:20200924 +DTEND;VALUE=DATE:20200925 +SUMMARY:Heritage Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20201216@kayaposoft.com +DTSTART;VALUE=DATE:20201216 +DTEND;VALUE=DATE:20201217 +SUMMARY:Day of Reconciliation +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Christmas Day +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-zaf-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Day of Goodwill +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/sweden.ics b/app/src/main/assets/sweden.ics old mode 100755 new mode 100644 index 9d8c190ca..6ec8f27e4 --- a/app/src/main/assets/sweden.ics +++ b/app/src/main/assets/sweden.ics @@ -1,380 +1,275 @@ -BEGIN:VCALENDAR -BEGIN:VEVENT -SUMMARY:Kristi himmelfärdsdag -UID:uuid1211149223742 -DTSTART;VALUE=DATE:20170525 -DTEND;VALUE=DATE:20170526 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pingstafton -UID:uuid1211149223743 -DTSTART;VALUE=DATE:20170603 -DTEND;VALUE=DATE:20170604 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pingstdagen -UID:uuid1211149223744 -DTSTART;VALUE=DATE:20170604 -DTEND;VALUE=DATE:20170605 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nationaldagen -UID:uuid1211149223745 -DTSTART;VALUE=DATE:20170606 -DTEND;VALUE=DATE:20170607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Midsommarafton -UID:a076d1a7-69bb-4af5-9a60-89a3c533e6bf -DTSTART;VALUE=DATE:20170623 -DTEND;VALUE=DATE:20170624 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Midsommardagen -UID:uuid1211149223746 -DTSTART;VALUE=DATE:20170624 -DTEND;VALUE=DATE:20170625 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Övergång till vintertid -UID:uuid1211149223747 -DTSTART;VALUE=DATE:20171029 -DTEND;VALUE=DATE:20171030 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Alla helgons dag -UID:uuid1211149223748 -DTSTART;VALUE=DATE:20171104 -DTEND;VALUE=DATE:20171105 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Julafton -UID:uuid1211149223749 -DTSTART;VALUE=DATE:20171224 -DTEND;VALUE=DATE:20171225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Juldagen -UID:uuid1211149223750 -DTSTART;VALUE=DATE:20171225 -DTEND;VALUE=DATE:20171226 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Annandag jul -UID:uuid1211149223751 -DTSTART;VALUE=DATE:20171226 -DTEND;VALUE=DATE:20171227 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nyårsafton -UID:uuid1211149223752 -DTSTART;VALUE=DATE:20171231 -DTEND;VALUE=DATE:20180101 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nyårsdagen -UID:uuid1211149223753 -DTSTART;VALUE=DATE:20180101 -DTEND;VALUE=DATE:20180102 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Trettondagsafton -UID:uuid1211149223754 -DTSTART;VALUE=DATE:20180105 -DTEND;VALUE=DATE:20180106 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Trettondag jul -UID:uuid1211149223755 -DTSTART;VALUE=DATE:20180106 -DTEND;VALUE=DATE:20180107 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Skärtorsdag -UID:uuid1211149223757 -DTSTART;VALUE=DATE:20180329 -DTEND;VALUE=DATE:20180330 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Långfredag -UID:uuid1211149223758 -DTSTART;VALUE=DATE:20180330 -DTEND;VALUE=DATE:20180331 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Påskdagen -UID:uuid1211149223759 -DTSTART;VALUE=DATE:20180401 -DTEND;VALUE=DATE:20180402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Annandag påsk -UID:uuid1211149223760 -DTSTART;VALUE=DATE:20180402 -DTEND;VALUE=DATE:20180403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Valborgsmässoafton -UID:uuid1211149223761 -DTSTART;VALUE=DATE:20180430 -DTEND;VALUE=DATE:20180501 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Första maj -UID:uuid1211149223762 -DTSTART;VALUE=DATE:20180501 -DTEND;VALUE=DATE:20180502 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Kristi himmelfärdsdag -UID:uuid1211149223763 -DTSTART;VALUE=DATE:20180510 -DTEND;VALUE=DATE:20180511 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pingstafton -UID:uuid1211149223764 -DTSTART;VALUE=DATE:20180519 -DTEND;VALUE=DATE:20180520 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pingstdagen -UID:uuid1211149223765 -DTSTART;VALUE=DATE:20180520 -DTEND;VALUE=DATE:20180521 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nationaldagen -UID:uuid1211149223766 -DTSTART;VALUE=DATE:20180606 -DTEND;VALUE=DATE:20180607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Midsommarafton -UID:ed74665e-e6b5-4dc8-8788-48eaab5640eb -DTSTART;VALUE=DATE:20180622 -DTEND;VALUE=DATE:20180623 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Midsommardagen -UID:uuid1211149223767 -DTSTART;VALUE=DATE:20180623 -DTEND;VALUE=DATE:20180624 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Övergång till vintertid -UID:uuid1211149223768 -DTSTART;VALUE=DATE:20181028 -DTEND;VALUE=DATE:20181029 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Alla helgons dag -UID:uuid1211149223769 -DTSTART;VALUE=DATE:20181103 -DTEND;VALUE=DATE:20181104 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Julafton -UID:uuid1211149223770 -DTSTART;VALUE=DATE:20181224 -DTEND;VALUE=DATE:20181225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Juldagen -UID:uuid1211149223771 -DTSTART;VALUE=DATE:20181225 -DTEND;VALUE=DATE:20181226 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Annandag jul -UID:uuid1211149223772 -DTSTART;VALUE=DATE:20181226 -DTEND;VALUE=DATE:20181227 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nyårsafton -UID:uuid1211149223773 -DTSTART;VALUE=DATE:20181231 -DTEND;VALUE=DATE:20190101 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nyårsdagen -UID:uuid1211149223774 -DTSTART;VALUE=DATE:20190101 -DTEND;VALUE=DATE:20190102 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Trettondagsafton -UID:uuid1211149223775 -DTSTART;VALUE=DATE:20190105 -DTEND;VALUE=DATE:20190106 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Trettondag jul -UID:uuid1211149223776 -DTSTART;VALUE=DATE:20190106 -DTEND;VALUE=DATE:20190107 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Skärtorsdag -UID:uuid1211149223778 -DTSTART;VALUE=DATE:20190418 -DTEND;VALUE=DATE:20190419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Långfredag -UID:uuid1211149223779 -DTSTART;VALUE=DATE:20190419 -DTEND;VALUE=DATE:20190420 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Påskdagen -UID:uuid1211149223780 -DTSTART;VALUE=DATE:20190421 -DTEND;VALUE=DATE:20190422 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Annandag påsk -UID:uuid1211149223781 -DTSTART;VALUE=DATE:20190422 -DTEND;VALUE=DATE:20190423 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Valborgsmässoafton -UID:uuid1211149223782 -DTSTART;VALUE=DATE:20190430 -DTEND;VALUE=DATE:20190501 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Första maj -UID:uuid1211149223783 -DTSTART;VALUE=DATE:20190501 -DTEND;VALUE=DATE:20190502 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Kristi himmelfärdsdag -UID:uuid1211149223784 -DTSTART;VALUE=DATE:20190530 -DTEND;VALUE=DATE:20190531 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nationaldagen -UID:uuid1211149223785 -DTSTART;VALUE=DATE:20190606 -DTEND;VALUE=DATE:20190607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pingstafton -UID:uuid1211149223786 -DTSTART;VALUE=DATE:20190608 -DTEND;VALUE=DATE:20190609 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pingstdagen -UID:uuid1211149223787 -DTSTART;VALUE=DATE:20190609 -DTEND;VALUE=DATE:20190610 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Midsommarafton -UID:eeea5d95-9cd0-46ff-84a9-e6c575b3fca1 -DTSTART;VALUE=DATE:20190621 -DTEND;VALUE=DATE:20190622 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Midsommardagen -UID:uuid1211149223788 -DTSTART;VALUE=DATE:20190622 -DTEND;VALUE=DATE:20190623 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Övergång till vintertid -UID:uuid1211149223789 -DTSTART;VALUE=DATE:20191027 -DTEND;VALUE=DATE:20191028 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Alla helgons dag -UID:uuid1211149223790 -DTSTART;VALUE=DATE:20191102 -DTEND;VALUE=DATE:20191103 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Julafton -UID:uuid1211149223791 -DTSTART;VALUE=DATE:20191224 -DTEND;VALUE=DATE:20191225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Juldagen -UID:uuid1211149223792 -DTSTART;VALUE=DATE:20191225 -DTEND;VALUE=DATE:20191226 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Annandag jul -UID:uuid1211149223793 -DTSTART;VALUE=DATE:20191226 -DTEND;VALUE=DATE:20191227 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Nyårsafton -UID:uuid1211149223794 -DTSTART;VALUE=DATE:20191231 -DTEND;VALUE=DATE:20200101 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-swe-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Nyårsdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180106@kayaposoft.com +DTSTART;VALUE=DATE:20180106 +DTEND;VALUE=DATE:20180107 +SUMMARY:Trettondagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180330@kayaposoft.com +DTSTART;VALUE=DATE:20180330 +DTEND;VALUE=DATE:20180331 +SUMMARY:Långfredagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180401@kayaposoft.com +DTSTART;VALUE=DATE:20180401 +DTEND;VALUE=DATE:20180402 +SUMMARY:Påskdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180402@kayaposoft.com +DTSTART;VALUE=DATE:20180402 +DTEND;VALUE=DATE:20180403 +SUMMARY:Annandag påsk +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Första maj +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180510@kayaposoft.com +DTSTART;VALUE=DATE:20180510 +DTEND;VALUE=DATE:20180511 +SUMMARY:Kristi himmelfärds dag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180520@kayaposoft.com +DTSTART;VALUE=DATE:20180520 +DTEND;VALUE=DATE:20180521 +SUMMARY:Pingstdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180606@kayaposoft.com +DTSTART;VALUE=DATE:20180606 +DTEND;VALUE=DATE:20180607 +SUMMARY:Sveriges nationaldag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20180623@kayaposoft.com +DTSTART;VALUE=DATE:20180623 +DTEND;VALUE=DATE:20180624 +SUMMARY:Midsommardagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20181103@kayaposoft.com +DTSTART;VALUE=DATE:20181103 +DTEND;VALUE=DATE:20181104 +SUMMARY:Alla helgons dag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Juldagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Annandag jul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Nyårsdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190106@kayaposoft.com +DTSTART;VALUE=DATE:20190106 +DTEND;VALUE=DATE:20190107 +SUMMARY:Trettondagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190419@kayaposoft.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190420 +SUMMARY:Långfredagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190421@kayaposoft.com +DTSTART;VALUE=DATE:20190421 +DTEND;VALUE=DATE:20190422 +SUMMARY:Påskdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Annandag påsk +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Första maj +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190530@kayaposoft.com +DTSTART;VALUE=DATE:20190530 +DTEND;VALUE=DATE:20190531 +SUMMARY:Kristi himmelfärds dag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190606@kayaposoft.com +DTSTART;VALUE=DATE:20190606 +DTEND;VALUE=DATE:20190607 +SUMMARY:Sveriges nationaldag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190609@kayaposoft.com +DTSTART;VALUE=DATE:20190609 +DTEND;VALUE=DATE:20190610 +SUMMARY:Pingstdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20190622@kayaposoft.com +DTSTART;VALUE=DATE:20190622 +DTEND;VALUE=DATE:20190623 +SUMMARY:Midsommardagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20191102@kayaposoft.com +DTSTART;VALUE=DATE:20191102 +DTEND;VALUE=DATE:20191103 +SUMMARY:Alla helgons dag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Juldagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Annandag jul +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Nyårsdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200106@kayaposoft.com +DTSTART;VALUE=DATE:20200106 +DTEND;VALUE=DATE:20200107 +SUMMARY:Trettondagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200410@kayaposoft.com +DTSTART;VALUE=DATE:20200410 +DTEND;VALUE=DATE:20200411 +SUMMARY:Långfredagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200412@kayaposoft.com +DTSTART;VALUE=DATE:20200412 +DTEND;VALUE=DATE:20200413 +SUMMARY:Påskdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Annandag påsk +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Första maj +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200521@kayaposoft.com +DTSTART;VALUE=DATE:20200521 +DTEND;VALUE=DATE:20200522 +SUMMARY:Kristi himmelfärds dag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200531@kayaposoft.com +DTSTART;VALUE=DATE:20200531 +DTEND;VALUE=DATE:20200601 +SUMMARY:Pingstdagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200606@kayaposoft.com +DTSTART;VALUE=DATE:20200606 +DTEND;VALUE=DATE:20200607 +SUMMARY:Sveriges nationaldag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20200620@kayaposoft.com +DTSTART;VALUE=DATE:20200620 +DTEND;VALUE=DATE:20200621 +SUMMARY:Midsommardagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20201031@kayaposoft.com +DTSTART;VALUE=DATE:20201031 +DTEND;VALUE=DATE:20201101 +SUMMARY:Alla helgons dag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Juldagen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-swe-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Annandag jul +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/assets/ukraine.ics b/app/src/main/assets/ukraine.ics new file mode 100644 index 000000000..91bb3601f --- /dev/null +++ b/app/src/main/assets/ukraine.ics @@ -0,0 +1,316 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:enrico-ukr-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 +SUMMARY:Новий Рік +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180108@kayaposoft.com +DTSTART;VALUE=DATE:20180108 +DTEND;VALUE=DATE:20180109 +SUMMARY:Різдво +DESCRIPTION:Holiday in lieu of 7 Jan 2018 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180308@kayaposoft.com +DTSTART;VALUE=DATE:20180308 +DTEND;VALUE=DATE:20180309 +SUMMARY:Міжнародний жіночий день +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180309@kayaposoft.com +DTSTART;VALUE=DATE:20180309 +DTEND;VALUE=DATE:20180310 +SUMMARY:Свято +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180408@kayaposoft.com +DTSTART;VALUE=DATE:20180408 +DTEND;VALUE=DATE:20180409 +SUMMARY:Пасха +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180409@kayaposoft.com +DTSTART;VALUE=DATE:20180409 +DTEND;VALUE=DATE:20180410 +SUMMARY:Пасха +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180430@kayaposoft.com +DTSTART;VALUE=DATE:20180430 +DTEND;VALUE=DATE:20180501 +SUMMARY:Свято +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:День праці (День міжнародної солідарності трудящих) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180509@kayaposoft.com +DTSTART;VALUE=DATE:20180509 +DTEND;VALUE=DATE:20180510 +SUMMARY:День перемоги над нацизмом у Другій світовій війні +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180527@kayaposoft.com +DTSTART;VALUE=DATE:20180527 +DTEND;VALUE=DATE:20180528 +SUMMARY:Трійця +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180528@kayaposoft.com +DTSTART;VALUE=DATE:20180528 +DTEND;VALUE=DATE:20180529 +SUMMARY:Трійця +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180628@kayaposoft.com +DTSTART;VALUE=DATE:20180628 +DTEND;VALUE=DATE:20180629 +SUMMARY:День Конституції +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180629@kayaposoft.com +DTSTART;VALUE=DATE:20180629 +DTEND;VALUE=DATE:20180630 +SUMMARY:Свято +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20180824@kayaposoft.com +DTSTART;VALUE=DATE:20180824 +DTEND;VALUE=DATE:20180825 +SUMMARY:День Незалежності +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20181015@kayaposoft.com +DTSTART;VALUE=DATE:20181015 +DTEND;VALUE=DATE:20181016 +SUMMARY:День захисника України +DESCRIPTION:Holiday in lieu of 14 Oct 2018 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20181224@kayaposoft.com +DTSTART;VALUE=DATE:20181224 +DTEND;VALUE=DATE:20181225 +SUMMARY:Свято +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Різдво +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20181231@kayaposoft.com +DTSTART;VALUE=DATE:20181231 +DTEND;VALUE=DATE:20190101 +SUMMARY:Свято +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Новий Рік +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190107@kayaposoft.com +DTSTART;VALUE=DATE:20190107 +DTEND;VALUE=DATE:20190108 +SUMMARY:Різдво +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190308@kayaposoft.com +DTSTART;VALUE=DATE:20190308 +DTEND;VALUE=DATE:20190309 +SUMMARY:Міжнародний жіночий день +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190428@kayaposoft.com +DTSTART;VALUE=DATE:20190428 +DTEND;VALUE=DATE:20190429 +SUMMARY:Пасха +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190429@kayaposoft.com +DTSTART;VALUE=DATE:20190429 +DTEND;VALUE=DATE:20190430 +SUMMARY:Пасха +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:День праці (День міжнародної солідарності трудящих) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190509@kayaposoft.com +DTSTART;VALUE=DATE:20190509 +DTEND;VALUE=DATE:20190510 +SUMMARY:День перемоги над нацизмом у Другій світовій війні +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190616@kayaposoft.com +DTSTART;VALUE=DATE:20190616 +DTEND;VALUE=DATE:20190617 +SUMMARY:Трійця +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190617@kayaposoft.com +DTSTART;VALUE=DATE:20190617 +DTEND;VALUE=DATE:20190618 +SUMMARY:Трійця +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190628@kayaposoft.com +DTSTART;VALUE=DATE:20190628 +DTEND;VALUE=DATE:20190629 +SUMMARY:День Конституції +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20190826@kayaposoft.com +DTSTART;VALUE=DATE:20190826 +DTEND;VALUE=DATE:20190827 +SUMMARY:День Незалежності +DESCRIPTION:Holiday in lieu of 24 Aug 2019 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20191014@kayaposoft.com +DTSTART;VALUE=DATE:20191014 +DTEND;VALUE=DATE:20191015 +SUMMARY:День захисника України +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Різдво +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Новий Рік +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200107@kayaposoft.com +DTSTART;VALUE=DATE:20200107 +DTEND;VALUE=DATE:20200108 +SUMMARY:Різдво +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200309@kayaposoft.com +DTSTART;VALUE=DATE:20200309 +DTEND;VALUE=DATE:20200310 +SUMMARY:Міжнародний жіночий день +DESCRIPTION:Holiday in lieu of 8 Mar 2020 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200419@kayaposoft.com +DTSTART;VALUE=DATE:20200419 +DTEND;VALUE=DATE:20200420 +SUMMARY:Пасха +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200420@kayaposoft.com +DTSTART;VALUE=DATE:20200420 +DTEND;VALUE=DATE:20200421 +SUMMARY:Пасха +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:День праці (День міжнародної солідарності трудящих) +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200511@kayaposoft.com +DTSTART;VALUE=DATE:20200511 +DTEND;VALUE=DATE:20200512 +SUMMARY:День перемоги над нацизмом у Другій світовій війні +DESCRIPTION:Holiday in lieu of 9 May 2020 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200607@kayaposoft.com +DTSTART;VALUE=DATE:20200607 +DTEND;VALUE=DATE:20200608 +SUMMARY:Трійця +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200608@kayaposoft.com +DTSTART;VALUE=DATE:20200608 +DTEND;VALUE=DATE:20200609 +SUMMARY:Трійця +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200629@kayaposoft.com +DTSTART;VALUE=DATE:20200629 +DTEND;VALUE=DATE:20200630 +SUMMARY:День Конституції +DESCRIPTION:Holiday in lieu of 28 Jun 2020 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20200824@kayaposoft.com +DTSTART;VALUE=DATE:20200824 +DTEND;VALUE=DATE:20200825 +SUMMARY:День Незалежності +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20201014@kayaposoft.com +DTSTART;VALUE=DATE:20201014 +DTEND;VALUE=DATE:20201015 +SUMMARY:День захисника України +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-ukr-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Різдво +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index a67036f25..61cad892e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -742,7 +742,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { put("Bolivia", "bolivia.ics") put("Brasil", "brazil.ics") put("Canada", "canada.ics") + put("China", "china.ics") + put("Colombia", "colombia.ics") put("Česká republika", "czech.ics") + put("Danmark", "denmark.ics") put("Deutschland", "germany.ics") put("Eesti", "estonia.ics") put("España", "spain.ics") @@ -750,10 +753,16 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { put("France", "france.ics") put("Hanguk", "southkorea.ics") put("Hellas", "greece.ics") + put("Hrvatska", "croatia.ics") put("India", "india.ics") put("Ísland", "iceland.ics") put("Italia", "italy.ics") + put("Latvija", "latvia.ics") + put("Lietuva", "lithuania.ics") + put("Luxemburg", "luxembourg.ics") + put("Makedonija", "macedonia.ics") put("Magyarország", "hungary.ics") + put("México", "mexico.ics") put("Nederland", "netherlands.ics") put("日本", "japan.ics") put("Norge", "norway.ics") @@ -762,11 +771,15 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { put("Polska", "poland.ics") put("Portugal", "portugal.ics") put("Россия", "russia.ics") + put("România", "romania.ics") put("Schweiz", "switzerland.ics") + put("Srbija", "serbia.ics") put("Slovenija", "slovenia.ics") put("Slovensko", "slovakia.ics") + put("South Africa", "southafrica.ics") put("Suomi", "finland.ics") put("Sverige", "sweden.ics") + put("Ukraine", "ukraine.ics") put("United Kingdom", "unitedkingdom.ics") put("United States", "unitedstates.ics") From 0ad7e4b5a45b1fef9563adbd6645fd71b8d285cf Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 20:55:34 +0200 Subject: [PATCH 42/99] shorten the austria holidays file --- app/src/main/assets/austria.ics | 1679 +++++-------------------------- 1 file changed, 234 insertions(+), 1445 deletions(-) diff --git a/app/src/main/assets/austria.ics b/app/src/main/assets/austria.ics index 1767fafd6..955258974 100644 --- a/app/src/main/assets/austria.ics +++ b/app/src/main/assets/austria.ics @@ -1,1486 +1,275 @@ BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//bt.dd/NONSGML Kolab OpenERP V0.9//EN -CALSCALE:GREGORIAN -METHOD:PUBLISH -BEGIN:VTIMEZONE -TZID:Europe/Vienna -BEGIN:DAYLIGHT -DTSTART;VALUE=DATE-TIME:19810329T010000Z -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 -TZNAME:CEST -TZOFFSETFROM:+0100 -TZOFFSETTO:+0200 -END:DAYLIGHT -BEGIN:STANDARD -DTSTART;VALUE=DATE-TIME:19810927T010000Z -RRULE:FREQ=YEARLY;COUNT=15;BYDAY=-1SU;BYMONTH=9 -TZNAME:CET -TZOFFSETFROM:+0200 -TZOFFSETTO:+0100 -END:STANDARD -BEGIN:STANDARD -DTSTART;VALUE=DATE-TIME:19961027T010000Z -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZNAME:CET -TZOFFSETFROM:+0200 -TZOFFSETTO:+0100 -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -SUMMARY:(Valentinstag) -DTSTART;VALUE=DATE:20100214 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UYfoE9MVREOzRjoQFnXHSc-DPA-BhfcoC9Vyn82m3hZIf9nsV-Lhn@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=14;BYMONTH=2 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20100404 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Q2V68c3woNyiTJJdgqD5dY-CIA-KWo8DVBsZRitXbfD4Ycxuk-Gb4@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20110424 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:DZNNPrKWumPekczTuKQsN4-CIA-DIg4skLrxzuNDzMxFSBHGE-SKS@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20120408 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HX3awNhibAEYJodVD4eya4-CIA-IY6MX3nTWdRq6nJeonq7xA-HUu@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20130331 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:IjXeIqCePo52D7nXJJTtDO-CIA-IrqHIoxswWaZ5ehU8cKnz9-HnJ@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20140420 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VgZoCTTDSbuuiVXqd3pGVs-CIA-FE47S5KjYemHinMw7UrTL5-JqJ@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20150405 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:IxXExC65L5PrUKiAJzV7Tt-CIA-GSQYtNwVsRoZJ4FgdOMhiB-L7o@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20160327 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TDskhoqM2U4Eq4AwQneDmV-CIA-DfONtuoxM3FKwgFIQCRWgs-55A@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20170416 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:IPi9CSXJFJCDLjKYTzemED-CIA-Gu3V6pFeTRPtHYJmankAhI-G9R@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20180401 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:InjX6FVtMyCZZsnT3YBLBP-CIA-B8asgQVzkSRY2QoJnjqTMT-NmI@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20190421 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BCCN5b64V6f89UVxi7ykVf-CIA-J7xsQC8ah3LhrXRRkcEnBk-QoA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20200412 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QHxQtcgYtyKtQcApdOosp7-CIA-K5WZZsJcqhGkfZ7kB875Xu-MTK@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20210404 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:uh6ehP6bncjhKeVOEjBmsA-CIA-HgEe3ySLkHdrWgs74W4VQY-C8H@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20220417 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Fg3D9LFiYB6LRO9nqzQjei-CIA-DStSH9drIVITLoLL7qrmUg-MRj@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20230409 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QFOekiEOjUGLtfkj2g4TRJ-CIA-IWigVGrNtXGGWesPqeu93c-P5p@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20240331 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VSuVAMB5tpUbXX5RPpNR79-CIA-IwBF9Ic4xb8KAEDn8UudYT-BSP@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -DTSTART;VALUE=DATE:20250420 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:DItomNBJTu54sboZbcUKD6-CIA-CiuDT2XuKiBFt4tLcXTITj-G8V@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20100523 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BuFkkHay2rogouKUFyqhku-CLA-B9gtBpiHsWUOKWhjhprkIn-QEr@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20110612 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UEk69s5e2UxkhXB4UUWcDa-CLA-GUuFchunnJqpM9uwF2Yf2H-JBB@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20120527 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NLXyWu6tmDVaHiBVeKuLe5-CLA-JVqTOmkVNYoVAqCaVW7Ej8-Oo9@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20130519 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MNgzOw4MoEwKhPSVVgUESJ-CLA-BN5aIFdXjGuiudw4PwZdhb-Poe@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20140608 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:L48Z6BZIaoiLf3c2XKH8qp-CLA-E9tETu5fpjp3qHVZWYxVya-Ghc@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20150524 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:D5qrKdPV7DEKuuXQyYstbn-CLA-BBKdzqdXQIsrxfLUdHqZbP-Rys@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20160515 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OtKbGUJhVJOqAtfGJHdVR2-CLA-GbEDoKxaWffGhO3ohhuNUX-QEJ@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20170604 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FAt3wKqxCfkxJEFwzKJgyg-CLA-FQVHUbBUzi9hR2uy8mIOX6-Gxx@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20180520 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Us36pItqRgOjDpzuEEhOUI-CLA-KLtWA2QSDVHqF2kwg7dhtB-PFK@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20190609 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:DwTpVqEPrjF8B66B95B2BB-CLA-Jb2Om4ahgSIdBbop8mFINU-RBK@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20200531 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GpZasQ6xaPyfu465bQWL38-CLA-BhjXR6V5ooiANkVK3aBsLL-CdO@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20210523 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CX7efxwNmpssUmSp9pTDUZ-CLA-HTNXsa6oIG6uEbbQ5ApGtk-EIc@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20220605 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:JDdJcEqCPUIJVOJDfAywyP-CLA-pnJGWbtxjzPtxI24EbuOcA-EOH@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20230528 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:ICQhMXPwWJzwtndqpjhW4h-CLA-CNT6mrhbiFKkrsiLdKMpNh-NL3@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20240519 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UpPUdYV8VUxq43M9nYQJEJ-CLA-CQ9yeqmOVmD9SCs4WfpJGf-BrD@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -DTSTART;VALUE=DATE:20250608 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MUZR5jr9pkiDsp82ZIHPC4-CLA-DhVgoZOreM2IMRyxqFcuBR-M9U@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Muttertag) -DTSTART;VALUE=DATE:20100509 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:PQOaSGAy3Rs6zDQ2jEtb4Q-DJA-F8YjfMIF8wTCbIjJj85C82-JP2@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYDAY=+2SU;BYMONTH=5 -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20101128 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:M6SyL5NuWC99K5XJVrnBVZ-CTA-E2e2T82hzrY6HuDqjwf8HP-I2c@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20111127 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:2amh7yprhiYNDKQYwgnshA-CTA-Ej928NnaQxA4OCmjcWpk56-C6n@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20121202 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:LsKu2AYWhwqfzBuBAwA7ZR-CTA-7JNMdzK5heC7PXgSJQutwA-RoO@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20131201 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MCmNycWnVSmWF3U9GZDqVR-CTA-D9C598j8icELERhkg4y9wI-IbH@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20141130 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:O9IhrNgV8rxViywNGWCAkq-CTA-HL8wVDRAtztttSZIf4F9tC-Sgp@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20151129 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HDsm8ASAVgVGG6wHywQdIB-CTA-G54s9D8FADYxFZjP5kQZJ4-pVA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20161127 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:G9oyVSW76TF7SEAK7S47GA-CTA-IO3Ik4FbEDSGXzqbIzOokf-JyA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20171203 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GtZ6r8QWjXeCGA6LT5hfcC-CTA-Kf8HFQ3Bj8ouG634HGBIjo-Msx@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20181202 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GCc7fX3WWmIKOzc8H3t4K5-CTA-GwpT3M6DWWGQ6YNcNnB2Na-xcA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20191201 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MeooTCFKuAs3KG27wsFZRa-CTA-K7ThVhF9HrRueAhVntAhoW-M9c@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20201129 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TzTNQEk7LKDihkN7ASpBnh-CTA-HEgrfeBe3XfIZNYxPXm6td-Lsw@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20211128 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TiNZnQMbV9WEkFbOVukM2g-CTA-HTaW36BcyMIywVwsWAreBU-LO5@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20221127 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:G7J4DrFajzPcepjxMOBVEQ-CTA-GsIn6TGjBwadbAfcDwcrto-G6A@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20231203 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HanZJ7kXnITA5r9O4233GO-CTA-EEksjauEx8Y8VcGfcY9gxz-R4t@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20241201 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:N6IVru2L5uVJ6kDkz7YJN9-CTA-HBEtY2Gra2zzaVKJuVdgnJ-CcB@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -DTSTART;VALUE=DATE:20251130 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:SPxj5Of4Q83J2Iq7ixndPT-CTA-I8hIYk5VPkP3ARVqBHjnNE-ICR@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20101205 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NwF2ufd9QsBYSHfVE8y9ru-CTA-HtqqMOZsP6pUFHhP3mEf6y-DxX@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20111204 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:S969CAnGKr7eOBrkgSVwtd-CTA-EZIeVgSET4VcjHZxLqzyxo-B5z@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20121209 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Uk53QV2t4BHRBDbmDaKzmY-CTA-FEnyShY4TMTVWXViJecMIo-RqN@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20131208 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:PDzbm5wwj2z9qR8ai6ayGV-CTA-FKPJjmiS3H93HSBV9pDhXm-BFa@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20141207 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MWeBEV3VqsAi39VZtxk8Jg-CTA-BwFMCb3jcOFWLuWAcAYfk3-LZS@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20151206 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:U7btNKVdmzdOA4kI6gRRbe-CTA-DVccfiHQSHmkbSQFTBeyjC-GIS@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20161204 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:PSPmIHTehtOEKc7Os6cqdJ-CTA-CbsRqGqfV3VSgxj6VPWmzB-MtU@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20171210 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VOSsLe6Vgy3WVNujIDNRi9-CTA-Inh9Btxp6JpU2utJHjNFhm-KFP@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20181209 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Pu4BN2D57LAy3CWOJjJ9Xu-CTA-EkgZtyKFQqh3wUXMVwjiop-PoD@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20191208 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OGtyQ8fyH44fYkMwR7yVn8-CTA-GoyFPJJHDzMDHWT5JiwTfJ-OIh@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20201206 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:2hiIQSVL2DEPgYVx5kHLBA-CTA-IqxO64FL4zWXnudVq9NQ9P-JnL@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20211205 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Q6VW85RMVeXyKGYNIwVUGZ-CTA-CAIba4R7w7MGP8yeOBVSpJ-E7t@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20221204 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:RDSmUoBPLhVSoWjc9NIX5C-CTA-Fr36CDGdxKoO5KCiMoDLbH-OND@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20231210 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HD8EsUq9ZDgikF5utoCUWe-CTA-FzINmuUAQ5x4W3RXarhKRI-ExL@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20241208 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:JsSkqhKPOBAjexGHwxHofN-CTA-J7Lytn43HbyV3sgcsUEYyk-NO2@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -DTSTART;VALUE=DATE:20251207 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QsE8GyFBHrCkT7SRJSfgZ8-CTA-Fb3QVyMVKRwpOJYCZjodNB-BR8@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20101212 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:PzxRR6j6D96DogJC9BsYBY-CUA-HDeNY728pGtHpxQ6OjbXyU-C3f@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20111211 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:SdxzmQzVKmeZr5yxazK4sY-CUA-K22d6ueLfsZLKO2rmdx6RM-EWW@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20121216 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:EefXON2AkkDMdTAZBHCSY7-CUA-EfEksCJsh6JDpAYXjM3mXo-MMn@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20131215 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GNSPRKSjVGjFqnVL2AZFi3-CUA-JFntXjDVa3sRGxINVNIdGy-rmA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20141214 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GqwN7W9OUG4qcdoosqHc5e-CUA-BesFjFMrnG9ejGhbN3aVmI-DnD@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20151213 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MsP2qAwY7auwBMkFK8hBdf-CUA-EJrEV7ZC5o5DVSBB4UMyZt-Oxz@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20161211 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:IUsPMmaP2tp6fuG3Uysg7Z-CUA-B44dX6pDsX9F9QYbW7UUxT-DXn@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20171217 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CfJbNOWH5ZyHM22UooAVGi-CUA-FNXOeR5LNVb6PgFeWoakpG-KVR@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20181216 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HGPmOPECIcZG8AFrHn7b3U-CUA-FVoLh5ww9VeH2PXWbM6htj-LOK@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20191215 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:LMxKggzLqPswHhVmti5OBg-CUA-KeobhS4SHn8e9ZOM4Gtn9i-OWf@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20201213 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QKnKdHEM6CGEqFVOSLX5EM-CUA-HsEwYNBIihD9YVsMHk2Ftk-KMM@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20211212 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BJ6wrhTdOVQfUjFwhEhCT8-CUA-JoSDSFoKOd9iGXEAonyPwV-RRr@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20221211 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FIKITtzOVkDkIWOwYeVuZI-CUA-QKQNIxseHZ9ZoXqI2S7A9A-BHL@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20231217 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MIIf54EGtjETcQYtkjU2HS-CUA-FFmHmncdnwfoTni4LGCDuz-LBV@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20241215 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:C4ILYPOXGnObR3TCjSE5u5-CUA-IBciL7puGdE63KN4VUpRwA-CBq@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -DTSTART;VALUE=DATE:20251214 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:SQRkEVZ2YBa45Bx3T6Tpsp-CUA-CzDcfiOeLNB62aVJLJXMwA-D87@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20101219 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QImQdR3ZedcwYyXncbHZQV-CUA-GFcJzsHAI3jjx7cFOhFCzR-Lwm@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20111218 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:ILQziRqjo7nA8q6muuhgIO-CUA-GtEwnTECcdWItLIymubb5D-GpX@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20121223 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UAbLnQsxPuR4dYVwhROzQQ-CUA-FheeC4NFm4oEyo57t6ItNf-Ckk@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20131222 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:EEf3HtwTHsqzm4H7VIiOV7-CUA-Ff6DV4kLgxMNMsCYL9dmNo-BDr@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20141221 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NDsHrC3SadZgYuhXLnKjBc-CUA-JwuCdmiGKUqGoN9xJgIUX6-Nrr@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20151220 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NNRj47gKp4O9HgXfhGsVAK-CUA-KwPPN3J2ho6jL54JQPIiHw-DsU@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20161218 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:ETEuiHwEOsAkjNi93fTpTV-CUA-GzT2YNMpiyxM5COMZUCJcA-Mf4@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20171224 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:PRrb2Hg65QT7phNsUWjq98-CUA-EwsT7kzYtTSbnVcpQpuKBD-Kf9@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20181223 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UVFNZE7Is3esAwjz2hHtSh-CUA-CfbiAeFJkk78CCmZVzpNS3-Sc9@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20191222 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:EGY7sq3ifQcAq4memgJcRY-CUA-E6VhBBsfdtxdQ99AVZ6qcP-PXB@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20201220 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BjKuzFVZG9XBguTG5EEcRO-CUA-JFg4pAJeSaXNi65VqBU7Cg-NVt@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20211219 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:EaZVUfNU3n3sWZ6RVbBaIV-CUA-HDkKXpniDgrOVubne4k6tE-PFZ@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20221218 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:JwkhSoJnfyY46VshB6EVSZ-CUA-HQzOKjYsfYP9bhVDjWSE6U-Os8@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20231224 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:JoVCJYV8jVwHKYnfFhIuAg-CUA-F9N6jBWTHaKRtyKEtDEUQC-G7K@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20241222 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:E8FEBakJGuIjB2ZuyViVzA-CUA-IwPrIVxGq5N2WkaXFAPF7P-QW2@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -DTSTART;VALUE=DATE:20251221 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UseZXNzchqeCgrGyeuBoUK-CUA-E9bprmZuLKANHk73VycMS4-OYN@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Nikolaustag) -DTSTART;VALUE=DATE:20101206 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FDggIfbpXwt5x5DYeRX6tZ-DOA-EADLAMHuH4LUNVBh2NkVkk-BB8@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=6;BYMONTH=12 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Hl. Abend -DTSTART;VALUE=DATE:20101224 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GoTo3S9PjJ7cFI7a3saWTk-DFA-Bc9G5Y4nDo56WSoFPAHiWR-HfX@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=24;BYMONTH=12 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sylvester -DTSTART;VALUE=DATE:20101231 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TgJnNeudMWs2PnVAkJILAu-DFA-KAYZ2wMdIjcM3hZ7aUn2ey-JSZ@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=31;BYMONTH=12 -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20100217 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:KnhpM7aDH5LK2khOn6CbN9-CXA-HmEjmH9xJPAkbktOkRHWKV-Lmg@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20110309 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Tz2uhSDcTUKmSDfkehptOO-CXA-JKqiuUVxcqmdHiV3OqpbnM-CQZ@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20120222 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:DxkqOVkJPsmVCSRh5br6C7-CXA-GjsIaEOOLOdwPxXU7rPoaV-JKy@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20130213 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TnZbQGfDSB3Z7B2aOUt9Y9-CXA-IzSfnLIpWnpp8RPOWqBZHB-LFG@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20140305 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VRHYOHGVWR2UO4Rto7pAW7-CXA-CErxzrOHtVCUSVI5UIAenN-Hun@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20150218 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MxBdtSx9jjVcboaRTUxuai-CXA-CSLVwVakwWpSj69yZBtt2t-QoX@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20160210 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HuVOgBHWBwRKRiOeubiHhu-CXA-EnVfOZGrrPmU8U7ZbuGqsu-Ezd@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20170301 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:F6xWsTX5eS7dRpKiDjWAEZ-CXA-GiJgxsPAbmpFpePtWjTuYY-GLX@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20180214 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VYzdkFGTLVPs4poH2tsRtN-CXA-IMKrWOGzTZVqEiJyGtSCaV-Q67@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20190306 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QpQtzTAAWfHFXaG7tLdMRN-CXA-EpTNfKogt5T8zjsbDTepVM-F69@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20200226 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:KYpmgbQRDsxZI75YVN4wDj-CXA-BaHSpLthz8ErxUrDVd7ojn-DMW@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20210217 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:RkyXBoM3LJO6sfACOrfDnF-CXA-FhjVo94fUjVwPEkdTa7KBX-Oos@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20220302 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:SCUVeOsXWEVgIdbSOhXWYD-CXA-JAHTsT4ANDK83p8CmYGCfD-EDN@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20230222 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GeMeAWdQY72qjWByi478Ag-CXA-BoC8F8iHM554oUXNFVue2V-BiV@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20240214 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HQqgVztVBViQGa2eNXYDja-CXA-JCJwm9PAcejyDVOFAMfVp5-IRR@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -DTSTART;VALUE=DATE:20250305 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Miy7AANQLLC8FxxyhJBuNL-CXA-B88UKY2jncqoWsjTZbLzMQ-FuS@rb.dd -END:VEVENT BEGIN:VEVENT +UID:enrico-aut-20180101@kayaposoft.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180102 SUMMARY:Neujahr -DTSTART;VALUE=DATE:20100101 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OSRXW9SVNKj2pDswRdgbmP-DBA-BTAJGrLadZHZKMsFHagEWu-FRx@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=1;BYMONTH=1 +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Hl. Drei Könige -DTSTART;VALUE=DATE:20100106 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:LKorPA2Ka5fFoC9I6ZW5aW-DKA-EbzpQ5TMUMScJMPtVQNcN7-BLg@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=6;BYMONTH=1 +UID:enrico-aut-20180106@kayaposoft.com +DTSTART;VALUE=DATE:20180106 +DTEND;VALUE=DATE:20180107 +SUMMARY:Heilige Drei Könige +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Staatsfeiertag -DTSTART;VALUE=DATE:20100501 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CYcMobU7GGxVjkzirh7uWQ-DIA-HSBQQSLDUosjSIZZRz6Uuw-IB2@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=1;BYMONTH=5 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20100402 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GbxTpLwMNMS5LFo4iyWNaV-EtA-BV4ZOgIiQbIKLgbAy7GE8s-PhM@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20110422 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OJ6QoG2K4Sdq4ikMMbKDc4-EtA-InjP4WMtHUruqdwOoRjiht-PVO@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20120406 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:cFm3SiSai5RnJJVoO3GKPA-EtA-Fx2FTgDREgRZC4HNiRie8V-BLz@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20130329 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:KWNxIPA33rwZzWxJp9VdP2-EtA-HYSB7BOatH5Uo9J5DHGfrz-GTI@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20140418 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:N6B6EhExBBIpfsaVqMDaNc-EtA-CoY9mYnGwQDFaawrTJRe5A-ETj@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20150403 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:F5XcxSyZYNaWt3mEEyAiIr-EtA-KhYEHgiBnWjFbVjCDJoRYy-NrV@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20160325 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OVLr36HoqWieBCMDttRw3P-EtA-GMT6sVNVMPZt4VjwLMO3PO-L3d@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20170414 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:K9gng8amEqpQFqHnJV8qX4-EtA-IkrVdgUeQ8GE9V4brFUctU-FXT@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20180330 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TQ8hKWFFFyyb4MWubbwLuC-EtA-ofHpnqPdBdHxGQg8txc5MA-LYr@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20190419 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FH42nTHAhN4ZG5K2GF2MaC-EtA-FOTtxda9gkRHX8XSqwzgWQ-Hig@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20200410 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NqYMztNK4dBAJX98Akp7H9-EtA-DR98PLqLoxGEUxIyFreLJ7-KSC@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20210402 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:K4bhtKdkDDTQKdnFLfQQgh-EtA-JzrcSx5VYnf6AInnpjTRWW-JOV@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20220415 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TwWdBxEemV6t5Po46uxde7-EtA-ICZJTpbYtYqSXnyWZ7ExZA-HHD@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20230407 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BoKPorqpBEjL2AFqdVV6PA-EtA-JV5pToVYbnCiMgK46FDQoK-JeA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20240329 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:KR8fYbSVdLhcZDmCMoKVdG-EtA-CpbFmaR7yIDSWmztkPzyAc-OTn@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -DTSTART;VALUE=DATE:20250418 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:DGh4zpZpr9Krae9L2PNnOU-EtA-Ez87XAzOZdgFKNFupbf9US-B5W@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20100405 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NbStSYNZPXaVQCZWsb3Bi3-CNA-CrMTkpMIDPVhTjrfXVHiDD-QWM@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20110425 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:PYuHrwz8M9RIJOeQaLJVDL-CNA-BM8WIyjbwHRg3bPi2La4Sz-J7m@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20120409 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OGzwXEnRXy2CS8YU3tVfxq-CNA-HsNHw9t3IQoe27QXEL7RmA-RpJ@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20130401 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:P69FeaVZiPCQZUEZh3g4bE-CNA-Faa2TTP4ukMmFk3CSCmjci-PZA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20140421 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Gh8WHmW75ZBguyDJzdPPRd-CNA-GCVB6uSw5Zr4ae7BLfJTHb-Iff@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20150406 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BBiOn3Rp2dM35XXNBEOz94-CNA-KzoJa6VgLUPxbrSfrSmcjT-SwU@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20160328 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:V63TxCOYgkEse5Tar6JqkI-CNA-E9LrrtAdtranixoHjgjxsT-jmA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20170417 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MBknpbVKwp9ethKAWjKHzf-CNA-BBwVoFAd4H8tOwLdZQIzeC-Rqt@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag +UID:enrico-aut-20180402@kayaposoft.com DTSTART;VALUE=DATE:20180402 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GRsLk9rVtPdi9OiUsXxoV7-CNA-e92SCLx7IdbFp7iGhCH3VA-Jei@rb.dd -END:VEVENT -BEGIN:VEVENT +DTEND;VALUE=DATE:20180403 SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20190422 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:InA92rhq2JKWHF3ksmLM4p-CNA-CTeLnkQtD7ak5bryPuumog-LnW@rb.dd +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20200413 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OKRJwiUADpmPjfuJfHUzdQ-CNA-rXmRrXF4EbCdiXXTHHVQsA-SHp@rb.dd +UID:enrico-aut-20180501@kayaposoft.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180502 +SUMMARY:Staatsfeiertag +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20210405 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Uc7idNyBCqPfyLOXcjcUVz-CNA-HyReZaqcJuYft3u75b92Lk-Etx@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20220418 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TDWJhBFnrSGSXsO8XXe8je-CNA-3K6faaz6KFMeWPUEwS8EeA-QZD@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20230410 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:JY2ANrCjYsUHoIaUPDsNpH-CNA-FQwIbaHXwgbo77BJqjCTeg-Pqd@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20240401 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:LrRaE852mIIZXiQjCMZ8E2-CNA-C933fDqrqk5HOrJhVqxVf2-M3N@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -DTSTART;VALUE=DATE:20250421 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:RbwA3LkV6VssTq8m3wj9oT-CNA-BcwfbyxnCoWPu48ZgAku5h-2FA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20100513 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Uhw9Aug2ZoafPJ36EhHQfM-CVA-HwmiykchZVtksL5NmdHRXy-LMs@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20110602 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:GNKJmKxSUHpnVsVQkWwgxB-CVA-Bs7J4DpjaENaKd53RFNdPF-B9k@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20120517 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NVNPC5LaIo8tYkfKLEDeOw-CVA-DDWpDJpwJcQaH6VjHrVr88-Fj3@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20130509 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:ICHKIhVDSpTBUqq5GhDawS-CVA-Cdo3TfMDSUzFWtsfYQpVaj-C2J@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20140529 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:G9bezqDpAh9hRXQqcPDwaG-CVA-sY9O8UmpXazx6bfsaIcbFA-PYA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20150514 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CAjrH7mwbm6DrHJJTVjSEA-CVA-GTOBoHCPOY87nTHBUyNpDM-LFX@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20160505 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:G3Mr3ocPDSOaVIL6mgKQ7W-CVA-DQ6DUgggZZ4i2gMNCh3Jmj-DaO@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20170525 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FMPjG7MAuCXPfS8Rcctn6x-CVA-Hf2mOQ44f6VVrEe8T4wkX6-QUf@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt +UID:enrico-aut-20180510@kayaposoft.com DTSTART;VALUE=DATE:20180510 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FRA5PKifPt2qm5YsjaAYDG-CVA-3dCaVpYfmRVWBTBXHDwWZA-FRy@rb.dd -END:VEVENT -BEGIN:VEVENT +DTEND;VALUE=DATE:20180511 SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20190530 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CP38hQTVsjIDOtboBdJQSa-CVA-JSQkJpbwOZf58U7KD9xoKo-IKd@rb.dd +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20200521 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:LYATiipd3fo4LCMomP6kWD-CVA-JzjW4NG7WTH48ZyIbj2Vcq-OKA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20210513 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:NoWP3m86HMuycMpEcxgHeh-CVA-CctxstonyzDuaUwEdNpibs-Q7S@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20220526 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:JPmAMoz6EcuGPeExo9fAPG-CVA-GpAdqPqtHntHFaf8hLqMmc-I9Z@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20230518 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:pkTNu2FAig4wDQSWQow4LA-CVA-E25HtghJpefCwP8zP8aG5Q-SC3@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20240509 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:G8WmKzW4ArDGkoGxJ3NG2w-CVA-FSewqLOs6y7QG6Ie2u2nRO-L88@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Christi Himmelfahrt -DTSTART;VALUE=DATE:20250529 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:UawajMXcpEfsbPkmh2G9Re-CVA-FymW5cjkTTDt5F9XNyQ2mq-NxC@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20100524 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:G7kXn2qSTSr6UpZ7o2WKib-CPA-FPAaG3DEMzRE6X8jNTe2Fg-EQg@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20110613 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:K6JAmLuFf5VH8m6xQspJII-CPA-Jg9pZ7gVdYI4U9jzRI4pYG-PpO@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20120528 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HbXCVNiWtTakMoEHjRBPIE-CPA-WQwrZqYzamx7w2wnkc5uuA-MS4@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20130520 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:SVMV6YRy3RIeXeLRJ6nUmF-CPA-D4JdwJhASAw6rzNJpKLApN-KSf@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20140609 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HAWFTikQYECi2LmkiUZHs7-CPA-JY9u6ewrWmiVgTdgm7ZjDN-M6c@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20150525 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QRUbEe2fXyhHKpRWYno5Bh-CPA-IbR2FxHLMURJcc8PjqPPRS-J77@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20160516 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:K3UMHIRemCQhLeURRJhUoz-CPA-HTZMYBszu7698TkFRkPiq8-DQq@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20170605 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:LNybWPZixYngFe6woc5DeO-CPA-FQp5VKh3J7mQVYIqc8dk9d-QH8@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag +UID:enrico-aut-20180521@kayaposoft.com DTSTART;VALUE=DATE:20180521 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TZywC3cHoxBC43RxeDI6Sb-CPA-GKNheedIBPVIIYSffi8UGr-NwU@rb.dd -END:VEVENT -BEGIN:VEVENT +DTEND;VALUE=DATE:20180522 SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20190610 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MNWPHs8Vmwpg6ALzrV6E2h-CPA-EPdVKrCUPCwOngNUWs7PDk-Lbh@rb.dd +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20200601 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:IERg8kjU5XTnVzHOqHXAzm-CPA-FcBDx4rb5R6y7zO5jVwwnK-M36@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20210524 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MqViMzjsc4s9EwbpLYcGd6-CPA-EyfNqaEMeWKpYiURXToNw5-CxT@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20220606 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FxFhtYSgIyE2bS2moyabUj-CPA-BD97JqaVDjsKgcpiuYrCeJ-LIU@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20230529 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HFfbZdUfMotebyhSo77E82-CPA-IkzXd3SS8NmhwBjZVaQ3nh-H5A@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20240520 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:FQx5IOnAxuqVrwLDM7refO-CPA-Gcrdon94ushFr3TmhMc8WH-Qrd@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -DTSTART;VALUE=DATE:20250609 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:T2mDVDBhR2EMjjcbbOWxV5-CPA-F32nGRTRmkB2VARCDCMOAD-GFf@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20100603 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:BEapfO68qTd8tRG4tc98rJ-COA-GAd3u3Cco5mK3wX7QeCIDO-OIA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20110623 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:IudIhG6hfsRgN9fMW4qjsV-COA-FBhCZHXb4xTTNGCeR9GZRU-Ew3@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20120607 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CKVjPHcC8AztyJptQo9SF9-COA-GXVdnF5q8UnL2ZcOKYwr4R-Cwd@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20130530 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Qyjnk6TibJbIAIgLaFUwCx-COA-Is6JRhofDZOBkf48DLVPVp-HnD@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20140619 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:OV7UVGQ6MewMKrsVVxZXAe-COA-KFFbNYOIzqncm8w8RQeE3R-KHP@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20150604 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VJ3VcukP6bXyHT3yPyV2Mr-COA-C8qXRoPVsc92CYyhgcXUs6-dLA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20160526 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Ej4VtcL4tiNeaLSQnwzyJh-COA-DSyZhUEy85sGBFmK9IJn9F-DIV@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20170615 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:Nz2WQqAqceiRd3sCykYIAf-COA-Ii5bpLZySDrVgcRSF9s2Lj-Kgn@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam +UID:enrico-aut-20180531@kayaposoft.com DTSTART;VALUE=DATE:20180531 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VRRISZiEUdIzcH4ggcVHSd-COA-GaywBieYspGc9Ui59oYSFd-MgG@rb.dd -END:VEVENT -BEGIN:VEVENT +DTEND;VALUE=DATE:20180601 SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20190620 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:EP4MJcVnAVfW4dHV3GgZVh-COA-HALD5umVoxYT5I6dmGayrT-LUM@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20200611 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:VDOZJccpQmaTZo3y2HnEj2-COA-GFNAP5KaWOAZ2LHBybPHJn-OYA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20210603 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:B7ZetFdFybtreXnc69ZzZZ-COA-EfpQ5V3X6ceYt5I6yMSWQ7-aqA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20220616 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:TYmybgWpbCjgCWNenMkgOL-COA-IPUBbaAJO7icxWpIBZaFKd-ncA@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20230608 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:QL2AejgzuUxspUtJDIRK2Z-COA-CEaTAC9QcWNtnYN7rnVC7d-RMn@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20240530 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:RNprGIG8ZzhhOfzi9VhjIT-COA-KUzSccNVf2cVLNSx9O8dVq-H9V@rb.dd -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -DTSTART;VALUE=DATE:20250619 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MVRVwAkbq7YC9tVBxiEnRj-COA-wqTsUxTGD7fpVynqPcmXiA-KTE@rb.dd +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT +UID:enrico-aut-20180815@kayaposoft.com +DTSTART;VALUE=DATE:20180815 +DTEND;VALUE=DATE:20180816 SUMMARY:Mariä Himmelfahrt -DTSTART;VALUE=DATE:20100815 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:MbQLH8OkkfgjXOBJeVUd7B-DtA-GGBwJkHsKDy5ToiXAshDay-KXV@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=15;BYMONTH=8 +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT +UID:enrico-aut-20181026@kayaposoft.com +DTSTART;VALUE=DATE:20181026 +DTEND;VALUE=DATE:20181027 SUMMARY:Nationalfeiertag -DTSTART;VALUE=DATE:20101026 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:HURkGE2RKAUuD6atwnqad2-DMA-JICpFIapSYGtVrh4CYf6Ic-BWs@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=26;BYMONTH=10 +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT +UID:enrico-aut-20181101@kayaposoft.com +DTSTART;VALUE=DATE:20181101 +DTEND;VALUE=DATE:20181102 SUMMARY:Allerheiligen -DTSTART;VALUE=DATE:20101101 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:KKRXXqrBZL5kRrGDjgKy6z-DIA-F4TG6nJGRRPbanOrRF2rfn-EDt@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=1;BYMONTH=11 +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT +UID:enrico-aut-20181208@kayaposoft.com +DTSTART;VALUE=DATE:20181208 +DTEND;VALUE=DATE:20181209 SUMMARY:Mariä Empfängnis -DTSTART;VALUE=DATE:20101208 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:B92t4hRJuYH8RuNT3oCYxK-DNA-CF5VeYWE3Dw3CLDQBVJGGc-Ju2@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=8;BYMONTH=12 +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Christtag -DTSTART;VALUE=DATE:20101225 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:CKCIWWNFYJEBR5hpszYZ9H-DFA-Ic3aEMVWJyV87VdbpEHgmS-JGU@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=25;BYMONTH=12 +UID:enrico-aut-20181225@kayaposoft.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181226 +SUMMARY:Weihnachten +STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Stefanitag -DTSTART;VALUE=DATE:20101226 -DURATION:P1D -DTSTAMP:20151111T111100Z -UID:H4E5xq88HuLp4tnHGqAw5y-DGA-EkNYwVGmVeJ4aRZKhM9eh2-PK6@rb.dd -RRULE:FREQ=YEARLY;COUNT=16;BYMONTHDAY=26;BYMONTH=12 +UID:enrico-aut-20181226@kayaposoft.com +DTSTART;VALUE=DATE:20181226 +DTEND;VALUE=DATE:20181227 +SUMMARY:Stephanstag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190101@kayaposoft.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190102 +SUMMARY:Neujahr +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190106@kayaposoft.com +DTSTART;VALUE=DATE:20190106 +DTEND;VALUE=DATE:20190107 +SUMMARY:Heilige Drei Könige +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190422@kayaposoft.com +DTSTART;VALUE=DATE:20190422 +DTEND;VALUE=DATE:20190423 +SUMMARY:Ostermontag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190501@kayaposoft.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190502 +SUMMARY:Staatsfeiertag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190530@kayaposoft.com +DTSTART;VALUE=DATE:20190530 +DTEND;VALUE=DATE:20190531 +SUMMARY:Christi Himmelfahrt +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190610@kayaposoft.com +DTSTART;VALUE=DATE:20190610 +DTEND;VALUE=DATE:20190611 +SUMMARY:Pfingstmontag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190620@kayaposoft.com +DTSTART;VALUE=DATE:20190620 +DTEND;VALUE=DATE:20190621 +SUMMARY:Fronleichnam +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20190815@kayaposoft.com +DTSTART;VALUE=DATE:20190815 +DTEND;VALUE=DATE:20190816 +SUMMARY:Mariä Himmelfahrt +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20191026@kayaposoft.com +DTSTART;VALUE=DATE:20191026 +DTEND;VALUE=DATE:20191027 +SUMMARY:Nationalfeiertag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20191101@kayaposoft.com +DTSTART;VALUE=DATE:20191101 +DTEND;VALUE=DATE:20191102 +SUMMARY:Allerheiligen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20191208@kayaposoft.com +DTSTART;VALUE=DATE:20191208 +DTEND;VALUE=DATE:20191209 +SUMMARY:Mariä Empfängnis +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20191225@kayaposoft.com +DTSTART;VALUE=DATE:20191225 +DTEND;VALUE=DATE:20191226 +SUMMARY:Weihnachten +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20191226@kayaposoft.com +DTSTART;VALUE=DATE:20191226 +DTEND;VALUE=DATE:20191227 +SUMMARY:Stephanstag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200101@kayaposoft.com +DTSTART;VALUE=DATE:20200101 +DTEND;VALUE=DATE:20200102 +SUMMARY:Neujahr +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200106@kayaposoft.com +DTSTART;VALUE=DATE:20200106 +DTEND;VALUE=DATE:20200107 +SUMMARY:Heilige Drei Könige +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200413@kayaposoft.com +DTSTART;VALUE=DATE:20200413 +DTEND;VALUE=DATE:20200414 +SUMMARY:Ostermontag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200501@kayaposoft.com +DTSTART;VALUE=DATE:20200501 +DTEND;VALUE=DATE:20200502 +SUMMARY:Staatsfeiertag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200521@kayaposoft.com +DTSTART;VALUE=DATE:20200521 +DTEND;VALUE=DATE:20200522 +SUMMARY:Christi Himmelfahrt +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200601@kayaposoft.com +DTSTART;VALUE=DATE:20200601 +DTEND;VALUE=DATE:20200602 +SUMMARY:Pfingstmontag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200611@kayaposoft.com +DTSTART;VALUE=DATE:20200611 +DTEND;VALUE=DATE:20200612 +SUMMARY:Fronleichnam +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20200815@kayaposoft.com +DTSTART;VALUE=DATE:20200815 +DTEND;VALUE=DATE:20200816 +SUMMARY:Mariä Himmelfahrt +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20201026@kayaposoft.com +DTSTART;VALUE=DATE:20201026 +DTEND;VALUE=DATE:20201027 +SUMMARY:Nationalfeiertag +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20201101@kayaposoft.com +DTSTART;VALUE=DATE:20201101 +DTEND;VALUE=DATE:20201102 +SUMMARY:Allerheiligen +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20201208@kayaposoft.com +DTSTART;VALUE=DATE:20201208 +DTEND;VALUE=DATE:20201209 +SUMMARY:Mariä Empfängnis +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20201225@kayaposoft.com +DTSTART;VALUE=DATE:20201225 +DTEND;VALUE=DATE:20201226 +SUMMARY:Weihnachten +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:enrico-aut-20201226@kayaposoft.com +DTSTART;VALUE=DATE:20201226 +DTEND;VALUE=DATE:20201227 +SUMMARY:Stephanstag +STATUS:CONFIRMED END:VEVENT END:VCALENDAR From 8e966f2d6bb04e3b993487d8a5531703c2038d0c Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 21:03:07 +0200 Subject: [PATCH 43/99] shortening Switzerland holidays file --- app/src/main/assets/switzerland.ics | 1568 +++------------------------ 1 file changed, 126 insertions(+), 1442 deletions(-) diff --git a/app/src/main/assets/switzerland.ics b/app/src/main/assets/switzerland.ics index 55a506588..1d8435abe 100755 --- a/app/src/main/assets/switzerland.ics +++ b/app/src/main/assets/switzerland.ics @@ -1,1535 +1,219 @@ BEGIN:VCALENDAR BEGIN:VEVENT -SUMMARY:Auffahrt -UID:VzMUzCV8Y6xdjaBaTwxzMr-CzA-KgMJZP5VLdrUTsK9SYBRJP-GA3@rb.dd +SUMMARY:Christmas holidays +DTSTART;VALUE=DATE:20161226 +DTEND;VALUE=DATE:20170107 +UID:ferien2017-420642-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Sport holiday +DTSTART;VALUE=DATE:20170213 +DTEND;VALUE=DATE:20170225 +UID:ferien2017-245772-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Easter holidays +DTSTART;VALUE=DATE:20170413 +DTEND;VALUE=DATE:20170418 +UID:ferien2017-420643-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Spring time holidays +DTSTART;VALUE=DATE:20170418 +DTEND;VALUE=DATE:20170429 +UID:ferien2017-420644-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Labour Day +DTSTART;VALUE=DATE:20170501 +DTEND;VALUE=DATE:20170501 +UID:ferien2017-420645-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Ascension Day DTSTART;VALUE=DATE:20170525 -DTEND;VALUE=DATE:20170526 +DTEND;VALUE=DATE:20170529 +UID:ferien2017-420646-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Pfingsten -UID:J29kc7SYqSIVkoYSscdUxd-C3A-ZBgZQ8RiGENtpkzpcnK3iA-BHA@rb.dd -DTSTART;VALUE=DATE:20170604 -DTEND;VALUE=DATE:20170605 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:Gx5IVgsNd2tW4z6VRhLGOY-ECA-C7Ewi885Faac4VUu7ILWxV-FSW@rb.dd +SUMMARY:Whit Monday DTSTART;VALUE=DATE:20170605 -DTEND;VALUE=DATE:20170606 +DTEND;VALUE=DATE:20170605 +UID:ferien2017-420647-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:IPMYPozyFcTKZGiidVuMEx-JtA-HuZkeqnRJwKwduoAXVUmAc-Q7q@rb.dd -DTSTART;VALUE=DATE:20170615 -DTEND;VALUE=DATE:20170616 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:RgJx7rVnbKHbiVokdgatAA-DVA-hX6t2ciAhUGDgqXXmHcwyA-DfO@rb.dd -DTSTART;VALUE=DATE:20170828 -DTEND;VALUE=DATE:20170829 +SUMMARY:Summer holidays +DTSTART;VALUE=DATE:20170717 +DTEND;VALUE=DATE:20170819 +UID:ferien2017-245774-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT SUMMARY:Knabenschiessen -UID:UmfnXP3PJIRNGbMUYdLxpx-DIA-KjDiqVcZBcfOQVs96Rr253-M2V@rb.dd -DTSTART;VALUE=DATE:20170909 -DTEND;VALUE=DATE:20170910 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:JrqhqhPtDAfD7qoiVJr4BA-DIA-EpKuV2B6dhSo55ARhSsN8P-bqA@rb.dd -DTSTART;VALUE=DATE:20170910 -DTEND;VALUE=DATE:20170911 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:MQ9LyqFHmaJoAIENXtfywI-D6A-Hh3zkqEXHTUFwBqsKKgI5T-EzR@rb.dd DTSTART;VALUE=DATE:20170911 -DTEND;VALUE=DATE:20170912 +DTEND;VALUE=DATE:20170911 +UID:ferien2017-453610-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:ErdS2jDrwJPDP5khTTI3TI-EFA-HhnWRoNQ5rZYojn8uNcrPo-GD5@rb.dd -DTSTART;VALUE=DATE:20170918 -DTEND;VALUE=DATE:20170919 +SUMMARY:Autumn holidays +DTSTART;VALUE=DATE:20171009 +DTEND;VALUE=DATE:20171021 +UID:ferien2017-245775-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:H63gs3cnrQd49Zs5awFi9t-DRA-IutCQCNLnUQaH9ZEKDzrzM-BV9@rb.dd -DTSTART;VALUE=DATE:20171203 -DTEND;VALUE=DATE:20171204 +SUMMARY:Christmas holidays +DTSTART;VALUE=DATE:20171225 +DTEND;VALUE=DATE:20180106 +UID:ferien2017-453611-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:Rh5rRwKQAVSueW5PXWHGqZ-DTA-DLxuqVcFC33hDkfqgmVEAL-HzA@rb.dd -DTSTART;VALUE=DATE:20171210 -DTEND;VALUE=DATE:20171211 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:MsWSah4UJSVK6DQ4GWPOoR-DSA-BruiWLKsCkWAINZNFHphno-StF@rb.dd -DTSTART;VALUE=DATE:20171217 -DTEND;VALUE=DATE:20171218 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:HIAnXRhDt4VRgZsD3U4EPh-DTA-BRIKdhf95UiojHeDaBLaIb-PDs@rb.dd -DTSTART;VALUE=DATE:20171224 -DTEND;VALUE=DATE:20171225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:EnHZEKouJNaMQoZ7tumn9H-DmA-KVEsjCNBIggm65KO4CGjUO-QmV@rb.dd -DTSTART;VALUE=DATE:20180208 -DTEND;VALUE=DATE:20180209 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:NzkdiFnHCfceLBgJdoVooP-DcA-IOk9eXZMxgWbnQYIoGFBOw-KMo@rb.dd +SUMMARY:Sport holiday DTSTART;VALUE=DATE:20180212 -DTEND;VALUE=DATE:20180213 +DTEND;VALUE=DATE:20180224 +UID:ferien2018-245776-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:NLhLufmC7cqMEtCNRP9gKs-DRA-J6NDnrsaNq8IkYTo2wtTgg-G3r@rb.dd -DTSTART;VALUE=DATE:20180213 -DTEND;VALUE=DATE:20180214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:QVSZIkMciXZoVIDajUcsIf-DcA-HkssTeZamAo7DuJeXaVHaS-MJ7@rb.dd -DTSTART;VALUE=DATE:20180214 -DTEND;VALUE=DATE:20180215 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:TMm2bNULkLXqqInxAHrBDk-CpA-DpQRSwjgU8bweqZJuLYQIa-MbI@rb.dd -DTSTART;VALUE=DATE:20180218 -DTEND;VALUE=DATE:20180219 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:TLwhGpUBhuQCh7oKqj7WxE-DFA-xccK3RryEsgdKXrim58OzA-PCn@rb.dd -DTSTART;VALUE=DATE:20180219 -DTEND;VALUE=DATE:20180220 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:EUtPDFV7rwawuIzNqNP2CT-CmA-Jy2IAwYMAtHnFztKuXBN6O-Fg6@rb.dd -DTSTART;VALUE=DATE:20180220 -DTEND;VALUE=DATE:20180221 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Ändstraich) -UID:EK8d2E5tPiHZTGoIDfuaBo-DEA-J5WQUsOAE5548JQSTJSTFM-H5D@rb.dd -DTSTART;VALUE=DATE:20180221 -DTEND;VALUE=DATE:20180222 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:PX8mBZQAdCAYhFSVXOaBeS-DXA-FDYDrNeTQDpZEUTXfRirhG-BEf@rb.dd -DTSTART;VALUE=DATE:20180330 -DTEND;VALUE=DATE:20180331 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:CKdbqUz35iDmYOWMbY9KWB-CqA-ExL6qLwZhBtnKDrZxEpYjA-E7Q@rb.dd -DTSTART;VALUE=DATE:20180401 -DTEND;VALUE=DATE:20180402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:VkuOxxHj8gIosMJi5LFLxQ-DyA-GJPoENMh7S2M8Jx6NouqYs-G6A@rb.dd -DTSTART;VALUE=DATE:20180402 +SUMMARY:Easter holidays +DTSTART;VALUE=DATE:20180329 DTEND;VALUE=DATE:20180403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:KVGrKDjD8ARMWq3f67k2b3-DeA-DKmVIVforuoNMaEujiYE4Y-Rt7@rb.dd -DTSTART;VALUE=DATE:20180405 -DTEND;VALUE=DATE:20180406 +UID:ferien2018-453612-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT SUMMARY:Sechseläuten -UID:N69TPAgLkuxBsyVtoL2GF3-DjA-B299pI3uSSJxCnY3V8qLaZ-QuJ@rb.dd DTSTART;VALUE=DATE:20180416 -DTEND;VALUE=DATE:20180417 +DTEND;VALUE=DATE:20180416 +UID:ferien2018-453613-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Auffahrt -UID:IHeXTKYLWz6AAMVyFpL3fI-CzA-HAdBc7J6eceLFSG26W7EVV-Qpp@rb.dd +SUMMARY:Spring time holidays +DTSTART;VALUE=DATE:20180423 +DTEND;VALUE=DATE:20180505 +UID:ferien2018-245777-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Ascension Day DTSTART;VALUE=DATE:20180510 -DTEND;VALUE=DATE:20180511 +DTEND;VALUE=DATE:20180514 +UID:ferien2018-453614-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Pfingsten -UID:QVyfjjbdZXHS5bQpVMtrPU-C3A-ExKmdIOGroQskNqwUyWPfb-N6L@rb.dd -DTSTART;VALUE=DATE:20180520 -DTEND;VALUE=DATE:20180521 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:VznfNHAfh8s7nbdpqQp3RS-ECA-amzrf6gmpuSkBYdjtFVWxA-Mdf@rb.dd +SUMMARY:Whit Monday DTSTART;VALUE=DATE:20180521 -DTEND;VALUE=DATE:20180522 +DTEND;VALUE=DATE:20180521 +UID:ferien2018-453615-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:H7HiFzOU8kGn5Pnk8k3e2n-JtA-IAqIqxqmf8pVbXYiFkeQMc-DRR@rb.dd -DTSTART;VALUE=DATE:20180531 -DTEND;VALUE=DATE:20180601 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:QNcYWEiGUVeE36qZbFaNd3-DVA-DQV4Rrtz9XtIWDfQMLNbeW-JiA@rb.dd -DTSTART;VALUE=DATE:20180827 -DTEND;VALUE=DATE:20180828 +SUMMARY:Summer holidays +DTSTART;VALUE=DATE:20180716 +DTEND;VALUE=DATE:20180818 +UID:ferien2018-245778-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT SUMMARY:Knabenschiessen -UID:OVX6rgYHRhAoVpW3ugEUQT-DIA-JVSOPTjhN5E6ZwDjWLg2OO-xxA@rb.dd -DTSTART;VALUE=DATE:20180908 -DTEND;VALUE=DATE:20180909 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:NGT8nyz69WNEaeOP3VyZjc-DIA-CxiIXXH3eExw7d9fR7FVos-LRE@rb.dd -DTSTART;VALUE=DATE:20180909 -DTEND;VALUE=DATE:20180910 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:RpT3qaIVzk46KdUwrGNsN3-D6A-KyVB2XqNKCcRDVGFhCgkxa-L2I@rb.dd DTSTART;VALUE=DATE:20180910 -DTEND;VALUE=DATE:20180911 +DTEND;VALUE=DATE:20180910 +UID:ferien2018-453616-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:EZGXN5ffO6hDasBCY2mYT4-EFA-B6K2AVz95NXihtheGSgjS3-QSw@rb.dd -DTSTART;VALUE=DATE:20180917 -DTEND;VALUE=DATE:20180918 +SUMMARY:Autumn holidays +DTSTART;VALUE=DATE:20181008 +DTEND;VALUE=DATE:20181020 +UID:ferien2018-245779-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:PVNy5Fhh5wPHGFWI49XV9z-DRA-I5gHws9VLXTELIOhDM3tKG-JPp@rb.dd -DTSTART;VALUE=DATE:20181202 -DTEND;VALUE=DATE:20181203 +SUMMARY:Christmas holidays +DTSTART;VALUE=DATE:20181224 +DTEND;VALUE=DATE:20190105 +UID:ferien2018-453617-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:KGtK5Vy6KpBIwoVnuVLmyw-DTA-BpjXedPoaiyt6XBDZ3ioWg-SHW@rb.dd -DTSTART;VALUE=DATE:20181209 -DTEND;VALUE=DATE:20181210 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:VieIV2SAEkcIhFMaa9VQ9j-DSA-Bqo75ogF8PKcgMSz5Kys8r-Lcb@rb.dd -DTSTART;VALUE=DATE:20181216 -DTEND;VALUE=DATE:20181217 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:QaZbg2Ig3zHJHeoQ25qNQB-DTA-yBrytI6O8UyiV7ALtjJfaA-Ffm@rb.dd -DTSTART;VALUE=DATE:20181223 -DTEND;VALUE=DATE:20181224 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:Bq9YH58fJ9RKyd4WVPgVuX-DmA-EZ894FVQ67ZkOnau9Uy9RC-IVa@rb.dd -DTSTART;VALUE=DATE:20190228 -DTEND;VALUE=DATE:20190301 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:KITekW2bqERzpW5ZcbV2Sz-DcA-EajirMRGFreGjFOxQ6SzjL-CcV@rb.dd -DTSTART;VALUE=DATE:20190304 -DTEND;VALUE=DATE:20190305 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:VDo5dTRXpiOPETTHiTkudB-DRA-Cz7WhPDM9LrHdOLPiJmmPL-BIA@rb.dd -DTSTART;VALUE=DATE:20190305 -DTEND;VALUE=DATE:20190306 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:OOByJ8bkDaVs9RgBTtVjDD-DcA-GzQBZeidhhT8HIRtnwUsMY-OV2@rb.dd -DTSTART;VALUE=DATE:20190306 -DTEND;VALUE=DATE:20190307 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:BReTEcjQmPCwdCgYmL9QYp-CpA-ELOAQfV7B4LXxnJfHTVJSy-QXY@rb.dd -DTSTART;VALUE=DATE:20190310 -DTEND;VALUE=DATE:20190311 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:I34DyY4dIWKEfzgEdCgFDT-DFA-JxcC9ZrwCJNW8mMosA6OQB-QON@rb.dd -DTSTART;VALUE=DATE:20190311 -DTEND;VALUE=DATE:20190312 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:KREBXig9uL9h3L9ssJGJKT-CmA-I87jd7Ly5BuTtMQz9gPskZ-BOE@rb.dd -DTSTART;VALUE=DATE:20190312 -DTEND;VALUE=DATE:20190313 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Ändstraich) -UID:EXnJEgmodPpG6YIYgrFRZk-DEA-Ihk7PR2TjrDZTMBXrTfrN7-EW7@rb.dd -DTSTART;VALUE=DATE:20190313 -DTEND;VALUE=DATE:20190314 +SUMMARY:Sport holiday +DTSTART;VALUE=DATE:20190211 +DTEND;VALUE=DATE:20190223 +UID:ferien2019-245780-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT SUMMARY:Sechseläuten -UID:SxbOCftaDZqg8Kb9qMJ3Vg-DjA-GIdhBWGHHJ3EtqKdIeUSoi-RPU@rb.dd DTSTART;VALUE=DATE:20190408 -DTEND;VALUE=DATE:20190409 +DTEND;VALUE=DATE:20190408 +UID:ferien2019-453618-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:TeMqjVSeNELiUfa3KHNzQz-DeA-Iwt4QnXqe9UzEX8VHGUHxC-JbP@rb.dd -DTSTART;VALUE=DATE:20190411 -DTEND;VALUE=DATE:20190412 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:IaWrW6monLaQXKV8J2WCIH-DXA-IHrOji9HRQG9WchFxCD7wo-CMT@rb.dd -DTSTART;VALUE=DATE:20190419 -DTEND;VALUE=DATE:20190420 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:S5O2VrCpnZCJriHpKB5Esj-CqA-BebWVdWGdPxw9zUJ2oYUiB-BO4@rb.dd -DTSTART;VALUE=DATE:20190421 -DTEND;VALUE=DATE:20190422 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:NszGRcWSKcF9IHJVidALYV-DyA-EwrDfQY9FM3dsYWkz3fZBi-C8B@rb.dd -DTSTART;VALUE=DATE:20190422 +SUMMARY:Easter holidays +DTSTART;VALUE=DATE:20190418 DTEND;VALUE=DATE:20190423 +UID:ferien2019-453619-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Auffahrt -UID:J9m9CHXcIpBLDF4taWBgkQ-CzA-JSgtMFdgafW3mPRgHCogHg-Fj8@rb.dd +SUMMARY:Spring time holidays +DTSTART;VALUE=DATE:20190423 +DTEND;VALUE=DATE:20190504 +UID:ferien2019-453620-fcal.ch +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +SUMMARY:Ascension Day DTSTART;VALUE=DATE:20190530 -DTEND;VALUE=DATE:20190531 +DTEND;VALUE=DATE:20190603 +UID:ferien2019-453621-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Pfingsten -UID:OQwZ2p6AZZoN3bBVZQoLzP-C3A-K6NyF8NNWxV75PCYQMeVSz-88A@rb.dd -DTSTART;VALUE=DATE:20190609 -DTEND;VALUE=DATE:20190610 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:RjQ3VwjynHVdgn7q9uDb9m-ECA-Kiwf6WDujfMzMkcjhMMUCr-KQZ@rb.dd +SUMMARY:Whit Monday DTSTART;VALUE=DATE:20190610 -DTEND;VALUE=DATE:20190611 +DTEND;VALUE=DATE:20190610 +UID:ferien2019-453622-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:FAJ6oonaCgI2R5KzZ2qVNX-JtA-BJQVNIDkyrkSPhPNBJRiVA-I35@rb.dd -DTSTART;VALUE=DATE:20190620 -DTEND;VALUE=DATE:20190621 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:QPQXIxxmZ7R2OErWfOq7zc-DVA-FGbn5iNkmU5tYFHGTgb9xV-EqV@rb.dd -DTSTART;VALUE=DATE:20190826 -DTEND;VALUE=DATE:20190827 +SUMMARY:Summer holidays +DTSTART;VALUE=DATE:20190715 +DTEND;VALUE=DATE:20190817 +UID:ferien2019-245782-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT SUMMARY:Knabenschiessen -UID:EfNZMnSJDoqMNfCq9kgLDF-DIA-GOXJRP9rb8CB67wLZ7iX27-PNY@rb.dd -DTSTART;VALUE=DATE:20190907 -DTEND;VALUE=DATE:20190908 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:NSZdV2GbCnmOVKUcASaTyH-DIA-B7F6WVMuacuMJwaJxP4rrY-EVu@rb.dd -DTSTART;VALUE=DATE:20190908 -DTEND;VALUE=DATE:20190909 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:JrrEnKNgp2MJYBp86dzYVt-D6A-FujjZeZ9WNggAAnGzawIAV-REk@rb.dd DTSTART;VALUE=DATE:20190909 -DTEND;VALUE=DATE:20190910 +DTEND;VALUE=DATE:20190909 +UID:ferien2019-453623-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:GVo8GnitPBGCGYTwDPFwn6-EFA-Jg4YxIrjkSojSOLKFNqNuK-EpJ@rb.dd -DTSTART;VALUE=DATE:20190916 -DTEND;VALUE=DATE:20190917 +SUMMARY:Autumn holidays +DTSTART;VALUE=DATE:20191007 +DTEND;VALUE=DATE:20191019 +UID:ferien2019-245783-fcal.ch STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:C59eb6AwKOBBpeMyVaZYg8-DRA-BQ4HVjQnQeTiVPGZ4RTENf-Fcr@rb.dd -DTSTART;VALUE=DATE:20191201 -DTEND;VALUE=DATE:20191202 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:VfMpYXskqtDMhSSogLTjzs-DTA-DuFzVDk4BdY9GYkVY7QK3Z-Bcj@rb.dd -DTSTART;VALUE=DATE:20191208 -DTEND;VALUE=DATE:20191209 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:Bbko5d5EPUeRAAY6AtqgZ6-DSA-GfmZOMtfWTK7dUhrx8hJVE-QnC@rb.dd -DTSTART;VALUE=DATE:20191215 -DTEND;VALUE=DATE:20191216 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:JnQXFXHF7JbGyjyABHYtjT-DTA-BMAr9aPZcBc6ge2VCNEVzV-Omf@rb.dd -DTSTART;VALUE=DATE:20191222 -DTEND;VALUE=DATE:20191223 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:VpZD6omq2We5NRt5nwJWb6-DmA-CXkNSFRfFnjpSiX8d9dmr4-BYG@rb.dd -DTSTART;VALUE=DATE:20200220 -DTEND;VALUE=DATE:20200221 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:JiPLarKZktnmaj2wpYrKCm-DcA-RSQ264ubXJ9VVV4ebSWrnA-Fuy@rb.dd -DTSTART;VALUE=DATE:20200224 -DTEND;VALUE=DATE:20200225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:Jax7gNMRDQVsVTBX8YIqit-DRA-FaxVPso66R3pELfRUyVIAu-7jA@rb.dd -DTSTART;VALUE=DATE:20200225 -DTEND;VALUE=DATE:20200226 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:IbVPt55d34hm8RZiZDVHKg-DcA-DP4MAPu6c8jsjpDdVPBnLq-I5Y@rb.dd -DTSTART;VALUE=DATE:20200226 -DTEND;VALUE=DATE:20200227 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:LSzEPU3m2jApqUV5IDILYL-CpA-IxYLASVmaQT7WuGKaikEUg-OWi@rb.dd -DTSTART;VALUE=DATE:20200301 -DTEND;VALUE=DATE:20200302 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:LVu2sbXOdBQIqHAFKru6BK-DFA-BgqsBbG33GMhLSGmW7hwVV-K8V@rb.dd -DTSTART;VALUE=DATE:20200302 -DTEND;VALUE=DATE:20200303 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:IEImZAZOsoMbSdH5p9GWR7-CmA-GOu2HVdjQVDQFktahmhiV9-N7V@rb.dd -DTSTART;VALUE=DATE:20200303 -DTEND;VALUE=DATE:20200304 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Ändstraich) -UID:JZJUfPAqQ5yWkAVIyHFTDP-DEA-IRkdV6gZOukP6dgC3kPoqV-RGH@rb.dd -DTSTART;VALUE=DATE:20200304 -DTEND;VALUE=DATE:20200305 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:EK5DnD62VHTnghcT9ACoNj-DeA-JsYZRsOXRVTaBNm7VV8HIL-GVW@rb.dd -DTSTART;VALUE=DATE:20200409 -DTEND;VALUE=DATE:20200410 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:LChjhj6ZjfrwRQuYVS7Pob-DXA-DKVtYAygkhW6bsBc7UiAJX-JsW@rb.dd -DTSTART;VALUE=DATE:20200410 -DTEND;VALUE=DATE:20200411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:IAOrOEbprO6ZVssknQwVTF-CqA-BumD2JdCjDqKViTV7nH5DE-PPW@rb.dd -DTSTART;VALUE=DATE:20200412 -DTEND;VALUE=DATE:20200413 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:BFrr6EbWEoKVBZUfggPRmm-DyA-Osxa8QWpfcAjOiHXSoK6EA-HUU@rb.dd -DTSTART;VALUE=DATE:20200413 -DTEND;VALUE=DATE:20200414 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sechseläuten -UID:DqunDEiqWItads8JwaxDMQ-DjA-EptI4HcpM6KBWWcnRRziVA-KMq@rb.dd -DTSTART;VALUE=DATE:20200420 -DTEND;VALUE=DATE:20200421 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Auffahrt -UID:R6LoLmqAtaKkRg9GKejQxn-CzA-JECqUMVI32VAXWUIWNEzwx-Rag@rb.dd -DTSTART;VALUE=DATE:20200521 -DTEND;VALUE=DATE:20200522 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -UID:KQ9Ds98bdm8LmXCMtEGTsS-C3A-BV8m2M3xJb9wrdWcVzp77n-CV2@rb.dd -DTSTART;VALUE=DATE:20200531 -DTEND;VALUE=DATE:20200601 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:CzUH3pkDy3NM8UwRZVyRZ6-ECA-GyUHcgjFAIaVVc9h9PzXZU-DE6@rb.dd -DTSTART;VALUE=DATE:20200601 -DTEND;VALUE=DATE:20200602 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:TsrgJYdpaFEoSVqmYycFQR-JtA-IAcPL3h775ZSTsMwNrOZiU-BDL@rb.dd -DTSTART;VALUE=DATE:20200611 -DTEND;VALUE=DATE:20200612 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:HFDd6BQEBeX4nsWNr5OyPu-DVA-Dyju2BURORVrIziZJDHyag-PJS@rb.dd -DTSTART;VALUE=DATE:20200831 -DTEND;VALUE=DATE:20200901 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:BWEenoRLMFrJ2imKskTcGk-DIA-BkXCefH7TqEwcd4VGVempA-Brx@rb.dd -DTSTART;VALUE=DATE:20200912 -DTEND;VALUE=DATE:20200913 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:NmCeKjB2cDqsFnUn9gxhLK-DIA-I7kNhqEFO6CBosZH2wdUVI-GcQ@rb.dd -DTSTART;VALUE=DATE:20200913 -DTEND;VALUE=DATE:20200914 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:OosBWkZtdnVoIUpwWRw2GA-D6A-HVtBcXsBLYPkxjJAXRxyEr-SVY@rb.dd -DTSTART;VALUE=DATE:20200914 -DTEND;VALUE=DATE:20200915 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:BKfQwtDgt5gfXES9y6eFUB-EFA-FyXeEwLEMtP3BLfR8seNMk-JSk@rb.dd -DTSTART;VALUE=DATE:20200921 -DTEND;VALUE=DATE:20200922 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:Pa5OYrGN7VKUFZaZDHckBi-DRA-EpYfH6cjxLQcu3OF57eiMp-EYE@rb.dd -DTSTART;VALUE=DATE:20201129 -DTEND;VALUE=DATE:20201130 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:IojnT68t8sFWW5C6r8Fgpm-DTA-FccU2CLoheGy7LVhwgatcy-Do4@rb.dd -DTSTART;VALUE=DATE:20201206 -DTEND;VALUE=DATE:20201207 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:BoSUZJQSGUH9WpjaT4o7gJ-DSA-BPuWpHB9E5QHMe7FOoUgdQ-Pfc@rb.dd -DTSTART;VALUE=DATE:20201213 -DTEND;VALUE=DATE:20201214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:Ln6OjZrkjmSLPVSSND6YJV-DTA-CBUNbwHiHcTbcK66IyZMWz-OO7@rb.dd -DTSTART;VALUE=DATE:20201220 -DTEND;VALUE=DATE:20201221 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:GgAFmFkMiFh5NUD9WbbRmL-DmA-KGyVt4r2ha5DnLmtgpVEq3-DkN@rb.dd -DTSTART;VALUE=DATE:20210211 -DTEND;VALUE=DATE:20210212 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:GW54yRwXVHSounypk6xg2x-DcA-KNkKFPBZIAtMf3fV2fXijc-DYr@rb.dd -DTSTART;VALUE=DATE:20210215 -DTEND;VALUE=DATE:20210216 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:G5LLMXBqyLxGFHUdcS8YWh-DRA-JXjuW4cpjqTXuDotskMfNr-BZx@rb.dd -DTSTART;VALUE=DATE:20210216 -DTEND;VALUE=DATE:20210217 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:LGkjdeVnwXdItVDNiJqV4F-DcA-IigPVnRnbJOpViidMBtufA-BNW@rb.dd -DTSTART;VALUE=DATE:20210217 -DTEND;VALUE=DATE:20210218 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:EA7Rws69V6279YBHPoiVGJ-CpA-KMLOejhQyH6OgammC39kKR-PaF@rb.dd -DTSTART;VALUE=DATE:20210221 -DTEND;VALUE=DATE:20210222 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:BjuA8wnJCzs24FyqKfpZtc-DFA-DpKuSPwA2CVu7ctNDnPL8q-IGq@rb.dd -DTSTART;VALUE=DATE:20210222 -DTEND;VALUE=DATE:20210223 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:bmxjwCGXZLShMLONeMmAaA-CmA-CYzoRdrTjrdTOpap3JoJcI-Dao@rb.dd -DTSTART;VALUE=DATE:20210223 -DTEND;VALUE=DATE:20210224 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Ändstraich) -UID:GpMkYwcdXNppJ7ixXum6R7-DEA-DrBVuqjmILtW9e4zPb9LEk-Q8u@rb.dd -DTSTART;VALUE=DATE:20210224 -DTEND;VALUE=DATE:20210225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:RRtdYfRY7kJ8IEqGtMVuf9-DXA-PnLET4AqTjN46nLhd6CwWA-Jim@rb.dd -DTSTART;VALUE=DATE:20210402 -DTEND;VALUE=DATE:20210403 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:Mx6XPk2mqErHh7YKOuOWGX-CqA-o8grRodM3NykwSk3aTQScA-PEA@rb.dd -DTSTART;VALUE=DATE:20210404 -DTEND;VALUE=DATE:20210405 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:QiWwokeRnThAqrOZaViIcA-DyA-EdGegExV3g3j9VA7yIHRay-RgC@rb.dd -DTSTART;VALUE=DATE:20210405 -DTEND;VALUE=DATE:20210406 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:4YGWdJB2uWNpVzVNybTGdA-DeA-HbVyOXxutrbmqgd9W3spXG-QDt@rb.dd -DTSTART;VALUE=DATE:20210408 -DTEND;VALUE=DATE:20210409 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sechseläuten -UID:TrnFQDgzntyKxQgmV8r7uG-DjA-GUWewRdn6YhHjMc24H4AoJ-R2P@rb.dd -DTSTART;VALUE=DATE:20210419 -DTEND;VALUE=DATE:20210420 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Auffahrt -UID:VOoKSUT27Bm2wuDOfjHecD-CzA-GdiQFU4yQnJjUqUwWE3BHp-OxH@rb.dd -DTSTART;VALUE=DATE:20210513 -DTEND;VALUE=DATE:20210514 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -UID:Hp55PByQEkeqfzU5kiPqDB-C3A-C9uzxIrHhLASAQfUcEEp6L-DLg@rb.dd -DTSTART;VALUE=DATE:20210523 -DTEND;VALUE=DATE:20210524 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:UBC2QBXj77IimdhUGrqogE-ECA-HXATspETVBwGOFRyqIwqVm-FD2@rb.dd -DTSTART;VALUE=DATE:20210524 -DTEND;VALUE=DATE:20210525 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:C5k5VYHkyPuBomaXHmO54y-JtA-HSS5H34h5jLizneieNazMI-PYT@rb.dd -DTSTART;VALUE=DATE:20210603 -DTEND;VALUE=DATE:20210604 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:KmYERYpXNEytAixAojmneK-DVA-K9QsNLB5w6d6w28VmeuHOo-DTT@rb.dd -DTSTART;VALUE=DATE:20210830 -DTEND;VALUE=DATE:20210831 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:DBuxUocrIzNR4OQI9qmVIr-DIA-btCiy6jjnt5Vt2a4VzV9KA-BzA@rb.dd -DTSTART;VALUE=DATE:20210911 -DTEND;VALUE=DATE:20210912 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:MP2oATM2LZKzW6CW3IeJ5M-DIA-hdXhBCZrwb7PrfJjNOqkGA-Ssd@rb.dd -DTSTART;VALUE=DATE:20210912 -DTEND;VALUE=DATE:20210913 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:JfjjJ7uERMfD7EfuUnFUE9-D6A-CdYJrTkfpC8reNfMP9xOLd-LgM@rb.dd -DTSTART;VALUE=DATE:20210913 -DTEND;VALUE=DATE:20210914 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:FF876EaUUxfrpCAqtqwV9J-EFA-IaFN64ebMR6ctMg6iYFDHV-N8b@rb.dd -DTSTART;VALUE=DATE:20210920 -DTEND;VALUE=DATE:20210921 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:TYORmhVLWdFMHEYFZAHuTk-DRA-HsrbZKKq2Qam2Koa7MLrGf-MKi@rb.dd -DTSTART;VALUE=DATE:20211128 -DTEND;VALUE=DATE:20211129 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:Mca2g6kY6oxXLd8FiVV7ft-DTA-DDOsJ7BVrbDNsDcAh2UNBE-PBB@rb.dd -DTSTART;VALUE=DATE:20211205 -DTEND;VALUE=DATE:20211206 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:SUBxLtRMkmyaDYw3cuVRuA-DSA-EiURrIKOSAcR3DWKGfVRaL-J4P@rb.dd -DTSTART;VALUE=DATE:20211212 -DTEND;VALUE=DATE:20211213 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:E43koghqem978EZDHPOoV4-DTA-K9MgMLyRmnptxPc9WTV78A-OnY@rb.dd -DTSTART;VALUE=DATE:20211219 -DTEND;VALUE=DATE:20211220 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:RW5qkOhMUBUwePtDFi8BjB-DmA-F3ikiIuN7Z2bZcWW6V3o8W-EZO@rb.dd -DTSTART;VALUE=DATE:20220224 -DTEND;VALUE=DATE:20220225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:UOrXEb3b3td4MzBgdnsjX5-DcA-JYqyD5VwtrzdSWKTE6CXIj-QhV@rb.dd -DTSTART;VALUE=DATE:20220228 -DTEND;VALUE=DATE:20220301 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:KzcZoZID2KVDhu7obJTYTj-DRA-FnYNItZaTNmcxc6SruDtTO-QDC@rb.dd -DTSTART;VALUE=DATE:20220301 -DTEND;VALUE=DATE:20220302 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:GLcgV9pVAVMjV4IoINQN3R-DcA-KS6EVPFp3VtLYKTUu9uBjT-Jga@rb.dd -DTSTART;VALUE=DATE:20220302 -DTEND;VALUE=DATE:20220303 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:MiZeEVqzxgV77TCK6SGFZM-CpA-HCDF2UtDzG74Xz6ApUhsK6-MAD@rb.dd -DTSTART;VALUE=DATE:20220306 -DTEND;VALUE=DATE:20220307 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:CNawM6RsgPrR3Ahhs43pRw-DFA-K65cLuUNJbcydgsN3nLs9n-Li8@rb.dd -DTSTART;VALUE=DATE:20220307 -DTEND;VALUE=DATE:20220308 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:JFI4SpsqBWPFHbP4LHDzVW-CmA-Q34eR7hTOE25iFfNOHAy8A-KTg@rb.dd -DTSTART;VALUE=DATE:20220308 -DTEND;VALUE=DATE:20220309 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Ändstraich) -UID:PEMVB5CdV4w6kOXwWfa5N8-DEA-Hs9pLnuxPCqFzxjFRYw9Z3-Prm@rb.dd -DTSTART;VALUE=DATE:20220309 -DTEND;VALUE=DATE:20220310 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:SIypLiFLMkGIdtYhP5KpnZ-DeA-DhCFWMQIotCppqOOhpTDC6-CPm@rb.dd -DTSTART;VALUE=DATE:20220407 -DTEND;VALUE=DATE:20220408 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:Czdiq3gxIkj7DEtrCp4Fzp-DXA-Byg6WS8su2RT96uSdRiZa9-Oyz@rb.dd -DTSTART;VALUE=DATE:20220415 -DTEND;VALUE=DATE:20220416 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:VuhIVjBWVj2kAXePxVhtrX-CqA-2ttZ4roU936gWuJ3rksN9A-GaL@rb.dd -DTSTART;VALUE=DATE:20220417 -DTEND;VALUE=DATE:20220418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:Qeu2KNgVVAnboE8NZYT5Yi-DyA-HwbCjyLVAkyyb3kAadSMLp-Rt7@rb.dd -DTSTART;VALUE=DATE:20220418 -DTEND;VALUE=DATE:20220419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sechseläuten -UID:CKrYPQoMugnRfi4UYejIn6-DjA-BJLXxcZAfRJeCqk9JCeCHz-g2A@rb.dd -DTSTART;VALUE=DATE:20220425 -DTEND;VALUE=DATE:20220426 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Auffahrt -UID:BDMqfahBQnTbwHh3Ccpkxo-CzA-IDi88MHWZjLeEIcVErFddE-MIy@rb.dd -DTSTART;VALUE=DATE:20220526 -DTEND;VALUE=DATE:20220527 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -UID:TgoqwCtopF8xwmxLIZi4WG-C3A-J2m4VKKO4D4cXwq7emexNr-OOp@rb.dd -DTSTART;VALUE=DATE:20220605 -DTEND;VALUE=DATE:20220606 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:U3HkFLW9BbnfjPtaUZhsg8-ECA-FKjcKj7XcKxjookMFeqVkZ-ELw@rb.dd -DTSTART;VALUE=DATE:20220606 -DTEND;VALUE=DATE:20220607 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:EIpQjrIXPy4xQCgcx7zsbm-JtA-C9IgpdUPLnqGBIQUZaU6VI-LVT@rb.dd -DTSTART;VALUE=DATE:20220616 -DTEND;VALUE=DATE:20220617 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:B7c6u3soIsU9IJ5V8TiVxd-DVA-FIoxJWAJZHrN83d9wuyZnu-Czw@rb.dd -DTSTART;VALUE=DATE:20220829 -DTEND;VALUE=DATE:20220830 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:UedWobdx5SkwL5zjfVVy3i-DIA-CzfqJetXfHbb2VnHzYpz5z-MIm@rb.dd -DTSTART;VALUE=DATE:20220910 -DTEND;VALUE=DATE:20220911 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:MTO3QOIpRKECKV3RLrfAcV-DIA-GcaT8WTtpQpqRhxKMdDt9O-Smc@rb.dd -DTSTART;VALUE=DATE:20220911 -DTEND;VALUE=DATE:20220912 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:MNx2jfVQUDd29a3fqdjUI5-D6A-KpNmD5ePPoybp5jwxWYiVL-HKW@rb.dd -DTSTART;VALUE=DATE:20220912 -DTEND;VALUE=DATE:20220913 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:K8iOCgGzRtqyQBeVrigrdm-EFA-BamPOCt2BBfgIoaIOVgurV-H8S@rb.dd -DTSTART;VALUE=DATE:20220919 -DTEND;VALUE=DATE:20220920 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:TYjef8upsfTKzMJxwFb5GS-DRA-J8rmgLXERucnEJ6U7QChHh-DZt@rb.dd -DTSTART;VALUE=DATE:20221127 -DTEND;VALUE=DATE:20221128 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:Lby3J4PVJyVSbk2dJXLZcB-DTA-BFZ2yuk49Vu9xVLZkZu76N-Fwj@rb.dd -DTSTART;VALUE=DATE:20221204 -DTEND;VALUE=DATE:20221205 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:FuQCIZnp5UiyHwOufYoAAQ-DSA-IdMqRi8DqKeaNjDWqQAc73-JwG@rb.dd -DTSTART;VALUE=DATE:20221211 -DTEND;VALUE=DATE:20221212 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:yVmeT8aVZGQGp7oQb2ygzA-DTA-BcF8ZowN48YqP647gQjchE-HaS@rb.dd -DTSTART;VALUE=DATE:20221218 -DTEND;VALUE=DATE:20221219 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:LMRZe7XeBDMoz6JBqVAS9q-DmA-CSqjaQLUBuoD7QXuWhEHxZ-RLz@rb.dd -DTSTART;VALUE=DATE:20230216 -DTEND;VALUE=DATE:20230217 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:MFnarUuyyKyfDZjGGAGKKG-DcA-Ee5wGorMsIXTIm5w96opa9-N7b@rb.dd -DTSTART;VALUE=DATE:20230220 -DTEND;VALUE=DATE:20230221 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:NnK3i5h8KPx56bUqHOynHA-DRA-xHgb7BNUAYxaHFtSsFGw9A-Dwt@rb.dd -DTSTART;VALUE=DATE:20230221 -DTEND;VALUE=DATE:20230222 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:QHbmItGVyaczqecC9Ii3mN-DcA-FukPs5pAQD8popCbyHKSX4-DB7@rb.dd -DTSTART;VALUE=DATE:20230222 -DTEND;VALUE=DATE:20230223 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:UM84FYuiKFu3BnDqdjaEVN-CpA-DB5XZ5xoVu6nTIJm8ViM2C-GVE@rb.dd -DTSTART;VALUE=DATE:20230226 -DTEND;VALUE=DATE:20230227 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:EXVH5YoXjSfqaWMNophHxd-DFA-GndMNVgVSnkfaz3ppH7U7O-G8V@rb.dd -DTSTART;VALUE=DATE:20230227 -DTEND;VALUE=DATE:20230228 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:IwxIAm3D5UrJ8q6DHIkFqy-CmA-B8Vh8JoAtGVprfRiEbR9LN-QVT@rb.dd -DTSTART;VALUE=DATE:20230228 -DTEND;VALUE=DATE:20230301 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Ändstraich) -UID:OKNVmiPVQay9MGBQL7xK9f-DEA-K5ExMuu3E5VKP5POuFSqxE-Cja@rb.dd -DTSTART;VALUE=DATE:20230301 -DTEND;VALUE=DATE:20230302 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:Rp3SR5siSjyQXWBxdOKx5Y-DeA-BgxMuGHyziXbgUch4yGPV2-KOH@rb.dd -DTSTART;VALUE=DATE:20230406 -DTEND;VALUE=DATE:20230407 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:EgWDuVpmUnmHrbFOGRQVqO-DXA-J9XtZ2SQgjs8mGJkzARUCz-Bbx@rb.dd -DTSTART;VALUE=DATE:20230407 -DTEND;VALUE=DATE:20230408 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:DFMJGsGR3y764eMX5kN9ZB-CqA-IoNTR5HqrKoWUsNioV9UAL-DGE@rb.dd -DTSTART;VALUE=DATE:20230409 -DTEND;VALUE=DATE:20230410 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:Ft9tgu8K9TGXqQ78UBp9If-DyA-BJmuZgetJVINVC4MBXQhOG-EQt@rb.dd -DTSTART;VALUE=DATE:20230410 -DTEND;VALUE=DATE:20230411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sechseläuten -UID:CbP2uCbSCiwmeX9Y8YdkgS-DjA-DixULkHFCVir3BtRiwYrY3-F3u@rb.dd -DTSTART;VALUE=DATE:20230417 -DTEND;VALUE=DATE:20230418 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Auffahrt -UID:JHMrXridMS3phVa6SrKKRV-CzA-GVXNWD6qCsi87LbHQ39qB8-Bdz@rb.dd -DTSTART;VALUE=DATE:20230518 -DTEND;VALUE=DATE:20230519 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -UID:Kw2ZorVkQQNZmct26gkCKR-C3A-JRgGdNzRp6oCVc3UVGLR2O-IUK@rb.dd -DTSTART;VALUE=DATE:20230528 -DTEND;VALUE=DATE:20230529 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:NgXP2N2mPcXCiqbphqyuoT-ECA-KfxsDa4LBP5Dr2b3ykQPSm-NSM@rb.dd -DTSTART;VALUE=DATE:20230529 -DTEND;VALUE=DATE:20230530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:DQRc7dt4bcFkhmODuQsZBT-JtA-Cin6DBQAxNw9VaFD8j93ox-DWp@rb.dd -DTSTART;VALUE=DATE:20230608 -DTEND;VALUE=DATE:20230609 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:UqgbyZQ9UAeHg5WfdPO3Qc-DVA-rPcUGRzwxXderOZxFjXfwA-KbP@rb.dd -DTSTART;VALUE=DATE:20230828 -DTEND;VALUE=DATE:20230829 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:PSHRB83hoETePmDPZRcp7A-DIA-DhiuHgccBZmnSnaXsPALuS-KVQ@rb.dd -DTSTART;VALUE=DATE:20230909 -DTEND;VALUE=DATE:20230910 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:BUMYAYyBHU77ksHBzubP9I-DIA-Bstw8yzMR7Yh5QokX872gx-G2e@rb.dd -DTSTART;VALUE=DATE:20230910 -DTEND;VALUE=DATE:20230911 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:KaaF2hqSEsBUq3ruPcTAd5-D6A-CUy8z2q99pBxrn5sQzTIfd-MXV@rb.dd -DTSTART;VALUE=DATE:20230911 -DTEND;VALUE=DATE:20230912 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:N2RyJW2QboQFWssK5V2qHA-EFA-FosZQQ4VBMMVm5Pmq4Nbgr-MkD@rb.dd -DTSTART;VALUE=DATE:20230918 -DTEND;VALUE=DATE:20230919 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:LkkkB9cx6GqXObzhnEibHH-DRA-DX4kEe8bHMwitRFdid2kJH-ILs@rb.dd -DTSTART;VALUE=DATE:20231203 -DTEND;VALUE=DATE:20231204 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:LDyYDKZp4DTGzFA4Cy3RaX-DTA-CodiQjuP9aASUBKfCosRRS-9MA@rb.dd -DTSTART;VALUE=DATE:20231210 -DTEND;VALUE=DATE:20231211 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:HLaoLbSxLLyKWt2nfSozMc-DSA-w3IHDOKWJLKDFFT8ahAHOA-J5n@rb.dd -DTSTART;VALUE=DATE:20231217 -DTEND;VALUE=DATE:20231218 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:OppVaF5h6Em6yBG89bwIx4-DTA-FzNFnIOn6OV7FssuqjFUVx-NaC@rb.dd -DTSTART;VALUE=DATE:20231224 -DTEND;VALUE=DATE:20231225 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:OCLwGhyAPybC7SDT8nGFya-DmA-FgKAa3GoYYY7aGpxfRnS5e-Ob6@rb.dd -DTSTART;VALUE=DATE:20240208 -DTEND;VALUE=DATE:20240209 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:JabYKNAkNE7VFWsG8VGZfV-DcA-FFfJ2rwcMVpBERpsJUKBWM-IGd@rb.dd -DTSTART;VALUE=DATE:20240212 -DTEND;VALUE=DATE:20240213 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:MtDa6K6KW9FEi9N9CNY5kr-DRA-KGVe7rVCjeWD6JfkwyHziJ-Qu7@rb.dd -DTSTART;VALUE=DATE:20240213 -DTEND;VALUE=DATE:20240214 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:PVCFBieWgN5FdYx3VJa7G2-DcA-HMLVVt4VMF49mZ46J7I4fP-RIP@rb.dd -DTSTART;VALUE=DATE:20240214 -DTEND;VALUE=DATE:20240215 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:KILsqrJ5O3fLWijWQJRf9e-CpA-CrfFyewDEMZxmzokWOtAuY-DY9@rb.dd -DTSTART;VALUE=DATE:20240218 -DTEND;VALUE=DATE:20240219 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:Rp83oehxSbUo28ztgdZhmR-DFA-HaFqjrbgkHyyuHQSwbkfM3-OQZ@rb.dd -DTSTART;VALUE=DATE:20240219 -DTEND;VALUE=DATE:20240220 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:Oz4Sf6WtU3zeUFTMrZGMB7-CmA-IbLEUC4h9d8LwaxzPTqWJY-Rbq@rb.dd -DTSTART;VALUE=DATE:20240220 -DTEND;VALUE=DATE:20240221 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:NMCewQUGWM5OkFBF5s5j4x-DXA-Ex9e9gzZ9IhQ3w7RYLRfqf-PL5@rb.dd -DTSTART;VALUE=DATE:20240329 -DTEND;VALUE=DATE:20240330 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:VrGtOR7LueNWEe9R63gjjg-CqA-BAbTW6PyEpARgDduC7AEGV-LGK@rb.dd -DTSTART;VALUE=DATE:20240331 -DTEND;VALUE=DATE:20240401 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:HScRtxJtJtOSVZ7PbwUBXB-DyA-Gc2OscjcjSWsYUeuVuyutV-RRX@rb.dd -DTSTART;VALUE=DATE:20240401 -DTEND;VALUE=DATE:20240402 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:GFoxzZR3V6hDazjPZMTBGn-DeA-CCfQBVoJ7qbXkgZmUoZEE2-Qng@rb.dd -DTSTART;VALUE=DATE:20240404 -DTEND;VALUE=DATE:20240405 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sechseläuten -UID:OdTyigYnazUSXt4YRrCPD6-DjA-IBC6Pd3bSkMTBV83Vumn4i-End@rb.dd -DTSTART;VALUE=DATE:20240415 -DTEND;VALUE=DATE:20240416 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Auffahrt -UID:CjCF2t36s7PcurO8MpYmjX-CzA-IVYzhwZWemQKken2JAE7NW-P4G@rb.dd -DTSTART;VALUE=DATE:20240509 -DTEND;VALUE=DATE:20240510 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -UID:PUcAuo6xRTkrLGSUkDTCcu-C3A-GsLjSUVtx5krUsY9JtVgiy-SOO@rb.dd -DTSTART;VALUE=DATE:20240519 -DTEND;VALUE=DATE:20240520 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:BoehYGkMTdijxOpqQVukne-ECA-K6pJfcGT2phfPTMcDyZVTu-NoB@rb.dd -DTSTART;VALUE=DATE:20240520 -DTEND;VALUE=DATE:20240521 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:Swh6IEhehwBi3OkgeDZhxf-JtA-IuEFzRdcJa46uQwhkbG4AW-QAV@rb.dd -DTSTART;VALUE=DATE:20240530 -DTEND;VALUE=DATE:20240531 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:NJDseoOZktOGbBwJiFoDzi-DVA-IcrNBBCBDp8jWGwCoDhyMA-PcP@rb.dd -DTSTART;VALUE=DATE:20240826 -DTEND;VALUE=DATE:20240827 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:UqfS2N4FCmrCuizVyH5z9S-DIA-DfHqqLBzA8E3jodhsF9Wby-IZ8@rb.dd -DTSTART;VALUE=DATE:20240907 -DTEND;VALUE=DATE:20240908 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:SHBVQw2uayDOJprWDFuHQr-DIA-HDH5zamqOIKqFSTdKs9TbV-MVA@rb.dd -DTSTART;VALUE=DATE:20240908 -DTEND;VALUE=DATE:20240909 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:LdMzNmgFsacVeIqjjAYBOp-D6A-IJDGuXuEzIs8yt8VMRGOuk-Hbk@rb.dd -DTSTART;VALUE=DATE:20240909 -DTEND;VALUE=DATE:20240910 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:I7dVVsNnA6Ao9M4eJaCcVi-EFA-KfB84mbMXGiih8W4bBIM9A-PCQ@rb.dd -DTSTART;VALUE=DATE:20240916 -DTEND;VALUE=DATE:20240917 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:KiQTEHkLIRNGD9TNDCgPVq-DRA-CjLgN9WXqwWULmSmfqA8G7-K4Y@rb.dd -DTSTART;VALUE=DATE:20241201 -DTEND;VALUE=DATE:20241202 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:UBdTEx6byCRdkNERd2ZDP2-DTA-HjoWN4EmrUnJnFdXwbp7VO-Idx@rb.dd -DTSTART;VALUE=DATE:20241208 -DTEND;VALUE=DATE:20241209 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:Kx7K3uRPVWpJkrLeyVbLZg-DSA-GKBLRiSOwhytM2JUyNasCR-LGy@rb.dd -DTSTART;VALUE=DATE:20241215 -DTEND;VALUE=DATE:20241216 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:C3aubGxKWBWKRZbEPIpqTG-DTA-K9iYN2aUAc9ZYBceU3eC3Q-E7H@rb.dd -DTSTART;VALUE=DATE:20241222 -DTEND;VALUE=DATE:20241223 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Weiberfastnacht) -UID:LmqH4eismFOcuonJrfh4Qw-DmA-Fmm7VawAUBphWJhFnjOUpS-B96@rb.dd -DTSTART;VALUE=DATE:20250227 -DTEND;VALUE=DATE:20250228 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Rosenmontag) -UID:eUgLBV24Ugwnj7WZQ2EGjA-DcA-K5wcQENN2zfgP7Vq6ynIox-KBE@rb.dd -DTSTART;VALUE=DATE:20250303 -DTEND;VALUE=DATE:20250304 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Fastnacht) -UID:Mk5GMkIrCoetDffHX6OpkS-DRA-KNthjE7pZfiM2QakrtgPkE-CZ5@rb.dd -DTSTART;VALUE=DATE:20250304 -DTEND;VALUE=DATE:20250305 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Aschermittwoch) -UID:TwkjqAs43ENOtugxLOxpUK-DcA-IKeqAym6xNQOmiHaHCIwNB-RBG@rb.dd -DTSTART;VALUE=DATE:20250305 -DTEND;VALUE=DATE:20250306 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Funkensonntag - Bauernfastnacht) -UID:Uyg73s64BP3G5tVVDwfKmk-CpA-IDBpBff7FB7hncMtAguN7u-IXb@rb.dd -DTSTART;VALUE=DATE:20250309 -DTEND;VALUE=DATE:20250310 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Morgestraich) -UID:VBQgfhFaBHKqzcCuAR5T8Y-DFA-JV97sRWkALLWGFgRdsIZpb-Fpy@rb.dd -DTSTART;VALUE=DATE:20250310 -DTEND;VALUE=DATE:20250311 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(Basler Fasnacht) -UID:ROefIKIWEQDbHiPCu3Mwiz-CmA-CWEpXD82DpH3IucnJUEH2A-Leo@rb.dd -DTSTART;VALUE=DATE:20250311 -DTEND;VALUE=DATE:20250312 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Näfelser Fahrt -UID:EVIHeyhb2Lsg8EWrAKeLCG-DeA-Bj4w7osKJBUCo2k79KL2RJ-OEx@rb.dd -DTSTART;VALUE=DATE:20250410 -DTEND;VALUE=DATE:20250411 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Karfreitag -UID:ID3QdOdJVKQmFPmXQ6cAXg-DXA-HKtn3L3GRhjzSr8WshtW3L-BXV@rb.dd -DTSTART;VALUE=DATE:20250418 -DTEND;VALUE=DATE:20250419 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostern -UID:QQr6K9NWez4metOLNnBwkz-CqA-HPTyZIhLnSr9TV4RyVUtjH-P5y@rb.dd -DTSTART;VALUE=DATE:20250420 -DTEND;VALUE=DATE:20250421 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Ostermontag -UID:NuiKR7Pj6u3NU3MU2pVLD9-DyA-Kb2jTJGBWRKmzeXSu7w5XP-Ku8@rb.dd -DTSTART;VALUE=DATE:20250421 -DTEND;VALUE=DATE:20250422 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Sechseläuten -UID:CWnaqBMKOzpkXH8qdGWSN7-DjA-Nu4w6teNdfIm99HeBgA5WA-FxA@rb.dd -DTSTART;VALUE=DATE:20250428 -DTEND;VALUE=DATE:20250429 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Auffahrt -UID:Oz7UHQBPSXrVj6o4ZUj42K-CzA-JhaSnENLbeVQcXLiKbRzuZ-KVU@rb.dd -DTSTART;VALUE=DATE:20250529 -DTEND;VALUE=DATE:20250530 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingsten -UID:U3eqqSDbtM98uVO4PbPV2I-C3A-JpD3ztsQBbrKYBDpwnD24q-MRi@rb.dd -DTSTART;VALUE=DATE:20250608 -DTEND;VALUE=DATE:20250609 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Pfingstmontag -UID:Kau9itoF2AF3Ooo8yqYZVx-ECA-xJExMU4GFgmd9ACELc8tYA-4xA@rb.dd -DTSTART;VALUE=DATE:20250609 -DTEND;VALUE=DATE:20250610 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Fronleichnam -UID:LItOChzMfWIGmboJInwQVP-JtA-IXQtNrXIwCdhk86D2Hj8zi-B5F@rb.dd -DTSTART;VALUE=DATE:20250619 -DTEND;VALUE=DATE:20250620 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Genfer Bettag -UID:Q8KYtfGyIGURrPfExXQkPj-DVA-KkzMVIHxgNGThFwWDjmGIy-OET@rb.dd -DTSTART;VALUE=DATE:20250901 -DTEND;VALUE=DATE:20250902 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:EiQSZwos9sARLPKQUppV3Z-DIA-KeydPzLuF6ZYahkV2QOJBN-IV5@rb.dd -DTSTART;VALUE=DATE:20250913 -DTEND;VALUE=DATE:20250914 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:NmdmkEFQ7PSaJdCeKVZG9Q-DIA-JEQPkGut3TgAguwDYEHcFo-SEs@rb.dd -DTSTART;VALUE=DATE:20250914 -DTEND;VALUE=DATE:20250915 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Knabenschiessen -UID:Qw5s2HPGZTzNBb3jyFm73x-D6A-FUVR6ngz4EHGuFqVTGcuGA-SWf@rb.dd -DTSTART;VALUE=DATE:20250915 -DTEND;VALUE=DATE:20250916 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:Bettagsmontag -UID:MR2ATWMEcDigpI8HHUXjnG-EFA-JMRVuyI6h9WAQPeHoBZt5d-Hs9@rb.dd -DTSTART;VALUE=DATE:20250922 -DTEND;VALUE=DATE:20250923 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(1. Advent) -UID:ObbMtUEw2477HBCJrOxuiS-DRA-DEMdpmKSauYP2SBOxeOqph-CZA@rb.dd -DTSTART;VALUE=DATE:20251130 -DTEND;VALUE=DATE:20251201 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(2. Advent) -UID:E3WOSjMAWtJVwfSMPXxaR9-DTA-FJ2BXiQ3zOrB6uDDdcsgfV-CP5@rb.dd -DTSTART;VALUE=DATE:20251207 -DTEND;VALUE=DATE:20251208 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(3. Advent) -UID:SDapuDFJ7TG9GVEnBm8A49-DSA-KEBSj4OVyYbstmuTBVq3qA-QVM@rb.dd -DTSTART;VALUE=DATE:20251214 -DTEND;VALUE=DATE:20251215 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SUMMARY:(4. Advent) -UID:RL2MhCWHIgxgzr4PVci4B8-DTA-Gi67wIVN6LLZwNJRRhboN2-PyU@rb.dd -DTSTART;VALUE=DATE:20251221 -DTEND;VALUE=DATE:20251222 +SUMMARY:Christmas holidays +DTSTART;VALUE=DATE:20191223 +DTEND;VALUE=DATE:20200104 +UID:ferien2019-453624-fcal.ch STATUS:CONFIRMED END:VEVENT END:VCALENDAR From 07a1f4c1b26f94ff14f68aed5d05fdd741ac3100 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 21:39:52 +0200 Subject: [PATCH 44/99] updating the "Holidays import successfully" string --- app/src/main/res/values-az/strings.xml | 2 +- app/src/main/res/values-br/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-hi-rIN/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-iw/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-nb/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-no/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 6 +++--- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 28 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 0c443df60..80effc6be 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -130,7 +130,7 @@ Bayram əlavə et Milli bayramlar Dini bayramlar - Bayramlar uğurla yeni hadisə tipinə daxil edildi + Holidays have been successfully imported into the \"Holidays\" event type Bəzi bayramları daxil etmək alınmadı Bayramları daxil etmək alınmadı diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index a88238d36..276a433df 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -130,7 +130,7 @@ Ouzhpennañ devezhioù gouel Devezhioù gouel broadel Devezhioù gouel relijiel - An devezhioù gouel a zo bet enporzhiet en un doare darvoud nevez gant berzh + Holidays have been successfully imported into the \"Holidays\" event type C\'hwitadenn en ur enporzhiañ ul lodenn eus an darvoudoù C\'hwitadenn en ur enporzhiañ ul lodenn eus an devezhioù gouel diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ab211b94d..b8e81ffcd 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -130,7 +130,7 @@ Přidat svátek Státní svátky Církevní svátky - Svátky byly úspěšně importovány do nového typu události + Holidays have been successfully imported into the \"Holidays\" event type Import některých událostí se nezdařil Import svátků nezdařil diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index e862eb49c..0be6e247d 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -130,7 +130,7 @@ Tilføj helligdage Nationale helligdage Religiøse helligdage - Helligdage er importeret til en ny begivenhedstype + Holidays have been successfully imported into the \"Holidays\" event type Nogle helligdages blev ikke importeret Import af helligdage mislykkedes diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2ee73b187..3d69df27d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -130,7 +130,7 @@ Feiertage hinzufügen Nationale Feiertage Religiöse Feiertage - Feiertage wurden erfolgreich in einen neuen Termintypen importiert + Holidays have been successfully imported into the \"Holidays\" event type Importieren einiger Termine fehlgeschlagen Importieren von Feiertagen fehlgeschlagen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3624b05ca..48261cd97 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -130,7 +130,7 @@ Añadir festivos Fiestas nacionales Fiestas regionales - Los días festivos se han importado correctamente a un nuevo tipo de evento + Holidays have been successfully imported into the \"Holidays\" event type Ha habido un fallo al importar eventos Ha habido un fallo al importar días festivos diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9094a6955..10b89574c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -130,7 +130,7 @@ Ajouter des jours fériés Jours fériés nationaux Jours fériés religieux - Les jours fériés ont été importés dans un nouveau type d\'événement avec succès + Holidays have been successfully imported into the \"Holidays\" event type L\'import de certains événements a échoué L\'import des jours fériés a échoué diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 55d357ad6..01023df66 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -130,7 +130,7 @@ Engadir días festivos Festivo nacional Festas relixiosas - Engadíronse correctamente os días festivos nun novo tipo de evento + Holidays have been successfully imported into the \"Holidays\" event type Fallou a importación de algúns eventos Fallou a importación de días festivos diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 95f8f58e8..10887d0ad 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -131,7 +131,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index a97feaf98..a80b24e0f 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -130,7 +130,7 @@ Dodaj praznik Nacionalni praznici Vjerski praznici - Praznici su uspješno uvezeni u novu vrstu događaja + Holidays have been successfully imported into the \"Holidays\" event type Uvoz nekih događaja nije uspio Uvoz praznika nije uspio diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 9d64ddb5e..9cc280f96 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -130,7 +130,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 584c5536d..ee496e97b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -130,7 +130,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 6bf194f48..5fc713f1c 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -131,7 +131,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 0d088a54b..6a5f0d28c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -130,7 +130,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 78b572c04..979d16bbc 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -130,7 +130,7 @@ 공휴일 추가 국경일 종교 휴일 - 공휴일을 새 이벤트 유형으로 가져왔습니다 + Holidays have been successfully imported into the \"Holidays\" event type 일부 이벤트를 가져오지 못했습니다 공휴일을 가져오는데 실패했습니다 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 900ca87f8..8d3581c48 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -130,7 +130,7 @@ Įtraukti atostogas Nacionalinės atostogos Religinės atostogos - Atostogos sėkmingai importuotos į naujo įvykio tipą + Holidays have been successfully imported into the \"Holidays\" event type Kai kurių įvykių importavimas nepavyko Atostogų importavimas nepavyko diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 7916a5b72..fc68aee5c 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -130,7 +130,7 @@ Legg til off. fridager Nasjonale off. fridager Religiøse off. fridager - Off. fridager er vellykket importert til en ny hendelsestype + Holidays have been successfully imported into the \"Holidays\" event type Importering av noen hendelser feilet Importering av off. fridager feilet diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 214359cfc..8a2b0d852 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -130,7 +130,7 @@ Feestdagen toevoegen Nationale feestdagen Religieuze feestdagen - Feestdagen geïmporteerd als nieuw afspraaktype + Holidays have been successfully imported into the \"Holidays\" event type Sommige feestdagen konden niet worden geïmporteerd Fout bij importeren van feestdagen diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 40b0cc41c..cfd66487c 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -130,7 +130,7 @@ Legg til off. fridager Nasjonale off. fridager Religiøse off. fridager - Off. fridager er vellykket importert til en ny hendelsestype + Holidays have been successfully imported into the \"Holidays\" event type Importering av noen hendelser feilet Importering av off. fridager feilet diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index b408b5109..b7a3e800f 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -130,7 +130,7 @@ Dodaj święto Święta państwowe Święta religijne - Święta zostały pomyślnie zaimportowane do nowego typu wydarzeń + Holidays have been successfully imported into the \"Holidays\" event type Importowanie niektórych świąt nie powiodło się Importowanie świąt nie powiodło się diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e43ce784e..b90c91fcf 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -130,7 +130,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index efad879e2..bbc3fa11b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -130,7 +130,7 @@ Adicionar feriados Feriados nacionais Feriados religiosos - Os feriados foram importados para um novo tipo de evento + Holidays have been successfully imported into the \"Holidays\" event type Alguns eventos não foram importados Falha ao importar os feriados diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1e2770a51..cf436a4fe 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -130,7 +130,7 @@ Добавить праздники Национальные праздники Религиозные праздники - Праздники были успешно импортированы в новый тип событий + Holidays have been successfully imported into the \"Holidays\" event type Не удалось импортировать некоторые события Не удалось импортировать праздники diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index d9fe55846..ed87201ae 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -121,9 +121,6 @@ Bežná udalosť Predvolený typ nie je možné vymazať Zvoľte typ udalosti - Sviatky boli úspešne importované do nového typu udalostí - Importovanie niektorých sviatkov zlyhalo - Importovanie udalostí zlyhalo Presunúť dotknuté udalosti do predvoleného typu udalostí Natrvalo odstrániť dotknuté udalosti Na odstránenie CalDAV kalendára musíte vypnúť jeho synchronizáciu @@ -133,6 +130,9 @@ Pridať sviatky Štátne sviatky Náboženské sviatky + Sviatky boli úspešne importované do nového typu udalostí \"Sviatky\" + Importovanie niektorých sviatkov zlyhalo + Importovanie udalostí zlyhalo Spravovať typy udalostí diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 4cfb7d7ae..49d600522 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -130,7 +130,7 @@ Lägg till helgdagar Nationella helgdagar Religiösa helgdagar - Helgdagar har importerats till en ny händelsetyp + Holidays have been successfully imported into the \"Holidays\" event type Vissa händelser kunde inte importeras Helgdagar kunde inte importeras diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e516f1b57..a73366b78 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -130,7 +130,7 @@ Tatil ekle National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4ec24bb96..ae8135ffb 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -130,7 +130,7 @@ 添加節日 國定節日 宗教節日 - 節日成功匯入新活動類型 + Holidays have been successfully imported into the \"Holidays\" event type 匯入一些活動失敗 匯入節日失敗 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fad828cb1..d569e6a5e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -130,7 +130,7 @@ Add holidays National holidays Religious holidays - Holidays have been successfully imported into a new event type + Holidays have been successfully imported into the \"Holidays\" event type Importing some events failed Importing holidays failed From ee818835084edce80aeceaead304b34f228f11cb Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 21:51:36 +0200 Subject: [PATCH 45/99] updating some chinese events lasting multiple days --- app/src/main/assets/china.ics | 140 ---------------------------------- 1 file changed, 140 deletions(-) diff --git a/app/src/main/assets/china.ics b/app/src/main/assets/china.ics index 9022a5f14..b726e5021 100644 --- a/app/src/main/assets/china.ics +++ b/app/src/main/assets/china.ics @@ -9,48 +9,6 @@ END:VEVENT BEGIN:VEVENT UID:enrico-chn-20180215@kayaposoft.com DTSTART;VALUE=DATE:20180215 -DTEND;VALUE=DATE:20180216 -SUMMARY:春节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180216@kayaposoft.com -DTSTART;VALUE=DATE:20180216 -DTEND;VALUE=DATE:20180217 -SUMMARY:春节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180217@kayaposoft.com -DTSTART;VALUE=DATE:20180217 -DTEND;VALUE=DATE:20180218 -SUMMARY:春节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180218@kayaposoft.com -DTSTART;VALUE=DATE:20180218 -DTEND;VALUE=DATE:20180219 -SUMMARY:春节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180219@kayaposoft.com -DTSTART;VALUE=DATE:20180219 -DTEND;VALUE=DATE:20180220 -SUMMARY:春节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180220@kayaposoft.com -DTSTART;VALUE=DATE:20180220 -DTEND;VALUE=DATE:20180221 -SUMMARY:春节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180221@kayaposoft.com -DTSTART;VALUE=DATE:20180221 DTEND;VALUE=DATE:20180222 SUMMARY:春节 STATUS:CONFIRMED @@ -58,20 +16,6 @@ END:VEVENT BEGIN:VEVENT UID:enrico-chn-20180405@kayaposoft.com DTSTART;VALUE=DATE:20180405 -DTEND;VALUE=DATE:20180406 -SUMMARY:清明节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180406@kayaposoft.com -DTSTART;VALUE=DATE:20180406 -DTEND;VALUE=DATE:20180407 -SUMMARY:清明节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180407@kayaposoft.com -DTSTART;VALUE=DATE:20180407 DTEND;VALUE=DATE:20180408 SUMMARY:清明节 STATUS:CONFIRMED @@ -79,20 +23,6 @@ END:VEVENT BEGIN:VEVENT UID:enrico-chn-20180429@kayaposoft.com DTSTART;VALUE=DATE:20180429 -DTEND;VALUE=DATE:20180430 -SUMMARY:劳动节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180430@kayaposoft.com -DTSTART;VALUE=DATE:20180430 -DTEND;VALUE=DATE:20180501 -SUMMARY:劳动节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180501@kayaposoft.com -DTSTART;VALUE=DATE:20180501 DTEND;VALUE=DATE:20180502 SUMMARY:劳动节 STATUS:CONFIRMED @@ -100,20 +30,6 @@ END:VEVENT BEGIN:VEVENT UID:enrico-chn-20180616@kayaposoft.com DTSTART;VALUE=DATE:20180616 -DTEND;VALUE=DATE:20180617 -SUMMARY:端午节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180617@kayaposoft.com -DTSTART;VALUE=DATE:20180617 -DTEND;VALUE=DATE:20180618 -SUMMARY:端午节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180618@kayaposoft.com -DTSTART;VALUE=DATE:20180618 DTEND;VALUE=DATE:20180619 SUMMARY:端午节 STATUS:CONFIRMED @@ -121,20 +37,6 @@ END:VEVENT BEGIN:VEVENT UID:enrico-chn-20180922@kayaposoft.com DTSTART;VALUE=DATE:20180922 -DTEND;VALUE=DATE:20180923 -SUMMARY:中秋节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180923@kayaposoft.com -DTSTART;VALUE=DATE:20180923 -DTEND;VALUE=DATE:20180924 -SUMMARY:中秋节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20180924@kayaposoft.com -DTSTART;VALUE=DATE:20180924 DTEND;VALUE=DATE:20180925 SUMMARY:中秋节 STATUS:CONFIRMED @@ -142,48 +44,6 @@ END:VEVENT BEGIN:VEVENT UID:enrico-chn-20181001@kayaposoft.com DTSTART;VALUE=DATE:20181001 -DTEND;VALUE=DATE:20181002 -SUMMARY:国庆节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20181002@kayaposoft.com -DTSTART;VALUE=DATE:20181002 -DTEND;VALUE=DATE:20181003 -SUMMARY:国庆节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20181003@kayaposoft.com -DTSTART;VALUE=DATE:20181003 -DTEND;VALUE=DATE:20181004 -SUMMARY:国庆节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20181004@kayaposoft.com -DTSTART;VALUE=DATE:20181004 -DTEND;VALUE=DATE:20181005 -SUMMARY:国庆节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20181005@kayaposoft.com -DTSTART;VALUE=DATE:20181005 -DTEND;VALUE=DATE:20181006 -SUMMARY:国庆节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20181006@kayaposoft.com -DTSTART;VALUE=DATE:20181006 -DTEND;VALUE=DATE:20181007 -SUMMARY:国庆节 -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -UID:enrico-chn-20181007@kayaposoft.com -DTSTART;VALUE=DATE:20181007 DTEND;VALUE=DATE:20181008 SUMMARY:国庆节 STATUS:CONFIRMED From 8d1a2fabe0aedac669bf3937c1354c4a1209e6b4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 21:55:27 +0200 Subject: [PATCH 46/99] delete event types on a background thread --- .../calendar/activities/ManageEventTypesActivity.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt index 02829afcc..15085336f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt @@ -62,11 +62,13 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener { } } - dbHelper.deleteEventTypes(eventTypes, deleteEvents) { - if (it == 0) { - toast(R.string.unknown_error_occurred) + Thread { + dbHelper.deleteEventTypes(eventTypes, deleteEvents) { + if (it == 0) { + toast(R.string.unknown_error_occurred) + } } - } + }.start() return true } } From 1f9a21008afd329d6423a85b2db7e054f9dfccf6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 22:30:09 +0200 Subject: [PATCH 47/99] fix #410, use bulk inserting at importing ics files for better performance --- .../calendar/helpers/DBHelper.kt | 29 +++++++++++++++++++ .../calendar/helpers/IcsImporter.kt | 15 +++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt index d2ba62ed1..acff07eac 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/DBHelper.kt @@ -225,6 +225,35 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont callback(event.id) } + fun insertEvents(events: ArrayList, addToCalDAV: Boolean) { + mDb.beginTransaction() + try { + for (event in events) { + if (event.startTS > event.endTS) { + continue + } + + val eventValues = fillEventValues(event) + val id = mDb.insert(MAIN_TABLE_NAME, null, eventValues) + event.id = id.toInt() + + if (event.repeatInterval != 0 && event.parentId == 0) { + val metaValues = fillMetaValues(event) + mDb.insert(META_TABLE_NAME, null, metaValues) + } + + context.scheduleNextEventReminder(event, this) + if (addToCalDAV && event.source != SOURCE_SIMPLE_CALENDAR && context.config.caldavSync) { + CalDAVHandler(context).insertCalDAVEvent(event) + } + } + mDb.setTransactionSuccessful() + } finally { + mDb.endTransaction() + context.updateWidgets() + } + } + fun update(event: Event, updateAtCalDAV: Boolean, callback: (() -> Unit)? = null) { val values = fillEventValues(event) val selection = "$COL_ID = ?" diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt index 947254241..86b9438e9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt @@ -43,6 +43,7 @@ class IcsImporter(val activity: SimpleActivity) { fun importEvents(path: String, defaultEventType: Int, calDAVCalendarId: Int): ImportResult { try { val existingEvents = activity.dbHelper.getEventsWithImportIds() + val eventsToInsert = ArrayList() var prevLine = "" val inputStream = if (path.contains("/")) { @@ -148,11 +149,15 @@ class IcsImporter(val activity: SimpleActivity) { } if (eventToUpdate == null) { - activity.dbHelper.insert(event, true) { - for (exceptionTS in curRepeatExceptions) { - activity.dbHelper.addEventRepeatException(it, exceptionTS, true) + if (curRepeatExceptions.isEmpty()) { + eventsToInsert.add(event) + } else { + activity.dbHelper.insert(event, true) { + for (exceptionTS in curRepeatExceptions) { + activity.dbHelper.addEventRepeatException(it, exceptionTS, true) + } + existingEvents.add(event) } - existingEvents.add(event) } } else { event.id = eventToUpdate.id @@ -164,6 +169,8 @@ class IcsImporter(val activity: SimpleActivity) { prevLine = line } } + + activity.dbHelper.insertEvents(eventsToInsert, true) } catch (e: Exception) { activity.showErrorToast(e, Toast.LENGTH_LONG) eventsFailed++ From 6d0ed93536ada3205f5b6823c48fee58540049ab Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 27 Mar 2018 22:57:06 +0200 Subject: [PATCH 48/99] update commons to 3.17.4 --- app/build.gradle | 2 +- .../com/simplemobiletools/calendar/helpers/IcsImporter.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a58103c20..d8fab3ec3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.17.3' + implementation 'com.simplemobiletools:commons:3.17.4' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt index 86b9438e9..eff91f071 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsImporter.kt @@ -132,7 +132,6 @@ class IcsImporter(val activity: SimpleActivity) { continue } - val eventToUpdate = existingEvents.firstOrNull { curImportId.isNotEmpty() && curImportId == it.importId } if (eventToUpdate != null && eventToUpdate.lastUpdated >= curLastModified) { continue From b48681793d9b4984dd837b1c03c15d00cc4c9a12 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 11:10:05 +0200 Subject: [PATCH 49/99] change the date format at notification, if we show the date --- .../kotlin/com/simplemobiletools/calendar/extensions/Context.kt | 2 +- .../kotlin/com/simplemobiletools/calendar/helpers/Formatter.kt | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 49136f8ae..e12ff3889 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -162,7 +162,7 @@ fun Context.notifyEvent(event: Event) { val displayedStartDate = when (startDate) { LocalDate.now() -> "" LocalDate.now().plusDays(1) -> getString(R.string.tomorrow) - else -> Formatter.getDayAndMonth(startDate) + else -> "${Formatter.getDateFromCode(this, Formatter.getDayCodeFromTS(event.startTS))}," } val timeRange = if (event.getIsAllDay()) getString(R.string.all_day) else getFormattedEventTime(startTime, endTime) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Formatter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Formatter.kt index 4a0d8f51d..0bfe927db 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Formatter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Formatter.kt @@ -107,6 +107,4 @@ object Formatter { } fun getShiftedImportTimestamp(ts: Int) = getUTCDateTimeFromTS(ts).withTime(13, 0, 0, 0).withZoneRetainFields(DateTimeZone.getDefault()).seconds() - - fun getDayAndMonth(localDate: LocalDate) = localDate.toString("dd.MM.") } From 026ef7a1c16b211d61d92b30c59562452a408724 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 13:37:27 +0200 Subject: [PATCH 50/99] update commons to 3.17.5 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index d8fab3ec3..13d21ef37 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.17.4' + implementation 'com.simplemobiletools:commons:3.17.5' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' From 2ad7b679a73bd77108151adb8209bd137e719d3c Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 14:00:53 +0200 Subject: [PATCH 51/99] use the old month layout for widget config screen --- .../WidgetMonthlyConfigureActivity.kt | 10 +- .../layout/fragment_month_widget_config.xml | 505 ++++++++++++++++++ .../main/res/layout/widget_config_monthly.xml | 2 +- 3 files changed, 511 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/layout/fragment_month_widget_config.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt index 9861b53f0..cb9dceb81 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt @@ -152,9 +152,9 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { } private fun updateDays() { - /*val len = mDays!!.size + val len = mDays!!.size - if (applicationContext.config.displayWeekNumbers) { + if (applicationContext.config.showWeekNumbers) { week_num.setTextColor(mTextColor) week_num.beVisible() @@ -176,7 +176,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { context.addDayNumber(mTextColor, day, this, dayLabelHeight) { dayLabelHeight = it } context.addDayEvents(day, this, mRes, dividerMargin) } - }*/ + } } private val bgSeekbarChangeListener = object : SeekBar.OnSeekBarChangeListener { @@ -203,10 +203,10 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { } private fun updateLabels() { - /*for (i in 0..6) { + for (i in 0..6) { findViewById(mRes.getIdentifier("label_$i", "id", mPackageName)).apply { setTextColor(mTextColor) } - }*/ + } } } diff --git a/app/src/main/res/layout/fragment_month_widget_config.xml b/app/src/main/res/layout/fragment_month_widget_config.xml new file mode 100644 index 000000000..a7c627fdb --- /dev/null +++ b/app/src/main/res/layout/fragment_month_widget_config.xml @@ -0,0 +1,505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/widget_config_monthly.xml b/app/src/main/res/layout/widget_config_monthly.xml index f96a3f1d5..a62067ac6 100644 --- a/app/src/main/res/layout/widget_config_monthly.xml +++ b/app/src/main/res/layout/widget_config_monthly.xml @@ -9,7 +9,7 @@ Date: Wed, 28 Mar 2018 14:02:54 +0200 Subject: [PATCH 52/99] make sure month fragment clickable background is properly added --- .../com/simplemobiletools/calendar/views/MonthViewWrapper.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt index 1d0d7fe1b..ab6aa4bdd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt @@ -34,6 +34,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F onGlobalLayout { if (!wereViewsAdded && days.isNotEmpty()) { + measureSizes() addViews() monthView.updateDays(days) } @@ -45,7 +46,9 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F measureSizes() dayClickCallback = callback days = newDays - addViews() + if (dayWidth != 0f && dayHeight != 0f) { + addViews() + } monthView.updateDays(days) } From 1297b88918b7cb0b74187f0433b53a07779ffdce Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 14:13:12 +0200 Subject: [PATCH 53/99] make sure the notification sound uses the system stream --- .../com/simplemobiletools/calendar/extensions/Context.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index e12ff3889..6fbeaf7a8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -10,6 +10,7 @@ import android.content.Context import android.content.Intent import android.content.res.Resources import android.database.ContentObserver +import android.media.AudioManager import android.net.Uri import android.os.Bundle import android.provider.CalendarContract @@ -204,7 +205,7 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even .setPriority(Notification.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_LIGHTS) .setAutoCancel(true) - .setSound(soundUri) + .setSound(soundUri, AudioManager.STREAM_SYSTEM) .setChannelId(channelId) .addAction(R.drawable.ic_snooze, context.getString(R.string.snooze), getSnoozePendingIntent(context, event)) From a497871d6bf91c3f92219d178bf17bf5e1ac5307 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 14:43:56 +0200 Subject: [PATCH 54/99] fix a glitch at month view screen with updating day height --- .../simplemobiletools/calendar/views/MonthViewWrapper.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt index ab6aa4bdd..0a3ff142d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthViewWrapper.kt @@ -58,7 +58,12 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F private fun measureSizes() { dayWidth = (width - horizontalOffset) / 7f - dayHeight = (height - weekDaysLetterHeight) / 6f + + // avoid updating the height when coming back from a new event screen, when the keyboard was visible + val newHeight = (height - weekDaysLetterHeight) / 6f + if (newHeight > dayHeight) { + dayHeight = (height - weekDaysLetterHeight) / 6f + } } private fun addViews() { From 8acf0902534bfd349ffb5945a23e4e7c1086eed9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 14:53:03 +0200 Subject: [PATCH 55/99] update version to 3.4.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 13d21ef37..228092fbf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.simplemobiletools.calendar" minSdkVersion 16 targetSdkVersion 27 - versionCode 115 - versionName "3.3.2" + versionCode 116 + versionName "3.4.0" multiDexEnabled true setProperty("archivesBaseName", "calendar") } From 4edc92a377e82c84b4025a3f075ed072375b2494 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 28 Mar 2018 14:54:51 +0200 Subject: [PATCH 56/99] updating changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 595808544..4875bd6a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========== +Version 3.4.0 *(2018-02-28)* +---------------------------- + + * Rewrote the monthly view + * Improved the performance at importing events from ics files + * Added many new country holidays + * Handle some new third party intents + Version 3.3.2 *(2018-02-21)* ---------------------------- From ab280f98a3678b9bf923996a948362ca1f6570e1 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Wed, 28 Mar 2018 20:23:16 +0200 Subject: [PATCH 57/99] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 8a2b0d852..c3d0bf812 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -130,7 +130,7 @@ Feestdagen toevoegen Nationale feestdagen Religieuze feestdagen - Holidays have been successfully imported into the \"Holidays\" event type + De feestdagen zijn geïmporteerd onder afspraaktype \"Feestdagen\" Sommige feestdagen konden niet worden geïmporteerd Fout bij importeren van feestdagen From 49c37cc246553df67509f1090ff80aa5be16e677 Mon Sep 17 00:00:00 2001 From: dugi991 Date: Wed, 28 Mar 2018 22:06:06 +0000 Subject: [PATCH 58/99] Update strings.xml Translated the newly added line on 133, fixed a translation on line 12. --- app/src/main/res/values-hr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index a80b24e0f..763c2e967 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -9,7 +9,7 @@ Godišnji pregled Jednostavan popis događaja Izgleda da nemate nadolazećih događaja. - Možete dodati neke događaje s gumbom Plus na dnu. + Možete dodati neke događaje pomoću ikone Plus na dnu. Idi na danas @@ -130,7 +130,7 @@ Dodaj praznik Nacionalni praznici Vjerski praznici - Holidays have been successfully imported into the \"Holidays\" event type + Praznici su uspješno uvezeni u tip događaja \"Praznici\" Uvoz nekih događaja nije uspio Uvoz praznika nije uspio From 8b273509583c67594dbfef62379d73327740255b Mon Sep 17 00:00:00 2001 From: 10cents Date: Thu, 29 Mar 2018 14:29:45 +0200 Subject: [PATCH 59/99] holidays_imported_successfully --- app/src/main/res/values-da/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 0be6e247d..7eec7e037 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -130,7 +130,7 @@ Tilføj helligdage Nationale helligdage Religiøse helligdage - Holidays have been successfully imported into the \"Holidays\" event type + Helligdage er importeret til typen \"Helligdage\" Nogle helligdages blev ikke importeret Import af helligdage mislykkedes From 97a6b1543076edcc38dddf87d92a6158d8aaac49 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 29 Mar 2018 19:26:40 +0200 Subject: [PATCH 60/99] fix repetition multiple days a week in a row --- .../kotlin/com/simplemobiletools/calendar/views/MonthView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index aa8f527d9..2eec0dd8d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -96,7 +96,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con // make sure we properly handle events lasting multiple days and repeating ones val lastEvent = allEvents.lastOrNull { it.id == event.id } val daysCnt = getEventLastingDaysCount(event) - if (lastEvent == null || lastEvent.startDayIndex + daysCnt < day.indexOnMonthView) { + if (lastEvent == null || lastEvent.startDayIndex + daysCnt <= day.indexOnMonthView) { val monthViewEvent = MonthViewEvent(event.id, event.title, event.startTS, event.color, day.indexOnMonthView, daysCnt, day.indexOnMonthView, event.getIsAllDay()) allEvents.add(monthViewEvent) From 5943d0991ec0e6f1c99903f109c635a012820cf8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 29 Mar 2018 20:13:26 +0200 Subject: [PATCH 61/99] optimize event getting at month views a bit + fix some glitches --- .../calendar/activities/WidgetMonthlyConfigureActivity.kt | 2 +- .../calendar/fragments/MonthFragmentsHolder.kt | 2 +- .../simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt | 4 ++-- .../calendar/helpers/MyWidgetMonthlyProvider.kt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt index cb9dceb81..fc1b07437 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt @@ -88,7 +88,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { config_bg_seekbar.progress = (mBgAlpha * 100).toInt() updateBgColor() - MonthlyCalendarImpl(this, applicationContext).updateMonthlyCalendar(DateTime(), false) + MonthlyCalendarImpl(this, applicationContext).updateMonthlyCalendar(DateTime().withDayOfMonth(1), false) } private fun saveConfig() { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt index a22bfe593..2e82217c1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt @@ -72,7 +72,7 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener { private fun getMonths(code: String): List { val months = ArrayList(PREFILLED_MONTHS) - val today = Formatter.getDateTimeFromCode(code) + val today = Formatter.getDateTimeFromCode(code).withDayOfMonth(1) for (i in -PREFILLED_MONTHS / 2..PREFILLED_MONTHS / 2) { months.add(Formatter.getDayCodeFromDateTime(today.plusMonths(i))) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt index bbefee5dc..2c6fa6b5d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MonthlyCalendarImpl.kt @@ -25,8 +25,8 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) fun updateMonthlyCalendar(targetDate: DateTime, filterEventTypes: Boolean = true) { mFilterEventTypes = filterEventTypes mTargetDate = targetDate - val startTS = mTargetDate.minusMonths(1).seconds() - val endTS = mTargetDate.plusMonths(1).seconds() + val startTS = mTargetDate.minusDays(7).seconds() + val endTS = mTargetDate.plusDays(43).seconds() mContext.dbHelper.getEvents(startTS, endTS) { gotEvents(it as ArrayList) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt index d2a777666..cf707ea24 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/MyWidgetMonthlyProvider.kt @@ -24,7 +24,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() { private val NEW_EVENT = "new_event" companion object { - private var targetDate = DateTime.now() + private var targetDate = DateTime.now().withDayOfMonth(1) } override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { From 5caaf5832bd74022a0c1b26ccd5a4f1e8d02f531 Mon Sep 17 00:00:00 2001 From: fricyo <30796677+fricyo@users.noreply.github.com> Date: Fri, 30 Mar 2018 15:33:52 +0800 Subject: [PATCH 62/99] Creat Chinese(TW) Translation --- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ae8135ffb..05546a3c1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -8,7 +8,7 @@ 月曆 年曆 簡易活動列表 - 看來你近期沒有任何活動。 + 你近期似乎沒有任何活動。 你可以用底部的[加號]按鈕添加一些活動。 前往今天 @@ -130,7 +130,7 @@ 添加節日 國定節日 宗教節日 - Holidays have been successfully imported into the \"Holidays\" event type + 節日已成功匯入"節日"活動類型 匯入一些活動失敗 匯入節日失敗 From 913ec2b1c3fabea908cdc5aedd75e50ad77f7338 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 10:33:35 +0200 Subject: [PATCH 63/99] adding a crashfix in MonthView --- .../kotlin/com/simplemobiletools/calendar/views/MonthView.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 2eec0dd8d..66c5f71f0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -158,7 +158,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con for (i in 0 until ROW_COUNT) { // fourth day of the week matters - val id = "${days[i * 7 + 3].weekOfYear}:" + val weekOfYear = days.getOrNull(i * 7 + 3)?.weekOfYear ?: 1 + val id = "$weekOfYear:" val yPos = i * dayHeight + weekDaysLetterHeight canvas.drawText(id, horizontalOffset.toFloat(), yPos + paint.textSize, weekNumberPaint) From 134fd58c1a888ade97fb0436a4c2cd486cff6878 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 10:50:26 +0200 Subject: [PATCH 64/99] use a background thread for scheduling things after boot --- .../calendar/receivers/BootCompletedReceiver.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt index 96c163240..d6aec0c36 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/BootCompletedReceiver.kt @@ -9,11 +9,13 @@ import com.simplemobiletools.calendar.extensions.scheduleAllEvents class BootCompletedReceiver : BroadcastReceiver() { - override fun onReceive(context: Context, arg1: Intent) { - context.apply { - scheduleAllEvents() - notifyRunningEvents() - recheckCalDAVCalendars {} - } + override fun onReceive(context: Context, intent: Intent) { + Thread { + context.apply { + scheduleAllEvents() + notifyRunningEvents() + recheckCalDAVCalendars {} + } + }.start() } } From 16e10a07de3958712e1751a735f2252a2272f1cc Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 11:10:05 +0200 Subject: [PATCH 65/99] use AlarmManagerCompat for scheduling event reminders --- .../simplemobiletools/calendar/extensions/Context.kt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 6fbeaf7a8..45ce47f6c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -14,6 +14,7 @@ import android.media.AudioManager import android.net.Uri import android.os.Bundle import android.provider.CalendarContract +import android.support.v4.app.AlarmManagerCompat import android.support.v4.app.NotificationCompat import android.view.Gravity import android.view.View @@ -32,9 +33,7 @@ import com.simplemobiletools.calendar.receivers.CalDAVSyncReceiver import com.simplemobiletools.calendar.receivers.NotificationReceiver import com.simplemobiletools.calendar.services.SnoozeService import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.isKitkatPlus import com.simplemobiletools.commons.helpers.isLollipopPlus -import com.simplemobiletools.commons.helpers.isMarshmallowPlus import com.simplemobiletools.commons.helpers.isOreoPlus import org.joda.time.DateTime import org.joda.time.DateTimeZone @@ -110,12 +109,7 @@ fun Context.scheduleEventIn(notifTS: Long, event: Event) { val pendingIntent = getNotificationIntent(applicationContext, event) val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager - - when { - isMarshmallowPlus() -> alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, notifTS, pendingIntent) - isKitkatPlus() -> alarmManager.setExact(AlarmManager.RTC_WAKEUP, notifTS, pendingIntent) - else -> alarmManager.set(AlarmManager.RTC_WAKEUP, notifTS, pendingIntent) - } + AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, notifTS, pendingIntent) } fun Context.cancelNotification(id: Int) { From 943280dce02c4d79d30b0494627ce734cf2b2f76 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 11:12:29 +0200 Subject: [PATCH 66/99] removing some redundant code from MonthFragment --- .../calendar/fragments/MonthFragment.kt | 52 ------------------- 1 file changed, 52 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt index 52983243c..2db429489 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragment.kt @@ -34,7 +34,6 @@ class MonthFragment : Fragment(), MonthlyCalendar { private var mShowWeekNumbers = false private var mDayCode = "" private var mPackageName = "" - private var mDayLabelHeight = 0 private var mLastHash = 0L private var mCalendar: MonthlyCalendarImpl? = null @@ -54,7 +53,6 @@ class MonthFragment : Fragment(), MonthlyCalendar { storeStateVariables() setupButtons() - setupLabels() mCalendar = MonthlyCalendarImpl(this, context!!) return view @@ -67,10 +65,6 @@ class MonthFragment : Fragment(), MonthlyCalendar { override fun onResume() { super.onResume() - if (mConfig.isSundayFirst != mSundayFirst) { - setupLabels() - } - if (mConfig.showWeekNumbers != mShowWeekNumbers) { mLastHash = -1L } @@ -163,55 +157,9 @@ class MonthFragment : Fragment(), MonthlyCalendar { listener?.goToDateTime(newDateTime) } - private fun setupLabels() { - /*val letters = context!!.resources.getStringArray(R.array.week_day_letters) - for (i in 0..6) { - var index = i - if (mSundayFirst) { - index = (index + 6) % letters.size - } - - mHolder.findViewById(mRes.getIdentifier("label_$i", "id", mPackageName)).apply { - setTextColor(mTextColor) - text = letters[index] - } - }*/ - } - private fun updateDays(days: ArrayList) { mHolder.month_view_wrapper.updateDays(days) { (activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(it.code)) } - - /*val displayWeekNumbers = mConfig.displayWeekNumbers - val len = days.size - - if (week_num == null) - return - - week_num.setTextColor(mTextColor) - week_num.beVisibleIf(displayWeekNumbers) - - for (i in 0..5) { - mHolder.findViewById(mRes.getIdentifier("week_num_$i", "id", mPackageName)).apply { - text = "${days[i * 7 + 3].weekOfYear}:" // fourth day of the week matters - setTextColor(mTextColor) - beVisibleIf(displayWeekNumbers) - } - } - - val dividerMargin = mRes.displayMetrics.density.toInt() - for (i in 0 until len) { - mHolder.findViewById(mRes.getIdentifier("day_$i", "id", mPackageName)).apply { - val day = days[i] - setOnClickListener { - (activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(day.code)) - } - - removeAllViews() - context.addDayNumber(mTextColor, day, this, mDayLabelHeight) { mDayLabelHeight = it } - context.addDayEvents(day, this, mRes, dividerMargin) - } - }*/ } } From b43f63a1424533e4a7aa865cea09188ce231df00 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 11:24:30 +0200 Subject: [PATCH 67/99] set proper default day at pressing "Plus" on monthly view --- .../calendar/fragments/MonthFragmentsHolder.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt index 2e82217c1..7f71acd7e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/MonthFragmentsHolder.kt @@ -108,5 +108,5 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener { (activity as MainActivity).supportActionBar?.title = getString(R.string.app_launcher_name) } - override fun getNewEventDayCode() = currentDayCode + override fun getNewEventDayCode() = if (shouldGoToTodayBeVisible()) currentDayCode else todayDayCode } From c9146b10afecb4db93e43bb8c300f21009550085 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 17:27:49 +0200 Subject: [PATCH 68/99] adding the alarm sound picker dialog from Commons --- app/build.gradle | 3 +- .../calendar/activities/SettingsActivity.kt | 63 +++++++------------ .../calendar/extensions/Context.kt | 27 +++----- .../calendar/helpers/Config.kt | 22 +++---- .../calendar/helpers/Constants.kt | 3 +- 5 files changed, 47 insertions(+), 71 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 228092fbf..707486562 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,11 +46,10 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.17.5' + implementation 'com.simplemobiletools:commons:3.17.13' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' - implementation 'com.google.code.gson:gson:2.8.2' debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion" releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion" diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index eae50e682..41f5b287d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -2,12 +2,9 @@ package com.simplemobiletools.calendar.activities import android.content.Intent import android.content.res.Resources -import android.media.RingtoneManager -import android.net.Uri +import android.media.AudioManager import android.os.Bundle -import android.os.Parcelable import android.text.TextUtils -import com.simplemobiletools.calendar.BuildConfig import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.dialogs.SelectCalendarsDialog import com.simplemobiletools.calendar.extensions.* @@ -19,12 +16,14 @@ import com.simplemobiletools.calendar.models.EventType import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.CustomIntervalPickerDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog +import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_NOTIFICATION import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALENDAR +import com.simplemobiletools.commons.models.AlarmSound import com.simplemobiletools.commons.models.RadioItem import kotlinx.android.synthetic.main.activity_settings.* -import java.io.File import java.util.* class SettingsActivity : SimpleActivity() { @@ -276,28 +275,28 @@ class SettingsActivity : SimpleActivity() { } private fun setupReminderSound() { - val noRingtone = res.getString(R.string.no_ringtone_selected) - if (config.reminderSound.isEmpty()) { - settings_reminder_sound.text = noRingtone - } else { - settings_reminder_sound.text = RingtoneManager.getRingtone(this, Uri.parse(config.reminderSound))?.getTitle(this) ?: noRingtone - } + settings_reminder_sound.text = config.reminderSoundTitle settings_reminder_sound_holder.setOnClickListener { - Intent(RingtoneManager.ACTION_RINGTONE_PICKER).apply { - putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION) - putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, res.getString(R.string.reminder_sound)) - putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(config.reminderSound)) - - if (resolveActivity(packageManager) != null) - startActivityForResult(this, GET_RINGTONE_URI) - else { - toast(R.string.no_ringtone_picker) + SelectAlarmSoundDialog(this, config.reminderSoundUri, AudioManager.STREAM_NOTIFICATION, GET_RINGTONE_URI, ALARM_SOUND_TYPE_NOTIFICATION, onAlarmPicked = { + if (it != null) { + updateReminderSound(it) } - } + }, onAlarmSoundDeleted = { + if (it.uri == config.reminderSoundUri) { + val defaultAlarm = getDefaultAlarmSound(ALARM_SOUND_TYPE_NOTIFICATION) + updateReminderSound(defaultAlarm) + } + }) } } + private fun updateReminderSound(alarmSound: AlarmSound) { + config.reminderSoundTitle = alarmSound.title + config.reminderSoundUri = alarmSound.uri + settings_reminder_sound.text = alarmSound.title + } + private fun setupVibrate() { settings_vibrate.isChecked = config.vibrateOnReminder settings_vibrate_holder.setOnClickListener { @@ -381,24 +380,10 @@ class SettingsActivity : SimpleActivity() { }) override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { - if (resultCode == RESULT_OK) { - if (requestCode == GET_RINGTONE_URI) { - var uri = resultData?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) - - if (uri == null) { - config.reminderSound = "" - } else { - try { - if ((uri as Uri).scheme == "file") { - uri = getFilePublicUri(File(uri.path), BuildConfig.APPLICATION_ID) - } - settings_reminder_sound.text = RingtoneManager.getRingtone(this, uri)?.getTitle(this) - config.reminderSound = uri.toString() - } catch (e: Exception) { - showErrorToast(e) - } - } - } + super.onActivityResult(requestCode, resultCode, resultData) + if (requestCode == GET_RINGTONE_URI && resultCode == RESULT_OK && resultData != null) { + val newAlarmSound = storeNewYourAlarmSound(resultData) + updateReminderSound(newAlarmSound) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 45ce47f6c..589b6d666 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -21,7 +21,6 @@ import android.view.View import android.view.ViewGroup import android.widget.LinearLayout import android.widget.TextView -import com.simplemobiletools.calendar.BuildConfig import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.SimpleActivity @@ -38,7 +37,6 @@ import com.simplemobiletools.commons.helpers.isOreoPlus import org.joda.time.DateTime import org.joda.time.DateTimeZone import org.joda.time.LocalDate -import java.io.File import java.text.SimpleDateFormat import java.util.* @@ -163,17 +161,17 @@ fun Context.notifyEvent(event: 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(applicationContext, pendingIntent, event, content) + val notification = getNotification(pendingIntent, event, content) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.notify(event.id, notification) } @SuppressLint("NewApi") -private fun getNotification(context: Context, pendingIntent: PendingIntent, event: Event, content: String): Notification { +fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: String): Notification { val channelId = "reminder_channel" if (isOreoPlus()) { - val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - val name = context.resources.getString(R.string.event_reminders) + val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + val name = resources.getString(R.string.event_reminders) val importance = NotificationManager.IMPORTANCE_HIGH NotificationChannel(channelId, name, importance).apply { enableLights(true) @@ -183,15 +181,10 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even } } - var soundUri = Uri.parse(context.config.reminderSound) - if (soundUri.scheme == "file") { - try { - soundUri = context.getFilePublicUri(File(soundUri.path), BuildConfig.APPLICATION_ID) - } catch (ignored: Exception) { - } - } + val soundUri = Uri.parse(config.reminderSoundUri) + grantReadUriPermission(config.reminderSoundUri) - val builder = NotificationCompat.Builder(context) + val builder = NotificationCompat.Builder(this) .setContentTitle(event.title) .setContentText(content) .setSmallIcon(R.drawable.ic_calendar) @@ -199,15 +192,15 @@ private fun getNotification(context: Context, pendingIntent: PendingIntent, even .setPriority(Notification.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_LIGHTS) .setAutoCancel(true) - .setSound(soundUri, AudioManager.STREAM_SYSTEM) + .setSound(soundUri, AudioManager.STREAM_NOTIFICATION) .setChannelId(channelId) - .addAction(R.drawable.ic_snooze, context.getString(R.string.snooze), getSnoozePendingIntent(context, event)) + .addAction(R.drawable.ic_snooze, getString(R.string.snooze), getSnoozePendingIntent(this, event)) if (isLollipopPlus()) { builder.setVisibility(Notification.VISIBILITY_PUBLIC) } - if (context.config.vibrateOnReminder) { + if (config.vibrateOnReminder) { builder.setVibrate(longArrayOf(0, 300, 300, 300)) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt index ee6457b7a..0f9de4500 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt @@ -1,9 +1,11 @@ package com.simplemobiletools.calendar.helpers import android.content.Context -import android.media.RingtoneManager import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.extensions.scheduleCalDAVSync +import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle +import com.simplemobiletools.commons.extensions.getDefaultAlarmUri +import com.simplemobiletools.commons.helpers.ALARM_SOUND_TYPE_NOTIFICATION import com.simplemobiletools.commons.helpers.BaseConfig import java.util.* @@ -28,9 +30,13 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(VIBRATE, false) set(vibrate) = prefs.edit().putBoolean(VIBRATE, vibrate).apply() - var reminderSound: String - get() = prefs.getString(REMINDER_SOUND, getDefaultNotificationSound()) - set(path) = prefs.edit().putString(REMINDER_SOUND, path).apply() + var reminderSoundUri: String + get() = prefs.getString(REMINDER_SOUND_URI, context.getDefaultAlarmUri(ALARM_SOUND_TYPE_NOTIFICATION).toString()) + set(reminderSoundUri) = prefs.edit().putString(REMINDER_SOUND_URI, reminderSoundUri).apply() + + var reminderSoundTitle: String + get() = prefs.getString(REMINDER_SOUND_TITLE, context.getDefaultAlarmTitle(ALARM_SOUND_TYPE_NOTIFICATION)) + set(reminderSoundTitle) = prefs.edit().putString(REMINDER_SOUND_TITLE, reminderSoundTitle).apply() var storedView: Int get() = prefs.getInt(VIEW, MONTHLY_VIEW) @@ -97,14 +103,6 @@ class Config(context: Context) : BaseConfig(context) { displayEventTypes = currDisplayEventTypes } - private fun getDefaultNotificationSound(): String { - return try { - RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION)?.toString() ?: "" - } catch (e: Exception) { - "" - } - } - fun getFontSize() = when (fontSize) { FONT_SIZE_SMALL -> getSmallFontSize() FONT_SIZE_MEDIUM -> getMediumFontSize() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt index 844d6f4cc..a8d998681 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt @@ -37,7 +37,8 @@ const val WEEK_NUMBERS = "week_numbers" const val START_WEEKLY_AT = "start_weekly_at" const val END_WEEKLY_AT = "end_weekly_at" const val VIBRATE = "vibrate" -const val REMINDER_SOUND = "reminder_sound" +const val REMINDER_SOUND_URI = "reminder_sound_uri" +const val REMINDER_SOUND_TITLE = "reminder_sound_title" const val VIEW = "view" const val REMINDER_MINUTES = "reminder_minutes" const val REMINDER_MINUTES_2 = "reminder_minutes_2" From 2f8f5ac4bcb31b5a3beca5620e54f1ebd0ada28a Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 17:57:14 +0200 Subject: [PATCH 69/99] change fastlane url to https --- fastlane/metadata/android/en-US/full_description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index c9376f5d1..f4f8323f6 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -8,4 +8,4 @@ The Storage permission is needed only for exporting or importing events from .ic The Contacts permission is used only at importing contact birthdays and anniversaries. -This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com +This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com From 2e4b2f4ddb3a322aafb9f6e3bc3788f6d1b114c8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 18:02:44 +0200 Subject: [PATCH 70/99] adding custom notification sound picker to release notes --- .../com/simplemobiletools/calendar/activities/MainActivity.kt | 1 + app/src/main/res/values/donottranslate.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index 61cad892e..93f23fb7e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -819,6 +819,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { add(Release(86, R.string.release_86)) add(Release(88, R.string.release_88)) add(Release(98, R.string.release_98)) + add(Release(117, R.string.release_117)) checkWhatsNew(this, BuildConfig.VERSION_CODE) } } diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index c9213f010..79d32003b 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -2,6 +2,7 @@ + Reworked custom notification sound picking, should be more reliable Added a Location field\n Allow adding Contact birthdays From a7dd5687939c50279a91397cb85c2731aa808811 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 18:14:10 +0200 Subject: [PATCH 71/99] disable looping at alarm sound preview --- app/build.gradle | 2 +- .../calendar/activities/SettingsActivity.kt | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 707486562..50ecde27f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.17.13' + implementation 'com.simplemobiletools:commons:3.17.14' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index 41f5b287d..fca5edb82 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -278,11 +278,12 @@ class SettingsActivity : SimpleActivity() { settings_reminder_sound.text = config.reminderSoundTitle settings_reminder_sound_holder.setOnClickListener { - SelectAlarmSoundDialog(this, config.reminderSoundUri, AudioManager.STREAM_NOTIFICATION, GET_RINGTONE_URI, ALARM_SOUND_TYPE_NOTIFICATION, onAlarmPicked = { - if (it != null) { - updateReminderSound(it) - } - }, onAlarmSoundDeleted = { + SelectAlarmSoundDialog(this, config.reminderSoundUri, AudioManager.STREAM_NOTIFICATION, GET_RINGTONE_URI, ALARM_SOUND_TYPE_NOTIFICATION, false, + onAlarmPicked = { + if (it != null) { + updateReminderSound(it) + } + }, onAlarmSoundDeleted = { if (it.uri == config.reminderSoundUri) { val defaultAlarm = getDefaultAlarmSound(ALARM_SOUND_TYPE_NOTIFICATION) updateReminderSound(defaultAlarm) From 7ca9f6649e0c9878d7eca06e532311d5d1301389 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 18:22:50 +0200 Subject: [PATCH 72/99] handle notification broadcast on a background thread --- .../calendar/receivers/NotificationReceiver.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt index 80aa2c733..3fb716f84 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/receivers/NotificationReceiver.kt @@ -15,14 +15,20 @@ class NotificationReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager val wakelock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Simple Calendar") - wakelock.acquire(5000) + wakelock.acquire(3000) - context.updateListWidget() + Thread { + handleIntent(context, intent) + }.start() + } + + private fun handleIntent(context: Context, intent: Intent) { val id = intent.getIntExtra(EVENT_ID, -1) if (id == -1) { return } + context.updateListWidget() val event = context.dbHelper.getEventWithId(id) if (event == null || event.getReminders().isEmpty()) { return From fd19c4bfd9abddfc2247565cc1617ce139b59b70 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 18:23:50 +0200 Subject: [PATCH 73/99] update version to 3.4.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 50ecde27f..42e58e7e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.simplemobiletools.calendar" minSdkVersion 16 targetSdkVersion 27 - versionCode 116 - versionName "3.4.0" + versionCode 117 + versionName "3.4.1" multiDexEnabled true setProperty("archivesBaseName", "calendar") } From 40c5583977787a8e87e3501a5d545c6658438063 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 30 Mar 2018 18:23:56 +0200 Subject: [PATCH 74/99] updating changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4875bd6a5..be9d54ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========== +Version 3.4.1 *(2018-03-30)* +---------------------------- + + * Reworked custom notification sound, should be more reliable + * Fixed some glitches related to the monthly view + * Misc smaller bugfixes and stability improvements + Version 3.4.0 *(2018-02-28)* ---------------------------- From e4c3faddf1eb99494f4292d47cb2a6822bb60d4c Mon Sep 17 00:00:00 2001 From: FTno <16176811+FTno@users.noreply.github.com> Date: Mon, 2 Apr 2018 14:18:24 +0200 Subject: [PATCH 75/99] Update strings.xml Norwegian (nb) translation update --- app/src/main/res/values-nb/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index fc68aee5c..a6e017df8 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -130,7 +130,7 @@ Legg til off. fridager Nasjonale off. fridager Religiøse off. fridager - Holidays have been successfully imported into the \"Holidays\" event type + Off. fridager er vellykket importert til hendelsestypen \"Off. fridager\" Importering av noen hendelser feilet Importering av off. fridager feilet From 1b88aa8f09b599ade18c50a37a6faebf3e70ab07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kompiuteri=C5=B3=20meistras=20+37060040020?= Date: Wed, 4 Apr 2018 01:24:51 +0300 Subject: [PATCH 76/99] Update strings.xml --- app/src/main/res/values-lt/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 8d3581c48..64b8218be 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -130,7 +130,7 @@ Įtraukti atostogas Nacionalinės atostogos Religinės atostogos - Holidays have been successfully imported into the \"Holidays\" event type + Atostogos buvo sėkmingai importuotos į \"Atostogos\" įvykio tipą Kai kurių įvykių importavimas nepavyko Atostogų importavimas nepavyko @@ -205,7 +205,7 @@ Kontaktų leidimas naudojamas tik importuoti kontaktų gimtadienius ir sukaktis. - Ši programėle yra vienintelė iš keletos mūsų programėlių. Likusias Jūs galite rasti čia http://www.simplemobiletools.com + Ši programėle yra viena iš keletos mūsų programėlių. Likusias Jūs galite rasti čia http://www.simplemobiletools.com Calendario mensile - Calendar event list + Lista eventi calendario Evento @@ -33,7 +33,7 @@ Giornalmente Settimanalmente Mensilmente - Annulamente + Annualmente Settimane Mesi Anni @@ -45,10 +45,10 @@ Elimina tutte le occorrenze Aggiorna solamente l\'occorenza selezionata Aggiorna tutte le occorenze - Repeat till a date + Ripeti fino a una data Ripeti x volte Ripeti per sempre - times + volte Ripeti Repeat on Ogni giorno @@ -76,80 +76,80 @@ last - Birthdays - Add contact birthdays - No birthdays have been found - Birthdays added successfully + Compleanni + Aggiungi compleanni contatti + Nessun compleanno trovato + Compleanni aggiunti con successo - Anniversaries - Add contact anniversaries - No anniversaries have been found - Anniversaries added successfully + Anniversari + Aggiungi anniversari contatti + Nessun anniversario trovato + Anniversari aggiunti con successo Promemoria - before - Add another reminder - Event reminders + prima + Aggiungi un altro promemoria + Promemoria eventi - Import events - Export events - Import events from an .ics file - Export events to an .ics file - Default event type - Export past events too - Include event types - Filename (without .ics) + Importa eventi + Esporta eventi + Importa eventi da un file .ics + Esporta eventi in un file .ics + Tipo evento predefinito + Esporta anche eventi passati + Includi tipi evento + Nome file (senza .ics) Titolo - Location + Posizione Descrizione All-day - Week + Settimana - Event types - Add a new type - Edit type - Type with this title already exists - Color - Regular event - Default event type cannot be deleted - Select an event type + Tipi evento + Aggiungi nuovo tipo + Modifica tipo + Un tipo con questo titolo esiste già + Colore + Evento regolare + Il tipo di evento predefinito non può essere cancellato + Seleziona un tipo di evento Move affected events into the default event type Permanently remove affected events - To remove a CalDAV calendar you have to unsynchronize it + Per rimuovere un calendario CalDAV devi desincronizzarlo - Holidays - Add holidays - National holidays - Religious holidays - Holidays have been successfully imported into the \"Holidays\" event type - Importing some events failed - Importing holidays failed + Feste + Aggiungi feste + Feste nazionali + Feste religiose + Le feste sono state importate nel tipo evento \"Feste\" con successo + Importo di alcuni eventi fallito + Importo delle feste fallito - Manage event types + Gestisci tipi evento Start day at End day at - Show week numbers + Mostra numero settimane Vibrate on reminder notification - Reminder sound + Suoneria promemoria No app capable of setting ringtone found None - The day cannot end earlier than it starts + Il giorno non può finire prima che cominci CalDAV sync Event lists - Display events from the past - Replace event description with location - Delete all events - Are you sure you want to delete all events? This will leave your event types and other settings intact. + Mostra eventi passati + Sostituisci la descrizione con la posizione + Cancella tutti gli eventi + Vuoi cancellare tutti gli eventi? Questo lascerà i tuoi tipi evento e le altre impostazioni invariate. CalDAV From 3e35b5b32107efbc3e06f1fea24568000b84aa69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Marques?= Date: Sat, 7 Apr 2018 16:38:34 +0100 Subject: [PATCH 79/99] Update strings.xml --- app/src/main/res/values-pt/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index bbc3fa11b..cb95a5a7f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -130,7 +130,7 @@ Adicionar feriados Feriados nacionais Feriados religiosos - Holidays have been successfully imported into the \"Holidays\" event type + Os feriados foram adicionados com sucesso para o tipo de evento \"Feriados\" Alguns eventos não foram importados Falha ao importar os feriados From 3ef480a80d91c302d7893d8356642e57041c7342 Mon Sep 17 00:00:00 2001 From: Florian Angermeier Date: Tue, 10 Apr 2018 23:40:55 +0200 Subject: [PATCH 80/99] Add a public version of the notification to make it possible to optionally hide sensitive information Also don't override the visibility to respect the user's notification settings --- .../calendar/extensions/Context.kt | 22 +++++++++++++------ app/src/main/res/values-az/strings.xml | 1 + app/src/main/res/values-br/strings.xml | 1 + app/src/main/res/values-cs/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-gl/strings.xml | 1 + app/src/main/res/values-hi-rIN/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-iw/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-ko/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nb/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-no/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-sk/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 29 files changed, 43 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 589b6d666..19affee1c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -167,7 +167,7 @@ fun Context.notifyEvent(event: Event) { } @SuppressLint("NewApi") -fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: String): Notification { +fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: String, publicVersion: Boolean = false): Notification { val channelId = "reminder_channel" if (isOreoPlus()) { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager @@ -184,9 +184,17 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: val soundUri = Uri.parse(config.reminderSoundUri) grantReadUriPermission(config.reminderSoundUri) + val contentTitle = when (publicVersion) { + false -> event.title + true -> resources.getString(R.string.app_name) + } + val contentText = when (publicVersion) { + false -> content + true -> resources.getString(R.string.public_event_notification_text) + } val builder = NotificationCompat.Builder(this) - .setContentTitle(event.title) - .setContentText(content) + .setContentTitle(contentTitle) + .setContentText(contentText) .setSmallIcon(R.drawable.ic_calendar) .setContentIntent(pendingIntent) .setPriority(Notification.PRIORITY_HIGH) @@ -196,14 +204,14 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: .setChannelId(channelId) .addAction(R.drawable.ic_snooze, getString(R.string.snooze), getSnoozePendingIntent(this, event)) - if (isLollipopPlus()) { - builder.setVisibility(Notification.VISIBILITY_PUBLIC) - } - if (config.vibrateOnReminder) { builder.setVibrate(longArrayOf(0, 300, 300, 300)) } + if (!publicVersion) { + builder.setPublicVersion(getNotification(pendingIntent, event, content, true)) + } + return builder.build() } diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 80effc6be..dbba34372 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -26,6 +26,7 @@ Hadisə uğurla yeniləndi Hadisələri yazıya görə sırala Xahiş olunur məkan parametrini doldurun ki hadisədə görünsün + An event is upcoming Təkrarlama diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 276a433df..8b605f6af 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -26,6 +26,7 @@ Darvoud hizivaet gant berzh Silañ an darvoudoù dre rizh Please fill in a location to be shown on a map + An event is upcoming Addegouezh diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b8e81ffcd..3822c7a46 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -26,6 +26,7 @@ Událost úspěšně změněna Filtrovat události podle typu Please fill in a location to be shown on a map + An event is upcoming Opakovaná událost diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 7eec7e037..4148cab20 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -26,6 +26,7 @@ Begivenhed ændret Filtrer begivenheder efter type Indtast et sted der kan vises på et kort + An event is upcoming Gentagelse diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8aafd4eed..442694f7c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -26,6 +26,7 @@ Termin erfolgreich aktualisiert Sortiere Termine nach Typ Bitte trage einen Ort ein, der auf einer Karte angezeigt werden soll + Ein Termin steht an Wiederholung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 48261cd97..057871af7 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -26,6 +26,7 @@ El evento se ha actualizado con éxito Filtrar eventos según tipo Please fill in a location to be shown on a map + An event is upcoming Repetición diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 10b89574c..edc1ae81c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -26,6 +26,7 @@ Événement ajouté avec succès Filtrer les événements par type Veuillez remplir un emplacement pour être affiché sur une carte + An event is upcoming Répétition diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 01023df66..e9f399f8e 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -26,6 +26,7 @@ O evento foi actualizado correctamente Filtrar eventos por tipo Please fill in a location to be shown on a map + An event is upcoming Repetición diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 10887d0ad..1d41f854e 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -27,6 +27,7 @@ Filter Filter events by type Please fill in a location to be shown on a map + An event is upcoming दुहराव diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 763c2e967..ce2ff3f61 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -26,6 +26,7 @@ Događaj je uspješno ažuriran Sortiranje prema vrsti događaja Ispunite lokaciju za prikazivanje na karti + An event is upcoming Ponavljanje diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 9cc280f96..6cec1421d 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -26,6 +26,7 @@ Bejegyzés frissítve Filter events by type Please fill in a location to be shown on a map + An event is upcoming Ismétlés diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 015fc0a1b..446b3389b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -26,6 +26,7 @@ Evento aggiornato correttamente Filtra eventi per tipologia Please fill in a location to be shown on a map + An event is upcoming Ripeti diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 5fc713f1c..0b3944f7d 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -27,6 +27,7 @@ Filter Filter events by type Please fill in a location to be shown on a map + An event is upcoming Repetition diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6a5f0d28c..7422dcd61 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -26,6 +26,7 @@ イベントを正常に更新しました Filter events by type Please fill in a location to be shown on a map + An event is upcoming 繰り返し diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 979d16bbc..71938e53b 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -26,6 +26,7 @@ 이벤트를 수정했습니다 유형별 이벤트 Please fill in a location to be shown on a map + An event is upcoming 반복 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 64b8218be..1cd414264 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -26,6 +26,7 @@ Įvykis atnaujintas sėkmingai Filtruoti įvykius pagal tipą Prašome įvesti vietą, kad būtų rodoma žemėlapyje + An event is upcoming Pasikartojimas diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index a6e017df8..2cac65aea 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -26,6 +26,7 @@ Hendelse vellykket oppdatert Filtrer hendelser etter type Oppfør et sted som skal vises på et kart + An event is upcoming Gjentagelse diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c3d0bf812..ba37b6e2e 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -26,6 +26,7 @@ Afspraak bijgewerkt Afspraken op type filteren Vul de locatie in om deze op de kaart te tonen + An event is upcoming Herhaling diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index cfd66487c..6465b1c18 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -26,6 +26,7 @@ Hendelse vellykket oppdatert Filtrer hendelser etter type Please fill in a location to be shown on a map + An event is upcoming Gjentagelse diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index b7a3e800f..0862cfa1a 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -26,6 +26,7 @@ Wydarzenie zostało zaktualizowane Filtruj wydarzenia według typu    Wpisz lokalizację, która ma być pokazana na mapie + An event is upcoming Powtórzenie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b90c91fcf..1b3a6a076 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -26,6 +26,7 @@ Evento atualizado com sucesso Filtrar eventos por tipo Please fill in a location to be shown on a map + An event is upcoming Repetição diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index cb95a5a7f..26892a0de 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -26,6 +26,7 @@ Evento atualizado com sucesso Filtrar eventos por tipo Introduza a localização para a mostrar no maps + An event is upcoming Repetição diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cf436a4fe..0c7cfe0db 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -26,6 +26,7 @@ Событие успешно обновлено Фильтровать события по типу Пожалуйста, введите место, которое будет показано на карте + An event is upcoming Повторять diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index ed87201ae..dc848f0ba 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -26,6 +26,7 @@ Udalosť bola úspešne upravená Filtrovať udalosti podľa typu Prosím zadajte polohu, ktorá má byť zobrazená na mape + An event is upcoming Opakovanie diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 49d600522..d0ed08a51 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -26,6 +26,7 @@ Händelsen har uppdaterats Filtrera händelser efter typ Du måste ange en plats som kan visas på en karta + An event is upcoming Upprepning diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a73366b78..707923206 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -26,6 +26,7 @@ Etkinlik başarıyla güncellendi Etkinlikleri türe göre filtreleyin Please fill in a location to be shown on a map + An event is upcoming Tekrarla diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 05546a3c1..fd98801f1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -26,6 +26,7 @@ 活動更新成功 依類型篩選活動 請填入要顯示在地圖上的地點 + An event is upcoming 重複 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d569e6a5e..c18d662ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,6 +26,7 @@ Event updated successfully Filter events by type Please fill in a location to be shown on a map + An event is upcoming Repetition From f9eb5e68730c701a5512a925934cc516ca0534a8 Mon Sep 17 00:00:00 2001 From: Florian Angermeier Date: Wed, 11 Apr 2018 00:05:55 +0200 Subject: [PATCH 81/99] Changes requested by tibbi --- .../simplemobiletools/calendar/extensions/Context.kt | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 19affee1c..3e77e0caf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -184,14 +184,10 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: val soundUri = Uri.parse(config.reminderSoundUri) grantReadUriPermission(config.reminderSoundUri) - val contentTitle = when (publicVersion) { - false -> event.title - true -> resources.getString(R.string.app_name) - } - val contentText = when (publicVersion) { - false -> content - true -> resources.getString(R.string.public_event_notification_text) - } + val contentTitle = if (publicVersion) resources.getString(R.string.app_name) else event.title + + val contentText = if (publicVersion) resources.getString(R.string.public_event_notification_text) else content + val builder = NotificationCompat.Builder(this) .setContentTitle(contentTitle) .setContentText(contentText) From 1da9c0e268747f60381c2dc08cb56ef1cdf49c8d Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 11 Apr 2018 11:05:44 +0200 Subject: [PATCH 82/99] change the way we obtain widget IDs --- .../calendar/extensions/Context.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 589b6d666..140c79baf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -47,12 +47,11 @@ val Context.dbHelper: DBHelper get() = DBHelper.newInstance(applicationContext) fun Context.getNowSeconds() = (System.currentTimeMillis() / 1000).toInt() fun Context.updateWidgets() { - val widgetsCnt = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetMonthlyProvider::class.java)) - if (widgetsCnt.isNotEmpty()) { - val ids = intArrayOf(R.xml.widget_monthly_info) + val widgetIDs = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetMonthlyProvider::class.java)) + if (widgetIDs.isNotEmpty()) { Intent(applicationContext, MyWidgetMonthlyProvider::class.java).apply { action = AppWidgetManager.ACTION_APPWIDGET_UPDATE - putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIDs) sendBroadcast(this) } } @@ -61,12 +60,11 @@ fun Context.updateWidgets() { } fun Context.updateListWidget() { - val widgetsCnt = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetListProvider::class.java)) - if (widgetsCnt.isNotEmpty()) { - val ids = intArrayOf(R.xml.widget_list_info) + val widgetIDs = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetListProvider::class.java)) + if (widgetIDs.isNotEmpty()) { Intent(applicationContext, MyWidgetListProvider::class.java).apply { action = AppWidgetManager.ACTION_APPWIDGET_UPDATE - putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIDs) sendBroadcast(this) } } From 51d085943a7479834847162f957915ffa8f65a8d Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 11 Apr 2018 11:23:18 +0200 Subject: [PATCH 83/99] adding a slovak string translation --- .../kotlin/com/simplemobiletools/calendar/extensions/Context.kt | 2 -- app/src/main/res/values-sk/strings.xml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index 36d8b3aaf..e116c30df 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -32,7 +32,6 @@ import com.simplemobiletools.calendar.receivers.CalDAVSyncReceiver import com.simplemobiletools.calendar.receivers.NotificationReceiver import com.simplemobiletools.calendar.services.SnoozeService import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.isLollipopPlus import com.simplemobiletools.commons.helpers.isOreoPlus import org.joda.time.DateTime import org.joda.time.DateTimeZone @@ -183,7 +182,6 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: grantReadUriPermission(config.reminderSoundUri) val contentTitle = if (publicVersion) resources.getString(R.string.app_name) else event.title - val contentText = if (publicVersion) resources.getString(R.string.public_event_notification_text) else content val builder = NotificationCompat.Builder(this) diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index dc848f0ba..fb4eae160 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -26,7 +26,7 @@ Udalosť bola úspešne upravená Filtrovať udalosti podľa typu Prosím zadajte polohu, ktorá má byť zobrazená na mape - An event is upcoming + Blíži sa udalosť Opakovanie From 8e28e881a06339aaf950427aab8ede2dc8c0c2b6 Mon Sep 17 00:00:00 2001 From: 10cents Date: Wed, 11 Apr 2018 12:08:48 +0200 Subject: [PATCH 84/99] public_event_notification_text --- app/src/main/res/values-da/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 4148cab20..45ff6a1c8 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -26,7 +26,7 @@ Begivenhed ændret Filtrer begivenheder efter type Indtast et sted der kan vises på et kort - An event is upcoming + En begivenhed er forestående Gentagelse From ce92fa8f635ab02140c04f2488c2ff64804b879f Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 11 Apr 2018 12:24:24 +0200 Subject: [PATCH 85/99] update commons to 3.18.18 --- app/build.gradle | 2 +- .../calendar/activities/MainActivity.kt | 7 ---- .../activities/ManageEventTypesActivity.kt | 1 - .../calendar/activities/SettingsActivity.kt | 2 +- .../activities/WidgetListConfigureActivity.kt | 8 ++--- .../WidgetMonthlyConfigureActivity.kt | 8 ++--- .../calendar/adapters/DayEventsAdapter.kt | 4 +++ .../adapters/ManageEventTypesAdapter.kt | 4 +++ .../calendar/dialogs/DeleteEventDialog.kt | 4 +-- .../calendar/dialogs/ExportEventsDialog.kt | 34 +++++++++---------- .../dialogs/FilterEventTypesDialog.kt | 4 +-- .../calendar/dialogs/ImportEventsDialog.kt | 20 +++++------ .../calendar/dialogs/SelectCalendarsDialog.kt | 4 +-- .../dialogs/SelectEventCalendarDialog.kt | 4 +-- .../dialogs/SelectEventTypeColorDialog.kt | 4 +-- .../calendar/dialogs/UpdateEventTypeDialog.kt | 4 +-- .../calendar/extensions/Context.kt | 11 ++++-- .../calendar/fragments/DayFragment.kt | 1 - 18 files changed, 65 insertions(+), 61 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 42e58e7e9..4ca718c15 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.17.14' + implementation 'com.simplemobiletools:commons:3.18.18' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index 93f23fb7e..b7a696ec6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -63,7 +63,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private var mStoredDayCode = "" private var mStoredIsSundayFirst = false private var mStoredUse24HourFormat = false - private var mStoredUseEnglish = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -123,11 +122,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { override fun onResume() { super.onResume() - if (mStoredUseEnglish != config.useEnglish) { - restartActivity() - return - } - if (mStoredTextColor != config.textColor || mStoredBackgroundColor != config.backgroundColor || mStoredPrimaryColor != config.primaryColor || mStoredDayCode != Formatter.getTodayCode(applicationContext)) { updateViewPager() @@ -213,7 +207,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private fun storeStateVariables() { config.apply { - mStoredUseEnglish = useEnglish mStoredIsSundayFirst = isSundayFirst mStoredTextColor = textColor mStoredPrimaryColor = primaryColor diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt index 15085336f..808c50369 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/ManageEventTypesActivity.kt @@ -35,7 +35,6 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener { val adapter = ManageEventTypesAdapter(this, it, this, manage_event_types_list) { showEventTypeDialog(it as EventType) } - adapter.setupDragListener(true) manage_event_types_list.adapter = adapter } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index fca5edb82..008f1335a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -101,7 +101,7 @@ class SettingsActivity : SimpleActivity() { settings_use_english_holder.setOnClickListener { settings_use_english.toggle() config.useEnglish = settings_use_english.isChecked - useEnglishToggled() + System.exit(0) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetListConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetListConfigureActivity.kt index e852a590d..90727f041 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetListConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetListConfigureActivity.kt @@ -106,15 +106,15 @@ class WidgetListConfigureActivity : SimpleActivity() { } private fun pickBackgroundColor() { - ColorPickerDialog(this, mBgColorWithoutTransparency) { - mBgColorWithoutTransparency = it + ColorPickerDialog(this, mBgColorWithoutTransparency) { wasPositivePressed, color -> + mBgColorWithoutTransparency = color updateBgColor() } } private fun pickTextColor() { - ColorPickerDialog(this, mTextColor) { - mTextColorWithoutTransparency = it + ColorPickerDialog(this, mTextColor) { wasPositivePressed, color -> + mTextColorWithoutTransparency = color updateColors() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt index fc1b07437..c391626b7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/WidgetMonthlyConfigureActivity.kt @@ -110,15 +110,15 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { } private fun pickBackgroundColor() { - ColorPickerDialog(this, mBgColorWithoutTransparency) { - mBgColorWithoutTransparency = it + ColorPickerDialog(this, mBgColorWithoutTransparency) { wasPositivePressed, color -> + mBgColorWithoutTransparency = color updateBgColor() } } private fun pickTextColor() { - ColorPickerDialog(this, mTextColor) { - mTextColorWithoutTransparency = it + ColorPickerDialog(this, mTextColor) { wasPositivePressed, color -> + mTextColorWithoutTransparency = color updateColors() updateDays() } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/DayEventsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/DayEventsAdapter.kt index 733ae78c8..2343f3567 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/DayEventsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/DayEventsAdapter.kt @@ -24,6 +24,10 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList, r private var allDayString = resources.getString(R.string.all_day) private var replaceDescriptionWithLocation = activity.config.replaceDescription + init { + setupDragListener(true) + } + override fun getActionMenuId() = R.menu.cab_day override fun prepareActionMode(menu: Menu) {} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/ManageEventTypesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/ManageEventTypesAdapter.kt index c65b89da7..2f28d967d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/ManageEventTypesAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/ManageEventTypesAdapter.kt @@ -23,6 +23,10 @@ import java.util.* class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayList, val listener: DeleteEventTypesListener?, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) { + init { + setupDragListener(true) + } + override fun getActionMenuId() = R.menu.cab_event_type override fun prepareActionMode(menu: Menu) {} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/DeleteEventDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/DeleteEventDialog.kt index 9654b4885..5c88fc256 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/DeleteEventDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/DeleteEventDialog.kt @@ -29,8 +29,8 @@ class DeleteEventDialog(val activity: Activity, eventIds: List, val callbac .setPositiveButton(R.string.yes, { dialog, which -> dialogConfirmed(view as ViewGroup, hasRepeatableEvent) }) .setNegativeButton(R.string.no, null) .create().apply { - activity.setupDialogStuff(view, this) - } + activity.setupDialogStuff(view, this) + } } private fun dialogConfirmed(view: ViewGroup, hasRepeatableEvent: Boolean) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ExportEventsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ExportEventsDialog.kt index f478833f2..37f487556 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ExportEventsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ExportEventsDialog.kt @@ -39,26 +39,26 @@ class ExportEventsDialog(val activity: SimpleActivity, val path: String, val cal .setPositiveButton(R.string.ok, null) .setNegativeButton(R.string.cancel, null) .create().apply { - activity.setupDialogStuff(view, this, R.string.export_events) { - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { - val filename = view.export_events_filename.value - when { - filename.isEmpty() -> activity.toast(R.string.empty_name) - filename.isAValidFilename() -> { - val file = File(path, "$filename.ics") - if (file.exists()) { - activity.toast(R.string.name_taken) - return@setOnClickListener - } + activity.setupDialogStuff(view, this, R.string.export_events) { + getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + val filename = view.export_events_filename.value + when { + filename.isEmpty() -> activity.toast(R.string.empty_name) + filename.isAValidFilename() -> { + val file = File(path, "$filename.ics") + if (file.exists()) { + activity.toast(R.string.name_taken) + return@setOnClickListener + } - val eventTypes = (view.export_events_types_list.adapter as FilterEventTypeAdapter).getSelectedItemsSet() - callback(view.export_events_checkbox.isChecked, file, eventTypes) - dismiss() + val eventTypes = (view.export_events_types_list.adapter as FilterEventTypeAdapter).getSelectedItemsSet() + callback(view.export_events_checkbox.isChecked, file, eventTypes) + dismiss() + } + else -> activity.toast(R.string.invalid_name) + } } - else -> activity.toast(R.string.invalid_name) } } - } - } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/FilterEventTypesDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/FilterEventTypesDialog.kt index 71c24a62d..e609c84be 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/FilterEventTypesDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/FilterEventTypesDialog.kt @@ -22,8 +22,8 @@ class FilterEventTypesDialog(val activity: SimpleActivity, val callback: () -> U .setPositiveButton(R.string.ok, { dialogInterface, i -> confirmEventTypes() }) .setNegativeButton(R.string.cancel, null) .create().apply { - activity.setupDialogStuff(view, this, R.string.filter_events_by_type) - } + activity.setupDialogStuff(view, this, R.string.filter_events_by_type) + } } private fun confirmEventTypes() { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ImportEventsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ImportEventsDialog.kt index 0b6993ed8..d7ef3f293 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ImportEventsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/ImportEventsDialog.kt @@ -34,17 +34,17 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal .setPositiveButton(R.string.ok, null) .setNegativeButton(R.string.cancel, null) .create().apply { - activity.setupDialogStuff(view, this, R.string.import_events) { - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { - activity.toast(R.string.importing) - Thread { - val result = IcsImporter(activity).importEvents(path, currEventTypeId, currEventTypeCalDAVCalendarId) - handleParseResult(result) - dismiss() - }.start() + activity.setupDialogStuff(view, this, R.string.import_events) { + getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + activity.toast(R.string.importing) + Thread { + val result = IcsImporter(activity).importEvents(path, currEventTypeId, currEventTypeCalDAVCalendarId) + handleParseResult(result) + dismiss() + }.start() + } + } } - } - } } private fun updateEventType(view: ViewGroup) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectCalendarsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectCalendarsDialog.kt index bb8f43a9d..44b9915e1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectCalendarsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectCalendarsDialog.kt @@ -36,8 +36,8 @@ class SelectCalendarsDialog(val activity: SimpleActivity, val callback: () -> Un .setPositiveButton(R.string.ok, { dialogInterface, i -> confirmSelection() }) .setNegativeButton(R.string.cancel, null) .create().apply { - activity.setupDialogStuff(view, this, R.string.select_caldav_calendars) - } + activity.setupDialogStuff(view, this, R.string.select_caldav_calendars) + } } private fun addCalendarItem(isEvent: Boolean, text: String, tag: Int = 0, shouldCheck: Boolean = false) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectEventCalendarDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectEventCalendarDialog.kt index 3a6ecc790..b442a5dda 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectEventCalendarDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/dialogs/SelectEventCalendarDialog.kt @@ -39,8 +39,8 @@ class SelectEventCalendarDialog(val activity: Activity, val calendars: List + eventType!!.color = color setupColor(type_color) } } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt index e116c30df..6a2f994bb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Context.kt @@ -32,6 +32,7 @@ import com.simplemobiletools.calendar.receivers.CalDAVSyncReceiver import com.simplemobiletools.calendar.receivers.NotificationReceiver import com.simplemobiletools.calendar.services.SnoozeService import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.SILENT import com.simplemobiletools.commons.helpers.isOreoPlus import org.joda.time.DateTime import org.joda.time.DateTimeZone @@ -178,8 +179,12 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: } } - val soundUri = Uri.parse(config.reminderSoundUri) - grantReadUriPermission(config.reminderSoundUri) + var soundUri = config.reminderSoundUri + if (soundUri == SILENT) { + soundUri = "" + } else { + grantReadUriPermission(soundUri) + } val contentTitle = if (publicVersion) resources.getString(R.string.app_name) else event.title val contentText = if (publicVersion) resources.getString(R.string.public_event_notification_text) else content @@ -192,7 +197,7 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content: .setPriority(Notification.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_LIGHTS) .setAutoCancel(true) - .setSound(soundUri, AudioManager.STREAM_NOTIFICATION) + .setSound(Uri.parse(soundUri), AudioManager.STREAM_NOTIFICATION) .setChannelId(channelId) .addAction(R.drawable.ic_snooze, getString(R.string.snooze), getSnoozePendingIntent(this, event)) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt index 0d015f74d..52e8d4d8f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/DayFragment.kt @@ -139,7 +139,6 @@ class DayFragment : Fragment() { DayEventsAdapter(activity as SimpleActivity, events, mHolder.day_events) { editEvent(it as Event) }.apply { - setupDragListener(true) addVerticalDividers(true) mHolder.day_events.adapter = this } From 089fa484122ac3bc8c35ce3e7e93e580682627b2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 11 Apr 2018 18:09:59 +0200 Subject: [PATCH 86/99] adding a new string Show a grid --- app/src/main/res/values-az/strings.xml | 3 ++- app/src/main/res/values-br/strings.xml | 3 ++- app/src/main/res/values-cs/strings.xml | 3 ++- app/src/main/res/values-da/strings.xml | 3 ++- app/src/main/res/values-de/strings.xml | 3 ++- app/src/main/res/values-es/strings.xml | 3 ++- app/src/main/res/values-fr/strings.xml | 3 ++- app/src/main/res/values-gl/strings.xml | 3 ++- app/src/main/res/values-hi-rIN/strings.xml | 3 ++- app/src/main/res/values-hr/strings.xml | 3 ++- app/src/main/res/values-hu/strings.xml | 3 ++- app/src/main/res/values-it/strings.xml | 3 ++- app/src/main/res/values-iw/strings.xml | 3 ++- app/src/main/res/values-ja/strings.xml | 3 ++- app/src/main/res/values-ko/strings.xml | 3 ++- app/src/main/res/values-lt/strings.xml | 3 ++- app/src/main/res/values-nb/strings.xml | 3 ++- app/src/main/res/values-nl/strings.xml | 3 ++- app/src/main/res/values-no/strings.xml | 3 ++- app/src/main/res/values-pl/strings.xml | 3 ++- app/src/main/res/values-pt-rBR/strings.xml | 3 ++- app/src/main/res/values-pt/strings.xml | 3 ++- app/src/main/res/values-ru/strings.xml | 3 ++- app/src/main/res/values-sk/strings.xml | 3 ++- app/src/main/res/values-sv/strings.xml | 3 ++- app/src/main/res/values-tr/strings.xml | 3 ++- app/src/main/res/values-zh-rTW/strings.xml | 3 ++- app/src/main/res/values/strings.xml | 3 ++- 28 files changed, 56 insertions(+), 28 deletions(-) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index dbba34372..a5263087f 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -151,6 +151,7 @@ Hadisə əlavəsini məkan ilə dəyiş Bütün hadisələri sil Bütün hadisələri silmək istədiyinizə əminsiniz? Bu hadisələri və parametrlərini bütövlüklə siləcək. + Show a grid CalDAV @@ -206,7 +207,7 @@ Kontakt icazəsi yalnız kontakt ad günlərini və il dönümlərini daxil etmək üçün istifadə olunur. - Bu, böyük bir tətbiq seriyasının yalnız bir hissəsidir. Digər tətbiqləri buradan əldə edə bilərsiniz http://www.simplemobiletools.com + Bu, böyük bir tətbiq seriyasının yalnız bir hissəsidir. Digər tətbiqləri buradan əldə edə bilərsiniz https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ Ret eo reiñ an aotre Darempredoù evit enporzhiañ deizioù-ha-bloaz an darempredoù. - An arload-mañ a zo ul lodenn eus un heuliad arloadoù brasoc\'h. Gallout a rit o kavout anezho war http://www.simplemobiletools.com + An arload-mañ a zo ul lodenn eus un heuliad arloadoù brasoc\'h. Gallout a rit o kavout anezho war https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - Tato aplikace je součástí větší sady aplikací. Tyto a další aplikace najdete na http://www.simplemobiletools.com + Tato aplikace je součástí větší sady aplikací. Tyto a další aplikace najdete na https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ Adgang til kontaktpersoner er nødvendig hvis du vil importere fødselsdage. - Denne app er en enkelt del af en større serie apps. Du kan finde dem alle på siden http://www.simplemobiletools.com + Denne app er en enkelt del af en større serie apps. Du kan finde dem alle på siden https://www.simplemobiletools.com CalDAV @@ -207,7 +208,7 @@ Die Kontakte-Berechtigung wird nur für das Importieren von Geburtstagen benötigt. - Diese App ist nur eine aus einer größeren Serie von schlichten Apps. Der Rest davon findet sich auf http://www.simplemobiletools.com + Diese App ist nur eine aus einer größeren Serie von schlichten Apps. Der Rest davon findet sich auf https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ El permiso de contactos se usa sólo para importar los cumpleaños de los contactos. - Esta aplicación es sólo una parte de una mayor serie de aplicaciones. Puede encontrar el resto en http://www.simplemobiletools.com + Esta aplicación es sólo una parte de una mayor serie de aplicaciones. Puede encontrar el resto en https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ La permission Contacts ne sert qu\'à importer l\'anniversaire de vos contacts. - Cette application est juste une pièce d\'une plus grosse série d\'applications. Vous pouvez trouver le reste de celles-ci à http://www.simplemobiletools.com + Cette application est juste une pièce d\'une plus grosse série d\'applications. Vous pouvez trouver le reste de celles-ci à https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ O permiso aos Contactos só é preciso se quere importar os cumpleanos dos contactos. - Esta aplicación é parte de unha serie máis grande de aplicativos. Puede atopar o resto en http://www.simplemobiletools.com + Esta aplicación é parte de unha serie máis grande de aplicativos. Puede atopar o resto en https://www.simplemobiletools.com CalDAV @@ -207,7 +208,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com + This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ Dopuštenje za kontakte upotrebljava se samo pri uvozu rođendana i obljetnica kontakata. - Ova je aplikacija samo dio većeg broja aplikacija. Možete pronaći ostatak na http://www.simplemobiletools.com + Ova je aplikacija samo dio većeg broja aplikacija. Možete pronaći ostatak na https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - Ez az alkalmazás egy nagyobb alkalmazás-sorozat része. A továbbiak itt találhatók: http://www.simplemobiletools.com + Ez az alkalmazás egy nagyobb alkalmazás-sorozat része. A továbbiak itt találhatók: https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com + This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com CalDAV @@ -196,7 +197,7 @@ לוח שנה פשוט עם אירועים, וויג\'ט בעיצוב אישי וללא פרסומות - לוח שנה אוף-ליין ללא כל אינטגרציה עם לוח שנה אחר. אפשר בקלות ליצור אירועים מחזוריים ותזכורות אליהם. יש אפשרות להציג את מספרי השבועות. מכיל וויג\'ט 4×4 שניתן להתאים אישית את גודלו, צבע הטקסט והרקע שלו, ושקיפותו. אין פרסומות או דרישות להרשאות בלתי-נחוצות. קוד המקור לגמרי פתוח, וניתן לעצב את צבעי הממשק.\nאפליקציה זו היא רק פיסה אחת מתוך סדרה גדולה יותר של אפליקציות. ניתן למצוא את השאר בכתובת http://www.simplemobiletools.com + לוח שנה אוף-ליין ללא כל אינטגרציה עם לוח שנה אחר. אפשר בקלות ליצור אירועים מחזוריים ותזכורות אליהם. יש אפשרות להציג את מספרי השבועות. מכיל וויג\'ט 4×4 שניתן להתאים אישית את גודלו, צבע הטקסט והרקע שלו, ושקיפותו. אין פרסומות או דרישות להרשאות בלתי-נחוצות. קוד המקור לגמרי פתוח, וניתן לעצב את צבעי הממשק.\nאפליקציה זו היא רק פיסה אחת מתוך סדרה גדולה יותר של אפליקציות. ניתן למצוא את השאר בכתובת https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - このアプリは、大きな一連のアプリの一つです。 他のアプリは http://www.simplemobiletools.com で見つけることができます + このアプリは、大きな一連のアプリの一つです。 他のアプリは https://www.simplemobiletools.com で見つけることができます CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - 이 앱은 더 큰 시리즈의 앱들 중 하나입니다. 나머지는 http://www.simplemobiletools.com 에서 찾을 수 있습니다. + 이 앱은 더 큰 시리즈의 앱들 중 하나입니다. 나머지는 https://www.simplemobiletools.com 에서 찾을 수 있습니다. CalDAV @@ -206,7 +207,7 @@ Kontaktų leidimas naudojamas tik importuoti kontaktų gimtadienius ir sukaktis. - Ši programėle yra viena iš keletos mūsų programėlių. Likusias Jūs galite rasti čia http://www.simplemobiletools.com + Ši programėle yra viena iš keletos mūsų programėlių. Likusias Jūs galite rasti čia https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com + This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ De machtiging voor contacten wordt alleen gebruikt voor het importeren van verjaardagen en feestdagen. - Deze app is onderdeel van een grotere verzameling. Vind de andere apps op http://www.simplemobiletools.com + Deze app is onderdeel van een grotere verzameling. Vind de andere apps op https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com + This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com CalDAV @@ -204,7 +205,7 @@ Uprawnienia kontaktów są używane tylko do importowania urodzin. - Niniejsza aplikacja jest tylko częścią naszej kolekcji prostych narzędzi. Ta, jak i pozostałe, dostępne są na stronie http://www.simplemobiletools.com + Niniejsza aplikacja jest tylko częścią naszej kolekcji prostych narzędzi. Ta, jak i pozostałe, dostępne są na stronie https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - Este aplicativo é apenas parte de um conjunto mais vasto de aplicações. Saiba mais em http://www.simplemobiletools.com + Este aplicativo é apenas parte de um conjunto mais vasto de aplicações. Saiba mais em https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ A permissão aos contactos apenas é utilizada para importar os aniversários. - Esta aplicação é apenas parte de um conjunto mais vasto de aplicações. Saiba mais em http://www.simplemobiletools.com + Esta aplicação é apenas parte de um conjunto mais vasto de aplicações. Saiba mais em https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ Разрешение на чтение контактов требуется только при импорте дней рождения. - Это приложение является лишь частью крупной серии приложений. Вы можете найти остальные на http://www.simplemobiletools.com + Это приложение является лишь частью крупной серии приложений. Вы можете найти остальные на https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ Oprávnenie ku kontaktom je používané iba pri pridávaní narodenín alebo výročí kontaktov. - Táto aplikácia je iba jednou zo skupiny aplikácií. Ostatné viete nájsť na http://www.simplemobiletools.com + Táto aplikácia je iba jednou zo skupiny aplikácií. Ostatné viete nájsť na https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ Kontaktbehörigheten används bara för att importera kontakters födelsedagar och årsdagar. - Denna app är bara en del av en större serie appar. Du hittar resten av dem på http://www.simplemobiletools.com + Denna app är bara en del av en större serie appar. Du hittar resten av dem på https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - Bu uygulama, daha büyük bir uygulama serisinden sadece bir parça. Geri kalanını şu adresten bulabilirsiniz: http://www.simplemobiletools.com + Bu uygulama, daha büyük bir uygulama serisinden sadece bir parça. Geri kalanını şu adresten bulabilirsiniz: https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ 聯絡人權限只是用來匯入聯絡人生日和紀念日。 - 這程式只是一系列眾多應用程式的其中一項,你可以在這發現更多 http://www.simplemobiletools.com + 這程式只是一系列眾多應用程式的其中一項,你可以在這發現更多 https://www.simplemobiletools.com CalDAV @@ -206,7 +207,7 @@ The Contacts permission is used only at importing contact birthdays and anniversaries. - This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com + This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com Herhaling @@ -151,7 +151,7 @@ Beschrijving vervangen door locatie van afspraken Alle afspraken verwijderen Alle afspraken verwijderen? Afspraaktypes en andere instellingen blijven behouden. - Show a grid + Rasterlijnen tonen CalDAV From 8bd24a5642cc7ec73e0b6a97081cf18b429f5517 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 11 Apr 2018 23:24:48 +0200 Subject: [PATCH 90/99] fix #431, make sure the proper day gets opened after clicking a widget --- app/src/main/AndroidManifest.xml | 5 ++++- .../simplemobiletools/calendar/activities/MainActivity.kt | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 51fc63868..4378de2f1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,6 +26,7 @@ @@ -34,7 +35,9 @@ - + diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index 4ca3a09e0..909b277b6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -209,6 +209,12 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + setIntent(intent) + checkOpenIntents() + } + private fun storeStateVariables() { config.apply { mStoredIsSundayFirst = isSundayFirst From 313422637dd43327b1fae1af1abb39fb10bf3e7d Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 12 Apr 2018 14:22:33 +0200 Subject: [PATCH 91/99] fix #44, show an optional grid on the monthly view if selected so --- .../calendar/activities/SettingsActivity.kt | 9 ++++++++ .../calendar/helpers/Config.kt | 4 ++++ .../calendar/helpers/Constants.kt | 1 + .../calendar/views/MonthView.kt | 22 +++++++++++++++++- app/src/main/res/layout/activity_settings.xml | 23 +++++++++++++++++++ 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt index 008f1335a..7fb8743bd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/SettingsActivity.kt @@ -52,6 +52,7 @@ class SettingsActivity : SimpleActivity() { setupDeleteAllEvents() setupReplaceDescription() setupWeekNumbers() + setupShowGrid() setupWeeklyStart() setupWeeklyEnd() setupVibrate() @@ -274,6 +275,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupShowGrid() { + settings_show_grid.isChecked = config.showGrid + settings_show_grid_holder.setOnClickListener { + settings_show_grid.toggle() + config.showGrid = settings_show_grid.isChecked + } + } + private fun setupReminderSound() { settings_reminder_sound.text = config.reminderSoundTitle diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt index 0f9de4500..8fd699de6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Config.kt @@ -85,6 +85,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(REPLACE_DESCRIPTION, false) set(replaceDescription) = prefs.edit().putBoolean(REPLACE_DESCRIPTION, replaceDescription).apply() + var showGrid: Boolean + get() = prefs.getBoolean(SHOW_GRID, false) + set(showGrid) = prefs.edit().putBoolean(SHOW_GRID, showGrid).apply() + fun getSyncedCalendarIdsAsList() = caldavSyncedCalendarIDs.split(",").filter { it.trim().isNotEmpty() } as ArrayList fun addDisplayEventType(type: String) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt index a8d998681..ab8956029 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/Constants.kt @@ -50,6 +50,7 @@ const val CALDAV_SYNCED_CALENDAR_IDS = "caldav_synced_calendar_ids" const val LAST_USED_CALDAV_CALENDAR = "last_used_caldav_calendar" const val DISPLAY_PAST_EVENTS = "display_past_events" const val REPLACE_DESCRIPTION = "replace_description" +const val SHOW_GRID = "show_grid" // repeat_rule for monthly repetition const val REPEAT_MONTH_SAME_DAY = 1 // ie 25th every month diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 66c5f71f0..2bb39700f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -31,6 +31,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con private var paint: Paint private var eventTitlePaint: TextPaint + private var gridPaint: Paint private var dayWidth = 0f private var dayHeight = 0f private var primaryColor = 0 @@ -65,6 +66,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con textAlign = Paint.Align.CENTER } + gridPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = textColor.adjustAlpha(LOW_ALPHA) + } + val smallerTextSize = resources.getDimensionPixelSize(R.dimen.smaller_text_size) eventTitleHeight = smallerTextSize eventTitlePaint = TextPaint(Paint.ANTI_ALIAS_FLAG).apply { @@ -112,6 +117,10 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con dayVerticalOffsets.clear() measureDaySize(canvas) + if (context.config.showGrid) { + drawGrid(canvas) + } + addWeekDayLetters(canvas) if (showWeekNumbers) { addWeekNumbers(canvas) @@ -141,6 +150,17 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con drawEvents(canvas) } + private fun drawGrid(canvas: Canvas) { + for (i in 0..6) { + canvas.drawLine(i * dayWidth, 0f, i * dayWidth, canvas.height.toFloat(), gridPaint) + } + + canvas.drawLine(0f, 0f, canvas.width.toFloat(), 0f, gridPaint) + for (i in 0..5) { + canvas.drawLine(0f, i * dayHeight + weekDaysLetterHeight, canvas.width.toFloat(), i * dayHeight + weekDaysLetterHeight, gridPaint) + } + } + private fun addWeekDayLetters(canvas: Canvas) { for (i in 0..6) { val xPos = horizontalOffset + (i + 1) * dayWidth - dayWidth / 2 @@ -148,7 +168,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con if (i == currDayOfWeek) { weekDayLetterPaint = getColoredPaint(primaryColor) } - canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight / 2f, weekDayLetterPaint) + canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight * 0.7f, weekDayLetterPaint) } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 6fb597e5d..6df46ade7 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -494,6 +494,29 @@ + + + + + + Date: Thu, 12 Apr 2018 15:24:33 +0200 Subject: [PATCH 92/99] fix #434, adding indonesian holidays --- app/src/main/assets/indonesia.ics | 300 ++++++++++++++++++ .../calendar/activities/MainActivity.kt | 1 + 2 files changed, 301 insertions(+) create mode 100644 app/src/main/assets/indonesia.ics diff --git a/app/src/main/assets/indonesia.ics b/app/src/main/assets/indonesia.ics new file mode 100644 index 000000000..c8f27e723 --- /dev/null +++ b/app/src/main/assets/indonesia.ics @@ -0,0 +1,300 @@ +BEGIN:VCALENDAR +BEGIN:VEVENT +UID:20171212T045342Z-268948299@marudot.com +DTSTART;VALUE=DATE:20180101 +DTEND;VALUE=DATE:20180101 +SUMMARY:New Year's Day 2018 +DESCRIPTION:Tahun Baru 2018 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-601964501@marudot.com +DTSTART;VALUE=DATE:20180216 +DTEND;VALUE=DATE:20180216 +SUMMARY:Chinese New Year +DESCRIPTION:Tahun Baru Imlek 2569 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-417357037@marudot.com +DTSTART;VALUE=DATE:20180228 +DTEND;VALUE=DATE:20180228 +SUMMARY:Coming to Indonesia-Cross Cultural Training +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-578292563@marudot.com +DTSTART;VALUE=DATE:20180301 +DTEND;VALUE=DATE:20180301 +SUMMARY:Working in Indonesia-Cross Cultural Workshop for Expats +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1099619811@marudot.com +DTSTART;VALUE=DATE:20180313 +DTEND;VALUE=DATE:20180313 +SUMMARY:Living in Indonesia-Cross Cultural Workshop for Spouses +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-894503703@marudot.com +DTSTART;VALUE=DATE:20180314 +DTEND;VALUE=DATE:20180314 +SUMMARY:Management in Indonesia-Cross Cultural Workshop +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-791851244@marudot.com +DTSTART;VALUE=DATE:20180317 +DTEND;VALUE=DATE:20180317 +SUMMARY:Balinese New Year +DESCRIPTION:Hari Raya Nyepi 1940 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-329618688@marudot.com +DTSTART;VALUE=DATE:20180330 +DTEND;VALUE=DATE:20180330 +SUMMARY:Good Friday +DESCRIPTION:Wafat Isa Al-Masih +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-190146881@marudot.com +DTSTART;VALUE=DATE:20180414 +DTEND;VALUE=DATE:20180414 +SUMMARY:Ascension of Prophet Muhammad SAW +DESCRIPTION:Isra’ Mi’raj Nabi Muhammad SAW +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-435386496@marudot.com +DTSTART;VALUE=DATE:20180501 +DTEND;VALUE=DATE:20180501 +SUMMARY:Labor Day +DESCRIPTION:Hari Buruh Internasional +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-418653428@marudot.com +DTSTART;VALUE=DATE:20180510 +DTEND;VALUE=DATE:20180510 +SUMMARY:Waisak Day (“Buddhas Birthday” 2562) +DESCRIPTION:Hari Waisak 2562 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-2110293750@marudot.com +DTSTART;VALUE=DATE:20180510 +DTEND;VALUE=DATE:20180510 +SUMMARY:Ascension Day of Jesus Christ +DESCRIPTION:Kenaikan Isa Almasih +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-119842090@marudot.com +DTSTART;VALUE=DATE:20180601 +DTEND;VALUE=DATE:20180601 +SUMMARY:Birthday of Pancasila +DESCRIPTION:Hari Lahir Pancasila +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1166612864@marudot.com +DTSTART;VALUE=DATE:20180615 +DTEND;VALUE=DATE:20180615 +SUMMARY:End of Ramadan – Eid-al-Fitr 1439H (1st of Shawwal) +DESCRIPTION:Hari Raya Idul Fitri 1439H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-640873938@marudot.com +DTSTART;VALUE=DATE:20180616 +DTEND;VALUE=DATE:20180616 +SUMMARY:End of Ramadan – Eid-al-Fitr 1439H (2nd of Shawwal) +DESCRIPTION:Hari Raya Idul Fitri 1439H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1948724575@marudot.com +DTSTART;VALUE=DATE:20180808 +DTEND;VALUE=DATE:20180808 +SUMMARY:Working in Indonesia-Cross Cultural Workshop for Expats +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1926764224@marudot.com +DTSTART;VALUE=DATE:20180814 +DTEND;VALUE=DATE:20180814 +SUMMARY:Management in Indonesia-Cross Cultural Workshop +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-828431129@marudot.com +DTSTART;VALUE=DATE:20180817 +DTEND;VALUE=DATE:20180817 +SUMMARY:Indonesia Independence Day +DESCRIPTION:Hari Kemerdekaan Republik Indonesia ke-73 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1713949044@marudot.com +DTSTART;VALUE=DATE:20180822 +DTEND;VALUE=DATE:20180822 +SUMMARY:Islamic feast of Sacrifice (Bakr-Eid) 1439H +DESCRIPTION:Hari Raya Idul Adha 1439H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1202137034@marudot.com +DTSTART;VALUE=DATE:20180911 +DTEND;VALUE=DATE:20180911 +SUMMARY:Islamic New Year (1st Muharram 1440H) +DESCRIPTION:Tahun Baru Islam 1440H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-209129850@marudot.com +DTSTART;VALUE=DATE:20181120 +DTEND;VALUE=DATE:20181120 +SUMMARY:Birth of the Prophet Muhammad SAW +DESCRIPTION:Maulid Nabi +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-946856460@marudot.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181225 +SUMMARY:Christmas Day +DESCRIPTION:Hari Raya Natal +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-2689482992@marudot.com +DTSTART;VALUE=DATE:20190101 +DTEND;VALUE=DATE:20190101 +SUMMARY:New Year's Day 2019 +DESCRIPTION:Tahun Baru 2019 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-6019645012@marudot.com +DTSTART;VALUE=DATE:20190205 +DTEND;VALUE=DATE:20190205 +SUMMARY:Chinese New Year +DESCRIPTION:Tahun Baru Imlek 2569 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-7918512442@marudot.com +DTSTART;VALUE=DATE:20190307 +DTEND;VALUE=DATE:20190307 +SUMMARY:Balinese New Year +DESCRIPTION:Hari Raya Nyepi 1940 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-3296186882@marudot.com +DTSTART;VALUE=DATE:20190419 +DTEND;VALUE=DATE:20190419 +SUMMARY:Good Friday +DESCRIPTION:Wafat Isa Al-Masih +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1901468812@marudot.com +DTSTART;VALUE=DATE:20190530 +DTEND;VALUE=DATE:20190530 +SUMMARY:Ascension of Prophet Muhammad SAW +DESCRIPTION:Isra’ Mi’raj Nabi Muhammad SAW +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-4353864962@marudot.com +DTSTART;VALUE=DATE:20190501 +DTEND;VALUE=DATE:20190501 +SUMMARY:Labor Day +DESCRIPTION:Hari Buruh Internasional +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-4186534282@marudot.com +DTSTART;VALUE=DATE:20190519 +DTEND;VALUE=DATE:20190519 +SUMMARY:Waisak Day (“Buddhas Birthday” 2562) +DESCRIPTION:Hari Waisak 2562 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-21102937502@marudot.com +DTSTART;VALUE=DATE:20190530 +DTEND;VALUE=DATE:20190530 +SUMMARY:Ascension Day of Jesus Christ +DESCRIPTION:Kenaikan Isa Almasih +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-1198420902@marudot.com +DTSTART;VALUE=DATE:20190601 +DTEND;VALUE=DATE:20190601 +SUMMARY:Birthday of Pancasila +DESCRIPTION:Hari Lahir Pancasila +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-11666128642@marudot.com +DTSTART;VALUE=DATE:20180605 +DTEND;VALUE=DATE:20180605 +SUMMARY:End of Ramadan – Eid-al-Fitr 1439H (1st of Shawwal) +DESCRIPTION:Hari Raya Idul Fitri 1439H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-6408739382@marudot.com +DTSTART;VALUE=DATE:20180606 +DTEND;VALUE=DATE:20180606 +SUMMARY:End of Ramadan – Eid-al-Fitr 1439H (2nd of Shawwal) +DESCRIPTION:Hari Raya Idul Fitri 1439H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-8284311292@marudot.com +DTSTART;VALUE=DATE:20190817 +DTEND;VALUE=DATE:20190817 +SUMMARY:Indonesia Independence Day +DESCRIPTION:Hari Kemerdekaan Republik Indonesia ke-73 +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-17139490442@marudot.com +DTSTART;VALUE=DATE:20180812 +DTEND;VALUE=DATE:20180812 +SUMMARY:Islamic feast of Sacrifice (Bakr-Eid) 1439H +DESCRIPTION:Hari Raya Idul Adha 1439H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-12021370342@marudot.com +DTSTART;VALUE=DATE:20180901 +DTEND;VALUE=DATE:20180901 +SUMMARY:Islamic New Year (1st Muharram 1440H) +DESCRIPTION:Tahun Baru Islam 1440H +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-2091298502@marudot.com +DTSTART;VALUE=DATE:20181110 +DTEND;VALUE=DATE:20181110 +SUMMARY:Birth of the Prophet Muhammad SAW +DESCRIPTION:Maulid Nabi +STATUS:CONFIRMED +END:VEVENT +BEGIN:VEVENT +UID:20171212T045342Z-9468564602@marudot.com +DTSTART;VALUE=DATE:20181225 +DTEND;VALUE=DATE:20181225 +SUMMARY:Christmas Day +DESCRIPTION:Hari Raya Natal +STATUS:CONFIRMED +END:VEVENT +END:VCALENDAR diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index 909b277b6..fa577228f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -758,6 +758,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { put("Hellas", "greece.ics") put("Hrvatska", "croatia.ics") put("India", "india.ics") + put("Indonesia", "indonesia.ics") put("Ísland", "iceland.ics") put("Italia", "italy.ics") put("Latvija", "latvia.ics") From d8c0f6c01e2b0250b8faec2cf55aee1e0b02b9e5 Mon Sep 17 00:00:00 2001 From: 10cents Date: Thu, 12 Apr 2018 22:44:10 +0200 Subject: [PATCH 93/99] show_a_grid --- app/src/main/res/values-da/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 9e6b55329..39b0e0703 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -151,7 +151,7 @@ Erstat beskrivelse med sted Slet alle begivenheder Er du sikker på at du vil slette alle begivenheder? Dine begivenhedstyper og andre indstillinger vil forblive intakte. - Show a grid + Vis i tern CalDAV From 15719b643000c4bba32857e770bd8070e672971b Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 12 Apr 2018 22:50:24 +0200 Subject: [PATCH 94/99] fix monthly view grid with visible week numbers --- app/build.gradle | 2 +- .../com/simplemobiletools/calendar/views/MonthView.kt | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8f7cca10a..7d9e81612 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.18.19' + implementation 'com.simplemobiletools:commons:3.18.22' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt index 2bb39700f..9b0ef9579 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/views/MonthView.kt @@ -151,10 +151,16 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con } private fun drawGrid(canvas: Canvas) { + // vertical lines for (i in 0..6) { - canvas.drawLine(i * dayWidth, 0f, i * dayWidth, canvas.height.toFloat(), gridPaint) + var lineX = i * dayWidth + if (showWeekNumbers) { + lineX += horizontalOffset + } + canvas.drawLine(lineX, 0f, lineX, canvas.height.toFloat(), gridPaint) } + // horizontal lines canvas.drawLine(0f, 0f, canvas.width.toFloat(), 0f, gridPaint) for (i in 0..5) { canvas.drawLine(0f, i * dayHeight + weekDaysLetterHeight, canvas.width.toFloat(), i * dayHeight + weekDaysLetterHeight, gridPaint) @@ -182,7 +188,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con val id = "$weekOfYear:" val yPos = i * dayHeight + weekDaysLetterHeight - canvas.drawText(id, horizontalOffset.toFloat(), yPos + paint.textSize, weekNumberPaint) + canvas.drawText(id, horizontalOffset.toFloat() * 0.9f, yPos + paint.textSize, weekNumberPaint) } } From 18d2a4fb139aa784e348d42058c94a13a2d1a4d8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 13 Apr 2018 10:12:52 +0200 Subject: [PATCH 95/99] fix #383, allow exporting files in an SD card --- .../calendar/activities/MainActivity.kt | 3 +-- .../simplemobiletools/calendar/extensions/Activity.kt | 2 +- .../simplemobiletools/calendar/helpers/IcsExporter.kt | 10 ++++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt index fa577228f..3617d07d5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt @@ -662,8 +662,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { if (events.isEmpty()) { toast(R.string.no_entries_for_exporting) } else { - toast(R.string.exporting) - IcsExporter().exportEvents(this, file, events as ArrayList) { + IcsExporter().exportEvents(this, file, events as ArrayList, true) { toast(when (it) { IcsExporter.ExportResult.EXPORT_OK -> R.string.exporting_successful IcsExporter.ExportResult.EXPORT_PARTIAL -> R.string.exporting_some_entries_failed diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt index 4acabf970..600770afb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/extensions/Activity.kt @@ -23,7 +23,7 @@ fun BaseSimpleActivity.shareEvents(ids: List) { } val events = dbHelper.getEventsWithIds(ids) - IcsExporter().exportEvents(this, file, events) { + IcsExporter().exportEvents(this, file, events, false) { if (it == IcsExporter.ExportResult.EXPORT_OK) { sharePathIntent(file.absolutePath, BuildConfig.APPLICATION_ID) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsExporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsExporter.kt index b5f72072b..472c967f6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsExporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/IcsExporter.kt @@ -1,10 +1,12 @@ package com.simplemobiletools.calendar.helpers +import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.helpers.IcsExporter.ExportResult.* import com.simplemobiletools.calendar.models.Event import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.getFileOutputStream +import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.extensions.writeLn import com.simplemobiletools.commons.models.FileDirItem import java.io.BufferedWriter @@ -18,14 +20,18 @@ class IcsExporter { private var eventsExported = 0 private var eventsFailed = 0 - fun exportEvents(activity: BaseSimpleActivity, file: File, events: ArrayList, callback: (result: ExportResult) -> Unit) { + fun exportEvents(activity: BaseSimpleActivity, file: File, events: ArrayList, showExportingToast: Boolean, callback: (result: ExportResult) -> Unit) { val fileDirItem = FileDirItem(file.absolutePath, file.name) - activity.getFileOutputStream(fileDirItem) { + activity.getFileOutputStream(fileDirItem, true) { if (it == null) { callback(EXPORT_FAIL) return@getFileOutputStream } + if (showExportingToast) { + activity.toast(R.string.exporting) + } + it.bufferedWriter().use { out -> out.writeLn(BEGIN_CALENDAR) out.writeLn(CALENDAR_PRODID) From 3765f7c67ff50442bb9a98c61615b25501fd2fe4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 13 Apr 2018 10:42:12 +0200 Subject: [PATCH 96/99] update commons to 3.18.23 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 7d9e81612..0e5622bc9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,7 +46,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:3.18.22' + implementation 'com.simplemobiletools:commons:3.18.23' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.android.support:multidex:1.0.3' From 58e4e420634c6f3f87baa779965a23a442e765ae Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 13 Apr 2018 10:52:51 +0200 Subject: [PATCH 97/99] fix #438, set caldav event status to confirmed by default --- .../com/simplemobiletools/calendar/helpers/CalDAVHandler.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVHandler.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVHandler.kt index b699e4d36..b812d5b26 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVHandler.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/helpers/CalDAVHandler.kt @@ -361,6 +361,7 @@ class CalDAVHandler(val context: Context) { put(CalendarContract.Events.RRULE, Parser().getRepeatCode(event)) put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().toString()) put(CalendarContract.Events.EVENT_LOCATION, event.location) + put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CONFIRMED) if (event.getIsAllDay() && event.endTS > event.startTS) event.endTS += DAY From bb02913472904f2fcbfcb1f4b7a82ca9c57cadf1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 13 Apr 2018 10:54:34 +0200 Subject: [PATCH 98/99] update version to 3.4.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0e5622bc9..02719d1fe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.simplemobiletools.calendar" minSdkVersion 16 targetSdkVersion 27 - versionCode 117 - versionName "3.4.1" + versionCode 118 + versionName "3.4.2" multiDexEnabled true setProperty("archivesBaseName", "calendar") } From d6f0e46fc89d8298f0e494d110ba0c86f0a429c4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 13 Apr 2018 10:54:44 +0200 Subject: [PATCH 99/99] updating changelog --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index be9d54ffc..3d6e2f0f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Changelog ========== +Version 3.4.2 *(2018-04-13)* +---------------------------- + + * Hide public notification content if desired so (by fraang) + * Added optional grid on the monthly view + * Allow exporting events on SD cards + * Allow selecting No Sound as a reminder sound + * Set default event status for CalDAV events as Confirmed + Version 3.4.1 *(2018-03-30)* ----------------------------