Merge pull request #37 from SimpleMobileTools/master

upd
This commit is contained in:
solokot 2021-03-22 14:16:21 +03:00 committed by GitHub
commit 9e1540c463
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 209 additions and 73 deletions

View File

@ -1,6 +1,13 @@
Changelog
==========
Version 6.13.2 *(2021-03-11)*
----------------------------
* Allow repeating events every fifth weekday
* Properly highlight weekends on widgets, if selected so
* Fixed some CalDAV syncing and .ics file importing issues
Version 6.13.1 *(2021-03-10)*
----------------------------

View File

@ -17,8 +17,8 @@ android {
applicationId "com.simplemobiletools.calendar.pro"
minSdkVersion 21
targetSdkVersion 30
versionCode 193
versionName "6.13.1"
versionCode 194
versionName "6.13.2"
multiDexEnabled true
setProperty("archivesBaseName", "calendar")
vectorDrawables.useSupportLibrary = true
@ -63,7 +63,7 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:5.34.21'
implementation 'com.simplemobiletools:commons:5.34.24'
implementation 'joda-time:joda-time:2.10.3'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

View File

@ -298,6 +298,7 @@ class EventActivity : SimpleActivity() {
mRepeatInterval != mEvent.repeatInterval ||
mRepeatRule != mEvent.repeatRule ||
mEventTypeId != mEvent.eventType ||
mEventCalendarId != mEvent.getCalDAVCalendarId() ||
hasTimeChanged) {
return true
}
@ -970,6 +971,7 @@ class EventActivity : SimpleActivity() {
DELETE_FUTURE_OCCURRENCES -> eventsHelper.addEventRepeatLimit(mEvent.id!!, mEventOccurrenceTS)
DELETE_ALL_OCCURRENCES -> eventsHelper.deleteEvent(mEvent.id!!, true)
}
runOnUiThread {
finish()
}
@ -1135,25 +1137,41 @@ class EventActivity : SimpleActivity() {
private fun showEditRepeatingEventDialog() {
EditRepeatingEventDialog(this) {
if (it) {
ensureBackgroundThread {
eventsHelper.updateEvent(mEvent, true, true) {
finish()
when (it) {
0 -> {
ensureBackgroundThread {
eventsHelper.addEventRepetitionException(mEvent.id!!, mEventOccurrenceTS, true)
mEvent.apply {
parentId = id!!.toLong()
id = null
repeatRule = 0
repeatInterval = 0
repeatLimit = 0
}
eventsHelper.insertEvent(mEvent, true, true) {
finish()
}
}
}
} else {
ensureBackgroundThread {
eventsHelper.addEventRepetitionException(mEvent.id!!, mEventOccurrenceTS, true)
mEvent.apply {
parentId = id!!.toLong()
id = null
repeatRule = 0
repeatInterval = 0
repeatLimit = 0
1 -> {
ensureBackgroundThread {
eventsHelper.addEventRepeatLimit(mEvent.id!!, mEventOccurrenceTS)
mEvent.apply {
id = null
}
eventsHelper.insertEvent(mEvent, true, true) {
finish()
}
}
}
eventsHelper.insertEvent(mEvent, true, true) {
finish()
2 -> {
ensureBackgroundThread {
eventsHelper.addEventRepeatLimit(mEvent.id!!, mEventOccurrenceTS)
eventsHelper.updateEvent(mEvent, true, true) {
finish()
}
}
}
}

View File

@ -86,7 +86,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
checkWhatsNewDialog()
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW && config.storedView != WEEKLY_VIEW)
calendar_fab.setOnClickListener {
launchNewEventIntent(currentFragments.last().getNewEventDayCode())
val lastFragment = currentFragments.last()
val allowChangingDay = lastFragment !is DayFragmentsHolder && lastFragment !is MonthDayFragmentsHolder
launchNewEventIntent(lastFragment.getNewEventDayCode(), allowChangingDay)
}
storeStateVariables()
@ -956,7 +958,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
search_results_list.beVisibleIf(events.isNotEmpty())
search_placeholder.beVisibleIf(events.isEmpty())
val listItems = getEventListItems(events)
val eventsAdapter = EventListAdapter(this, listItems, true, this, search_results_list, true) {
val eventsAdapter = EventListAdapter(this, listItems, true, this, search_results_list) {
if (it is ListEvent) {
Intent(applicationContext, EventActivity::class.java).apply {
putExtra(EVENT_ID, it.id)

View File

@ -339,6 +339,7 @@ class SettingsActivity : SimpleActivity() {
}
private fun setupReminderSound() {
settings_reminder_sound_holder.beGoneIf(isOreoPlus())
settings_reminder_sound.text = config.reminderSoundTitle
settings_reminder_sound_holder.setOnClickListener {

View File

@ -46,7 +46,7 @@ class WidgetListConfigureActivity : SimpleActivity() {
finish()
}
EventListAdapter(this, getListItems(), false, null, config_events_list, true) {}.apply {
EventListAdapter(this, getListItems(), false, null, config_events_list) {}.apply {
updateTextColor(mTextColor)
config_events_list.adapter = this
}

View File

@ -15,6 +15,7 @@ import com.simplemobiletools.calendar.pro.extensions.addDayNumber
import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.helpers.MonthlyCalendarImpl
import com.simplemobiletools.calendar.pro.helpers.MyWidgetMonthlyProvider
import com.simplemobiletools.calendar.pro.helpers.isWeekend
import com.simplemobiletools.calendar.pro.interfaces.MonthlyCalendar
import com.simplemobiletools.calendar.pro.models.DayMonthly
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
@ -40,6 +41,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
private var mTextColor = 0
private var mWeakTextColor = 0
private var mPrimaryColor = 0
private var mRedTextColor = 0
public override fun onCreate(savedInstanceState: Bundle?) {
useDynamicTheme = false
@ -129,6 +131,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
mTextColor = mTextColorWithoutTransparency
mWeakTextColor = mTextColorWithoutTransparency.adjustAlpha(LOWER_ALPHA)
mPrimaryColor = config.primaryColor
mRedTextColor = resources.getColor(R.color.red_text)
top_left_arrow.applyColorFilter(mTextColor)
top_right_arrow.applyColorFilter(mTextColor)
@ -167,7 +170,13 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
val day = mDays!![i]
removeAllViews()
context.addDayNumber(mTextColor, day, this, dayLabelHeight) { dayLabelHeight = it }
val dayTextColor = if (config.highlightWeekends && day.isWeekend) {
mRedTextColor
} else {
mTextColor
}
context.addDayNumber(dayTextColor, day, this, dayLabelHeight) { dayLabelHeight = it }
context.addDayEvents(day, this, resources, dividerMargin)
}
}
@ -195,7 +204,13 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
private fun updateLabels() {
for (i in 0..6) {
findViewById<TextView>(resources.getIdentifier("label_$i", "id", packageName)).apply {
setTextColor(mTextColor)
val textColor = if (config.highlightWeekends && isWeekend(i, config.isSundayFirst)) {
mRedTextColor
} else {
mTextColor
}
setTextColor(textColor)
}
}
}

View File

@ -29,7 +29,7 @@ import kotlinx.android.synthetic.main.event_list_section.view.*
import java.util.*
class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListItem>, val allowLongClick: Boolean, val listener: RefreshRecyclerViewListener?,
recyclerView: MyRecyclerView, val tryDimPastEvents: Boolean, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
private val topDivider = resources.getDrawable(R.drawable.divider_width)
private val allDayString = resources.getString(R.string.all_day)
@ -177,7 +177,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
startTextColor = adjustedPrimaryColor
}
if (tryDimPastEvents && dimPastEvents && listEvent.isPastEvent && !isPrintVersion) {
if (dimPastEvents && listEvent.isPastEvent && !isPrintVersion) {
startTextColor = startTextColor.adjustAlpha(LOWER_ALPHA)
endTextColor = endTextColor.adjustAlpha(LOWER_ALPHA)
}

View File

@ -40,18 +40,18 @@ class EditEventTypeDialog(val activity: Activity, var eventType: EventType? = nu
}
AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok, null)
.setNegativeButton(R.string.cancel, null)
.create().apply {
activity.setupDialogStuff(view, this, if (isNewEvent) R.string.add_new_type else R.string.edit_type) {
showKeyboard(view.type_title)
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
ensureBackgroundThread {
eventTypeConfirmed(view.type_title.value, this)
}
.setPositiveButton(R.string.ok, null)
.setNegativeButton(R.string.cancel, null)
.create().apply {
activity.setupDialogStuff(view, this, if (isNewEvent) R.string.add_new_type else R.string.edit_type) {
showKeyboard(view.type_title)
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
ensureBackgroundThread {
eventTypeConfirmed(view.type_title.value, this)
}
}
}
}
}
private fun setupColor(view: ImageView) {

View File

@ -8,13 +8,14 @@ import com.simplemobiletools.commons.extensions.hideKeyboard
import com.simplemobiletools.commons.extensions.setupDialogStuff
import kotlinx.android.synthetic.main.dialog_edit_repeating_event.view.*
class EditRepeatingEventDialog(val activity: SimpleActivity, val callback: (allOccurrences: Boolean) -> Unit) {
class EditRepeatingEventDialog(val activity: SimpleActivity, val callback: (allOccurrences: Int) -> Unit) {
var dialog: AlertDialog
init {
val view = (activity.layoutInflater.inflate(R.layout.dialog_edit_repeating_event, null) as ViewGroup).apply {
edit_repeating_event_one_only.setOnClickListener { sendResult(false) }
edit_repeating_event_all_occurrences.setOnClickListener { sendResult(true) }
edit_repeating_event_one_only.setOnClickListener { sendResult(0) }
edit_repeating_event_this_and_future_occurences.setOnClickListener { sendResult(1)}
edit_repeating_event_all_occurrences.setOnClickListener { sendResult(2) }
}
dialog = AlertDialog.Builder(activity)
@ -25,7 +26,7 @@ class EditRepeatingEventDialog(val activity: SimpleActivity, val callback: (allO
}
}
private fun sendResult(allOccurrences: Boolean) {
private fun sendResult(allOccurrences: Int) {
callback(allOccurrences)
dialog.dismiss()
}

View File

@ -35,13 +35,13 @@ class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventTyp
wasInit = true
dialog = AlertDialog.Builder(activity)
.create().apply {
activity.setupDialogStuff(view, this)
.create().apply {
activity.setupDialogStuff(view, this)
if (colors.isEmpty()) {
showCustomColorPicker()
}
if (colors.isEmpty()) {
showCustomColorPicker()
}
}
}
private fun addRadioButton(colorKey: Int, color: Int) {
@ -68,7 +68,7 @@ class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventTyp
}
private fun showCustomColorPicker() {
ColorPickerDialog(activity, activity.config.primaryColor) { wasPositivePressed, color ->
ColorPickerDialog(activity, eventType.color) { wasPositivePressed, color ->
if (wasPositivePressed) {
callback(color)
}

View File

@ -331,20 +331,24 @@ fun Context.rescheduleReminder(event: Event?, minutes: Int) {
}
}
fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode()) {
// if the default event start time is set to "Next full hour" and the event is created before midnight, it could change the day
fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode(), allowChangingDay: Boolean = false) {
Intent(applicationContext, EventActivity::class.java).apply {
putExtra(NEW_EVENT_START_TS, getNewEventTimestampFromCode(dayCode))
putExtra(NEW_EVENT_START_TS, getNewEventTimestampFromCode(dayCode, allowChangingDay))
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(this)
}
}
fun Context.getNewEventTimestampFromCode(dayCode: String): Long {
fun Context.getNewEventTimestampFromCode(dayCode: String, allowChangingDay: Boolean = false): Long {
val calendar = Calendar.getInstance()
val defaultStartTime = config.defaultStartTime
val currHour = calendar.get(Calendar.HOUR_OF_DAY)
var dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(currHour)
var newDateTime = dateTime.plusHours(1).withMinuteOfHour(0).withSecondOfMinute(0).withMillisOfSecond(0)
if (!allowChangingDay && dateTime.dayOfMonth() != newDateTime.dayOfMonth()) {
newDateTime = newDateTime.minusDays(1)
}
return if (defaultStartTime == -1) {
newDateTime.seconds()

View File

@ -124,6 +124,7 @@ class DayFragment : Fragment() {
}.apply {
mHolder.day_events.adapter = this
}
mHolder.day_events.scheduleLayoutAnimation()
}
private fun editEvent(event: Event) {

View File

@ -115,7 +115,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
val currAdapter = mView.calendar_events_list.adapter
if (currAdapter == null || forceRecreation) {
EventListAdapter(activity as SimpleActivity, listItems, true, this, mView.calendar_events_list, true) {
EventListAdapter(activity as SimpleActivity, listItems, true, this, mView.calendar_events_list) {
if (it is ListEvent) {
context?.editEvent(it)
}
@ -123,6 +123,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
mView.calendar_events_list.adapter = this
}
mView.calendar_events_list.scheduleLayoutAnimation()
mView.calendar_events_list.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
override fun updateTop() {
fetchPreviousPeriod()

View File

@ -143,13 +143,14 @@ class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListene
val currAdapter = mHolder.month_day_events_list.adapter
if (currAdapter == null) {
EventListAdapter(activity as SimpleActivity, listItems, true, this, month_day_events_list, false) {
EventListAdapter(activity as SimpleActivity, listItems, true, this, month_day_events_list) {
if (it is ListEvent) {
activity?.editEvent(it)
}
}.apply {
month_day_events_list.adapter = this
}
month_day_events_list.scheduleLayoutAnimation()
} else {
(currAdapter as EventListAdapter).updateListItems(listItems)
}

View File

@ -245,7 +245,7 @@ class CalDAVHelper(val context: Context) {
if (exdate.length > 8) {
val lines = exdate.split("\n")
for (line in lines) {
val dates = line.split(",")
val dates = line.split(",", ";")
dates.filter { it.isNotEmpty() && it[0].isDigit() }.forEach {
if (it.endsWith("Z")) {
// convert for example "20190216T230000Z" to "20190217000000" in Slovakia in a weird way
@ -258,9 +258,6 @@ class CalDAVHelper(val context: Context) {
var potentialTS = it.substring(0, 8)
if (potentialTS.areDigitsOnly()) {
event.repetitionExceptions.add(potentialTS)
} else if (it.contains(";")) {
potentialTS = it.substringAfter(";").substring(0, 8)
event.repetitionExceptions.add(potentialTS)
}
}
}

View File

@ -109,7 +109,7 @@ const val UID = "UID:"
const val ACTION = "ACTION:"
const val ATTENDEE = "ATTENDEE:"
const val MAILTO = "mailto:"
const val TRIGGER = "TRIGGER:"
const val TRIGGER = "TRIGGER"
const val RRULE = "RRULE:"
const val CATEGORIES = "CATEGORIES:"
const val STATUS = "STATUS:"

View File

@ -107,13 +107,13 @@ class IcsImporter(val activity: SimpleActivity) {
parseRepeatRule()
}
} else if (line.startsWith(ACTION)) {
val action = line.substring(ACTION.length)
val action = line.substring(ACTION.length).trim()
isProperReminderAction = action == DISPLAY || action == EMAIL
if (isProperReminderAction) {
curReminderTriggerAction = if (action == DISPLAY) REMINDER_NOTIFICATION else REMINDER_EMAIL
}
} else if (line.startsWith(TRIGGER)) {
val value = line.substring(TRIGGER.length)
val value = line.substringAfterLast(":")
curReminderTriggerMinutes = Parser().parseDurationSeconds(value) / 60
if (!value.startsWith("-")) {
curReminderTriggerMinutes *= -1
@ -166,6 +166,7 @@ class IcsImporter(val activity: SimpleActivity) {
}
if (curTitle.isEmpty() || curStart == -1L) {
line = curLine
continue
}
@ -173,6 +174,7 @@ class IcsImporter(val activity: SimpleActivity) {
val eventToUpdate = existingEvents.filter { curImportId.isNotEmpty() && curImportId == it.importId }.sortedByDescending { it.lastUpdated }.firstOrNull()
if (eventToUpdate != null && eventToUpdate.lastUpdated >= curLastModified) {
eventsAlreadyExist++
line = curLine
continue
}
@ -198,6 +200,7 @@ class IcsImporter(val activity: SimpleActivity) {
event.importId = event.hashCode().toString()
if (existingEvents.map { it.importId }.contains(event.importId)) {
eventsAlreadyExist++
line = curLine
continue
}
}

View File

@ -116,10 +116,18 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
}
}
val weakTextColor = textColor.adjustAlpha(MEDIUM_ALPHA)
for (i in 0 until len) {
val day = days[i]
val currTextColor = if (day.isThisMonth) textColor else weakTextColor
val redTextColor = context.resources.getColor(R.color.red_text)
val dayTextColor = if (context.config.highlightWeekends && day.isWeekend) {
redTextColor
} else {
textColor
}
val weakTextColor = dayTextColor.adjustAlpha(MEDIUM_ALPHA)
val currTextColor = if (day.isThisMonth) dayTextColor else weakTextColor
val id = res.getIdentifier("day_$i", "id", packageName)
views.removeAllViews(id)
addDayNumber(context, views, day, currTextColor, id)
@ -214,13 +222,22 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
}
private fun updateDayLabels(context: Context, views: RemoteViews, resources: Resources, textColor: Int) {
val sundayFirst = context.config.isSundayFirst
val config = context.config
val sundayFirst = config.isSundayFirst
val smallerFontSize = context.getWidgetFontSize()
val packageName = context.packageName
val letters = context.resources.getStringArray(R.array.week_day_letters)
val redTextColor = resources.getColor(R.color.red_text)
for (i in 0..6) {
val id = resources.getIdentifier("label_$i", "id", packageName)
views.setTextColor(id, textColor)
val dayTextColor = if (config.highlightWeekends && isWeekend(i, sundayFirst)) {
redTextColor
} else {
textColor
}
views.setTextColor(id, dayTextColor)
views.setTextSize(id, smallerFontSize)
var index = i

View File

@ -54,7 +54,7 @@ data class Event(
repeatInterval % YEAR == 0 -> when (repeatRule) {
REPEAT_ORDER_WEEKDAY -> addXthDayInterval(oldStart, original, false)
REPEAT_ORDER_WEEKDAY_USE_LAST -> addXthDayInterval(oldStart, original, true)
else -> oldStart.plusYears(repeatInterval / YEAR)
else -> addYearsWithSameDay(oldStart)
}
repeatInterval % MONTH == 0 -> when (repeatRule) {
REPEAT_SAME_DAY -> addMonthsWithSameDay(oldStart, original)
@ -77,6 +77,20 @@ data class Event(
endTS = newEndTS
}
// if an event should happen on 29th Feb. with Same Day yearly repetition, show it only on leap years
private fun addYearsWithSameDay(currStart: DateTime): DateTime {
var newDateTime = currStart.plusYears(repeatInterval / YEAR)
// Date may slide within the same month
if (newDateTime.dayOfMonth != currStart.dayOfMonth) {
while (newDateTime.dayOfMonth().maximumValue < currStart.dayOfMonth) {
newDateTime = newDateTime.plusYears(repeatInterval / YEAR)
}
newDateTime = newDateTime.withDayOfMonth(currStart.dayOfMonth)
}
return newDateTime
}
// if an event should happen on 31st with Same Day monthly repetition, dont show it at all at months with 30 or less days
private fun addMonthsWithSameDay(currStart: DateTime, original: Event): DateTime {
var newDateTime = currStart.plusMonths(repeatInterval / MONTH)

View File

@ -30,6 +30,14 @@
android:paddingTop="@dimen/activity_margin"
android:text="@string/update_one_only"/>
<com.simplemobiletools.commons.views.MyCompatRadioButton
android:id="@+id/edit_repeating_event_this_and_future_occurences"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/update_this_and_future_occurrences" />
<com.simplemobiletools.commons.views.MyCompatRadioButton
android:id="@+id/edit_repeating_event_all_occurrences"
android:layout_width="match_parent"

View File

@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/day_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/medium_margin">
<include layout="@layout/top_navigation"/>
<include layout="@layout/top_navigation" />
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/day_events"
@ -15,6 +14,7 @@
android:layout_height="match_parent"
android:layout_below="@+id/top_value"
android:clipToPadding="false"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/>
android:layoutAnimation="@anim/layout_animation"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
</RelativeLayout>

View File

@ -10,6 +10,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:overScrollMode="never"
android:paddingTop="@dimen/medium_margin"
android:scrollbars="vertical"
@ -36,8 +37,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/calendar_empty_list_placeholder"
android:background="?attr/selectableItemBackground"
android:layout_centerHorizontal="true"
android:background="?attr/selectableItemBackground"
android:gravity="center"
android:padding="@dimen/activity_margin"
android:text="@string/create_new_event"

View File

@ -63,6 +63,7 @@
android:layout_height="match_parent"
android:layout_below="@+id/month_day_selected_day_label"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:scrollbars="vertical"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">حذف هذه النسخة وكل النسخ المستقبلية</string>
<string name="delete_all_occurrences">حذف جميع النسخ</string>
<string name="update_one_only">تم تحديث النسخ المحددة فقط</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">تحديث جميع النسخ</string>
<string name="repeat_till_date">كرر حتي تاريخ</string>
<string name="stop_repeating_after_x">توقف عن التكرار بعد x نسخة</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Bunu və bütün gələcək hadisələri sil</string>
<string name="delete_all_occurrences">Bütün hadisələri sil</string>
<string name="update_one_only">Yalnız seçilmiş hadisəni yenilə</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Bütün hadisələri yenilə</string>
<string name="repeat_till_date">Bir vaxta qədər təkrarla</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -55,6 +55,7 @@
<string name="delete_future_occurrences">এটি এবং ভবিষ্যতের সমস্ত ঘটনা মুছুন</string>
<string name="delete_all_occurrences">সমস্ত ঘটনা মুছুন</string>
<string name="update_one_only">সিলেক্টেড ঘটনা আপডেট করুন</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">সমস্ত ঘটনা আপডেট করুন</string>
<string name="repeat_till_date">একটি তারিখ পর্যন্ত পুনরাবৃত্তি করুন</string>
<string name="stop_repeating_after_x">x ঘটনার পর পুনরাবৃত্তি থামান</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Dilemel an holl zegouezhioù</string>
<string name="update_one_only">Hizivaat an degouezh diuzet hepken</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Hizivaat an holl zegouezhioù</string>
<string name="repeat_till_date">Addegouezhout betek un deiziad</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Vymazat tento a jakékoliv budoucí výskyty</string>
<string name="delete_all_occurrences">Vymazat všechny výskyty</string>
<string name="update_one_only">Změnit pouze vybrané výskyty</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Změnit všechny výskyty</string>
<string name="repeat_till_date">Opakovat až do</string>
<string name="stop_repeating_after_x">Zastavit opakování po x výskytech</string>

View File

@ -6,7 +6,7 @@
<string name="daily_view">Daglig</string>
<string name="weekly_view">Ugentlig</string>
<string name="monthly_view">Månedlig</string>
<string name="monthly_daily_view">Monthly + daily view</string>
<string name="monthly_daily_view">Månedslig + daglig visning</string>
<string name="yearly_view">Årlig</string>
<string name="simple_event_list">Begivenhedsliste</string>
<string name="no_upcoming_events">Du ser ikke ud til at have nogen forestående begivenheder.</string>
@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Slet denne og alle fremtidige forekomster</string>
<string name="delete_all_occurrences">Slet alle forekomster</string>
<string name="update_one_only">Opdater kun denne forekomst</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Opdater alle forekomster</string>
<string name="repeat_till_date">Gentag indtil</string>
<string name="stop_repeating_after_x">Stop gentagelse efter x gange</string>
@ -71,7 +72,7 @@
<string name="second_m">anden</string>
<string name="third_m">tredje</string>
<string name="fourth_m">fjerde</string>
<string name="fifth_m">fifth</string>
<string name="fifth_m">femte</string>
<string name="last_m">sidste</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Diese und zukünftige Wiederholungen löschen</string>
<string name="delete_all_occurrences">Alle Wiederholungen löschen</string>
<string name="update_one_only">Nur die ausgewählte Wiederholung ändern</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Alle Wiederholungen ändern</string>
<string name="repeat_till_date">Bis zu bestimmtem Datum wiederholen</string>
<string name="stop_repeating_after_x">Stopp nach x Wiederholungen</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Διαγράψτε αυτό και όλα τα μελλοντικά συμβάντα</string>
<string name="delete_all_occurrences">Διαγράψτε όλα τα περιστατικά</string>
<string name="update_one_only">Ενημέρωση μόνο του επιλεγμένου περιστατικού</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Ενημέρωση όλων των περιστατικών</string>
<string name="repeat_till_date">Επαναλάβετε μέχρι μια ημερομηνία</string>
<string name="stop_repeating_after_x">Παύση επαναλήψεων μετά από x εμφανίσεις</string>
@ -71,7 +72,7 @@
<string name="second_m">δεύτερη</string>
<string name="third_m">τρίτη</string>
<string name="fourth_m">τέταρτη</string>
<string name="fifth_m">fifth</string>
<string name="fifth_m">πέμπτη</string>
<string name="last_m">τελευταία</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
@ -82,7 +83,7 @@
<string name="second_f">δεύτερη</string>
<string name="third_f">τρίτη</string>
<string name="fourth_f">τέταρτη</string>
<string name="fifth_f">fifth</string>
<string name="fifth_f">πέμπτη</string>
<string name="last_f">τελευταία</string>
<!-- Birthdays -->

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Eliminar evento y repeticiones futuras</string>
<string name="delete_all_occurrences">Eliminar todos los eventos</string>
<string name="update_one_only">Actualizar sólo el evento seleccionado</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Actualizar todos los eventos</string>
<string name="repeat_till_date">Repetir hasta la fecha</string>
<string name="stop_repeating_after_x">Repetir un número de ocasiones</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Ezabatu gertaera hau eta datozen guztiak</string>
<string name="delete_all_occurrences">Ezabatu gertaera guztiak</string>
<string name="update_one_only">Eguneratu hautatutako gertaera soilik</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Eguneratu gertaera guztiak</string>
<string name="repeat_till_date">Errepikatu data zehatz batera arte</string>
<string name="stop_repeating_after_x">Errepikatzeari utzi x gertaera ondoren</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Poista tämä ja seuraavat esiintymät</string>
<string name="delete_all_occurrences">Poista kaikki esiintymät</string>
<string name="update_one_only">Päivitä vain valittu esiintymä</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Päivitä kaikki esiintymät</string>
<string name="repeat_till_date">Toista päivään</string>
<string name="stop_repeating_after_x">Lopeta toistaminen x esiintymän jälkeen</string>

View File

@ -52,6 +52,7 @@
<string name="delete_future_occurrences">Supprimer ceci et toutes les occurrences futures</string>
<string name="delete_all_occurrences">Supprimer toutes les occurrences</string>
<string name="update_one_only">Mettre à jour seulement l\occurrence sélectionnée</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Mettre à jour toutes les occurrences</string>
<string name="repeat_till_date">Répéter jusqu\’à une date</string>
<string name="stop_repeating_after_x">Arrêter de répéter après x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Eliminar este e todos os eventos futuros</string>
<string name="delete_all_occurrences">Eliminar todos os eventos</string>
<string name="update_one_only">Actualizar só o evento seleccionado</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Actualizar todos os eventos</string>
<string name="repeat_till_date">Repetir ata a data</string>
<string name="stop_repeating_after_x">Deixar de repetir despois de x eventos</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">מחיקת כל האירועים העתידיים בסדרה</string>
<string name="delete_all_occurrences">מחיקת כל האירועים בסדרה</string>
<string name="update_one_only">עדכון האירוע הנוכחי בלבד</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">עדכון כל האירועים בסדרה</string>
<string name="repeat_till_date">חזרה עד לתאריך</string>
<string name="stop_repeating_after_x">‏להפסיק חזרה אחרי x פעמים</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Delete all occurrences</string>
<string name="update_one_only">Update the selected occurrence only</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Update all occurrences</string>
<string name="repeat_till_date">Repeat till a date</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Izbrišite ovo i sva buduća ponavljanja</string>
<string name="delete_all_occurrences">Izbriši sva ponavljanja</string>
<string name="update_one_only">Ažuriraj samo odabrano ponavljanje</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Ažuriraj sva ponavljanja</string>
<string name="repeat_till_date">Ponovi do datuma</string>
<string name="stop_repeating_after_x">Prestani ponavljati nakon x pojavljivanja</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Delete all occurrences</string>
<string name="update_one_only">Update the selected occurrence only</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Update all occurrences</string>
<string name="repeat_till_date">Repeat till a date</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Hapus acara ini dan semua perulangannya</string>
<string name="delete_all_occurrences">Hapus semua perulangan acara</string>
<string name="update_one_only">Perbarui acara ini saja</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Perbarui semua perulangan acara</string>
<string name="repeat_till_date">Ulangi sampai tanggal</string>
<string name="stop_repeating_after_x">Berhenti berulang setelah x kali</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Hapus acara ini dan semua perulangannya</string>
<string name="delete_all_occurrences">Hapus semua perulangan acara</string>
<string name="update_one_only">Perbarui acara ini saja</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Perbarui semua perulangan acara</string>
<string name="repeat_till_date">Ulangi sampai tanggal</string>
<string name="stop_repeating_after_x">Berhenti berulang setelah x kali</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Rimuovi questo e tutte le future occorrenze</string>
<string name="delete_all_occurrences">Elimina tutte le occorrenze</string>
<string name="update_one_only">Aggiorna solamente l\'occorenza selezionata</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Aggiorna tutte le occorenze</string>
<string name="repeat_till_date">Ripeti fino a una data</string>
<string name="stop_repeating_after_x">Smetti di ripetere dopo x occorrenze</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">מחיקת כל האירועים העתידיים בסדרה</string>
<string name="delete_all_occurrences">מחיקת כל האירועים בסדרה</string>
<string name="update_one_only">עדכון האירוע הנוכחי בלבד</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">עדכון כל האירועים בסדרה</string>
<string name="repeat_till_date">חזרה עד לתאריך</string>
<string name="stop_repeating_after_x">‏להפסיק חזרה אחרי x פעמים</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Delete all occurrences</string>
<string name="update_one_only">Update the selected occurrence only</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Update all occurrences</string>
<string name="repeat_till_date">Repeat till a date</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">반복되는 일정까지 삭제</string>
<string name="delete_all_occurrences">이후 모든 항목 삭제</string>
<string name="update_one_only">선택한 항목만 변경</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">이후 모든 항목 변경</string>
<string name="repeat_till_date">선택 날짜까지 반복</string>
<string name="stop_repeating_after_x">설정 횟수만큼 반복</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Ištrinti visus įvykius</string>
<string name="update_one_only">Atnaujinti tik pasirinktą įvykį</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Atnaujinti visus įvykius</string>
<string name="repeat_till_date">Pakartoti iki datos</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Dzēst šo un visus turpmākos notikumus</string>
<string name="delete_all_occurrences">Dzēst visus šos notikumus</string>
<string name="update_one_only">Aktualizēt tikai šo atlasīto notikumu</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Aktualizēt šos visus notikumus</string>
<string name="repeat_till_date">Atkārtot līdz datumam</string>
<string name="stop_repeating_after_x">Atkārtot X reizes</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Slett denne og alle framtidige forekomster</string>
<string name="delete_all_occurrences">Slett alle forekomster</string>
<string name="update_one_only">Oppdater bare den merkede forekomsten</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Oppdater alle forekomster</string>
<string name="repeat_till_date">Gjenta til en dato</string>
<string name="stop_repeating_after_x">Stopp å gjenta etter x forekomster</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Deze afspraak en hierop volgende herhalingen verwijderen</string>
<string name="delete_all_occurrences">Al deze afspraken verwijderen</string>
<string name="update_one_only">Alleen huidige afspraak bijwerken</string>
<string name="update_this_and_future_occurrences">Deze afspraak en hierop volgende herhalingen bijwerken</string>
<string name="update_all_occurrences">Alle afspraken bijwerken</string>
<string name="repeat_till_date">Herhalen tot datum</string>
<string name="stop_repeating_after_x">Herhaling stoppen na x keer</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Slett alle forekomster</string>
<string name="update_one_only">Oppdater bare den merkede forekomsten</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Oppdater alle forekomster</string>
<string name="repeat_till_date">Gjenta til en dato</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Usuń to i wyszystkie przyszłe wystąpienia</string>
<string name="delete_all_occurrences">Usuń wszystkie wystąpienia</string>
<string name="update_one_only">Zaktualizuj tylko wybrane wystąpienia</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Zaktualizuj wszystkie wystąpienia</string>
<string name="repeat_till_date">Powtarzaj do daty</string>
<string name="stop_repeating_after_x">Przestań powtarzać po x wystąpieniach</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Exclua essa e todas as ocorrências futuras</string>
<string name="delete_all_occurrences">Apagar todas as ocorrências</string>
<string name="update_one_only">Atualizar a ocorrência selecionada</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Atualizar todas as ocorrências</string>
<string name="repeat_till_date">Repetir até uma data</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Apagar esta e todas as ocorrências futuras</string>
<string name="delete_all_occurrences">Apagar todas as ocorrências</string>
<string name="update_one_only">Atualizar a ocorrência selecionada</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Atualizar todas as ocorrências</string>
<string name="repeat_till_date">Repetir até à data</string>
<string name="stop_repeating_after_x">Parar de repetir após x ocorrências</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Ștergeți acest și toate evenimentele repetitive viitoare</string>
<string name="delete_all_occurrences">Ștergeți toate evenimentele repetitive viitoare</string>
<string name="update_one_only">Actualizați numai evenimentul repetitiv selectat</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Actualizați toate evenimentele repetitive</string>
<string name="repeat_till_date">Repetă până la o dată</string>
<string name="stop_repeating_after_x">Oprește repetiția după x întâmplări</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Удалить это и все будущие события</string>
<string name="delete_all_occurrences">Удалить все связанные события</string>
<string name="update_one_only">Обновить только выбранное</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Обновить все связанные</string>
<string name="repeat_till_date">Повторять до даты</string>
<string name="stop_repeating_after_x">Повторять x раз</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Vymazať toto a všetky budúce opakovania</string>
<string name="delete_all_occurrences">Vymazať všetky opakovania</string>
<string name="update_one_only">Upraviť iba označené opakovania</string>
<string name="update_this_and_future_occurrences">Upraviť toto a všetky budúce opakovania</string>
<string name="update_all_occurrences">Upraviť všetky opakovania</string>
<string name="repeat_till_date">Opakovať po dátum</string>
<string name="stop_repeating_after_x">Ukončiť opakovanie po x opakovaniach</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Ta bort denna och alla framtida förekomster</string>
<string name="delete_all_occurrences">Ta bort alla förekomster</string>
<string name="update_one_only">Uppdatera bara den valda förekomsten</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Uppdatera alla förekomster</string>
<string name="repeat_till_date">Upprepa till ett datum</string>
<string name="stop_repeating_after_x">Sluta upprepa efter x förekomster</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Bu ve gelecekteki tüm etkinlikleri sil</string>
<string name="delete_all_occurrences">Tüm tekrarlanan etkinlikleri sil</string>
<string name="update_one_only">Yalnızca seçilen etkinlikleri güncelle</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Tüm etkinlikleri güncelle</string>
<string name="repeat_till_date">Şu tarihe kadar tekrarla</string>
<string name="stop_repeating_after_x">X etkinlikten sonra tekrarlamayı durdur</string>
@ -71,7 +72,7 @@
<string name="second_m">ikinci</string>
<string name="third_m">üçüncü</string>
<string name="fourth_m">dördüncü</string>
<string name="fifth_m">fifth</string>
<string name="fifth_m">beşinci</string>
<string name="last_m">son</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
@ -82,7 +83,7 @@
<string name="second_f">ikinci</string>
<string name="third_f">üçüncü</string>
<string name="fourth_f">dördüncü</string>
<string name="fifth_f">fifth</string>
<string name="fifth_f">beşinci</string>
<string name="last_f">son</string>
<!-- Birthdays -->

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Видалити це і всі наступні повторення</string>
<string name="delete_all_occurrences">Видалити всі повторення</string>
<string name="update_one_only">Оновити лише обране повторення</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Оновити всі повторення</string>
<string name="repeat_till_date">Повторити до дати</string>
<string name="stop_repeating_after_x">Повторити лише Х разів</string>

View File

@ -51,6 +51,7 @@
    <string name="delete_future_occurrences">删除这个及全部未来的事件</string>
    <string name="delete_all_occurrences">删除全部事件</string>
    <string name="update_one_only">只更新选择的事件</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
    <string name="update_all_occurrences">更新全部事件</string>
    <string name="repeat_till_date">重复直到某日</string>
    <string name="stop_repeating_after_x">经过 x 次后停止重复</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">刪除這個及全部未來的事件</string>
<string name="delete_all_occurrences">刪除全部事件</string>
<string name="update_one_only">只更新選擇的事件</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">更新全部事件</string>
<string name="repeat_till_date">重複直到某日</string>
<string name="stop_repeating_after_x">經過x次後停止重複</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">刪除這個及全部未來的事件</string>
<string name="delete_all_occurrences">刪除全部事件</string>
<string name="update_one_only">只更新選擇的事件</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">更新全部事件</string>
<string name="repeat_till_date">重複直到某日</string>
<string name="stop_repeating_after_x">經過 x 次後停止重複</string>

View File

@ -51,6 +51,7 @@
<string name="delete_future_occurrences">Delete this and all future occurrences</string>
<string name="delete_all_occurrences">Delete all occurrences</string>
<string name="update_one_only">Update the selected occurrence only</string>
<string name="update_this_and_future_occurrences">Update this and all future occurrences</string>
<string name="update_all_occurrences">Update all occurrences</string>
<string name="repeat_till_date">Repeat till a date</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string>

View File

@ -10,7 +10,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.2'
classpath 'com.android.tools.build:gradle:4.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "de.timfreiheit.resourceplaceholders:placeholders:0.3"

View File

@ -0,0 +1,3 @@
* Allow repeating events every fifth weekday
* Properly highlight weekends on widgets, if selected so
* Fixed some CalDAV syncing and .ics file importing issues