Merge pull request #15 from SimpleMobileTools/master

upd
This commit is contained in:
solokot
2018-10-25 23:45:15 +03:00
committed by GitHub
104 changed files with 1001 additions and 769 deletions

15
.gitignore vendored
View File

@@ -1,21 +1,6 @@
# Temp files
*~
*.bak
*.backup
\#*
.\#*
*\#
*.swp
*.swap
*.sav
*.save
*.autosav
*.autosave
*.iml *.iml
.gradle .gradle
/local.properties /local.properties
/gradle.properties
/.idea/ /.idea/
.DS_Store .DS_Store
/build /build

View File

@@ -1,6 +1,33 @@
Changelog Changelog
========== ==========
Version 5.1.1 *(2018-10-25)*
----------------------------
* Fixing a crash related to pull-to-refresh swiping
Version 5.1.0 *(2018-10-24)*
----------------------------
* Add optional pull-to-refresh for refreshing CalDAV events on some views (by azisuazusa)
* Allow setting a default view to be opened from the Event List widget (by knusprjg)
* Apply selected filters on all views, including widgets
* Allow changing any CalDAV calendars color, even if only locally
* Fix some glitches related to saving CalDAV events in a wrong calendar
* Some performance improvements related to fetching events
* Couple other smaller stability/ux improvements
Version 5.0.1 *(2018-10-17)*
----------------------------
* Fixed transparent date/time picker backgrounds
Version 5.0.0 *(2018-10-16)*
----------------------------
* Increased the minimal required Android OS version to 5
* Some translation and stability improvements
Version 4.2.1 *(2018-09-22)* Version 4.2.1 *(2018-09-22)*
---------------------------- ----------------------------

View File

@@ -4,14 +4,14 @@ apply plugin: 'kotlin-android-extensions'
android { android {
compileSdkVersion 28 compileSdkVersion 28
buildToolsVersion "28.0.2" buildToolsVersion "28.0.3"
defaultConfig { defaultConfig {
applicationId "com.simplemobiletools.calendar" applicationId "com.simplemobiletools.calendar"
minSdkVersion 16 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 129 versionCode 133
versionName "4.2.1" versionName "5.1.1"
multiDexEnabled true multiDexEnabled true
setProperty("archivesBaseName", "calendar") setProperty("archivesBaseName", "calendar")
} }
@@ -42,10 +42,10 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:4.7.17' implementation 'com.simplemobiletools:commons:5.2.6'
implementation 'joda-time:joda-time:2.9.9' implementation 'joda-time:joda-time:2.9.9'
implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.android.support:multidex:1.0.3' implementation 'androidx.multidex:multidex:2.0.0'
} }
Properties props = new Properties() Properties props = new Properties()

View File

@@ -184,7 +184,7 @@
</receiver> </receiver>
<provider <provider
android:name="android.support.v4.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider" android:authorities="${applicationId}.provider"
android:exported="false" android:exported="false"
android:grantUriPermissions="true"> android:grantUriPermissions="true">

View File

@@ -1,6 +1,6 @@
package com.simplemobiletools.calendar package com.simplemobiletools.calendar
import android.support.multidex.MultiDexApplication import androidx.multidex.MultiDexApplication
import com.facebook.stetho.Stetho import com.facebook.stetho.Stetho
import com.simplemobiletools.commons.extensions.checkUseEnglish import com.simplemobiletools.commons.extensions.checkUseEnglish

View File

@@ -1,16 +1,15 @@
package com.simplemobiletools.calendar.activities package com.simplemobiletools.calendar.activities
import android.annotation.SuppressLint
import android.app.DatePickerDialog import android.app.DatePickerDialog
import android.app.TimePickerDialog import android.app.TimePickerDialog
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.NotificationManagerCompat
import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.WindowManager import android.view.WindowManager
import androidx.core.app.NotificationManagerCompat
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.dialogs.* import com.simplemobiletools.calendar.dialogs.*
import com.simplemobiletools.calendar.extensions.* import com.simplemobiletools.calendar.extensions.*
@@ -94,9 +93,11 @@ class EventActivity : SimpleActivity() {
cancelNotification(mEvent.id) cancelNotification(mEvent.id)
} else { } else {
mEvent = Event() mEvent = Event()
mReminder1Minutes = if (config.usePreviousEventReminders) config.lastEventReminderMinutes else config.defaultReminder1 config.apply {
mReminder2Minutes = if (config.usePreviousEventReminders) config.lastEventReminderMinutes2 else config.defaultReminder2 mReminder1Minutes = if (usePreviousEventReminders) lastEventReminderMinutes1 else defaultReminder1
mReminder3Minutes = if (config.usePreviousEventReminders) config.lastEventReminderMinutes3 else config.defaultReminder3 mReminder2Minutes = if (usePreviousEventReminders) lastEventReminderMinutes2 else defaultReminder2
mReminder3Minutes = if (usePreviousEventReminders) lastEventReminderMinutes3 else defaultReminder3
}
if (savedInstanceState == null) { if (savedInstanceState == null) {
setupNewEvent() setupNewEvent()
@@ -121,7 +122,7 @@ class EventActivity : SimpleActivity() {
event_repetition_limit_holder.setOnClickListener { showRepetitionTypePicker() } event_repetition_limit_holder.setOnClickListener { showRepetitionTypePicker() }
event_reminder_1.setOnClickListener { event_reminder_1.setOnClickListener {
handleNotificationAvailability() { handleNotificationAvailability {
if (config.wasAlarmWarningShown) { if (config.wasAlarmWarningShown) {
showReminder1Dialog() showReminder1Dialog()
} else { } else {
@@ -243,6 +244,7 @@ class EventActivity : SimpleActivity() {
private fun setupNewEvent() { private fun setupNewEvent() {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
event_title.requestFocus()
updateActionBarTitle(getString(R.string.new_event)) updateActionBarTitle(getString(R.string.new_event))
val isLastCaldavCalendarOK = config.caldavSync && config.getSyncedCalendarIdsAsList().contains(config.lastUsedCaldavCalendarId.toString()) val isLastCaldavCalendarOK = config.caldavSync && config.getSyncedCalendarIdsAsList().contains(config.lastUsedCaldavCalendarId.toString())
mEventCalendarId = if (isLastCaldavCalendarOK) config.lastUsedCaldavCalendarId else STORED_LOCALLY_ONLY mEventCalendarId = if (isLastCaldavCalendarOK) config.lastUsedCaldavCalendarId else STORED_LOCALLY_ONLY
@@ -620,6 +622,7 @@ class EventActivity : SimpleActivity() {
event_type_holder.beVisibleIf(currentCalendar == null) event_type_holder.beVisibleIf(currentCalendar == null)
event_caldav_calendar_divider.beVisibleIf(currentCalendar == null) event_caldav_calendar_divider.beVisibleIf(currentCalendar == null)
event_caldav_calendar_email.beGoneIf(currentCalendar == null) event_caldav_calendar_email.beGoneIf(currentCalendar == null)
event_caldav_calendar_color.beGoneIf(currentCalendar == null)
if (currentCalendar == null) { if (currentCalendar == null) {
mEventCalendarId = STORED_LOCALLY_ONLY mEventCalendarId = STORED_LOCALLY_ONLY
@@ -634,6 +637,10 @@ class EventActivity : SimpleActivity() {
} }
} else { } else {
event_caldav_calendar_email.text = currentCalendar.accountName event_caldav_calendar_email.text = currentCalendar.accountName
val calendarColor = dbHelper.getEventTypeWithCalDAVCalendarId(currentCalendar.id)?.color ?: currentCalendar.color
event_caldav_calendar_color.setFillWithStroke(calendarColor, config.backgroundColor)
event_caldav_calendar_name.apply { event_caldav_calendar_name.apply {
text = currentCalendar.displayName text = currentCalendar.displayName
setPadding(paddingLeft, paddingTop, paddingRight, resources.getDimension(R.dimen.tiny_margin).toInt()) setPadding(paddingLeft, paddingTop, paddingRight, resources.getDimension(R.dimen.tiny_margin).toInt())
@@ -699,10 +706,10 @@ class EventActivity : SimpleActivity() {
val newEventType = if (!config.caldavSync || config.lastUsedCaldavCalendarId == 0 || mEventCalendarId == STORED_LOCALLY_ONLY) { val newEventType = if (!config.caldavSync || config.lastUsedCaldavCalendarId == 0 || mEventCalendarId == STORED_LOCALLY_ONLY) {
mEventTypeId mEventTypeId
} else { } else {
dbHelper.getEventTypeWithCalDAVCalendarId(config.lastUsedCaldavCalendarId)?.id ?: config.lastUsedLocalEventTypeId dbHelper.getEventTypeWithCalDAVCalendarId(mEventCalendarId)?.id ?: config.lastUsedLocalEventTypeId
} }
val newSource = if (!config.caldavSync || config.lastUsedCaldavCalendarId == 0 || mEventCalendarId == STORED_LOCALLY_ONLY) { val newSource = if (!config.caldavSync || mEventCalendarId == STORED_LOCALLY_ONLY) {
config.lastUsedLocalEventTypeId = newEventType config.lastUsedLocalEventTypeId = newEventType
SOURCE_SIMPLE_CALENDAR SOURCE_SIMPLE_CALENDAR
} else { } else {
@@ -716,7 +723,7 @@ class EventActivity : SimpleActivity() {
config.apply { config.apply {
if (usePreviousEventReminders) { if (usePreviousEventReminders) {
lastEventReminderMinutes = reminder1 lastEventReminderMinutes1 = reminder1
lastEventReminderMinutes2 = reminder2 lastEventReminderMinutes2 = reminder2
lastEventReminderMinutes3 = reminder3 lastEventReminderMinutes3 = reminder3
} }
@@ -856,17 +863,13 @@ class EventActivity : SimpleActivity() {
} }
} }
@SuppressLint("NewApi")
private fun setupStartDate() { private fun setupStartDate() {
hideKeyboard() hideKeyboard()
config.backgroundColor.getContrastColor() config.backgroundColor.getContrastColor()
val datepicker = DatePickerDialog(this, mDialogTheme, startDateSetListener, mEventStartDateTime.year, mEventStartDateTime.monthOfYear - 1, val datepicker = DatePickerDialog(this, mDialogTheme, startDateSetListener, mEventStartDateTime.year, mEventStartDateTime.monthOfYear - 1,
mEventStartDateTime.dayOfMonth) mEventStartDateTime.dayOfMonth)
if (isLollipopPlus()) { datepicker.datePicker.firstDayOfWeek = if (config.isSundayFirst) Calendar.SUNDAY else Calendar.MONDAY
datepicker.datePicker.firstDayOfWeek = if (config.isSundayFirst) Calendar.SUNDAY else Calendar.MONDAY
}
datepicker.show() datepicker.show()
} }
@@ -875,16 +878,12 @@ class EventActivity : SimpleActivity() {
TimePickerDialog(this, mDialogTheme, startTimeSetListener, mEventStartDateTime.hourOfDay, mEventStartDateTime.minuteOfHour, config.use24HourFormat).show() TimePickerDialog(this, mDialogTheme, startTimeSetListener, mEventStartDateTime.hourOfDay, mEventStartDateTime.minuteOfHour, config.use24HourFormat).show()
} }
@SuppressLint("NewApi")
private fun setupEndDate() { private fun setupEndDate() {
hideKeyboard() hideKeyboard()
val datepicker = DatePickerDialog(this, mDialogTheme, endDateSetListener, mEventEndDateTime.year, mEventEndDateTime.monthOfYear - 1, val datepicker = DatePickerDialog(this, mDialogTheme, endDateSetListener, mEventEndDateTime.year, mEventEndDateTime.monthOfYear - 1,
mEventEndDateTime.dayOfMonth) mEventEndDateTime.dayOfMonth)
if (isLollipopPlus()) { datepicker.datePicker.firstDayOfWeek = if (config.isSundayFirst) Calendar.SUNDAY else Calendar.MONDAY
datepicker.datePicker.firstDayOfWeek = if (config.isSundayFirst) Calendar.SUNDAY else Calendar.MONDAY
}
datepicker.show() datepicker.show()
} }

View File

@@ -11,13 +11,14 @@ import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.provider.ContactsContract import android.provider.ContactsContract
import android.support.v4.view.MenuItemCompat
import android.support.v7.widget.SearchView
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat
import com.simplemobiletools.calendar.BuildConfig import com.simplemobiletools.calendar.BuildConfig
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.R.id.*
import com.simplemobiletools.calendar.adapters.EventListAdapter import com.simplemobiletools.calendar.adapters.EventListAdapter
import com.simplemobiletools.calendar.dialogs.ExportEventsDialog import com.simplemobiletools.calendar.dialogs.ExportEventsDialog
import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog
@@ -70,9 +71,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
appLaunched(BuildConfig.APPLICATION_ID) appLaunched(BuildConfig.APPLICATION_ID)
// just get a reference to the database to make sure it is created properly
dbHelper
checkWhatsNewDialog() checkWhatsNewDialog()
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW) calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW)
calendar_fab.setOnClickListener { calendar_fab.setOnClickListener {
@@ -92,6 +90,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
refreshCalDAVCalendars(false) refreshCalDAVCalendars(false)
} }
swipe_refresh_layout.setOnRefreshListener {
refreshCalDAVCalendars(false)
}
if (!checkViewIntents()) { if (!checkViewIntents()) {
return return
} }
@@ -129,6 +131,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
search_placeholder_2.setTextColor(config.textColor) search_placeholder_2.setTextColor(config.textColor)
calendar_fab.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor) calendar_fab.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor)
search_holder.background = ColorDrawable(config.backgroundColor) search_holder.background = ColorDrawable(config.backgroundColor)
checkSwipeRefreshAvailability()
} }
override fun onPause() { override fun onPause() {
@@ -183,6 +186,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
override fun onBackPressed() { override fun onBackPressed() {
swipe_refresh_layout.isRefreshing = false
checkSwipeRefreshAvailability()
if (currentFragments.size > 1) { if (currentFragments.size > 1) {
removeTopFragment() removeTopFragment()
} else { } else {
@@ -251,12 +256,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
private fun checkOpenIntents(): Boolean { private fun checkOpenIntents(): Boolean {
val dayCodeToOpen = intent.getStringExtra(DAY_CODE) ?: "" val dayCodeToOpen = intent.getStringExtra(DAY_CODE) ?: ""
val openMonth = intent.getBooleanExtra(OPEN_MONTH, false) val viewToOpen = intent.getIntExtra(VIEW_TO_OPEN, DAILY_VIEW)
intent.removeExtra(OPEN_MONTH) intent.removeExtra(VIEW_TO_OPEN)
intent.removeExtra(DAY_CODE) intent.removeExtra(DAY_CODE)
if (dayCodeToOpen.isNotEmpty()) { if (dayCodeToOpen.isNotEmpty()) {
calendar_fab.beVisible() calendar_fab.beVisible()
config.storedView = if (openMonth) MONTHLY_VIEW else DAILY_VIEW if (viewToOpen != LAST_VIEW) {
config.storedView = viewToOpen
}
updateViewPager(dayCodeToOpen) updateViewPager(dayCodeToOpen)
return true return true
} }
@@ -337,6 +344,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
private fun showFilterDialog() { private fun showFilterDialog() {
FilterEventTypesDialog(this) { FilterEventTypesDialog(this) {
refreshViewPager() refreshViewPager()
updateWidgets()
} }
} }
@@ -368,6 +376,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
if (showCalDAVRefreshToast) { if (showCalDAVRefreshToast) {
toast(R.string.refreshing_complete) toast(R.string.refreshing_complete)
} }
runOnUiThread {
swipe_refresh_layout.isRefreshing = false
}
} }
}, CALDAV_SYNC_DELAY) }, CALDAV_SYNC_DELAY)
} }
@@ -527,6 +538,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
private fun updateView(view: Int) { private fun updateView(view: Int) {
calendar_fab.beVisibleIf(view != YEARLY_VIEW) calendar_fab.beVisibleIf(view != YEARLY_VIEW)
config.storedView = view config.storedView = view
checkSwipeRefreshAvailability()
updateViewPager() updateViewPager()
if (goToTodayButton?.isVisible == true) { if (goToTodayButton?.isVisible == true) {
shouldGoToTodayBeVisible = false shouldGoToTodayBeVisible = false
@@ -578,8 +590,11 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
val bundle = Bundle() val bundle = Bundle()
bundle.putString(DAY_CODE, Formatter.getDayCodeFromDateTime(dateTime)) bundle.putString(DAY_CODE, Formatter.getDayCodeFromDateTime(dateTime))
fragment.arguments = bundle fragment.arguments = bundle
supportFragmentManager.beginTransaction().add(R.id.fragments_holder, fragment).commitNow() try {
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportFragmentManager.beginTransaction().add(R.id.fragments_holder, fragment).commitNow()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
} catch (e: Exception) {
}
} }
private fun getThisWeekDateTime(): String { private fun getThisWeekDateTime(): String {
@@ -612,7 +627,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
private fun refreshViewPager() { private fun refreshViewPager() {
runOnUiThread { runOnUiThread {
if (!isActivityDestroyed()) { if (!isDestroyed) {
currentFragments.last().refreshEvents() currentFragments.last().refreshEvents()
} }
} }
@@ -695,7 +710,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
private fun launchAbout() { private fun launchAbout() {
val licenses = LICENSE_JODA or LICENSE_STETHO or LICENSE_MULTISELECT or LICENSE_LEAK_CANARY val licenses = LICENSE_JODA or LICENSE_STETHO
val faqItems = arrayListOf( val faqItems = arrayListOf(
FAQItem(R.string.faq_1_title_commons, R.string.faq_1_text_commons), FAQItem(R.string.faq_1_title_commons, R.string.faq_1_text_commons),
@@ -737,6 +752,13 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
} }
private fun checkSwipeRefreshAvailability() {
swipe_refresh_layout.isEnabled = config.caldavSync && config.pullToRefresh && config.storedView != WEEKLY_VIEW
if (!swipe_refresh_layout.isEnabled) {
swipe_refresh_layout.isRefreshing = false
}
}
// only used at active search // only used at active search
override fun refreshItems() { override fun refreshItems() {
searchQueryChanged(mLatestSearchQuery) searchQueryChanged(mLatestSearchQuery)

View File

@@ -5,7 +5,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.adapters.ManageEventTypesAdapter import com.simplemobiletools.calendar.adapters.ManageEventTypesAdapter
import com.simplemobiletools.calendar.dialogs.UpdateEventTypeDialog import com.simplemobiletools.calendar.dialogs.EditEventTypeDialog
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.interfaces.DeleteEventTypesListener import com.simplemobiletools.calendar.interfaces.DeleteEventTypesListener
import com.simplemobiletools.calendar.models.EventType import com.simplemobiletools.calendar.models.EventType
@@ -24,7 +24,7 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener {
} }
private fun showEventTypeDialog(eventType: EventType? = null) { private fun showEventTypeDialog(eventType: EventType? = null) {
UpdateEventTypeDialog(this, eventType?.copy()) { EditEventTypeDialog(this, eventType?.copy()) {
getEventTypes() getEventTypes()
} }
} }

View File

@@ -7,7 +7,10 @@ import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.dialogs.SelectCalendarsDialog import com.simplemobiletools.calendar.dialogs.SelectCalendarsDialog
import com.simplemobiletools.calendar.extensions.* import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.extensions.getSyncedCalDAVCalendars
import com.simplemobiletools.calendar.extensions.updateWidgets
import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.*
import com.simplemobiletools.calendar.models.EventType import com.simplemobiletools.calendar.models.EventType
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
@@ -35,7 +38,6 @@ class SettingsActivity : SimpleActivity() {
setContentView(R.layout.activity_settings) setContentView(R.layout.activity_settings)
res = resources res = resources
mStoredPrimaryColor = config.primaryColor mStoredPrimaryColor = config.primaryColor
setupCaldavSync()
} }
override fun onResume() { override fun onResume() {
@@ -60,6 +62,9 @@ class SettingsActivity : SimpleActivity() {
setupUseSameSnooze() setupUseSameSnooze()
setupLoopReminders() setupLoopReminders()
setupSnoozeTime() setupSnoozeTime()
setupCaldavSync()
setupManageSyncedCalendars()
setupPullToRefresh()
setupDefaultReminder() setupDefaultReminder()
setupDefaultReminder1() setupDefaultReminder1()
setupDefaultReminder2() setupDefaultReminder2()
@@ -67,6 +72,7 @@ class SettingsActivity : SimpleActivity() {
setupDisplayPastEvents() setupDisplayPastEvents()
setupFontSize() setupFontSize()
setupCustomizeWidgetColors() setupCustomizeWidgetColors()
setupViewToOpenFromListWidget()
setupDimEvents() setupDimEvents()
updateTextColors(settings_holder) updateTextColors(settings_holder)
checkPrimaryColor() checkPrimaryColor()
@@ -159,7 +165,18 @@ class SettingsActivity : SimpleActivity() {
} }
} }
} }
}
private fun setupPullToRefresh() {
settings_caldav_pull_to_refresh_holder.beVisibleIf(config.caldavSync)
settings_caldav_pull_to_refresh.isChecked = config.pullToRefresh
settings_caldav_pull_to_refresh_holder.setOnClickListener {
settings_caldav_pull_to_refresh.toggle()
config.pullToRefresh = settings_caldav_pull_to_refresh.isChecked
}
}
private fun setupManageSyncedCalendars() {
settings_manage_synced_calendars_holder.beVisibleIf(config.caldavSync) settings_manage_synced_calendars_holder.beVisibleIf(config.caldavSync)
settings_manage_synced_calendars_holder.setOnClickListener { settings_manage_synced_calendars_holder.setOnClickListener {
showCalendarPicker() showCalendarPicker()
@@ -173,6 +190,7 @@ class SettingsActivity : SimpleActivity() {
settings_caldav_sync.isChecked = false settings_caldav_sync.isChecked = false
config.caldavSync = false config.caldavSync = false
settings_manage_synced_calendars_holder.beGone() settings_manage_synced_calendars_holder.beGone()
settings_caldav_pull_to_refresh_holder.beGone()
config.getSyncedCalendarIdsAsList().forEach { config.getSyncedCalendarIdsAsList().forEach {
CalDAVHandler(applicationContext).deleteCalDAVCalendarEvents(it.toLong()) CalDAVHandler(applicationContext).deleteCalDAVCalendarEvents(it.toLong())
} }
@@ -190,6 +208,7 @@ class SettingsActivity : SimpleActivity() {
} }
settings_manage_synced_calendars_holder.beVisibleIf(newCalendarIds.isNotEmpty()) settings_manage_synced_calendars_holder.beVisibleIf(newCalendarIds.isNotEmpty())
settings_caldav_pull_to_refresh_holder.beVisibleIf(newCalendarIds.isNotEmpty())
settings_caldav_sync.isChecked = newCalendarIds.isNotEmpty() settings_caldav_sync.isChecked = newCalendarIds.isNotEmpty()
config.caldavSync = newCalendarIds.isNotEmpty() config.caldavSync = newCalendarIds.isNotEmpty()
if (settings_caldav_sync.isChecked) { if (settings_caldav_sync.isChecked) {
@@ -481,7 +500,6 @@ class SettingsActivity : SimpleActivity() {
config.fontSize = it as Int config.fontSize = it as Int
settings_font_size.text = getFontSizeText() settings_font_size.text = getFontSizeText()
updateWidgets() updateWidgets()
updateListWidget()
} }
} }
} }
@@ -501,6 +519,34 @@ class SettingsActivity : SimpleActivity() {
} }
} }
private fun setupViewToOpenFromListWidget() {
settings_list_widget_view_to_open.text = getDefaultViewText()
settings_list_widget_view_to_open_holder.setOnClickListener {
val items = arrayListOf(
RadioItem(DAILY_VIEW, res.getString(R.string.daily_view)),
RadioItem(WEEKLY_VIEW, res.getString(R.string.weekly_view)),
RadioItem(MONTHLY_VIEW, res.getString(R.string.monthly_view)),
RadioItem(YEARLY_VIEW, res.getString(R.string.yearly_view)),
RadioItem(EVENTS_LIST_VIEW, res.getString(R.string.simple_event_list)),
RadioItem(LAST_VIEW, res.getString(R.string.last_view)))
RadioGroupDialog(this@SettingsActivity, items, config.listWidgetViewToOpen) {
config.listWidgetViewToOpen = it as Int
settings_list_widget_view_to_open.text = getDefaultViewText()
updateWidgets()
}
}
}
private fun getDefaultViewText() = getString(when (config.listWidgetViewToOpen) {
DAILY_VIEW -> R.string.daily_view
WEEKLY_VIEW -> R.string.weekly_view
MONTHLY_VIEW -> R.string.monthly_view
YEARLY_VIEW -> R.string.yearly_view
EVENTS_LIST_VIEW -> R.string.simple_event_list
else -> R.string.last_view
})
private fun setupDimEvents() { private fun setupDimEvents() {
settings_dim_past_events.isChecked = config.dimPastEvents settings_dim_past_events.isChecked = config.dimPastEvents
settings_dim_past_events_holder.setOnClickListener { settings_dim_past_events_holder.setOnClickListener {

View File

@@ -1,7 +1,7 @@
package com.simplemobiletools.calendar.activities package com.simplemobiletools.calendar.activities
import android.os.Bundle import android.os.Bundle
import android.support.v7.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.extensions.rescheduleReminder import com.simplemobiletools.calendar.extensions.rescheduleReminder

View File

@@ -1,10 +1,7 @@
package com.simplemobiletools.calendar.activities package com.simplemobiletools.calendar.activities
import android.content.Intent import android.content.Intent
import com.simplemobiletools.calendar.helpers.DAY_CODE import com.simplemobiletools.calendar.helpers.*
import com.simplemobiletools.calendar.helpers.EVENT_ID
import com.simplemobiletools.calendar.helpers.EVENT_OCCURRENCE_TS
import com.simplemobiletools.calendar.helpers.OPEN_MONTH
import com.simplemobiletools.commons.activities.BaseSplashActivity import com.simplemobiletools.commons.activities.BaseSplashActivity
class SplashActivity : BaseSplashActivity() { class SplashActivity : BaseSplashActivity() {
@@ -12,7 +9,7 @@ class SplashActivity : BaseSplashActivity() {
when { when {
intent.extras?.containsKey(DAY_CODE) == true -> Intent(this, MainActivity::class.java).apply { intent.extras?.containsKey(DAY_CODE) == true -> Intent(this, MainActivity::class.java).apply {
putExtra(DAY_CODE, intent.getStringExtra(DAY_CODE)) putExtra(DAY_CODE, intent.getStringExtra(DAY_CODE))
putExtra(OPEN_MONTH, intent.getBooleanExtra(OPEN_MONTH, false)) putExtra(VIEW_TO_OPEN, intent.getIntExtra(VIEW_TO_OPEN, LAST_VIEW))
startActivity(this) startActivity(this)
} }
intent.extras?.containsKey(EVENT_ID) == true -> Intent(this, MainActivity::class.java).apply { intent.extras?.containsKey(EVENT_ID) == true -> Intent(this, MainActivity::class.java).apply {

View File

@@ -89,7 +89,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
config_bg_seekbar.progress = (mBgAlpha * 100).toInt() config_bg_seekbar.progress = (mBgAlpha * 100).toInt()
updateBgColor() updateBgColor()
MonthlyCalendarImpl(this, applicationContext).updateMonthlyCalendar(DateTime().withDayOfMonth(1), false) MonthlyCalendarImpl(this, applicationContext).updateMonthlyCalendar(DateTime().withDayOfMonth(1))
} }
private fun saveConfig() { private fun saveConfig() {

View File

@@ -38,12 +38,6 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
override fun prepareActionMode(menu: Menu) {} override fun prepareActionMode(menu: Menu) {}
override fun prepareItemSelection(viewHolder: ViewHolder) {}
override fun markViewHolderSelection(select: Boolean, viewHolder: ViewHolder?) {
viewHolder?.itemView?.event_item_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) { override fun actionItemPressed(id: Int) {
when (id) { when (id) {
R.id.cab_share -> shareEvents() R.id.cab_share -> shareEvents()
@@ -55,6 +49,10 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
override fun getIsItemSelectable(position: Int) = true override fun getIsItemSelectable(position: Int) = true
override fun getItemSelectionKey(position: Int) = events.getOrNull(position)?.id
override fun getItemKeyPosition(key: Int) = events.indexOfFirst { it.id == key }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyRecyclerViewAdapter.ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyRecyclerViewAdapter.ViewHolder {
val layoutId = when (viewType) { val layoutId = when (viewType) {
ITEM_EVENT -> R.layout.event_item_day_view ITEM_EVENT -> R.layout.event_item_day_view
@@ -65,10 +63,10 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) { override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val event = events[position] val event = events[position]
val view = holder.bindView(event, true, true) { itemView, layoutPosition -> holder.bindView(event, true, true) { itemView, layoutPosition ->
setupView(itemView, event) setupView(itemView, event)
} }
bindViewHolder(holder, position, view) bindViewHolder(holder)
} }
override fun getItemCount() = events.size override fun getItemCount() = events.size
@@ -76,8 +74,18 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
override fun getItemViewType(position: Int): Int { override fun getItemViewType(position: Int): Int {
val event = events[position] val event = events[position]
val detailField = if (replaceDescriptionWithLocation) event.location else event.description val detailField = if (replaceDescriptionWithLocation) event.location else event.description
return if (event.startTS == event.endTS && detailField.isEmpty()) { return if (detailField.isNotEmpty()) {
ITEM_EVENT
} else if (event.startTS == event.endTS) {
ITEM_EVENT_SIMPLE ITEM_EVENT_SIMPLE
} else if (event.getIsAllDay()) {
val startCode = Formatter.getDayCodeFromTS(event.startTS)
val endCode = Formatter.getDayCodeFromTS(event.endTS)
if (startCode == endCode) {
ITEM_EVENT_SIMPLE
} else {
ITEM_EVENT
}
} else { } else {
ITEM_EVENT ITEM_EVENT
} }
@@ -85,6 +93,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
private fun setupView(view: View, event: Event) { private fun setupView(view: View, event: Event) {
view.apply { view.apply {
event_item_frame.isSelected = selectedKeys.contains(event.id)
event_item_title.text = event.title event_item_title.text = event.title
event_item_description?.text = if (replaceDescriptionWithLocation) event.location else event.description event_item_description?.text = if (replaceDescriptionWithLocation) event.location else event.description
event_item_start.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(context, event.startTS) event_item_start.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(context, event.startTS)
@@ -95,7 +104,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
val startCode = Formatter.getDayCodeFromTS(event.startTS) val startCode = Formatter.getDayCodeFromTS(event.startTS)
val endCode = Formatter.getDayCodeFromTS(event.endTS) val endCode = Formatter.getDayCodeFromTS(event.endTS)
event_item_end.apply { event_item_end?.apply {
text = Formatter.getTimeFromTS(context, event.endTS) text = Formatter.getTimeFromTS(context, event.endTS)
if (startCode != endCode) { if (startCode != endCode) {
if (event.getIsAllDay()) { if (event.getIsAllDay()) {
@@ -121,35 +130,24 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
} }
} }
private fun shareEvents() { private fun shareEvents() = activity.shareEvents(selectedKeys.distinct())
val eventIds = ArrayList<Int>(selectedPositions.size)
selectedPositions.forEach {
eventIds.add(events[it].id)
}
activity.shareEvents(eventIds.distinct())
}
private fun askConfirmDelete() { private fun askConfirmDelete() {
val eventIds = ArrayList<Int>(selectedPositions.size) val eventIds = selectedKeys.toMutableList()
val timestamps = ArrayList<Int>(selectedPositions.size) val eventsToDelete = events.filter { selectedKeys.contains(it.id) }
val eventsToDelete = ArrayList<Event>(selectedPositions.size) val timestamps = eventsToDelete.map { it.startTS }
selectedPositions.forEach { val positions = getSelectedItemPositions()
val event = events[it]
eventsToDelete.add(event)
eventIds.add(event.id)
timestamps.add(event.startTS)
}
val hasRepeatableEvent = eventsToDelete.any { it.repeatInterval > 0 } val hasRepeatableEvent = eventsToDelete.any { it.repeatInterval > 0 }
DeleteEventDialog(activity, eventIds, hasRepeatableEvent) { DeleteEventDialog(activity, eventIds, hasRepeatableEvent) { it ->
events.removeAll(eventsToDelete) events.removeAll(eventsToDelete)
val nonRepeatingEventIDs = eventsToDelete.filter { it.repeatInterval == 0 }.map { it.id.toString() }.toTypedArray() val nonRepeatingEventIDs = eventsToDelete.asSequence().filter { it.repeatInterval == 0 }.map { it.id.toString() }.toList().toTypedArray()
activity.dbHelper.deleteEvents(nonRepeatingEventIDs, true) activity.dbHelper.deleteEvents(nonRepeatingEventIDs, true)
val repeatingEventIDs = eventsToDelete.filter { it.repeatInterval != 0 }.map { it.id } val repeatingEventIDs = eventsToDelete.asSequence().filter { it.repeatInterval != 0 }.map { it.id }.toList()
activity.handleEventDeleting(repeatingEventIDs, timestamps, it) activity.handleEventDeleting(repeatingEventIDs, timestamps, it)
removeSelectedItems() removeSelectedItems(positions)
} }
} }
} }

View File

@@ -38,6 +38,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
private var currentItemsHash = listItems.hashCode() private var currentItemsHash = listItems.hashCode()
init { init {
setupDragListener(true)
var firstNonPastSectionIndex = -1 var firstNonPastSectionIndex = -1
listItems.forEachIndexed { index, listItem -> listItems.forEachIndexed { index, listItem ->
if (firstNonPastSectionIndex == -1 && listItem is ListSection) { if (firstNonPastSectionIndex == -1 && listItem is ListSection) {
@@ -58,12 +59,6 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
override fun prepareActionMode(menu: Menu) {} override fun prepareActionMode(menu: Menu) {}
override fun prepareItemSelection(viewHolder: ViewHolder) {}
override fun markViewHolderSelection(select: Boolean, viewHolder: ViewHolder?) {
viewHolder?.itemView?.event_item_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) { override fun actionItemPressed(id: Int) {
when (id) { when (id) {
R.id.cab_share -> shareEvents() R.id.cab_share -> shareEvents()
@@ -75,6 +70,10 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
override fun getIsItemSelectable(position: Int) = listItems[position] is ListEvent override fun getIsItemSelectable(position: Int) = listItems[position] is ListEvent
override fun getItemSelectionKey(position: Int) = (listItems.getOrNull(position) as? ListEvent)?.id
override fun getItemKeyPosition(key: Int) = listItems.indexOfFirst { (it as? ListEvent)?.id == key }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyRecyclerViewAdapter.ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyRecyclerViewAdapter.ViewHolder {
val layoutId = when (viewType) { val layoutId = when (viewType) {
ITEM_EVENT -> R.layout.event_list_item ITEM_EVENT -> R.layout.event_list_item
@@ -86,14 +85,14 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) { override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val listItem = listItems[position] val listItem = listItems[position]
val view = holder.bindView(listItem, true, allowLongClick) { itemView, layoutPosition -> holder.bindView(listItem, true, allowLongClick) { itemView, layoutPosition ->
if (listItem is ListSection) { if (listItem is ListSection) {
setupListSection(itemView, listItem, position) setupListSection(itemView, listItem, position)
} else if (listItem is ListEvent) { } else if (listItem is ListEvent) {
setupListEvent(itemView, listItem) setupListEvent(itemView, listItem)
} }
} }
bindViewHolder(holder, position, view) bindViewHolder(holder)
} }
override fun getItemCount() = listItems.size override fun getItemCount() = listItems.size
@@ -101,8 +100,18 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
override fun getItemViewType(position: Int) = if (listItems[position] is ListEvent) { override fun getItemViewType(position: Int) = if (listItems[position] is ListEvent) {
val event = listItems[position] as ListEvent val event = listItems[position] as ListEvent
val detailField = if (replaceDescription) event.location else event.description val detailField = if (replaceDescription) event.location else event.description
if (event.startTS == event.endTS && detailField.isEmpty()) { if (detailField.isNotEmpty()) {
ITEM_EVENT
} else if (event.startTS == event.endTS) {
ITEM_EVENT_SIMPLE ITEM_EVENT_SIMPLE
} else if (event.isAllDay) {
val startCode = Formatter.getDayCodeFromTS(event.startTS)
val endCode = Formatter.getDayCodeFromTS(event.endTS)
if (startCode == endCode) {
ITEM_EVENT_SIMPLE
} else {
ITEM_EVENT
}
} else { } else {
ITEM_EVENT ITEM_EVENT
} }
@@ -127,6 +136,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
private fun setupListEvent(view: View, listEvent: ListEvent) { private fun setupListEvent(view: View, listEvent: ListEvent) {
view.apply { view.apply {
event_item_frame.isSelected = selectedKeys.contains(listEvent.id)
event_item_title.text = listEvent.title event_item_title.text = listEvent.title
event_item_description?.text = if (replaceDescription) listEvent.location else listEvent.description event_item_description?.text = if (replaceDescription) listEvent.location else listEvent.description
event_item_start.text = if (listEvent.isAllDay) allDayString else Formatter.getTimeFromTS(context, listEvent.startTS) event_item_start.text = if (listEvent.isAllDay) allDayString else Formatter.getTimeFromTS(context, listEvent.startTS)
@@ -185,30 +195,12 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
} }
} }
private fun shareEvents() { private fun shareEvents() = activity.shareEvents(selectedKeys.distinct())
val eventIds = ArrayList<Int>(selectedPositions.size)
selectedPositions.forEach {
val item = listItems[it]
if (item is ListEvent) {
eventIds.add(item.id)
}
}
activity.shareEvents(eventIds.distinct())
}
private fun askConfirmDelete() { private fun askConfirmDelete() {
val eventIds = ArrayList<Int>(selectedPositions.size) val eventIds = selectedKeys.toMutableList()
val timestamps = ArrayList<Int>(selectedPositions.size) val eventsToDelete = listItems.filter { selectedKeys.contains((it as? ListEvent)?.id) } as List<ListEvent>
val eventsToDelete = ArrayList<ListEvent>(selectedPositions.size) val timestamps = eventsToDelete.mapNotNull { (it as? ListEvent)?.startTS }
selectedPositions.sortedDescending().forEach {
val item = listItems[it]
if (item is ListEvent) {
eventIds.add(item.id)
timestamps.add(item.startTS)
eventsToDelete.add(item)
}
}
val hasRepeatableEvent = eventsToDelete.any { it.isRepeatable } val hasRepeatableEvent = eventsToDelete.any { it.isRepeatable }
DeleteEventDialog(activity, eventIds, hasRepeatableEvent) { DeleteEventDialog(activity, eventIds, hasRepeatableEvent) {

View File

@@ -41,8 +41,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
if (type == ITEM_EVENT) { if (type == ITEM_EVENT) {
val event = events[position] as ListEvent val event = events[position] as ListEvent
val detailField = if (replaceDescription) event.location else event.description val layout = getItemViewLayout(event)
val layout = if (event.startTS == event.endTS && detailField.isEmpty()) R.layout.event_list_item_widget_simple else R.layout.event_list_item_widget
remoteView = RemoteViews(context.packageName, layout) remoteView = RemoteViews(context.packageName, layout)
setupListEvent(remoteView, event) setupListEvent(remoteView, event)
} else { } else {
@@ -53,6 +52,25 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
return remoteView return remoteView
} }
private fun getItemViewLayout(event: ListEvent): Int {
val detailField = if (replaceDescription) event.location else event.description
return if (detailField.isNotEmpty()) {
R.layout.event_list_item_widget
} else if (event.startTS == event.endTS) {
R.layout.event_list_item_widget_simple
} else if (event.isAllDay) {
val startCode = Formatter.getDayCodeFromTS(event.startTS)
val endCode = Formatter.getDayCodeFromTS(event.endTS)
if (startCode == endCode) {
R.layout.event_list_item_widget_simple
} else {
R.layout.event_list_item_widget
}
} else {
R.layout.event_list_item_widget
}
}
private fun setupListEvent(remoteView: RemoteViews, item: ListEvent) { private fun setupListEvent(remoteView: RemoteViews, item: ListEvent) {
var curTextColor = textColor var curTextColor = textColor
remoteView.apply { remoteView.apply {
@@ -116,6 +134,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
Intent().apply { Intent().apply {
putExtra(DAY_CODE, item.code) putExtra(DAY_CODE, item.code)
putExtra(VIEW_TO_OPEN, context.config.listWidgetViewToOpen)
setOnClickFillInIntent(event_section_title, this) setOnClickFillInIntent(event_section_title, this)
} }
} }
@@ -137,7 +156,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
mediumFontSize = context.config.getFontSize() mediumFontSize = context.config.getFontSize()
val fromTS = DateTime().seconds() - context.config.displayPastEvents * 60 val fromTS = DateTime().seconds() - context.config.displayPastEvents * 60
val toTS = DateTime().plusYears(1).seconds() val toTS = DateTime().plusYears(1).seconds()
context.dbHelper.getEventsInBackground(fromTS, toTS) { context.dbHelper.getEventsInBackground(fromTS, toTS, applyTypeFilter = true) {
val listItems = ArrayList<ListItem>(it.size) val listItems = ArrayList<ListItem>(it.size)
val replaceDescription = context.config.replaceDescription val replaceDescription = context.config.replaceDescription
val sorted = it.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description })) val sorted = it.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description }))

View File

@@ -1,87 +1,69 @@
package com.simplemobiletools.calendar.adapters package com.simplemobiletools.calendar.adapters
import android.support.v7.widget.RecyclerView
import android.util.SparseArray
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.models.EventType import com.simplemobiletools.calendar.models.EventType
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
import com.simplemobiletools.commons.extensions.setFillWithStroke import com.simplemobiletools.commons.extensions.setFillWithStroke
import com.simplemobiletools.commons.interfaces.MyAdapterListener
import kotlinx.android.synthetic.main.filter_event_type_view.view.* import kotlinx.android.synthetic.main.filter_event_type_view.view.*
import java.util.* import java.util.*
class FilterEventTypeAdapter(val activity: SimpleActivity, val eventTypes: List<EventType>, val displayEventTypes: Set<String>) : class FilterEventTypeAdapter(val activity: SimpleActivity, val eventTypes: List<EventType>, val displayEventTypes: Set<String>) :
RecyclerView.Adapter<FilterEventTypeAdapter.ViewHolder>() { RecyclerView.Adapter<FilterEventTypeAdapter.ViewHolder>() {
private val itemViews = SparseArray<View>() private val selectedKeys = HashSet<Int>()
private val selectedPositions = HashSet<Int>()
init { init {
eventTypes.forEachIndexed { index, eventType -> eventTypes.forEachIndexed { index, eventType ->
if (displayEventTypes.contains(eventType.id.toString())) { if (displayEventTypes.contains(eventType.id.toString())) {
selectedPositions.add(index) selectedKeys.add(eventType.id)
} }
} }
} }
private fun toggleItemSelection(select: Boolean, pos: Int) { private fun toggleItemSelection(select: Boolean, eventType: EventType, pos: Int) {
if (select) { if (select) {
if (itemViews[pos] != null) { selectedKeys.add(eventType.id)
selectedPositions.add(pos)
}
} else { } else {
selectedPositions.remove(pos) selectedKeys.remove(eventType.id)
} }
itemViews[pos]?.filter_event_type_checkbox?.isChecked = select notifyItemChanged(pos)
} }
private val adapterListener = object : MyAdapterListener { fun getSelectedItemsSet() = selectedKeys.asSequence().map { it.toString() }.toHashSet()
override fun toggleItemSelectionAdapter(select: Boolean, position: Int) {
toggleItemSelection(select, position)
}
override fun getSelectedPositions() = selectedPositions
override fun itemLongClicked(position: Int) {}
}
fun getSelectedItemsSet(): HashSet<String> {
val selectedItemsSet = HashSet<String>(selectedPositions.size)
selectedPositions.forEach { selectedItemsSet.add(eventTypes[it].id.toString()) }
return selectedItemsSet
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = activity.layoutInflater.inflate(R.layout.filter_event_type_view, parent, false) val view = activity.layoutInflater.inflate(R.layout.filter_event_type_view, parent, false)
return ViewHolder(view, adapterListener, activity) return ViewHolder(view)
} }
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val eventType = eventTypes[position] val eventType = eventTypes[position]
itemViews.put(position, holder.bindView(eventType)) holder.bindView(eventType)
toggleItemSelection(selectedPositions.contains(position), position)
} }
override fun getItemCount() = eventTypes.size override fun getItemCount() = eventTypes.size
class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity) : RecyclerView.ViewHolder(view) { inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bindView(eventType: EventType): View { fun bindView(eventType: EventType): View {
val isSelected = selectedKeys.contains(eventType.id)
itemView.apply { itemView.apply {
filter_event_type_checkbox.isChecked = isSelected
filter_event_type_checkbox.setColors(activity.config.textColor, activity.getAdjustedPrimaryColor(), activity.config.backgroundColor) filter_event_type_checkbox.setColors(activity.config.textColor, activity.getAdjustedPrimaryColor(), activity.config.backgroundColor)
filter_event_type_checkbox.text = eventType.getDisplayTitle() filter_event_type_checkbox.text = eventType.getDisplayTitle()
filter_event_type_color.setFillWithStroke(eventType.color, activity.config.backgroundColor) filter_event_type_color.setFillWithStroke(eventType.color, activity.config.backgroundColor)
filter_event_type_holder.setOnClickListener { viewClicked(!filter_event_type_checkbox.isChecked) } filter_event_type_holder.setOnClickListener { viewClicked(!isSelected, eventType) }
} }
return itemView return itemView
} }
private fun viewClicked(select: Boolean) { private fun viewClicked(select: Boolean, eventType: EventType) {
adapterListener.toggleItemSelectionAdapter(select, adapterPosition) toggleItemSelection(select, eventType, adapterPosition)
} }
} }
} }

View File

@@ -31,12 +31,6 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
override fun prepareActionMode(menu: Menu) {} override fun prepareActionMode(menu: Menu) {}
override fun prepareItemSelection(viewHolder: ViewHolder) {}
override fun markViewHolderSelection(select: Boolean, viewHolder: ViewHolder?) {
viewHolder?.itemView?.event_item_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) { override fun actionItemPressed(id: Int) {
when (id) { when (id) {
R.id.cab_delete -> askConfirmDelete() R.id.cab_delete -> askConfirmDelete()
@@ -47,20 +41,29 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
override fun getIsItemSelectable(position: Int) = true override fun getIsItemSelectable(position: Int) = true
override fun getItemSelectionKey(position: Int) = eventTypes.getOrNull(position)?.id
override fun getItemKeyPosition(key: Int) = eventTypes.indexOfFirst { it.id == key }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_event_type, parent) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_event_type, parent)
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val eventType = eventTypes[position] val eventType = eventTypes[position]
val view = holder.bindView(eventType, true, true) { itemView, layoutPosition -> holder.bindView(eventType, true, true) { itemView, layoutPosition ->
setupView(itemView, eventType) setupView(itemView, eventType)
} }
bindViewHolder(holder, position, view) bindViewHolder(holder)
} }
override fun getItemCount() = eventTypes.size override fun getItemCount() = eventTypes.size
private fun getItemWithKey(key: Int): EventType? = eventTypes.firstOrNull { it.id == key }
private fun getSelectedItems() = eventTypes.filter { selectedKeys.contains(it.id) } as ArrayList<EventType>
private fun setupView(view: View, eventType: EventType) { private fun setupView(view: View, eventType: EventType) {
view.apply { view.apply {
event_item_frame.isSelected = selectedKeys.contains(eventType.id)
event_type_title.text = eventType.getDisplayTitle() event_type_title.text = eventType.getDisplayTitle()
event_type_color.setFillWithStroke(eventType.color, activity.config.backgroundColor) event_type_color.setFillWithStroke(eventType.color, activity.config.backgroundColor)
event_type_title.setTextColor(textColor) event_type_title.setTextColor(textColor)
@@ -68,8 +71,7 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
} }
private fun askConfirmDelete() { private fun askConfirmDelete() {
val eventTypes = ArrayList<EventType>(selectedPositions.size) val eventTypes = eventTypes.filter { selectedKeys.contains(it.id) } as ArrayList<EventType>
selectedPositions.forEach { eventTypes.add(this.eventTypes[it]) }
if (activity.dbHelper.doEventTypesContainEvent(eventTypes)) { if (activity.dbHelper.doEventTypesContainEvent(eventTypes)) {
val MOVE_EVENTS = 0 val MOVE_EVENTS = 0
@@ -90,25 +92,22 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
} }
private fun deleteEventTypes(deleteEvents: Boolean) { private fun deleteEventTypes(deleteEvents: Boolean) {
val eventTypesToDelete = ArrayList<EventType>(selectedPositions.size) val eventTypesToDelete = getSelectedItems()
for (pos in selectedPositions) { for (key in selectedKeys) {
if (eventTypes[pos].id == DBHelper.REGULAR_EVENT_TYPE_ID) { val type = getItemWithKey(key) ?: continue
if (type.id == DBHelper.REGULAR_EVENT_TYPE_ID) {
activity.toast(R.string.cannot_delete_default_type) activity.toast(R.string.cannot_delete_default_type)
selectedPositions.remove(pos) eventTypesToDelete.remove(type)
toggleItemSelection(false, pos) toggleItemSelection(false, getItemKeyPosition(type.id))
break break
} }
} }
selectedPositions.sortedDescending().forEach {
val eventType = eventTypes[it]
eventTypesToDelete.add(eventType)
}
eventTypes.removeAll(eventTypesToDelete)
if (listener?.deleteEventTypes(eventTypesToDelete, deleteEvents) == true) { if (listener?.deleteEventTypes(eventTypesToDelete, deleteEvents) == true) {
removeSelectedItems() val positions = getSelectedItemPositions()
eventTypes.removeAll(eventTypesToDelete)
removeSelectedItems(positions)
} }
} }
} }

View File

@@ -1,10 +1,10 @@
package com.simplemobiletools.calendar.adapters package com.simplemobiletools.calendar.adapters
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.util.SparseArray import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import com.simplemobiletools.calendar.fragments.DayFragment import com.simplemobiletools.calendar.fragments.DayFragment
import com.simplemobiletools.calendar.helpers.DAY_CODE import com.simplemobiletools.calendar.helpers.DAY_CODE
import com.simplemobiletools.calendar.interfaces.NavigationListener import com.simplemobiletools.calendar.interfaces.NavigationListener

View File

@@ -1,10 +1,10 @@
package com.simplemobiletools.calendar.adapters package com.simplemobiletools.calendar.adapters
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.util.SparseArray import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import com.simplemobiletools.calendar.fragments.MonthFragment import com.simplemobiletools.calendar.fragments.MonthFragment
import com.simplemobiletools.calendar.helpers.DAY_CODE import com.simplemobiletools.calendar.helpers.DAY_CODE
import com.simplemobiletools.calendar.interfaces.NavigationListener import com.simplemobiletools.calendar.interfaces.NavigationListener

View File

@@ -1,10 +1,10 @@
package com.simplemobiletools.calendar.adapters package com.simplemobiletools.calendar.adapters
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.util.SparseArray import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import com.simplemobiletools.calendar.fragments.WeekFragment import com.simplemobiletools.calendar.fragments.WeekFragment
import com.simplemobiletools.calendar.helpers.WEEK_START_TIMESTAMP import com.simplemobiletools.calendar.helpers.WEEK_START_TIMESTAMP
import com.simplemobiletools.calendar.interfaces.WeekFragmentListener import com.simplemobiletools.calendar.interfaces.WeekFragmentListener

View File

@@ -1,10 +1,10 @@
package com.simplemobiletools.calendar.adapters package com.simplemobiletools.calendar.adapters
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.util.SparseArray import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import com.simplemobiletools.calendar.fragments.YearFragment import com.simplemobiletools.calendar.fragments.YearFragment
import com.simplemobiletools.calendar.helpers.YEAR_LABEL import com.simplemobiletools.calendar.helpers.YEAR_LABEL

View File

@@ -1,8 +1,8 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.helpers.DAY import com.simplemobiletools.calendar.helpers.DAY
import com.simplemobiletools.calendar.helpers.MONTH import com.simplemobiletools.calendar.helpers.MONTH
@@ -22,7 +22,7 @@ class CustomEventRepeatIntervalDialog(val activity: Activity, val callback: (sec
view.dialog_radio_view.check(R.id.dialog_radio_days) view.dialog_radio_view.check(R.id.dialog_radio_days)
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmRepeatInterval() }) .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmRepeatInterval() }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this) { activity.setupDialogStuff(view, this) {

View File

@@ -1,8 +1,8 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.helpers.DELETE_ALL_OCCURRENCES import com.simplemobiletools.calendar.helpers.DELETE_ALL_OCCURRENCES
import com.simplemobiletools.calendar.helpers.DELETE_FUTURE_OCCURRENCES import com.simplemobiletools.calendar.helpers.DELETE_FUTURE_OCCURRENCES
@@ -28,7 +28,7 @@ class DeleteEventDialog(val activity: Activity, eventIds: List<Int>, hasRepeatab
} }
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.setPositiveButton(R.string.yes, { dialog, which -> dialogConfirmed(view as ViewGroup) }) .setPositiveButton(R.string.yes) { dialog, which -> dialogConfirmed(view as ViewGroup) }
.setNegativeButton(R.string.no, null) .setNegativeButton(R.string.no, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this) activity.setupDialogStuff(view, this)

View File

@@ -1,8 +1,8 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.support.v7.app.AlertDialog
import android.widget.ImageView import android.widget.ImageView
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
@@ -11,7 +11,7 @@ import com.simplemobiletools.commons.dialogs.ColorPickerDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import kotlinx.android.synthetic.main.dialog_event_type.view.* import kotlinx.android.synthetic.main.dialog_event_type.view.*
class UpdateEventTypeDialog(val activity: Activity, var eventType: EventType? = null, val callback: (eventType: EventType) -> Unit) { class EditEventTypeDialog(val activity: Activity, var eventType: EventType? = null, val callback: (eventType: EventType) -> Unit) {
var isNewEvent = eventType == null var isNewEvent = eventType == null
init { init {

View File

@@ -1,7 +1,7 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.commons.extensions.hideKeyboard import com.simplemobiletools.commons.extensions.hideKeyboard

View File

@@ -1,8 +1,8 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.adapters.FilterEventTypeAdapter import com.simplemobiletools.calendar.adapters.FilterEventTypeAdapter
@@ -17,11 +17,11 @@ class ExportEventsDialog(val activity: SimpleActivity, val path: String, val cal
init { init {
val view = (activity.layoutInflater.inflate(R.layout.dialog_export_events, null) as ViewGroup).apply { val view = (activity.layoutInflater.inflate(R.layout.dialog_export_events, null) as ViewGroup).apply {
export_events_folder.text = activity.humanizePath(path) export_events_folder.text = activity.humanizePath(path)
export_events_filename.setText("events_${activity.getCurrentFormattedDateTime()}") export_events_filename.setText("${activity.getString(R.string.events)}_${activity.getCurrentFormattedDateTime()}")
activity.dbHelper.getEventTypes { activity.dbHelper.getEventTypes {
val eventTypes = HashSet<String>() val eventTypes = HashSet<String>()
it.mapTo(eventTypes, { it.id.toString() }) it.mapTo(eventTypes) { it.id.toString() }
activity.runOnUiThread { activity.runOnUiThread {
export_events_types_list.adapter = FilterEventTypeAdapter(activity, it, eventTypes) export_events_types_list.adapter = FilterEventTypeAdapter(activity, it, eventTypes)

View File

@@ -1,6 +1,6 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.support.v7.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.adapters.FilterEventTypeAdapter import com.simplemobiletools.calendar.adapters.FilterEventTypeAdapter
@@ -19,7 +19,7 @@ class FilterEventTypesDialog(val activity: SimpleActivity, val callback: () -> U
view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, eventTypes, displayEventTypes) view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, eventTypes, displayEventTypes)
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmEventTypes() }) .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this, R.string.filter_events_by_type) activity.setupDialogStuff(view, this, R.string.filter_events_by_type)

View File

@@ -1,7 +1,7 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config

View File

@@ -1,10 +1,9 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.app.DatePickerDialog import android.app.DatePickerDialog
import android.support.v7.app.AlertDialog
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.extensions.seconds
@@ -13,7 +12,6 @@ import com.simplemobiletools.calendar.helpers.getNowSeconds
import com.simplemobiletools.commons.extensions.getDialogTheme import com.simplemobiletools.commons.extensions.getDialogTheme
import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.commons.extensions.value
import com.simplemobiletools.commons.helpers.isLollipopPlus
import kotlinx.android.synthetic.main.dialog_repeat_limit_type_picker.view.* import kotlinx.android.synthetic.main.dialog_repeat_limit_type_picker.view.*
import org.joda.time.DateTime import org.joda.time.DateTime
import java.util.* import java.util.*
@@ -25,14 +23,18 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Int,
init { init {
view = activity.layoutInflater.inflate(R.layout.dialog_repeat_limit_type_picker, null).apply { view = activity.layoutInflater.inflate(R.layout.dialog_repeat_limit_type_picker, null).apply {
repeat_type_date.setOnClickListener { showRepetitionLimitDialog() } repeat_type_date.setOnClickListener { showRepetitionLimitDialog() }
repeat_type_forever.setOnClickListener { callback(0); dialog.dismiss() }
repeat_type_count.setOnClickListener { dialog_radio_view.check(R.id.repeat_type_x_times) } repeat_type_count.setOnClickListener { dialog_radio_view.check(R.id.repeat_type_x_times) }
repeat_type_forever.setOnClickListener {
callback(0)
dialog.dismiss()
}
} }
view.dialog_radio_view.check(getCheckedItem()) view.dialog_radio_view.check(getCheckedItem())
if (repeatLimit in 1..startTS) if (repeatLimit in 1..startTS) {
repeatLimit = startTS repeatLimit = startTS
}
updateRepeatLimitText() updateRepeatLimitText()
@@ -80,16 +82,12 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Int,
dialog.dismiss() dialog.dismiss()
} }
@SuppressLint("NewApi")
private fun showRepetitionLimitDialog() { private fun showRepetitionLimitDialog() {
val repeatLimitDateTime = Formatter.getDateTimeFromTS(if (repeatLimit != 0) repeatLimit else getNowSeconds()) val repeatLimitDateTime = Formatter.getDateTimeFromTS(if (repeatLimit != 0) repeatLimit else getNowSeconds())
val datepicker = DatePickerDialog(activity, activity.getDialogTheme(), repetitionLimitDateSetListener, repeatLimitDateTime.year, val datepicker = DatePickerDialog(activity, activity.getDialogTheme(), repetitionLimitDateSetListener, repeatLimitDateTime.year,
repeatLimitDateTime.monthOfYear - 1, repeatLimitDateTime.dayOfMonth) repeatLimitDateTime.monthOfYear - 1, repeatLimitDateTime.dayOfMonth)
if (isLollipopPlus()) { datepicker.datePicker.firstDayOfWeek = if (activity.config.isSundayFirst) Calendar.SUNDAY else Calendar.MONDAY
datepicker.datePicker.firstDayOfWeek = if (activity.config.isSundayFirst) Calendar.SUNDAY else Calendar.MONDAY
}
datepicker.show() datepicker.show()
} }

View File

@@ -1,7 +1,7 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.support.v7.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.setupDialogStuff

View File

@@ -1,10 +1,10 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.support.v7.app.AlertDialog
import android.support.v7.widget.SwitchCompat
import android.text.TextUtils import android.text.TextUtils
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RelativeLayout import android.widget.RelativeLayout
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SwitchCompat
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
@@ -33,7 +33,7 @@ class SelectCalendarsDialog(val activity: SimpleActivity, val callback: () -> Un
} }
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmSelection() }) .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmSelection() }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this, R.string.select_caldav_calendars) activity.setupDialogStuff(view, this, R.string.select_caldav_calendars)

View File

@@ -2,10 +2,10 @@ package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.graphics.Color import android.graphics.Color
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RadioButton import android.widget.RadioButton
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
@@ -29,6 +29,11 @@ class SelectEventCalendarDialog(val activity: Activity, val calendars: List<CalD
activity.dbHelper.getEventTypes { activity.dbHelper.getEventTypes {
activity.runOnUiThread { activity.runOnUiThread {
calendars.forEach { calendars.forEach {
val localEventType = activity.dbHelper.getEventTypeWithCalDAVCalendarId(it.id)
if (localEventType != null) {
it.color = localEventType.color
}
addRadioButton(it.getFullTitle(), it.id, it.color) addRadioButton(it.getFullTitle(), it.id, it.color)
} }
addRadioButton(activity.getString(R.string.store_locally_only), STORED_LOCALLY_ONLY, Color.TRANSPARENT) addRadioButton(activity.getString(R.string.store_locally_only), STORED_LOCALLY_ONLY, Color.TRANSPARENT)
@@ -51,8 +56,9 @@ class SelectEventCalendarDialog(val activity: Activity, val calendars: List<CalD
id = typeId id = typeId
} }
if (color != Color.TRANSPARENT) if (typeId != STORED_LOCALLY_ONLY) {
view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor) view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor)
}
view.setOnClickListener { viewClicked(typeId) } view.setOnClickListener { viewClicked(typeId) }
radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))

View File

@@ -1,18 +1,18 @@
package com.simplemobiletools.calendar.dialogs package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.graphics.Color
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RadioButton import android.widget.RadioButton
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.helpers.CalDAVHandler import com.simplemobiletools.calendar.helpers.CalDAVHandler
import com.simplemobiletools.calendar.models.EventType import com.simplemobiletools.calendar.models.EventType
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
import com.simplemobiletools.commons.extensions.setFillWithStroke import com.simplemobiletools.commons.extensions.setFillWithStroke
import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.setupDialogStuff
import kotlinx.android.synthetic.main.dialog_select_radio_group.view.* import kotlinx.android.synthetic.main.dialog_select_event_type_color.view.*
import kotlinx.android.synthetic.main.radio_button_with_color.view.* import kotlinx.android.synthetic.main.radio_button_with_color.view.*
class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventType, val callback: (color: Int) -> Unit) { class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventType, val callback: (color: Int) -> Unit) {
@@ -22,8 +22,11 @@ class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventTyp
private val colors = CalDAVHandler(activity.applicationContext).getAvailableCalDAVCalendarColors(eventType) private val colors = CalDAVHandler(activity.applicationContext).getAvailableCalDAVCalendarColors(eventType)
init { init {
val view = activity.layoutInflater.inflate(R.layout.dialog_select_radio_group, null) as ViewGroup val view = activity.layoutInflater.inflate(R.layout.dialog_select_event_type_color, null) as ViewGroup
radioGroup = view.dialog_radio_group radioGroup = view.dialog_select_event_type_color_radio
view.dialog_select_event_type_other_value.setOnClickListener {
showCustomColorPicker()
}
colors.forEachIndexed { index, value -> colors.forEachIndexed { index, value ->
addRadioButton(index, value) addRadioButton(index, value)
@@ -33,21 +36,25 @@ class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventTyp
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this) activity.setupDialogStuff(view, this)
if (colors.isEmpty()) {
showCustomColorPicker()
}
} }
} }
private fun addRadioButton(colorKey: Int, color: Int) { private fun addRadioButton(colorKey: Int, color: Int) {
val view = activity.layoutInflater.inflate(R.layout.radio_button_with_color, null) val view = activity.layoutInflater.inflate(R.layout.radio_button_with_color, null)
(view.dialog_radio_button as RadioButton).apply { (view.dialog_radio_button as RadioButton).apply {
text = String.format("#%06X", 0xFFFFFF and color) text = if (color == 0) activity.getString(R.string.transparent) else String.format("#%06X", 0xFFFFFF and color)
isChecked = color == eventType.color isChecked = color == eventType.color
id = colorKey id = colorKey
} }
if (color != Color.TRANSPARENT) view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor)
view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor) view.setOnClickListener {
viewClicked(colorKey)
view.setOnClickListener { viewClicked(colorKey) } }
radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
} }
@@ -58,4 +65,13 @@ class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventTyp
callback(colors[colorKey]) callback(colors[colorKey])
dialog?.dismiss() dialog?.dismiss()
} }
private fun showCustomColorPicker() {
ColorPickerDialog(activity, activity.config.primaryColor) { wasPositivePressed, color ->
if (wasPositivePressed) {
callback(color)
}
dialog?.dismiss()
}
}
} }

View File

@@ -2,9 +2,9 @@ package com.simplemobiletools.calendar.dialogs
import android.app.Activity import android.app.Activity
import android.graphics.Color import android.graphics.Color
import android.support.v7.app.AlertDialog
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
@@ -72,7 +72,7 @@ class SelectEventTypeDialog(val activity: Activity, val currEventType: Int, val
} }
if (eventType.id == NEW_TYPE_ID) { if (eventType.id == NEW_TYPE_ID) {
UpdateEventTypeDialog(activity) { EditEventTypeDialog(activity) {
callback(it) callback(it)
activity.hideKeyboard() activity.hideKeyboard()
dialog?.dismiss() dialog?.dismiss()

View File

@@ -55,9 +55,9 @@ fun Activity.showEventRepeatIntervalDialog(curSeconds: Int, callback: (minutes:
} }
val items = ArrayList<RadioItem>(seconds.size + 1) val items = ArrayList<RadioItem>(seconds.size + 1)
seconds.mapIndexedTo(items, { index, value -> seconds.mapIndexedTo(items) { index, value ->
RadioItem(index, getRepetitionText(value), value) RadioItem(index, getRepetitionText(value), value)
}) }
var selectedIndex = 0 var selectedIndex = 0
seconds.forEachIndexed { index, value -> seconds.forEachIndexed { index, value ->

View File

@@ -14,13 +14,13 @@ import android.media.AudioAttributes
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.provider.CalendarContract import android.provider.CalendarContract
import android.support.v4.app.AlarmManagerCompat
import android.support.v4.app.NotificationCompat
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.app.AlarmManagerCompat
import androidx.core.app.NotificationCompat
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.EventActivity
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
@@ -85,7 +85,7 @@ fun Context.scheduleNextEventReminder(event: Event, dbHelper: DBHelper, activity
val now = getNowSeconds() val now = getNowSeconds()
val reminderSeconds = event.getReminders().reversed().map { it * 60 } val reminderSeconds = event.getReminders().reversed().map { it * 60 }
dbHelper.getEvents(now, now + YEAR, event.id) { dbHelper.getEvents(now, now + YEAR, event.id, false) {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
for (curEvent in it) { for (curEvent in it) {
for (curReminder in reminderSeconds) { for (curReminder in reminderSeconds) {
@@ -146,11 +146,6 @@ fun Context.getRepetitionText(seconds: Int) = when (seconds) {
} }
} }
fun Context.getFilteredEvents(events: List<Event>): ArrayList<Event> {
val displayEventTypes = config.displayEventTypes
return events.filter { displayEventTypes.contains(it.eventType.toString()) } as ArrayList<Event>
}
fun Context.notifyRunningEvents() { fun Context.notifyRunningEvents() {
dbHelper.getRunningEvents().filter { it.getReminders().isNotEmpty() }.forEach { dbHelper.getRunningEvents().filter { it.getReminders().isNotEmpty() }.forEach {
notifyEvent(it) notifyEvent(it)
@@ -453,7 +448,7 @@ fun Context.handleEventDeleting(eventIds: List<Int>, timestamps: List<Int>, acti
} }
} }
DELETE_ALL_OCCURRENCES -> { DELETE_ALL_OCCURRENCES -> {
val eventIDs = Array(eventIds.size, { i -> (eventIds[i].toString()) }) val eventIDs = Array(eventIds.size) { i -> (eventIds[i].toString()) }
dbHelper.deleteEvents(eventIDs, true) dbHelper.deleteEvents(eventIDs, true)
} }
} }

View File

@@ -2,20 +2,19 @@ package com.simplemobiletools.calendar.fragments
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.app.AlertDialog
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.DatePicker import android.widget.DatePicker
import android.widget.RelativeLayout import android.widget.RelativeLayout
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.EventActivity
import com.simplemobiletools.calendar.activities.SimpleActivity import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.adapters.DayEventsAdapter import com.simplemobiletools.calendar.adapters.DayEventsAdapter
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.extensions.getFilteredEvents
import com.simplemobiletools.calendar.helpers.DAY_CODE import com.simplemobiletools.calendar.helpers.DAY_CODE
import com.simplemobiletools.calendar.helpers.EVENT_ID import com.simplemobiletools.calendar.helpers.EVENT_ID
import com.simplemobiletools.calendar.helpers.EVENT_OCCURRENCE_TS import com.simplemobiletools.calendar.helpers.EVENT_OCCURRENCE_TS
@@ -106,21 +105,20 @@ class DayFragment : Fragment() {
fun updateCalendar() { fun updateCalendar() {
val startTS = Formatter.getDayStartTS(mDayCode) val startTS = Formatter.getDayStartTS(mDayCode)
val endTS = Formatter.getDayEndTS(mDayCode) val endTS = Formatter.getDayEndTS(mDayCode)
context?.dbHelper?.getEvents(startTS, endTS) { context?.dbHelper?.getEvents(startTS, endTS, applyTypeFilter = true) {
receivedEvents(it) receivedEvents(it)
} }
} }
private fun receivedEvents(events: List<Event>) { private fun receivedEvents(events: List<Event>) {
val filtered = context?.getFilteredEvents(events) ?: ArrayList() val newHash = events.hashCode()
val newHash = filtered.hashCode()
if (newHash == lastHash || !isAdded) { if (newHash == lastHash || !isAdded) {
return return
} }
lastHash = newHash lastHash = newHash
val replaceDescription = context!!.config.replaceDescription val replaceDescription = context!!.config.replaceDescription
val sorted = ArrayList<Event>(filtered.sortedWith(compareBy({ !it.getIsAllDay() }, { it.startTS }, { it.endTS }, { it.title }, { val sorted = ArrayList<Event>(events.sortedWith(compareBy({ !it.getIsAllDay() }, { it.startTS }, { it.endTS }, { it.title }, {
if (replaceDescription) it.location else it.description if (replaceDescription) it.location else it.description
}))) })))

View File

@@ -2,10 +2,10 @@ package com.simplemobiletools.calendar.fragments
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.support.v4.view.ViewPager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.activities.MainActivity
import com.simplemobiletools.calendar.adapters.MyDayPagerAdapter import com.simplemobiletools.calendar.adapters.MyDayPagerAdapter

View File

@@ -76,7 +76,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
maxFetchedTS = DateTime().plusMonths(6).seconds() maxFetchedTS = DateTime().plusMonths(6).seconds()
} }
context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS) { context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS, applyTypeFilter = true) {
if (it.size >= MIN_EVENTS_TRESHOLD) { if (it.size >= MIN_EVENTS_TRESHOLD) {
receivedEvents(it, false) receivedEvents(it, false)
} else { } else {
@@ -84,7 +84,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
minFetchedTS -= FETCH_INTERVAL minFetchedTS -= FETCH_INTERVAL
maxFetchedTS += FETCH_INTERVAL maxFetchedTS += FETCH_INTERVAL
} }
context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS) { context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS, applyTypeFilter = true) {
mEvents = it mEvents = it
receivedEvents(mEvents, false, !wereInitialEventsAdded) receivedEvents(mEvents, false, !wereInitialEventsAdded)
} }
@@ -98,7 +98,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
return return
} }
mEvents = context!!.getFilteredEvents(events) mEvents = events
val listItems = context!!.getEventListItems(mEvents) val listItems = context!!.getEventListItems(mEvents)
activity?.runOnUiThread { activity?.runOnUiThread {
@@ -150,7 +150,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
private fun fetchPreviousPeriod() { private fun fetchPreviousPeriod() {
val oldMinFetchedTS = minFetchedTS - 1 val oldMinFetchedTS = minFetchedTS - 1
minFetchedTS -= FETCH_INTERVAL minFetchedTS -= FETCH_INTERVAL
context!!.dbHelper.getEvents(minFetchedTS, oldMinFetchedTS) { context!!.dbHelper.getEvents(minFetchedTS, oldMinFetchedTS, applyTypeFilter = true) {
mEvents.addAll(0, it) mEvents.addAll(0, it)
receivedEvents(mEvents, false) receivedEvents(mEvents, false)
} }
@@ -159,7 +159,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
private fun fetchNextPeriod(scrollAfterUpdating: Boolean) { private fun fetchNextPeriod(scrollAfterUpdating: Boolean) {
val oldMaxFetchedTS = maxFetchedTS + 1 val oldMaxFetchedTS = maxFetchedTS + 1
maxFetchedTS += FETCH_INTERVAL maxFetchedTS += FETCH_INTERVAL
context!!.dbHelper.getEvents(oldMaxFetchedTS, maxFetchedTS) { context!!.dbHelper.getEvents(oldMaxFetchedTS, maxFetchedTS, applyTypeFilter = true) {
mEvents.addAll(it) mEvents.addAll(it)
receivedEvents(mEvents, scrollAfterUpdating) receivedEvents(mEvents, scrollAfterUpdating)
} }

View File

@@ -3,8 +3,8 @@ package com.simplemobiletools.calendar.fragments
import android.content.Context import android.content.Context
import android.content.res.Resources import android.content.res.Resources
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment import androidx.fragment.app.Fragment
import android.support.v7.app.AlertDialog import androidx.appcompat.app.AlertDialog
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup

View File

@@ -2,10 +2,10 @@ package com.simplemobiletools.calendar.fragments
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.support.v4.view.ViewPager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.activities.MainActivity
import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter

View File

@@ -1,6 +1,6 @@
package com.simplemobiletools.calendar.fragments package com.simplemobiletools.calendar.fragments
import android.support.v4.app.Fragment import androidx.fragment.app.Fragment
abstract class MyFragmentHolder : Fragment() { abstract class MyFragmentHolder : Fragment() {
abstract fun goToToday() abstract fun goToToday()

View File

@@ -5,17 +5,19 @@ import android.content.res.Resources
import android.graphics.Rect import android.graphics.Rect
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.SparseIntArray import android.util.SparseIntArray
import android.view.* import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.EventActivity import com.simplemobiletools.calendar.activities.EventActivity
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.extensions.getFilteredEvents
import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.extensions.seconds
import com.simplemobiletools.calendar.helpers.* import com.simplemobiletools.calendar.helpers.*
import com.simplemobiletools.calendar.helpers.Formatter import com.simplemobiletools.calendar.helpers.Formatter
@@ -61,6 +63,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
lateinit var mScrollView: MyScrollView lateinit var mScrollView: MyScrollView
lateinit var mCalendar: WeeklyCalendarImpl lateinit var mCalendar: WeeklyCalendarImpl
lateinit var mRes: Resources lateinit var mRes: Resources
lateinit var mConfig: Config
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -68,12 +71,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
it.map { eventTypeColors.put(it.id, it.color) } it.map { eventTypeColors.put(it.id, it.color) }
} }
mRowHeight = context!!.resources.getDimension(R.dimen.weekly_view_row_height) mRes = context!!.resources
minScrollY = (mRowHeight * context!!.config.startWeeklyAt).toInt() mConfig = context!!.config
mRowHeight = mRes.getDimension(R.dimen.weekly_view_row_height)
minScrollY = (mRowHeight * mConfig.startWeeklyAt).toInt()
mWeekTimestamp = arguments!!.getInt(WEEK_START_TIMESTAMP) mWeekTimestamp = arguments!!.getInt(WEEK_START_TIMESTAMP)
dimPastEvents = context!!.config.dimPastEvents dimPastEvents = mConfig.dimPastEvents
primaryColor = context!!.getAdjustedPrimaryColor() primaryColor = context!!.getAdjustedPrimaryColor()
mRes = resources
allDayRows.add(HashSet()) allDayRows.add(HashSet())
mCalendar = WeeklyCalendarImpl(this, context!!) mCalendar = WeeklyCalendarImpl(this, context!!)
} }
@@ -97,11 +101,6 @@ class WeekFragment : Fragment(), WeeklyCalendar {
return mView return mView
} }
override fun onPause() {
super.onPause()
wasExtraHeightAdded = true
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
setupDayLabels() setupDayLabels()
@@ -112,8 +111,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
return@onGlobalLayout return@onGlobalLayout
} }
minScrollY = (mRowHeight * context!!.config.startWeeklyAt).toInt() minScrollY = (mRowHeight * mConfig.startWeeklyAt).toInt()
maxScrollY = (mRowHeight * context!!.config.endWeeklyAt).toInt() maxScrollY = (mRowHeight * mConfig.endWeeklyAt).toInt()
val bounds = Rect() val bounds = Rect()
week_events_holder.getGlobalVisibleRect(bounds) week_events_holder.getGlobalVisibleRect(bounds)
@@ -125,6 +124,16 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
} }
override fun onPause() {
super.onPause()
wasExtraHeightAdded = true
}
override fun onDestroyView() {
super.onDestroyView()
mWasDestroyed = true
}
override fun setMenuVisibility(menuVisible: Boolean) { override fun setMenuVisibility(menuVisible: Boolean) {
super.setMenuVisibility(menuVisible) super.setMenuVisibility(menuVisible)
isFragmentVisible = menuVisible isFragmentVisible = menuVisible
@@ -140,11 +149,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
private fun setupDayLabels() { private fun setupDayLabels() {
var curDay = Formatter.getDateTimeFromTS(mWeekTimestamp) var curDay = Formatter.getDateTimeFromTS(mWeekTimestamp)
val textColor = context!!.config.textColor val textColor = mConfig.textColor
val todayCode = Formatter.getDayCodeFromDateTime(DateTime()) val todayCode = Formatter.getDayCodeFromDateTime(DateTime())
for (i in 0..6) { for (i in 0..6) {
val dayCode = Formatter.getDayCodeFromDateTime(curDay) val dayCode = Formatter.getDayCodeFromDateTime(curDay)
val dayLetters = mRes.getStringArray(R.array.week_day_letters).toList() as ArrayList<String> val dayLetters = mRes.getStringArray(R.array.week_day_letters).toMutableList() as ArrayList<String>
val dayLetter = dayLetters[curDay.dayOfWeek - 1] val dayLetter = dayLetters[curDay.dayOfWeek - 1]
mView.findViewById<TextView>(mRes.getIdentifier("week_day_label_$i", "id", context!!.packageName)).apply { mView.findViewById<TextView>(mRes.getIdentifier("week_day_label_$i", "id", context!!.packageName)).apply {
@@ -187,7 +196,6 @@ class WeekFragment : Fragment(), WeeklyCalendar {
selectedGrid?.animation?.cancel() selectedGrid?.animation?.cancel()
selectedGrid?.beGone() selectedGrid?.beGone()
//val rowHeight = resources.getDimension(R.dimen.weekly_view_row_height)
val hour = (event.y / mRowHeight).toInt() val hour = (event.y / mRowHeight).toInt()
selectedGrid = (inflater.inflate(R.layout.week_grid_item, null, false) as ImageView).apply { selectedGrid = (inflater.inflate(R.layout.week_grid_item, null, false) as ImageView).apply {
view.addView(this) view.addView(this)
@@ -215,25 +223,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
override fun updateWeeklyCalendar(events: ArrayList<Event>) { override fun updateWeeklyCalendar(events: ArrayList<Event>) {
if (context == null) { val newHash = events.hashCode()
return if (newHash == lastHash || mWasDestroyed || context == null) {
}
val newEvents = context!!.getFilteredEvents(events)
val newHash = newEvents.hashCode()
if (newHash == lastHash) {
return return
} }
lastHash = newHash lastHash = newHash
this.events = newEvents this.events = events
updateEvents()
}
private fun updateEvents() {
if (mWasDestroyed) {
return
}
activity!!.runOnUiThread { activity!!.runOnUiThread {
if (context != null && activity != null && isAdded) { if (context != null && activity != null && isAdded) {
@@ -256,7 +252,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
val minimalHeight = mRes.getDimension(R.dimen.weekly_view_minimal_event_height).toInt() val minimalHeight = mRes.getDimension(R.dimen.weekly_view_minimal_event_height).toInt()
var hadAllDayEvent = false var hadAllDayEvent = false
val replaceDescription = context!!.config.replaceDescription val replaceDescription = mConfig.replaceDescription
val sorted = events.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description })) val sorted = events.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description }))
for (event in sorted) { for (event in sorted) {
if (event.getIsAllDay() || Formatter.getDayCodeFromTS(event.startTS) != Formatter.getDayCodeFromTS(event.endTS)) { if (event.getIsAllDay() || Formatter.getDayCodeFromTS(event.startTS) != Formatter.getDayCodeFromTS(event.endTS)) {
@@ -265,7 +261,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} else { } else {
val startDateTime = Formatter.getDateTimeFromTS(event.startTS) val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
val endDateTime = Formatter.getDateTimeFromTS(event.endTS) val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
val dayOfWeek = startDateTime.plusDays(if (context!!.config.isSundayFirst) 1 else 0).dayOfWeek - 1 val dayOfWeek = startDateTime.plusDays(if (mConfig.isSundayFirst) 1 else 0).dayOfWeek - 1
val layout = getColumnWithId(dayOfWeek) val layout = getColumnWithId(dayOfWeek)
val startMinutes = startDateTime.minuteOfDay val startMinutes = startDateTime.minuteOfDay
@@ -320,7 +316,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
applyColorFilter(primaryColor) applyColorFilter(primaryColor)
mView.week_events_holder.addView(this, 0) mView.week_events_holder.addView(this, 0)
val extraWidth = (todayColumn.width * 0.3).toInt() val extraWidth = (todayColumn.width * 0.3).toInt()
val markerHeight = resources.getDimension(R.dimen.weekly_view_now_height).toInt() val markerHeight = mRes.getDimension(R.dimen.weekly_view_now_height).toInt()
(layoutParams as RelativeLayout.LayoutParams).apply { (layoutParams as RelativeLayout.LayoutParams).apply {
width = todayColumn.width + extraWidth width = todayColumn.width + extraWidth
height = markerHeight height = markerHeight
@@ -332,14 +328,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
private fun checkTopHolderHeight() { private fun checkTopHolderHeight() {
mView.week_top_holder.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { mView.week_top_holder.onGlobalLayout {
override fun onGlobalLayout() { if (isFragmentVisible && activity != null && !mWasDestroyed) {
mView.week_top_holder.viewTreeObserver.removeOnGlobalLayoutListener(this) mListener?.updateHoursTopMargin(mView.week_top_holder.height)
if (isFragmentVisible && activity != null) {
mListener?.updateHoursTopMargin(mView.week_top_holder.height)
}
} }
}) }
} }
private fun addAllDayEvent(event: Event) { private fun addAllDayEvent(event: Event) {
@@ -363,7 +356,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
val daysCnt = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days val daysCnt = Days.daysBetween(Formatter.getDateTimeFromTS(minTS).toLocalDate(), Formatter.getDateTimeFromTS(maxTS).toLocalDate()).days
val startDateTimeInWeek = Formatter.getDateTimeFromTS(minTS) val startDateTimeInWeek = Formatter.getDateTimeFromTS(minTS)
val firstDayIndex = (startDateTimeInWeek.dayOfWeek - if (context!!.config.isSundayFirst) 0 else 1) % 7 val firstDayIndex = (startDateTimeInWeek.dayOfWeek - if (mConfig.isSundayFirst) 0 else 1) % 7
var doesEventFit: Boolean var doesEventFit: Boolean
val cnt = allDayRows.size - 1 val cnt = allDayRows.size - 1
var wasEventHandled = false var wasEventHandled = false
@@ -417,12 +410,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
private fun calculateExtraHeight() { private fun calculateExtraHeight() {
mView.week_top_holder.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { mView.week_top_holder.onGlobalLayout {
override fun onGlobalLayout() { if (activity != null && !mWasDestroyed) {
if (activity == null)
return
mView.week_top_holder.viewTreeObserver.removeOnGlobalLayoutListener(this)
if (isFragmentVisible) { if (isFragmentVisible) {
mListener?.updateHoursTopMargin(mView.week_top_holder.height) mListener?.updateHoursTopMargin(mView.week_top_holder.height)
} }
@@ -432,12 +421,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
wasExtraHeightAdded = true wasExtraHeightAdded = true
} }
} }
}) }
}
override fun onDestroyView() {
super.onDestroyView()
mWasDestroyed = true
} }
private fun getColumnWithId(id: Int) = mView.findViewById<ViewGroup>(mRes.getIdentifier("week_column_$id", "id", context!!.packageName)) private fun getColumnWithId(id: Int) = mView.findViewById<ViewGroup>(mRes.getIdentifier("week_column_$id", "id", context!!.packageName))

View File

@@ -2,11 +2,11 @@ package com.simplemobiletools.calendar.fragments
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.support.v4.view.ViewPager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.calendar.R import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.MainActivity import com.simplemobiletools.calendar.activities.MainActivity
import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter
@@ -67,11 +67,9 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
weekHolder!!.week_view_view_pager.apply { weekHolder!!.week_view_view_pager.apply {
adapter = weeklyAdapter adapter = weeklyAdapter
addOnPageChangeListener(object : ViewPager.OnPageChangeListener { addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) { override fun onPageScrollStateChanged(state: Int) {}
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
}
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
currentWeekTS = weekTSs[position] currentWeekTS = weekTSs[position]

View File

@@ -2,7 +2,7 @@ package com.simplemobiletools.calendar.fragments
import android.content.res.Resources import android.content.res.Resources
import android.os.Bundle import android.os.Bundle
import android.support.v4.app.Fragment import androidx.fragment.app.Fragment
import android.util.SparseArray import android.util.SparseArray
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View

View File

@@ -2,7 +2,7 @@ package com.simplemobiletools.calendar.fragments
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.support.v4.view.ViewPager import androidx.viewpager.widget.ViewPager
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup

View File

@@ -30,7 +30,6 @@ class CalDAVHandler(val context: Context) {
title = calendar.displayName title = calendar.displayName
caldavDisplayName = calendar.displayName caldavDisplayName = calendar.displayName
caldavEmail = calendar.accountName caldavEmail = calendar.accountName
color = calendar.color
context.dbHelper.updateLocalEventType(this) context.dbHelper.updateLocalEventType(this)
} }
@@ -81,14 +80,13 @@ class CalDAVHandler(val context: Context) {
return calendars return calendars
} }
fun updateCalDAVCalendar(eventType: EventType): Boolean { fun updateCalDAVCalendar(eventType: EventType) {
val uri = CalendarContract.Calendars.CONTENT_URI val uri = CalendarContract.Calendars.CONTENT_URI
val values = fillCalendarContentValues(eventType) val values = fillCalendarContentValues(eventType)
val newUri = ContentUris.withAppendedId(uri, eventType.caldavCalendarId.toLong()) val newUri = ContentUris.withAppendedId(uri, eventType.caldavCalendarId.toLong())
return try { try {
context.contentResolver.update(newUri, values, null, null) == 1 context.contentResolver.update(newUri, values, null, null)
} catch (e: IllegalArgumentException) { } catch (e: IllegalArgumentException) {
false
} }
} }
@@ -119,53 +117,6 @@ class CalDAVHandler(val context: Context) {
return -1 return -1
} }
// it doesnt work properly, needs better SyncAdapter handling
private fun insertNewColor(eventType: EventType): Int {
val maxId = getMaxColorId(eventType) + 1
val values = ContentValues().apply {
put(CalendarContract.Colors.COLOR_KEY, maxId)
put(CalendarContract.Colors.COLOR, eventType.color)
put(CalendarContract.Colors.ACCOUNT_NAME, eventType.caldavEmail)
put(CalendarContract.Colors.ACCOUNT_TYPE, "com.google")
put(CalendarContract.Colors.COLOR_TYPE, CalendarContract.Colors.TYPE_CALENDAR)
}
val uri = CalendarContract.Colors.CONTENT_URI.buildUpon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, eventType.caldavEmail)
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, "com.google")
.build()
return if (context.contentResolver.insert(uri, values) != null) {
maxId
} else {
0
}
}
private fun getMaxColorId(eventType: EventType): Int {
val uri = CalendarContract.Colors.CONTENT_URI
val projection = arrayOf(CalendarContract.Colors.COLOR_KEY, CalendarContract.Colors.COLOR)
val selection = "${CalendarContract.Colors.COLOR_TYPE} = ? AND ${CalendarContract.Colors.ACCOUNT_NAME} = ?"
val selectionArgs = arrayOf(CalendarContract.Colors.TYPE_CALENDAR.toString(), eventType.caldavEmail)
var maxId = 1
var cursor: Cursor? = null
try {
cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
if (cursor != null && cursor.moveToFirst()) {
do {
maxId = Math.max(maxId, cursor.getIntValue(CalendarContract.Colors.COLOR_KEY))
} while (cursor.moveToNext())
}
} finally {
cursor?.close()
}
return maxId
}
fun getAvailableCalDAVCalendarColors(eventType: EventType): ArrayList<Int> { fun getAvailableCalDAVCalendarColors(eventType: EventType): ArrayList<Int> {
val colors = SparseIntArray() val colors = SparseIntArray()
val uri = CalendarContract.Colors.CONTENT_URI val uri = CalendarContract.Colors.CONTENT_URI
@@ -309,9 +260,7 @@ class CalDAVHandler(val context: Context) {
} }
} }
eventIdsToDelete.forEach { context.dbHelper.deleteEvents(eventIdsToDelete.toTypedArray(), false)
context.dbHelper.deleteEvents(eventIdsToDelete.toTypedArray(), false)
}
} }
fun insertCalDAVEvent(event: Event) { fun insertCalDAVEvent(event: Event) {

View File

@@ -52,7 +52,7 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getInt(VIEW, MONTHLY_VIEW) get() = prefs.getInt(VIEW, MONTHLY_VIEW)
set(view) = prefs.edit().putInt(VIEW, view).apply() set(view) = prefs.edit().putInt(VIEW, view).apply()
var lastEventReminderMinutes: Int var lastEventReminderMinutes1: Int
get() = prefs.getInt(LAST_EVENT_REMINDER_MINUTES, 10) get() = prefs.getInt(LAST_EVENT_REMINDER_MINUTES, 10)
set(lastEventReminderMinutes) = prefs.edit().putInt(LAST_EVENT_REMINDER_MINUTES, lastEventReminderMinutes).apply() set(lastEventReminderMinutes) = prefs.edit().putInt(LAST_EVENT_REMINDER_MINUTES, lastEventReminderMinutes).apply()
@@ -76,6 +76,10 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getInt(FONT_SIZE, FONT_SIZE_MEDIUM) get() = prefs.getInt(FONT_SIZE, FONT_SIZE_MEDIUM)
set(size) = prefs.edit().putInt(FONT_SIZE, size).apply() set(size) = prefs.edit().putInt(FONT_SIZE, size).apply()
var listWidgetViewToOpen: Int
get() = prefs.getInt(LIST_WIDGET_VIEW_TO_OPEN, DAILY_VIEW)
set(viewToOpenFromListWidget) = prefs.edit().putInt(LIST_WIDGET_VIEW_TO_OPEN, viewToOpenFromListWidget).apply()
var caldavSync: Boolean var caldavSync: Boolean
get() = prefs.getBoolean(CALDAV_SYNC, false) get() = prefs.getBoolean(CALDAV_SYNC, false)
set(caldavSync) { set(caldavSync) {
@@ -158,4 +162,8 @@ class Config(context: Context) : BaseConfig(context) {
var defaultReminder3: Int var defaultReminder3: Int
get() = prefs.getInt(DEFAULT_REMINDER_3, REMINDER_OFF) get() = prefs.getInt(DEFAULT_REMINDER_3, REMINDER_OFF)
set(defaultReminder3) = prefs.edit().putInt(DEFAULT_REMINDER_3, defaultReminder3).apply() set(defaultReminder3) = prefs.edit().putInt(DEFAULT_REMINDER_3, defaultReminder3).apply()
var pullToRefresh: Boolean
get() = prefs.getBoolean(PULL_TO_REFRESH, false)
set(pullToRefresh) = prefs.edit().putBoolean(PULL_TO_REFRESH, pullToRefresh).apply()
} }

View File

@@ -14,13 +14,14 @@ const val WEEK_START_TIMESTAMP = "week_start_timestamp"
const val NEW_EVENT_SET_HOUR_DURATION = "new_event_set_hour_duration" const val NEW_EVENT_SET_HOUR_DURATION = "new_event_set_hour_duration"
const val WEEK_START_DATE_TIME = "week_start_date_time" const val WEEK_START_DATE_TIME = "week_start_date_time"
const val CALDAV = "Caldav" const val CALDAV = "Caldav"
const val OPEN_MONTH = "open_month" const val VIEW_TO_OPEN = "view_to_open"
const val MONTHLY_VIEW = 1 const val MONTHLY_VIEW = 1
const val YEARLY_VIEW = 2 const val YEARLY_VIEW = 2
const val EVENTS_LIST_VIEW = 3 const val EVENTS_LIST_VIEW = 3
const val WEEKLY_VIEW = 4 const val WEEKLY_VIEW = 4
const val DAILY_VIEW = 5 const val DAILY_VIEW = 5
const val LAST_VIEW = 6
const val REMINDER_OFF = -1 const val REMINDER_OFF = -1
@@ -46,6 +47,7 @@ const val LAST_EVENT_REMINDER_MINUTES_2 = "reminder_minutes_2"
const val LAST_EVENT_REMINDER_MINUTES_3 = "reminder_minutes_3" const val LAST_EVENT_REMINDER_MINUTES_3 = "reminder_minutes_3"
const val DISPLAY_EVENT_TYPES = "display_event_types" const val DISPLAY_EVENT_TYPES = "display_event_types"
const val FONT_SIZE = "font_size" const val FONT_SIZE = "font_size"
const val LIST_WIDGET_VIEW_TO_OPEN = "list_widget_view_to_open"
const val CALDAV_SYNC = "caldav_sync" const val CALDAV_SYNC = "caldav_sync"
const val CALDAV_SYNCED_CALENDAR_IDS = "caldav_synced_calendar_ids" const val CALDAV_SYNCED_CALENDAR_IDS = "caldav_synced_calendar_ids"
const val LAST_USED_CALDAV_CALENDAR = "last_used_caldav_calendar" const val LAST_USED_CALDAV_CALENDAR = "last_used_caldav_calendar"
@@ -62,6 +64,7 @@ const val USE_PREVIOUS_EVENT_REMINDERS = "use_previous_event_reminders"
const val DEFAULT_REMINDER_1 = "default_reminder_1" const val DEFAULT_REMINDER_1 = "default_reminder_1"
const val DEFAULT_REMINDER_2 = "default_reminder_2" const val DEFAULT_REMINDER_2 = "default_reminder_2"
const val DEFAULT_REMINDER_3 = "default_reminder_3" const val DEFAULT_REMINDER_3 = "default_reminder_3"
const val PULL_TO_REFRESH = "pull_to_refresh"
// repeat_rule for monthly and yearly repetition // repeat_rule for monthly and yearly repetition
const val REPEAT_SAME_DAY = 1 // i.e. 25th every month, or 3rd june (if yearly repetition) const val REPEAT_SAME_DAY = 1 // i.e. 25th every month, or 3rd june (if yearly repetition)

View File

@@ -320,15 +320,11 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
} }
fun updateEventType(eventType: EventType): Int { fun updateEventType(eventType: EventType): Int {
return if (eventType.caldavCalendarId != 0) { if (eventType.caldavCalendarId != 0) {
if (CalDAVHandler(context).updateCalDAVCalendar(eventType)) { CalDAVHandler(context).updateCalDAVCalendar(eventType)
updateLocalEventType(eventType)
} else {
-1
}
} else {
updateLocalEventType(eventType)
} }
return updateLocalEventType(eventType)
} }
fun updateLocalEventType(eventType: EventType): Int { fun updateLocalEventType(eventType: EventType): Int {
@@ -573,7 +569,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
} }
fun deleteEventTypes(eventTypes: ArrayList<EventType>, deleteEvents: Boolean, callback: (deletedCnt: Int) -> Unit) { fun deleteEventTypes(eventTypes: ArrayList<EventType>, deleteEvents: Boolean, callback: (deletedCnt: Int) -> Unit) {
var deleteIds = eventTypes.filter { it.caldavCalendarId == 0 }.map { it.id } var deleteIds = eventTypes.asSequence().filter { it.caldavCalendarId == 0 }.map { it.id }.toList()
deleteIds = deleteIds.filter { it != DBHelper.REGULAR_EVENT_TYPE_ID } as ArrayList<Int> deleteIds = deleteIds.filter { it != DBHelper.REGULAR_EVENT_TYPE_ID } as ArrayList<Int>
val deletedSet = HashSet<String>() val deletedSet = HashSet<String>()
@@ -606,7 +602,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
val selectionArgs = arrayOf(eventTypeId.toString()) val selectionArgs = arrayOf(eventTypeId.toString())
val cursor = getEventsCursor(selection, selectionArgs) val cursor = getEventsCursor(selection, selectionArgs)
val events = fillEvents(cursor) val events = fillEvents(cursor)
val eventIDs = Array(events.size, { i -> (events[i].id.toString()) }) val eventIDs = Array(events.size) { i -> (events[i].id.toString()) }
deleteEvents(eventIDs, true) deleteEvents(eventIDs, true)
} }
@@ -681,37 +677,58 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
}.start() }.start()
} }
fun getEvents(fromTS: Int, toTS: Int, eventId: Int = -1, callback: (events: ArrayList<Event>) -> Unit) { fun getEvents(fromTS: Int, toTS: Int, eventId: Int = -1, applyTypeFilter: Boolean = false, callback: (events: ArrayList<Event>) -> Unit) {
Thread { Thread {
getEventsInBackground(fromTS, toTS, eventId, callback) getEventsInBackground(fromTS, toTS, eventId, applyTypeFilter, callback)
}.start() }.start()
} }
fun getEventsInBackground(fromTS: Int, toTS: Int, eventId: Int = -1, callback: (events: ArrayList<Event>) -> Unit) { fun getEventsInBackground(fromTS: Int, toTS: Int, eventId: Int = -1, applyTypeFilter: Boolean, callback: (events: ArrayList<Event>) -> Unit) {
val events = ArrayList<Event>() var events = ArrayList<Event>()
var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL AND $COL_START_TS != 0" var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL AND $COL_START_TS != 0"
if (eventId != -1) if (eventId != -1)
selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId" selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId"
if (applyTypeFilter) {
val displayEventTypes = context.config.displayEventTypes
if (displayEventTypes.isNotEmpty()) {
val types = TextUtils.join(",", displayEventTypes)
selection += " AND $COL_EVENT_TYPE IN ($types)"
}
}
val selectionArgs = arrayOf(toTS.toString(), fromTS.toString()) val selectionArgs = arrayOf(toTS.toString(), fromTS.toString())
val cursor = getEventsCursor(selection, selectionArgs) val cursor = getEventsCursor(selection, selectionArgs)
events.addAll(fillEvents(cursor)) events.addAll(fillEvents(cursor))
events.addAll(getRepeatableEventsFor(fromTS, toTS, eventId)) events.addAll(getRepeatableEventsFor(fromTS, toTS, eventId, applyTypeFilter))
events.addAll(getAllDayEvents(fromTS, eventId)) events.addAll(getAllDayEvents(fromTS, eventId, applyTypeFilter))
val filtered = events.distinct().filterNot { it.ignoreEventOccurrences.contains(Formatter.getDayCodeFromTS(it.startTS).toInt()) } as ArrayList<Event> events = events
callback(filtered) .asSequence()
.distinct()
.filterNot { it.ignoreEventOccurrences.contains(Formatter.getDayCodeFromTS(it.startTS).toInt()) }
.toMutableList() as ArrayList<Event>
callback(events)
} }
fun getRepeatableEventsFor(fromTS: Int, toTS: Int, eventId: Int = -1): List<Event> { fun getRepeatableEventsFor(fromTS: Int, toTS: Int, eventId: Int = -1, applyTypeFilter: Boolean = false): List<Event> {
val newEvents = ArrayList<Event>() val newEvents = ArrayList<Event>()
// get repeatable events
var selection = "$COL_REPEAT_INTERVAL != 0 AND $COL_START_TS <= $toTS AND $COL_START_TS != 0" var selection = "$COL_REPEAT_INTERVAL != 0 AND $COL_START_TS <= $toTS AND $COL_START_TS != 0"
if (eventId != -1) if (eventId != -1)
selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId" selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId"
if (applyTypeFilter) {
val displayEventTypes = context.config.displayEventTypes
if (displayEventTypes.isNotEmpty()) {
val types = TextUtils.join(",", displayEventTypes)
selection += " AND $COL_EVENT_TYPE IN ($types)"
}
}
val events = getEvents(selection) val events = getEvents(selection)
val startTimes = SparseIntArray(events.size) val startTimes = SparseIntArray(events.size)
events.forEach { events.forEach {
@@ -792,19 +809,27 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
return events return events
} }
private fun getAllDayEvents(fromTS: Int, eventId: Int = -1): List<Event> { private fun getAllDayEvents(fromTS: Int, eventId: Int = -1, applyTypeFilter: Boolean = false): List<Event> {
val events = ArrayList<Event>() val events = ArrayList<Event>()
var selection = "($COL_FLAGS & $FLAG_ALL_DAY) != 0" var selection = "($COL_FLAGS & $FLAG_ALL_DAY) != 0"
if (eventId != -1) if (eventId != -1)
selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId" selection += " AND $MAIN_TABLE_NAME.$COL_ID = $eventId"
if (applyTypeFilter) {
val displayEventTypes = context.config.displayEventTypes
if (displayEventTypes.isNotEmpty()) {
val types = TextUtils.join(",", displayEventTypes)
selection += " AND $COL_EVENT_TYPE IN ($types)"
}
}
val dayCode = Formatter.getDayCodeFromTS(fromTS) val dayCode = Formatter.getDayCodeFromTS(fromTS)
val cursor = getEventsCursor(selection) val cursor = getEventsCursor(selection)
events.addAll(fillEvents(cursor).filter { dayCode == Formatter.getDayCodeFromTS(it.startTS) }) events.addAll(fillEvents(cursor).filter { dayCode == Formatter.getDayCodeFromTS(it.startTS) })
return events return events
} }
// check if its the proper week, for events repeating by x weeks // check if its the proper week, for events repeating every x weeks
private fun isOnProperWeek(event: Event, startTimes: SparseIntArray): Boolean { private fun isOnProperWeek(event: Event, startTimes: SparseIntArray): Boolean {
val initialWeekOfYear = Formatter.getDateTimeFromTS(startTimes[event.id]).weekOfWeekyear val initialWeekOfYear = Formatter.getDateTimeFromTS(startTimes[event.id]).weekOfWeekyear
val currentWeekOfYear = Formatter.getDateTimeFromTS(event.startTS).weekOfWeekyear val currentWeekOfYear = Formatter.getDateTimeFromTS(event.startTS).weekOfWeekyear
@@ -959,7 +984,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
} }
fun getEventTypesSync(): ArrayList<EventType> { fun getEventTypesSync(): ArrayList<EventType> {
val eventTypes = ArrayList<EventType>(4) val eventTypes = ArrayList<EventType>()
val cols = arrayOf(COL_TYPE_ID, COL_TYPE_TITLE, COL_TYPE_COLOR, COL_TYPE_CALDAV_CALENDAR_ID, COL_TYPE_CALDAV_DISPLAY_NAME, COL_TYPE_CALDAV_EMAIL) val cols = arrayOf(COL_TYPE_ID, COL_TYPE_TITLE, COL_TYPE_COLOR, COL_TYPE_CALDAV_CALENDAR_ID, COL_TYPE_CALDAV_DISPLAY_NAME, COL_TYPE_CALDAV_EMAIL)
var cursor: Cursor? = null var cursor: Cursor? = null
try { try {

View File

@@ -15,7 +15,7 @@ object Formatter {
const val TIME_PATTERN = "HHmmss" const val TIME_PATTERN = "HHmmss"
private const val DAY_PATTERN = "d" private const val DAY_PATTERN = "d"
private const val DAY_OF_WEEK_PATTERN = "EEE" private const val DAY_OF_WEEK_PATTERN = "EEE"
private const val LONGEST_PATTERN = "MMMM dd YYYY (EEEE)" private const val LONGEST_PATTERN = "MMMM d YYYY (EEEE)"
private const val PATTERN_TIME_12 = "hh:mm a" private const val PATTERN_TIME_12 = "hh:mm a"
private const val PATTERN_TIME_24 = "HH:mm" private const val PATTERN_TIME_24 = "HH:mm"
@@ -26,7 +26,7 @@ object Formatter {
val dateTime = getDateTimeFromCode(dayCode) val dateTime = getDateTimeFromCode(dayCode)
val day = dateTime.toString(DAY_PATTERN) val day = dateTime.toString(DAY_PATTERN)
val year = dateTime.toString(YEAR_PATTERN) val year = dateTime.toString(YEAR_PATTERN)
val monthIndex = Integer.valueOf(dayCode.substring(4, 6))!! val monthIndex = Integer.valueOf(dayCode.substring(4, 6))
var month = getMonthName(context, monthIndex) var month = getMonthName(context, monthIndex)
if (shortMonth) if (shortMonth)
month = month.substring(0, Math.min(month.length, 3)) month = month.substring(0, Math.min(month.length, 3))

View File

@@ -140,8 +140,8 @@ class IcsImporter(val activity: SimpleActivity) {
val eventType = eventTypes.firstOrNull { it.id == curEventTypeId } val eventType = eventTypes.firstOrNull { it.id == curEventTypeId }
val source = if (calDAVCalendarId == 0 || eventType?.isSyncedEventType() == false) SOURCE_IMPORTED_ICS else "$CALDAV-$calDAVCalendarId" val source = if (calDAVCalendarId == 0 || eventType?.isSyncedEventType() == false) SOURCE_IMPORTED_ICS else "$CALDAV-$calDAVCalendarId"
val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes.getOrElse(0, { -1 }), val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes.getOrElse(0) { -1 },
curReminderMinutes.getOrElse(1, { -1 }), curReminderMinutes.getOrElse(2, { -1 }), curRepeatInterval, curReminderMinutes.getOrElse(1) { -1 }, curReminderMinutes.getOrElse(2) { -1 }, curRepeatInterval,
curImportId, curFlags, curRepeatLimit, curRepeatRule, curEventTypeId, lastUpdated = curLastModified, curImportId, curFlags, curRepeatLimit, curRepeatRule, curEventTypeId, lastUpdated = curLastModified,
source = source, location = curLocation) source = source, location = curLocation)

View File

@@ -3,7 +3,6 @@ package com.simplemobiletools.calendar.helpers
import android.content.Context import android.content.Context
import com.simplemobiletools.calendar.extensions.config import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.extensions.getFilteredEvents
import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.extensions.seconds
import com.simplemobiletools.calendar.interfaces.MonthlyCalendar import com.simplemobiletools.calendar.interfaces.MonthlyCalendar
import com.simplemobiletools.calendar.models.DayMonthly import com.simplemobiletools.calendar.models.DayMonthly
@@ -12,22 +11,20 @@ import org.joda.time.DateTime
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context) { class MonthlyCalendarImpl(val callback: MonthlyCalendar, val context: Context) {
private val DAYS_CNT = 42 private val DAYS_CNT = 42
private val YEAR_PATTERN = "YYYY" private val YEAR_PATTERN = "YYYY"
private val mToday: String = DateTime().toString(Formatter.DAYCODE_PATTERN) private val mToday: String = DateTime().toString(Formatter.DAYCODE_PATTERN)
private var mEvents = ArrayList<Event>() private var mEvents = ArrayList<Event>()
private var mFilterEventTypes = true
lateinit var mTargetDate: DateTime lateinit var mTargetDate: DateTime
fun updateMonthlyCalendar(targetDate: DateTime, filterEventTypes: Boolean = true) { fun updateMonthlyCalendar(targetDate: DateTime) {
mFilterEventTypes = filterEventTypes
mTargetDate = targetDate mTargetDate = targetDate
val startTS = mTargetDate.minusDays(7).seconds() val startTS = mTargetDate.minusDays(7).seconds()
val endTS = mTargetDate.plusDays(43).seconds() val endTS = mTargetDate.plusDays(43).seconds()
mContext.dbHelper.getEvents(startTS, endTS) { context.dbHelper.getEvents(startTS, endTS, applyTypeFilter = true) {
gotEvents(it) gotEvents(it)
} }
} }
@@ -40,7 +37,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
val days = ArrayList<DayMonthly>(DAYS_CNT) val days = ArrayList<DayMonthly>(DAYS_CNT)
val currMonthDays = mTargetDate.dayOfMonth().maximumValue val currMonthDays = mTargetDate.dayOfMonth().maximumValue
var firstDayIndex = mTargetDate.withDayOfMonth(1).dayOfWeek var firstDayIndex = mTargetDate.withDayOfMonth(1).dayOfWeek
if (!mContext.config.isSundayFirst) if (!context.config.isSundayFirst)
firstDayIndex -= 1 firstDayIndex -= 1
val prevMonthDays = mTargetDate.minusMonths(1).dayOfMonth().maximumValue val prevMonthDays = mTargetDate.minusMonths(1).dayOfMonth().maximumValue
@@ -79,13 +76,13 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
if (markDaysWithEvents) { if (markDaysWithEvents) {
markDaysWithEvents(days) markDaysWithEvents(days)
} else { } else {
mCallback.updateMonthlyCalendar(mContext, monthName, days, false, mTargetDate) callback.updateMonthlyCalendar(context, monthName, days, false, mTargetDate)
} }
} }
// it works more often than not, dont touch // it works more often than not, dont touch
private fun markDaysWithEvents(days: ArrayList<DayMonthly>) { private fun markDaysWithEvents(days: ArrayList<DayMonthly>) {
mContext.dbHelper.getEventTypes { context.dbHelper.getEventTypes {
val dayEvents = HashMap<String, ArrayList<Event>>() val dayEvents = HashMap<String, ArrayList<Event>>()
mEvents.forEach { mEvents.forEach {
val startDateTime = Formatter.getDateTimeFromTS(it.startTS) val startDateTime = Formatter.getDateTimeFromTS(it.startTS)
@@ -110,7 +107,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
days.filter { dayEvents.keys.contains(it.code) }.forEach { days.filter { dayEvents.keys.contains(it.code) }.forEach {
it.dayEvents = dayEvents[it.code]!! it.dayEvents = dayEvents[it.code]!!
} }
mCallback.updateMonthlyCalendar(mContext, monthName, days, true, mTargetDate) callback.updateMonthlyCalendar(context, monthName, days, true, mTargetDate)
} }
} }
@@ -121,7 +118,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
private val monthName: String private val monthName: String
get() { get() {
var month = Formatter.getMonthName(mContext, mTargetDate.monthOfYear) var month = Formatter.getMonthName(context, mTargetDate.monthOfYear)
val targetYear = mTargetDate.toString(YEAR_PATTERN) val targetYear = mTargetDate.toString(YEAR_PATTERN)
if (targetYear != DateTime().toString(YEAR_PATTERN)) { if (targetYear != DateTime().toString(YEAR_PATTERN)) {
month += " $targetYear" month += " $targetYear"
@@ -130,12 +127,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
} }
private fun gotEvents(events: ArrayList<Event>) { private fun gotEvents(events: ArrayList<Event>) {
mEvents = if (mFilterEventTypes) { mEvents = events
mContext.getFilteredEvents(events)
} else {
events
}
getDays(true) getDays(true)
} }
} }

View File

@@ -18,7 +18,7 @@ import org.joda.time.DateTime
class MyWidgetListProvider : AppWidgetProvider() { class MyWidgetListProvider : AppWidgetProvider() {
private val NEW_EVENT = "new_event" private val NEW_EVENT = "new_event"
private val LAUNCH_TODAY = "launch_today" private val LAUNCH_CAL = "launch_cal"
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
performUpdate(context) performUpdate(context)
@@ -44,7 +44,7 @@ class MyWidgetListProvider : AppWidgetProvider() {
views.setImageViewBitmap(R.id.widget_event_new_event, context.resources.getColoredBitmap(R.drawable.ic_plus, textColor)) views.setImageViewBitmap(R.id.widget_event_new_event, context.resources.getColoredBitmap(R.drawable.ic_plus, textColor))
setupIntent(context, views, NEW_EVENT, R.id.widget_event_new_event) setupIntent(context, views, NEW_EVENT, R.id.widget_event_new_event)
setupIntent(context, views, LAUNCH_TODAY, R.id.widget_event_list_today) setupIntent(context, views, LAUNCH_CAL, R.id.widget_event_list_today)
Intent(context, WidgetService::class.java).apply { Intent(context, WidgetService::class.java).apply {
data = Uri.parse(this.toUri(Intent.URI_INTENT_SCHEME)) data = Uri.parse(this.toUri(Intent.URI_INTENT_SCHEME))
@@ -74,14 +74,15 @@ class MyWidgetListProvider : AppWidgetProvider() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
when (intent.action) { when (intent.action) {
NEW_EVENT -> context.launchNewEventIntent() NEW_EVENT -> context.launchNewEventIntent()
LAUNCH_TODAY -> launchDayActivity(context) LAUNCH_CAL -> launchCalenderInDefaultView(context)
else -> super.onReceive(context, intent) else -> super.onReceive(context, intent)
} }
} }
private fun launchDayActivity(context: Context) { private fun launchCalenderInDefaultView(context: Context) {
(context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply { (context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply {
putExtra(DAY_CODE, Formatter.getDayCodeFromDateTime(DateTime())) putExtra(DAY_CODE, Formatter.getDayCodeFromDateTime(DateTime()))
putExtra(VIEW_TO_OPEN, context.config.listWidgetViewToOpen)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(this) context.startActivity(this)
} }

View File

@@ -49,7 +49,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
private fun setupAppOpenIntent(context: Context, views: RemoteViews, id: Int, dayCode: String) { private fun setupAppOpenIntent(context: Context, views: RemoteViews, id: Int, dayCode: String) {
(context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply { (context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply {
putExtra(DAY_CODE, dayCode) putExtra(DAY_CODE, dayCode)
putExtra(OPEN_MONTH, true) putExtra(VIEW_TO_OPEN, MONTHLY_VIEW)
val pendingIntent = PendingIntent.getActivity(context, Integer.parseInt(dayCode.substring(0, 6)), this, 0) val pendingIntent = PendingIntent.getActivity(context, Integer.parseInt(dayCode.substring(0, 6)), this, 0)
views.setOnClickPendingIntent(id, pendingIntent) views.setOnClickPendingIntent(id, pendingIntent)
} }

View File

@@ -7,15 +7,14 @@ import com.simplemobiletools.calendar.models.Event
import com.simplemobiletools.commons.helpers.WEEK_SECONDS import com.simplemobiletools.commons.helpers.WEEK_SECONDS
import java.util.* import java.util.*
class WeeklyCalendarImpl(val mCallback: WeeklyCalendar, val mContext: Context) { class WeeklyCalendarImpl(val callback: WeeklyCalendar, val context: Context) {
var mEvents = ArrayList<Event>() var mEvents = ArrayList<Event>()
fun updateWeeklyCalendar(weekStartTS: Int) { fun updateWeeklyCalendar(weekStartTS: Int) {
val startTS = weekStartTS val endTS = weekStartTS + WEEK_SECONDS
val endTS = startTS + WEEK_SECONDS context.dbHelper.getEvents(weekStartTS, endTS, applyTypeFilter = true) {
mContext.dbHelper.getEvents(startTS, endTS) {
mEvents = it mEvents = it
mCallback.updateWeeklyCalendar(it) callback.updateWeeklyCalendar(it)
} }
} }
} }

View File

@@ -3,7 +3,6 @@ package com.simplemobiletools.calendar.helpers
import android.content.Context import android.content.Context
import android.util.SparseArray import android.util.SparseArray
import com.simplemobiletools.calendar.extensions.dbHelper import com.simplemobiletools.calendar.extensions.dbHelper
import com.simplemobiletools.calendar.extensions.getFilteredEvents
import com.simplemobiletools.calendar.extensions.seconds import com.simplemobiletools.calendar.extensions.seconds
import com.simplemobiletools.calendar.interfaces.YearlyCalendar import com.simplemobiletools.calendar.interfaces.YearlyCalendar
import com.simplemobiletools.calendar.models.DayYearly import com.simplemobiletools.calendar.models.DayYearly
@@ -17,16 +16,15 @@ class YearlyCalendarImpl(val callback: YearlyCalendar, val context: Context, val
val startDateTime = DateTime().withTime(0, 0, 0, 0).withDate(year, 1, 1) val startDateTime = DateTime().withTime(0, 0, 0, 0).withDate(year, 1, 1)
val startTS = startDateTime.seconds() val startTS = startDateTime.seconds()
val endTS = startDateTime.plusYears(1).minusSeconds(1).seconds() val endTS = startDateTime.plusYears(1).minusSeconds(1).seconds()
context.dbHelper.getEvents(startTS, endTS) { context.dbHelper.getEvents(startTS, endTS, applyTypeFilter = true) {
gotEvents(it) gotEvents(it)
} }
} }
private fun gotEvents(events: MutableList<Event>) { private fun gotEvents(events: MutableList<Event>) {
val filtered = context.getFilteredEvents(events)
val arr = SparseArray<ArrayList<DayYearly>>(12) val arr = SparseArray<ArrayList<DayYearly>>(12)
filtered.forEach { events.forEach {
val startDateTime = Formatter.getDateTimeFromTS(it.startTS) val startDateTime = Formatter.getDateTimeFromTS(it.startTS)
markDay(arr, startDateTime, it) markDay(arr, startDateTime, it)
@@ -41,7 +39,7 @@ class YearlyCalendarImpl(val callback: YearlyCalendar, val context: Context, val
} }
} }
} }
callback.updateYearlyCalendar(arr, filtered.hashCode()) callback.updateYearlyCalendar(arr, events.hashCode())
} }
private fun markDay(arr: SparseArray<ArrayList<DayYearly>>, dateTime: DateTime, event: Event) { private fun markDay(arr: SparseArray<ArrayList<DayYearly>>, dateTime: DateTime, event: Event) {

View File

@@ -1,7 +1,7 @@
package com.simplemobiletools.calendar.models package com.simplemobiletools.calendar.models
data class CalDAVCalendar(val id: Int, val displayName: String, val accountName: String, val accountType: String, val ownerName: String, data class CalDAVCalendar(val id: Int, val displayName: String, val accountName: String, val accountType: String, val ownerName: String,
val color: Int, val accessLevel: Int) { var color: Int, val accessLevel: Int) {
fun canWrite() = accessLevel >= 500 fun canWrite() = accessLevel >= 500
fun getFullTitle() = "$displayName ($accountName)" fun getFullTitle() = "$displayName ($accountName)"

View File

@@ -4,9 +4,12 @@ import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import com.simplemobiletools.calendar.extensions.recheckCalDAVCalendars import com.simplemobiletools.calendar.extensions.recheckCalDAVCalendars
import com.simplemobiletools.calendar.extensions.updateWidgets
class CalDAVSyncReceiver : BroadcastReceiver() { class CalDAVSyncReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
context.recheckCalDAVCalendars {} context.recheckCalDAVCalendars {
context.updateWidgets()
}
} }
} }

View File

@@ -32,6 +32,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
private var paint: Paint private var paint: Paint
private var eventTitlePaint: TextPaint private var eventTitlePaint: TextPaint
private var gridPaint: Paint private var gridPaint: Paint
private var config = context.config
private var dayWidth = 0f private var dayWidth = 0f
private var dayHeight = 0f private var dayHeight = 0f
private var primaryColor = 0 private var primaryColor = 0
@@ -54,9 +55,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
init { init {
primaryColor = context.getAdjustedPrimaryColor() primaryColor = context.getAdjustedPrimaryColor()
textColor = context.config.textColor textColor = config.textColor
showWeekNumbers = context.config.showWeekNumbers showWeekNumbers = config.showWeekNumbers
dimPastEvents = context.config.dimPastEvents dimPastEvents = config.dimPastEvents
smallPadding = resources.displayMetrics.density.toInt() smallPadding = resources.displayMetrics.density.toInt()
val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size) val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size)
@@ -86,7 +87,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
fun updateDays(newDays: ArrayList<DayMonthly>) { fun updateDays(newDays: ArrayList<DayMonthly>) {
days = newDays days = newDays
showWeekNumbers = context.config.showWeekNumbers showWeekNumbers = config.showWeekNumbers
horizontalOffset = if (showWeekNumbers) eventTitleHeight * 2 else 0 horizontalOffset = if (showWeekNumbers) eventTitleHeight * 2 else 0
initWeekDayLetters() initWeekDayLetters()
setupCurrentDayOfWeekIndex() setupCurrentDayOfWeekIndex()
@@ -111,7 +112,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
} }
} }
allEvents = allEvents.sortedWith(compareBy({ -it.daysCnt }, { !it.isAllDay }, { it.startTS }, { it.startDayIndex }, { it.title })).toMutableList() as ArrayList<MonthViewEvent> allEvents = allEvents.asSequence().sortedWith(compareBy({ -it.daysCnt }, { !it.isAllDay }, { it.startTS }, { it.startDayIndex }, { it.title }))
.toMutableList() as ArrayList<MonthViewEvent>
} }
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
@@ -119,7 +121,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
dayVerticalOffsets.clear() dayVerticalOffsets.clear()
measureDaySize(canvas) measureDaySize(canvas)
if (context.config.showGrid) { if (config.showGrid) {
drawGrid(canvas) drawGrid(canvas)
} }
@@ -149,7 +151,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
} }
} }
drawEvents(canvas) for (event in allEvents) {
drawEvent(event, canvas)
}
} }
private fun drawGrid(canvas: Canvas) { private fun drawGrid(canvas: Canvas) {
@@ -188,7 +192,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
val weekDays = days.subList(i * 7, i * 7 + 7) val weekDays = days.subList(i * 7, i * 7 + 7)
weekNumberPaint.color = if (weekDays.any { it.isToday }) primaryColor else textColor weekNumberPaint.color = if (weekDays.any { it.isToday }) primaryColor else textColor
// fourth day of the week matters // fourth day of the week determines the week of the year number
val weekOfYear = days.getOrNull(i * 7 + 3)?.weekOfYear ?: 1 val weekOfYear = days.getOrNull(i * 7 + 3)?.weekOfYear ?: 1
val id = "$weekOfYear:" val id = "$weekOfYear:"
val yPos = i * dayHeight + weekDaysLetterHeight val yPos = i * dayHeight + weekDaysLetterHeight
@@ -203,12 +207,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
maxEventsPerDay = availableHeightForEvents / eventTitleHeight maxEventsPerDay = availableHeightForEvents / eventTitleHeight
} }
private fun drawEvents(canvas: Canvas) {
for (event in allEvents) {
drawEvent(event, canvas)
}
}
private fun drawEvent(event: MonthViewEvent, canvas: Canvas) { private fun drawEvent(event: MonthViewEvent, canvas: Canvas) {
val verticalOffset = dayVerticalOffsets[event.startDayIndex] val verticalOffset = dayVerticalOffsets[event.startDayIndex]
val xPos = event.startDayIndex % 7 * dayWidth + horizontalOffset val xPos = event.startDayIndex % 7 * dayWidth + horizontalOffset
@@ -302,8 +300,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
} }
private fun initWeekDayLetters() { private fun initWeekDayLetters() {
dayLetters = context.resources.getStringArray(R.array.week_day_letters).toList() as ArrayList<String> dayLetters = context.resources.getStringArray(R.array.week_day_letters).toMutableList() as ArrayList<String>
if (context.config.isSundayFirst) { if (config.isSundayFirst) {
dayLetters.moveLastItemToFront() dayLetters.moveLastItemToFront()
} }
} }
@@ -315,7 +313,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
} }
currDayOfWeek = DateTime().dayOfWeek currDayOfWeek = DateTime().dayOfWeek
if (context.config.isSundayFirst) { if (config.isSundayFirst) {
currDayOfWeek %= 7 currDayOfWeek %= 7
} else { } else {
currDayOfWeek-- currDayOfWeek--

View File

@@ -15,11 +15,11 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
private var dayWidth = 0f private var dayWidth = 0f
private var dayHeight = 0f private var dayHeight = 0f
private var weekDaysLetterHeight = 0 private var weekDaysLetterHeight = 0
private var horizontalOffset = 0
private var wereViewsAdded = false private var wereViewsAdded = false
private var days = ArrayList<DayMonthly>() private var days = ArrayList<DayMonthly>()
private var inflater: LayoutInflater private var inflater: LayoutInflater
private var monthView: MonthView private var monthView: MonthView
private var horizontalOffset = 0
private var dayClickCallback: ((day: DayMonthly) -> Unit)? = null private var dayClickCallback: ((day: DayMonthly) -> Unit)? = null
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)

View File

@@ -69,9 +69,9 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
super.onDraw(canvas) super.onDraw(canvas)
if (dayWidth == 0f) { if (dayWidth == 0f) {
dayWidth = if (isLandscape) { dayWidth = if (isLandscape) {
(canvas.width / 9).toFloat() width / 9f
} else { } else {
(canvas.width / 7).toFloat() width / 7f
} }
} }

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout <androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/day_coordinator" android:id="@+id/day_coordinator"
@@ -22,4 +22,4 @@
app:backgroundTint="@color/color_primary" app:backgroundTint="@color/color_primary"
app:rippleColor="@color/pressed_item_foreground"/> app:rippleColor="@color/pressed_item_foreground"/>
</android.support.design.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -17,8 +17,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/activity_margin" android:layout_marginLeft="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin"
android:hint="@string/title" android:hint="@string/title"
android:inputType="textCapSentences" android:inputType="textCapSentences"
android:maxLength="180" android:maxLength="180"
@@ -45,15 +45,15 @@
<ImageView <ImageView
android:id="@+id/event_show_on_map" android:id="@+id/event_show_on_map"
style="@style/MyBorderlessBackgroundStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignTop="@+id/event_location"
android:layout_alignBottom="@+id/event_location" android:layout_alignBottom="@+id/event_location"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_alignTop="@+id/event_location"
android:layout_marginEnd="@dimen/activity_margin" android:layout_marginEnd="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin" android:layout_marginRight="@dimen/activity_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:paddingLeft="@dimen/small_margin" android:paddingLeft="@dimen/small_margin"
android:paddingRight="@dimen/small_margin" android:paddingRight="@dimen/small_margin"
android:src="@drawable/ic_place"/> android:src="@drawable/ic_place"/>
@@ -64,8 +64,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_location" android:layout_below="@+id/event_location"
android:layout_marginLeft="@dimen/activity_margin" android:layout_marginLeft="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin"
android:autoLink="all" android:autoLink="all"
android:gravity="top" android:gravity="top"
android:hint="@string/description" android:hint="@string/description"
@@ -80,8 +80,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1px" android:layout_height="1px"
android:layout_below="@+id/event_description" android:layout_below="@+id/event_description"
android:layout_marginBottom="@dimen/normal_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:layout_marginBottom="@dimen/normal_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
@@ -89,11 +89,11 @@
android:id="@+id/event_time_image" android:id="@+id/event_time_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignBottom="@+id/event_all_day"
android:layout_alignTop="@+id/event_all_day"
android:layout_below="@+id/event_description_divider" android:layout_below="@+id/event_description_divider"
android:layout_marginLeft="@dimen/normal_margin" android:layout_alignTop="@+id/event_all_day"
android:layout_alignBottom="@+id/event_all_day"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:layout_marginLeft="@dimen/normal_margin"
android:alpha="0.8" android:alpha="0.8"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_clock"/> android:src="@drawable/ic_clock"/>
@@ -102,17 +102,17 @@
android:id="@+id/event_all_day" android:id="@+id/event_all_day"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_description_divider"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_below="@+id/event_description_divider"
android:layout_marginEnd="@dimen/normal_margin"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginRight="@dimen/normal_margin"
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginEnd="@dimen/normal_margin"
android:layout_marginRight="@dimen/normal_margin"
android:layout_toEndOf="@+id/event_time_image" android:layout_toEndOf="@+id/event_time_image"
android:layout_toRightOf="@+id/event_time_image" android:layout_toRightOf="@+id/event_time_image"
android:paddingBottom="@dimen/normal_margin"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/normal_margin"
android:paddingBottom="@dimen/normal_margin"
android:text="@string/all_day" android:text="@string/all_day"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
app:switchPadding="@dimen/small_margin"/> app:switchPadding="@dimen/small_margin"/>
@@ -121,14 +121,14 @@
android:id="@+id/event_start_date" android:id="@+id/event_start_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignLeft="@+id/event_all_day"
android:layout_alignStart="@+id/event_all_day"
android:layout_below="@+id/event_time_image" android:layout_below="@+id/event_time_image"
android:layout_alignStart="@+id/event_all_day"
android:layout_alignLeft="@+id/event_all_day"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin" android:paddingEnd="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin" android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="January 1 1970"/> tools:text="January 1 1970"/>
@@ -136,9 +136,9 @@
android:id="@+id/event_start_time" android:id="@+id/event_start_time"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_time_image"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_below="@+id/event_time_image"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
@@ -148,14 +148,14 @@
android:id="@+id/event_end_date" android:id="@+id/event_end_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignLeft="@+id/event_all_day"
android:layout_alignStart="@+id/event_all_day"
android:layout_below="@+id/event_start_date" android:layout_below="@+id/event_start_date"
android:layout_alignStart="@+id/event_all_day"
android:layout_alignLeft="@+id/event_all_day"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin" android:paddingEnd="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin" android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="January 1 1970"/> tools:text="January 1 1970"/>
@@ -163,9 +163,9 @@
android:id="@+id/event_end_time" android:id="@+id/event_end_time"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_start_time"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_below="@+id/event_start_time"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
@@ -176,8 +176,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1px" android:layout_height="1px"
android:layout_below="@+id/event_end_date" android:layout_below="@+id/event_end_date"
android:layout_marginBottom="@dimen/medium_margin"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
@@ -185,11 +185,11 @@
android:id="@+id/event_reminder_image" android:id="@+id/event_reminder_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignBottom="@+id/event_reminder_1"
android:layout_alignTop="@+id/event_reminder_1"
android:layout_below="@+id/event_date_time_divider" android:layout_below="@+id/event_date_time_divider"
android:layout_marginLeft="@dimen/normal_margin" android:layout_alignTop="@+id/event_reminder_1"
android:layout_alignBottom="@+id/event_reminder_1"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:layout_marginLeft="@dimen/normal_margin"
android:alpha="0.8" android:alpha="0.8"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_bell"/> android:src="@drawable/ic_bell"/>
@@ -199,26 +199,26 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_date_time_divider" android:layout_below="@+id/event_date_time_divider"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:layout_marginLeft="@dimen/small_margin"
android:layout_toEndOf="@+id/event_reminder_image" android:layout_toEndOf="@+id/event_reminder_image"
android:layout_toRightOf="@+id/event_reminder_image" android:layout_toRightOf="@+id/event_reminder_image"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_reminder_2" android:id="@+id/event_reminder_2"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignLeft="@+id/event_reminder_1"
android:layout_alignStart="@+id/event_reminder_1"
android:layout_below="@+id/event_reminder_1" android:layout_below="@+id/event_reminder_1"
android:layout_alignStart="@+id/event_reminder_1"
android:layout_alignLeft="@+id/event_reminder_1"
android:alpha="0.4" android:alpha="0.4"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/add_another_reminder" android:text="@string/add_another_reminder"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
android:visibility="gone"/> android:visibility="gone"/>
@@ -227,13 +227,13 @@
android:id="@+id/event_reminder_3" android:id="@+id/event_reminder_3"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignLeft="@+id/event_reminder_1"
android:layout_alignStart="@+id/event_reminder_1"
android:layout_below="@+id/event_reminder_2" android:layout_below="@+id/event_reminder_2"
android:layout_alignStart="@+id/event_reminder_1"
android:layout_alignLeft="@+id/event_reminder_1"
android:alpha="0.4" android:alpha="0.4"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/add_another_reminder" android:text="@string/add_another_reminder"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
android:visibility="gone"/> android:visibility="gone"/>
@@ -243,8 +243,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1px" android:layout_height="1px"
android:layout_below="@+id/event_reminder_3" android:layout_below="@+id/event_reminder_3"
android:layout_marginBottom="@dimen/medium_margin"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
@@ -252,11 +252,11 @@
android:id="@+id/event_repetition_image" android:id="@+id/event_repetition_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignBottom="@+id/event_repetition"
android:layout_alignTop="@+id/event_repetition"
android:layout_below="@+id/event_date_time_divider" android:layout_below="@+id/event_date_time_divider"
android:layout_marginLeft="@dimen/normal_margin" android:layout_alignTop="@+id/event_repetition"
android:layout_alignBottom="@+id/event_repetition"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:layout_marginLeft="@dimen/normal_margin"
android:alpha="0.8" android:alpha="0.8"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_repeat"/> android:src="@drawable/ic_repeat"/>
@@ -266,22 +266,22 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_reminder_divider" android:layout_below="@+id/event_reminder_divider"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:layout_marginLeft="@dimen/small_margin"
android:layout_toEndOf="@+id/event_repetition_image" android:layout_toEndOf="@+id/event_repetition_image"
android:layout_toRightOf="@+id/event_repetition_image" android:layout_toRightOf="@+id/event_repetition_image"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/normal_margin"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/normal_margin"
android:paddingBottom="@dimen/normal_margin"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size"/>
<RelativeLayout <RelativeLayout
android:id="@+id/event_repetition_rule_holder" android:id="@+id/event_repetition_rule_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignLeft="@+id/event_repetition"
android:layout_alignStart="@+id/event_repetition"
android:layout_below="@+id/event_repetition" android:layout_below="@+id/event_repetition"
android:layout_alignStart="@+id/event_repetition"
android:layout_alignLeft="@+id/event_repetition"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:visibility="gone"> android:visibility="gone">
@@ -290,8 +290,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clickable="false" android:clickable="false"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/repeat_on" android:text="@string/repeat_on"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size"/>
@@ -314,9 +314,9 @@
android:id="@+id/event_repetition_limit_holder" android:id="@+id/event_repetition_limit_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignLeft="@+id/event_repetition"
android:layout_alignStart="@+id/event_repetition"
android:layout_below="@+id/event_repetition_rule_holder" android:layout_below="@+id/event_repetition_rule_holder"
android:layout_alignStart="@+id/event_repetition"
android:layout_alignLeft="@+id/event_repetition"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:visibility="gone"> android:visibility="gone">
@@ -324,11 +324,11 @@
android:id="@+id/event_repetition_limit_label" android:id="@+id/event_repetition_limit_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/event_repetition_limit"
android:layout_toStartOf="@+id/event_repetition_limit" android:layout_toStartOf="@+id/event_repetition_limit"
android:layout_toLeftOf="@+id/event_repetition_limit"
android:clickable="false" android:clickable="false"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/repeat_till" android:text="@string/repeat_till"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size"/>
@@ -357,11 +357,11 @@
android:id="@+id/event_caldav_calendar_image" android:id="@+id/event_caldav_calendar_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignBottom="@+id/event_caldav_calendar_holder"
android:layout_alignTop="@+id/event_caldav_calendar_holder"
android:layout_below="@+id/event_repetition_divider" android:layout_below="@+id/event_repetition_divider"
android:layout_marginLeft="@dimen/normal_margin" android:layout_alignTop="@+id/event_caldav_calendar_holder"
android:layout_alignBottom="@+id/event_caldav_calendar_holder"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:layout_marginLeft="@dimen/normal_margin"
android:alpha="0.8" android:alpha="0.8"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_calendar" android:src="@drawable/ic_calendar"
@@ -381,12 +381,12 @@
android:id="@+id/event_caldav_calendar_name" android:id="@+id/event_caldav_calendar_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:layout_marginLeft="@dimen/small_margin"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:paddingBottom="@dimen/tiny_margin"
android:paddingTop="@dimen/medium_margin" android:paddingTop="@dimen/medium_margin"
android:paddingBottom="@dimen/tiny_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="My calendar"/> tools:text="My calendar"/>
@@ -395,14 +395,25 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_caldav_calendar_name" android:layout_below="@+id/event_caldav_calendar_name"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:layout_marginLeft="@dimen/small_margin"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:paddingBottom="@dimen/medium_margin" android:paddingBottom="@dimen/medium_margin"
android:textSize="@dimen/meta_text_size" android:textSize="@dimen/meta_text_size"
tools:text="hello@simplemobiletools.com"/> tools:text="hello@simplemobiletools.com"/>
<ImageView
android:id="@+id/event_caldav_calendar_color"
android:layout_width="@dimen/color_sample_size"
android:layout_height="@dimen/color_sample_size"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_marginRight="@dimen/activity_margin"
android:clickable="false"/>
</RelativeLayout> </RelativeLayout>
<ImageView <ImageView
@@ -418,11 +429,11 @@
android:id="@+id/event_type_image" android:id="@+id/event_type_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignBottom="@+id/event_type_holder"
android:layout_alignTop="@+id/event_type_holder"
android:layout_below="@+id/event_caldav_calendar_divider" android:layout_below="@+id/event_caldav_calendar_divider"
android:layout_marginLeft="@dimen/normal_margin" android:layout_alignTop="@+id/event_type_holder"
android:layout_alignBottom="@+id/event_type_holder"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:layout_marginLeft="@dimen/normal_margin"
android:alpha="0.8" android:alpha="0.8"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_color"/> android:src="@drawable/ic_color"/>
@@ -433,6 +444,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_caldav_calendar_divider" android:layout_below="@+id/event_caldav_calendar_divider"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin"
android:layout_toEndOf="@+id/event_type_image" android:layout_toEndOf="@+id/event_type_image"
android:layout_toRightOf="@+id/event_type_image" android:layout_toRightOf="@+id/event_type_image"
android:background="?attr/selectableItemBackground"> android:background="?attr/selectableItemBackground">
@@ -441,12 +453,12 @@
android:id="@+id/event_type" android:id="@+id/event_type"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/small_margin"
android:layout_marginLeft="@dimen/small_margin" android:layout_marginLeft="@dimen/small_margin"
android:layout_marginRight="@dimen/medium_margin" android:layout_marginRight="@dimen/medium_margin"
android:layout_marginStart="@dimen/small_margin"
android:layout_toLeftOf="@+id/event_type_color" android:layout_toLeftOf="@+id/event_type_color"
android:paddingBottom="@dimen/normal_margin"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/normal_margin"
android:paddingBottom="@dimen/normal_margin"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size"/>
<ImageView <ImageView
@@ -467,7 +479,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1px" android:layout_height="1px"
android:layout_below="@+id/event_type_holder" android:layout_below="@+id/event_type_holder"
android:layout_marginTop="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
</RelativeLayout> </RelativeLayout>

View File

@@ -1,15 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout <androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/calendar_coordinator" android:id="@+id/calendar_coordinator"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<FrameLayout <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/fragments_holder" android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fragments_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.simplemobiletools.commons.views.MyFloatingActionButton <com.simplemobiletools.commons.views.MyFloatingActionButton
android:id="@+id/calendar_fab" android:id="@+id/calendar_fab"
@@ -65,4 +72,4 @@
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/> app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/>
</RelativeLayout> </RelativeLayout>
</android.support.design.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -17,18 +17,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_purchase_thank_you" android:id="@+id/settings_purchase_thank_you"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/purchase_simple_thank_you"/> android:text="@string/purchase_simple_thank_you"/>
</RelativeLayout> </RelativeLayout>
@@ -39,18 +39,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_customize_colors_label" android:id="@+id/settings_customize_colors_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/customize_colors"/> android:text="@string/customize_colors"/>
</RelativeLayout> </RelativeLayout>
@@ -61,18 +61,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_manage_event_types_label" android:id="@+id/settings_manage_event_types_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/manage_event_types"/> android:text="@string/manage_event_types"/>
</RelativeLayout> </RelativeLayout>
@@ -83,10 +83,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_english" android:id="@+id/settings_use_english"
@@ -94,8 +94,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/use_english_language"/> android:text="@string/use_english_language"/>
</RelativeLayout> </RelativeLayout>
@@ -106,10 +106,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_hour_format" android:id="@+id/settings_hour_format"
@@ -117,8 +117,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/use_24_hour_time_format"/> android:text="@string/use_24_hour_time_format"/>
</RelativeLayout> </RelativeLayout>
@@ -129,10 +129,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_sunday_first" android:id="@+id/settings_sunday_first"
@@ -140,8 +140,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/sunday_first"/> android:text="@string/sunday_first"/>
</RelativeLayout> </RelativeLayout>
@@ -152,10 +152,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_avoid_whats_new" android:id="@+id/settings_avoid_whats_new"
@@ -163,8 +163,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/avoid_whats_new"/> android:text="@string/avoid_whats_new"/>
</RelativeLayout> </RelativeLayout>
@@ -180,8 +180,8 @@
android:id="@+id/reminders_label" android:id="@+id/reminders_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/event_reminders" android:text="@string/event_reminders"
android:textAllCaps="true" android:textAllCaps="true"
@@ -193,10 +193,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_vibrate" android:id="@+id/settings_vibrate"
@@ -204,8 +204,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/vibrate"/> android:text="@string/vibrate"/>
</RelativeLayout> </RelativeLayout>
@@ -216,10 +216,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_loop_reminders" android:id="@+id/settings_loop_reminders"
@@ -227,8 +227,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/loop_reminders"/> android:text="@string/loop_reminders"/>
</RelativeLayout> </RelativeLayout>
@@ -239,18 +239,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_reminder_sound_label" android:id="@+id/settings_reminder_sound_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_reminder_sound"
android:layout_toStartOf="@+id/settings_reminder_sound" android:layout_toStartOf="@+id/settings_reminder_sound"
android:layout_toLeftOf="@+id/settings_reminder_sound"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/reminder_sound"/> android:text="@string/reminder_sound"/>
@@ -273,18 +273,18 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_reminder_audio_stream_label" android:id="@+id/settings_reminder_audio_stream_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_reminder_audio_stream"
android:layout_toStartOf="@+id/settings_reminder_audio_stream" android:layout_toStartOf="@+id/settings_reminder_audio_stream"
android:layout_toLeftOf="@+id/settings_reminder_audio_stream"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/reminder_stream"/> android:text="@string/reminder_stream"/>
@@ -308,10 +308,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_same_snooze" android:id="@+id/settings_use_same_snooze"
@@ -319,8 +319,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/use_same_snooze"/> android:text="@string/use_same_snooze"/>
</RelativeLayout> </RelativeLayout>
@@ -331,18 +331,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_snooze_time_label" android:id="@+id/settings_snooze_time_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_snooze_time"
android:layout_toStartOf="@+id/settings_snooze_time" android:layout_toStartOf="@+id/settings_snooze_time"
android:layout_toLeftOf="@+id/settings_snooze_time"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/snooze_time"/> android:text="@string/snooze_time"/>
@@ -366,10 +366,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_last_event_reminders" android:id="@+id/settings_use_last_event_reminders"
@@ -377,8 +377,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/use_last_event_reminders"/> android:text="@string/use_last_event_reminders"/>
</RelativeLayout> </RelativeLayout>
@@ -389,18 +389,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_reminder_1_label" android:id="@+id/settings_default_reminder_1_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_default_reminder_1"
android:layout_toStartOf="@+id/settings_default_reminder_1" android:layout_toStartOf="@+id/settings_default_reminder_1"
android:layout_toLeftOf="@+id/settings_default_reminder_1"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/default_reminder_1"/> android:text="@string/default_reminder_1"/>
@@ -424,18 +424,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_reminder_2_label" android:id="@+id/settings_default_reminder_2_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_default_reminder_2"
android:layout_toStartOf="@+id/settings_default_reminder_2" android:layout_toStartOf="@+id/settings_default_reminder_2"
android:layout_toLeftOf="@+id/settings_default_reminder_2"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/default_reminder_2"/> android:text="@string/default_reminder_2"/>
@@ -459,18 +459,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_reminder_3_label" android:id="@+id/settings_default_reminder_3_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_default_reminder_3"
android:layout_toStartOf="@+id/settings_default_reminder_3" android:layout_toStartOf="@+id/settings_default_reminder_3"
android:layout_toLeftOf="@+id/settings_default_reminder_3"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/default_reminder_3"/> android:text="@string/default_reminder_3"/>
@@ -499,8 +499,8 @@
android:id="@+id/caldav_label" android:id="@+id/caldav_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/caldav" android:text="@string/caldav"
android:textAllCaps="true" android:textAllCaps="true"
@@ -512,10 +512,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_caldav_sync" android:id="@+id/settings_caldav_sync"
@@ -523,21 +523,44 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/caldav_sync"/> android:text="@string/caldav_sync"/>
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/settings_caldav_pull_to_refresh_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_caldav_pull_to_refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/enable_pull_to_refresh"/>
</RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_manage_synced_calendars_holder" android:id="@+id/settings_manage_synced_calendars_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin" android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin"
android:visibility="gone"> android:visibility="gone">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
@@ -562,8 +585,8 @@
android:id="@+id/weekly_view_label" android:id="@+id/weekly_view_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/weekly_view" android:text="@string/weekly_view"
android:textAllCaps="true" android:textAllCaps="true"
@@ -575,18 +598,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_start_weekly_at_label" android:id="@+id/settings_start_weekly_at_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_start_weekly_at"
android:layout_toStartOf="@+id/settings_start_weekly_at" android:layout_toStartOf="@+id/settings_start_weekly_at"
android:layout_toLeftOf="@+id/settings_start_weekly_at"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/start_day_at"/> android:text="@string/start_day_at"/>
@@ -609,18 +632,18 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_end_weekly_at_label" android:id="@+id/settings_end_weekly_at_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_end_weekly_at"
android:layout_toStartOf="@+id/settings_end_weekly_at" android:layout_toStartOf="@+id/settings_end_weekly_at"
android:layout_toLeftOf="@+id/settings_end_weekly_at"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/end_day_at"/> android:text="@string/end_day_at"/>
@@ -649,8 +672,8 @@
android:id="@+id/monthly_view_label" android:id="@+id/monthly_view_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/monthly_view" android:text="@string/monthly_view"
android:textAllCaps="true" android:textAllCaps="true"
@@ -662,10 +685,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_week_numbers" android:id="@+id/settings_week_numbers"
@@ -673,8 +696,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/week_numbers"/> android:text="@string/week_numbers"/>
</RelativeLayout> </RelativeLayout>
@@ -684,10 +707,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_show_grid" android:id="@+id/settings_show_grid"
@@ -695,8 +718,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/show_a_grid"/> android:text="@string/show_a_grid"/>
</RelativeLayout> </RelativeLayout>
@@ -712,8 +735,8 @@
android:id="@+id/simple_event_list_label" android:id="@+id/simple_event_list_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/event_lists" android:text="@string/event_lists"
android:textAllCaps="true" android:textAllCaps="true"
@@ -725,10 +748,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_replace_description" android:id="@+id/settings_replace_description"
@@ -736,8 +759,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/replace_description_with_location"/> android:text="@string/replace_description_with_location"/>
</RelativeLayout> </RelativeLayout>
@@ -747,18 +770,18 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_display_past_events_label" android:id="@+id/settings_display_past_events_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_display_past_events"
android:layout_toStartOf="@+id/settings_display_past_events" android:layout_toStartOf="@+id/settings_display_past_events"
android:layout_toLeftOf="@+id/settings_display_past_events"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/display_past_events"/> android:text="@string/display_past_events"/>
@@ -787,8 +810,8 @@
android:id="@+id/widgets_label" android:id="@+id/widgets_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/widgets" android:text="@string/widgets"
android:textAllCaps="true" android:textAllCaps="true"
@@ -799,18 +822,18 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_font_size_label" android:id="@+id/settings_font_size_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_font_size"
android:layout_toStartOf="@+id/settings_font_size" android:layout_toStartOf="@+id/settings_font_size"
android:layout_toLeftOf="@+id/settings_font_size"
android:paddingLeft="@dimen/medium_margin" android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin"
android:text="@string/font_size"/> android:text="@string/font_size"/>
@@ -828,23 +851,57 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/settings_list_widget_view_to_open_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_list_widget_view_to_open_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/settings_list_widget_view_to_open"
android:layout_toLeftOf="@+id/settings_list_widget_view_to_open"
android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin"
android:text="@string/view_to_open_from_widget"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_list_widget_view_to_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginEnd="@dimen/small_margin"
android:layout_marginRight="@dimen/small_margin"
android:background="@null"
android:clickable="false"/>
</RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_customize_widget_colors_holder" android:id="@+id/settings_customize_widget_colors_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_customize_widget_colors_label" android:id="@+id/settings_customize_widget_colors_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/customize_widget_colors"/> android:text="@string/customize_widget_colors"/>
</RelativeLayout> </RelativeLayout>
@@ -860,8 +917,8 @@
android:id="@+id/events_label" android:id="@+id/events_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginStart="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin"
android:layout_marginLeft="@dimen/bigger_margin"
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:text="@string/events" android:text="@string/events"
android:textAllCaps="true" android:textAllCaps="true"
@@ -873,10 +930,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_dim_past_events" android:id="@+id/settings_dim_past_events"
@@ -884,8 +941,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@null" android:background="@null"
android:clickable="false" android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/dim_past_events"/> android:text="@string/dim_past_events"/>
</RelativeLayout> </RelativeLayout>
@@ -895,10 +952,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/normal_margin" android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"
android:paddingRight="@dimen/normal_margin" android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/bigger_margin"> android:paddingBottom="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_delete_all_events" android:id="@+id/settings_delete_all_events"

View File

@@ -12,8 +12,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingLeft="@dimen/activity_margin" android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"> android:paddingRight="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/export_events_folder_label" android:id="@+id/export_events_folder_label"
@@ -26,11 +26,11 @@
android:id="@+id/export_events_folder" android:id="@+id/export_events_folder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_margin"
android:layout_marginLeft="@dimen/activity_margin" android:layout_marginLeft="@dimen/activity_margin"
android:paddingBottom="@dimen/small_margin" android:layout_marginBottom="@dimen/activity_margin"
android:paddingTop="@dimen/small_margin"
android:paddingRight="@dimen/small_margin" android:paddingRight="@dimen/small_margin"
android:paddingTop="@dimen/small_margin"/> android:paddingBottom="@dimen/small_margin"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/export_events_filename_label" android:id="@+id/export_events_filename_label"
@@ -43,18 +43,18 @@
android:id="@+id/export_events_filename" android:id="@+id/export_events_filename"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_margin"
android:layout_marginLeft="@dimen/activity_margin" android:layout_marginLeft="@dimen/activity_margin"
android:paddingRight="@dimen/small_margin" android:layout_marginBottom="@dimen/activity_margin"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/normal_margin"
android:paddingRight="@dimen/small_margin"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox <com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/export_events_checkbox" android:id="@+id/export_events_checkbox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="@dimen/small_margin"
android:paddingTop="@dimen/small_margin" android:paddingTop="@dimen/small_margin"
android:paddingBottom="@dimen/small_margin"
android:text="@string/export_past_events_too"/> android:text="@string/export_past_events_too"/>
<LinearLayout <LinearLayout
@@ -68,8 +68,8 @@
android:id="@+id/export_events_divider" android:id="@+id/export_events_divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1px" android:layout_height="1px"
android:layout_marginBottom="@dimen/medium_margin"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no"/>
@@ -80,7 +80,7 @@
android:text="@string/include_event_types" android:text="@string/include_event_types"
android:textSize="@dimen/smaller_text_size"/> android:textSize="@dimen/smaller_text_size"/>
<android.support.v7.widget.RecyclerView <com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/export_events_types_list" android:id="@+id/export_events_types_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView <com.simplemobiletools.commons.views.MyRecyclerView
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/filter_event_types_list" android:id="@+id/filter_event_types_list"

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_select_event_type_color_scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/dialog_select_event_type_other_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialog_select_event_type_other_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/big_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/select_a_different_caldav_color"
android:textSize="@dimen/normal_text_size"/>
<ImageView
android:id="@+id/dialog_select_event_type_other_divider"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_below="@+id/dialog_select_event_type_other_value"
android:background="@color/divider_grey"
android:importantForAccessibility="no"/>
<RadioGroup
android:id="@+id/dialog_select_event_type_color_radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/dialog_select_event_type_other_divider"
android:paddingLeft="@dimen/activity_margin"
android:paddingTop="@dimen/normal_margin"
android:paddingRight="@dimen/activity_margin"
android:paddingBottom="@dimen/normal_margin"/>
</RelativeLayout>
</ScrollView>

View File

@@ -5,7 +5,7 @@
android:id="@+id/search" android:id="@+id/search"
android:icon="@drawable/ic_search" android:icon="@drawable/ic_search"
android:title="@string/search" android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView" app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom"/> app:showAsAction="collapseActionView|ifRoom"/>
<item <item
android:id="@+id/go_to_today" android:id="@+id/go_to_today"

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Təqvimi dəyişmək alınmadı</string> <string name="editing_calendar_failed">Təqvimi dəyişmək alınmadı</string>
<string name="syncing">Sinxronlaşdırılır…</string> <string name="syncing">Sinxronlaşdırılır…</string>
<string name="synchronization_completed">Sinxronlaşma bitdi</string> <string name="synchronization_completed">Sinxronlaşma bitdi</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">C\'hwitadenn en ur embann an deiziataer</string> <string name="editing_calendar_failed">C\'hwitadenn en ur embann an deiziataer</string>
<string name="syncing">O c\'houbredañ…</string> <string name="syncing">O c\'houbredañ…</string>
<string name="synchronization_completed">Echuet gant ar goubredañ</string> <string name="synchronization_completed">Echuet gant ar goubredañ</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -25,7 +25,7 @@
<string name="end_before_start">Konec události nemůže být dříve než začátek</string> <string name="end_before_start">Konec události nemůže být dříve než začátek</string>
<string name="event_added">Událost úspěšně přidána</string> <string name="event_added">Událost úspěšně přidána</string>
<string name="event_updated">Událost úspěšně změněna</string> <string name="event_updated">Událost úspěšně změněna</string>
<string name="filter_events_by_type">Filtrovat události podle typu</string> <string name="filter_events_by_type">Filtrovat události</string>
<string name="please_fill_location">Vyplňte prosím místo, které se zobrazí na mapě</string> <string name="please_fill_location">Vyplňte prosím místo, které se zobrazí na mapě</string>
<string name="public_event_notification_text">Událost právě nastává</string> <string name="public_event_notification_text">Událost právě nastává</string>
@@ -86,27 +86,27 @@
<string name="birthdays_added">Narozeniny byly úspěšně přidány</string> <string name="birthdays_added">Narozeniny byly úspěšně přidány</string>
<!-- Anniversaries --> <!-- Anniversaries -->
<string name="anniversaries">Anniversaries</string> <string name="anniversaries">Výročí</string>
<string name="add_anniversaries">Add contact anniversaries</string> <string name="add_anniversaries">Přidat výročí</string>
<string name="no_anniversaries">No anniversaries have been found</string> <string name="no_anniversaries">Žádné výročí nebylo nalezeno</string>
<string name="anniversaries_added">Anniversaries added successfully</string> <string name="anniversaries_added">Výročí bylo úspěšně přidáno</string>
<!-- Event Reminders --> <!-- Event Reminders -->
<string name="reminder">Připomenutí</string> <string name="reminder">Připomínka</string>
<string name="before">před</string> <string name="before">před</string>
<string name="add_another_reminder">Přidat další připomenutí</string> <string name="add_another_reminder">Přidat další připomínku</string>
<string name="event_reminders">Event reminders</string> <string name="event_reminders">Připomínky událostí</string>
<!-- Export / Import --> <!-- Export / Import -->
<string name="import_events">Import událostí</string> <string name="import_events">Import událostí</string>
<string name="export_events">Export událostí</string> <string name="export_events">Export událostí</string>
<string name="import_events_from_ics">Importovat kalendář ze souboru .ics</string> <string name="import_events_from_ics">Importovat kalendář ze souboru .ics</string>
<string name="export_events_to_ics">Exportovat kalendář do souboru .ics</string> <string name="export_events_to_ics">Exportovat kalendář do souboru .ics</string>
<string name="default_event_type">Defaultní typ události</string> <string name="default_event_type">Přednastavený typ události</string>
<string name="export_past_events_too">Export i minulých událostí</string> <string name="export_past_events_too">Exportovat i uplynulé události</string>
<string name="include_event_types">Zahrnout typy událostí</string> <string name="include_event_types">Zahrnout typy událostí</string>
<string name="filename_without_ics">Název souboru (bez .ics)</string> <string name="filename_without_ics">Název souboru (bez .ics)</string>
<string name="override_event_types">Override event types in the file</string> <string name="override_event_types">Přepsat typ události v souboru</string>
<!-- Event details --> <!-- Event details -->
<string name="title">Název</string> <string name="title">Název</string>
@@ -141,8 +141,8 @@
<!-- Settings --> <!-- Settings -->
<string name="manage_event_types">Správa typů událostí</string> <string name="manage_event_types">Správa typů událostí</string>
<string name="start_day_at">Počátek dne v</string> <string name="start_day_at">Počátek dne</string>
<string name="end_day_at">Konec dne v</string> <string name="end_day_at">Konec dne</string>
<string name="week_numbers">Zobrazovat číslo týdne</string> <string name="week_numbers">Zobrazovat číslo týdne</string>
<string name="vibrate">Vibrovat</string> <string name="vibrate">Vibrovat</string>
<string name="reminder_sound">Tón oznámení</string> <string name="reminder_sound">Tón oznámení</string>
@@ -155,19 +155,21 @@
<string name="replace_description_with_location">Nahradit popis udalosti lokací</string> <string name="replace_description_with_location">Nahradit popis udalosti lokací</string>
<string name="delete_all_events">Smazat všechny události</string> <string name="delete_all_events">Smazat všechny události</string>
<string name="delete_all_events_confirmation">Opravdu chcete smazat všechny události? Typy událostí a ostatní nastavení zůstanou neporušené.</string> <string name="delete_all_events_confirmation">Opravdu chcete smazat všechny události? Typy událostí a ostatní nastavení zůstanou neporušené.</string>
<string name="show_a_grid">Zobrazit mřížku</string> <string name="show_a_grid">Zobrazovat mřížku</string>
<string name="loop_reminders">Připomínat až do vypnutí</string> <string name="loop_reminders">Připomínat až do vypnutí</string>
<string name="dim_past_events">Smazat minulé události</string> <string name="dim_past_events">Smazat minulé události</string>
<string name="events">Události</string> <string name="events">Události</string>
<string name="reminder_stream">Zvuk upomínky</string> <string name="reminder_stream">Zvuk upomínky</string>
<string name="system_stream">Systémový</string> <string name="system_stream">Systém</string>
<string name="alarm_stream">Budík</string> <string name="alarm_stream">Budík</string>
<string name="notification_stream">Notifikace</string> <string name="notification_stream">Notifikace</string>
<string name="ring_stream">Zvonek</string> <string name="ring_stream">Vyzvánění</string>
<string name="use_last_event_reminders">Use the last events\' reminders as the default for new event</string> <string name="use_last_event_reminders">Použij poslední připomenutou událost jako výchozí pro novou událost</string>
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Výchozí připomenutí 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Výchozí připomenutí 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Výchozí připomenutí 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Editování kalendáře se nezdařilo</string> <string name="editing_calendar_failed">Editování kalendáře se nezdařilo</string>
<string name="syncing">Synchronizuji…</string> <string name="syncing">Synchronizuji…</string>
<string name="synchronization_completed">Synchronizace dokončena</string> <string name="synchronization_completed">Synchronizace dokončena</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->
@@ -202,15 +205,15 @@
<string name="sample_title_5">na kafe</string> <string name="sample_title_5">na kafe</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">How can I remove the holidays imported via the \"Add holidays\" button?</string> <string name="faq_1_title">Jak mohu odstranit svátky importované přes tlačítko \"Přidat svátek\"?</string>
<string name="faq_1_text">Holidays created that way are inserted in a new event type called \"Holidays\". You can go in Settings -> Manage Event Types, <string name="faq_1_text">Svátky vytvořené touto cestou jsou vloženy s novým typem události \"Svátky\". Odstranit jej můžete přes: Nastavení -> Správa typů událostí ->
long press the given event type and delete it by selecting the trashbin.</string> dlouze podržte daný typ události a stisknete tlačítko s ikonou koše pro odstranění.</string>
<string name="faq_2_title">Can I sync my events via Google Calendar, or other service supporting CalDAV?</string> <string name="faq_2_title">Mohu synchronizovat své události přes Google Kalendář nebo přes jinou službu podporující CalDav?</string>
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers. <string name="faq_2_text">Ano, zapnutím \"CalDAV sync\" v nastavení aplikace a vybráním kalendáře se kterým se chcete synchronizovat. Budete ovšem potřebovat nějakou aplikaci třetí strany pro samotné synchronizovaní mezi zařízením a servery.
In case you want to synchronize a Google calendar, their official Calendar app will do the job. For other calendars you will need a third party sync adapter, for example DAVdroid.</string> Pokud chcete synchronizovat Google kalendář, tak oficiální aplikace Google toto zvládne. Pro jiné kalendáře potřebujete synchronizační adaptér třetí strany, například DAVdroid.</string>
<string name="faq_3_title">I see the visual reminders, but hear no audio. What can I do?</string> <string name="faq_3_title">Vizuálně vidím připomínku, ale neslyším žádný zvuk. Co mám dělat?</string>
<string name="faq_3_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings, <string name="faq_3_text">Nejenom zobrazování aktuální připomínky, ale i přehrávání zvuku je dost ovlivněno operačním systémem. Pokud neslyšíte žádný zvuk, zkuste jít do nastavení aplikace,
pressing the \"Audio stream used by reminders\" option and changing it to a different value. If it still won\'t work, check your sound settings, if the particular stream isn\'t muted.</string> vyberte: \"Zvuk upomínky\" a změňte na něco jiného. Pokud zvuk stále nefunguje, zkontrolujte zda není zvuk vypnut v nastavení vašeho systému.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Påmindelse 1</string> <string name="default_reminder_1">Påmindelse 1</string>
<string name="default_reminder_2">Påmindelse 2</string> <string name="default_reminder_2">Påmindelse 2</string>
<string name="default_reminder_3">Påmindelse 3</string> <string name="default_reminder_3">Påmindelse 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Redigering af kalenderen mislykkedes</string> <string name="editing_calendar_failed">Redigering af kalenderen mislykkedes</string>
<string name="syncing">Synkroniserer…</string> <string name="syncing">Synkroniserer…</string>
<string name="synchronization_completed">Synkronisering gennemført</string> <string name="synchronization_completed">Synkronisering gennemført</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Standarderinnerung 1</string> <string name="default_reminder_1">Standarderinnerung 1</string>
<string name="default_reminder_2">Standarderinnerung 2</string> <string name="default_reminder_2">Standarderinnerung 2</string>
<string name="default_reminder_3">Standarderinnerung 3</string> <string name="default_reminder_3">Standarderinnerung 3</string>
<string name="view_to_open_from_widget">Standardansicht</string>
<string name="last_view">Letzte Ansicht</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Ändern des Kalenders fehlgeschlagen</string> <string name="editing_calendar_failed">Ändern des Kalenders fehlgeschlagen</string>
<string name="syncing">Wird synchronisiert…</string> <string name="syncing">Wird synchronisiert…</string>
<string name="synchronization_completed">Synchronisation erfolgreich</string> <string name="synchronization_completed">Synchronisation erfolgreich</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Η επεξεργασία του ημερολογίου απέτυχε</string> <string name="editing_calendar_failed">Η επεξεργασία του ημερολογίου απέτυχε</string>
<string name="syncing">Συγχρονισμός…</string> <string name="syncing">Συγχρονισμός…</string>
<string name="synchronization_completed">Ο συγχρονισμός ολοκληρώθηκε</string> <string name="synchronization_completed">Ο συγχρονισμός ολοκληρώθηκε</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Edición de calendario fallida</string> <string name="editing_calendar_failed">Edición de calendario fallida</string>
<string name="syncing">Sincronizando…</string> <string name="syncing">Sincronizando…</string>
<string name="synchronization_completed">Sincronización completa</string> <string name="synchronization_completed">Sincronización completa</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Édition du calendrier échouée</string> <string name="editing_calendar_failed">Édition du calendrier échouée</string>
<string name="syncing">Synchronisation…</string> <string name="syncing">Synchronisation…</string>
<string name="synchronization_completed">Synchronisation terminée</string> <string name="synchronization_completed">Synchronisation terminée</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Fallou a edición do calendario</string> <string name="editing_calendar_failed">Fallou a edición do calendario</string>
<string name="syncing">Sincronizando…</string> <string name="syncing">Sincronizando…</string>
<string name="synchronization_completed">Sincronización completa</string> <string name="synchronization_completed">Sincronización completa</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -169,6 +169,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -181,6 +183,7 @@
<string name="editing_calendar_failed">Editing calendar failed</string> <string name="editing_calendar_failed">Editing calendar failed</string>
<string name="syncing">Syncing…</string> <string name="syncing">Syncing…</string>
<string name="synchronization_completed">Sync completed</string> <string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Uređivanje kalendara nije uspjelo</string> <string name="editing_calendar_failed">Uređivanje kalendara nije uspjelo</string>
<string name="syncing">Sinkronizacija…</string> <string name="syncing">Sinkronizacija…</string>
<string name="synchronization_completed">Sinkronizacija završena</string> <string name="synchronization_completed">Sinkronizacija završena</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Editing calendar failed</string> <string name="editing_calendar_failed">Editing calendar failed</string>
<string name="syncing">Syncing…</string> <string name="syncing">Syncing…</string>
<string name="synchronization_completed">Sync completed</string> <string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -19,15 +19,15 @@
<string name="event">Evento</string> <string name="event">Evento</string>
<string name="edit_event">Modifica evento</string> <string name="edit_event">Modifica evento</string>
<string name="new_event">Nuovo evento</string> <string name="new_event">Nuovo evento</string>
<string name="create_new_event">Create a new event</string> <string name="create_new_event">Crea un nuovo evento</string>
<string name="duplicate_event">Duplicate event</string> <string name="duplicate_event">Duplica evento</string>
<string name="title_empty">Il titolo non può essere vuoto</string> <string name="title_empty">Il titolo non può essere vuoto</string>
<string name="end_before_start">L\'evento non può terminare prima del suo inizio</string> <string name="end_before_start">L\'evento non può terminare prima del suo ianizio</string>
<string name="event_added">Evento aggiunto correttamente</string> <string name="event_added">Evento aggiunto correttamente</string>
<string name="event_updated">Evento aggiornato correttamente</string> <string name="event_updated">Evento aggiornato correttamente</string>
<string name="filter_events_by_type">Filtra eventi per tipologia</string> <string name="filter_events_by_type">Filtra eventi per tipologia</string>
<string name="please_fill_location">Please fill in a location to be shown on a map</string> <string name="please_fill_location">Riempire la posizione per essere mostrata su una mappa</string>
<string name="public_event_notification_text">An event is upcoming</string> <string name="public_event_notification_text">Un evento è imminente</string>
<!-- Event Repetition --> <!-- Event Repetition -->
<string name="repetition">Ripeti</string> <string name="repetition">Ripeti</string>
@@ -44,24 +44,24 @@
<string name="event_is_repeatable">L\'evento è ripetibile</string> <string name="event_is_repeatable">L\'evento è ripetibile</string>
<string name="selection_contains_repetition">La selezione contiene eventi ripetuti</string> <string name="selection_contains_repetition">La selezione contiene eventi ripetuti</string>
<string name="delete_one_only">Elimina solamente l\'occorenza selezionata</string> <string name="delete_one_only">Elimina solamente l\'occorenza selezionata</string>
<string name="delete_future_occurrences">Delete this and all future occurrences</string> <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="delete_all_occurrences">Elimina tutte le occorrenze</string>
<string name="update_one_only">Aggiorna solamente l\'occorenza selezionata</string> <string name="update_one_only">Aggiorna solamente l\'occorenza selezionata</string>
<string name="update_all_occurrences">Aggiorna tutte le occorenze</string> <string name="update_all_occurrences">Aggiorna tutte le occorenze</string>
<string name="repeat_till_date">Ripeti fino a una data</string> <string name="repeat_till_date">Ripeti fino a una data</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string> <string name="stop_repeating_after_x">Smetti di ripetere dopo x occorrenze</string>
<string name="repeat_forever">Ripeti per sempre</string> <string name="repeat_forever">Ripeti per sempre</string>
<string name="times">volte</string> <string name="times">volte</string>
<string name="repeat">Ripeti</string> <string name="repeat">Ripeti</string>
<string name="repeat_on">Repeat on</string> <string name="repeat_on">Ripeti</string>
<string name="every_day">Ogni giorno</string> <string name="every_day">Ogni giorno</string>
<string name="selected_days">On selected days</string> <string name="selected_days">On selected days</string>
<string name="the_same_day">Lo stesso giorno</string> <string name="the_same_day">Lo stesso giorno</string>
<string name="the_last_day">L\'ultimo giorno</string> <string name="the_last_day">L\'ultimo giorno</string>
<string name="repeat_on_the_same_day_monthly">Ripeti lo stesso giorno ogni mese </string> <string name="repeat_on_the_same_day_monthly">Ripeti lo stesso giorno ogni mese </string>
<string name="repeat_on_the_last_day_monthly">Repeat on the last day of the month</string> <string name="repeat_on_the_last_day_monthly">Ripeti l\'ultimo giorno del mese</string>
<string name="repeat_on_the_same_day_yearly">Repeat on the same day every year</string> <string name="repeat_on_the_same_day_yearly">Ripeti lo stesso giorno ogni anno</string>
<string name="repeat_every_m">Repeat every</string> <string name="repeat_every_m">Ripeti ogni</string>
<string name="every_m">Tutti</string> <string name="every_m">Tutti</string>
<string name="first_m">primo</string> <string name="first_m">primo</string>
<string name="second_m">secondo</string> <string name="second_m">secondo</string>
@@ -106,13 +106,13 @@
<string name="export_past_events_too">Esporta anche eventi passati</string> <string name="export_past_events_too">Esporta anche eventi passati</string>
<string name="include_event_types">Includi tipi evento</string> <string name="include_event_types">Includi tipi evento</string>
<string name="filename_without_ics">Nome file (senza .ics)</string> <string name="filename_without_ics">Nome file (senza .ics)</string>
<string name="override_event_types">Override event types in the file</string> <string name="override_event_types">Sovrascrivi i tipi di eventi nel file</string>
<!-- Event details --> <!-- Event details -->
<string name="title">Titolo</string> <string name="title">Titolo</string>
<string name="location">Posizione</string> <string name="location">Posizione</string>
<string name="description">Descrizione</string> <string name="description">Descrizione</string>
<string name="all_day">All-day</string> <string name="all_day">Tutto il giorno</string>
<!-- Weekly view --> <!-- Weekly view -->
<string name="week">Settimana</string> <string name="week">Settimana</string>
@@ -126,8 +126,8 @@
<string name="regular_event">Evento regolare</string> <string name="regular_event">Evento regolare</string>
<string name="cannot_delete_default_type">Il tipo di evento predefinito non può essere cancellato</string> <string name="cannot_delete_default_type">Il tipo di evento predefinito non può essere cancellato</string>
<string name="select_event_type">Seleziona un tipo di evento</string> <string name="select_event_type">Seleziona un tipo di evento</string>
<string name="move_events_into_default">Move affected events into the default event type</string> <string name="move_events_into_default">Muovi gli eventi segnati con il tipo di eventi predefinito</string>
<string name="remove_affected_events">Permanently remove affected events</string> <string name="remove_affected_events">Rimuovi in maniera permanente gli eventi segnati</string>
<string name="unsync_caldav_calendar">Per rimuovere un calendario CalDAV devi desincronizzarlo</string> <string name="unsync_caldav_calendar">Per rimuovere un calendario CalDAV devi desincronizzarlo</string>
<!-- Holidays --> <!-- Holidays -->
@@ -141,92 +141,95 @@
<!-- Settings --> <!-- Settings -->
<string name="manage_event_types">Gestisci tipi evento</string> <string name="manage_event_types">Gestisci tipi evento</string>
<string name="start_day_at">Start day at</string> <string name="start_day_at">Il giorno inizia alle</string>
<string name="end_day_at">End day at</string> <string name="end_day_at">Il giorno finisce alle</string>
<string name="week_numbers">Mostra numero settimane</string> <string name="week_numbers">Mostra numero settimane</string>
<string name="vibrate">Vibrate on reminder notification</string> <string name="vibrate">Vibra per le notifiche di promemoria</string>
<string name="reminder_sound">Suoneria promemoria</string> <string name="reminder_sound">Suoneria promemoria</string>
<string name="no_ringtone_picker">No app capable of setting ringtone found</string> <string name="no_ringtone_picker">Non è stata trovata nessuna applicazione per impostare la suoneria</string>
<string name="no_ringtone_selected">None</string> <string name="no_ringtone_selected">Nessuna</string>
<string name="day_end_before_start">Il giorno non può finire prima che cominci</string> <string name="day_end_before_start">Il giorno non può finire prima che cominci</string>
<string name="caldav_sync">CalDAV sync</string> <string name="caldav_sync">Sincronizzazione CalDAV</string>
<string name="event_lists">Event lists</string> <string name="event_lists">Liste degli eventi</string>
<string name="display_past_events">Mostra eventi passati</string> <string name="display_past_events">Mostra eventi passati</string>
<string name="replace_description_with_location">Sostituisci la descrizione con la posizione</string> <string name="replace_description_with_location">Sostituisci la descrizione con la posizione</string>
<string name="delete_all_events">Cancella tutti gli eventi</string> <string name="delete_all_events">Cancella tutti gli eventi</string>
<string name="delete_all_events_confirmation">Vuoi cancellare tutti gli eventi? Questo lascerà i tuoi tipi evento e le altre impostazioni invariate.</string> <string name="delete_all_events_confirmation">Vuoi cancellare tutti gli eventi? Questo lascerà i tuoi tipi evento e le altre impostazioni invariate.</string>
<string name="show_a_grid">Show a grid</string> <string name="show_a_grid">Mostra una griglia</string>
<string name="loop_reminders">Loop reminders until dismissed</string> <string name="loop_reminders">Manda in loop i promemoria finchè non vengono rimossi</string>
<string name="dim_past_events">Dim past events</string> <string name="dim_past_events">Rimuovi gli eventi passati</string>
<string name="events">Events</string> <string name="events">Eventi</string>
<string name="reminder_stream">Audio stream used by reminders</string> <string name="reminder_stream">Canale audio utilizzato per i promomemoria</string>
<string name="system_stream">System</string> <string name="system_stream">Sistema</string>
<string name="alarm_stream">Alarm</string> <string name="alarm_stream">Allarme</string>
<string name="notification_stream">Notification</string> <string name="notification_stream">Notitica</string>
<string name="ring_stream">Ring</string> <string name="ring_stream">Squillo</string>
<string name="use_last_event_reminders">Use the last events\' reminders as the default for new event</string> <string name="use_last_event_reminders">Utilizza l\'ultimo promemoria come predefinito per nuovi eventi</string>
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Promemoria predefinito 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Promemoria predefinito 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Promemoria predefinito 3</string>
<string name="view_to_open_from_widget">Vista da aprire dalla lista degli eventi del widget</string>
<string name="last_view">Ultima vista</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
<string name="select_caldav_calendars">Select calendars to sync</string> <string name="select_caldav_calendars">Seleziona un calendario da sincronizzare</string>
<string name="manage_synced_calendars">Manage synced calendars</string> <string name="manage_synced_calendars">Gestisci i calendari sincronizzati</string>
<string name="store_locally_only">Store locally only</string> <string name="store_locally_only">Salva solamente in locale</string>
<string name="refresh_caldav_calendars">Refresh CalDAV calendars</string> <string name="refresh_caldav_calendars">Aggiorna i calendari CalDAV</string>
<string name="refreshing">Refreshing</string> <string name="refreshing">Aggiornamento in corso</string>
<string name="refreshing_complete">Refreshing complete</string> <string name="refreshing_complete">Aggiornamento completato</string>
<string name="editing_calendar_failed">Editing calendar failed</string> <string name="editing_calendar_failed">Impossibile modificare il calendario</string>
<string name="syncing">Syncing</string> <string name="syncing">Sincronizzazione in corso</string>
<string name="synchronization_completed">Sync completed</string> <string name="synchronization_completed">Sincronizzazione completata</string>
<string name="select_a_different_caldav_color">Seleziona un colore differente (potrebbe essere applicato solamente in locale)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->
<string name="monday_alt">Monday</string> <string name="monday_alt">Lunedì</string>
<string name="tuesday_alt">Tuesday</string> <string name="tuesday_alt">Martedì</string>
<string name="wednesday_alt">Wednesday</string> <string name="wednesday_alt">Mercoledì</string>
<string name="thursday_alt">Thursday</string> <string name="thursday_alt">Giovedì</string>
<string name="friday_alt">Friday</string> <string name="friday_alt">Venerdì</string>
<string name="saturday_alt">Saturday</string> <string name="saturday_alt">Sabato</string>
<string name="sunday_alt">Sunday</string> <string name="sunday_alt">Domenica</string>
<!-- List widget config example events --> <!-- List widget config example events -->
<string name="sample_title_1">Workout</string> <string name="sample_title_1">Allenamento</string>
<string name="sample_description_1">Leg day</string> <string name="sample_description_1">Gambe</string>
<string name="sample_title_2">Meeting with John</string> <string name="sample_title_2">Incontro con Giovanni</string>
<string name="sample_description_2">In Rockstone garden</string> <string name="sample_description_2">Nel giardino di Milano</string>
<string name="sample_title_3">Library</string> <string name="sample_title_3">Liberia</string>
<string name="sample_title_4">Lunch with Mary</string> <string name="sample_title_4">Pranzo con Maria</string>
<string name="sample_description_4">In the Plaza</string> <string name="sample_description_4">Nel ristorante Magione</string>
<string name="sample_title_5">Coffee time</string> <string name="sample_title_5">Pausa caffè</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">How can I remove the holidays imported via the \"Add holidays\" button?</string> <string name="faq_1_title">Come posso rimuovere i le festività importate tramite il pulsante \"Aggiungi festività\"?</string>
<string name="faq_1_text">Holidays created that way are inserted in a new event type called \"Holidays\". You can go in Settings -> Manage Event Types, <string name="faq_1_text">Le festività create in questo modo sono inseriti in eventi di tipo \"Festività\". Puoi andare in Impostazioni -> Gestisci tipi di eventi,
long press the given event type and delete it by selecting the trashbin.</string> tenere premuto sul tipo desiderato ed eliminaro selezionando il cestino.</string>
<string name="faq_2_title">Can I sync my events via Google Calendar, or other service supporting CalDAV?</string> <string name="faq_2_title">Posso sincronizzare i miei eventi tramite Google Calendar, od altri servizi che supportano CalDAV?</string>
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers. <string name="faq_2_text">Sì, basta commutare l\'opzione \"Sincronizzazione CalDAV\" nelle impostazioni dell\'applicazione e selezionare i calendari da sincronizzare. Comunque è necessaria un\'applicazione di terze parti per gestire la sincronizzazione tra dispositivo e server.
In case you want to synchronize a Google calendar, their official Calendar app will do the job. For other calendars you will need a third party sync adapter, for example DAVdroid.</string> In caso si voglia sincronizzare con Google Calendar, la loro applicazione ufficiale effettua questo lavoro. Per altri calendari è necessario un adattatore di terze parti, per esempio DAVdroid.</string>
<string name="faq_3_title">I see the visual reminders, but hear no audio. What can I do?</string> <string name="faq_3_title">Visualizzo i promemoria, ma non sento l\'audio. Cosa posso fare?</string>
<string name="faq_3_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings, <string name="faq_3_text">Non solo visualizzare l\'attuale promemoria, ma anche riprodurre l\'audio è un lavoro prettamente del sistema. Se non senti alcun suono, prova ad andare nelle impostazioni dell\'applicazione,
pressing the \"Audio stream used by reminders\" option and changing it to a different value. If it still won\'t work, check your sound settings, if the particular stream isn\'t muted.</string> premi l\'opzione \"Canale audio utilizzato per il promemoria\" e cambia il canale. Se ancora non funziona, controlla le tue impostazioni dell\'audio, in particolare se il canale è stato mutato.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">A simple calendar with events, customizable widget and no ads.</string> <string name="app_short_description">Un semplice calendario con eventi, widget personalizzabili e senza pubblicità.</string>
<string name="app_long_description"> <string name="app_long_description">
A simple calendar with optional CalDAV synchronization. You can easily create recurring events and setup reminders, it can also display week numbers. Un semplice calendario con l\'opzione di sincronizzazione CalDAV. Puoi facilmente creare eventi ricorrenti ed impostare promemoria, mostra anche il numero di settimana.
Contains a monthly view and an event list widget where you can customize the color of the text, as well as the alpha and the color of the background. Contiene una vista mensile ed un widget con la lista degli eventi, con il colore del testo personalizzabile, come per la trasparenza ed il colore dello sfondo,
Contains no ads or unnecessary permissions. It is fully opensource, provides customizable colors. Non contiene pubblicità o permessi non necessari. È completamente opensource, fornisce anche colori personalizzabili.
The Storage permission is needed only for exporting or importing events from .ics files. Il permesso di archiviazione è necesario solamente per esportare od importare venti da file .ics.
The Contacts permission is used only at importing contact birthdays and anniversaries. Il permesso dei contatti è usato solamente per importare i compleanni e gli anniversari.
This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com Questa applicazione è solamente una di una serie. Puoi trovare le altre su https://www.simplemobiletools.com
</string> </string>
<!-- <!--

View File

@@ -169,6 +169,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -181,6 +183,7 @@
<string name="editing_calendar_failed">Editing calendar failed</string> <string name="editing_calendar_failed">Editing calendar failed</string>
<string name="syncing">Syncing…</string> <string name="syncing">Syncing…</string>
<string name="synchronization_completed">Sync completed</string> <string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">カレンダーを編集できませんでした</string> <string name="editing_calendar_failed">カレンダーを編集できませんでした</string>
<string name="syncing">同期中…</string> <string name="syncing">同期中…</string>
<string name="synchronization_completed">同期が完了しました</string> <string name="synchronization_completed">同期が完了しました</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">변경 실패</string> <string name="editing_calendar_failed">변경 실패</string>
<string name="syncing">동기화중…</string> <string name="syncing">동기화중…</string>
<string name="synchronization_completed">동기화 완료</string> <string name="synchronization_completed">동기화 완료</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Kalendoriaus redagavimas nepavyko</string> <string name="editing_calendar_failed">Kalendoriaus redagavimas nepavyko</string>
<string name="syncing">Sinchronizuojama…</string> <string name="syncing">Sinchronizuojama…</string>
<string name="synchronization_completed">Sinchronizacija baigta</string> <string name="synchronization_completed">Sinchronizacija baigta</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Redigering av kalender feilet</string> <string name="editing_calendar_failed">Redigering av kalender feilet</string>
<string name="syncing">Synkroniserer…</string> <string name="syncing">Synkroniserer…</string>
<string name="synchronization_completed">Synkronisering fullført</string> <string name="synchronization_completed">Synkronisering fullført</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Standaardherinnering 1</string> <string name="default_reminder_1">Standaardherinnering 1</string>
<string name="default_reminder_2">Standaardherinnering 2</string> <string name="default_reminder_2">Standaardherinnering 2</string>
<string name="default_reminder_3">Standaardherinnering 3</string> <string name="default_reminder_3">Standaardherinnering 3</string>
<string name="view_to_open_from_widget">Weergave bij openen vanuit widget met afsprakenlijst</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Agenda bijwerken mislukt</string> <string name="editing_calendar_failed">Agenda bijwerken mislukt</string>
<string name="syncing">Synchroniseren…</string> <string name="syncing">Synchroniseren…</string>
<string name="synchronization_completed">Synchroniseren voltooid</string> <string name="synchronization_completed">Synchroniseren voltooid</string>
<string name="select_a_different_caldav_color">Kies een andere kleur (mogelijk alleen voor dit apparaat)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Redigering av kalender feilet</string> <string name="editing_calendar_failed">Redigering av kalender feilet</string>
<string name="syncing">Synkroniserer…</string> <string name="syncing">Synkroniserer…</string>
<string name="synchronization_completed">Synkronisering fullført</string> <string name="synchronization_completed">Synkronisering fullført</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Edytowanie kalendarza nie powiodło się</string> <string name="editing_calendar_failed">Edytowanie kalendarza nie powiodło się</string>
<string name="syncing">Synchronizowanie…</string> <string name="syncing">Synchronizowanie…</string>
<string name="synchronization_completed">Synchronizacja zakończona</string> <string name="synchronization_completed">Synchronizacja zakończona</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">A edição do calendário falhou</string> <string name="editing_calendar_failed">A edição do calendário falhou</string>
<string name="syncing">Sincronizando…</string> <string name="syncing">Sincronizando…</string>
<string name="synchronization_completed">Sincronização completa</string> <string name="synchronization_completed">Sincronização completa</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -164,10 +164,12 @@
<string name="alarm_stream">Alarme</string> <string name="alarm_stream">Alarme</string>
<string name="notification_stream">Notificação</string> <string name="notification_stream">Notificação</string>
<string name="ring_stream">Toque</string> <string name="ring_stream">Toque</string>
<string name="use_last_event_reminders">Use the last events\' reminders as the default for new event</string> <string name="use_last_event_reminders">Utilize os lembretes dos últimos eventos como definição para os novos eventos</string>
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Lembrete 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Lembrete 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Lembrete 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Falha ao editar o calendário</string> <string name="editing_calendar_failed">Falha ao editar o calendário</string>
<string name="syncing">A sincronizar…</string> <string name="syncing">A sincronizar…</string>
<string name="synchronization_completed">Sincronização terminada</string> <string name="synchronization_completed">Sincronização terminada</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Напоминание по умолчанию 1</string> <string name="default_reminder_1">Напоминание по умолчанию 1</string>
<string name="default_reminder_2">Напоминание по умолчанию 2</string> <string name="default_reminder_2">Напоминание по умолчанию 2</string>
<string name="default_reminder_3">Напоминание по умолчанию 3</string> <string name="default_reminder_3">Напоминание по умолчанию 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Не удалось изменить календарь</string> <string name="editing_calendar_failed">Не удалось изменить календарь</string>
<string name="syncing">Синхронизация…</string> <string name="syncing">Синхронизация…</string>
<string name="synchronization_completed">Синхронизация завершена</string> <string name="synchronization_completed">Синхронизация завершена</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Predvolená pripomienka 1</string> <string name="default_reminder_1">Predvolená pripomienka 1</string>
<string name="default_reminder_2">Predvolená pripomienka 2</string> <string name="default_reminder_2">Predvolená pripomienka 2</string>
<string name="default_reminder_3">Predvolená pripomienka 3</string> <string name="default_reminder_3">Predvolená pripomienka 3</string>
<string name="view_to_open_from_widget">Otvoriť pohľad po kliknutí na widget so zoznamom udalostí</string>
<string name="last_view">Posledný pohľad</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Úprava kalendára zlyhala</string> <string name="editing_calendar_failed">Úprava kalendára zlyhala</string>
<string name="syncing">Synchronizujem…</string> <string name="syncing">Synchronizujem…</string>
<string name="synchronization_completed">Synchronizácia ukončená</string> <string name="synchronization_completed">Synchronizácia ukončená</string>
<string name="select_a_different_caldav_color">Zvoliť inú farbu (možno bude aplikovaná iba lokálne)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Det gick inte att redigera kalendern</string> <string name="editing_calendar_failed">Det gick inte att redigera kalendern</string>
<string name="syncing">Synkroniserar…</string> <string name="syncing">Synkroniserar…</string>
<string name="synchronization_completed">Synkroniseringen är klar</string> <string name="synchronization_completed">Synkroniseringen är klar</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Takvim düzenlenme başarısız</string> <string name="editing_calendar_failed">Takvim düzenlenme başarısız</string>
<string name="syncing">Senkronize ediliyor…</string> <string name="syncing">Senkronize ediliyor…</string>
<string name="synchronization_completed">Senkronizasyon tamamlandı</string> <string name="synchronization_completed">Senkronizasyon tamamlandı</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ArrowStyle">
<item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
</style>
<style name="MonthStyle">
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
</resources>

View File

@@ -49,7 +49,7 @@
<string name="update_one_only">只更新選擇的事件</string> <string name="update_one_only">只更新選擇的事件</string>
<string name="update_all_occurrences">更新全部事件</string> <string name="update_all_occurrences">更新全部事件</string>
<string name="repeat_till_date">重複直到某日</string> <string name="repeat_till_date">重複直到某日</string>
<string name="stop_repeating_after_x">Stop repeating after x occurrences</string> <string name="stop_repeating_after_x">經過x次後停止重複</string>
<string name="repeat_forever">永遠重複</string> <string name="repeat_forever">永遠重複</string>
<string name="times"></string> <string name="times"></string>
<string name="repeat">重複</string> <string name="repeat">重複</string>
@@ -164,10 +164,12 @@
<string name="alarm_stream">鬧鐘</string> <string name="alarm_stream">鬧鐘</string>
<string name="notification_stream">通知</string> <string name="notification_stream">通知</string>
<string name="ring_stream">鈴聲</string> <string name="ring_stream">鈴聲</string>
<string name="use_last_event_reminders">Use the last events\' reminders as the default for new event</string> <string name="use_last_event_reminders">使用最後活動的提醒作為新活動的預設</string>
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">預設提醒1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">預設提醒2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">預設提醒3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">編輯行事曆失敗</string> <string name="editing_calendar_failed">編輯行事曆失敗</string>
<string name="syncing">同步中…</string> <string name="syncing">同步中…</string>
<string name="synchronization_completed">同步完成</string> <string name="synchronization_completed">同步完成</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

View File

@@ -168,6 +168,8 @@
<string name="default_reminder_1">Default reminder 1</string> <string name="default_reminder_1">Default reminder 1</string>
<string name="default_reminder_2">Default reminder 2</string> <string name="default_reminder_2">Default reminder 2</string>
<string name="default_reminder_3">Default reminder 3</string> <string name="default_reminder_3">Default reminder 3</string>
<string name="view_to_open_from_widget">View to open from the event list widget</string>
<string name="last_view">Last view</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -180,6 +182,7 @@
<string name="editing_calendar_failed">Editing calendar failed</string> <string name="editing_calendar_failed">Editing calendar failed</string>
<string name="syncing">Syncing…</string> <string name="syncing">Syncing…</string>
<string name="synchronization_completed">Sync completed</string> <string name="synchronization_completed">Sync completed</string>
<string name="select_a_different_caldav_color">Select a different color (might be applied locally only)</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->

Some files were not shown because too many files have changed in this diff Show More