mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-02-17 04:10:45 +01:00
commit
217abe8d3a
15
.gitignore
vendored
15
.gitignore
vendored
@ -1,21 +1,6 @@
|
||||
# Temp files
|
||||
*~
|
||||
*.bak
|
||||
*.backup
|
||||
\#*
|
||||
.\#*
|
||||
*\#
|
||||
*.swp
|
||||
*.swap
|
||||
*.sav
|
||||
*.save
|
||||
*.autosav
|
||||
*.autosave
|
||||
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/gradle.properties
|
||||
/.idea/
|
||||
.DS_Store
|
||||
/build
|
||||
|
27
CHANGELOG.md
27
CHANGELOG.md
@ -1,6 +1,33 @@
|
||||
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)*
|
||||
----------------------------
|
||||
|
||||
|
@ -4,14 +4,14 @@ apply plugin: 'kotlin-android-extensions'
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion "28.0.2"
|
||||
buildToolsVersion "28.0.3"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.simplemobiletools.calendar"
|
||||
minSdkVersion 16
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 129
|
||||
versionName "4.2.1"
|
||||
versionCode 133
|
||||
versionName "5.1.1"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "calendar")
|
||||
}
|
||||
@ -42,10 +42,10 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:4.7.17'
|
||||
implementation 'com.simplemobiletools:commons:5.2.6'
|
||||
implementation 'joda-time:joda-time:2.9.9'
|
||||
implementation 'com.facebook.stetho:stetho:1.5.0'
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
implementation 'androidx.multidex:multidex:2.0.0'
|
||||
}
|
||||
|
||||
Properties props = new Properties()
|
||||
|
@ -184,7 +184,7 @@
|
||||
</receiver>
|
||||
|
||||
<provider
|
||||
android:name="android.support.v4.content.FileProvider"
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.simplemobiletools.calendar
|
||||
|
||||
import android.support.multidex.MultiDexApplication
|
||||
import androidx.multidex.MultiDexApplication
|
||||
import com.facebook.stetho.Stetho
|
||||
import com.simplemobiletools.commons.extensions.checkUseEnglish
|
||||
|
||||
|
@ -1,16 +1,15 @@
|
||||
package com.simplemobiletools.calendar.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.DatePickerDialog
|
||||
import android.app.TimePickerDialog
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.NotificationManagerCompat
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.WindowManager
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.dialogs.*
|
||||
import com.simplemobiletools.calendar.extensions.*
|
||||
@ -94,9 +93,11 @@ class EventActivity : SimpleActivity() {
|
||||
cancelNotification(mEvent.id)
|
||||
} else {
|
||||
mEvent = Event()
|
||||
mReminder1Minutes = if (config.usePreviousEventReminders) config.lastEventReminderMinutes else config.defaultReminder1
|
||||
mReminder2Minutes = if (config.usePreviousEventReminders) config.lastEventReminderMinutes2 else config.defaultReminder2
|
||||
mReminder3Minutes = if (config.usePreviousEventReminders) config.lastEventReminderMinutes3 else config.defaultReminder3
|
||||
config.apply {
|
||||
mReminder1Minutes = if (usePreviousEventReminders) lastEventReminderMinutes1 else defaultReminder1
|
||||
mReminder2Minutes = if (usePreviousEventReminders) lastEventReminderMinutes2 else defaultReminder2
|
||||
mReminder3Minutes = if (usePreviousEventReminders) lastEventReminderMinutes3 else defaultReminder3
|
||||
}
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
setupNewEvent()
|
||||
@ -121,7 +122,7 @@ class EventActivity : SimpleActivity() {
|
||||
event_repetition_limit_holder.setOnClickListener { showRepetitionTypePicker() }
|
||||
|
||||
event_reminder_1.setOnClickListener {
|
||||
handleNotificationAvailability() {
|
||||
handleNotificationAvailability {
|
||||
if (config.wasAlarmWarningShown) {
|
||||
showReminder1Dialog()
|
||||
} else {
|
||||
@ -243,6 +244,7 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun setupNewEvent() {
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
|
||||
event_title.requestFocus()
|
||||
updateActionBarTitle(getString(R.string.new_event))
|
||||
val isLastCaldavCalendarOK = config.caldavSync && config.getSyncedCalendarIdsAsList().contains(config.lastUsedCaldavCalendarId.toString())
|
||||
mEventCalendarId = if (isLastCaldavCalendarOK) config.lastUsedCaldavCalendarId else STORED_LOCALLY_ONLY
|
||||
@ -620,6 +622,7 @@ class EventActivity : SimpleActivity() {
|
||||
event_type_holder.beVisibleIf(currentCalendar == null)
|
||||
event_caldav_calendar_divider.beVisibleIf(currentCalendar == null)
|
||||
event_caldav_calendar_email.beGoneIf(currentCalendar == null)
|
||||
event_caldav_calendar_color.beGoneIf(currentCalendar == null)
|
||||
|
||||
if (currentCalendar == null) {
|
||||
mEventCalendarId = STORED_LOCALLY_ONLY
|
||||
@ -634,6 +637,10 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
} else {
|
||||
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 {
|
||||
text = currentCalendar.displayName
|
||||
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) {
|
||||
mEventTypeId
|
||||
} 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
|
||||
SOURCE_SIMPLE_CALENDAR
|
||||
} else {
|
||||
@ -716,7 +723,7 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
config.apply {
|
||||
if (usePreviousEventReminders) {
|
||||
lastEventReminderMinutes = reminder1
|
||||
lastEventReminderMinutes1 = reminder1
|
||||
lastEventReminderMinutes2 = reminder2
|
||||
lastEventReminderMinutes3 = reminder3
|
||||
}
|
||||
@ -856,17 +863,13 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun setupStartDate() {
|
||||
hideKeyboard()
|
||||
config.backgroundColor.getContrastColor()
|
||||
val datepicker = DatePickerDialog(this, mDialogTheme, startDateSetListener, mEventStartDateTime.year, mEventStartDateTime.monthOfYear - 1,
|
||||
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()
|
||||
}
|
||||
|
||||
@ -875,16 +878,12 @@ class EventActivity : SimpleActivity() {
|
||||
TimePickerDialog(this, mDialogTheme, startTimeSetListener, mEventStartDateTime.hourOfDay, mEventStartDateTime.minuteOfHour, config.use24HourFormat).show()
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun setupEndDate() {
|
||||
hideKeyboard()
|
||||
val datepicker = DatePickerDialog(this, mDialogTheme, endDateSetListener, mEventEndDateTime.year, mEventEndDateTime.monthOfYear - 1,
|
||||
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()
|
||||
}
|
||||
|
||||
|
@ -11,13 +11,14 @@ import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.ContactsContract
|
||||
import android.support.v4.view.MenuItemCompat
|
||||
import android.support.v7.widget.SearchView
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.view.MenuItemCompat
|
||||
import com.simplemobiletools.calendar.BuildConfig
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.R.id.*
|
||||
import com.simplemobiletools.calendar.adapters.EventListAdapter
|
||||
import com.simplemobiletools.calendar.dialogs.ExportEventsDialog
|
||||
import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog
|
||||
@ -70,9 +71,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
setContentView(R.layout.activity_main)
|
||||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
|
||||
// just get a reference to the database to make sure it is created properly
|
||||
dbHelper
|
||||
|
||||
checkWhatsNewDialog()
|
||||
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW)
|
||||
calendar_fab.setOnClickListener {
|
||||
@ -92,6 +90,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
refreshCalDAVCalendars(false)
|
||||
}
|
||||
|
||||
swipe_refresh_layout.setOnRefreshListener {
|
||||
refreshCalDAVCalendars(false)
|
||||
}
|
||||
|
||||
if (!checkViewIntents()) {
|
||||
return
|
||||
}
|
||||
@ -129,6 +131,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
search_placeholder_2.setTextColor(config.textColor)
|
||||
calendar_fab.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor)
|
||||
search_holder.background = ColorDrawable(config.backgroundColor)
|
||||
checkSwipeRefreshAvailability()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@ -183,6 +186,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
swipe_refresh_layout.isRefreshing = false
|
||||
checkSwipeRefreshAvailability()
|
||||
if (currentFragments.size > 1) {
|
||||
removeTopFragment()
|
||||
} else {
|
||||
@ -251,12 +256,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
|
||||
private fun checkOpenIntents(): Boolean {
|
||||
val dayCodeToOpen = intent.getStringExtra(DAY_CODE) ?: ""
|
||||
val openMonth = intent.getBooleanExtra(OPEN_MONTH, false)
|
||||
intent.removeExtra(OPEN_MONTH)
|
||||
val viewToOpen = intent.getIntExtra(VIEW_TO_OPEN, DAILY_VIEW)
|
||||
intent.removeExtra(VIEW_TO_OPEN)
|
||||
intent.removeExtra(DAY_CODE)
|
||||
if (dayCodeToOpen.isNotEmpty()) {
|
||||
calendar_fab.beVisible()
|
||||
config.storedView = if (openMonth) MONTHLY_VIEW else DAILY_VIEW
|
||||
if (viewToOpen != LAST_VIEW) {
|
||||
config.storedView = viewToOpen
|
||||
}
|
||||
updateViewPager(dayCodeToOpen)
|
||||
return true
|
||||
}
|
||||
@ -337,6 +344,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private fun showFilterDialog() {
|
||||
FilterEventTypesDialog(this) {
|
||||
refreshViewPager()
|
||||
updateWidgets()
|
||||
}
|
||||
}
|
||||
|
||||
@ -368,6 +376,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
if (showCalDAVRefreshToast) {
|
||||
toast(R.string.refreshing_complete)
|
||||
}
|
||||
runOnUiThread {
|
||||
swipe_refresh_layout.isRefreshing = false
|
||||
}
|
||||
}
|
||||
}, CALDAV_SYNC_DELAY)
|
||||
}
|
||||
@ -527,6 +538,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private fun updateView(view: Int) {
|
||||
calendar_fab.beVisibleIf(view != YEARLY_VIEW)
|
||||
config.storedView = view
|
||||
checkSwipeRefreshAvailability()
|
||||
updateViewPager()
|
||||
if (goToTodayButton?.isVisible == true) {
|
||||
shouldGoToTodayBeVisible = false
|
||||
@ -578,8 +590,11 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
val bundle = Bundle()
|
||||
bundle.putString(DAY_CODE, Formatter.getDayCodeFromDateTime(dateTime))
|
||||
fragment.arguments = bundle
|
||||
supportFragmentManager.beginTransaction().add(R.id.fragments_holder, fragment).commitNow()
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
try {
|
||||
supportFragmentManager.beginTransaction().add(R.id.fragments_holder, fragment).commitNow()
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun getThisWeekDateTime(): String {
|
||||
@ -612,7 +627,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
|
||||
private fun refreshViewPager() {
|
||||
runOnUiThread {
|
||||
if (!isActivityDestroyed()) {
|
||||
if (!isDestroyed) {
|
||||
currentFragments.last().refreshEvents()
|
||||
}
|
||||
}
|
||||
@ -695,7 +710,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
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(
|
||||
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
|
||||
override fun refreshItems() {
|
||||
searchQueryChanged(mLatestSearchQuery)
|
||||
|
@ -5,7 +5,7 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import com.simplemobiletools.calendar.R
|
||||
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.interfaces.DeleteEventTypesListener
|
||||
import com.simplemobiletools.calendar.models.EventType
|
||||
@ -24,7 +24,7 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener {
|
||||
}
|
||||
|
||||
private fun showEventTypeDialog(eventType: EventType? = null) {
|
||||
UpdateEventTypeDialog(this, eventType?.copy()) {
|
||||
EditEventTypeDialog(this, eventType?.copy()) {
|
||||
getEventTypes()
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,10 @@ import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import com.simplemobiletools.calendar.R
|
||||
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.models.EventType
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
@ -35,7 +38,6 @@ class SettingsActivity : SimpleActivity() {
|
||||
setContentView(R.layout.activity_settings)
|
||||
res = resources
|
||||
mStoredPrimaryColor = config.primaryColor
|
||||
setupCaldavSync()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@ -60,6 +62,9 @@ class SettingsActivity : SimpleActivity() {
|
||||
setupUseSameSnooze()
|
||||
setupLoopReminders()
|
||||
setupSnoozeTime()
|
||||
setupCaldavSync()
|
||||
setupManageSyncedCalendars()
|
||||
setupPullToRefresh()
|
||||
setupDefaultReminder()
|
||||
setupDefaultReminder1()
|
||||
setupDefaultReminder2()
|
||||
@ -67,6 +72,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
setupDisplayPastEvents()
|
||||
setupFontSize()
|
||||
setupCustomizeWidgetColors()
|
||||
setupViewToOpenFromListWidget()
|
||||
setupDimEvents()
|
||||
updateTextColors(settings_holder)
|
||||
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.setOnClickListener {
|
||||
showCalendarPicker()
|
||||
@ -173,6 +190,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
settings_caldav_sync.isChecked = false
|
||||
config.caldavSync = false
|
||||
settings_manage_synced_calendars_holder.beGone()
|
||||
settings_caldav_pull_to_refresh_holder.beGone()
|
||||
config.getSyncedCalendarIdsAsList().forEach {
|
||||
CalDAVHandler(applicationContext).deleteCalDAVCalendarEvents(it.toLong())
|
||||
}
|
||||
@ -190,6 +208,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
settings_manage_synced_calendars_holder.beVisibleIf(newCalendarIds.isNotEmpty())
|
||||
settings_caldav_pull_to_refresh_holder.beVisibleIf(newCalendarIds.isNotEmpty())
|
||||
settings_caldav_sync.isChecked = newCalendarIds.isNotEmpty()
|
||||
config.caldavSync = newCalendarIds.isNotEmpty()
|
||||
if (settings_caldav_sync.isChecked) {
|
||||
@ -481,7 +500,6 @@ class SettingsActivity : SimpleActivity() {
|
||||
config.fontSize = it as Int
|
||||
settings_font_size.text = getFontSizeText()
|
||||
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() {
|
||||
settings_dim_past_events.isChecked = config.dimPastEvents
|
||||
settings_dim_past_events_holder.setOnClickListener {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.simplemobiletools.calendar.activities
|
||||
|
||||
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.dbHelper
|
||||
import com.simplemobiletools.calendar.extensions.rescheduleReminder
|
||||
|
@ -1,10 +1,7 @@
|
||||
package com.simplemobiletools.calendar.activities
|
||||
|
||||
import android.content.Intent
|
||||
import com.simplemobiletools.calendar.helpers.DAY_CODE
|
||||
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.calendar.helpers.*
|
||||
import com.simplemobiletools.commons.activities.BaseSplashActivity
|
||||
|
||||
class SplashActivity : BaseSplashActivity() {
|
||||
@ -12,7 +9,7 @@ class SplashActivity : BaseSplashActivity() {
|
||||
when {
|
||||
intent.extras?.containsKey(DAY_CODE) == true -> Intent(this, MainActivity::class.java).apply {
|
||||
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)
|
||||
}
|
||||
intent.extras?.containsKey(EVENT_ID) == true -> Intent(this, MainActivity::class.java).apply {
|
||||
|
@ -89,7 +89,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
config_bg_seekbar.progress = (mBgAlpha * 100).toInt()
|
||||
updateBgColor()
|
||||
|
||||
MonthlyCalendarImpl(this, applicationContext).updateMonthlyCalendar(DateTime().withDayOfMonth(1), false)
|
||||
MonthlyCalendarImpl(this, applicationContext).updateMonthlyCalendar(DateTime().withDayOfMonth(1))
|
||||
}
|
||||
|
||||
private fun saveConfig() {
|
||||
|
@ -38,12 +38,6 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
|
||||
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) {
|
||||
when (id) {
|
||||
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 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 {
|
||||
val layoutId = when (viewType) {
|
||||
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) {
|
||||
val event = events[position]
|
||||
val view = holder.bindView(event, true, true) { itemView, layoutPosition ->
|
||||
holder.bindView(event, true, true) { itemView, layoutPosition ->
|
||||
setupView(itemView, event)
|
||||
}
|
||||
bindViewHolder(holder, position, view)
|
||||
bindViewHolder(holder)
|
||||
}
|
||||
|
||||
override fun getItemCount() = events.size
|
||||
@ -76,8 +74,18 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
val event = events[position]
|
||||
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
|
||||
} 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 {
|
||||
ITEM_EVENT
|
||||
}
|
||||
@ -85,6 +93,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
|
||||
private fun setupView(view: View, event: Event) {
|
||||
view.apply {
|
||||
event_item_frame.isSelected = selectedKeys.contains(event.id)
|
||||
event_item_title.text = event.title
|
||||
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)
|
||||
@ -95,7 +104,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
val startCode = Formatter.getDayCodeFromTS(event.startTS)
|
||||
val endCode = Formatter.getDayCodeFromTS(event.endTS)
|
||||
|
||||
event_item_end.apply {
|
||||
event_item_end?.apply {
|
||||
text = Formatter.getTimeFromTS(context, event.endTS)
|
||||
if (startCode != endCode) {
|
||||
if (event.getIsAllDay()) {
|
||||
@ -121,35 +130,24 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
}
|
||||
}
|
||||
|
||||
private fun shareEvents() {
|
||||
val eventIds = ArrayList<Int>(selectedPositions.size)
|
||||
selectedPositions.forEach {
|
||||
eventIds.add(events[it].id)
|
||||
}
|
||||
activity.shareEvents(eventIds.distinct())
|
||||
}
|
||||
private fun shareEvents() = activity.shareEvents(selectedKeys.distinct())
|
||||
|
||||
private fun askConfirmDelete() {
|
||||
val eventIds = ArrayList<Int>(selectedPositions.size)
|
||||
val timestamps = ArrayList<Int>(selectedPositions.size)
|
||||
val eventsToDelete = ArrayList<Event>(selectedPositions.size)
|
||||
selectedPositions.forEach {
|
||||
val event = events[it]
|
||||
eventsToDelete.add(event)
|
||||
eventIds.add(event.id)
|
||||
timestamps.add(event.startTS)
|
||||
}
|
||||
val eventIds = selectedKeys.toMutableList()
|
||||
val eventsToDelete = events.filter { selectedKeys.contains(it.id) }
|
||||
val timestamps = eventsToDelete.map { it.startTS }
|
||||
val positions = getSelectedItemPositions()
|
||||
|
||||
val hasRepeatableEvent = eventsToDelete.any { it.repeatInterval > 0 }
|
||||
DeleteEventDialog(activity, eventIds, hasRepeatableEvent) {
|
||||
DeleteEventDialog(activity, eventIds, hasRepeatableEvent) { it ->
|
||||
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)
|
||||
|
||||
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)
|
||||
removeSelectedItems()
|
||||
removeSelectedItems(positions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
|
||||
private var currentItemsHash = listItems.hashCode()
|
||||
|
||||
init {
|
||||
setupDragListener(true)
|
||||
var firstNonPastSectionIndex = -1
|
||||
listItems.forEachIndexed { index, listItem ->
|
||||
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 prepareItemSelection(viewHolder: ViewHolder) {}
|
||||
|
||||
override fun markViewHolderSelection(select: Boolean, viewHolder: ViewHolder?) {
|
||||
viewHolder?.itemView?.event_item_frame?.isSelected = select
|
||||
}
|
||||
|
||||
override fun actionItemPressed(id: Int) {
|
||||
when (id) {
|
||||
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 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 {
|
||||
val layoutId = when (viewType) {
|
||||
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) {
|
||||
val listItem = listItems[position]
|
||||
val view = holder.bindView(listItem, true, allowLongClick) { itemView, layoutPosition ->
|
||||
holder.bindView(listItem, true, allowLongClick) { itemView, layoutPosition ->
|
||||
if (listItem is ListSection) {
|
||||
setupListSection(itemView, listItem, position)
|
||||
} else if (listItem is ListEvent) {
|
||||
setupListEvent(itemView, listItem)
|
||||
}
|
||||
}
|
||||
bindViewHolder(holder, position, view)
|
||||
bindViewHolder(holder)
|
||||
}
|
||||
|
||||
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) {
|
||||
val event = listItems[position] as ListEvent
|
||||
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
|
||||
} 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 {
|
||||
ITEM_EVENT
|
||||
}
|
||||
@ -127,6 +136,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
|
||||
|
||||
private fun setupListEvent(view: View, listEvent: ListEvent) {
|
||||
view.apply {
|
||||
event_item_frame.isSelected = selectedKeys.contains(listEvent.id)
|
||||
event_item_title.text = listEvent.title
|
||||
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)
|
||||
@ -185,30 +195,12 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
|
||||
}
|
||||
}
|
||||
|
||||
private fun shareEvents() {
|
||||
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 shareEvents() = activity.shareEvents(selectedKeys.distinct())
|
||||
|
||||
private fun askConfirmDelete() {
|
||||
val eventIds = ArrayList<Int>(selectedPositions.size)
|
||||
val timestamps = ArrayList<Int>(selectedPositions.size)
|
||||
val eventsToDelete = ArrayList<ListEvent>(selectedPositions.size)
|
||||
|
||||
selectedPositions.sortedDescending().forEach {
|
||||
val item = listItems[it]
|
||||
if (item is ListEvent) {
|
||||
eventIds.add(item.id)
|
||||
timestamps.add(item.startTS)
|
||||
eventsToDelete.add(item)
|
||||
}
|
||||
}
|
||||
val eventIds = selectedKeys.toMutableList()
|
||||
val eventsToDelete = listItems.filter { selectedKeys.contains((it as? ListEvent)?.id) } as List<ListEvent>
|
||||
val timestamps = eventsToDelete.mapNotNull { (it as? ListEvent)?.startTS }
|
||||
|
||||
val hasRepeatableEvent = eventsToDelete.any { it.isRepeatable }
|
||||
DeleteEventDialog(activity, eventIds, hasRepeatableEvent) {
|
||||
|
@ -41,8 +41,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
|
||||
|
||||
if (type == ITEM_EVENT) {
|
||||
val event = events[position] as ListEvent
|
||||
val detailField = if (replaceDescription) event.location else event.description
|
||||
val layout = if (event.startTS == event.endTS && detailField.isEmpty()) R.layout.event_list_item_widget_simple else R.layout.event_list_item_widget
|
||||
val layout = getItemViewLayout(event)
|
||||
remoteView = RemoteViews(context.packageName, layout)
|
||||
setupListEvent(remoteView, event)
|
||||
} else {
|
||||
@ -53,6 +52,25 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
|
||||
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) {
|
||||
var curTextColor = textColor
|
||||
remoteView.apply {
|
||||
@ -116,6 +134,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
|
||||
|
||||
Intent().apply {
|
||||
putExtra(DAY_CODE, item.code)
|
||||
putExtra(VIEW_TO_OPEN, context.config.listWidgetViewToOpen)
|
||||
setOnClickFillInIntent(event_section_title, this)
|
||||
}
|
||||
}
|
||||
@ -137,7 +156,7 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
|
||||
mediumFontSize = context.config.getFontSize()
|
||||
val fromTS = DateTime().seconds() - context.config.displayPastEvents * 60
|
||||
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 replaceDescription = context.config.replaceDescription
|
||||
val sorted = it.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { if (replaceDescription) it.location else it.description }))
|
||||
|
@ -1,87 +1,69 @@
|
||||
package com.simplemobiletools.calendar.adapters
|
||||
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.util.SparseArray
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.models.EventType
|
||||
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
|
||||
import com.simplemobiletools.commons.extensions.setFillWithStroke
|
||||
import com.simplemobiletools.commons.interfaces.MyAdapterListener
|
||||
import kotlinx.android.synthetic.main.filter_event_type_view.view.*
|
||||
import java.util.*
|
||||
|
||||
class FilterEventTypeAdapter(val activity: SimpleActivity, val eventTypes: List<EventType>, val displayEventTypes: Set<String>) :
|
||||
RecyclerView.Adapter<FilterEventTypeAdapter.ViewHolder>() {
|
||||
private val itemViews = SparseArray<View>()
|
||||
private val selectedPositions = HashSet<Int>()
|
||||
private val selectedKeys = HashSet<Int>()
|
||||
|
||||
init {
|
||||
eventTypes.forEachIndexed { index, eventType ->
|
||||
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 (itemViews[pos] != null) {
|
||||
selectedPositions.add(pos)
|
||||
}
|
||||
selectedKeys.add(eventType.id)
|
||||
} else {
|
||||
selectedPositions.remove(pos)
|
||||
selectedKeys.remove(eventType.id)
|
||||
}
|
||||
|
||||
itemViews[pos]?.filter_event_type_checkbox?.isChecked = select
|
||||
notifyItemChanged(pos)
|
||||
}
|
||||
|
||||
private val adapterListener = object : MyAdapterListener {
|
||||
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
|
||||
}
|
||||
fun getSelectedItemsSet() = selectedKeys.asSequence().map { it.toString() }.toHashSet()
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
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) {
|
||||
val eventType = eventTypes[position]
|
||||
itemViews.put(position, holder.bindView(eventType))
|
||||
toggleItemSelection(selectedPositions.contains(position), position)
|
||||
holder.bindView(eventType)
|
||||
}
|
||||
|
||||
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 {
|
||||
val isSelected = selectedKeys.contains(eventType.id)
|
||||
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.text = eventType.getDisplayTitle()
|
||||
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
|
||||
}
|
||||
|
||||
private fun viewClicked(select: Boolean) {
|
||||
adapterListener.toggleItemSelectionAdapter(select, adapterPosition)
|
||||
private fun viewClicked(select: Boolean, eventType: EventType) {
|
||||
toggleItemSelection(select, eventType, adapterPosition)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,12 +31,6 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
|
||||
|
||||
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) {
|
||||
when (id) {
|
||||
R.id.cab_delete -> askConfirmDelete()
|
||||
@ -47,20 +41,29 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
|
||||
|
||||
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 onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val eventType = eventTypes[position]
|
||||
val view = holder.bindView(eventType, true, true) { itemView, layoutPosition ->
|
||||
holder.bindView(eventType, true, true) { itemView, layoutPosition ->
|
||||
setupView(itemView, eventType)
|
||||
}
|
||||
bindViewHolder(holder, position, view)
|
||||
bindViewHolder(holder)
|
||||
}
|
||||
|
||||
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) {
|
||||
view.apply {
|
||||
event_item_frame.isSelected = selectedKeys.contains(eventType.id)
|
||||
event_type_title.text = eventType.getDisplayTitle()
|
||||
event_type_color.setFillWithStroke(eventType.color, activity.config.backgroundColor)
|
||||
event_type_title.setTextColor(textColor)
|
||||
@ -68,8 +71,7 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
|
||||
}
|
||||
|
||||
private fun askConfirmDelete() {
|
||||
val eventTypes = ArrayList<EventType>(selectedPositions.size)
|
||||
selectedPositions.forEach { eventTypes.add(this.eventTypes[it]) }
|
||||
val eventTypes = eventTypes.filter { selectedKeys.contains(it.id) } as ArrayList<EventType>
|
||||
|
||||
if (activity.dbHelper.doEventTypesContainEvent(eventTypes)) {
|
||||
val MOVE_EVENTS = 0
|
||||
@ -90,25 +92,22 @@ class ManageEventTypesAdapter(activity: SimpleActivity, val eventTypes: ArrayLis
|
||||
}
|
||||
|
||||
private fun deleteEventTypes(deleteEvents: Boolean) {
|
||||
val eventTypesToDelete = ArrayList<EventType>(selectedPositions.size)
|
||||
val eventTypesToDelete = getSelectedItems()
|
||||
|
||||
for (pos in selectedPositions) {
|
||||
if (eventTypes[pos].id == DBHelper.REGULAR_EVENT_TYPE_ID) {
|
||||
for (key in selectedKeys) {
|
||||
val type = getItemWithKey(key) ?: continue
|
||||
if (type.id == DBHelper.REGULAR_EVENT_TYPE_ID) {
|
||||
activity.toast(R.string.cannot_delete_default_type)
|
||||
selectedPositions.remove(pos)
|
||||
toggleItemSelection(false, pos)
|
||||
eventTypesToDelete.remove(type)
|
||||
toggleItemSelection(false, getItemKeyPosition(type.id))
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
selectedPositions.sortedDescending().forEach {
|
||||
val eventType = eventTypes[it]
|
||||
eventTypesToDelete.add(eventType)
|
||||
}
|
||||
|
||||
eventTypes.removeAll(eventTypesToDelete)
|
||||
if (listener?.deleteEventTypes(eventTypesToDelete, deleteEvents) == true) {
|
||||
removeSelectedItems()
|
||||
val positions = getSelectedItemPositions()
|
||||
eventTypes.removeAll(eventTypesToDelete)
|
||||
removeSelectedItems(positions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.simplemobiletools.calendar.adapters
|
||||
|
||||
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 androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import com.simplemobiletools.calendar.fragments.DayFragment
|
||||
import com.simplemobiletools.calendar.helpers.DAY_CODE
|
||||
import com.simplemobiletools.calendar.interfaces.NavigationListener
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.simplemobiletools.calendar.adapters
|
||||
|
||||
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 androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import com.simplemobiletools.calendar.fragments.MonthFragment
|
||||
import com.simplemobiletools.calendar.helpers.DAY_CODE
|
||||
import com.simplemobiletools.calendar.interfaces.NavigationListener
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.simplemobiletools.calendar.adapters
|
||||
|
||||
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 androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import com.simplemobiletools.calendar.fragments.WeekFragment
|
||||
import com.simplemobiletools.calendar.helpers.WEEK_START_TIMESTAMP
|
||||
import com.simplemobiletools.calendar.interfaces.WeekFragmentListener
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.simplemobiletools.calendar.adapters
|
||||
|
||||
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 androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import com.simplemobiletools.calendar.fragments.YearFragment
|
||||
import com.simplemobiletools.calendar.helpers.YEAR_LABEL
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.helpers.DAY
|
||||
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)
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmRepeatInterval() })
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmRepeatInterval() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this) {
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.helpers.DELETE_ALL_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)
|
||||
.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)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this)
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.widget.ImageView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||
@ -11,7 +11,7 @@ import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
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
|
||||
|
||||
init {
|
@ -1,7 +1,7 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
import com.simplemobiletools.commons.extensions.hideKeyboard
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.adapters.FilterEventTypeAdapter
|
||||
@ -17,11 +17,11 @@ class ExportEventsDialog(val activity: SimpleActivity, val path: String, val cal
|
||||
init {
|
||||
val view = (activity.layoutInflater.inflate(R.layout.dialog_export_events, null) as ViewGroup).apply {
|
||||
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 {
|
||||
val eventTypes = HashSet<String>()
|
||||
it.mapTo(eventTypes, { it.id.toString() })
|
||||
it.mapTo(eventTypes) { it.id.toString() }
|
||||
|
||||
activity.runOnUiThread {
|
||||
export_events_types_list.adapter = FilterEventTypeAdapter(activity, it, eventTypes)
|
||||
|
@ -1,6 +1,6 @@
|
||||
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.activities.SimpleActivity
|
||||
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)
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmEventTypes() })
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this, R.string.filter_events_by_type)
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
|
@ -1,10 +1,9 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.DatePickerDialog
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
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.setupDialogStuff
|
||||
import com.simplemobiletools.commons.extensions.value
|
||||
import com.simplemobiletools.commons.helpers.isLollipopPlus
|
||||
import kotlinx.android.synthetic.main.dialog_repeat_limit_type_picker.view.*
|
||||
import org.joda.time.DateTime
|
||||
import java.util.*
|
||||
@ -25,14 +23,18 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Int,
|
||||
init {
|
||||
view = activity.layoutInflater.inflate(R.layout.dialog_repeat_limit_type_picker, null).apply {
|
||||
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_forever.setOnClickListener {
|
||||
callback(0)
|
||||
dialog.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
view.dialog_radio_view.check(getCheckedItem())
|
||||
|
||||
if (repeatLimit in 1..startTS)
|
||||
if (repeatLimit in 1..startTS) {
|
||||
repeatLimit = startTS
|
||||
}
|
||||
|
||||
updateRepeatLimitText()
|
||||
|
||||
@ -80,16 +82,12 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Int,
|
||||
dialog.dismiss()
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun showRepetitionLimitDialog() {
|
||||
val repeatLimitDateTime = Formatter.getDateTimeFromTS(if (repeatLimit != 0) repeatLimit else getNowSeconds())
|
||||
val datepicker = DatePickerDialog(activity, activity.getDialogTheme(), repetitionLimitDateSetListener, repeatLimitDateTime.year,
|
||||
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()
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.support.v7.app.AlertDialog
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.support.v7.widget.SwitchCompat
|
||||
import android.text.TextUtils
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.SwitchCompat
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
@ -33,7 +33,7 @@ class SelectCalendarsDialog(val activity: SimpleActivity, val callback: () -> Un
|
||||
}
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok, { dialogInterface, i -> confirmSelection() })
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmSelection() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this, R.string.select_caldav_calendars)
|
||||
|
@ -2,10 +2,10 @@ package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RadioButton
|
||||
import android.widget.RadioGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||
@ -29,6 +29,11 @@ class SelectEventCalendarDialog(val activity: Activity, val calendars: List<CalD
|
||||
activity.dbHelper.getEventTypes {
|
||||
activity.runOnUiThread {
|
||||
calendars.forEach {
|
||||
val localEventType = activity.dbHelper.getEventTypeWithCalDAVCalendarId(it.id)
|
||||
if (localEventType != null) {
|
||||
it.color = localEventType.color
|
||||
}
|
||||
|
||||
addRadioButton(it.getFullTitle(), it.id, it.color)
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
if (color != Color.TRANSPARENT)
|
||||
if (typeId != STORED_LOCALLY_ONLY) {
|
||||
view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor)
|
||||
}
|
||||
|
||||
view.setOnClickListener { viewClicked(typeId) }
|
||||
radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
||||
|
@ -1,18 +1,18 @@
|
||||
package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RadioButton
|
||||
import android.widget.RadioGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.helpers.CalDAVHandler
|
||||
import com.simplemobiletools.calendar.models.EventType
|
||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.setFillWithStroke
|
||||
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.*
|
||||
|
||||
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)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_radio_group, null) as ViewGroup
|
||||
radioGroup = view.dialog_radio_group
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_event_type_color, null) as ViewGroup
|
||||
radioGroup = view.dialog_select_event_type_color_radio
|
||||
view.dialog_select_event_type_other_value.setOnClickListener {
|
||||
showCustomColorPicker()
|
||||
}
|
||||
|
||||
colors.forEachIndexed { index, value ->
|
||||
addRadioButton(index, value)
|
||||
@ -33,21 +36,25 @@ class SelectEventTypeColorDialog(val activity: Activity, val eventType: EventTyp
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this)
|
||||
|
||||
if (colors.isEmpty()) {
|
||||
showCustomColorPicker()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addRadioButton(colorKey: Int, color: Int) {
|
||||
val view = activity.layoutInflater.inflate(R.layout.radio_button_with_color, null)
|
||||
(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
|
||||
id = colorKey
|
||||
}
|
||||
|
||||
if (color != Color.TRANSPARENT)
|
||||
view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor)
|
||||
|
||||
view.setOnClickListener { viewClicked(colorKey) }
|
||||
view.dialog_radio_color.setFillWithStroke(color, activity.config.backgroundColor)
|
||||
view.setOnClickListener {
|
||||
viewClicked(colorKey)
|
||||
}
|
||||
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])
|
||||
dialog?.dismiss()
|
||||
}
|
||||
|
||||
private fun showCustomColorPicker() {
|
||||
ColorPickerDialog(activity, activity.config.primaryColor) { wasPositivePressed, color ->
|
||||
if (wasPositivePressed) {
|
||||
callback(color)
|
||||
}
|
||||
dialog?.dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,9 +2,9 @@ package com.simplemobiletools.calendar.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RadioGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
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) {
|
||||
UpdateEventTypeDialog(activity) {
|
||||
EditEventTypeDialog(activity) {
|
||||
callback(it)
|
||||
activity.hideKeyboard()
|
||||
dialog?.dismiss()
|
||||
|
@ -55,9 +55,9 @@ fun Activity.showEventRepeatIntervalDialog(curSeconds: Int, callback: (minutes:
|
||||
}
|
||||
|
||||
val items = ArrayList<RadioItem>(seconds.size + 1)
|
||||
seconds.mapIndexedTo(items, { index, value ->
|
||||
seconds.mapIndexedTo(items) { index, value ->
|
||||
RadioItem(index, getRepetitionText(value), value)
|
||||
})
|
||||
}
|
||||
|
||||
var selectedIndex = 0
|
||||
seconds.forEachIndexed { index, value ->
|
||||
|
@ -14,13 +14,13 @@ import android.media.AudioAttributes
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.CalendarContract
|
||||
import android.support.v4.app.AlarmManagerCompat
|
||||
import android.support.v4.app.NotificationCompat
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.app.AlarmManagerCompat
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.EventActivity
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
@ -85,7 +85,7 @@ fun Context.scheduleNextEventReminder(event: Event, dbHelper: DBHelper, activity
|
||||
|
||||
val now = getNowSeconds()
|
||||
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()) {
|
||||
for (curEvent in it) {
|
||||
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() {
|
||||
dbHelper.getRunningEvents().filter { it.getReminders().isNotEmpty() }.forEach {
|
||||
notifyEvent(it)
|
||||
@ -453,7 +448,7 @@ fun Context.handleEventDeleting(eventIds: List<Int>, timestamps: List<Int>, acti
|
||||
}
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
@ -2,20 +2,19 @@ package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.DatePicker
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.EventActivity
|
||||
import com.simplemobiletools.calendar.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.adapters.DayEventsAdapter
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||
import com.simplemobiletools.calendar.extensions.getFilteredEvents
|
||||
import com.simplemobiletools.calendar.helpers.DAY_CODE
|
||||
import com.simplemobiletools.calendar.helpers.EVENT_ID
|
||||
import com.simplemobiletools.calendar.helpers.EVENT_OCCURRENCE_TS
|
||||
@ -106,21 +105,20 @@ class DayFragment : Fragment() {
|
||||
fun updateCalendar() {
|
||||
val startTS = Formatter.getDayStartTS(mDayCode)
|
||||
val endTS = Formatter.getDayEndTS(mDayCode)
|
||||
context?.dbHelper?.getEvents(startTS, endTS) {
|
||||
context?.dbHelper?.getEvents(startTS, endTS, applyTypeFilter = true) {
|
||||
receivedEvents(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun receivedEvents(events: List<Event>) {
|
||||
val filtered = context?.getFilteredEvents(events) ?: ArrayList()
|
||||
val newHash = filtered.hashCode()
|
||||
val newHash = events.hashCode()
|
||||
if (newHash == lastHash || !isAdded) {
|
||||
return
|
||||
}
|
||||
lastHash = newHash
|
||||
|
||||
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
|
||||
})))
|
||||
|
||||
|
@ -2,10 +2,10 @@ package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.adapters.MyDayPagerAdapter
|
||||
|
@ -76,7 +76,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
maxFetchedTS = DateTime().plusMonths(6).seconds()
|
||||
}
|
||||
|
||||
context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS) {
|
||||
context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS, applyTypeFilter = true) {
|
||||
if (it.size >= MIN_EVENTS_TRESHOLD) {
|
||||
receivedEvents(it, false)
|
||||
} else {
|
||||
@ -84,7 +84,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
minFetchedTS -= FETCH_INTERVAL
|
||||
maxFetchedTS += FETCH_INTERVAL
|
||||
}
|
||||
context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS) {
|
||||
context!!.dbHelper.getEvents(minFetchedTS, maxFetchedTS, applyTypeFilter = true) {
|
||||
mEvents = it
|
||||
receivedEvents(mEvents, false, !wereInitialEventsAdded)
|
||||
}
|
||||
@ -98,7 +98,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
return
|
||||
}
|
||||
|
||||
mEvents = context!!.getFilteredEvents(events)
|
||||
mEvents = events
|
||||
val listItems = context!!.getEventListItems(mEvents)
|
||||
|
||||
activity?.runOnUiThread {
|
||||
@ -150,7 +150,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
private fun fetchPreviousPeriod() {
|
||||
val oldMinFetchedTS = minFetchedTS - 1
|
||||
minFetchedTS -= FETCH_INTERVAL
|
||||
context!!.dbHelper.getEvents(minFetchedTS, oldMinFetchedTS) {
|
||||
context!!.dbHelper.getEvents(minFetchedTS, oldMinFetchedTS, applyTypeFilter = true) {
|
||||
mEvents.addAll(0, it)
|
||||
receivedEvents(mEvents, false)
|
||||
}
|
||||
@ -159,7 +159,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
private fun fetchNextPeriod(scrollAfterUpdating: Boolean) {
|
||||
val oldMaxFetchedTS = maxFetchedTS + 1
|
||||
maxFetchedTS += FETCH_INTERVAL
|
||||
context!!.dbHelper.getEvents(oldMaxFetchedTS, maxFetchedTS) {
|
||||
context!!.dbHelper.getEvents(oldMaxFetchedTS, maxFetchedTS, applyTypeFilter = true) {
|
||||
mEvents.addAll(it)
|
||||
receivedEvents(mEvents, scrollAfterUpdating)
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ package com.simplemobiletools.calendar.fragments
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v7.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -2,10 +2,10 @@ package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.adapters.MyMonthPagerAdapter
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.support.v4.app.Fragment
|
||||
import androidx.fragment.app.Fragment
|
||||
|
||||
abstract class MyFragmentHolder : Fragment() {
|
||||
abstract fun goToToday()
|
||||
|
@ -5,17 +5,19 @@ import android.content.res.Resources
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
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.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.EventActivity
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||
import com.simplemobiletools.calendar.extensions.getFilteredEvents
|
||||
import com.simplemobiletools.calendar.extensions.seconds
|
||||
import com.simplemobiletools.calendar.helpers.*
|
||||
import com.simplemobiletools.calendar.helpers.Formatter
|
||||
@ -61,6 +63,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
lateinit var mScrollView: MyScrollView
|
||||
lateinit var mCalendar: WeeklyCalendarImpl
|
||||
lateinit var mRes: Resources
|
||||
lateinit var mConfig: Config
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@ -68,12 +71,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
it.map { eventTypeColors.put(it.id, it.color) }
|
||||
}
|
||||
|
||||
mRowHeight = context!!.resources.getDimension(R.dimen.weekly_view_row_height)
|
||||
minScrollY = (mRowHeight * context!!.config.startWeeklyAt).toInt()
|
||||
mRes = context!!.resources
|
||||
mConfig = context!!.config
|
||||
mRowHeight = mRes.getDimension(R.dimen.weekly_view_row_height)
|
||||
minScrollY = (mRowHeight * mConfig.startWeeklyAt).toInt()
|
||||
mWeekTimestamp = arguments!!.getInt(WEEK_START_TIMESTAMP)
|
||||
dimPastEvents = context!!.config.dimPastEvents
|
||||
dimPastEvents = mConfig.dimPastEvents
|
||||
primaryColor = context!!.getAdjustedPrimaryColor()
|
||||
mRes = resources
|
||||
allDayRows.add(HashSet())
|
||||
mCalendar = WeeklyCalendarImpl(this, context!!)
|
||||
}
|
||||
@ -97,11 +101,6 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
return mView
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
wasExtraHeightAdded = true
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupDayLabels()
|
||||
@ -112,8 +111,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
return@onGlobalLayout
|
||||
}
|
||||
|
||||
minScrollY = (mRowHeight * context!!.config.startWeeklyAt).toInt()
|
||||
maxScrollY = (mRowHeight * context!!.config.endWeeklyAt).toInt()
|
||||
minScrollY = (mRowHeight * mConfig.startWeeklyAt).toInt()
|
||||
maxScrollY = (mRowHeight * mConfig.endWeeklyAt).toInt()
|
||||
|
||||
val bounds = Rect()
|
||||
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) {
|
||||
super.setMenuVisibility(menuVisible)
|
||||
isFragmentVisible = menuVisible
|
||||
@ -140,11 +149,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
|
||||
private fun setupDayLabels() {
|
||||
var curDay = Formatter.getDateTimeFromTS(mWeekTimestamp)
|
||||
val textColor = context!!.config.textColor
|
||||
val textColor = mConfig.textColor
|
||||
val todayCode = Formatter.getDayCodeFromDateTime(DateTime())
|
||||
for (i in 0..6) {
|
||||
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]
|
||||
|
||||
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?.beGone()
|
||||
|
||||
//val rowHeight = resources.getDimension(R.dimen.weekly_view_row_height)
|
||||
val hour = (event.y / mRowHeight).toInt()
|
||||
selectedGrid = (inflater.inflate(R.layout.week_grid_item, null, false) as ImageView).apply {
|
||||
view.addView(this)
|
||||
@ -215,25 +223,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
override fun updateWeeklyCalendar(events: ArrayList<Event>) {
|
||||
if (context == null) {
|
||||
return
|
||||
}
|
||||
|
||||
val newEvents = context!!.getFilteredEvents(events)
|
||||
val newHash = newEvents.hashCode()
|
||||
if (newHash == lastHash) {
|
||||
val newHash = events.hashCode()
|
||||
if (newHash == lastHash || mWasDestroyed || context == null) {
|
||||
return
|
||||
}
|
||||
|
||||
lastHash = newHash
|
||||
this.events = newEvents
|
||||
updateEvents()
|
||||
}
|
||||
|
||||
private fun updateEvents() {
|
||||
if (mWasDestroyed) {
|
||||
return
|
||||
}
|
||||
this.events = events
|
||||
|
||||
activity!!.runOnUiThread {
|
||||
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()
|
||||
|
||||
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 }))
|
||||
for (event in sorted) {
|
||||
if (event.getIsAllDay() || Formatter.getDayCodeFromTS(event.startTS) != Formatter.getDayCodeFromTS(event.endTS)) {
|
||||
@ -265,7 +261,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
} else {
|
||||
val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
|
||||
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 startMinutes = startDateTime.minuteOfDay
|
||||
@ -320,7 +316,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
applyColorFilter(primaryColor)
|
||||
mView.week_events_holder.addView(this, 0)
|
||||
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 {
|
||||
width = todayColumn.width + extraWidth
|
||||
height = markerHeight
|
||||
@ -332,14 +328,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
private fun checkTopHolderHeight() {
|
||||
mView.week_top_holder.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||
override fun onGlobalLayout() {
|
||||
mView.week_top_holder.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||
if (isFragmentVisible && activity != null) {
|
||||
mListener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
}
|
||||
mView.week_top_holder.onGlobalLayout {
|
||||
if (isFragmentVisible && activity != null && !mWasDestroyed) {
|
||||
mListener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
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 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
|
||||
val cnt = allDayRows.size - 1
|
||||
var wasEventHandled = false
|
||||
@ -417,12 +410,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
private fun calculateExtraHeight() {
|
||||
mView.week_top_holder.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||
override fun onGlobalLayout() {
|
||||
if (activity == null)
|
||||
return
|
||||
|
||||
mView.week_top_holder.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||
mView.week_top_holder.onGlobalLayout {
|
||||
if (activity != null && !mWasDestroyed) {
|
||||
if (isFragmentVisible) {
|
||||
mListener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
}
|
||||
@ -432,12 +421,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
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))
|
||||
|
@ -2,11 +2,11 @@ package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.adapters.MyWeekPagerAdapter
|
||||
@ -67,11 +67,9 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
weekHolder!!.week_view_view_pager.apply {
|
||||
adapter = weeklyAdapter
|
||||
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) {
|
||||
currentWeekTS = weekTSs[position]
|
||||
|
@ -2,7 +2,7 @@ package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.Fragment
|
||||
import androidx.fragment.app.Fragment
|
||||
import android.util.SparseArray
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
|
@ -2,7 +2,7 @@ package com.simplemobiletools.calendar.fragments
|
||||
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.support.v4.view.ViewPager
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -30,7 +30,6 @@ class CalDAVHandler(val context: Context) {
|
||||
title = calendar.displayName
|
||||
caldavDisplayName = calendar.displayName
|
||||
caldavEmail = calendar.accountName
|
||||
color = calendar.color
|
||||
context.dbHelper.updateLocalEventType(this)
|
||||
}
|
||||
|
||||
@ -81,14 +80,13 @@ class CalDAVHandler(val context: Context) {
|
||||
return calendars
|
||||
}
|
||||
|
||||
fun updateCalDAVCalendar(eventType: EventType): Boolean {
|
||||
fun updateCalDAVCalendar(eventType: EventType) {
|
||||
val uri = CalendarContract.Calendars.CONTENT_URI
|
||||
val values = fillCalendarContentValues(eventType)
|
||||
val newUri = ContentUris.withAppendedId(uri, eventType.caldavCalendarId.toLong())
|
||||
return try {
|
||||
context.contentResolver.update(newUri, values, null, null) == 1
|
||||
try {
|
||||
context.contentResolver.update(newUri, values, null, null)
|
||||
} catch (e: IllegalArgumentException) {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,53 +117,6 @@ class CalDAVHandler(val context: Context) {
|
||||
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> {
|
||||
val colors = SparseIntArray()
|
||||
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) {
|
||||
|
@ -52,7 +52,7 @@ class Config(context: Context) : BaseConfig(context) {
|
||||
get() = prefs.getInt(VIEW, MONTHLY_VIEW)
|
||||
set(view) = prefs.edit().putInt(VIEW, view).apply()
|
||||
|
||||
var lastEventReminderMinutes: Int
|
||||
var lastEventReminderMinutes1: Int
|
||||
get() = prefs.getInt(LAST_EVENT_REMINDER_MINUTES, 10)
|
||||
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)
|
||||
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
|
||||
get() = prefs.getBoolean(CALDAV_SYNC, false)
|
||||
set(caldavSync) {
|
||||
@ -158,4 +162,8 @@ class Config(context: Context) : BaseConfig(context) {
|
||||
var defaultReminder3: Int
|
||||
get() = prefs.getInt(DEFAULT_REMINDER_3, REMINDER_OFF)
|
||||
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()
|
||||
}
|
||||
|
@ -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 WEEK_START_DATE_TIME = "week_start_date_time"
|
||||
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 YEARLY_VIEW = 2
|
||||
const val EVENTS_LIST_VIEW = 3
|
||||
const val WEEKLY_VIEW = 4
|
||||
const val DAILY_VIEW = 5
|
||||
const val LAST_VIEW = 6
|
||||
|
||||
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 DISPLAY_EVENT_TYPES = "display_event_types"
|
||||
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_SYNCED_CALENDAR_IDS = "caldav_synced_calendar_ids"
|
||||
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_2 = "default_reminder_2"
|
||||
const val DEFAULT_REMINDER_3 = "default_reminder_3"
|
||||
const val PULL_TO_REFRESH = "pull_to_refresh"
|
||||
|
||||
// repeat_rule for monthly and yearly repetition
|
||||
const val REPEAT_SAME_DAY = 1 // i.e. 25th every month, or 3rd june (if yearly repetition)
|
||||
|
@ -320,15 +320,11 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||
}
|
||||
|
||||
fun updateEventType(eventType: EventType): Int {
|
||||
return if (eventType.caldavCalendarId != 0) {
|
||||
if (CalDAVHandler(context).updateCalDAVCalendar(eventType)) {
|
||||
updateLocalEventType(eventType)
|
||||
} else {
|
||||
-1
|
||||
}
|
||||
} else {
|
||||
updateLocalEventType(eventType)
|
||||
if (eventType.caldavCalendarId != 0) {
|
||||
CalDAVHandler(context).updateCalDAVCalendar(eventType)
|
||||
}
|
||||
|
||||
return updateLocalEventType(eventType)
|
||||
}
|
||||
|
||||
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) {
|
||||
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>
|
||||
|
||||
val deletedSet = HashSet<String>()
|
||||
@ -606,7 +602,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||
val selectionArgs = arrayOf(eventTypeId.toString())
|
||||
val cursor = getEventsCursor(selection, selectionArgs)
|
||||
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)
|
||||
}
|
||||
|
||||
@ -681,37 +677,58 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||
}.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 {
|
||||
getEventsInBackground(fromTS, toTS, eventId, callback)
|
||||
getEventsInBackground(fromTS, toTS, eventId, applyTypeFilter, callback)
|
||||
}.start()
|
||||
}
|
||||
|
||||
fun getEventsInBackground(fromTS: Int, toTS: Int, eventId: Int = -1, callback: (events: ArrayList<Event>) -> Unit) {
|
||||
val events = ArrayList<Event>()
|
||||
fun getEventsInBackground(fromTS: Int, toTS: Int, eventId: Int = -1, applyTypeFilter: Boolean, callback: (events: ArrayList<Event>) -> Unit) {
|
||||
var events = ArrayList<Event>()
|
||||
|
||||
var selection = "$COL_START_TS <= ? AND $COL_END_TS >= ? AND $COL_REPEAT_INTERVAL IS NULL AND $COL_START_TS != 0"
|
||||
if (eventId != -1)
|
||||
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 cursor = getEventsCursor(selection, selectionArgs)
|
||||
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>
|
||||
callback(filtered)
|
||||
events = events
|
||||
.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>()
|
||||
|
||||
// get repeatable events
|
||||
var selection = "$COL_REPEAT_INTERVAL != 0 AND $COL_START_TS <= $toTS AND $COL_START_TS != 0"
|
||||
if (eventId != -1)
|
||||
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 startTimes = SparseIntArray(events.size)
|
||||
events.forEach {
|
||||
@ -792,19 +809,27 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||
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>()
|
||||
var selection = "($COL_FLAGS & $FLAG_ALL_DAY) != 0"
|
||||
if (eventId != -1)
|
||||
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 cursor = getEventsCursor(selection)
|
||||
events.addAll(fillEvents(cursor).filter { dayCode == Formatter.getDayCodeFromTS(it.startTS) })
|
||||
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 {
|
||||
val initialWeekOfYear = Formatter.getDateTimeFromTS(startTimes[event.id]).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> {
|
||||
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)
|
||||
var cursor: Cursor? = null
|
||||
try {
|
||||
|
@ -15,7 +15,7 @@ object Formatter {
|
||||
const val TIME_PATTERN = "HHmmss"
|
||||
private const val DAY_PATTERN = "d"
|
||||
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_24 = "HH:mm"
|
||||
|
||||
@ -26,7 +26,7 @@ object Formatter {
|
||||
val dateTime = getDateTimeFromCode(dayCode)
|
||||
val day = dateTime.toString(DAY_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)
|
||||
if (shortMonth)
|
||||
month = month.substring(0, Math.min(month.length, 3))
|
||||
|
@ -140,8 +140,8 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||
|
||||
val eventType = eventTypes.firstOrNull { it.id == curEventTypeId }
|
||||
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 }),
|
||||
curReminderMinutes.getOrElse(1, { -1 }), curReminderMinutes.getOrElse(2, { -1 }), curRepeatInterval,
|
||||
val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes.getOrElse(0) { -1 },
|
||||
curReminderMinutes.getOrElse(1) { -1 }, curReminderMinutes.getOrElse(2) { -1 }, curRepeatInterval,
|
||||
curImportId, curFlags, curRepeatLimit, curRepeatRule, curEventTypeId, lastUpdated = curLastModified,
|
||||
source = source, location = curLocation)
|
||||
|
||||
|
@ -3,7 +3,6 @@ package com.simplemobiletools.calendar.helpers
|
||||
import android.content.Context
|
||||
import com.simplemobiletools.calendar.extensions.config
|
||||
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||
import com.simplemobiletools.calendar.extensions.getFilteredEvents
|
||||
import com.simplemobiletools.calendar.extensions.seconds
|
||||
import com.simplemobiletools.calendar.interfaces.MonthlyCalendar
|
||||
import com.simplemobiletools.calendar.models.DayMonthly
|
||||
@ -12,22 +11,20 @@ import org.joda.time.DateTime
|
||||
import java.util.*
|
||||
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 YEAR_PATTERN = "YYYY"
|
||||
|
||||
private val mToday: String = DateTime().toString(Formatter.DAYCODE_PATTERN)
|
||||
private var mEvents = ArrayList<Event>()
|
||||
private var mFilterEventTypes = true
|
||||
|
||||
lateinit var mTargetDate: DateTime
|
||||
|
||||
fun updateMonthlyCalendar(targetDate: DateTime, filterEventTypes: Boolean = true) {
|
||||
mFilterEventTypes = filterEventTypes
|
||||
fun updateMonthlyCalendar(targetDate: DateTime) {
|
||||
mTargetDate = targetDate
|
||||
val startTS = mTargetDate.minusDays(7).seconds()
|
||||
val endTS = mTargetDate.plusDays(43).seconds()
|
||||
mContext.dbHelper.getEvents(startTS, endTS) {
|
||||
context.dbHelper.getEvents(startTS, endTS, applyTypeFilter = true) {
|
||||
gotEvents(it)
|
||||
}
|
||||
}
|
||||
@ -40,7 +37,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
||||
val days = ArrayList<DayMonthly>(DAYS_CNT)
|
||||
val currMonthDays = mTargetDate.dayOfMonth().maximumValue
|
||||
var firstDayIndex = mTargetDate.withDayOfMonth(1).dayOfWeek
|
||||
if (!mContext.config.isSundayFirst)
|
||||
if (!context.config.isSundayFirst)
|
||||
firstDayIndex -= 1
|
||||
val prevMonthDays = mTargetDate.minusMonths(1).dayOfMonth().maximumValue
|
||||
|
||||
@ -79,13 +76,13 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
||||
if (markDaysWithEvents) {
|
||||
markDaysWithEvents(days)
|
||||
} else {
|
||||
mCallback.updateMonthlyCalendar(mContext, monthName, days, false, mTargetDate)
|
||||
callback.updateMonthlyCalendar(context, monthName, days, false, mTargetDate)
|
||||
}
|
||||
}
|
||||
|
||||
// it works more often than not, dont touch
|
||||
private fun markDaysWithEvents(days: ArrayList<DayMonthly>) {
|
||||
mContext.dbHelper.getEventTypes {
|
||||
context.dbHelper.getEventTypes {
|
||||
val dayEvents = HashMap<String, ArrayList<Event>>()
|
||||
mEvents.forEach {
|
||||
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 {
|
||||
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
|
||||
get() {
|
||||
var month = Formatter.getMonthName(mContext, mTargetDate.monthOfYear)
|
||||
var month = Formatter.getMonthName(context, mTargetDate.monthOfYear)
|
||||
val targetYear = mTargetDate.toString(YEAR_PATTERN)
|
||||
if (targetYear != DateTime().toString(YEAR_PATTERN)) {
|
||||
month += " $targetYear"
|
||||
@ -130,12 +127,7 @@ class MonthlyCalendarImpl(val mCallback: MonthlyCalendar, val mContext: Context)
|
||||
}
|
||||
|
||||
private fun gotEvents(events: ArrayList<Event>) {
|
||||
mEvents = if (mFilterEventTypes) {
|
||||
mContext.getFilteredEvents(events)
|
||||
} else {
|
||||
events
|
||||
}
|
||||
|
||||
mEvents = events
|
||||
getDays(true)
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ import org.joda.time.DateTime
|
||||
|
||||
class MyWidgetListProvider : AppWidgetProvider() {
|
||||
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) {
|
||||
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))
|
||||
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 {
|
||||
data = Uri.parse(this.toUri(Intent.URI_INTENT_SCHEME))
|
||||
@ -74,14 +74,15 @@ class MyWidgetListProvider : AppWidgetProvider() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
when (intent.action) {
|
||||
NEW_EVENT -> context.launchNewEventIntent()
|
||||
LAUNCH_TODAY -> launchDayActivity(context)
|
||||
LAUNCH_CAL -> launchCalenderInDefaultView(context)
|
||||
else -> super.onReceive(context, intent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun launchDayActivity(context: Context) {
|
||||
private fun launchCalenderInDefaultView(context: Context) {
|
||||
(context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply {
|
||||
putExtra(DAY_CODE, Formatter.getDayCodeFromDateTime(DateTime()))
|
||||
putExtra(VIEW_TO_OPEN, context.config.listWidgetViewToOpen)
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
context.startActivity(this)
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
|
||||
private fun setupAppOpenIntent(context: Context, views: RemoteViews, id: Int, dayCode: String) {
|
||||
(context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply {
|
||||
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)
|
||||
views.setOnClickPendingIntent(id, pendingIntent)
|
||||
}
|
||||
|
@ -7,15 +7,14 @@ import com.simplemobiletools.calendar.models.Event
|
||||
import com.simplemobiletools.commons.helpers.WEEK_SECONDS
|
||||
import java.util.*
|
||||
|
||||
class WeeklyCalendarImpl(val mCallback: WeeklyCalendar, val mContext: Context) {
|
||||
class WeeklyCalendarImpl(val callback: WeeklyCalendar, val context: Context) {
|
||||
var mEvents = ArrayList<Event>()
|
||||
|
||||
fun updateWeeklyCalendar(weekStartTS: Int) {
|
||||
val startTS = weekStartTS
|
||||
val endTS = startTS + WEEK_SECONDS
|
||||
mContext.dbHelper.getEvents(startTS, endTS) {
|
||||
val endTS = weekStartTS + WEEK_SECONDS
|
||||
context.dbHelper.getEvents(weekStartTS, endTS, applyTypeFilter = true) {
|
||||
mEvents = it
|
||||
mCallback.updateWeeklyCalendar(it)
|
||||
callback.updateWeeklyCalendar(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package com.simplemobiletools.calendar.helpers
|
||||
import android.content.Context
|
||||
import android.util.SparseArray
|
||||
import com.simplemobiletools.calendar.extensions.dbHelper
|
||||
import com.simplemobiletools.calendar.extensions.getFilteredEvents
|
||||
import com.simplemobiletools.calendar.extensions.seconds
|
||||
import com.simplemobiletools.calendar.interfaces.YearlyCalendar
|
||||
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 startTS = startDateTime.seconds()
|
||||
val endTS = startDateTime.plusYears(1).minusSeconds(1).seconds()
|
||||
context.dbHelper.getEvents(startTS, endTS) {
|
||||
context.dbHelper.getEvents(startTS, endTS, applyTypeFilter = true) {
|
||||
gotEvents(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun gotEvents(events: MutableList<Event>) {
|
||||
val filtered = context.getFilteredEvents(events)
|
||||
val arr = SparseArray<ArrayList<DayYearly>>(12)
|
||||
|
||||
filtered.forEach {
|
||||
events.forEach {
|
||||
val startDateTime = Formatter.getDateTimeFromTS(it.startTS)
|
||||
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) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.simplemobiletools.calendar.models
|
||||
|
||||
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 getFullTitle() = "$displayName ($accountName)"
|
||||
|
@ -4,9 +4,12 @@ import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import com.simplemobiletools.calendar.extensions.recheckCalDAVCalendars
|
||||
import com.simplemobiletools.calendar.extensions.updateWidgets
|
||||
|
||||
class CalDAVSyncReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
context.recheckCalDAVCalendars {}
|
||||
context.recheckCalDAVCalendars {
|
||||
context.updateWidgets()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
private var paint: Paint
|
||||
private var eventTitlePaint: TextPaint
|
||||
private var gridPaint: Paint
|
||||
private var config = context.config
|
||||
private var dayWidth = 0f
|
||||
private var dayHeight = 0f
|
||||
private var primaryColor = 0
|
||||
@ -54,9 +55,9 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
|
||||
init {
|
||||
primaryColor = context.getAdjustedPrimaryColor()
|
||||
textColor = context.config.textColor
|
||||
showWeekNumbers = context.config.showWeekNumbers
|
||||
dimPastEvents = context.config.dimPastEvents
|
||||
textColor = config.textColor
|
||||
showWeekNumbers = config.showWeekNumbers
|
||||
dimPastEvents = config.dimPastEvents
|
||||
|
||||
smallPadding = resources.displayMetrics.density.toInt()
|
||||
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>) {
|
||||
days = newDays
|
||||
showWeekNumbers = context.config.showWeekNumbers
|
||||
showWeekNumbers = config.showWeekNumbers
|
||||
horizontalOffset = if (showWeekNumbers) eventTitleHeight * 2 else 0
|
||||
initWeekDayLetters()
|
||||
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) {
|
||||
@ -119,7 +121,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
dayVerticalOffsets.clear()
|
||||
measureDaySize(canvas)
|
||||
|
||||
if (context.config.showGrid) {
|
||||
if (config.showGrid) {
|
||||
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) {
|
||||
@ -188,7 +192,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
val weekDays = days.subList(i * 7, i * 7 + 7)
|
||||
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 id = "$weekOfYear:"
|
||||
val yPos = i * dayHeight + weekDaysLetterHeight
|
||||
@ -203,12 +207,6 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
maxEventsPerDay = availableHeightForEvents / eventTitleHeight
|
||||
}
|
||||
|
||||
private fun drawEvents(canvas: Canvas) {
|
||||
for (event in allEvents) {
|
||||
drawEvent(event, canvas)
|
||||
}
|
||||
}
|
||||
|
||||
private fun drawEvent(event: MonthViewEvent, canvas: Canvas) {
|
||||
val verticalOffset = dayVerticalOffsets[event.startDayIndex]
|
||||
val xPos = event.startDayIndex % 7 * dayWidth + horizontalOffset
|
||||
@ -302,8 +300,8 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
}
|
||||
|
||||
private fun initWeekDayLetters() {
|
||||
dayLetters = context.resources.getStringArray(R.array.week_day_letters).toList() as ArrayList<String>
|
||||
if (context.config.isSundayFirst) {
|
||||
dayLetters = context.resources.getStringArray(R.array.week_day_letters).toMutableList() as ArrayList<String>
|
||||
if (config.isSundayFirst) {
|
||||
dayLetters.moveLastItemToFront()
|
||||
}
|
||||
}
|
||||
@ -315,7 +313,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
}
|
||||
|
||||
currDayOfWeek = DateTime().dayOfWeek
|
||||
if (context.config.isSundayFirst) {
|
||||
if (config.isSundayFirst) {
|
||||
currDayOfWeek %= 7
|
||||
} else {
|
||||
currDayOfWeek--
|
||||
|
@ -15,11 +15,11 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||
private var dayWidth = 0f
|
||||
private var dayHeight = 0f
|
||||
private var weekDaysLetterHeight = 0
|
||||
private var horizontalOffset = 0
|
||||
private var wereViewsAdded = false
|
||||
private var days = ArrayList<DayMonthly>()
|
||||
private var inflater: LayoutInflater
|
||||
private var monthView: MonthView
|
||||
private var horizontalOffset = 0
|
||||
private var dayClickCallback: ((day: DayMonthly) -> Unit)? = null
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
||||
|
@ -69,9 +69,9 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||
super.onDraw(canvas)
|
||||
if (dayWidth == 0f) {
|
||||
dayWidth = if (isLandscape) {
|
||||
(canvas.width / 9).toFloat()
|
||||
width / 9f
|
||||
} else {
|
||||
(canvas.width / 7).toFloat()
|
||||
width / 7f
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?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:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/day_coordinator"
|
||||
@ -22,4 +22,4 @@
|
||||
app:backgroundTint="@color/color_primary"
|
||||
app:rippleColor="@color/pressed_item_foreground"/>
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
@ -17,8 +17,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:hint="@string/title"
|
||||
android:inputType="textCapSentences"
|
||||
android:maxLength="180"
|
||||
@ -45,15 +45,15 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_show_on_map"
|
||||
style="@style/MyBorderlessBackgroundStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignTop="@+id/event_location"
|
||||
android:layout_alignBottom="@+id/event_location"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignTop="@+id/event_location"
|
||||
android:layout_marginEnd="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:paddingLeft="@dimen/small_margin"
|
||||
android:paddingRight="@dimen/small_margin"
|
||||
android:src="@drawable/ic_place"/>
|
||||
@ -64,8 +64,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_location"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:autoLink="all"
|
||||
android:gravity="top"
|
||||
android:hint="@string/description"
|
||||
@ -80,8 +80,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_below="@+id/event_description"
|
||||
android:layout_marginBottom="@dimen/normal_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:layout_marginBottom="@dimen/normal_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
|
||||
@ -89,11 +89,11 @@
|
||||
android:id="@+id/event_time_image"
|
||||
android:layout_width="wrap_content"
|
||||
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_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_marginLeft="@dimen/normal_margin"
|
||||
android:alpha="0.8"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_clock"/>
|
||||
@ -102,17 +102,17 @@
|
||||
android:id="@+id/event_all_day"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_description_divider"
|
||||
android:layout_alignParentEnd="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_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_toRightOf="@+id/event_time_image"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:text="@string/all_day"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
app:switchPadding="@dimen/small_margin"/>
|
||||
@ -121,14 +121,14 @@
|
||||
android:id="@+id/event_start_date"
|
||||
android:layout_width="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_alignStart="@+id/event_all_day"
|
||||
android:layout_alignLeft="@+id/event_all_day"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="January 1 1970"/>
|
||||
|
||||
@ -136,9 +136,9 @@
|
||||
android:id="@+id/event_start_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_time_image"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_below="@+id/event_time_image"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
@ -148,14 +148,14 @@
|
||||
android:id="@+id/event_end_date"
|
||||
android:layout_width="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_alignStart="@+id/event_all_day"
|
||||
android:layout_alignLeft="@+id/event_all_day"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="January 1 1970"/>
|
||||
|
||||
@ -163,9 +163,9 @@
|
||||
android:id="@+id/event_end_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_start_time"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_below="@+id/event_start_time"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
@ -176,8 +176,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_below="@+id/event_end_date"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
|
||||
@ -185,11 +185,11 @@
|
||||
android:id="@+id/event_reminder_image"
|
||||
android:layout_width="wrap_content"
|
||||
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_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_marginLeft="@dimen/normal_margin"
|
||||
android:alpha="0.8"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_bell"/>
|
||||
@ -199,26 +199,26 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_date_time_divider"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_toEndOf="@+id/event_reminder_image"
|
||||
android:layout_toRightOf="@+id/event_reminder_image"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_reminder_2"
|
||||
android:layout_width="match_parent"
|
||||
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_alignStart="@+id/event_reminder_1"
|
||||
android:layout_alignLeft="@+id/event_reminder_1"
|
||||
android:alpha="0.4"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/add_another_reminder"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
android:visibility="gone"/>
|
||||
@ -227,13 +227,13 @@
|
||||
android:id="@+id/event_reminder_3"
|
||||
android:layout_width="match_parent"
|
||||
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_alignStart="@+id/event_reminder_1"
|
||||
android:layout_alignLeft="@+id/event_reminder_1"
|
||||
android:alpha="0.4"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/add_another_reminder"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
android:visibility="gone"/>
|
||||
@ -243,8 +243,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_below="@+id/event_reminder_3"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
|
||||
@ -252,11 +252,11 @@
|
||||
android:id="@+id/event_repetition_image"
|
||||
android:layout_width="wrap_content"
|
||||
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_marginLeft="@dimen/normal_margin"
|
||||
android:layout_alignTop="@+id/event_repetition"
|
||||
android:layout_alignBottom="@+id/event_repetition"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:layout_marginLeft="@dimen/normal_margin"
|
||||
android:alpha="0.8"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_repeat"/>
|
||||
@ -266,22 +266,22 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_reminder_divider"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_toEndOf="@+id/event_repetition_image"
|
||||
android:layout_toRightOf="@+id/event_repetition_image"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/event_repetition_rule_holder"
|
||||
android:layout_width="match_parent"
|
||||
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_alignStart="@+id/event_repetition"
|
||||
android:layout_alignLeft="@+id/event_repetition"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:visibility="gone">
|
||||
|
||||
@ -290,8 +290,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/repeat_on"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
|
||||
@ -314,9 +314,9 @@
|
||||
android:id="@+id/event_repetition_limit_holder"
|
||||
android:layout_width="match_parent"
|
||||
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_alignStart="@+id/event_repetition"
|
||||
android:layout_alignLeft="@+id/event_repetition"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:visibility="gone">
|
||||
|
||||
@ -324,11 +324,11 @@
|
||||
android:id="@+id/event_repetition_limit_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toLeftOf="@+id/event_repetition_limit"
|
||||
android:layout_toStartOf="@+id/event_repetition_limit"
|
||||
android:layout_toLeftOf="@+id/event_repetition_limit"
|
||||
android:clickable="false"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/repeat_till"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
|
||||
@ -357,11 +357,11 @@
|
||||
android:id="@+id/event_caldav_calendar_image"
|
||||
android:layout_width="wrap_content"
|
||||
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_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_marginLeft="@dimen/normal_margin"
|
||||
android:alpha="0.8"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_calendar"
|
||||
@ -381,12 +381,12 @@
|
||||
android:id="@+id/event_caldav_calendar_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:paddingBottom="@dimen/tiny_margin"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:paddingBottom="@dimen/tiny_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="My calendar"/>
|
||||
|
||||
@ -395,14 +395,25 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_caldav_calendar_name"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:paddingBottom="@dimen/medium_margin"
|
||||
android:textSize="@dimen/meta_text_size"
|
||||
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>
|
||||
|
||||
<ImageView
|
||||
@ -418,11 +429,11 @@
|
||||
android:id="@+id/event_type_image"
|
||||
android:layout_width="wrap_content"
|
||||
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_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_marginLeft="@dimen/normal_margin"
|
||||
android:alpha="0.8"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_color"/>
|
||||
@ -433,6 +444,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_caldav_calendar_divider"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:layout_toEndOf="@+id/event_type_image"
|
||||
android:layout_toRightOf="@+id/event_type_image"
|
||||
android:background="?attr/selectableItemBackground">
|
||||
@ -441,12 +453,12 @@
|
||||
android:id="@+id/event_type"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginRight="@dimen/medium_margin"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_toLeftOf="@+id/event_type_color"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
|
||||
<ImageView
|
||||
@ -467,7 +479,6 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_below="@+id/event_type_holder"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
</RelativeLayout>
|
||||
|
@ -1,15 +1,22 @@
|
||||
<?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:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/calendar_coordinator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragments_holder"
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipe_refresh_layout"
|
||||
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
|
||||
android:id="@+id/calendar_fab"
|
||||
@ -65,4 +72,4 @@
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
@ -17,18 +17,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_purchase_thank_you"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/purchase_simple_thank_you"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -39,18 +39,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_customize_colors_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/customize_colors"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -61,18 +61,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_manage_event_types_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/manage_event_types"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -83,10 +83,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_use_english"
|
||||
@ -94,8 +94,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/use_english_language"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -106,10 +106,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_hour_format"
|
||||
@ -117,8 +117,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/use_24_hour_time_format"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -129,10 +129,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_sunday_first"
|
||||
@ -140,8 +140,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/sunday_first"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -152,10 +152,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_avoid_whats_new"
|
||||
@ -163,8 +163,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/avoid_whats_new"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -180,8 +180,8 @@
|
||||
android:id="@+id/reminders_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/event_reminders"
|
||||
android:textAllCaps="true"
|
||||
@ -193,10 +193,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_vibrate"
|
||||
@ -204,8 +204,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/vibrate"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -216,10 +216,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_loop_reminders"
|
||||
@ -227,8 +227,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/loop_reminders"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -239,18 +239,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_reminder_sound_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+id/settings_reminder_sound"
|
||||
android:layout_toStartOf="@+id/settings_reminder_sound"
|
||||
android:layout_toLeftOf="@+id/settings_reminder_sound"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/reminder_sound"/>
|
||||
@ -273,18 +273,18 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_reminder_audio_stream_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/reminder_stream"/>
|
||||
@ -308,10 +308,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_use_same_snooze"
|
||||
@ -319,8 +319,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/use_same_snooze"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -331,18 +331,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_snooze_time_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+id/settings_snooze_time"
|
||||
android:layout_toStartOf="@+id/settings_snooze_time"
|
||||
android:layout_toLeftOf="@+id/settings_snooze_time"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/snooze_time"/>
|
||||
@ -366,10 +366,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_use_last_event_reminders"
|
||||
@ -377,8 +377,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/use_last_event_reminders"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -389,18 +389,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_default_reminder_1_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/default_reminder_1"/>
|
||||
@ -424,18 +424,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_default_reminder_2_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/default_reminder_2"/>
|
||||
@ -459,18 +459,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_default_reminder_3_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/default_reminder_3"/>
|
||||
@ -499,8 +499,8 @@
|
||||
android:id="@+id/caldav_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/caldav"
|
||||
android:textAllCaps="true"
|
||||
@ -512,10 +512,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_caldav_sync"
|
||||
@ -523,21 +523,44 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/caldav_sync"/>
|
||||
|
||||
</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
|
||||
android:id="@+id/settings_manage_synced_calendars_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:visibility="gone">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
@ -562,8 +585,8 @@
|
||||
android:id="@+id/weekly_view_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/weekly_view"
|
||||
android:textAllCaps="true"
|
||||
@ -575,18 +598,18 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_start_weekly_at_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/start_day_at"/>
|
||||
@ -609,18 +632,18 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_end_weekly_at_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/end_day_at"/>
|
||||
@ -649,8 +672,8 @@
|
||||
android:id="@+id/monthly_view_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/monthly_view"
|
||||
android:textAllCaps="true"
|
||||
@ -662,10 +685,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_week_numbers"
|
||||
@ -673,8 +696,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/week_numbers"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -684,10 +707,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_show_grid"
|
||||
@ -695,8 +718,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/show_a_grid"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -712,8 +735,8 @@
|
||||
android:id="@+id/simple_event_list_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/event_lists"
|
||||
android:textAllCaps="true"
|
||||
@ -725,10 +748,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_replace_description"
|
||||
@ -736,8 +759,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/replace_description_with_location"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -747,18 +770,18 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_display_past_events_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+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:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/display_past_events"/>
|
||||
@ -787,8 +810,8 @@
|
||||
android:id="@+id/widgets_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/widgets"
|
||||
android:textAllCaps="true"
|
||||
@ -799,18 +822,18 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_font_size_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+id/settings_font_size"
|
||||
android:layout_toStartOf="@+id/settings_font_size"
|
||||
android:layout_toLeftOf="@+id/settings_font_size"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingRight="@dimen/medium_margin"
|
||||
android:text="@string/font_size"/>
|
||||
@ -828,23 +851,57 @@
|
||||
|
||||
</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
|
||||
android:id="@+id/settings_customize_widget_colors_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_customize_widget_colors_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/customize_widget_colors"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -860,8 +917,8 @@
|
||||
android:id="@+id/events_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/events"
|
||||
android:textAllCaps="true"
|
||||
@ -873,10 +930,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_dim_past_events"
|
||||
@ -884,8 +941,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/dim_past_events"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@ -895,10 +952,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
android:paddingBottom="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_delete_all_events"
|
||||
|
@ -12,8 +12,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
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
|
||||
android:id="@+id/export_events_folder_label"
|
||||
@ -26,11 +26,11 @@
|
||||
android:id="@+id/export_events_folder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@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:paddingTop="@dimen/small_margin"/>
|
||||
android:paddingBottom="@dimen/small_margin"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/export_events_filename_label"
|
||||
@ -43,18 +43,18 @@
|
||||
android:id="@+id/export_events_filename"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@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:paddingRight="@dimen/small_margin"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
android:id="@+id/export_events_checkbox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/small_margin"
|
||||
android:paddingTop="@dimen/small_margin"
|
||||
android:paddingBottom="@dimen/small_margin"
|
||||
android:text="@string/export_past_events_too"/>
|
||||
|
||||
<LinearLayout
|
||||
@ -68,8 +68,8 @@
|
||||
android:id="@+id/export_events_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
|
||||
@ -80,7 +80,7 @@
|
||||
android:text="@string/include_event_types"
|
||||
android:textSize="@dimen/smaller_text_size"/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||
android:id="@+id/export_events_types_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?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:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/filter_event_types_list"
|
||||
|
43
app/src/main/res/layout/dialog_select_event_type_color.xml
Normal file
43
app/src/main/res/layout/dialog_select_event_type_color.xml
Normal 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>
|
@ -5,7 +5,7 @@
|
||||
android:id="@+id/search"
|
||||
android:icon="@drawable/ic_search"
|
||||
android:title="@string/search"
|
||||
app:actionViewClass="android.support.v7.widget.SearchView"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="collapseActionView|ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/go_to_today"
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<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="syncing">Sinxronlaşdırılır…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">C\'hwitadenn en ur embann an deiziataer</string>
|
||||
<string name="syncing">O c\'houbredañ…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -25,7 +25,7 @@
|
||||
<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_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="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>
|
||||
|
||||
<!-- Anniversaries -->
|
||||
<string name="anniversaries">Anniversaries</string>
|
||||
<string name="add_anniversaries">Add contact anniversaries</string>
|
||||
<string name="no_anniversaries">No anniversaries have been found</string>
|
||||
<string name="anniversaries_added">Anniversaries added successfully</string>
|
||||
<string name="anniversaries">Výročí</string>
|
||||
<string name="add_anniversaries">Přidat výročí</string>
|
||||
<string name="no_anniversaries">Žádné výročí nebylo nalezeno</string>
|
||||
<string name="anniversaries_added">Výročí bylo úspěšně přidáno</string>
|
||||
|
||||
<!-- Event Reminders -->
|
||||
<string name="reminder">Připomenutí</string>
|
||||
<string name="reminder">Připomínka</string>
|
||||
<string name="before">před</string>
|
||||
<string name="add_another_reminder">Přidat další připomenutí</string>
|
||||
<string name="event_reminders">Event reminders</string>
|
||||
<string name="add_another_reminder">Přidat další připomínku</string>
|
||||
<string name="event_reminders">Připomínky událostí</string>
|
||||
|
||||
<!-- Export / Import -->
|
||||
<string name="import_events">Import 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="export_events_to_ics">Exportovat kalendář do souboru .ics</string>
|
||||
<string name="default_event_type">Defaultní typ události</string>
|
||||
<string name="export_past_events_too">Export i minulých událostí</string>
|
||||
<string name="default_event_type">Přednastavený typ události</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="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 -->
|
||||
<string name="title">Název</string>
|
||||
@ -141,8 +141,8 @@
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="manage_event_types">Správa typů událostí</string>
|
||||
<string name="start_day_at">Počátek dne v</string>
|
||||
<string name="end_day_at">Konec dne v</string>
|
||||
<string name="start_day_at">Počátek dne</string>
|
||||
<string name="end_day_at">Konec dne</string>
|
||||
<string name="week_numbers">Zobrazovat číslo týdne</string>
|
||||
<string name="vibrate">Vibrovat</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="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="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="dim_past_events">Smazat minulé události</string>
|
||||
<string name="events">Události</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="notification_stream">Notifikace</string>
|
||||
<string name="ring_stream">Zvonek</string>
|
||||
<string name="use_last_event_reminders">Use the last events\' reminders as the default for new event</string>
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</string>
|
||||
<string name="default_reminder_3">Default reminder 3</string>
|
||||
<string name="ring_stream">Vyzvánění</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">Výchozí připomenutí 1</string>
|
||||
<string name="default_reminder_2">Výchozí připomenutí 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Editování kalendáře se nezdařilo</string>
|
||||
<string name="syncing">Synchronizuji…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
@ -202,15 +205,15 @@
|
||||
<string name="sample_title_5">na kafe</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">How can I remove the holidays imported via the \"Add holidays\" button?</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,
|
||||
long press the given event type and delete it by selecting the trashbin.</string>
|
||||
<string name="faq_2_title">Can I sync my events via Google Calendar, or other service supporting CalDAV?</string>
|
||||
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers.
|
||||
In case you want to synchronize a Google calendar, their official Calendar app will do the job. For other calendars you will need a third party sync adapter, for example 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_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings,
|
||||
pressing the \"Audio stream used by reminders\" option and changing it to a different value. If it still won\'t work, check your sound settings, if the particular stream isn\'t muted.</string>
|
||||
<string name="faq_1_title">Jak mohu odstranit svátky importované přes tlačítko \"Přidat svátek\"?</string>
|
||||
<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í ->
|
||||
dlouze podržte daný typ události a stisknete tlačítko s ikonou koše pro odstranění.</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">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.
|
||||
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">Vizuálně vidím připomínku, ale neslyším žádný zvuk. Co mám dělat?</string>
|
||||
<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,
|
||||
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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Påmindelse 1</string>
|
||||
<string name="default_reminder_2">Påmindelse 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Redigering af kalenderen mislykkedes</string>
|
||||
<string name="syncing">Synkroniserer…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Standarderinnerung 1</string>
|
||||
<string name="default_reminder_2">Standarderinnerung 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Ändern des Kalenders fehlgeschlagen</string>
|
||||
<string name="syncing">Wird synchronisiert…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Η επεξεργασία του ημερολογίου απέτυχε</string>
|
||||
<string name="syncing">Συγχρονισμός…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Edición de calendario fallida</string>
|
||||
<string name="syncing">Sincronizando…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Édition du calendrier échouée</string>
|
||||
<string name="syncing">Synchronisation…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Fallou a edición do calendario</string>
|
||||
<string name="syncing">Sincronizando…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -169,6 +169,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -181,6 +183,7 @@
|
||||
<string name="editing_calendar_failed">Editing calendar failed</string>
|
||||
<string name="syncing">Syncing…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Uređivanje kalendara nije uspjelo</string>
|
||||
<string name="syncing">Sinkronizacija…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Editing calendar failed</string>
|
||||
<string name="syncing">Syncing…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -19,15 +19,15 @@
|
||||
<string name="event">Evento</string>
|
||||
<string name="edit_event">Modifica evento</string>
|
||||
<string name="new_event">Nuovo evento</string>
|
||||
<string name="create_new_event">Create a new event</string>
|
||||
<string name="duplicate_event">Duplicate event</string>
|
||||
<string name="create_new_event">Crea un nuovo evento</string>
|
||||
<string name="duplicate_event">Duplica evento</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_updated">Evento aggiornato correttamente</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="public_event_notification_text">An event is upcoming</string>
|
||||
<string name="please_fill_location">Riempire la posizione per essere mostrata su una mappa</string>
|
||||
<string name="public_event_notification_text">Un evento è imminente</string>
|
||||
|
||||
<!-- Event Repetition -->
|
||||
<string name="repetition">Ripeti</string>
|
||||
@ -44,24 +44,24 @@
|
||||
<string name="event_is_repeatable">L\'evento è ripetibile</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_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="update_one_only">Aggiorna solamente l\'occorenza selezionata</string>
|
||||
<string name="update_all_occurrences">Aggiorna tutte le occorenze</string>
|
||||
<string name="repeat_till_date">Ripeti fino a una data</string>
|
||||
<string name="stop_repeating_after_x">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="times">volte</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="selected_days">On selected days</string>
|
||||
<string name="the_same_day">Lo stesso 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_last_day_monthly">Repeat on the last day of the month</string>
|
||||
<string name="repeat_on_the_same_day_yearly">Repeat on the same day every year</string>
|
||||
<string name="repeat_every_m">Repeat every</string>
|
||||
<string name="repeat_on_the_last_day_monthly">Ripeti l\'ultimo giorno del mese</string>
|
||||
<string name="repeat_on_the_same_day_yearly">Ripeti lo stesso giorno ogni anno</string>
|
||||
<string name="repeat_every_m">Ripeti ogni</string>
|
||||
<string name="every_m">Tutti</string>
|
||||
<string name="first_m">primo</string>
|
||||
<string name="second_m">secondo</string>
|
||||
@ -106,13 +106,13 @@
|
||||
<string name="export_past_events_too">Esporta anche eventi passati</string>
|
||||
<string name="include_event_types">Includi tipi evento</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 -->
|
||||
<string name="title">Titolo</string>
|
||||
<string name="location">Posizione</string>
|
||||
<string name="description">Descrizione</string>
|
||||
<string name="all_day">All-day</string>
|
||||
<string name="all_day">Tutto il giorno</string>
|
||||
|
||||
<!-- Weekly view -->
|
||||
<string name="week">Settimana</string>
|
||||
@ -126,8 +126,8 @@
|
||||
<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="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="remove_affected_events">Permanently remove affected events</string>
|
||||
<string name="move_events_into_default">Muovi gli eventi segnati con il tipo di eventi predefinito</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>
|
||||
|
||||
<!-- Holidays -->
|
||||
@ -141,92 +141,95 @@
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="manage_event_types">Gestisci tipi evento</string>
|
||||
<string name="start_day_at">Start day at</string>
|
||||
<string name="end_day_at">End day at</string>
|
||||
<string name="start_day_at">Il giorno inizia alle</string>
|
||||
<string name="end_day_at">Il giorno finisce alle</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="no_ringtone_picker">No app capable of setting ringtone found</string>
|
||||
<string name="no_ringtone_selected">None</string>
|
||||
<string name="no_ringtone_picker">Non è stata trovata nessuna applicazione per impostare la suoneria</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="caldav_sync">CalDAV sync</string>
|
||||
<string name="event_lists">Event lists</string>
|
||||
<string name="caldav_sync">Sincronizzazione CalDAV</string>
|
||||
<string name="event_lists">Liste degli eventi</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="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="show_a_grid">Show a grid</string>
|
||||
<string name="loop_reminders">Loop reminders until dismissed</string>
|
||||
<string name="dim_past_events">Dim past events</string>
|
||||
<string name="events">Events</string>
|
||||
<string name="reminder_stream">Audio stream used by reminders</string>
|
||||
<string name="system_stream">System</string>
|
||||
<string name="alarm_stream">Alarm</string>
|
||||
<string name="notification_stream">Notification</string>
|
||||
<string name="ring_stream">Ring</string>
|
||||
<string name="use_last_event_reminders">Use the last events\' reminders as the default for new event</string>
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</string>
|
||||
<string name="default_reminder_3">Default reminder 3</string>
|
||||
<string name="show_a_grid">Mostra una griglia</string>
|
||||
<string name="loop_reminders">Manda in loop i promemoria finchè non vengono rimossi</string>
|
||||
<string name="dim_past_events">Rimuovi gli eventi passati</string>
|
||||
<string name="events">Eventi</string>
|
||||
<string name="reminder_stream">Canale audio utilizzato per i promomemoria</string>
|
||||
<string name="system_stream">Sistema</string>
|
||||
<string name="alarm_stream">Allarme</string>
|
||||
<string name="notification_stream">Notitica</string>
|
||||
<string name="ring_stream">Squillo</string>
|
||||
<string name="use_last_event_reminders">Utilizza l\'ultimo promemoria come predefinito per nuovi eventi</string>
|
||||
<string name="default_reminder_1">Promemoria predefinito 1</string>
|
||||
<string name="default_reminder_2">Promemoria predefinito 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
<string name="select_caldav_calendars">Select calendars to sync</string>
|
||||
<string name="manage_synced_calendars">Manage synced calendars</string>
|
||||
<string name="store_locally_only">Store locally only</string>
|
||||
<string name="refresh_caldav_calendars">Refresh CalDAV calendars</string>
|
||||
<string name="refreshing">Refreshing…</string>
|
||||
<string name="refreshing_complete">Refreshing complete</string>
|
||||
<string name="editing_calendar_failed">Editing calendar failed</string>
|
||||
<string name="syncing">Syncing…</string>
|
||||
<string name="synchronization_completed">Sync completed</string>
|
||||
<string name="select_caldav_calendars">Seleziona un calendario da sincronizzare</string>
|
||||
<string name="manage_synced_calendars">Gestisci i calendari sincronizzati</string>
|
||||
<string name="store_locally_only">Salva solamente in locale</string>
|
||||
<string name="refresh_caldav_calendars">Aggiorna i calendari CalDAV</string>
|
||||
<string name="refreshing">Aggiornamento in corso…</string>
|
||||
<string name="refreshing_complete">Aggiornamento completato</string>
|
||||
<string name="editing_calendar_failed">Impossibile modificare il calendario</string>
|
||||
<string name="syncing">Sincronizzazione in corso…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
<string name="monday_alt">Monday</string>
|
||||
<string name="tuesday_alt">Tuesday</string>
|
||||
<string name="wednesday_alt">Wednesday</string>
|
||||
<string name="thursday_alt">Thursday</string>
|
||||
<string name="friday_alt">Friday</string>
|
||||
<string name="saturday_alt">Saturday</string>
|
||||
<string name="sunday_alt">Sunday</string>
|
||||
<string name="monday_alt">Lunedì</string>
|
||||
<string name="tuesday_alt">Martedì</string>
|
||||
<string name="wednesday_alt">Mercoledì</string>
|
||||
<string name="thursday_alt">Giovedì</string>
|
||||
<string name="friday_alt">Venerdì</string>
|
||||
<string name="saturday_alt">Sabato</string>
|
||||
<string name="sunday_alt">Domenica</string>
|
||||
|
||||
<!-- List widget config example events -->
|
||||
<string name="sample_title_1">Workout</string>
|
||||
<string name="sample_description_1">Leg day</string>
|
||||
<string name="sample_title_2">Meeting with John</string>
|
||||
<string name="sample_description_2">In Rockstone garden</string>
|
||||
<string name="sample_title_3">Library</string>
|
||||
<string name="sample_title_4">Lunch with Mary</string>
|
||||
<string name="sample_description_4">In the Plaza</string>
|
||||
<string name="sample_title_5">Coffee time</string>
|
||||
<string name="sample_title_1">Allenamento</string>
|
||||
<string name="sample_description_1">Gambe</string>
|
||||
<string name="sample_title_2">Incontro con Giovanni</string>
|
||||
<string name="sample_description_2">Nel giardino di Milano</string>
|
||||
<string name="sample_title_3">Liberia</string>
|
||||
<string name="sample_title_4">Pranzo con Maria</string>
|
||||
<string name="sample_description_4">Nel ristorante Magione</string>
|
||||
<string name="sample_title_5">Pausa caffè</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">How can I remove the holidays imported via the \"Add holidays\" button?</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,
|
||||
long press the given event type and delete it by selecting the trashbin.</string>
|
||||
<string name="faq_2_title">Can I sync my events via Google Calendar, or other service supporting CalDAV?</string>
|
||||
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers.
|
||||
In case you want to synchronize a Google calendar, their official Calendar app will do the job. For other calendars you will need a third party sync adapter, for example 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_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings,
|
||||
pressing the \"Audio stream used by reminders\" option and changing it to a different value. If it still won\'t work, check your sound settings, if the particular stream isn\'t muted.</string>
|
||||
<string name="faq_1_title">Come posso rimuovere i le festività importate tramite il pulsante \"Aggiungi festività\"?</string>
|
||||
<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,
|
||||
tenere premuto sul tipo desiderato ed eliminaro selezionando il cestino.</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">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 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">Visualizzo i promemoria, ma non sento l\'audio. Cosa posso fare?</string>
|
||||
<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,
|
||||
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 -->
|
||||
<!-- 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">
|
||||
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>
|
||||
|
||||
<!--
|
||||
|
@ -169,6 +169,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -181,6 +183,7 @@
|
||||
<string name="editing_calendar_failed">Editing calendar failed</string>
|
||||
<string name="syncing">Syncing…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">カレンダーを編集できませんでした</string>
|
||||
<string name="syncing">同期中…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">변경 실패</string>
|
||||
<string name="syncing">동기화중…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Kalendoriaus redagavimas nepavyko</string>
|
||||
<string name="syncing">Sinchronizuojama…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Redigering av kalender feilet</string>
|
||||
<string name="syncing">Synkroniserer…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Standaardherinnering 1</string>
|
||||
<string name="default_reminder_2">Standaardherinnering 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Agenda bijwerken mislukt</string>
|
||||
<string name="syncing">Synchroniseren…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Redigering av kalender feilet</string>
|
||||
<string name="syncing">Synkroniserer…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Edytowanie kalendarza nie powiodło się</string>
|
||||
<string name="syncing">Synchronizowanie…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">A edição do calendário falhou</string>
|
||||
<string name="syncing">Sincronizando…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -164,10 +164,12 @@
|
||||
<string name="alarm_stream">Alarme</string>
|
||||
<string name="notification_stream">Notificação</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="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</string>
|
||||
<string name="default_reminder_3">Default reminder 3</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">Lembrete 1</string>
|
||||
<string name="default_reminder_2">Lembrete 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Falha ao editar o calendário</string>
|
||||
<string name="syncing">A sincronizar…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Напоминание по умолчанию 1</string>
|
||||
<string name="default_reminder_2">Напоминание по умолчанию 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Не удалось изменить календарь</string>
|
||||
<string name="syncing">Синхронизация…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Predvolená pripomienka 1</string>
|
||||
<string name="default_reminder_2">Predvolená pripomienka 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Úprava kalendára zlyhala</string>
|
||||
<string name="syncing">Synchronizujem…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Det gick inte att redigera kalendern</string>
|
||||
<string name="syncing">Synkroniserar…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Takvim düzenlenme başarısız</string>
|
||||
<string name="syncing">Senkronize ediliyor…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -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>
|
@ -49,7 +49,7 @@
|
||||
<string name="update_one_only">只更新選擇的事件</string>
|
||||
<string name="update_all_occurrences">更新全部事件</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="times">次</string>
|
||||
<string name="repeat">重複</string>
|
||||
@ -164,10 +164,12 @@
|
||||
<string name="alarm_stream">鬧鐘</string>
|
||||
<string name="notification_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="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</string>
|
||||
<string name="default_reminder_3">Default reminder 3</string>
|
||||
<string name="use_last_event_reminders">使用最後活動的提醒作為新活動的預設</string>
|
||||
<string name="default_reminder_1">預設提醒1</string>
|
||||
<string name="default_reminder_2">預設提醒2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">編輯行事曆失敗</string>
|
||||
<string name="syncing">同步中…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -168,6 +168,8 @@
|
||||
<string name="default_reminder_1">Default reminder 1</string>
|
||||
<string name="default_reminder_2">Default reminder 2</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 -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
@ -180,6 +182,7 @@
|
||||
<string name="editing_calendar_failed">Editing calendar failed</string>
|
||||
<string name="syncing">Syncing…</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user