commit
9e1540c463
|
@ -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)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -124,6 +124,7 @@ class DayFragment : Fragment() {
|
|||
}.apply {
|
||||
mHolder.day_events.adapter = this
|
||||
}
|
||||
mHolder.day_events.scheduleLayoutAnimation()
|
||||
}
|
||||
|
||||
private fun editEvent(event: Event) {
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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:"
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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" />
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue