Merge pull request #34 from SimpleMobileTools/master

upd
This commit is contained in:
solokot
2020-11-04 18:25:28 +03:00
committed by GitHub
148 changed files with 2276 additions and 970 deletions

View File

@@ -1,6 +1,80 @@
Changelog Changelog
========== ==========
Version 6.11.2 *(2020-11-03)*
----------------------------
* Fixed some weekly view related glitches
* Do not always show "Go to today" at the Event list view
* Added some other UX, translation and stability improvements
Version 6.11.1 *(2020-10-28)*
----------------------------
* Fixed a glitch with some misplaced events on the weekly view
* Allow importing birthdays and anniversaries of contacts privately stored in Simple Contacts Pro
Version 6.11.0 *(2020-10-25)*
----------------------------
* Added Print support
* Added some stability and translation improvements
Version 6.10.3 *(2020-09-28)*
----------------------------
* Fixed some glitches at importing events from .ics files
* Added a few UX improvements here and there
Version 6.10.2 *(2020-09-19)*
----------------------------
* Adding a crashfix
Version 6.10.1 *(2020-09-19)*
----------------------------
* Adding some translation and UX improvements
Version 6.10.0 *(2020-08-08)*
----------------------------
* Open the daily view at clicking on a day at the monthly widget
* Go back to the search results at opening an event and using Back
* Added some translation, stability and UX improvements
Version 6.9.7 *(2020-07-06)*
----------------------------
* Fixed some weekly view related glitches
* Added some stability and translation improvements
Version 6.9.6 *(2020-06-12)*
----------------------------
* Fixing a glitch with zoomed out weekly view
Version 6.9.5 *(2020-06-10)*
----------------------------
* Allow changing the amount of days shown at the weekly view
* Show a Save / Discard prompt at leaving an edited event (by fnrngg)
* Some translation and stability improvements
Version 6.9.4 *(2020-05-25)*
----------------------------
* Allow landscape orientation on any device
* Use the nicer new app icon on lower Android versions
* Some UI, stability and translation improvements
Version 6.9.3 *(2020-05-05)*
----------------------------
* Added a 1x1 widget showing the current date
* Made all widget corners round to make them nicer
* Added some translation and other smaller improvements here and there
Version 6.9.2 *(2020-04-17)* Version 6.9.2 *(2020-04-17)*
---------------------------- ----------------------------

View File

@@ -18,8 +18,8 @@ android {
applicationId "com.simplemobiletools.calendar.pro" applicationId "com.simplemobiletools.calendar.pro"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 175 versionCode 187
versionName "6.9.2" versionName "6.11.2"
multiDexEnabled true multiDexEnabled true
setProperty("archivesBaseName", "calendar") setProperty("archivesBaseName", "calendar")
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
@@ -64,10 +64,12 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:5.27.5' implementation 'com.simplemobiletools:commons:5.31.23'
implementation 'joda-time:joda-time:2.10.1' implementation 'joda-time:joda-time:2.10.1'
implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation "androidx.print:print:1.0.0"
kapt 'androidx.room:room-compiler:2.2.5' kapt 'androidx.room:room-compiler:2.2.5'
implementation 'androidx.room:room-runtime:2.2.5' implementation 'androidx.room:room-runtime:2.2.5'

View File

@@ -1,16 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="com.simplemobiletools.calendar.pro" package="com.simplemobiletools.calendar.pro"
android:installLocation="auto"> android:installLocation="auto">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_CALENDAR"/> <uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR"/> <uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:name="android.permission.WRITE_EXTERNAL_STORAGE"
@@ -18,11 +17,11 @@
<uses-permission <uses-permission
android:name="android.permission.USE_FINGERPRINT" android:name="android.permission.USE_FINGERPRINT"
tools:node="remove"/> tools:node="remove" />
<uses-feature <uses-feature
android:name="android.hardware.faketouch" android:name="android.hardware.faketouch"
android:required="false"/> android:required="false" />
<application <application
android:name=".App" android:name=".App"
@@ -36,43 +35,43 @@
<activity <activity
android:name=".activities.SplashActivity" android:name=".activities.SplashActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:theme="@style/SplashTheme"/> android:theme="@style/SplashTheme" />
<activity <activity
android:name=".activities.MainActivity" android:name=".activities.MainActivity"
android:launchMode="singleTask"> android:launchMode="singleTask">
<meta-data <meta-data
android:name="android.app.default_searchable" android:name="android.app.default_searchable"
android:resource="@xml/searchable"/> android:resource="@xml/searchable" />
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEARCH"/> <action android:name="android.intent.action.SEARCH" />
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content"/> <data android:scheme="content" />
<data android:scheme="file"/> <data android:scheme="file" />
<data android:mimeType="text/x-vcalendar"/> <data android:mimeType="text/x-vcalendar" />
<data android:mimeType="text/calendar"/> <data android:mimeType="text/calendar" />
<data android:mimeType="application/ics"/> <data android:mimeType="application/ics" />
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="time/epoch"/> <data android:mimeType="time/epoch" />
<data android:host="com.android.calendar"/> <data android:host="com.android.calendar" />
<data android:scheme="content"/> <data android:scheme="content" />
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/event"/> <data android:mimeType="vnd.android.cursor.item/event" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -81,7 +80,7 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/MyWidgetConfigTheme"> android:theme="@style/MyWidgetConfigTheme">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -90,7 +89,7 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/MyWidgetConfigTheme"> android:theme="@style/MyWidgetConfigTheme">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -99,29 +98,29 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/MyWidgetConfigTheme"> android:theme="@style/MyWidgetConfigTheme">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity
android:name="com.simplemobiletools.commons.activities.AboutActivity" android:name="com.simplemobiletools.commons.activities.AboutActivity"
android:label="@string/about" android:label="@string/about"
android:parentActivityName=".activities.MainActivity"/> android:parentActivityName=".activities.MainActivity" />
<activity <activity
android:name="com.simplemobiletools.commons.activities.CustomizationActivity" android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
android:label="@string/customize_colors" android:label="@string/customize_colors"
android:parentActivityName=".activities.SettingsActivity"/> android:parentActivityName=".activities.SettingsActivity" />
<activity <activity
android:name="com.simplemobiletools.commons.activities.LicenseActivity" android:name="com.simplemobiletools.commons.activities.LicenseActivity"
android:label="@string/third_party_licences" android:label="@string/third_party_licences"
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/> android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity" />
<activity <activity
android:name="com.simplemobiletools.commons.activities.FAQActivity" android:name="com.simplemobiletools.commons.activities.FAQActivity"
android:label="@string/frequently_asked_questions" android:label="@string/frequently_asked_questions"
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/> android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity" />
<activity <activity
android:name=".activities.EventActivity" android:name=".activities.EventActivity"
@@ -129,19 +128,19 @@
android:parentActivityName=".activities.MainActivity"> android:parentActivityName=".activities.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.EDIT"/> <action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.INSERT"/> <action android:name="android.intent.action.INSERT" />
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/event"/> <data android:mimeType="vnd.android.cursor.item/event" />
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.EDIT"/> <action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.INSERT"/> <action android:name="android.intent.action.INSERT" />
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/event"/> <data android:mimeType="vnd.android.cursor.dir/event" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -160,28 +159,28 @@
<activity <activity
android:name=".activities.SettingsActivity" android:name=".activities.SettingsActivity"
android:label="@string/settings" android:label="@string/settings"
android:parentActivityName=".activities.MainActivity"/> android:parentActivityName=".activities.MainActivity" />
<activity <activity
android:name=".activities.ManageEventTypesActivity" android:name=".activities.ManageEventTypesActivity"
android:label="@string/event_types" android:label="@string/event_types"
android:parentActivityName=".activities.SettingsActivity"/> android:parentActivityName=".activities.SettingsActivity" />
<activity <activity
android:name=".activities.SnoozeReminderActivity" android:name=".activities.SnoozeReminderActivity"
android:theme="@style/Theme.Transparent"/> android:theme="@style/Theme.Transparent" />
<receiver <receiver
android:name=".helpers.MyWidgetMonthlyProvider" android:name=".helpers.MyWidgetMonthlyProvider"
android:icon="@drawable/img_widget_monthly_preview" android:icon="@drawable/img_widget_monthly_preview"
android:label="@string/widget_monthly"> android:label="@string/widget_monthly">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter> </intent-filter>
<meta-data <meta-data
android:name="android.appwidget.provider" android:name="android.appwidget.provider"
android:resource="@xml/widget_monthly_info"/> android:resource="@xml/widget_monthly_info" />
</receiver> </receiver>
<receiver <receiver
@@ -189,12 +188,12 @@
android:icon="@drawable/img_widget_list_preview" android:icon="@drawable/img_widget_list_preview"
android:label="@string/widget_list"> android:label="@string/widget_list">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter> </intent-filter>
<meta-data <meta-data
android:name="android.appwidget.provider" android:name="android.appwidget.provider"
android:resource="@xml/widget_list_info"/> android:resource="@xml/widget_list_info" />
</receiver> </receiver>
<receiver <receiver
@@ -202,38 +201,38 @@
android:icon="@drawable/img_widget_date_preview" android:icon="@drawable/img_widget_date_preview"
android:label="@string/widget_todays_date"> android:label="@string/widget_todays_date">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter> </intent-filter>
<meta-data <meta-data
android:name="android.appwidget.provider" android:name="android.appwidget.provider"
android:resource="@xml/widget_date_info"/> android:resource="@xml/widget_date_info" />
</receiver> </receiver>
<service <service
android:name=".services.WidgetService" android:name=".services.WidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"/> android:permission="android.permission.BIND_REMOTEVIEWS" />
<service <service
android:name=".services.WidgetServiceEmpty" android:name=".services.WidgetServiceEmpty"
android:permission="android.permission.BIND_REMOTEVIEWS"/> android:permission="android.permission.BIND_REMOTEVIEWS" />
<service android:name=".services.SnoozeService"/> <service android:name=".services.SnoozeService" />
<service <service
android:name=".jobs.CalDAVUpdateListener" android:name=".jobs.CalDAVUpdateListener"
android:exported="true" android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE"/> android:permission="android.permission.BIND_JOB_SERVICE" />
<receiver android:name=".receivers.NotificationReceiver"/> <receiver android:name=".receivers.NotificationReceiver" />
<receiver android:name=".receivers.CalDAVSyncReceiver"/> <receiver android:name=".receivers.CalDAVSyncReceiver" />
<receiver android:name=".receivers.BootCompletedReceiver"> <receiver android:name=".receivers.BootCompletedReceiver">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON"/> <action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter> </intent-filter>
</receiver> </receiver>
@@ -244,7 +243,7 @@
android:grantUriPermissions="true"> android:grantUriPermissions="true">
<meta-data <meta-data
android:name="android.support.FILE_PROVIDER_PATHS" android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/> android:resource="@xml/provider_paths" />
</provider> </provider>
<activity-alias <activity-alias
@@ -255,8 +254,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -268,8 +267,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -281,8 +280,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -294,8 +293,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -307,8 +306,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -320,8 +319,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -333,8 +332,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -346,8 +345,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -359,8 +358,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -372,8 +371,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -385,8 +384,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -398,8 +397,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -411,8 +410,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -424,8 +423,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -436,8 +435,8 @@
android:roundIcon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher"
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -449,8 +448,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -462,8 +461,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -475,8 +474,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
@@ -488,8 +487,8 @@
android:targetActivity=".activities.SplashActivity"> android:targetActivity=".activities.SplashActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity-alias> </activity-alias>
</application> </application>

View File

@@ -156,7 +156,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Puthandu SUMMARY:Tamil Puthandu/Ugadi/Vishu
UID:2002-04-14-1 UID:2002-04-14-1
DTSTART;VALUE=DATE:20160414 DTSTART;VALUE=DATE:20160414
DTEND;VALUE=DATE:20160415 DTEND;VALUE=DATE:20160415
@@ -197,6 +197,14 @@ RRULE:FREQ=YEARLY;INTERVAL=1
EXDATE:20180420} EXDATE:20180420}
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:May Day/Labour Day
UID:1889-05-01-1
DTSTART;VALUE=DATE:20160501
DTEND;VALUE=DATE:20160502
STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT
BEGIN:VEVENT
SUMMARY:Idu'l Fitr SUMMARY:Idu'l Fitr
UID:2002-12-06-1 UID:2002-12-06-1
DTSTART;VALUE=DATE:20160507 DTSTART;VALUE=DATE:20160507

View File

@@ -1,363 +1,363 @@
BEGIN:VCALENDAR BEGIN:VCALENDAR
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:8ea296fc-d77c-4daa-bb35-7ef0f31bbd35 UID:8ea296fc-d77c-4daa-bb35-7ef0f31bbd35
DTSTART;VALUE=DATE:20170615 DTSTART;VALUE=DATE:20170615
DTEND;VALUE=DATE:20170616 DTEND;VALUE=DATE:20170616
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:efec0135-5fb2-4fc3-b7df-9ee7253150b6 UID:efec0135-5fb2-4fc3-b7df-9ee7253150b6
DTSTART;VALUE=DATE:20180213 DTSTART;VALUE=DATE:20180213
DTEND;VALUE=DATE:20180214 DTEND;VALUE=DATE:20180214
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:5ac77215-3c32-4ea6-94d8-c17e39d123cb UID:5ac77215-3c32-4ea6-94d8-c17e39d123cb
DTSTART;VALUE=DATE:20180330 DTSTART;VALUE=DATE:20180330
DTEND;VALUE=DATE:20180331 DTEND;VALUE=DATE:20180331
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:4ef32d8f-eb43-4225-a035-4cc727056a5e UID:4ef32d8f-eb43-4225-a035-4cc727056a5e
DTSTART;VALUE=DATE:20180401 DTSTART;VALUE=DATE:20180401
DTEND;VALUE=DATE:20180402 DTEND;VALUE=DATE:20180402
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:b6eb9c00-5d32-46ad-af25-1e4ceb7e24d4 UID:b6eb9c00-5d32-46ad-af25-1e4ceb7e24d4
DTSTART;VALUE=DATE:20180531 DTSTART;VALUE=DATE:20180531
DTEND;VALUE=DATE:20180601 DTEND;VALUE=DATE:20180601
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:ebd07183-101a-4e8a-b630-084010395c75 UID:ebd07183-101a-4e8a-b630-084010395c75
DTSTART;VALUE=DATE:20190305 DTSTART;VALUE=DATE:20190305
DTEND;VALUE=DATE:20190306 DTEND;VALUE=DATE:20190306
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:9319a404-2caa-4860-ab8e-7250c4b26c70 UID:9319a404-2caa-4860-ab8e-7250c4b26c70
DTSTART;VALUE=DATE:20190419 DTSTART;VALUE=DATE:20190419
DTEND;VALUE=DATE:20190420 DTEND;VALUE=DATE:20190420
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:c8abc003-8656-4c03-b463-281757c9d6c7 UID:c8abc003-8656-4c03-b463-281757c9d6c7
DTSTART;VALUE=DATE:20190421 DTSTART;VALUE=DATE:20190421
DTEND;VALUE=DATE:20190422 DTEND;VALUE=DATE:20190422
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:5adec9d3-8289-4590-a7d7-15d3beb199e7 UID:5adec9d3-8289-4590-a7d7-15d3beb199e7
DTSTART;VALUE=DATE:20190620 DTSTART;VALUE=DATE:20190620
DTEND;VALUE=DATE:20190621 DTEND;VALUE=DATE:20190621
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:9134149e-787b-4841-802e-6a1b68914bff UID:9134149e-787b-4841-802e-6a1b68914bff
DTSTART;VALUE=DATE:20200225 DTSTART;VALUE=DATE:20200225
DTEND;VALUE=DATE:20200226 DTEND;VALUE=DATE:20200226
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:07d98915-7fa6-4591-9257-311a35109bf9 UID:07d98915-7fa6-4591-9257-311a35109bf9
DTSTART;VALUE=DATE:20200410 DTSTART;VALUE=DATE:20200410
DTEND;VALUE=DATE:20200411 DTEND;VALUE=DATE:20200411
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:4bf48b56-7499-4d00-9ee7-6047a2ca8e36 UID:4bf48b56-7499-4d00-9ee7-6047a2ca8e36
DTSTART;VALUE=DATE:20200412 DTSTART;VALUE=DATE:20200412
DTEND;VALUE=DATE:20200413 DTEND;VALUE=DATE:20200413
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:f8e5c7e1-8355-4681-ade1-d403e0b6ca23 UID:f8e5c7e1-8355-4681-ade1-d403e0b6ca23
DTSTART;VALUE=DATE:20200611 DTSTART;VALUE=DATE:20200611
DTEND;VALUE=DATE:20200612 DTEND;VALUE=DATE:20200612
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:c1bcf217-b07e-471b-bf98-a8eaa253b4fb UID:c1bcf217-b07e-471b-bf98-a8eaa253b4fb
DTSTART;VALUE=DATE:20210216 DTSTART;VALUE=DATE:20210216
DTEND;VALUE=DATE:20210217 DTEND;VALUE=DATE:20210217
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:baa729bb-7145-4cbc-bbd7-00e752ee5b5f UID:baa729bb-7145-4cbc-bbd7-00e752ee5b5f
DTSTART;VALUE=DATE:20210402 DTSTART;VALUE=DATE:20210402
DTEND;VALUE=DATE:20210403 DTEND;VALUE=DATE:20210403
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:0ef18ed2-0318-4619-a08f-9bace518ea6b UID:0ef18ed2-0318-4619-a08f-9bace518ea6b
DTSTART;VALUE=DATE:20210404 DTSTART;VALUE=DATE:20210404
DTEND;VALUE=DATE:20210405 DTEND;VALUE=DATE:20210405
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:b71bfbee-dba7-4c79-bf07-a2fc4643885e UID:b71bfbee-dba7-4c79-bf07-a2fc4643885e
DTSTART;VALUE=DATE:20210603 DTSTART;VALUE=DATE:20210603
DTEND;VALUE=DATE:20210604 DTEND;VALUE=DATE:20210604
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:34393672-a43f-4d16-85ec-e2783be1a05c UID:34393672-a43f-4d16-85ec-e2783be1a05c
DTSTART;VALUE=DATE:20220301 DTSTART;VALUE=DATE:20220301
DTEND;VALUE=DATE:20220302 DTEND;VALUE=DATE:20220302
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:aea2a84a-da17-4f91-b160-15a89afa52cc UID:aea2a84a-da17-4f91-b160-15a89afa52cc
DTSTART;VALUE=DATE:20220415 DTSTART;VALUE=DATE:20220415
DTEND;VALUE=DATE:20220416 DTEND;VALUE=DATE:20220416
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:e435c5bd-f5a2-487a-ac4e-b56745b89d14 UID:e435c5bd-f5a2-487a-ac4e-b56745b89d14
DTSTART;VALUE=DATE:20220417 DTSTART;VALUE=DATE:20220417
DTEND;VALUE=DATE:20220418 DTEND;VALUE=DATE:20220418
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:023a861a-d37e-45f9-b595-6ee750333b3e UID:023a861a-d37e-45f9-b595-6ee750333b3e
DTSTART;VALUE=DATE:20220616 DTSTART;VALUE=DATE:20220616
DTEND;VALUE=DATE:20220617 DTEND;VALUE=DATE:20220617
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:6ae751a9-75b9-4c40-a6a2-d7dcff275d90 UID:6ae751a9-75b9-4c40-a6a2-d7dcff275d90
DTSTART;VALUE=DATE:20230221 DTSTART;VALUE=DATE:20230221
DTEND;VALUE=DATE:20230222 DTEND;VALUE=DATE:20230222
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:a97015e0-4479-48fa-9720-d2d64b5121fa UID:a97015e0-4479-48fa-9720-d2d64b5121fa
DTSTART;VALUE=DATE:20230407 DTSTART;VALUE=DATE:20230407
DTEND;VALUE=DATE:20230408 DTEND;VALUE=DATE:20230408
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:2c78c1b0-9167-4aa3-b9ab-6a904c3968ee UID:2c78c1b0-9167-4aa3-b9ab-6a904c3968ee
DTSTART;VALUE=DATE:20230409 DTSTART;VALUE=DATE:20230409
DTEND;VALUE=DATE:20230410 DTEND;VALUE=DATE:20230410
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:fd053ba5-e0fa-431a-ac48-86bea8657167 UID:fd053ba5-e0fa-431a-ac48-86bea8657167
DTSTART;VALUE=DATE:20230608 DTSTART;VALUE=DATE:20230608
DTEND;VALUE=DATE:20230609 DTEND;VALUE=DATE:20230609
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:4d992236-76a1-4764-b551-25059527350c UID:4d992236-76a1-4764-b551-25059527350c
DTSTART;VALUE=DATE:20240213 DTSTART;VALUE=DATE:20240213
DTEND;VALUE=DATE:20240214 DTEND;VALUE=DATE:20240214
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:cbd961b8-ce49-4e59-9d1c-998e1c6fd3ee UID:cbd961b8-ce49-4e59-9d1c-998e1c6fd3ee
DTSTART;VALUE=DATE:20240329 DTSTART;VALUE=DATE:20240329
DTEND;VALUE=DATE:20240330 DTEND;VALUE=DATE:20240330
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:1824da6f-f0a0-4faa-a028-8ac59914439b UID:1824da6f-f0a0-4faa-a028-8ac59914439b
DTSTART;VALUE=DATE:20240530 DTSTART;VALUE=DATE:20240530
DTEND;VALUE=DATE:20240531 DTEND;VALUE=DATE:20240531
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:0839a8fe-67ef-49b3-8ca9-985a31792d4d UID:0839a8fe-67ef-49b3-8ca9-985a31792d4d
DTSTART;VALUE=DATE:20250304 DTSTART;VALUE=DATE:20250304
DTEND;VALUE=DATE:20250305 DTEND;VALUE=DATE:20250305
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:2fb6f244-6722-4d55-b7f7-eb03d8bac186 UID:2fb6f244-6722-4d55-b7f7-eb03d8bac186
DTSTART;VALUE=DATE:20250418 DTSTART;VALUE=DATE:20250418
DTEND;VALUE=DATE:20250419 DTEND;VALUE=DATE:20250419
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:1c93fa44-78ad-48b6-8c9a-f78b14997c8e UID:1c93fa44-78ad-48b6-8c9a-f78b14997c8e
DTSTART;VALUE=DATE:20250420 DTSTART;VALUE=DATE:20250420
DTEND;VALUE=DATE:20250421 DTEND;VALUE=DATE:20250421
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:58b16e20-1093-40ab-87d6-063ef28a9cbf UID:58b16e20-1093-40ab-87d6-063ef28a9cbf
DTSTART;VALUE=DATE:20250619 DTSTART;VALUE=DATE:20250619
DTEND;VALUE=DATE:20250620 DTEND;VALUE=DATE:20250620
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:138c5a65-4df9-4d17-9410-5b53e9ff8b0a UID:138c5a65-4df9-4d17-9410-5b53e9ff8b0a
DTSTART;VALUE=DATE:20260217 DTSTART;VALUE=DATE:20260217
DTEND;VALUE=DATE:20260218 DTEND;VALUE=DATE:20260218
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:4e96f4cf-185a-411d-bee6-21eb5eb56b06 UID:4e96f4cf-185a-411d-bee6-21eb5eb56b06
DTSTART;VALUE=DATE:20260403 DTSTART;VALUE=DATE:20260403
DTEND;VALUE=DATE:20260404 DTEND;VALUE=DATE:20260404
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:2ddbd9f0-02aa-4b55-a30d-8b1a14ccedb3 UID:2ddbd9f0-02aa-4b55-a30d-8b1a14ccedb3
DTSTART;VALUE=DATE:20260405 DTSTART;VALUE=DATE:20260405
DTEND;VALUE=DATE:20260406 DTEND;VALUE=DATE:20260406
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:04e53c14-c9a6-4ae1-9169-47c81231e4f5 UID:04e53c14-c9a6-4ae1-9169-47c81231e4f5
DTSTART;VALUE=DATE:20260604 DTSTART;VALUE=DATE:20260604
DTEND;VALUE=DATE:20260605 DTEND;VALUE=DATE:20260605
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:2617081c-c96d-4cf9-88fd-72688fb4910b UID:2617081c-c96d-4cf9-88fd-72688fb4910b
DTSTART;VALUE=DATE:20270209 DTSTART;VALUE=DATE:20270209
DTEND;VALUE=DATE:20270210 DTEND;VALUE=DATE:20270210
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:aba7a9f2-a8bc-4b31-b6ec-86b0a92f11c0 UID:aba7a9f2-a8bc-4b31-b6ec-86b0a92f11c0
DTSTART;VALUE=DATE:20270326 DTSTART;VALUE=DATE:20270326
DTEND;VALUE=DATE:20270327 DTEND;VALUE=DATE:20270327
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:7f9c3fe9-06f5-45b0-ba55-2c8da8055b38 UID:7f9c3fe9-06f5-45b0-ba55-2c8da8055b38
DTSTART;VALUE=DATE:20270527 DTSTART;VALUE=DATE:20270527
DTEND;VALUE=DATE:20270528 DTEND;VALUE=DATE:20270528
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:918f486a-f745-4bb7-ab1b-3e4ae771845f UID:918f486a-f745-4bb7-ab1b-3e4ae771845f
DTSTART;VALUE=DATE:20280229 DTSTART;VALUE=DATE:20280229
DTEND;VALUE=DATE:20280301 DTEND;VALUE=DATE:20280301
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:516e9453-13ba-46f0-bd0a-e0996cf85dd7 UID:516e9453-13ba-46f0-bd0a-e0996cf85dd7
DTSTART;VALUE=DATE:20280414 DTSTART;VALUE=DATE:20280414
DTEND;VALUE=DATE:20280415 DTEND;VALUE=DATE:20280415
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:bf203169-cc8c-4329-9559-c89dc96c6695 UID:bf203169-cc8c-4329-9559-c89dc96c6695
DTSTART;VALUE=DATE:20280416 DTSTART;VALUE=DATE:20280416
DTEND;VALUE=DATE:20280417 DTEND;VALUE=DATE:20280417
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:329fd131-869e-4855-805a-94b58c66241e UID:329fd131-869e-4855-805a-94b58c66241e
DTSTART;VALUE=DATE:20280615 DTSTART;VALUE=DATE:20280615
DTEND;VALUE=DATE:20280616 DTEND;VALUE=DATE:20280616
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:bd294fef-c437-4351-ad44-986917cc79dd UID:bd294fef-c437-4351-ad44-986917cc79dd
DTSTART;VALUE=DATE:20290213 DTSTART;VALUE=DATE:20290213
DTEND;VALUE=DATE:20290214 DTEND;VALUE=DATE:20290214
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:06104d63-a31c-419a-95b4-a03d4bb40cb1 UID:06104d63-a31c-419a-95b4-a03d4bb40cb1
DTSTART;VALUE=DATE:20290330 DTSTART;VALUE=DATE:20290330
DTEND;VALUE=DATE:20290331 DTEND;VALUE=DATE:20290331
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:ae8f5a91-1d01-49b7-b22b-4ca562a25a02 UID:ae8f5a91-1d01-49b7-b22b-4ca562a25a02
DTSTART;VALUE=DATE:20290401 DTSTART;VALUE=DATE:20290401
DTEND;VALUE=DATE:20290402 DTEND;VALUE=DATE:20290402
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:f33509dc-e9fc-4fb0-9c93-e3671e498f12 UID:f33509dc-e9fc-4fb0-9c93-e3671e498f12
DTSTART;VALUE=DATE:20290531 DTSTART;VALUE=DATE:20290531
DTEND;VALUE=DATE:20290601 DTEND;VALUE=DATE:20290601
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Carnival SUMMARY:Carnaval
UID:faa77196-c452-4f05-a146-01048d362c23 UID:faa77196-c452-4f05-a146-01048d362c23
DTSTART;VALUE=DATE:20300305 DTSTART;VALUE=DATE:20300305
DTEND;VALUE=DATE:20300306 DTEND;VALUE=DATE:20300306
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Good Friday SUMMARY:Sexta-Feira Santa
UID:23bb3359-d3a8-4b1d-b45e-625c6aa9d7ab UID:23bb3359-d3a8-4b1d-b45e-625c6aa9d7ab
DTSTART;VALUE=DATE:20300419 DTSTART;VALUE=DATE:20300419
DTEND;VALUE=DATE:20300420 DTEND;VALUE=DATE:20300420
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Easter SUMMARY:Páscoa
UID:c38cda82-92dc-49ce-b49f-a581213fef38 UID:c38cda82-92dc-49ce-b49f-a581213fef38
DTSTART;VALUE=DATE:20300421 DTSTART;VALUE=DATE:20300421
DTEND;VALUE=DATE:20300422 DTEND;VALUE=DATE:20300422
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Corpus Christi SUMMARY:Corpo de Deus
UID:a3a2a74a-7c19-4ffb-9f19-519743bffd1d UID:a3a2a74a-7c19-4ffb-9f19-519743bffd1d
DTSTART;VALUE=DATE:20300620 DTSTART;VALUE=DATE:20300620
DTEND;VALUE=DATE:20300621 DTEND;VALUE=DATE:20300621
STATUS:CONFIRMED STATUS:CONFIRMED
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:New Year SUMMARY:Ano Novo
UID:d0c7af02-7a6b-41e3-8421-cfd6895e1223 UID:d0c7af02-7a6b-41e3-8421-cfd6895e1223
DTSTART;VALUE=DATE:20010101 DTSTART;VALUE=DATE:20010101
DTEND;VALUE=DATE:20010102 DTEND;VALUE=DATE:20010102
@@ -365,7 +365,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Liberty Day SUMMARY:Dia da Liberdade
UID:8b096e79-da0d-45f3-905d-80cdaddcb07c UID:8b096e79-da0d-45f3-905d-80cdaddcb07c
DTSTART;VALUE=DATE:20010425 DTSTART;VALUE=DATE:20010425
DTEND;VALUE=DATE:20010426 DTEND;VALUE=DATE:20010426
@@ -373,7 +373,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Labour Day SUMMARY:Dia do Trabalhador
UID:26e3ea80-ba4b-4208-bd73-c07483cb87b5 UID:26e3ea80-ba4b-4208-bd73-c07483cb87b5
DTSTART;VALUE=DATE:20010501 DTSTART;VALUE=DATE:20010501
DTEND;VALUE=DATE:20010502 DTEND;VALUE=DATE:20010502
@@ -381,7 +381,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Day of Portugal SUMMARY:Dia de Portugal
UID:0317f4ef-6bb6-49db-a8f7-36957676e05f UID:0317f4ef-6bb6-49db-a8f7-36957676e05f
DTSTART;VALUE=DATE:20010610 DTSTART;VALUE=DATE:20010610
DTEND;VALUE=DATE:20010611 DTEND;VALUE=DATE:20010611
@@ -389,7 +389,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Our Lady Assumption Day SUMMARY:Assunção de Nossa Senhora
UID:66c355ac-f86b-4b62-9b88-bfab5da28dd9 UID:66c355ac-f86b-4b62-9b88-bfab5da28dd9
DTSTART;VALUE=DATE:20010815 DTSTART;VALUE=DATE:20010815
DTEND;VALUE=DATE:20010816 DTEND;VALUE=DATE:20010816
@@ -397,7 +397,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Republic Day SUMMARY:Implantação da República
UID:0a1bf4e7-50f8-4d3f-b449-e0f792b7fc9c UID:0a1bf4e7-50f8-4d3f-b449-e0f792b7fc9c
DTSTART;VALUE=DATE:20011005 DTSTART;VALUE=DATE:20011005
DTEND;VALUE=DATE:20011006 DTEND;VALUE=DATE:20011006
@@ -405,7 +405,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Day of All Saints SUMMARY:Dia de Todos os Santos
UID:79b44222-18ac-47a6-9361-0f69c28c1038 UID:79b44222-18ac-47a6-9361-0f69c28c1038
DTSTART;VALUE=DATE:20011101 DTSTART;VALUE=DATE:20011101
DTEND;VALUE=DATE:20011102 DTEND;VALUE=DATE:20011102
@@ -413,7 +413,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Independence Day SUMMARY:Restauração da Independência
UID:e5ab7efe-c4ce-4bb1-a8a4-e63e46de2d74 UID:e5ab7efe-c4ce-4bb1-a8a4-e63e46de2d74
DTSTART;VALUE=DATE:20011201 DTSTART;VALUE=DATE:20011201
DTEND;VALUE=DATE:20011202 DTEND;VALUE=DATE:20011202
@@ -421,7 +421,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Imaculate Conception Day SUMMARY:Dia da Imaculada Conceição
UID:44cf05dd-d95d-4759-be8e-d177e943189f UID:44cf05dd-d95d-4759-be8e-d177e943189f
DTSTART;VALUE=DATE:20011208 DTSTART;VALUE=DATE:20011208
DTEND;VALUE=DATE:20011209 DTEND;VALUE=DATE:20011209
@@ -429,7 +429,7 @@ STATUS:CONFIRMED
RRULE:FREQ=YEARLY;INTERVAL=1 RRULE:FREQ=YEARLY;INTERVAL=1
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
SUMMARY:Christmas SUMMARY:Natal
UID:c6312a02-e749-42e4-855b-51af541b5fcd UID:c6312a02-e749-42e4-855b-51af541b5fcd
DTSTART;VALUE=DATE:20011225 DTSTART;VALUE=DATE:20011225
DTEND;VALUE=DATE:20011226 DTEND;VALUE=DATE:20011226

View File

@@ -32,6 +32,7 @@ import com.simplemobiletools.calendar.pro.extensions.*
import com.simplemobiletools.calendar.pro.helpers.* import com.simplemobiletools.calendar.pro.helpers.*
import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.Formatter
import com.simplemobiletools.calendar.pro.models.* import com.simplemobiletools.calendar.pro.models.*
import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
@@ -78,6 +79,7 @@ class EventActivity : SimpleActivity() {
private var mEventTypeId = REGULAR_EVENT_TYPE_ID private var mEventTypeId = REGULAR_EVENT_TYPE_ID
private var mDialogTheme = 0 private var mDialogTheme = 0
private var mEventOccurrenceTS = 0L private var mEventOccurrenceTS = 0L
private var mLastSavePromptTS = 0L
private var mEventCalendarId = STORED_LOCALLY_ONLY private var mEventCalendarId = STORED_LOCALLY_ONLY
private var mWasActivityInitialized = false private var mWasActivityInitialized = false
private var mWasContactsPermissionChecked = false private var mWasContactsPermissionChecked = false
@@ -87,6 +89,8 @@ class EventActivity : SimpleActivity() {
private var mSelectedContacts = ArrayList<Attendee>() private var mSelectedContacts = ArrayList<Attendee>()
private var mStoredEventTypes = ArrayList<EventType>() private var mStoredEventTypes = ArrayList<EventType>()
private var mOriginalTimeZone = DateTimeZone.getDefault().id private var mOriginalTimeZone = DateTimeZone.getDefault().id
private var mOriginalStartTS = 0L
private var mOriginalEndTS = 0L
private lateinit var mEventStartDateTime: DateTime private lateinit var mEventStartDateTime: DateTime
private lateinit var mEventEndDateTime: DateTime private lateinit var mEventEndDateTime: DateTime
@@ -230,6 +234,7 @@ class EventActivity : SimpleActivity() {
menu.findItem(R.id.share).isVisible = mEvent.id != null menu.findItem(R.id.share).isVisible = mEvent.id != null
menu.findItem(R.id.duplicate).isVisible = mEvent.id != null menu.findItem(R.id.duplicate).isVisible = mEvent.id != null
} }
updateMenuItemColors(menu) updateMenuItemColors(menu)
return true return true
} }
@@ -245,6 +250,74 @@ class EventActivity : SimpleActivity() {
return true return true
} }
private fun getStartEndTimes(): Pair<Long, Long> {
val offset = if (!config.allowChangingTimeZones || mEvent.getTimeZoneString().equals(mOriginalTimeZone, true)) {
0
} else {
val original = if (mOriginalTimeZone.isEmpty()) DateTimeZone.getDefault().id else mOriginalTimeZone
(DateTimeZone.forID(mEvent.getTimeZoneString()).getOffset(System.currentTimeMillis()) - DateTimeZone.forID(original).getOffset(System.currentTimeMillis())) / 1000L
}
val newStartTS = mEventStartDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset
val newEndTS = mEventEndDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset
return Pair(newStartTS, newEndTS)
}
private fun getReminders(): ArrayList<Reminder> {
var reminders = arrayListOf(
Reminder(mReminder1Minutes, mReminder1Type),
Reminder(mReminder2Minutes, mReminder2Type),
Reminder(mReminder3Minutes, mReminder3Type)
)
reminders = reminders.filter { it.minutes != REMINDER_OFF }.sortedBy { it.minutes }.toMutableList() as ArrayList<Reminder>
return reminders
}
private fun isEventChanged(): Boolean {
var newStartTS: Long
var newEndTS: Long
getStartEndTimes().apply {
newStartTS = first
newEndTS = second
}
val hasTimeChanged = if (mOriginalStartTS == 0L) {
mEvent.startTS != newStartTS || mEvent.endTS != newEndTS
} else {
mOriginalStartTS != newStartTS || mOriginalEndTS != newEndTS
}
val reminders = getReminders()
if (event_title.value != mEvent.title ||
event_location.value != mEvent.location ||
event_description.value != mEvent.description ||
event_time_zone.text != mEvent.getTimeZoneString() ||
reminders != mEvent.getReminders() ||
mRepeatInterval != mEvent.repeatInterval ||
mRepeatRule != mEvent.repeatRule ||
mEventTypeId != mEvent.eventType ||
hasTimeChanged) {
return true
}
return false
}
override fun onBackPressed() {
if (isEventChanged() && System.currentTimeMillis() - mLastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL) {
mLastSavePromptTS = System.currentTimeMillis()
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
if (it) {
saveCurrentEvent()
} else {
super.onBackPressed()
}
}
} else {
super.onBackPressed()
}
}
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
if (!mWasActivityInitialized) { if (!mWasActivityInitialized) {
@@ -301,8 +374,8 @@ class EventActivity : SimpleActivity() {
mRepeatRule = getInt(REPEAT_RULE) mRepeatRule = getInt(REPEAT_RULE)
mRepeatLimit = getLong(REPEAT_LIMIT) mRepeatLimit = getLong(REPEAT_LIMIT)
mAttendees = Gson().fromJson<ArrayList<Attendee>>(getString(ATTENDEES), object : TypeToken<List<Attendee>>() {}.type) val token = object : TypeToken<List<Attendee>>() {}.type
?: ArrayList() mAttendees = Gson().fromJson<ArrayList<Attendee>>(getString(ATTENDEES), token) ?: ArrayList()
mEventTypeId = getLong(EVENT_TYPE_ID) mEventTypeId = getLong(EVENT_TYPE_ID)
mEventCalendarId = getInt(EVENT_CALENDAR_ID) mEventCalendarId = getInt(EVENT_CALENDAR_ID)
@@ -337,6 +410,9 @@ class EventActivity : SimpleActivity() {
private fun setupEditEvent() { private fun setupEditEvent() {
val realStart = if (mEventOccurrenceTS == 0L) mEvent.startTS else mEventOccurrenceTS val realStart = if (mEventOccurrenceTS == 0L) mEvent.startTS else mEventOccurrenceTS
val duration = mEvent.endTS - mEvent.startTS val duration = mEvent.endTS - mEvent.startTS
mOriginalStartTS = realStart
mOriginalEndTS = realStart + duration
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
updateActionBarTitle(getString(R.string.edit_event)) updateActionBarTitle(getString(R.string.edit_event))
mOriginalTimeZone = mEvent.timeZone mOriginalTimeZone = mEvent.timeZone
@@ -369,11 +445,35 @@ class EventActivity : SimpleActivity() {
mRepeatRule = mEvent.repeatRule mRepeatRule = mEvent.repeatRule
mEventTypeId = mEvent.eventType mEventTypeId = mEvent.eventType
mEventCalendarId = mEvent.getCalDAVCalendarId() mEventCalendarId = mEvent.getCalDAVCalendarId()
mAttendees = Gson().fromJson<ArrayList<Attendee>>(mEvent.attendees, object : TypeToken<List<Attendee>>() {}.type) ?: ArrayList()
val token = object : TypeToken<List<Attendee>>() {}.type
mAttendees = Gson().fromJson<ArrayList<Attendee>>(mEvent.attendees, token) ?: ArrayList()
checkRepeatTexts(mRepeatInterval) checkRepeatTexts(mRepeatInterval)
checkAttendees() checkAttendees()
} }
private fun addDefValuesToNewEvent() {
var newStartTS: Long
var newEndTS: Long
getStartEndTimes().apply {
newStartTS = first
newEndTS = second
}
mEvent.apply {
startTS = newStartTS
endTS = newEndTS
reminder1Minutes = mReminder1Minutes
reminder1Type = mReminder1Type
reminder2Minutes = mReminder2Minutes
reminder2Type = mReminder2Type
reminder3Minutes = mReminder3Minutes
reminder3Type = mReminder3Type
eventType = mEventTypeId
}
}
private fun setupNewEvent() { private fun setupNewEvent() {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
event_title.requestFocus() event_title.requestFocus()
@@ -421,16 +521,14 @@ class EventActivity : SimpleActivity() {
} }
mEventEndDateTime = mEventStartDateTime.plusMinutes(addMinutes) mEventEndDateTime = mEventStartDateTime.plusMinutes(addMinutes)
} }
addDefValuesToNewEvent()
checkAttendees() checkAttendees()
} }
private fun checkAttendees() { private fun checkAttendees() {
ensureBackgroundThread { ensureBackgroundThread {
fillAvailableContacts() fillAvailableContacts()
runOnUiThread { updateAttendees()
updateAttendees()
}
} }
} }
@@ -808,8 +906,7 @@ class EventActivity : SimpleActivity() {
private fun getCalendarId() = if (mEvent.source == SOURCE_SIMPLE_CALENDAR) config.lastUsedCaldavCalendarId else mEvent.getCalDAVCalendarId() private fun getCalendarId() = if (mEvent.source == SOURCE_SIMPLE_CALENDAR) config.lastUsedCaldavCalendarId else mEvent.getCalDAVCalendarId()
private fun getCalendarWithId(calendars: List<CalDAVCalendar>, calendarId: Int): CalDAVCalendar? = private fun getCalendarWithId(calendars: List<CalDAVCalendar>, calendarId: Int) = calendars.firstOrNull { it.id == calendarId }
calendars.firstOrNull { it.id == calendarId }
private fun updateCurrentCalendarInfo(currentCalendar: CalDAVCalendar?) { private fun updateCurrentCalendarInfo(currentCalendar: CalDAVCalendar?) {
event_type_image.beVisibleIf(currentCalendar == null) event_type_image.beVisibleIf(currentCalendar == null)
@@ -918,16 +1015,13 @@ class EventActivity : SimpleActivity() {
return return
} }
val offset = if (!config.allowChangingTimeZones || mEvent.getTimeZoneString().equals(mOriginalTimeZone, true)) { var newStartTS: Long
0 var newEndTS: Long
} else { getStartEndTimes().apply {
val original = if (mOriginalTimeZone.isEmpty()) DateTimeZone.getDefault().id else mOriginalTimeZone newStartTS = first
(DateTimeZone.forID(mEvent.getTimeZoneString()).getOffset(System.currentTimeMillis()) - DateTimeZone.forID(original).getOffset(System.currentTimeMillis())) / 1000L newEndTS = second
} }
val newStartTS = mEventStartDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset
val newEndTS = mEventEndDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset
if (newStartTS > newEndTS) { if (newStartTS > newEndTS) {
toast(R.string.end_before_start) toast(R.string.end_before_start)
return return
@@ -935,7 +1029,11 @@ class EventActivity : SimpleActivity() {
val wasRepeatable = mEvent.repeatInterval > 0 val wasRepeatable = mEvent.repeatInterval > 0
val oldSource = mEvent.source val oldSource = mEvent.source
val newImportId = if (mEvent.id != null) mEvent.importId else UUID.randomUUID().toString().replace("-", "") + System.currentTimeMillis().toString() val newImportId = if (mEvent.id != null) {
mEvent.importId
} else {
UUID.randomUUID().toString().replace("-", "") + System.currentTimeMillis().toString()
}
val newEventType = if (!config.caldavSync || config.lastUsedCaldavCalendarId == 0 || mEventCalendarId == STORED_LOCALLY_ONLY) { val newEventType = if (!config.caldavSync || config.lastUsedCaldavCalendarId == 0 || mEventCalendarId == STORED_LOCALLY_ONLY) {
mEventTypeId mEventTypeId
@@ -959,13 +1057,7 @@ class EventActivity : SimpleActivity() {
"$CALDAV-$mEventCalendarId" "$CALDAV-$mEventCalendarId"
} }
var reminders = arrayListOf( val reminders = getReminders()
Reminder(mReminder1Minutes, mReminder1Type),
Reminder(mReminder2Minutes, mReminder2Type),
Reminder(mReminder3Minutes, mReminder3Type)
)
reminders = reminders.filter { it.minutes != REMINDER_OFF }.sortedBy { it.minutes }.toMutableList() as ArrayList<Reminder>
val reminder1 = reminders.getOrNull(0) ?: Reminder(REMINDER_OFF, REMINDER_NOTIFICATION) val reminder1 = reminders.getOrNull(0) ?: Reminder(REMINDER_OFF, REMINDER_NOTIFICATION)
val reminder2 = reminders.getOrNull(1) ?: Reminder(REMINDER_OFF, REMINDER_NOTIFICATION) val reminder2 = reminders.getOrNull(1) ?: Reminder(REMINDER_OFF, REMINDER_NOTIFICATION)
val reminder3 = reminders.getOrNull(2) ?: Reminder(REMINDER_OFF, REMINDER_NOTIFICATION) val reminder3 = reminders.getOrNull(2) ?: Reminder(REMINDER_OFF, REMINDER_NOTIFICATION)
@@ -1011,7 +1103,6 @@ class EventActivity : SimpleActivity() {
eventsHelper.deleteEvent(mEvent.id!!, true) eventsHelper.deleteEvent(mEvent.id!!, true)
mEvent.id = null mEvent.id = null
} }
storeEvent(wasRepeatable) storeEvent(wasRepeatable)
} }
@@ -1264,22 +1355,24 @@ class EventActivity : SimpleActivity() {
{ it.status }) { it.status })
mAttendees.reverse() mAttendees.reverse()
mAttendees.forEach { runOnUiThread {
val attendee = it mAttendees.forEach {
val deviceContact = mAvailableContacts.firstOrNull { it.email.isNotEmpty() && it.email == attendee.email && it.photoUri.isNotEmpty() } val attendee = it
if (deviceContact != null) { val deviceContact = mAvailableContacts.firstOrNull { it.email.isNotEmpty() && it.email == attendee.email && it.photoUri.isNotEmpty() }
attendee.photoUri = deviceContact.photoUri if (deviceContact != null) {
attendee.photoUri = deviceContact.photoUri
}
addAttendee(attendee)
} }
addAttendee(attendee) addAttendee()
}
addAttendee()
val imageHeight = event_repetition_image.height val imageHeight = event_repetition_image.height
if (imageHeight > 0) { if (imageHeight > 0) {
event_attendees_image.layoutParams.height = imageHeight event_attendees_image.layoutParams.height = imageHeight
} else { } else {
event_repetition_image.onGlobalLayout { event_repetition_image.onGlobalLayout {
event_attendees_image.layoutParams.height = event_repetition_image.height event_attendees_image.layoutParams.height = event_repetition_image.height
}
} }
} }
} }
@@ -1351,7 +1444,7 @@ class EventActivity : SimpleActivity() {
(event_contact_name.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.START_OF, event_contact_me_status.id) (event_contact_name.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.START_OF, event_contact_me_status.id)
} }
val placeholder = BitmapDrawable(resources, context.getContactLetterIcon(event_contact_name.value)) val placeholder = BitmapDrawable(resources, SimpleContactsHelper(context).getContactLetterIcon(event_contact_name.value))
event_contact_image.apply { event_contact_image.apply {
attendee.updateImage(applicationContext, this, placeholder) attendee.updateImage(applicationContext, this, placeholder)
beVisible() beVisible()

View File

@@ -5,7 +5,6 @@ import android.app.Activity
import android.app.SearchManager import android.app.SearchManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.pm.ShortcutInfo import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager import android.content.pm.ShortcutManager
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
@@ -46,6 +45,7 @@ import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
import com.simplemobiletools.commons.models.FAQItem import com.simplemobiletools.commons.models.FAQItem
import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.models.Release import com.simplemobiletools.commons.models.Release
import com.simplemobiletools.commons.models.SimpleContact
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
import org.joda.time.DateTime import org.joda.time.DateTime
import org.joda.time.DateTimeZone import org.joda.time.DateTimeZone
@@ -83,15 +83,12 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
appLaunched(BuildConfig.APPLICATION_ID) appLaunched(BuildConfig.APPLICATION_ID)
checkWhatsNewDialog() checkWhatsNewDialog()
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW) calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW && config.storedView != WEEKLY_VIEW)
calendar_fab.setOnClickListener { calendar_fab.setOnClickListener {
launchNewEventIntent(currentFragments.last().getNewEventDayCode()) launchNewEventIntent(currentFragments.last().getNewEventDayCode())
} }
storeStateVariables() storeStateVariables()
if (resources.getBoolean(R.bool.portrait_only)) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
if (!hasPermission(PERMISSION_WRITE_CALENDAR) || !hasPermission(PERMISSION_READ_CALENDAR)) { if (!hasPermission(PERMISSION_WRITE_CALENDAR) || !hasPermission(PERMISSION_READ_CALENDAR)) {
config.caldavSync = false config.caldavSync = false
@@ -150,7 +147,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
search_holder.background = ColorDrawable(config.backgroundColor) search_holder.background = ColorDrawable(config.backgroundColor)
checkSwipeRefreshAvailability() checkSwipeRefreshAvailability()
checkShortcuts() checkShortcuts()
invalidateOptionsMenu()
if (!mIsSearchOpen) {
invalidateOptionsMenu()
}
} }
override fun onPause() { override fun onPause() {
@@ -158,11 +158,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
storeStateVariables() storeStateVariables()
} }
override fun onStop() {
super.onStop()
closeSearch()
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
if (!isChangingConfigurations) { if (!isChangingConfigurations) {
@@ -173,10 +168,11 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu) menuInflater.inflate(R.menu.menu_main, menu)
shouldGoToTodayBeVisible = currentFragments.last().shouldGoToTodayBeVisible()
menu.apply { menu.apply {
goToTodayButton = findItem(R.id.go_to_today) goToTodayButton = findItem(R.id.go_to_today)
findItem(R.id.filter).isVisible = mShouldFilterBeVisible findItem(R.id.filter).isVisible = mShouldFilterBeVisible
findItem(R.id.go_to_today).isVisible = (shouldGoToTodayBeVisible || config.storedView == EVENTS_LIST_VIEW) && !mIsSearchOpen findItem(R.id.go_to_today).isVisible = shouldGoToTodayBeVisible && !mIsSearchOpen
findItem(R.id.go_to_date).isVisible = config.storedView != EVENTS_LIST_VIEW findItem(R.id.go_to_date).isVisible = config.storedView != EVENTS_LIST_VIEW
} }
@@ -198,6 +194,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
R.id.change_view -> showViewDialog() R.id.change_view -> showViewDialog()
R.id.go_to_today -> goToToday() R.id.go_to_today -> goToToday()
R.id.go_to_date -> showGoToDateDialog() R.id.go_to_date -> showGoToDateDialog()
R.id.print -> printView()
R.id.filter -> showFilterDialog() R.id.filter -> showFilterDialog()
R.id.refresh_caldav_calendars -> refreshCalDAVCalendars(true) R.id.refresh_caldav_calendars -> refreshCalDAVCalendars(true)
R.id.add_holidays -> addHolidays() R.id.add_holidays -> addHolidays()
@@ -283,7 +280,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean { override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
mIsSearchOpen = false mIsSearchOpen = false
search_holder.beGone() search_holder.beGone()
calendar_fab.beVisibleIf(currentFragments.last() !is YearFragmentsHolder) calendar_fab.beVisibleIf(currentFragments.last() !is YearFragmentsHolder && currentFragments.last() !is WeekFragmentsHolder)
invalidateOptionsMenu() invalidateOptionsMenu()
return true return true
} }
@@ -414,10 +411,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
RadioItem(EVENTS_LIST_VIEW, getString(R.string.simple_event_list))) RadioItem(EVENTS_LIST_VIEW, getString(R.string.simple_event_list)))
RadioGroupDialog(this, items, config.storedView) { RadioGroupDialog(this, items, config.storedView) {
calendar_fab.beVisibleIf(it as Int != YEARLY_VIEW)
resetActionBarTitle() resetActionBarTitle()
closeSearch() closeSearch()
updateView(it) updateView(it as Int)
shouldGoToTodayBeVisible = false shouldGoToTodayBeVisible = false
invalidateOptionsMenu() invalidateOptionsMenu()
} }
@@ -431,6 +427,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
currentFragments.last().showGoToDateDialog() currentFragments.last().showGoToDateDialog()
} }
private fun printView() {
currentFragments.last().printView()
}
private fun resetActionBarTitle() { private fun resetActionBarTitle() {
updateActionBarTitle(getString(R.string.app_launcher_name)) updateActionBarTitle(getString(R.string.app_launcher_name))
updateActionBarSubtitle("") updateActionBarSubtitle("")
@@ -501,15 +501,20 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
if (it) { if (it) {
SetRemindersDialog(this) { SetRemindersDialog(this) {
val reminders = it val reminders = it
val privateCursor = getMyContactsCursor().loadInBackground()
ensureBackgroundThread { ensureBackgroundThread {
addContactEvents(true, reminders) { val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor)
when { addPrivateEvents(true, privateContacts, reminders) { eventsFound, eventsAdded ->
it > 0 -> { addContactEvents(true, reminders, eventsFound, eventsAdded) {
toast(R.string.birthdays_added) when {
updateViewPager() it > 0 -> {
toast(R.string.birthdays_added)
updateViewPager()
}
it == -1 -> toast(R.string.no_new_birthdays)
else -> toast(R.string.no_birthdays)
} }
it == -1 -> toast(R.string.no_new_birthdays)
else -> toast(R.string.no_birthdays)
} }
} }
} }
@@ -525,15 +530,20 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
if (it) { if (it) {
SetRemindersDialog(this) { SetRemindersDialog(this) {
val reminders = it val reminders = it
val privateCursor = getMyContactsCursor().loadInBackground()
ensureBackgroundThread { ensureBackgroundThread {
addContactEvents(false, reminders) { val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor)
when { addPrivateEvents(false, privateContacts, reminders) { eventsFound, eventsAdded ->
it > 0 -> { addContactEvents(false, reminders, eventsFound, eventsAdded) {
toast(R.string.anniversaries_added) when {
updateViewPager() it > 0 -> {
toast(R.string.anniversaries_added)
updateViewPager()
}
it == -1 -> toast(R.string.no_new_anniversaries)
else -> toast(R.string.no_anniversaries)
} }
it == -1 -> toast(R.string.no_new_anniversaries)
else -> toast(R.string.no_anniversaries)
} }
} }
} }
@@ -553,9 +563,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
}, Toast.LENGTH_LONG) }, Toast.LENGTH_LONG)
} }
private fun addContactEvents(birthdays: Boolean, reminders: ArrayList<Int>, callback: (Int) -> Unit) { private fun addContactEvents(birthdays: Boolean, reminders: ArrayList<Int>, initEventsFound: Int, initEventsAdded: Int, callback: (Int) -> Unit) {
var eventsAdded = 0 var eventsFound = initEventsFound
var eventsFound = 0 var eventsAdded = initEventsAdded
val uri = Data.CONTENT_URI val uri = Data.CONTENT_URI
val projection = arrayOf(Contacts.DISPLAY_NAME, val projection = arrayOf(Contacts.DISPLAY_NAME,
CommonDataKinds.Event.CONTACT_ID, CommonDataKinds.Event.CONTACT_ID,
@@ -574,6 +584,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
val eventTypeId = if (birthdays) getBirthdaysEventTypeId() else getAnniversariesEventTypeId() val eventTypeId = if (birthdays) getBirthdaysEventTypeId() else getAnniversariesEventTypeId()
val source = if (birthdays) SOURCE_CONTACT_BIRTHDAY else SOURCE_CONTACT_ANNIVERSARY
queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor -> queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor ->
val contactId = cursor.getIntValue(CommonDataKinds.Event.CONTACT_ID).toString() val contactId = cursor.getIntValue(CommonDataKinds.Event.CONTACT_ID).toString()
@@ -589,7 +600,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
val timestamp = date.time / 1000L val timestamp = date.time / 1000L
val source = if (birthdays) SOURCE_CONTACT_BIRTHDAY else SOURCE_CONTACT_ANNIVERSARY
val lastUpdated = cursor.getLongValue(CommonDataKinds.Event.CONTACT_LAST_UPDATED_TIMESTAMP) val lastUpdated = cursor.getLongValue(CommonDataKinds.Event.CONTACT_LAST_UPDATED_TIMESTAMP)
val event = Event(null, timestamp, timestamp, name, reminder1Minutes = reminders[0], reminder2Minutes = reminders[1], val event = Event(null, timestamp, timestamp, name, reminder1Minutes = reminders[0], reminder2Minutes = reminders[1],
reminder3Minutes = reminders[2], importId = contactId, timeZone = DateTimeZone.getDefault().id, flags = FLAG_ALL_DAY, reminder3Minutes = reminders[2], importId = contactId, timeZone = DateTimeZone.getDefault().id, flags = FLAG_ALL_DAY,
@@ -626,6 +636,75 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
} }
private fun addPrivateEvents(birthdays: Boolean, contacts: ArrayList<SimpleContact>, reminders: ArrayList<Int>, callback: (eventsFound: Int, eventsAdded: Int) -> Unit) {
var eventsAdded = 0
var eventsFound = 0
if (contacts.isEmpty()) {
callback(0, 0)
return
}
try {
val eventTypeId = if (birthdays) getBirthdaysEventTypeId() else getAnniversariesEventTypeId()
val source = if (birthdays) SOURCE_CONTACT_BIRTHDAY else SOURCE_CONTACT_ANNIVERSARY
val existingEvents = if (birthdays) eventsDB.getBirthdays() else eventsDB.getAnniversaries()
val importIDs = HashMap<String, Long>()
existingEvents.forEach {
importIDs[it.importId] = it.startTS
}
contacts.forEach { contact ->
val events = if (birthdays) contact.birthdays else contact.anniversaries
events.forEach { birthdayAnniversary ->
// private contacts are created in Simple Contacts Pro, so we can guarantee that they exist only in these 2 formats
val format = if (birthdayAnniversary.startsWith("--")) {
"--MM-dd"
} else {
"yyyy-MM-dd"
}
val formatter = SimpleDateFormat(format, Locale.getDefault())
val date = formatter.parse(birthdayAnniversary)
if (date.year < 70) {
date.year = 70
}
val timestamp = date.time / 1000L
val lastUpdated = System.currentTimeMillis()
val event = Event(null, timestamp, timestamp, contact.name, reminder1Minutes = reminders[0], reminder2Minutes = reminders[1],
reminder3Minutes = reminders[2], importId = contact.contactId.toString(), timeZone = DateTimeZone.getDefault().id, flags = FLAG_ALL_DAY,
repeatInterval = YEAR, repeatRule = REPEAT_SAME_DAY, eventType = eventTypeId, source = source, lastUpdated = lastUpdated)
val importIDsToDelete = ArrayList<String>()
for ((key, value) in importIDs) {
if (key == contact.contactId.toString() && value != timestamp) {
val deleted = eventsDB.deleteBirthdayAnniversary(source, key)
if (deleted == 1) {
importIDsToDelete.add(key)
}
}
}
importIDsToDelete.forEach {
importIDs.remove(it)
}
eventsFound++
if (!importIDs.containsKey(contact.contactId.toString())) {
eventsHelper.insertEvent(event, false, false) {
eventsAdded++
}
}
}
}
} catch (e: Exception) {
showErrorToast(e)
}
callback(eventsFound, eventsAdded)
}
private fun getBirthdaysEventTypeId(): Long { private fun getBirthdaysEventTypeId(): Long {
val birthdays = getString(R.string.birthdays) val birthdays = getString(R.string.birthdays)
var eventTypeId = eventsHelper.getEventTypeIdWithTitle(birthdays) var eventTypeId = eventsHelper.getEventTypeIdWithTitle(birthdays)
@@ -647,7 +726,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
private fun updateView(view: Int) { private fun updateView(view: Int) {
calendar_fab.beVisibleIf(view != YEARLY_VIEW) calendar_fab.beVisibleIf(view != YEARLY_VIEW && view != WEEKLY_VIEW)
config.storedView = view config.storedView = view
checkSwipeRefreshAvailability() checkSwipeRefreshAvailability()
updateViewPager() updateViewPager()
@@ -709,7 +788,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
} }
private fun getThisWeekDateTime(): String { private fun getThisWeekDateTime(): String {
var thisweek = DateTime().withDayOfWeek(1).withTimeAtStartOfDay().minusDays(if (config.isSundayFirst) 1 else 0) var thisweek = DateTime().withZone(DateTimeZone.UTC).withDayOfWeek(1).withHourOfDay(12).minusDays(if (config.isSundayFirst) 1 else 0)
if (DateTime().minusDays(7).seconds() > thisweek.seconds()) { if (DateTime().minusDays(7).seconds() > thisweek.seconds()) {
thisweek = thisweek.plusDays(7) thisweek = thisweek.plusDays(7)
} }

View File

@@ -9,8 +9,8 @@ import android.widget.Filter
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.activities.SimpleActivity
import com.simplemobiletools.calendar.pro.models.Attendee import com.simplemobiletools.calendar.pro.models.Attendee
import com.simplemobiletools.commons.extensions.getContactLetterIcon
import com.simplemobiletools.commons.extensions.normalizeString import com.simplemobiletools.commons.extensions.normalizeString
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.* import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.*
class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList<Attendee>) : ArrayAdapter<Attendee>(activity, 0, contacts) { class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList<Attendee>) : ArrayAdapter<Attendee>(activity, 0, contacts) {
@@ -27,10 +27,10 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar
val nameToUse = when { val nameToUse = when {
contact.name.isNotEmpty() -> contact.name contact.name.isNotEmpty() -> contact.name
contact.email.isNotEmpty() -> contact.email contact.email.isNotEmpty() -> contact.email
else -> "S" else -> "A"
} }
val placeholder = BitmapDrawable(activity.resources, context.getContactLetterIcon(nameToUse)) val placeholder = BitmapDrawable(activity.resources, SimpleContactsHelper(context).getContactLetterIcon(nameToUse))
listItem!!.apply { listItem!!.apply {
tag = contact.name.isNotEmpty() tag = contact.name.isNotEmpty()
item_autocomplete_name?.text = contact.name item_autocomplete_name?.text = contact.name

View File

@@ -30,6 +30,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
private val allDayString = resources.getString(R.string.all_day) private val allDayString = resources.getString(R.string.all_day)
private val replaceDescriptionWithLocation = activity.config.replaceDescription private val replaceDescriptionWithLocation = activity.config.replaceDescription
private val dimPastEvents = activity.config.dimPastEvents private val dimPastEvents = activity.config.dimPastEvents
private var isPrintVersion = false
init { init {
setupDragListener(true) setupDragListener(true)
@@ -96,6 +97,16 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
} }
} }
fun togglePrintMode() {
isPrintVersion = !isPrintVersion
textColor = if (isPrintVersion) {
resources.getColor(R.color.theme_light_text_color)
} else {
baseConfig.textColor
}
notifyDataSetChanged()
}
private fun setupView(view: View, event: Event) { private fun setupView(view: View, event: Event) {
view.apply { view.apply {
event_item_frame.isSelected = selectedKeys.contains(event.id?.toInt()) event_item_frame.isSelected = selectedKeys.contains(event.id?.toInt())
@@ -124,7 +135,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
} }
var newTextColor = textColor var newTextColor = textColor
if (dimPastEvents && event.isPastEvent) { if (dimPastEvents && event.isPastEvent && !isPrintVersion) {
newTextColor = newTextColor.adjustAlpha(LOW_ALPHA) newTextColor = newTextColor.adjustAlpha(LOW_ALPHA)
} }

View File

@@ -37,6 +37,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
private val now = getNowSeconds() private val now = getNowSeconds()
private var use24HourFormat = activity.config.use24HourFormat private var use24HourFormat = activity.config.use24HourFormat
private var currentItemsHash = listItems.hashCode() private var currentItemsHash = listItems.hashCode()
private var isPrintVersion = false
init { init {
setupDragListener(true) setupDragListener(true)
@@ -131,6 +132,16 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
} }
} }
fun togglePrintMode() {
isPrintVersion = !isPrintVersion
textColor = if (isPrintVersion) {
resources.getColor(R.color.theme_light_text_color)
} else {
baseConfig.textColor
}
notifyDataSetChanged()
}
private fun setupListEvent(view: View, listEvent: ListEvent) { private fun setupListEvent(view: View, listEvent: ListEvent) {
view.apply { view.apply {
event_item_frame.isSelected = selectedKeys.contains(listEvent.hashCode()) event_item_frame.isSelected = selectedKeys.contains(listEvent.hashCode())
@@ -161,15 +172,15 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
var startTextColor = textColor var startTextColor = textColor
var endTextColor = textColor var endTextColor = textColor
if (listEvent.isAllDay || listEvent.startTS <= now && listEvent.endTS <= now) { if (listEvent.isAllDay || listEvent.startTS <= now && listEvent.endTS <= now) {
if (listEvent.isAllDay && Formatter.getDayCodeFromTS(listEvent.startTS) == Formatter.getDayCodeFromTS(now)) { if (listEvent.isAllDay && Formatter.getDayCodeFromTS(listEvent.startTS) == Formatter.getDayCodeFromTS(now) && !isPrintVersion) {
startTextColor = primaryColor startTextColor = primaryColor
} }
if (dimPastEvents && listEvent.isPastEvent) { if (dimPastEvents && listEvent.isPastEvent && !isPrintVersion) {
startTextColor = startTextColor.adjustAlpha(LOW_ALPHA) startTextColor = startTextColor.adjustAlpha(LOW_ALPHA)
endTextColor = endTextColor.adjustAlpha(LOW_ALPHA) endTextColor = endTextColor.adjustAlpha(LOW_ALPHA)
} }
} else if (listEvent.startTS <= now && listEvent.endTS >= now) { } else if (listEvent.startTS <= now && listEvent.endTS >= now && !isPrintVersion) {
startTextColor = primaryColor startTextColor = primaryColor
} }
@@ -184,8 +195,8 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
view.event_section_title.apply { view.event_section_title.apply {
text = listSection.title text = listSection.title
setCompoundDrawablesWithIntrinsicBounds(null, if (position == 0) null else topDivider, null, null) setCompoundDrawablesWithIntrinsicBounds(null, if (position == 0) null else topDivider, null, null)
var color = if (listSection.isToday) primaryColor else textColor var color = if (listSection.isToday && !isPrintVersion) primaryColor else textColor
if (dimPastEvents && listSection.isPastSection) { if (dimPastEvents && listSection.isPastSection && !isPrintVersion) {
color = color.adjustAlpha(LOW_ALPHA) color = color.adjustAlpha(LOW_ALPHA)
} }
setTextColor(color) setTextColor(color)

View File

@@ -48,7 +48,10 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
setupListEvent(remoteView, event) setupListEvent(remoteView, event)
} else { } else {
remoteView = RemoteViews(context.packageName, R.layout.event_list_section_widget) remoteView = RemoteViews(context.packageName, R.layout.event_list_section_widget)
setupListSection(remoteView, events[position] as ListSection) val section = events.getOrNull(position) as? ListSection
if (section != null) {
setupListSection(remoteView, section)
}
} }
return remoteView return remoteView

View File

@@ -33,4 +33,8 @@ class MyDayPagerAdapter(fm: FragmentManager, private val mCodes: List<String>, p
mFragments[pos + i]?.updateCalendar() mFragments[pos + i]?.updateCalendar()
} }
} }
fun printCurrentView(pos: Int) {
mFragments[pos].printCurrentView()
}
} }

View File

@@ -32,4 +32,8 @@ class MyMonthPagerAdapter(fm: FragmentManager, private val mCodes: List<String>,
mFragments[pos + i]?.updateCalendar() mFragments[pos + i]?.updateCalendar()
} }
} }
fun printCurrentView(pos: Int) {
mFragments[pos].printCurrentView()
}
} }

View File

@@ -8,6 +8,7 @@ import androidx.fragment.app.FragmentStatePagerAdapter
import com.simplemobiletools.calendar.pro.fragments.WeekFragment import com.simplemobiletools.calendar.pro.fragments.WeekFragment
import com.simplemobiletools.calendar.pro.helpers.WEEK_START_TIMESTAMP import com.simplemobiletools.calendar.pro.helpers.WEEK_START_TIMESTAMP
import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener
import com.simplemobiletools.commons.helpers.DAY_SECONDS
class MyWeekPagerAdapter(fm: FragmentManager, private val mWeekTimestamps: List<Long>, private val mListener: WeekFragmentListener) : FragmentStatePagerAdapter(fm) { class MyWeekPagerAdapter(fm: FragmentManager, private val mWeekTimestamps: List<Long>, private val mListener: WeekFragmentListener) : FragmentStatePagerAdapter(fm) {
private val mFragments = SparseArray<WeekFragment>() private val mFragments = SparseArray<WeekFragment>()
@@ -42,4 +43,17 @@ class MyWeekPagerAdapter(fm: FragmentManager, private val mWeekTimestamps: List<
mFragments[pos - 1]?.updateNotVisibleViewScaleLevel() mFragments[pos - 1]?.updateNotVisibleViewScaleLevel()
mFragments[pos + 1]?.updateNotVisibleViewScaleLevel() mFragments[pos + 1]?.updateNotVisibleViewScaleLevel()
} }
fun updateVisibleDaysCount(pos: Int, count: Int, currentWeekTimestamp: Long) {
mFragments[pos - 1]?.updateWeekStartTimestamp(currentWeekTimestamp - count * DAY_SECONDS)
mFragments[pos + 1]?.updateWeekStartTimestamp(currentWeekTimestamp + count * DAY_SECONDS)
for (i in -1..1) {
mFragments[pos + i]?.updateVisibleDaysCount(count)
}
}
fun togglePrintMode(pos: Int) {
mFragments[pos].togglePrintMode()
}
} }

View File

@@ -30,4 +30,8 @@ class MyYearPagerAdapter(fm: FragmentManager, val mYears: List<Int>) : FragmentS
mFragments[pos + i]?.updateCalendar() mFragments[pos + i]?.updateCalendar()
} }
} }
fun printCurrentView(pos: Int) {
mFragments[pos].printCurrentView()
}
} }

View File

@@ -19,11 +19,11 @@ class FilterEventTypesDialog(val activity: SimpleActivity, val callback: () -> U
view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, it, displayEventTypes) view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, it, displayEventTypes)
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() } .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this, R.string.filter_events_by_type) activity.setupDialogStuff(view, this)
} }
} }
} }

View File

@@ -96,7 +96,7 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal
IMPORT_NOTHING_NEW -> R.string.no_new_items IMPORT_NOTHING_NEW -> R.string.no_new_items
IMPORT_OK -> R.string.importing_successful IMPORT_OK -> R.string.importing_successful
IMPORT_PARTIAL -> R.string.importing_some_entries_failed IMPORT_PARTIAL -> R.string.importing_some_entries_failed
else -> R.string.importing_failed else -> R.string.no_items_found
}) })
callback(result != IMPORT_FAIL) callback(result != IMPORT_FAIL)
} }

View File

@@ -8,7 +8,9 @@ import android.content.ComponentName
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.res.Resources import android.content.res.Resources
import android.graphics.Bitmap
import android.media.AudioAttributes import android.media.AudioAttributes
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
@@ -20,6 +22,7 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.app.AlarmManagerCompat import androidx.core.app.AlarmManagerCompat
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.print.PrintHelper
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.EventActivity import com.simplemobiletools.calendar.pro.activities.EventActivity
import com.simplemobiletools.calendar.pro.activities.SnoozeReminderActivity import com.simplemobiletools.calendar.pro.activities.SnoozeReminderActivity
@@ -34,8 +37,6 @@ import com.simplemobiletools.calendar.pro.receivers.NotificationReceiver
import com.simplemobiletools.calendar.pro.services.SnoozeService import com.simplemobiletools.calendar.pro.services.SnoozeService
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import org.joda.time.LocalDate import org.joda.time.LocalDate
import java.util.* import java.util.*
@@ -339,20 +340,23 @@ fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode()) {
} }
fun Context.getNewEventTimestampFromCode(dayCode: String): Long { fun Context.getNewEventTimestampFromCode(dayCode: String): Long {
val calendar = Calendar.getInstance()
val defaultStartTime = config.defaultStartTime val defaultStartTime = config.defaultStartTime
val currHour = DateTime(System.currentTimeMillis(), DateTimeZone.getDefault()).hourOfDay val currHour = calendar.get(Calendar.HOUR_OF_DAY)
var dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(currHour) var dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(currHour)
var newDateTime = dateTime.plusHours(1).withMinuteOfHour(0).withSecondOfMinute(0).withMillisOfSecond(0) var newDateTime = dateTime.plusHours(1).withMinuteOfHour(0).withSecondOfMinute(0).withMillisOfSecond(0)
if (defaultStartTime != -1) { return if (defaultStartTime == -1) {
newDateTime.seconds()
} else {
val hours = defaultStartTime / 60 val hours = defaultStartTime / 60
val minutes = defaultStartTime % 60 val minutes = defaultStartTime % 60
dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(hours).withMinuteOfHour(minutes) dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(hours).withMinuteOfHour(minutes)
newDateTime = dateTime newDateTime = dateTime
}
// make sure the date doesn't change // make sure the date doesn't change
return newDateTime.withDate(dateTime.year, dateTime.monthOfYear, dateTime.dayOfMonth).seconds() newDateTime.withDate(dateTime.year, dateTime.monthOfYear, dateTime.dayOfMonth).seconds()
}
} }
fun Context.getSyncedCalDAVCalendars() = calDAVHelper.getCalDAVCalendars(config.caldavSyncedCalendarIds, false) fun Context.getSyncedCalDAVCalendars() = calDAVHelper.getCalDAVCalendars(config.caldavSyncedCalendarIds, false)
@@ -542,3 +546,10 @@ fun Context.getWeeklyViewItemHeight(): Float {
val multiplier = config.weeklyViewItemHeightMultiplier val multiplier = config.weeklyViewItemHeightMultiplier
return defaultHeight * multiplier return defaultHeight * multiplier
} }
fun Context.printBitmap(bitmap: Bitmap) {
val printHelper = PrintHelper(this)
printHelper.scaleMode = PrintHelper.SCALE_MODE_FIT
printHelper.orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
printHelper.printBitmap(getString(R.string.app_name), bitmap)
}

View File

@@ -0,0 +1,13 @@
package com.simplemobiletools.calendar.pro.extensions
import android.graphics.Bitmap
import android.graphics.Canvas
import android.view.View
fun View.getViewBitmap(): Bitmap {
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
layout(left, top, right, bottom)
draw(canvas)
return bitmap
}

View File

@@ -2,6 +2,7 @@ package com.simplemobiletools.calendar.pro.fragments
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@@ -14,6 +15,8 @@ import com.simplemobiletools.calendar.pro.activities.SimpleActivity
import com.simplemobiletools.calendar.pro.adapters.DayEventsAdapter import com.simplemobiletools.calendar.pro.adapters.DayEventsAdapter
import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.extensions.eventsHelper
import com.simplemobiletools.calendar.pro.extensions.getViewBitmap
import com.simplemobiletools.calendar.pro.extensions.printBitmap
import com.simplemobiletools.calendar.pro.helpers.DAY_CODE import com.simplemobiletools.calendar.pro.helpers.DAY_CODE
import com.simplemobiletools.calendar.pro.helpers.EVENT_ID import com.simplemobiletools.calendar.pro.helpers.EVENT_ID
import com.simplemobiletools.calendar.pro.helpers.EVENT_OCCURRENCE_TS import com.simplemobiletools.calendar.pro.helpers.EVENT_OCCURRENCE_TS
@@ -21,6 +24,8 @@ import com.simplemobiletools.calendar.pro.helpers.Formatter
import com.simplemobiletools.calendar.pro.interfaces.NavigationListener import com.simplemobiletools.calendar.pro.interfaces.NavigationListener
import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.calendar.pro.models.Event
import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beGone
import com.simplemobiletools.commons.extensions.beVisible
import kotlinx.android.synthetic.main.fragment_day.view.* import kotlinx.android.synthetic.main.fragment_day.view.*
import kotlinx.android.synthetic.main.top_navigation.view.* import kotlinx.android.synthetic.main.top_navigation.view.*
import java.util.* import java.util.*
@@ -101,7 +106,7 @@ class DayFragment : Fragment() {
lastHash = newHash lastHash = newHash
val replaceDescription = context!!.config.replaceDescription val replaceDescription = context!!.config.replaceDescription
val sorted = ArrayList<Event>(events.sortedWith(compareBy({ !it.getIsAllDay() }, { it.startTS }, { it.endTS }, { it.title }, { val sorted = ArrayList(events.sortedWith(compareBy({ !it.getIsAllDay() }, { it.startTS }, { it.endTS }, { it.title }, {
if (replaceDescription) it.location else it.description if (replaceDescription) it.location else it.description
}))) })))
@@ -128,4 +133,24 @@ class DayFragment : Fragment() {
startActivity(this) startActivity(this)
} }
} }
fun printCurrentView() {
mHolder.apply {
top_left_arrow.beGone()
top_right_arrow.beGone()
top_value.setTextColor(resources.getColor(R.color.theme_light_text_color))
(day_events.adapter as? DayEventsAdapter)?.togglePrintMode()
Handler().postDelayed({
context!!.printBitmap(day_holder.getViewBitmap())
Handler().postDelayed({
top_left_arrow.beVisible()
top_right_arrow.beVisible()
top_value.setTextColor(context!!.config.textColor)
(day_events.adapter as? DayEventsAdapter)?.togglePrintMode()
}, 1000)
}, 1000)
}
}
} }

View File

@@ -138,4 +138,8 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
} }
override fun getNewEventDayCode() = currentDayCode override fun getNewEventDayCode() = currentDayCode
override fun printView() {
(viewPager?.adapter as? MyDayPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
}
} }

View File

@@ -3,10 +3,12 @@ package com.simplemobiletools.calendar.pro.fragments
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.EventActivity import com.simplemobiletools.calendar.pro.activities.EventActivity
import com.simplemobiletools.calendar.pro.activities.MainActivity import com.simplemobiletools.calendar.pro.activities.MainActivity
@@ -41,6 +43,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
private var minFetchedTS = 0L private var minFetchedTS = 0L
private var maxFetchedTS = 0L private var maxFetchedTS = 0L
private var wereInitialEventsAdded = false private var wereInitialEventsAdded = false
private var hasBeenScrolled = false
private var bottomItemAtRefresh: ListItem? = null private var bottomItemAtRefresh: ListItem? = null
private var use24HourFormat = false private var use24HourFormat = false
@@ -133,6 +136,16 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
fetchNextPeriod() fetchNextPeriod()
} }
} }
mView.calendar_events_list.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (!hasBeenScrolled) {
hasBeenScrolled = true
activity?.invalidateOptionsMenu()
}
}
})
} else { } else {
(currAdapter as EventListAdapter).updateListItems(listItems) (currAdapter as EventListAdapter).updateListItems(listItems)
if (updateStatus == UPDATE_TOP) { if (updateStatus == UPDATE_TOP) {
@@ -194,6 +207,10 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
val firstNonPastSectionIndex = listItems.indexOfFirst { it is ListSection && !it.isPastSection } val firstNonPastSectionIndex = listItems.indexOfFirst { it is ListSection && !it.isPastSection }
if (firstNonPastSectionIndex != -1) { if (firstNonPastSectionIndex != -1) {
(mView.calendar_events_list.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(firstNonPastSectionIndex, 0) (mView.calendar_events_list.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(firstNonPastSectionIndex, 0)
mView.calendar_events_list.onGlobalLayout {
hasBeenScrolled = false
activity?.invalidateOptionsMenu()
}
} }
} }
@@ -203,11 +220,29 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
checkEvents() checkEvents()
} }
override fun shouldGoToTodayBeVisible() = false override fun shouldGoToTodayBeVisible() = hasBeenScrolled
override fun updateActionBarTitle() { override fun updateActionBarTitle() {
(activity as? MainActivity)?.updateActionBarTitle(getString(R.string.app_launcher_name)) (activity as? MainActivity)?.updateActionBarTitle(getString(R.string.app_launcher_name))
} }
override fun getNewEventDayCode() = Formatter.getTodayCode() override fun getNewEventDayCode() = Formatter.getTodayCode()
override fun printView() {
mView.apply {
if (calendar_events_list.isGone()) {
context.toast(R.string.no_items_found)
return@apply
}
(calendar_events_list.adapter as? EventListAdapter)?.togglePrintMode()
Handler().postDelayed({
context!!.printBitmap(calendar_events_list.getViewBitmap())
Handler().postDelayed({
(calendar_events_list.adapter as? EventListAdapter)?.togglePrintMode()
}, 1000)
}, 1000)
}
}
} }

View File

@@ -11,6 +11,8 @@ import androidx.fragment.app.Fragment
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.MainActivity import com.simplemobiletools.calendar.pro.activities.MainActivity
import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.extensions.getViewBitmap
import com.simplemobiletools.calendar.pro.extensions.printBitmap
import com.simplemobiletools.calendar.pro.helpers.Config import com.simplemobiletools.calendar.pro.helpers.Config
import com.simplemobiletools.calendar.pro.helpers.DAY_CODE import com.simplemobiletools.calendar.pro.helpers.DAY_CODE
import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.Formatter
@@ -19,6 +21,8 @@ import com.simplemobiletools.calendar.pro.interfaces.MonthlyCalendar
import com.simplemobiletools.calendar.pro.interfaces.NavigationListener import com.simplemobiletools.calendar.pro.interfaces.NavigationListener
import com.simplemobiletools.calendar.pro.models.DayMonthly import com.simplemobiletools.calendar.pro.models.DayMonthly
import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beGone
import com.simplemobiletools.commons.extensions.beVisible
import kotlinx.android.synthetic.main.fragment_month.view.* import kotlinx.android.synthetic.main.fragment_month.view.*
import kotlinx.android.synthetic.main.top_navigation.view.* import kotlinx.android.synthetic.main.top_navigation.view.*
import org.joda.time.DateTime import org.joda.time.DateTime
@@ -142,4 +146,20 @@ class MonthFragment : Fragment(), MonthlyCalendar {
(activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(it.code)) (activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(it.code))
} }
} }
fun printCurrentView() {
mHolder.apply {
top_left_arrow.beGone()
top_right_arrow.beGone()
top_value.setTextColor(resources.getColor(R.color.theme_light_text_color))
month_view_wrapper.togglePrintMode()
context!!.printBitmap(month_calendar_holder.getViewBitmap())
top_left_arrow.beVisible()
top_right_arrow.beVisible()
top_value.setTextColor(mConfig.textColor)
month_view_wrapper.togglePrintMode()
}
}
} }

View File

@@ -115,11 +115,11 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null) datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null)
AlertDialog.Builder(context!!) AlertDialog.Builder(context!!)
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { dialog, which -> datePicked(dateTime, datePicker) } .setPositiveButton(R.string.ok) { dialog, which -> datePicked(dateTime, datePicker) }
.create().apply { .create().apply {
activity?.setupDialogStuff(view, this) activity?.setupDialogStuff(view, this)
} }
} }
private fun datePicked(dateTime: DateTime, datePicker: DatePicker) { private fun datePicked(dateTime: DateTime, datePicker: DatePicker) {
@@ -140,4 +140,8 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
} }
override fun getNewEventDayCode() = if (shouldGoToTodayBeVisible()) currentDayCode else todayDayCode override fun getNewEventDayCode() = if (shouldGoToTodayBeVisible()) currentDayCode else todayDayCode
override fun printView() {
(viewPager?.adapter as? MyMonthPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
}
} }

View File

@@ -14,4 +14,6 @@ abstract class MyFragmentHolder : Fragment() {
abstract fun updateActionBarTitle() abstract fun updateActionBarTitle()
abstract fun getNewEventDayCode(): String abstract fun getNewEventDayCode(): String
abstract fun printView()
} }

View File

@@ -5,6 +5,7 @@ import android.content.Intent
import android.content.res.Resources import android.content.res.Resources
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.util.Range import android.util.Range
import android.view.* import android.view.*
import android.widget.ImageView import android.widget.ImageView
@@ -25,6 +26,7 @@ import com.simplemobiletools.calendar.pro.views.MyScrollView
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.DAY_SECONDS import com.simplemobiletools.commons.helpers.DAY_SECONDS
import com.simplemobiletools.commons.helpers.WEEK_SECONDS import com.simplemobiletools.commons.helpers.WEEK_SECONDS
import com.simplemobiletools.commons.views.MyTextView
import kotlinx.android.synthetic.main.fragment_week.* import kotlinx.android.synthetic.main.fragment_week.*
import kotlinx.android.synthetic.main.fragment_week.view.* import kotlinx.android.synthetic.main.fragment_week.view.*
import org.joda.time.DateTime import org.joda.time.DateTime
@@ -56,11 +58,14 @@ class WeekFragment : Fragment(), WeeklyCalendar {
private var wasExtraHeightAdded = false private var wasExtraHeightAdded = false
private var dimPastEvents = true private var dimPastEvents = true
private var wasScaled = false private var wasScaled = false
private var isPrintVersion = false
private var selectedGrid: View? = null private var selectedGrid: View? = null
private var currentTimeView: ImageView? = null private var currentTimeView: ImageView? = null
private var fadeOutHandler = Handler()
private var allDayHolders = ArrayList<RelativeLayout>() private var allDayHolders = ArrayList<RelativeLayout>()
private var allDayRows = ArrayList<HashSet<Int>>() private var allDayRows = ArrayList<HashSet<Int>>()
private var currEvents = ArrayList<Event>() private var currEvents = ArrayList<Event>()
private var dayColumns = ArrayList<RelativeLayout>()
private var eventTypeColors = LongSparseArray<Int>() private var eventTypeColors = LongSparseArray<Int>()
private var eventTimeRanges = LinkedHashMap<String, ArrayList<EventWeeklyView>>() private var eventTimeRanges = LinkedHashMap<String, ArrayList<EventWeeklyView>>()
@@ -105,6 +110,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
} }
addDayColumns()
scrollView.setOnScrollviewListener(object : MyScrollView.ScrollViewListener { scrollView.setOnScrollviewListener(object : MyScrollView.ScrollViewListener {
override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) { override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) {
checkScrollLimits(y) checkScrollLimits(y)
@@ -113,7 +119,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
scrollView.onGlobalLayout { scrollView.onGlobalLayout {
if (fullHeight < scrollView.height) { if (fullHeight < scrollView.height) {
scrollView.layoutParams.height = fullHeight - context!!.resources.getDimension(R.dimen.one_dp).toInt() scrollView.layoutParams.height = fullHeight - res.getDimension(R.dimen.one_dp).toInt()
} }
val initialScrollY = (rowHeight * config.startWeeklyAt).toInt() val initialScrollY = (rowHeight * config.startWeeklyAt).toInt()
@@ -134,6 +140,10 @@ class WeekFragment : Fragment(), WeeklyCalendar {
setupDayLabels() setupDayLabels()
updateCalendar() updateCalendar()
if (rowHeight != 0f && mView.width != 0) {
addCurrentTimeIndicator()
}
} }
override fun onPause() { override fun onPause() {
@@ -153,7 +163,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
listener?.updateHoursTopMargin(mView.week_top_holder.height) listener?.updateHoursTopMargin(mView.week_top_holder.height)
checkScrollLimits(scrollView.scrollY) checkScrollLimits(scrollView.scrollY)
// fix some glitches like at swiping from a fully scaled out fragment will all-day events to an empty one // fix some glitches like at swiping from a fully scaled out fragment with all-day events to an empty one
val fullFragmentHeight = (listener?.getFullFragmentHeight() ?: 0) - mView.week_top_holder.height val fullFragmentHeight = (listener?.getFullFragmentHeight() ?: 0) - mView.week_top_holder.height
if (scrollView.height < fullFragmentHeight) { if (scrollView.height < fullFragmentHeight) {
config.weeklyViewItemHeightMultiplier = fullFragmentHeight / 24 / defaultRowHeight config.weeklyViewItemHeightMultiplier = fullFragmentHeight / 24 / defaultRowHeight
@@ -164,25 +174,67 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
fun updateCalendar() { fun updateCalendar() {
WeeklyCalendarImpl(this, context!!).updateWeeklyCalendar(weekTimestamp) if (context != null) {
WeeklyCalendarImpl(this, context!!).updateWeeklyCalendar(weekTimestamp)
}
}
fun updateVisibleDaysCount(count: Int) {
dayColumns.clear()
addDayColumns()
mView.week_horizontal_grid_holder.apply {
daysCount = count
invalidate()
}
addEvents(currEvents)
setupDayLabels()
}
fun updateWeekStartTimestamp(newTimestamp: Long) {
weekTimestamp = newTimestamp
updateCalendar()
}
private fun addDayColumns() {
mView.week_events_columns_holder.removeAllViews()
(0 until config.weeklyViewDays).forEach {
val column = inflater.inflate(R.layout.weekly_view_day_column, mView.week_events_columns_holder, false) as RelativeLayout
column.tag = Formatter.getUTCDayCodeFromTS(weekTimestamp + it * DAY_SECONDS)
mView.week_events_columns_holder.addView(column)
dayColumns.add(column)
}
} }
private fun setupDayLabels() { private fun setupDayLabels() {
var curDay = Formatter.getDateTimeFromTS(weekTimestamp) var curDay = Formatter.getUTCDateTimeFromTS(weekTimestamp)
val textColor = config.textColor val textColor = if (isPrintVersion) resources.getColor(R.color.theme_light_text_color) else config.textColor
val todayCode = Formatter.getDayCodeFromDateTime(DateTime()) val todayCode = Formatter.getDayCodeFromDateTime(DateTime())
for (i in 0..6) { val screenWidth = context?.usableScreenSize?.x ?: return
val dayWidth = screenWidth / config.weeklyViewDays
val useLongerDayLabels = dayWidth > res.getDimension(R.dimen.weekly_view_min_day_label)
mView.week_letters_holder.removeAllViews()
for (i in 0 until config.weeklyViewDays) {
val dayCode = Formatter.getDayCodeFromDateTime(curDay) val dayCode = Formatter.getDayCodeFromDateTime(curDay)
val dayLetters = res.getStringArray(R.array.week_day_letters).toMutableList() as ArrayList<String> val labelIDs = if (useLongerDayLabels) {
R.array.week_days_short
} else {
R.array.week_day_letters
}
val dayLetters = res.getStringArray(labelIDs).toMutableList() as ArrayList<String>
val dayLetter = dayLetters[curDay.dayOfWeek - 1] val dayLetter = dayLetters[curDay.dayOfWeek - 1]
mView.findViewById<TextView>(res.getIdentifier("week_day_label_$i", "id", context!!.packageName)).apply { val label = inflater.inflate(R.layout.weekly_view_day_letter, mView.week_letters_holder, false) as MyTextView
text = "$dayLetter\n${curDay.dayOfMonth}" label.text = "$dayLetter\n${curDay.dayOfMonth}"
setTextColor(if (todayCode == dayCode) primaryColor else textColor) label.setTextColor(if (todayCode == dayCode && !isPrintVersion) primaryColor else textColor)
if (todayCode == dayCode) { if (todayCode == dayCode) {
todayColumnIndex = i todayColumnIndex = i
}
} }
mView.week_letters_holder.addView(label)
curDay = curDay.plusDays(1) curDay = curDay.plusDays(1)
} }
} }
@@ -194,16 +246,16 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
private fun initGrid() { private fun initGrid() {
(0..6).map { getColumnWithId(it) } (0 until config.weeklyViewDays).mapNotNull { dayColumns.getOrNull(it) }
.forEachIndexed { index, layout -> .forEachIndexed { index, layout ->
layout.removeAllViews() layout.removeAllViews()
val gestureDetector = getViewGestureDetector(layout, index) val gestureDetector = getViewGestureDetector(layout, index)
layout.setOnTouchListener { view, motionEvent -> layout.setOnTouchListener { view, motionEvent ->
gestureDetector.onTouchEvent(motionEvent) gestureDetector.onTouchEvent(motionEvent)
true true
}
} }
}
} }
private fun getViewGestureDetector(view: ViewGroup, index: Int): GestureDetector { private fun getViewGestureDetector(view: ViewGroup, index: Int): GestureDetector {
@@ -222,7 +274,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
applyColorFilter(primaryColor.getContrastColor()) applyColorFilter(primaryColor.getContrastColor())
setOnClickListener { setOnClickListener {
val timestamp = weekTimestamp + index * DAY_SECONDS + hour * 60 * 60 val timestamp = Formatter.getDateTimeFromTS(weekTimestamp + index * DAY_SECONDS).withTime(hour, 0, 0, 0).seconds()
Intent(context, EventActivity::class.java).apply { Intent(context, EventActivity::class.java).apply {
putExtra(NEW_EVENT_START_TS, timestamp) putExtra(NEW_EVENT_START_TS, timestamp)
putExtra(NEW_EVENT_SET_HOUR_DURATION, true) putExtra(NEW_EVENT_SET_HOUR_DURATION, true)
@@ -230,9 +282,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
} }
animate().setStartDelay(PLUS_FADEOUT_DELAY).alpha(0f).withEndAction { // do not use setStartDelay, it will trigger instantly if the device has disabled animations
beGone() fadeOutHandler.removeCallbacksAndMessages(null)
} fadeOutHandler.postDelayed({
animate().alpha(0f).withEndAction {
beGone()
}
}, PLUS_FADEOUT_DELAY)
} }
return super.onSingleTapUp(event) return super.onSingleTapUp(event)
} }
@@ -294,7 +350,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
if (context != null && activity != null && isAdded) { if (context != null && activity != null && isAdded) {
val replaceDescription = config.replaceDescription val replaceDescription = config.replaceDescription
val sorted = events.sortedWith( val sorted = events.sortedWith(
compareBy<Event> { it.startTS }.thenBy { it.endTS }.thenBy { it.title }.thenBy { if (replaceDescription) it.location else it.description } compareBy<Event> { it.startTS }.thenBy { it.endTS }.thenBy { it.title }.thenBy { if (replaceDescription) it.location else it.description }
).toMutableList() as ArrayList<Event> ).toMutableList() as ArrayList<Event>
currEvents = sorted currEvents = sorted
@@ -306,7 +362,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
private fun updateViewScale() { private fun updateViewScale() {
rowHeight = context?.getWeeklyViewItemHeight() ?: return rowHeight = context?.getWeeklyViewItemHeight() ?: return
val oneDp = context!!.resources.getDimension(R.dimen.one_dp).toInt() val oneDp = res.getDimension(R.dimen.one_dp).toInt()
val fullHeight = Math.max(rowHeight.toInt() * 24, scrollView.height + oneDp) val fullHeight = Math.max(rowHeight.toInt() * 24, scrollView.height + oneDp)
scrollView.layoutParams.height = fullHeight - oneDp scrollView.layoutParams.height = fullHeight - oneDp
mView.week_horizontal_grid_holder.layoutParams.height = fullHeight mView.week_horizontal_grid_holder.layoutParams.height = fullHeight
@@ -321,15 +377,12 @@ class WeekFragment : Fragment(), WeeklyCalendar {
eventTimeRanges.clear() eventTimeRanges.clear()
allDayRows.add(HashSet()) allDayRows.add(HashSet())
week_all_day_holder?.removeAllViews() week_all_day_holder?.removeAllViews()
addNewLine() addNewLine()
val minuteHeight = rowHeight / 60 val minuteHeight = rowHeight / 60
val minimalHeight = res.getDimension(R.dimen.weekly_view_minimal_event_height).toInt() val minimalHeight = res.getDimension(R.dimen.weekly_view_minimal_event_height).toInt()
val density = Math.round(res.displayMetrics.density) val density = Math.round(res.displayMetrics.density)
var hadAllDayEvent = false
for (event in events) { for (event in events) {
val startDateTime = Formatter.getDateTimeFromTS(event.startTS) val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
val endDateTime = Formatter.getDateTimeFromTS(event.endTS) val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
@@ -352,17 +405,18 @@ class WeekFragment : Fragment(), WeeklyCalendar {
val startDateTime = Formatter.getDateTimeFromTS(event.startTS) val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
val endDateTime = Formatter.getDateTimeFromTS(event.endTS) val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
if (event.getIsAllDay() || Formatter.getDayCodeFromDateTime(startDateTime) != Formatter.getDayCodeFromDateTime(endDateTime)) { if (event.getIsAllDay() || Formatter.getDayCodeFromDateTime(startDateTime) != Formatter.getDayCodeFromDateTime(endDateTime)) {
hadAllDayEvent = true
addAllDayEvent(event) addAllDayEvent(event)
} else { } else {
val dayOfWeek = startDateTime.plusDays(if (config.isSundayFirst) 1 else 0).dayOfWeek - 1 val dayCode = Formatter.getDayCodeFromDateTime(startDateTime)
val layout = getColumnWithId(dayOfWeek) val dayOfWeek = dayColumns.indexOfFirst { it.tag == dayCode }
if (dayOfWeek == -1 || dayOfWeek >= config.weeklyViewDays) {
continue
}
val startMinutes = startDateTime.minuteOfDay val startMinutes = startDateTime.minuteOfDay
val duration = endDateTime.minuteOfDay - startMinutes val duration = endDateTime.minuteOfDay - startMinutes
val range = Range(startMinutes, startMinutes + duration) val range = Range(startMinutes, startMinutes + duration)
val dayCode = Formatter.getDayCodeFromDateTime(startDateTime)
var overlappingEvents = 0 var overlappingEvents = 0
var currentEventOverlapIndex = 0 var currentEventOverlapIndex = 0
var foundCurrentEvent = false var foundCurrentEvent = false
@@ -381,10 +435,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
} }
val dayColumn = dayColumns[dayOfWeek]
(inflater.inflate(R.layout.week_event_marker, null, false) as TextView).apply { (inflater.inflate(R.layout.week_event_marker, null, false) as TextView).apply {
var backgroundColor = eventTypeColors.get(event.eventType, primaryColor) var backgroundColor = eventTypeColors.get(event.eventType, primaryColor)
var textColor = backgroundColor.getContrastColor() var textColor = backgroundColor.getContrastColor()
if (dimPastEvents && event.isPastEvent) { if (dimPastEvents && event.isPastEvent && !isPrintVersion) {
backgroundColor = backgroundColor.adjustAlpha(LOW_ALPHA) backgroundColor = backgroundColor.adjustAlpha(LOW_ALPHA)
textColor = textColor.adjustAlpha(LOW_ALPHA) textColor = textColor.adjustAlpha(LOW_ALPHA)
} }
@@ -393,10 +448,10 @@ class WeekFragment : Fragment(), WeeklyCalendar {
setTextColor(textColor) setTextColor(textColor)
text = event.title text = event.title
contentDescription = text contentDescription = text
layout.addView(this) dayColumn.addView(this)
y = startMinutes * minuteHeight y = startMinutes * minuteHeight
(layoutParams as RelativeLayout.LayoutParams).apply { (layoutParams as RelativeLayout.LayoutParams).apply {
width = layout.width - 1 width = dayColumn.width - 1
width /= Math.max(overlappingEvents, 1) width /= Math.max(overlappingEvents, 1)
if (overlappingEvents > 1) { if (overlappingEvents > 1) {
x = width * currentEventOverlapIndex.toFloat() x = width * currentEventOverlapIndex.toFloat()
@@ -429,37 +484,51 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
} }
if (!hadAllDayEvent) { checkTopHolderHeight()
checkTopHolderHeight() addCurrentTimeIndicator()
}
addCurrentTimeIndicator(minuteHeight)
} }
private fun addNewLine() { private fun addNewLine() {
val allDaysLine = inflater.inflate(R.layout.all_day_events_holder_line, null, false) as RelativeLayout val allDaysLine = inflater.inflate(R.layout.all_day_events_holder_line, null, false) as RelativeLayout
week_all_day_holder.addView(allDaysLine) week_all_day_holder?.addView(allDaysLine)
allDayHolders.add(allDaysLine) allDayHolders.add(allDaysLine)
} }
private fun addCurrentTimeIndicator(minuteHeight: Float) { private fun addCurrentTimeIndicator() {
if (todayColumnIndex != -1) { if (todayColumnIndex != -1) {
val minutes = DateTime().minuteOfDay val calendar = Calendar.getInstance()
val todayColumn = getColumnWithId(todayColumnIndex) val minutes = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)
if (todayColumnIndex >= dayColumns.size) {
currentTimeView?.alpha = 0f
return
}
if (currentTimeView != null) { if (currentTimeView != null) {
mView.week_events_holder.removeView(currentTimeView) mView.week_events_holder.removeView(currentTimeView)
} }
if (isPrintVersion) {
return
}
val weeklyViewDays = config.weeklyViewDays
currentTimeView = (inflater.inflate(R.layout.week_now_marker, null, false) as ImageView).apply { currentTimeView = (inflater.inflate(R.layout.week_now_marker, null, false) as ImageView).apply {
applyColorFilter(primaryColor) applyColorFilter(primaryColor)
mView.week_events_holder.addView(this, 0) mView.week_events_holder.addView(this, 0)
val extraWidth = (todayColumn.width * 0.3).toInt() val extraWidth = res.getDimension(R.dimen.activity_margin).toInt()
val markerHeight = res.getDimension(R.dimen.weekly_view_now_height).toInt() val markerHeight = res.getDimension(R.dimen.weekly_view_now_height).toInt()
val minuteHeight = rowHeight / 60
(layoutParams as RelativeLayout.LayoutParams).apply { (layoutParams as RelativeLayout.LayoutParams).apply {
width = todayColumn.width + extraWidth width = (mView.width / weeklyViewDays) + extraWidth
height = markerHeight height = markerHeight
} }
x = todayColumn.x - extraWidth / 2
x = if (weeklyViewDays == 1) {
0f
} else {
(mView.width / weeklyViewDays * todayColumnIndex).toFloat() - extraWidth / 2f
}
y = minutes * minuteHeight - markerHeight / 2 y = minutes * minuteHeight - markerHeight / 2
} }
} }
@@ -477,7 +546,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
(inflater.inflate(R.layout.week_all_day_event_marker, null, false) as TextView).apply { (inflater.inflate(R.layout.week_all_day_event_marker, null, false) as TextView).apply {
var backgroundColor = eventTypeColors.get(event.eventType, primaryColor) var backgroundColor = eventTypeColors.get(event.eventType, primaryColor)
var textColor = backgroundColor.getContrastColor() var textColor = backgroundColor.getContrastColor()
if (dimPastEvents && event.isPastEvent) { if (dimPastEvents && event.isPastEvent && !isPrintVersion) {
backgroundColor = backgroundColor.adjustAlpha(LOW_ALPHA) backgroundColor = backgroundColor.adjustAlpha(LOW_ALPHA)
textColor = textColor.adjustAlpha(LOW_ALPHA) textColor = textColor.adjustAlpha(LOW_ALPHA)
} }
@@ -491,7 +560,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
val endDateTime = Formatter.getDateTimeFromTS(event.endTS) val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
val minTS = Math.max(startDateTime.seconds(), weekTimestamp) val minTS = Math.max(startDateTime.seconds(), weekTimestamp)
val maxTS = Math.min(endDateTime.seconds(), weekTimestamp + WEEK_SECONDS) val maxTS = Math.min(endDateTime.seconds(), weekTimestamp + 2 * WEEK_SECONDS)
// fix a visual glitch with all-day events or events lasting multiple days starting at midnight on monday, being shown the previous week too // fix a visual glitch with all-day events or events lasting multiple days starting at midnight on monday, being shown the previous week too
if (minTS == maxTS && (minTS - weekTimestamp == WEEK_SECONDS.toLong())) { if (minTS == maxTS && (minTS - weekTimestamp == WEEK_SECONDS.toLong())) {
@@ -532,16 +601,25 @@ class WeekFragment : Fragment(), WeeklyCalendar {
allDayRows.last().add(dayIndex) allDayRows.last().add(dayIndex)
} }
} }
if (wasEventHandled) { if (wasEventHandled) {
break break
} }
} }
val dayCodeStart = Formatter.getDayCodeFromDateTime(startDateTime).toInt()
val dayCodeEnd = Formatter.getDayCodeFromDateTime(endDateTime).toInt()
val dayOfWeek = dayColumns.indexOfFirst { it.tag.toInt() == dayCodeStart || (it.tag.toInt() > dayCodeStart && it.tag.toInt() <= dayCodeEnd) }
if (dayOfWeek == -1) {
return
}
allDayHolders[drawAtLine].addView(this) allDayHolders[drawAtLine].addView(this)
val dayWidth = mView.width / config.weeklyViewDays
(layoutParams as RelativeLayout.LayoutParams).apply { (layoutParams as RelativeLayout.LayoutParams).apply {
leftMargin = getColumnWithId(firstDayIndex).x.toInt() leftMargin = dayOfWeek * dayWidth
bottomMargin = 1 bottomMargin = 1
width = getColumnWithId(Math.min(firstDayIndex + daysCnt, 6)).right - leftMargin - 1 width = (dayWidth) * (daysCnt + 1)
} }
calculateExtraHeight() calculateExtraHeight()
@@ -570,8 +648,6 @@ class WeekFragment : Fragment(), WeeklyCalendar {
} }
} }
private fun getColumnWithId(id: Int) = mView.findViewById<ViewGroup>(res.getIdentifier("week_column_$id", "id", context!!.packageName))
fun updateScrollY(y: Int) { fun updateScrollY(y: Int) {
if (wasFragmentInit) { if (wasFragmentInit) {
scrollView.scrollY = y scrollView.scrollY = y
@@ -583,4 +659,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
updateViewScale() updateViewScale()
} }
} }
fun togglePrintMode() {
isPrintVersion = !isPrintVersion
updateCalendar()
setupDayLabels()
addEvents(currEvents)
}
} }

View File

@@ -1,11 +1,14 @@
package com.simplemobiletools.calendar.pro.fragments package com.simplemobiletools.calendar.pro.fragments
import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.DatePicker import android.widget.DatePicker
import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@@ -13,9 +16,7 @@ import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.MainActivity import com.simplemobiletools.calendar.pro.activities.MainActivity
import com.simplemobiletools.calendar.pro.adapters.MyWeekPagerAdapter import com.simplemobiletools.calendar.pro.adapters.MyWeekPagerAdapter
import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.extensions.*
import com.simplemobiletools.calendar.pro.extensions.getWeeklyViewItemHeight
import com.simplemobiletools.calendar.pro.extensions.seconds
import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.Formatter
import com.simplemobiletools.calendar.pro.helpers.WEEK_START_DATE_TIME import com.simplemobiletools.calendar.pro.helpers.WEEK_START_DATE_TIME
import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener
@@ -28,6 +29,7 @@ import org.joda.time.DateTime
class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
private val PREFILLED_WEEKS = 151 private val PREFILLED_WEEKS = 151
private val MAX_SEEKBAR_VALUE = 14
private var viewPager: MyViewPager? = null private var viewPager: MyViewPager? = null
private var weekHolder: ViewGroup? = null private var weekHolder: ViewGroup? = null
@@ -60,20 +62,7 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
private fun setupFragment() { private fun setupFragment() {
val weekTSs = getWeekTimestamps(currentWeekTS) val weekTSs = getWeekTimestamps(currentWeekTS)
val weeklyAdapter = MyWeekPagerAdapter(activity!!.supportFragmentManager, weekTSs, this) val weeklyAdapter = MyWeekPagerAdapter(activity!!.supportFragmentManager, weekTSs, this)
val itemHeight = context!!.getWeeklyViewItemHeight().toInt() addHours()
val textColor = context!!.config.textColor
weekHolder!!.week_view_hours_holder.removeAllViews()
val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0)
for (i in 1..23) {
val formattedHours = Formatter.getHours(context!!, hourDateTime.withHourOfDay(i))
(layoutInflater.inflate(R.layout.weekly_view_hour_textview, null, false) as TextView).apply {
text = formattedHours
setTextColor(textColor)
height = itemHeight
weekHolder!!.week_view_hours_holder.addView(this)
}
}
defaultWeeklyPage = weekTSs.size / 2 defaultWeeklyPage = weekTSs.size / 2
viewPager!!.apply { viewPager!!.apply {
@@ -104,16 +93,53 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
} }
}) })
weekHolder!!.week_view_hours_scrollview.setOnTouchListener { view, motionEvent -> true } weekHolder!!.week_view_hours_scrollview.setOnTouchListener { view, motionEvent -> true }
weekHolder!!.week_view_seekbar.apply {
progress = context?.config?.weeklyViewDays ?: 7
max = MAX_SEEKBAR_VALUE
onSeekBarChangeListener {
if (it == 0) {
progress = 1
}
updateWeeklyViewDays(progress)
}
}
// avoid seekbar width changing if the days count changes to 1, 10 etc
weekHolder!!.week_view_days_count.onGlobalLayout {
weekHolder!!.week_view_seekbar.layoutParams.width = weekHolder!!.week_view_seekbar.width
(weekHolder!!.week_view_seekbar.layoutParams as RelativeLayout.LayoutParams).removeRule(RelativeLayout.START_OF)
}
updateDaysCount(context?.config?.weeklyViewDays ?: 7)
updateActionBarTitle() updateActionBarTitle()
} }
private fun addHours(textColor: Int = context!!.config.textColor) {
val itemHeight = context!!.getWeeklyViewItemHeight().toInt()
weekHolder!!.week_view_hours_holder.removeAllViews()
val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0)
for (i in 1..23) {
val formattedHours = Formatter.getHours(context!!, hourDateTime.withHourOfDay(i))
(layoutInflater.inflate(R.layout.weekly_view_hour_textview, null, false) as TextView).apply {
text = formattedHours
setTextColor(textColor)
height = itemHeight
weekHolder!!.week_view_hours_holder.addView(this)
}
}
}
private fun getWeekTimestamps(targetSeconds: Long): List<Long> { private fun getWeekTimestamps(targetSeconds: Long): List<Long> {
val weekTSs = ArrayList<Long>(PREFILLED_WEEKS) val weekTSs = ArrayList<Long>(PREFILLED_WEEKS)
val dateTime = Formatter.getDateTimeFromTS(targetSeconds) val dateTime = Formatter.getDateTimeFromTS(targetSeconds)
var currentWeek = dateTime.minusWeeks(PREFILLED_WEEKS / 2) val shownWeekDays = context!!.config.weeklyViewDays
var currentWeek = dateTime.minusDays(PREFILLED_WEEKS / 2 * shownWeekDays)
for (i in 0 until PREFILLED_WEEKS) { for (i in 0 until PREFILLED_WEEKS) {
weekTSs.add(currentWeek.seconds()) weekTSs.add(currentWeek.seconds())
currentWeek = currentWeek.plusWeeks(1) currentWeek = currentWeek.plusDays(shownWeekDays)
} }
return weekTSs return weekTSs
} }
@@ -149,11 +175,11 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null) datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null)
AlertDialog.Builder(context!!) AlertDialog.Builder(context!!)
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.ok) { dialog, which -> dateSelected(dateTime, datePicker) } .setPositiveButton(R.string.ok) { dialog, which -> dateSelected(dateTime, datePicker) }
.create().apply { .create().apply {
activity?.setupDialogStuff(view, this) activity?.setupDialogStuff(view, this)
} }
} }
private fun dateSelected(dateTime: DateTime, datePicker: DatePicker) { private fun dateSelected(dateTime: DateTime, datePicker: DatePicker) {
@@ -176,6 +202,16 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
setupFragment() setupFragment()
} }
private fun updateWeeklyViewDays(days: Int) {
context!!.config.weeklyViewDays = days
updateDaysCount(days)
}
private fun updateDaysCount(cnt: Int) {
weekHolder!!.week_view_days_count.text = context!!.resources.getQuantityString(R.plurals.days, cnt, cnt)
(viewPager?.adapter as? MyWeekPagerAdapter)?.updateVisibleDaysCount(viewPager!!.currentItem, cnt, currentWeekTS)
}
override fun refreshEvents() { override fun refreshEvents() {
(viewPager?.adapter as? MyWeekPagerAdapter)?.updateCalendars(viewPager!!.currentItem) (viewPager?.adapter as? MyWeekPagerAdapter)?.updateCalendars(viewPager!!.currentItem)
} }
@@ -223,5 +259,29 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
(viewPager!!.adapter as? MyWeekPagerAdapter)?.updateNotVisibleScaleLevel(viewPager!!.currentItem) (viewPager!!.adapter as? MyWeekPagerAdapter)?.updateNotVisibleScaleLevel(viewPager!!.currentItem)
} }
override fun getFullFragmentHeight() = weekHolder!!.week_view_holder.height override fun getFullFragmentHeight() = weekHolder!!.week_view_holder.height - weekHolder!!.week_view_seekbar.height - weekHolder!!.week_view_days_count_divider.height
override fun printView() {
weekHolder!!.apply {
week_view_days_count_divider.beGone()
week_view_seekbar.beGone()
week_view_days_count.beGone()
addHours(resources.getColor(R.color.theme_light_text_color))
background = ColorDrawable(Color.WHITE)
(viewPager?.adapter as? MyWeekPagerAdapter)?.togglePrintMode(viewPager?.currentItem ?: 0)
Handler().postDelayed({
context!!.printBitmap(weekHolder!!.week_view_holder.getViewBitmap())
Handler().postDelayed({
week_view_days_count_divider.beVisible()
week_view_seekbar.beVisible()
week_view_days_count.beVisible()
addHours()
background = ColorDrawable(context!!.config.backgroundColor)
(viewPager?.adapter as? MyWeekPagerAdapter)?.togglePrintMode(viewPager?.currentItem ?: 0)
}, 1000)
}, 1000)
}
}
} }

View File

@@ -1,6 +1,5 @@
package com.simplemobiletools.calendar.pro.fragments package com.simplemobiletools.calendar.pro.fragments
import android.content.res.Resources
import android.os.Bundle import android.os.Bundle
import android.util.SparseArray import android.util.SparseArray
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -11,6 +10,8 @@ import androidx.fragment.app.Fragment
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.MainActivity import com.simplemobiletools.calendar.pro.activities.MainActivity
import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.extensions.getViewBitmap
import com.simplemobiletools.calendar.pro.extensions.printBitmap
import com.simplemobiletools.calendar.pro.helpers.YEAR_LABEL import com.simplemobiletools.calendar.pro.helpers.YEAR_LABEL
import com.simplemobiletools.calendar.pro.helpers.YearlyCalendarImpl import com.simplemobiletools.calendar.pro.helpers.YearlyCalendarImpl
import com.simplemobiletools.calendar.pro.interfaces.YearlyCalendar import com.simplemobiletools.calendar.pro.interfaces.YearlyCalendar
@@ -25,6 +26,7 @@ import java.util.*
class YearFragment : Fragment(), YearlyCalendar { class YearFragment : Fragment(), YearlyCalendar {
private var mYear = 0 private var mYear = 0
private var mSundayFirst = false private var mSundayFirst = false
private var isPrintVersion = false
private var lastHash = 0 private var lastHash = 0
private var mCalendar: YearlyCalendarImpl? = null private var mCalendar: YearlyCalendarImpl? = null
@@ -37,7 +39,6 @@ class YearFragment : Fragment(), YearlyCalendar {
setupMonths() setupMonths()
mCalendar = YearlyCalendarImpl(this, context!!, mYear) mCalendar = YearlyCalendarImpl(this, context!!, mYear)
return mView return mView
} }
@@ -65,30 +66,40 @@ class YearFragment : Fragment(), YearlyCalendar {
val days = dateTime.dayOfMonth().maximumValue val days = dateTime.dayOfMonth().maximumValue
mView.month_2.setDays(days) mView.month_2.setDays(days)
val res = resources val now = DateTime()
markCurrentMonth(res)
for (i in 1..12) { for (i in 1..12) {
val monthView = mView.findViewById<SmallMonthView>(res.getIdentifier("month_" + i, "id", context!!.packageName)) val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_$i", "id", context!!.packageName))
var dayOfWeek = dateTime.withMonthOfYear(i).dayOfWeek().get() var dayOfWeek = dateTime.withMonthOfYear(i).dayOfWeek().get()
if (!mSundayFirst) { if (!mSundayFirst) {
dayOfWeek-- dayOfWeek--
} }
val monthLabel = mView.findViewById<TextView>(resources.getIdentifier("month_${i}_label", "id", context!!.packageName))
val curTextColor = when {
isPrintVersion -> resources.getColor(R.color.theme_light_text_color)
else -> context!!.config.textColor
}
monthLabel.setTextColor(curTextColor)
monthView.firstDay = dayOfWeek monthView.firstDay = dayOfWeek
monthView.setOnClickListener { monthView.setOnClickListener {
(activity as MainActivity).openMonthFromYearly(DateTime().withDate(mYear, i, 1)) (activity as MainActivity).openMonthFromYearly(DateTime().withDate(mYear, i, 1))
} }
} }
if (!isPrintVersion) {
markCurrentMonth(now)
}
} }
private fun markCurrentMonth(res: Resources) { private fun markCurrentMonth(now: DateTime) {
val now = DateTime()
if (now.year == mYear) { if (now.year == mYear) {
val monthLabel = mView.findViewById<TextView>(res.getIdentifier("month_${now.monthOfYear}_label", "id", context!!.packageName)) val monthLabel = mView.findViewById<TextView>(resources.getIdentifier("month_${now.monthOfYear}_label", "id", context!!.packageName))
monthLabel.setTextColor(context!!.getAdjustedPrimaryColor()) monthLabel.setTextColor(context!!.getAdjustedPrimaryColor())
val monthView = mView.findViewById<SmallMonthView>(res.getIdentifier("month_${now.monthOfYear}", "id", context!!.packageName)) val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_${now.monthOfYear}", "id", context!!.packageName))
monthView.todaysId = now.dayOfMonth monthView.todaysId = now.dayOfMonth
} }
} }
@@ -102,10 +113,28 @@ class YearFragment : Fragment(), YearlyCalendar {
} }
lastHash = hashCode lastHash = hashCode
val res = resources
for (i in 1..12) { for (i in 1..12) {
val monthView = mView.findViewById<SmallMonthView>(res.getIdentifier("month_$i", "id", context!!.packageName)) val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_$i", "id", context!!.packageName))
monthView.setEvents(events.get(i)) monthView.setEvents(events.get(i))
} }
} }
fun printCurrentView() {
isPrintVersion = true
setupMonths()
toggleSmallMonthPrintModes()
context!!.printBitmap(mView.calendar_holder.getViewBitmap())
isPrintVersion = false
setupMonths()
toggleSmallMonthPrintModes()
}
private fun toggleSmallMonthPrintModes() {
for (i in 1..12) {
val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_$i", "id", context!!.packageName))
monthView.togglePrintMode()
}
}
} }

View File

@@ -11,6 +11,7 @@ import androidx.appcompat.app.AlertDialog
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.MainActivity import com.simplemobiletools.calendar.pro.activities.MainActivity
import com.simplemobiletools.calendar.pro.adapters.MyMonthPagerAdapter
import com.simplemobiletools.calendar.pro.adapters.MyYearPagerAdapter import com.simplemobiletools.calendar.pro.adapters.MyYearPagerAdapter
import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.Formatter
@@ -126,4 +127,8 @@ class YearFragmentsHolder : MyFragmentHolder() {
} }
override fun getNewEventDayCode() = Formatter.getTodayCode() override fun getNewEventDayCode() = Formatter.getTodayCode()
override fun printView() {
(viewPager?.adapter as? MyYearPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
}
} }

View File

@@ -2,7 +2,6 @@ package com.simplemobiletools.calendar.pro.helpers
import android.content.Context import android.content.Context
import android.media.AudioManager import android.media.AudioManager
import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.extensions.scheduleCalDAVSync import com.simplemobiletools.calendar.pro.extensions.scheduleCalDAVSync
import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle
@@ -183,4 +182,8 @@ class Config(context: Context) : BaseConfig(context) {
var weeklyViewItemHeightMultiplier: Float var weeklyViewItemHeightMultiplier: Float
get() = prefs.getFloat(WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER, 1f) get() = prefs.getFloat(WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER, 1f)
set(weeklyViewItemHeightMultiplier) = prefs.edit().putFloat(WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER, weeklyViewItemHeightMultiplier).apply() set(weeklyViewItemHeightMultiplier) = prefs.edit().putFloat(WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER, weeklyViewItemHeightMultiplier).apply()
var weeklyViewDays: Int
get() = prefs.getInt(WEEKLY_VIEW_DAYS, 7)
set(weeklyViewDays) = prefs.edit().putInt(WEEKLY_VIEW_DAYS, weeklyViewDays).apply()
} }

View File

@@ -75,6 +75,7 @@ const val ALLOW_CHANGING_TIME_ZONES = "allow_changing_time_zones"
const val LAST_EXPORT_PATH = "last_export_path" const val LAST_EXPORT_PATH = "last_export_path"
const val EXPORT_PAST_EVENTS = "export_past_events" const val EXPORT_PAST_EVENTS = "export_past_events"
const val WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER = "weekly_view_item_height_multiplier" const val WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER = "weekly_view_item_height_multiplier"
const val WEEKLY_VIEW_DAYS = "weekly_view_days"
// repeat_rule for monthly and yearly repetition // repeat_rule for monthly and yearly repetition
const val REPEAT_SAME_DAY = 1 // i.e. 25th every month, or 3rd june (if yearly repetition) const val REPEAT_SAME_DAY = 1 // i.e. 25th every month, or 3rd june (if yearly repetition)

View File

@@ -108,5 +108,7 @@ object Formatter {
} }
} }
fun getUTCDayCodeFromTS(ts: Long) = getUTCDateTimeFromTS(ts).toString(DAYCODE_PATTERN)
fun getShiftedImportTimestamp(ts: Long) = getUTCDateTimeFromTS(ts).withTime(13, 0, 0, 0).withZoneRetainFields(DateTimeZone.getDefault()).seconds() fun getShiftedImportTimestamp(ts: Long) = getUTCDateTimeFromTS(ts).withTime(13, 0, 0, 0).withZoneRetainFields(DateTimeZone.getDefault()).seconds()
} }

View File

@@ -104,6 +104,9 @@ class IcsImporter(val activity: SimpleActivity) {
curTitle = getTitle(curTitle).replace("\\n", "\n").replace("\\,", ",") curTitle = getTitle(curTitle).replace("\\n", "\n").replace("\\,", ",")
} else if (line.startsWith(DESCRIPTION) && !isNotificationDescription) { } else if (line.startsWith(DESCRIPTION) && !isNotificationDescription) {
curDescription = line.substring(DESCRIPTION.length).replace("\\n", "\n").replace("\\,", ",") curDescription = line.substring(DESCRIPTION.length).replace("\\n", "\n").replace("\\,", ",")
if (curDescription.trim().isEmpty()) {
curDescription = ""
}
isDescription = true isDescription = true
} else if (line.startsWith(UID)) { } else if (line.startsWith(UID)) {
curImportId = line.substring(UID.length).trim() curImportId = line.substring(UID.length).trim()
@@ -141,6 +144,9 @@ class IcsImporter(val activity: SimpleActivity) {
curRepeatExceptions.add(Formatter.getDayCodeFromTS(getTimestamp(value))) curRepeatExceptions.add(Formatter.getDayCodeFromTS(getTimestamp(value)))
} else if (line.startsWith(LOCATION)) { } else if (line.startsWith(LOCATION)) {
curLocation = getLocation(line.substring(LOCATION.length).replace("\\,", ",")) curLocation = getLocation(line.substring(LOCATION.length).replace("\\,", ","))
if (curLocation.trim().isEmpty()) {
curLocation = ""
}
} else if (line.startsWith(RECURRENCE_ID)) { } else if (line.startsWith(RECURRENCE_ID)) {
val timestamp = getTimestamp(line.substring(RECURRENCE_ID.length)) val timestamp = getTimestamp(line.substring(RECURRENCE_ID.length))
curRecurrenceDayCode = Formatter.getDayCodeFromTS(timestamp) curRecurrenceDayCode = Formatter.getDayCodeFromTS(timestamp)
@@ -169,9 +175,9 @@ class IcsImporter(val activity: SimpleActivity) {
} }
var reminders = arrayListOf( var reminders = arrayListOf(
Reminder(curReminderMinutes.getOrElse(0) { REMINDER_OFF }, curReminderActions.getOrElse(0) { REMINDER_NOTIFICATION }), Reminder(curReminderMinutes.getOrElse(0) { REMINDER_OFF }, curReminderActions.getOrElse(0) { REMINDER_NOTIFICATION }),
Reminder(curReminderMinutes.getOrElse(1) { REMINDER_OFF }, curReminderActions.getOrElse(1) { REMINDER_NOTIFICATION }), Reminder(curReminderMinutes.getOrElse(1) { REMINDER_OFF }, curReminderActions.getOrElse(1) { REMINDER_NOTIFICATION }),
Reminder(curReminderMinutes.getOrElse(2) { REMINDER_OFF }, curReminderActions.getOrElse(2) { REMINDER_NOTIFICATION }) Reminder(curReminderMinutes.getOrElse(2) { REMINDER_OFF }, curReminderActions.getOrElse(2) { REMINDER_NOTIFICATION })
) )
reminders = reminders.sortedBy { it.minutes }.sortedBy { it.minutes == REMINDER_OFF }.toMutableList() as ArrayList<Reminder> reminders = reminders.sortedBy { it.minutes }.sortedBy { it.minutes == REMINDER_OFF }.toMutableList() as ArrayList<Reminder>
@@ -179,8 +185,8 @@ class IcsImporter(val activity: SimpleActivity) {
val eventType = eventTypes.firstOrNull { it.id == curEventTypeId } val eventType = eventTypes.firstOrNull { it.id == curEventTypeId }
val source = if (calDAVCalendarId == 0 || eventType?.isSyncedEventType() == false) SOURCE_IMPORTED_ICS else "$CALDAV-$calDAVCalendarId" val source = if (calDAVCalendarId == 0 || eventType?.isSyncedEventType() == false) SOURCE_IMPORTED_ICS else "$CALDAV-$calDAVCalendarId"
val event = Event(null, curStart, curEnd, curTitle, curLocation, curDescription, reminders[0].minutes, val event = Event(null, curStart, curEnd, curTitle, curLocation, curDescription, reminders[0].minutes,
reminders[1].minutes, reminders[2].minutes, reminders[0].type, reminders[1].type, reminders[2].type, curRepeatInterval, curRepeatRule, reminders[1].minutes, reminders[2].minutes, reminders[0].type, reminders[1].type, reminders[2].type, curRepeatInterval, curRepeatRule,
curRepeatLimit, curRepeatExceptions, "", curImportId, DateTimeZone.getDefault().id, curFlags, curEventTypeId, 0, curLastModified, source) curRepeatLimit, curRepeatExceptions, "", curImportId, DateTimeZone.getDefault().id, curFlags, curEventTypeId, 0, curLastModified, source)
if (event.getIsAllDay() && curEnd > curStart) { if (event.getIsAllDay() && curEnd > curStart) {
event.endTS -= DAY event.endTS -= DAY

View File

@@ -19,7 +19,7 @@ class MyWidgetDateProvider : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach { appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach {
val views = RemoteViews(context.packageName, R.layout.widget_date).apply { RemoteViews(context.packageName, R.layout.widget_date).apply {
applyColorFilter(R.id.widget_date_background, context.config.widgetBgColor) applyColorFilter(R.id.widget_date_background, context.config.widgetBgColor)
setText(R.id.widget_date_label, Formatter.getTodayDayNumber()) setText(R.id.widget_date_label, Formatter.getTodayDayNumber())
setText(R.id.widget_month_label, Formatter.getCurrentMonthShort()) setText(R.id.widget_month_label, Formatter.getCurrentMonthShort())

View File

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

View File

@@ -60,8 +60,10 @@ class Parser {
} else if (repeatInterval.isXMonthlyRepetition() || repeatInterval.isXYearlyRepetition()) { } else if (repeatInterval.isXMonthlyRepetition() || repeatInterval.isXYearlyRepetition()) {
repeatRule = if (value.startsWith("-1")) REPEAT_ORDER_WEEKDAY_USE_LAST else REPEAT_ORDER_WEEKDAY repeatRule = if (value.startsWith("-1")) REPEAT_ORDER_WEEKDAY_USE_LAST else REPEAT_ORDER_WEEKDAY
} }
} else if (key == BYMONTHDAY && value.toInt() == -1) { } else if (key == BYMONTHDAY) {
repeatRule = REPEAT_LAST_DAY if (value.split(",").any { it.toInt() == -1 }) {
repeatRule = REPEAT_LAST_DAY
}
} }
} }
return EventRepetition(repeatInterval, repeatRule, repeatLimit) return EventRepetition(repeatInterval, repeatRule, repeatLimit)

View File

@@ -4,6 +4,7 @@ import android.content.Context
import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.extensions.eventsHelper
import com.simplemobiletools.calendar.pro.interfaces.WeeklyCalendar import com.simplemobiletools.calendar.pro.interfaces.WeeklyCalendar
import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.calendar.pro.models.Event
import com.simplemobiletools.commons.helpers.DAY_SECONDS
import com.simplemobiletools.commons.helpers.WEEK_SECONDS import com.simplemobiletools.commons.helpers.WEEK_SECONDS
import java.util.* import java.util.*
@@ -11,8 +12,8 @@ class WeeklyCalendarImpl(val callback: WeeklyCalendar, val context: Context) {
var mEvents = ArrayList<Event>() var mEvents = ArrayList<Event>()
fun updateWeeklyCalendar(weekStartTS: Long) { fun updateWeeklyCalendar(weekStartTS: Long) {
val endTS = weekStartTS + WEEK_SECONDS val endTS = weekStartTS + 2 * WEEK_SECONDS
context.eventsHelper.getEvents(weekStartTS, endTS) { context.eventsHelper.getEvents(weekStartTS - DAY_SECONDS, endTS) {
mEvents = it mEvents = it
callback.updateWeeklyCalendar(it) callback.updateWeeklyCalendar(it)
} }

View File

@@ -14,30 +14,30 @@ import java.io.Serializable
@Entity(tableName = "events", indices = [(Index(value = ["id"], unique = true))]) @Entity(tableName = "events", indices = [(Index(value = ["id"], unique = true))])
data class Event( data class Event(
@PrimaryKey(autoGenerate = true) var id: Long?, @PrimaryKey(autoGenerate = true) var id: Long?,
@ColumnInfo(name = "start_ts") var startTS: Long = 0L, @ColumnInfo(name = "start_ts") var startTS: Long = 0L,
@ColumnInfo(name = "end_ts") var endTS: Long = 0L, @ColumnInfo(name = "end_ts") var endTS: Long = 0L,
@ColumnInfo(name = "title") var title: String = "", @ColumnInfo(name = "title") var title: String = "",
@ColumnInfo(name = "location") var location: String = "", @ColumnInfo(name = "location") var location: String = "",
@ColumnInfo(name = "description") var description: String = "", @ColumnInfo(name = "description") var description: String = "",
@ColumnInfo(name = "reminder_1_minutes") var reminder1Minutes: Int = -1, @ColumnInfo(name = "reminder_1_minutes") var reminder1Minutes: Int = -1,
@ColumnInfo(name = "reminder_2_minutes") var reminder2Minutes: Int = -1, @ColumnInfo(name = "reminder_2_minutes") var reminder2Minutes: Int = -1,
@ColumnInfo(name = "reminder_3_minutes") var reminder3Minutes: Int = -1, @ColumnInfo(name = "reminder_3_minutes") var reminder3Minutes: Int = -1,
@ColumnInfo(name = "reminder_1_type") var reminder1Type: Int = REMINDER_NOTIFICATION, @ColumnInfo(name = "reminder_1_type") var reminder1Type: Int = REMINDER_NOTIFICATION,
@ColumnInfo(name = "reminder_2_type") var reminder2Type: Int = REMINDER_NOTIFICATION, @ColumnInfo(name = "reminder_2_type") var reminder2Type: Int = REMINDER_NOTIFICATION,
@ColumnInfo(name = "reminder_3_type") var reminder3Type: Int = REMINDER_NOTIFICATION, @ColumnInfo(name = "reminder_3_type") var reminder3Type: Int = REMINDER_NOTIFICATION,
@ColumnInfo(name = "repeat_interval") var repeatInterval: Int = 0, @ColumnInfo(name = "repeat_interval") var repeatInterval: Int = 0,
@ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0, @ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0,
@ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L, @ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L,
@ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: ArrayList<String> = ArrayList(), @ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: ArrayList<String> = ArrayList(),
@ColumnInfo(name = "attendees") var attendees: String = "", @ColumnInfo(name = "attendees") var attendees: String = "",
@ColumnInfo(name = "import_id") var importId: String = "", @ColumnInfo(name = "import_id") var importId: String = "",
@ColumnInfo(name = "time_zone") var timeZone: String = "", @ColumnInfo(name = "time_zone") var timeZone: String = "",
@ColumnInfo(name = "flags") var flags: Int = 0, @ColumnInfo(name = "flags") var flags: Int = 0,
@ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID, @ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID,
@ColumnInfo(name = "parent_id") var parentId: Long = 0, @ColumnInfo(name = "parent_id") var parentId: Long = 0,
@ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L, @ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L,
@ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR) @ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR)
: Serializable { : Serializable {
companion object { companion object {
@@ -123,9 +123,9 @@ data class Event(
fun getIsAllDay() = flags and FLAG_ALL_DAY != 0 fun getIsAllDay() = flags and FLAG_ALL_DAY != 0
fun getReminders() = setOf( fun getReminders() = setOf(
Reminder(reminder1Minutes, reminder1Type), Reminder(reminder1Minutes, reminder1Type),
Reminder(reminder2Minutes, reminder2Type), Reminder(reminder2Minutes, reminder2Type),
Reminder(reminder3Minutes, reminder3Type) Reminder(reminder3Minutes, reminder3Type)
).filter { it.minutes != REMINDER_OFF } ).filter { it.minutes != REMINDER_OFF }
// properly return the start time of all-day events as midnight // properly return the start time of all-day events as midnight

View File

@@ -46,6 +46,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
private var horizontalOffset = 0 private var horizontalOffset = 0
private var showWeekNumbers = false private var showWeekNumbers = false
private var dimPastEvents = true private var dimPastEvents = true
private var isPrintVersion = false
private var allEvents = ArrayList<MonthViewEvent>() private var allEvents = ArrayList<MonthViewEvent>()
private var bgRectF = RectF() private var bgRectF = RectF()
private var dayLetters = ArrayList<String>() private var dayLetters = ArrayList<String>()
@@ -108,14 +109,14 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
val validDayEvent = isDayValid(event, day.code) val validDayEvent = isDayValid(event, day.code)
if ((lastEvent == null || lastEvent.startDayIndex + daysCnt <= day.indexOnMonthView) && !validDayEvent) { if ((lastEvent == null || lastEvent.startDayIndex + daysCnt <= day.indexOnMonthView) && !validDayEvent) {
val monthViewEvent = MonthViewEvent(event.id!!, event.title, event.startTS, event.color, day.indexOnMonthView, val monthViewEvent = MonthViewEvent(event.id!!, event.title, event.startTS, event.color, day.indexOnMonthView,
daysCnt, day.indexOnMonthView, event.getIsAllDay(), event.isPastEvent) daysCnt, day.indexOnMonthView, event.getIsAllDay(), event.isPastEvent)
allEvents.add(monthViewEvent) allEvents.add(monthViewEvent)
} }
} }
} }
allEvents = allEvents.asSequence().sortedWith(compareBy({ -it.daysCnt }, { !it.isAllDay }, { it.startTS }, { it.startDayIndex }, { it.title })) allEvents = allEvents.asSequence().sortedWith(compareBy({ -it.daysCnt }, { !it.isAllDay }, { it.startTS }, { it.startDayIndex }, { it.title }))
.toMutableList() as ArrayList<MonthViewEvent> .toMutableList() as ArrayList<MonthViewEvent>
} }
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
@@ -142,7 +143,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
val xPos = x * dayWidth + horizontalOffset val xPos = x * dayWidth + horizontalOffset
val yPos = y * dayHeight + verticalOffset val yPos = y * dayHeight + verticalOffset
val xPosCenter = xPos + dayWidth / 2 val xPosCenter = xPos + dayWidth / 2
if (day.isToday) { if (day.isToday && !isPrintVersion) {
canvas.drawCircle(xPosCenter, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day)) canvas.drawCircle(xPosCenter, yPos + paint.textSize * 0.7f, paint.textSize * 0.75f, getCirclePaint(day))
} }
@@ -179,7 +180,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
for (i in 0..6) { for (i in 0..6) {
val xPos = horizontalOffset + (i + 1) * dayWidth - dayWidth / 2 val xPos = horizontalOffset + (i + 1) * dayWidth - dayWidth / 2
var weekDayLetterPaint = paint var weekDayLetterPaint = paint
if (i == currDayOfWeek) { if (i == currDayOfWeek && !isPrintVersion) {
weekDayLetterPaint = getColoredPaint(primaryColor) weekDayLetterPaint = getColoredPaint(primaryColor)
} }
canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight * 0.7f, weekDayLetterPaint) canvas.drawText(dayLetters[i], xPos, weekDaysLetterHeight * 0.7f, weekDayLetterPaint)
@@ -192,7 +193,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
for (i in 0 until ROW_COUNT) { for (i in 0 until ROW_COUNT) {
val weekDays = days.subList(i * 7, i * 7 + 7) val weekDays = days.subList(i * 7, i * 7 + 7)
weekNumberPaint.color = if (weekDays.any { it.isToday }) primaryColor else textColor weekNumberPaint.color = if (weekDays.any { it.isToday && !isPrintVersion }) primaryColor else textColor
// fourth day of the week determines the week of the year number // fourth day of the week determines the week of the year number
val weekOfYear = days.getOrNull(i * 7 + 3)?.weekOfYear ?: 1 val weekOfYear = days.getOrNull(i * 7 + 3)?.weekOfYear ?: 1
@@ -257,7 +258,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
private fun getTextPaint(startDay: DayMonthly): Paint { private fun getTextPaint(startDay: DayMonthly): Paint {
var paintColor = textColor var paintColor = textColor
if (startDay.isToday) { if (startDay.isToday && !isPrintVersion) {
paintColor = primaryColor.getContrastColor() paintColor = primaryColor.getContrastColor()
} }
@@ -276,7 +277,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
private fun getEventBackgroundColor(event: MonthViewEvent, startDay: DayMonthly, endDay: DayMonthly): Paint { private fun getEventBackgroundColor(event: MonthViewEvent, startDay: DayMonthly, endDay: DayMonthly): Paint {
var paintColor = event.color var paintColor = event.color
if ((!startDay.isThisMonth && !endDay.isThisMonth) || (dimPastEvents && event.isPastEvent)) { if ((!startDay.isThisMonth && !endDay.isThisMonth) || (dimPastEvents && event.isPastEvent && !isPrintVersion)) {
paintColor = paintColor.adjustAlpha(MEDIUM_ALPHA) paintColor = paintColor.adjustAlpha(MEDIUM_ALPHA)
} }
@@ -285,7 +286,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
private fun getEventTitlePaint(event: MonthViewEvent, startDay: DayMonthly, endDay: DayMonthly): Paint { private fun getEventTitlePaint(event: MonthViewEvent, startDay: DayMonthly, endDay: DayMonthly): Paint {
var paintColor = event.color.getContrastColor() var paintColor = event.color.getContrastColor()
if ((!startDay.isThisMonth && !endDay.isThisMonth) || (dimPastEvents && event.isPastEvent)) { if ((!startDay.isThisMonth && !endDay.isThisMonth) || (dimPastEvents && event.isPastEvent && !isPrintVersion)) {
paintColor = paintColor.adjustAlpha(MEDIUM_ALPHA) paintColor = paintColor.adjustAlpha(MEDIUM_ALPHA)
} }
@@ -348,4 +349,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
val date = Formatter.getDateTimeFromCode(code) val date = Formatter.getDateTimeFromCode(code)
return event.startTS != event.endTS && Formatter.getDateTimeFromTS(event.endTS) == Formatter.getDateTimeFromTS(date.seconds()).withTimeAtStartOfDay() return event.startTS != event.endTS && Formatter.getDateTimeFromTS(event.endTS) == Formatter.getDateTimeFromTS(date.seconds()).withTimeAtStartOfDay()
} }
fun togglePrintMode() {
isPrintVersion = !isPrintVersion
textColor = if (isPrintVersion) {
resources.getColor(R.color.theme_light_text_color)
} else {
config.textColor
}
paint.color = textColor
gridPaint.color = textColor.adjustAlpha(LOW_ALPHA)
invalidate()
initWeekDayLetters()
}
} }

View File

@@ -96,4 +96,8 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
addView(this) addView(this)
} }
} }
fun togglePrintMode() {
monthView.togglePrintMode()
}
} }

View File

@@ -22,6 +22,7 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
private var textColor = 0 private var textColor = 0
private var days = 31 private var days = 31
private var isLandscape = false private var isLandscape = false
private var isPrintVersion = false
private var mEvents: ArrayList<DayYearly>? = null private var mEvents: ArrayList<DayYearly>? = null
var firstDay = 0 var firstDay = 0
@@ -41,9 +42,9 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
init { init {
val attributes = context.theme.obtainStyledAttributes( val attributes = context.theme.obtainStyledAttributes(
attrs, attrs,
R.styleable.SmallMonthView, R.styleable.SmallMonthView,
0, 0) 0, 0)
try { try {
days = attributes.getInt(R.styleable.SmallMonthView_days, 31) days = attributes.getInt(R.styleable.SmallMonthView_days, 31)
@@ -79,11 +80,11 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
for (y in 1..6) { for (y in 1..6) {
for (x in 1..7) { for (x in 1..7) {
if (curId in 1..days) { if (curId in 1..days) {
canvas.drawText(curId.toString(), x * dayWidth, y * dayWidth, getPaint(curId)) canvas.drawText(curId.toString(), x * dayWidth - (dayWidth / 4), y * dayWidth, getPaint(curId))
if (curId == todaysId) { if (curId == todaysId && !isPrintVersion) {
val dividerConstant = if (isLandscape) 6 else 4 val dividerConstant = if (isLandscape) 6 else 4
canvas.drawCircle(x * dayWidth - dayWidth / dividerConstant, y * dayWidth - dayWidth / dividerConstant, dayWidth * 0.41f, todayCirclePaint) canvas.drawCircle(x * dayWidth - dayWidth / 2, y * dayWidth - dayWidth / dividerConstant, dayWidth * 0.41f, todayCirclePaint)
} }
} }
curId++ curId++
@@ -101,4 +102,16 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
return paint return paint
} }
fun togglePrintMode() {
isPrintVersion = !isPrintVersion
textColor = if (isPrintVersion) {
resources.getColor(R.color.theme_light_text_color)
} else {
context.config.textColor.adjustAlpha(MEDIUM_ALPHA)
}
paint.color = textColor
invalidate()
}
} }

View File

@@ -6,12 +6,13 @@ import android.graphics.Paint
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.extensions.config
import com.simplemobiletools.calendar.pro.extensions.getWeeklyViewItemHeight import com.simplemobiletools.calendar.pro.extensions.getWeeklyViewItemHeight
class WeeklyViewGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { class WeeklyViewGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
private val ROWS_CNT = 24 private val ROWS_CNT = 24
private val COLS_CNT = 7
private var paint = Paint(Paint.ANTI_ALIAS_FLAG) private var paint = Paint(Paint.ANTI_ALIAS_FLAG)
var daysCount = context.config.weeklyViewDays
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
@@ -27,8 +28,8 @@ class WeeklyViewGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
canvas.drawLine(0f, y, width.toFloat(), y, paint) canvas.drawLine(0f, y, width.toFloat(), y, paint)
} }
val rowWidth = width / COLS_CNT.toFloat() val rowWidth = width / daysCount.toFloat()
for (i in 0 until COLS_CNT) { for (i in 0 until daysCount) {
val x = rowWidth * i.toFloat() val x = rowWidth * i.toFloat()
canvas.drawLine(x, 0f, x, height.toFloat(), paint) canvas.drawLine(x, 0f, x, height.toFloat(), paint)
} }

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<TableLayout <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/calendar_holder" android:id="@+id/calendar_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -14,7 +13,6 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
@@ -24,15 +22,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/january" android:text="@string/january"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_1" android:id="@+id/month_1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/month_1_label" android:layout_below="@+id/month_1_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
@@ -51,15 +48,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/february" android:text="@string/february"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_2" android:id="@+id/month_2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/month_2_label" android:layout_below="@+id/month_2_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
@@ -67,7 +63,6 @@
android:id="@+id/month_3_holder" android:id="@+id/month_3_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
@@ -78,15 +73,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/march" android:text="@string/march"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_3" android:id="@+id/month_3"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/month_3_label" android:layout_below="@+id/month_3_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -94,7 +88,6 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
@@ -104,16 +97,15 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/april" android:text="@string/april"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_4" android:id="@+id/month_4"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_4_label" android:layout_below="@+id/month_4_label"
android:layout_marginLeft="@dimen/yearly_month_padding"
android:layout_marginStart="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>
@@ -134,15 +126,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/may" android:text="@string/may"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_5" android:id="@+id/month_5"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_5_label" android:layout_below="@+id/month_5_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
@@ -150,7 +141,6 @@
android:id="@+id/month_6_holder" android:id="@+id/month_6_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
@@ -161,16 +151,15 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/june" android:text="@string/june"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_6" android:id="@+id/month_6"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_6_label" android:layout_below="@+id/month_6_label"
android:layout_marginLeft="@dimen/yearly_month_padding"
android:layout_marginStart="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -178,7 +167,6 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
@@ -188,15 +176,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/july" android:text="@string/july"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_7" android:id="@+id/month_7"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_7_label" android:layout_below="@+id/month_7_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -214,15 +201,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/august" android:text="@string/august"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_8" android:id="@+id/month_8"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_8_label" android:layout_below="@+id/month_8_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>
@@ -233,7 +219,6 @@
android:id="@+id/month_9_holder" android:id="@+id/month_9_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
@@ -244,16 +229,15 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/september" android:text="@string/september"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_9" android:id="@+id/month_9"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_9_label" android:layout_below="@+id/month_9_label"
android:layout_marginLeft="@dimen/yearly_month_padding"
android:layout_marginStart="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -261,7 +245,6 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
@@ -271,15 +254,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/october" android:text="@string/october"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_10" android:id="@+id/month_10"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_10_label" android:layout_below="@+id/month_10_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -297,23 +279,21 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/november" android:text="@string/november"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_11" android:id="@+id/month_11"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_11_label" android:layout_below="@+id/month_11_label"
android:layout_marginLeft="@dimen/yearly_month_padding"
android:layout_marginStart="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/month_12_holder" android:id="@+id/month_12_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
@@ -324,15 +304,14 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/december" android:text="@string/december"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_12" android:id="@+id/month_12"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_12_label" android:layout_below="@+id/month_12_label"
android:layout_marginLeft="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding" />
android:layout_marginStart="@dimen/yearly_month_padding"/>
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ScrollView <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/event_scrollview" android:id="@+id/event_scrollview"
@@ -25,7 +24,7 @@
android:maxLines="1" android:maxLines="1"
android:minEms="20" android:minEms="20"
android:textCursorDrawable="@null" android:textCursorDrawable="@null"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
<com.simplemobiletools.commons.views.MyEditText <com.simplemobiletools.commons.views.MyEditText
android:id="@+id/event_location" android:id="@+id/event_location"
@@ -41,20 +40,19 @@
android:maxLines="1" android:maxLines="1"
android:minEms="20" android:minEms="20"
android:textCursorDrawable="@null" android:textCursorDrawable="@null"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
<ImageView <ImageView
android:id="@+id/event_show_on_map" android:id="@+id/event_show_on_map"
android:layout_width="wrap_content" android:layout_width="@dimen/normal_icon_size"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignTop="@+id/event_location" android:layout_alignTop="@+id/event_location"
android:layout_alignBottom="@+id/event_location" android:layout_alignBottom="@+id/event_location"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/activity_margin" android:layout_marginEnd="@dimen/activity_margin"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?attr/selectableItemBackgroundBorderless"
android:paddingStart="@dimen/small_margin" android:padding="@dimen/small_margin"
android:paddingEnd="@dimen/small_margin" android:src="@drawable/ic_place_vector" />
android:src="@drawable/ic_place_vector"/>
<com.simplemobiletools.commons.views.MyEditText <com.simplemobiletools.commons.views.MyEditText
android:id="@+id/event_description" android:id="@+id/event_description"
@@ -71,7 +69,7 @@
android:linksClickable="true" android:linksClickable="true"
android:minEms="20" android:minEms="20"
android:textCursorDrawable="@null" android:textCursorDrawable="@null"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
<ImageView <ImageView
android:id="@+id/event_description_divider" android:id="@+id/event_description_divider"
@@ -81,7 +79,7 @@
android:layout_marginTop="@dimen/activity_margin" android:layout_marginTop="@dimen/activity_margin"
android:layout_marginBottom="@dimen/normal_margin" android:layout_marginBottom="@dimen/normal_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no" />
<ImageView <ImageView
android:id="@+id/event_time_image" android:id="@+id/event_time_image"
@@ -92,7 +90,7 @@
android:layout_alignBottom="@+id/event_all_day" android:layout_alignBottom="@+id/event_all_day"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_clock_vector"/> android:src="@drawable/ic_clock_vector" />
<com.simplemobiletools.commons.views.MySwitchCompat <com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/event_all_day" android:id="@+id/event_all_day"
@@ -107,7 +105,7 @@
android:paddingBottom="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin"
android:text="@string/all_day" android:text="@string/all_day"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
app:switchPadding="@dimen/small_margin"/> app:switchPadding="@dimen/small_margin" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_start_date" android:id="@+id/event_start_date"
@@ -120,7 +118,7 @@
android:paddingEnd="@dimen/activity_margin" android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="January 1 1970"/> tools:text="January 1 1970" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_start_time" android:id="@+id/event_start_time"
@@ -131,7 +129,7 @@
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="00:00"/> tools:text="00:00" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_end_date" android:id="@+id/event_end_date"
@@ -144,7 +142,7 @@
android:paddingEnd="@dimen/activity_margin" android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="January 1 1970"/> tools:text="January 1 1970" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_end_time" android:id="@+id/event_end_time"
@@ -155,34 +153,34 @@
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="00:00"/> tools:text="00:00" />
<ImageView <ImageView
android:id="@+id/event_time_zone_image" android:id="@+id/event_time_zone_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/event_end_date" android:layout_below="@+id/event_end_date"
android:layout_marginStart="@dimen/normal_margin"
android:layout_alignTop="@+id/event_time_zone" android:layout_alignTop="@+id/event_time_zone"
android:layout_alignBottom="@+id/event_time_zone" android:layout_alignBottom="@+id/event_time_zone"
android:layout_marginStart="@dimen/normal_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_globe_vector"/> android:src="@drawable/ic_globe_vector" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_time_zone" android:id="@+id/event_time_zone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/event_end_date" android:layout_below="@+id/event_end_date"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:layout_toEndOf="@+id/event_time_zone_image" android:layout_toEndOf="@+id/event_time_zone_image"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:layout_centerVertical="true"
android:ellipsize="end" android:ellipsize="end"
android:lines="1" android:lines="1"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="Europe/Bratislava"/> tools:text="Europe/Bratislava" />
<ImageView <ImageView
android:id="@+id/event_date_time_divider" android:id="@+id/event_date_time_divider"
@@ -192,7 +190,7 @@
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin" android:layout_marginBottom="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no" />
<ImageView <ImageView
android:id="@+id/event_reminder_image" android:id="@+id/event_reminder_image"
@@ -203,7 +201,7 @@
android:layout_alignBottom="@+id/event_reminder_1" android:layout_alignBottom="@+id/event_reminder_1"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_bell_vector"/> android:src="@drawable/ic_bell_vector" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_reminder_1" android:id="@+id/event_reminder_1"
@@ -217,9 +215,10 @@
android:ellipsize="end" android:ellipsize="end"
android:lines="1" android:lines="1"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="@string/add_another_reminder"/> tools:text="@string/add_another_reminder" />
<ImageView <ImageView
android:id="@+id/event_reminder_1_type" android:id="@+id/event_reminder_1_type"
@@ -231,7 +230,7 @@
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:src="@drawable/ic_bell_vector"/> android:src="@drawable/ic_bell_vector" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_reminder_2" android:id="@+id/event_reminder_2"
@@ -245,11 +244,12 @@
android:ellipsize="end" android:ellipsize="end"
android:lines="1" android:lines="1"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:text="@string/add_another_reminder" android:text="@string/add_another_reminder"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
android:visibility="gone" android:visibility="gone"
tools:text="@string/add_another_reminder"/> tools:text="@string/add_another_reminder" />
<ImageView <ImageView
android:id="@+id/event_reminder_2_type" android:id="@+id/event_reminder_2_type"
@@ -261,7 +261,7 @@
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:src="@drawable/ic_bell_vector"/> android:src="@drawable/ic_bell_vector" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_reminder_3" android:id="@+id/event_reminder_3"
@@ -275,11 +275,12 @@
android:ellipsize="end" android:ellipsize="end"
android:lines="1" android:lines="1"
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:text="@string/add_another_reminder" android:text="@string/add_another_reminder"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
android:visibility="gone" android:visibility="gone"
tools:text="@string/add_another_reminder"/> tools:text="@string/add_another_reminder" />
<ImageView <ImageView
android:id="@+id/event_reminder_3_type" android:id="@+id/event_reminder_3_type"
@@ -291,7 +292,7 @@
android:layout_marginStart="@dimen/small_margin" android:layout_marginStart="@dimen/small_margin"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:src="@drawable/ic_bell_vector"/> android:src="@drawable/ic_bell_vector" />
<ImageView <ImageView
android:id="@+id/event_reminder_divider" android:id="@+id/event_reminder_divider"
@@ -301,7 +302,7 @@
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin" android:layout_marginBottom="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no" />
<ImageView <ImageView
android:id="@+id/event_repetition_image" android:id="@+id/event_repetition_image"
@@ -312,7 +313,7 @@
android:layout_alignBottom="@+id/event_repetition" android:layout_alignBottom="@+id/event_repetition"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_repeat_vector"/> android:src="@drawable/ic_repeat_vector" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_repetition" android:id="@+id/event_repetition"
@@ -323,9 +324,10 @@
android:layout_toEndOf="@+id/event_repetition_image" android:layout_toEndOf="@+id/event_repetition_image"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/normal_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="@string/no_repetition"/> tools:text="@string/no_repetition" />
<RelativeLayout <RelativeLayout
android:id="@+id/event_repetition_rule_holder" android:id="@+id/event_repetition_rule_holder"
@@ -344,7 +346,7 @@
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:text="@string/repeat_on" android:text="@string/repeat_on"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_repetition_rule" android:id="@+id/event_repetition_rule"
@@ -356,7 +358,7 @@
android:gravity="end" android:gravity="end"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:text="@string/every_day" android:text="@string/every_day"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -377,7 +379,7 @@
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:text="@string/repeat_till" android:text="@string/repeat_till"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_repetition_limit" android:id="@+id/event_repetition_limit"
@@ -387,7 +389,7 @@
android:clickable="false" android:clickable="false"
android:padding="@dimen/activity_margin" android:padding="@dimen/activity_margin"
android:text="@string/forever" android:text="@string/forever"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
</RelativeLayout> </RelativeLayout>
<ImageView <ImageView
@@ -397,7 +399,7 @@
android:layout_below="@+id/event_repetition_limit_holder" android:layout_below="@+id/event_repetition_limit_holder"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no" />
<ImageView <ImageView
android:id="@+id/event_attendees_image" android:id="@+id/event_attendees_image"
@@ -408,7 +410,7 @@
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:layout_marginTop="@dimen/small_margin" android:layout_marginTop="@dimen/small_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_people_vector"/> android:src="@drawable/ic_people_vector" />
<LinearLayout <LinearLayout
android:id="@+id/event_attendees_holder" android:id="@+id/event_attendees_holder"
@@ -417,7 +419,7 @@
android:layout_below="@+id/event_repetition_divider" android:layout_below="@+id/event_repetition_divider"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_toEndOf="@+id/event_attendees_image" android:layout_toEndOf="@+id/event_attendees_image"
android:orientation="vertical"/> android:orientation="vertical" />
<ImageView <ImageView
android:id="@+id/event_attendees_divider" android:id="@+id/event_attendees_divider"
@@ -426,7 +428,7 @@
android:layout_below="@+id/event_attendees_holder" android:layout_below="@+id/event_attendees_holder"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no" />
<ImageView <ImageView
android:id="@+id/event_caldav_calendar_image" android:id="@+id/event_caldav_calendar_image"
@@ -434,12 +436,12 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/event_attendees_divider" android:layout_below="@+id/event_attendees_divider"
android:layout_alignTop="@+id/event_caldav_calendar_holder" android:layout_alignTop="@+id/event_caldav_calendar_holder"
android:layout_alignBottom="@+id/event_caldav_calendar_holder"
android:layout_alignEnd="@+id/event_time_image" android:layout_alignEnd="@+id/event_time_image"
android:layout_alignBottom="@+id/event_caldav_calendar_holder"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_calendar_vector" android:src="@drawable/ic_calendar_vector"
android:visibility="gone"/> android:visibility="gone" />
<RelativeLayout <RelativeLayout
android:id="@+id/event_caldav_calendar_holder" android:id="@+id/event_caldav_calendar_holder"
@@ -459,10 +461,10 @@
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:paddingTop="@dimen/medium_margin" android:paddingTop="@dimen/medium_margin"
android:paddingEnd="@dimen/medium_margin" android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/tiny_margin" android:paddingBottom="@dimen/tiny_margin"
android:textSize="@dimen/day_text_size" android:textSize="@dimen/day_text_size"
tools:text="My calendar"/> tools:text="My calendar" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/event_caldav_calendar_email" android:id="@+id/event_caldav_calendar_email"
@@ -476,7 +478,7 @@
android:paddingEnd="@dimen/medium_margin" android:paddingEnd="@dimen/medium_margin"
android:paddingBottom="@dimen/medium_margin" android:paddingBottom="@dimen/medium_margin"
android:textSize="@dimen/meta_text_size" android:textSize="@dimen/meta_text_size"
tools:text="hello@simplemobiletools.com"/> tools:text="hello@simplemobiletools.com" />
<ImageView <ImageView
android:id="@+id/event_caldav_calendar_color" android:id="@+id/event_caldav_calendar_color"
@@ -485,7 +487,7 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/activity_margin" android:layout_marginEnd="@dimen/activity_margin"
android:clickable="false"/> android:clickable="false" />
</RelativeLayout> </RelativeLayout>
@@ -496,7 +498,7 @@
android:layout_below="@+id/event_caldav_calendar_holder" android:layout_below="@+id/event_caldav_calendar_holder"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no" android:importantForAccessibility="no"
android:visibility="gone"/> android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/event_type_image" android:id="@+id/event_type_image"
@@ -507,7 +509,7 @@
android:layout_alignBottom="@+id/event_type_holder" android:layout_alignBottom="@+id/event_type_holder"
android:layout_marginStart="@dimen/normal_margin" android:layout_marginStart="@dimen/normal_margin"
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_color_vector"/> android:src="@drawable/ic_color_vector" />
<RelativeLayout <RelativeLayout
android:id="@+id/event_type_holder" android:id="@+id/event_type_holder"
@@ -528,7 +530,7 @@
android:layout_toStartOf="@+id/event_type_color" android:layout_toStartOf="@+id/event_type_color"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/normal_margin"
android:paddingBottom="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin"
android:textSize="@dimen/day_text_size"/> android:textSize="@dimen/day_text_size" />
<ImageView <ImageView
android:id="@+id/event_type_color" android:id="@+id/event_type_color"
@@ -537,7 +539,7 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/activity_margin" android:layout_marginEnd="@dimen/activity_margin"
android:clickable="false"/> android:clickable="false" />
</RelativeLayout> </RelativeLayout>
@@ -547,6 +549,6 @@
android:layout_height="1px" android:layout_height="1px"
android:layout_below="@+id/event_type_holder" android:layout_below="@+id/event_type_holder"
android:background="@color/divider_grey" android:background="@color/divider_grey"
android:importantForAccessibility="no"/> android:importantForAccessibility="no" />
</RelativeLayout> </RelativeLayout>
</ScrollView> </ScrollView>

View File

@@ -186,22 +186,26 @@
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_reminder_sound_label" android:id="@+id/settings_reminder_sound_label"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toStartOf="@+id/settings_reminder_sound"
android:paddingStart="@dimen/medium_margin" android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/medium_margin" android:paddingEnd="@dimen/medium_margin"
android:text="@string/reminder_sound" /> android:text="@string/reminder_sound" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_reminder_sound" android:id="@+id/settings_reminder_sound"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginEnd="@dimen/small_margin" android:layout_marginEnd="@dimen/small_margin"
android:layout_toEndOf="@+id/settings_reminder_sound_label"
android:background="@null" android:background="@null"
android:clickable="false" /> android:clickable="false"
android:gravity="end"
android:maxLines="3"
tools:text="None" />
</RelativeLayout> </RelativeLayout>

View File

@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.commons.views.MyRecyclerView <com.simplemobiletools.commons.views.MyRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/filter_event_types_list" android:id="@+id/filter_event_types_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipToPadding="false" android:clipToPadding="false"
android:overScrollMode="never" android:overScrollMode="never"
android:paddingTop="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/> app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />

View File

@@ -31,7 +31,7 @@
android:textStyle="italic" android:textStyle="italic"
android:visibility="gone" /> android:visibility="gone" />
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/calendar_empty_list_placeholder_2" android:id="@+id/calendar_empty_list_placeholder_2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/week_holder" android:id="@+id/week_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
@@ -22,7 +21,7 @@
<com.simplemobiletools.calendar.pro.views.WeeklyViewGrid <com.simplemobiletools.calendar.pro.views.WeeklyViewGrid
android:id="@+id/week_horizontal_grid_holder" android:id="@+id/week_horizontal_grid_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content" />
<LinearLayout <LinearLayout
android:id="@+id/week_events_columns_holder" android:id="@+id/week_events_columns_holder"
@@ -31,48 +30,6 @@
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:orientation="horizontal"> android:orientation="horizontal">
<RelativeLayout
android:id="@+id/week_column_0"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RelativeLayout
android:id="@+id/week_column_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RelativeLayout
android:id="@+id/week_column_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RelativeLayout
android:id="@+id/week_column_3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RelativeLayout
android:id="@+id/week_column_4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RelativeLayout
android:id="@+id/week_column_5"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<RelativeLayout
android:id="@+id/week_column_6"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
</com.simplemobiletools.calendar.pro.views.MyScrollView> </com.simplemobiletools.calendar.pro.views.MyScrollView>
@@ -91,72 +48,7 @@
android:background="@drawable/stroke_bottom" android:background="@drawable/stroke_bottom"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingBottom="@dimen/small_margin"> android:paddingBottom="@dimen/small_margin" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/monday_letter"
android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/tuesday_letter"
android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/wednesday_letter"
android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/thursday_letter"
android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/friday_letter"
android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/saturday_letter"
android:textSize="@dimen/normal_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_day_label_6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="@string/sunday_letter"
android:textSize="@dimen/normal_text_size"/>
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/week_all_day_holder" android:id="@+id/week_all_day_holder"

View File

@@ -1,48 +1,72 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/week_view_main_holder" android:id="@+id/week_view_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fillViewport="true"> android:orientation="horizontal">
<RelativeLayout <ImageView
android:id="@+id/week_view_holder" android:id="@+id/week_view_hours_divider"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:layout_alignEnd="@+id/week_view_hours_scrollview"
android:background="@drawable/stroke_bottom_right"
android:importantForAccessibility="no" />
<ImageView <com.simplemobiletools.calendar.pro.views.MyScrollView
android:id="@+id/week_view_hours_divider" android:id="@+id/week_view_hours_scrollview"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignEnd="@+id/week_view_hours_scrollview" android:layout_above="@+id/week_view_seekbar"
android:background="@drawable/stroke_bottom_right" android:layout_below="@+id/week_view_hours_divider"
android:importantForAccessibility="no"/> android:background="@drawable/stroke_right"
android:overScrollMode="never"
android:paddingTop="@dimen/medium_margin"
android:scrollbars="none">
<com.simplemobiletools.calendar.pro.views.MyScrollView <LinearLayout
android:id="@+id/week_view_hours_scrollview" android:id="@+id/week_view_hours_holder"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/week_view_hours_divider" android:orientation="vertical" />
android:background="@drawable/stroke_right"
android:overScrollMode="never"
android:paddingTop="@dimen/medium_margin"
android:scrollbars="none">
<LinearLayout </com.simplemobiletools.calendar.pro.views.MyScrollView>
android:id="@+id/week_view_hours_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</com.simplemobiletools.calendar.pro.views.MyScrollView> <com.simplemobiletools.commons.views.MyViewPager
android:id="@+id/week_view_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/week_view_days_count_divider"
android:layout_toEndOf="@+id/week_view_hours_scrollview" />
<com.simplemobiletools.commons.views.MyViewPager <include
android:id="@+id/week_view_view_pager" android:id="@+id/week_view_days_count_divider"
android:layout_width="match_parent" layout="@layout/divider"
android:layout_height="match_parent" android:layout_width="match_parent"
android:layout_toEndOf="@+id/week_view_hours_scrollview"/> android:layout_height="1px"
android:layout_above="@+id/week_view_seekbar" />
</RelativeLayout> <com.simplemobiletools.commons.views.MySeekBar
</LinearLayout> android:id="@+id/week_view_seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginStart="@dimen/activity_margin"
android:layout_toStartOf="@+id/week_view_days_count"
android:paddingTop="@dimen/normal_margin"
android:paddingBottom="@dimen/normal_margin" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/week_view_days_count"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignTop="@+id/week_view_seekbar"
android:layout_alignBottom="@+id/week_view_seekbar"
android:layout_alignParentEnd="true"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginEnd="@dimen/activity_margin"
android:gravity="center_vertical"
tools:text="7 days" />
</RelativeLayout>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<TableLayout <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/calendar_holder" android:id="@+id/calendar_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -14,24 +13,23 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_1_label" android:id="@+id/month_1_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/january" android:text="@string/january"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_1" android:id="@+id/month_1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/month_1_label" android:layout_below="@+id/month_1_label"
android:layout_centerInParent="true"/> android:layout_centerInParent="true" />
</RelativeLayout> </RelativeLayout>
@@ -43,20 +41,20 @@
android:layout_marginEnd="@dimen/yearly_padding_half" android:layout_marginEnd="@dimen/yearly_padding_half"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_2_label" android:id="@+id/month_2_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/february" android:text="@string/february"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_2" android:id="@+id/month_2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/month_2_label"/> android:layout_below="@+id/month_2_label" />
</RelativeLayout> </RelativeLayout>
@@ -64,24 +62,23 @@
android:id="@+id/month_3_holder" android:id="@+id/month_3_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_3_label" android:id="@+id/month_3_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/march" android:text="@string/march"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_3" android:id="@+id/month_3"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/month_3_label"/> android:layout_below="@+id/month_3_label" />
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>
@@ -93,24 +90,23 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_4_label" android:id="@+id/month_4_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/april" android:text="@string/april"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_4" android:id="@+id/month_4"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_4_label" android:layout_below="@+id/month_4_label"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
@@ -122,20 +118,20 @@
android:layout_marginEnd="@dimen/yearly_padding_half" android:layout_marginEnd="@dimen/yearly_padding_half"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_5_label" android:id="@+id/month_5_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/may" android:text="@string/may"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_5" android:id="@+id/month_5"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_5_label"/> android:layout_below="@+id/month_5_label" />
</RelativeLayout> </RelativeLayout>
@@ -143,25 +139,24 @@
android:id="@+id/month_6_holder" android:id="@+id/month_6_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_6_label" android:id="@+id/month_6_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/june" android:text="@string/june"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_6" android:id="@+id/month_6"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_6_label" android:layout_below="@+id/month_6_label"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>
@@ -172,23 +167,22 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_7_label" android:id="@+id/month_7_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/july" android:text="@string/july"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_7" android:id="@+id/month_7"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_7_label"/> android:layout_below="@+id/month_7_label" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
@@ -199,20 +193,20 @@
android:layout_marginEnd="@dimen/yearly_padding_half" android:layout_marginEnd="@dimen/yearly_padding_half"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_8_label" android:id="@+id/month_8_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/august" android:text="@string/august"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_8" android:id="@+id/month_8"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_8_label"/> android:layout_below="@+id/month_8_label" />
</RelativeLayout> </RelativeLayout>
@@ -220,25 +214,24 @@
android:id="@+id/month_9_holder" android:id="@+id/month_9_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_9_label" android:id="@+id/month_9_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/september" android:text="@string/september"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_9" android:id="@+id/month_9"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_9_label" android:layout_below="@+id/month_9_label"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>
@@ -250,23 +243,22 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/yearly_padding_full" android:layout_marginEnd="@dimen/yearly_padding_full"
android:layout_marginRight="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_10_label" android:id="@+id/month_10_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/october" android:text="@string/october"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_10" android:id="@+id/month_10"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_10_label"/> android:layout_below="@+id/month_10_label" />
</RelativeLayout> </RelativeLayout>
@@ -278,47 +270,45 @@
android:layout_marginEnd="@dimen/yearly_padding_half" android:layout_marginEnd="@dimen/yearly_padding_half"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_11_label" android:id="@+id/month_11_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/november" android:text="@string/november"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_11" android:id="@+id/month_11"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_11_label" android:layout_below="@+id/month_11_label"
android:layout_marginLeft="@dimen/yearly_month_padding"
android:layout_marginStart="@dimen/yearly_month_padding" android:layout_marginStart="@dimen/yearly_month_padding"
app:days="30"/> app:days="30" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/month_12_holder" android:id="@+id/month_12_holder"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="@dimen/yearly_padding_full"
android:layout_marginStart="@dimen/yearly_padding_full" android:layout_marginStart="@dimen/yearly_padding_full"
android:layout_weight="1"> android:layout_weight="1">
<com.simplemobiletools.commons.views.MyTextView <TextView
android:id="@+id/month_12_label" android:id="@+id/month_12_label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/december" android:text="@string/december"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="@dimen/normal_text_size"/> android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.calendar.pro.views.SmallMonthView <com.simplemobiletools.calendar.pro.views.SmallMonthView
android:id="@+id/month_12" android:id="@+id/month_12"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/month_12_label"/> android:layout_below="@+id/month_12_label" />
</RelativeLayout> </RelativeLayout>
</TableRow> </TableRow>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/week_column"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.commons.views.MyTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/week_day_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_horizontal"
android:textSize="@dimen/normal_text_size"
tools:text="@string/monday_letter" />

View File

@@ -19,7 +19,7 @@
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/medium_margin"
android:textColor="@color/md_grey_white" android:textColor="@color/md_grey_white"
android:textSize="28sp" android:textSize="28sp"
tools:text="13" /> tools:text="13" />

View File

@@ -20,7 +20,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:paddingTop="@dimen/normal_margin" android:paddingTop="@dimen/medium_margin"
android:textColor="@color/md_grey_white" android:textColor="@color/md_grey_white"
android:textSize="26sp" android:textSize="26sp"
tools:text="1" /> tools:text="1" />

View File

@@ -9,10 +9,10 @@
android:id="@+id/widget_event_list_background" android:id="@+id/widget_event_list_background"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignBottom="@+id/widget_event_list"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:src="@drawable/widget_round_background" /> android:src="@drawable/widget_round_background" />
<TextView <TextView

View File

@@ -31,6 +31,10 @@
android:id="@+id/go_to_date" android:id="@+id/go_to_date"
android:title="@string/go_to_date" android:title="@string/go_to_date"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/print"
android:title="@string/print"
app:showAsAction="never"/>
<item <item
android:id="@+id/add_holidays" android:id="@+id/add_holidays"
android:title="@string/add_holidays" android:title="@string/add_holidays"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">إدارة أنواع الأحداث</string> <string name="manage_event_types">إدارة أنواع الأحداث</string>
<string name="start_day_at">ابدأ اليوم عند</string> <string name="start_day_at">ابدأ اليوم عند</string>
<string name="end_day_at">نهاية الحدث</string> <string name="end_day_at">نهاية الحدث</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">عرض أرقام الأسبوع</string> <string name="week_numbers">عرض أرقام الأسبوع</string>
<string name="vibrate">إهتزاز عند الإشعار</string> <string name="vibrate">إهتزاز عند الإشعار</string>
<string name="reminder_sound">صوت التذكير</string> <string name="reminder_sound">صوت التذكير</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Hadisə tiplərini idarə et</string> <string name="manage_event_types">Hadisə tiplərini idarə et</string>
<string name="start_day_at">Günə başla</string> <string name="start_day_at">Günə başla</string>
<string name="end_day_at">Günü bitir</string> <string name="end_day_at">Günü bitir</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Həftə günlərini göstər</string> <string name="week_numbers">Həftə günlərini göstər</string>
<string name="vibrate">Xatırladıcı bildirişində vibrasiya et</string> <string name="vibrate">Xatırladıcı bildirişində vibrasiya et</string>
<string name="reminder_sound">Xatırladıcı səsi</string> <string name="reminder_sound">Xatırladıcı səsi</string>

View File

@@ -162,6 +162,7 @@
<string name="manage_event_types">ইভেন্ট টাইপ ম্যানেজ করুন</string> <string name="manage_event_types">ইভেন্ট টাইপ ম্যানেজ করুন</string>
<string name="start_day_at">দিনের শুরু</string> <string name="start_day_at">দিনের শুরু</string>
<string name="end_day_at">দিনের শেষ</string> <string name="end_day_at">দিনের শেষ</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">সপ্তাহের সংখ্যাগুলি দেখান</string> <string name="week_numbers">সপ্তাহের সংখ্যাগুলি দেখান</string>
<string name="vibrate">রিমাইন্ডার নোটিফিকেশনে ভাইব্রেট করো</string> <string name="vibrate">রিমাইন্ডার নোটিফিকেশনে ভাইব্রেট করো</string>
<string name="reminder_sound">রিমাইন্ডারের শব্দ</string> <string name="reminder_sound">রিমাইন্ডারের শব্দ</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Merañ an doareoù darvoudoù</string> <string name="manage_event_types">Merañ an doareoù darvoudoù</string>
<string name="start_day_at">Kregiñ an devezh da</string> <string name="start_day_at">Kregiñ an devezh da</string>
<string name="end_day_at">Echuiñ an devezh da</string> <string name="end_day_at">Echuiñ an devezh da</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Diskouez niverennoù ar sizhun</string> <string name="week_numbers">Diskouez niverennoù ar sizhun</string>
<string name="vibrate">Froumal evit ar rebuzadurioù adc\'halv</string> <string name="vibrate">Froumal evit ar rebuzadurioù adc\'halv</string>
<string name="reminder_sound">Soniri adc\'halv</string> <string name="reminder_sound">Soniri adc\'halv</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Správa typů událostí</string> <string name="manage_event_types">Správa typů událostí</string>
<string name="start_day_at">Počátek dne</string> <string name="start_day_at">Počátek dne</string>
<string name="end_day_at">Konec dne</string> <string name="end_day_at">Konec dne</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Zobrazovat čísla týdnů</string> <string name="week_numbers">Zobrazovat čísla týdnů</string>
<string name="vibrate">Vibrovat při připomínce</string> <string name="vibrate">Vibrovat při připomínce</string>
<string name="reminder_sound">Zvuk připomínky</string> <string name="reminder_sound">Zvuk připomínky</string>

View File

@@ -16,7 +16,7 @@
<!-- Widget titles --> <!-- Widget titles -->
<string name="widget_monthly">Månedlig kalender</string> <string name="widget_monthly">Månedlig kalender</string>
<string name="widget_list">Begivenhedsliste</string> <string name="widget_list">Begivenhedsliste</string>
<string name="widget_todays_date">Calendar today\'s date</string> <string name="widget_todays_date">Dags dato-kalender</string>
<!-- Event --> <!-- Event -->
<string name="event">Begivenhed</string> <string name="event">Begivenhed</string>
@@ -158,6 +158,7 @@
<string name="manage_event_types">Håndter begivenhedstyper</string> <string name="manage_event_types">Håndter begivenhedstyper</string>
<string name="start_day_at">Start dagen kl.</string> <string name="start_day_at">Start dagen kl.</string>
<string name="end_day_at">Slut dagen kl.</string> <string name="end_day_at">Slut dagen kl.</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Vis ugenumre</string> <string name="week_numbers">Vis ugenumre</string>
<string name="vibrate">Vibrer under påmindelser</string> <string name="vibrate">Vibrer under påmindelser</string>
<string name="reminder_sound">Lyd til påmindelser</string> <string name="reminder_sound">Lyd til påmindelser</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Termintypen verwalten</string> <string name="manage_event_types">Termintypen verwalten</string>
<string name="start_day_at">Wochenansicht beginnt um</string> <string name="start_day_at">Wochenansicht beginnt um</string>
<string name="end_day_at">Wochenansicht endet um</string> <string name="end_day_at">Wochenansicht endet um</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Kalenderwoche anzeigen</string> <string name="week_numbers">Kalenderwoche anzeigen</string>
<string name="vibrate">Vibration bei Erinnerung</string> <string name="vibrate">Vibration bei Erinnerung</string>
<string name="reminder_sound">Erinnerungston</string> <string name="reminder_sound">Erinnerungston</string>
@@ -249,7 +250,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Calendar Pro - Termine &amp; Erinnerungen</string> <string name="app_title">Simple Calendar Pro - Termine &amp; Erinnerungen</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Simple mobile 2020 calendar. Schedule planner &amp; appointment reminder for any day</string> <string name="app_short_description">Der beste Kalender zum Organisieren der Ereignisse während des ganzen Tages</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Calendar Pro ist ein vollständig anpassbarer Offline-Kalender, der genau das bietet, was man von einem Kalender erwartet. <b>Keine umständlichen Funktionen, keine unnötigen Berechtigungen und keine Werbung!</b> Simple Calendar Pro ist ein vollständig anpassbarer Offline-Kalender, der genau das bietet, was man von einem Kalender erwartet. <b>Keine umständlichen Funktionen, keine unnötigen Berechtigungen und keine Werbung!</b>

View File

@@ -16,7 +16,7 @@
<!-- Widget titles --> <!-- Widget titles -->
<string name="widget_monthly">Μηνιαίο ημερολόγιο</string> <string name="widget_monthly">Μηνιαίο ημερολόγιο</string>
<string name="widget_list">Λίστα εκδηλώσεων ημερολογίου</string> <string name="widget_list">Λίστα εκδηλώσεων ημερολογίου</string>
<string name="widget_todays_date">Calendar today\'s date</string> <string name="widget_todays_date">Σημερινό ημερολόγιο</string>
<!-- Event --> <!-- Event -->
<string name="event">Εκδηλώσεις</string> <string name="event">Εκδηλώσεις</string>
@@ -158,6 +158,7 @@
<string name="manage_event_types">Διαχείριση τύπων εκδηλώσεων</string> <string name="manage_event_types">Διαχείριση τύπων εκδηλώσεων</string>
<string name="start_day_at">Ημέρα έναρξης την</string> <string name="start_day_at">Ημέρα έναρξης την</string>
<string name="end_day_at">Ημέρα λήξης την</string> <string name="end_day_at">Ημέρα λήξης την</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Εμφάνιση αριθμών εβδομάδων</string> <string name="week_numbers">Εμφάνιση αριθμών εβδομάδων</string>
<string name="vibrate">Δόνηση στην ειδοποίηση υπενθύμισης</string> <string name="vibrate">Δόνηση στην ειδοποίηση υπενθύμισης</string>
<string name="reminder_sound">Ήχος υπενθύμισης</string> <string name="reminder_sound">Ήχος υπενθύμισης</string>

View File

@@ -16,7 +16,7 @@
<!-- Widget titles --> <!-- Widget titles -->
<string name="widget_monthly">Calendario mensual</string> <string name="widget_monthly">Calendario mensual</string>
<string name="widget_list">Lista de eventos del calendario</string> <string name="widget_list">Lista de eventos del calendario</string>
<string name="widget_todays_date">Calendar today\'s date</string> <string name="widget_todays_date">Calendario de la fecha de hoy</string>
<!-- Event --> <!-- Event -->
<string name="event">Evento</string> <string name="event">Evento</string>
@@ -56,7 +56,7 @@
<string name="repeat_forever">Repetir por siempre</string> <string name="repeat_forever">Repetir por siempre</string>
<string name="times">veces</string> <string name="times">veces</string>
<string name="repeat">Repetir</string> <string name="repeat">Repetir</string>
<string name="repeat_on">Repertir los</string> <string name="repeat_on">Repertir en</string>
<string name="every_day">Cada día</string> <string name="every_day">Cada día</string>
<string name="selected_days">En los días seleccionados</string> <string name="selected_days">En los días seleccionados</string>
<string name="the_same_day">El mismo día</string> <string name="the_same_day">El mismo día</string>
@@ -76,9 +76,9 @@
<!-- used in repetition, like "Every first Sunday" --> <!-- used in repetition, like "Every first Sunday" -->
<string name="repeat_every_f">Repetir cada</string> <string name="repeat_every_f">Repetir cada</string>
<string name="every_f">Cada</string> <string name="every_f">Cada</string>
<string name="first_f">primero</string> <string name="first_f">primer</string>
<string name="second_f">segundo</string> <string name="second_f">segundo</string>
<string name="third_f">tercero</string> <string name="third_f">tercer</string>
<string name="fourth_f">cuarto</string> <string name="fourth_f">cuarto</string>
<string name="last_f">último</string> <string name="last_f">último</string>
@@ -158,6 +158,7 @@
<string name="manage_event_types">Gestionar tipos de eventos</string> <string name="manage_event_types">Gestionar tipos de eventos</string>
<string name="start_day_at">El día en la vista semanal comienza a las</string> <string name="start_day_at">El día en la vista semanal comienza a las</string>
<string name="end_day_at">El día en la vista semanal finaliza a las</string> <string name="end_day_at">El día en la vista semanal finaliza a las</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Mostrar los números de la semana</string> <string name="week_numbers">Mostrar los números de la semana</string>
<string name="vibrate">Vibración en notificación de recordatorio</string> <string name="vibrate">Vibración en notificación de recordatorio</string>
<string name="reminder_sound">Sonido de recordatorio</string> <string name="reminder_sound">Sonido de recordatorio</string>
@@ -174,7 +175,7 @@
<string name="loop_reminders">Repetir recordatorios hasta ser descartados</string> <string name="loop_reminders">Repetir recordatorios hasta ser descartados</string>
<string name="dim_past_events">Sombrear eventos pasados</string> <string name="dim_past_events">Sombrear eventos pasados</string>
<string name="events">Eventos</string> <string name="events">Eventos</string>
<string name="reminder_stream">Sonido usado en recordatorios</string> <string name="reminder_stream">Tipo de sonido usado en recordatorios</string>
<string name="system_stream">Sistema</string> <string name="system_stream">Sistema</string>
<string name="alarm_stream">Alarma</string> <string name="alarm_stream">Alarma</string>
<string name="notification_stream">Notificación</string> <string name="notification_stream">Notificación</string>
@@ -208,17 +209,17 @@
<string name="select_a_different_caldav_color">Seleccionar un color diferente (localmente)</string> <string name="select_a_different_caldav_color">Seleccionar un color diferente (localmente)</string>
<string name="insufficient_permissions">No tiene permiso para modificar el calendario</string> <string name="insufficient_permissions">No tiene permiso para modificar el calendario</string>
<string name="caldav_event_not_found">Evento no encontrado. Habilite la sincronización de CalDAV para los calendarios en la configuración.</string> <string name="caldav_event_not_found">Evento no encontrado. Habilite la sincronización de CalDAV para los calendarios en la configuración.</string>
<string name="no_synchronized_calendars">No synchronizable calendars have been found</string> <string name="no_synchronized_calendars">No se han encontrado calendarios para sincronizar</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->
<string name="monday_alt">Lunes</string> <string name="monday_alt">lunes</string>
<string name="tuesday_alt">Martes</string> <string name="tuesday_alt">martes</string>
<string name="wednesday_alt">Miércoles</string> <string name="wednesday_alt">miércoles</string>
<string name="thursday_alt">Jueves</string> <string name="thursday_alt">jueves</string>
<string name="friday_alt">Viernes</string> <string name="friday_alt">viernes</string>
<string name="saturday_alt">Sábado</string> <string name="saturday_alt">sábado</string>
<string name="sunday_alt">Domingo</string> <string name="sunday_alt">domingo</string>
<!-- List widget config example events --> <!-- List widget config example events -->
<string name="sample_title_1">Ejercicio</string> <string name="sample_title_1">Ejercicio</string>
@@ -248,9 +249,9 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Calendario Simple Pro - Eventos y Recordatorios</string> <string name="app_title">Calendario Simple Pro - Eventos y Recordatorios</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Simple mobile 2020 calendar. Schedule planner &amp; appointment reminder for any day</string> <string name="app_short_description">Calendario móvil Simple 2020. Horarios y recordatorios para cualquier día</string>
<string name="app_long_description"> <string name="app_long_description">
Calendario Simple Pro es un calendario fuera de línea, totalmente personalizable y diseñado para hacer exactamente lo que debe hacer un calendario. <b> ¡Sin funcionalidades complicadas, permisos innecesarios y sin anuncios! </b> Calendario Simple Pro es un calendario sin conexión, totalmente personalizable y diseñado para hacer exactamente lo que debe hacer un calendario. <b> ¡Sin funcionalidades complicadas, permisos innecesarios y sin anuncios! </b>
Ya sea que estes organizando eventos individuales o recurrentes, cumpleaños, aniversarios, reuniones de negocios, citas o cualquier otra cosa, Simple Calendar Pro hace que <b> sea fácil mantenerse organizado </b>. Con una increíble variedad de <b> opciones de personalización </b>, puedes personalizar recordatorios de eventos, sonidos de notificación, widgets de calendario y el aspecto de la aplicación. Ya sea que estes organizando eventos individuales o recurrentes, cumpleaños, aniversarios, reuniones de negocios, citas o cualquier otra cosa, Simple Calendar Pro hace que <b> sea fácil mantenerse organizado </b>. Con una increíble variedad de <b> opciones de personalización </b>, puedes personalizar recordatorios de eventos, sonidos de notificación, widgets de calendario y el aspecto de la aplicación.

View File

@@ -0,0 +1,302 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Simple Calendar</string>
<string name="app_launcher_name">Egutegia</string>
<string name="change_view">Aldatu ikuspegia</string>
<string name="daily_view">Eguneko ikuspegia</string>
<string name="weekly_view">Asteko ikuspegia</string>
<string name="monthly_view">Hilabeteko ikuspegia</string>
<string name="yearly_view">Urteko ikuspegia</string>
<string name="simple_event_list">Gertaera-zerrenda sinplea</string>
<string name="no_upcoming_events">Hurrengo gertaerarik ez.</string>
<string name="go_to_today">Joan gaurko egunera</string>
<string name="go_to_date">Joan data zehatz batera</string>
<string name="upgraded_from_free">Kaixo,\n\nbadirudi doako aplikazio zaharra eguneratu duzula. Eskuz biltegiratutako gertaerak migratu behar dituzu .ics fitxategi batean esportatuz, eta gero inportatuz. Esportazio- eta inportazio-botoiak pantaila nagusiaren menuan aurki ditzakezu.\n\nOndoren, bertsio zaharra desinstalatu dezakezu aplikazioaren ezarpenen goiko aldean dagoen \'Eskuratu Pro bertsioa\' botoiarekin. Azkenik, aplikazioaren ezarpenak berrezarri besterik ez dituzu egin behar.\n\nEskerrik asko!</string>
<!-- Widget titles -->
<string name="widget_monthly">Egutegia (hilabetea)</string>
<string name="widget_list">Egutegia (gertaera-zerrenda)</string>
<string name="widget_todays_date">Egutegia (gaurko eguna)</string>
<!-- Event -->
<string name="event">Gertaera</string>
<string name="edit_event">Editatu gertaera</string>
<string name="new_event">Gertaera berria</string>
<string name="create_new_event">Sortu gertaera berria</string>
<string name="duplicate_event">Bikoiztu gertaera</string>
<string name="title_empty">Izenburuak ezin du hutsik egon</string>
<string name="end_before_start">Gertaerak ezin du bukatu hasi baino lehen</string>
<string name="event_added">Gertaera ondo gehitu da</string>
<string name="event_updated">Gertaera ondo eguneratu da</string>
<string name="filter_events_by_type">Iragazi gertaerak motaren arabera</string>
<string name="please_fill_location">Bete kokalekua mapan erakusteko</string>
<string name="public_event_notification_text">Gertaera bat dator</string>
<!-- Event Repetition -->
<string name="repetition">Errepikapena</string>
<string name="no_repetition">Errepikapenik ez</string>
<string name="daily">Egunero</string>
<string name="weekly">Astero</string>
<string name="monthly">Hilabetero</string>
<string name="yearly">Urtero</string>
<string name="weeks_raw">asteak</string>
<string name="months_raw">hilabeteak</string>
<string name="years_raw">urteak</string>
<string name="repeat_till">Noiz arte errepikatu</string>
<string name="forever">Betiko</string>
<string name="event_is_repeatable">Gertaera errepikagarria da</string>
<string name="selection_contains_repetition">Hautaketak errepikatzen diren gertaerak ditu</string>
<string name="delete_one_only">Ezabatu hautatutako gertaera soilik</string>
<string name="delete_future_occurrences">Ezabatu gertaera hau eta datozen guztiak</string>
<string name="delete_all_occurrences">Ezabatu gertaera guztiak</string>
<string name="update_one_only">Eguneratu hautatutako gertaera soilik</string>
<string name="update_all_occurrences">Eguneratu gertaera guztiak</string>
<string name="repeat_till_date">Errepikatu data zehatz batera arte</string>
<string name="stop_repeating_after_x">Errepikatzeari utzi x gertaera ondoren</string>
<string name="repeat_forever">Errepikatu betiko</string>
<string name="times">aldiz</string>
<string name="repeat">Errepikatu</string>
<string name="repeat_on">Errepikatu egun hauetan:</string>
<string name="every_day">Egunero</string>
<string name="selected_days">Hautatutako egunetan</string>
<string name="the_same_day">Egun bera</string>
<string name="the_last_day">Azken eguna</string>
<string name="repeat_on_the_same_day_monthly">Errepikatu hilabetero egun berean</string>
<string name="repeat_on_the_last_day_monthly">Errepikatu hilabeteko azken egunean</string>
<string name="repeat_on_the_same_day_yearly">Errepikatu urtero egun berean</string>
<string name="repeat_every_m">Errepikatze-maiztasuna</string>
<string name="every_m">Maiztasuna:</string>
<string name="first_m">lehenengo</string>
<string name="second_m">bigarren</string>
<string name="third_m">hirugarren</string>
<string name="fourth_m">laugarren</string>
<string name="last_m">azken</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every first Sunday" -->
<string name="repeat_every_f">Erepikatze-maiztasuna:</string>
<string name="every_f">Maiztasuna:</string>
<string name="first_f">lehenengo</string>
<string name="second_f">bigarren</string>
<string name="third_f">hirugarren</string>
<string name="fourth_f">laugarren</string>
<string name="last_f">azken</string>
<!-- Birthdays -->
<string name="birthdays">Urtebetetzeak</string>
<string name="add_birthdays">Gehitu kontaktuen urtebetetzeak</string>
<string name="no_birthdays">Urtebetetzerik ez da aurkitu</string>
<string name="no_new_birthdays">Urtebetetze berririk ez da aurkitu</string>
<string name="birthdays_added">Urtebetetzeak ondo gehitu dira</string>
<!-- Anniversaries -->
<string name="anniversaries">Urteurrenak</string>
<string name="add_anniversaries">Gehitu kontaktuen urteurrenak</string>
<string name="no_anniversaries">Urteurrenik ez da aurkitu</string>
<string name="no_new_anniversaries">Urteurren berririk ez da aurkitu</string>
<string name="anniversaries_added">Urteurrenak ondo gehitu dira</string>
<!-- Event Reminders -->
<string name="reminder">Abisua</string>
<string name="before">hau baino lehen:</string>
<string name="add_another_reminder">Gehitu beste abisu bat</string>
<string name="event_reminders">Gertaera-abisua</string>
<!-- Event attendees -->
<string name="add_another_attendee">Gehitu beste parte-hartzaile bat</string>
<string name="my_status">Nire egoera:</string>
<string name="going">Banoa</string>
<string name="not_going">Ez noa</string>
<string name="maybe_going">Agian noa</string>
<string name="invited">Gonbidatua</string>
<!-- Time zones -->
<string name="enter_a_country">Sartu herrialdea edo ordu-zona</string>
<!-- Export / Import -->
<string name="import_events">Inportatu gertaerak</string>
<string name="export_events">Esportatu gertaerak</string>
<string name="import_events_from_ics">Inportatu gertaerak .ics fitxategi batetik</string>
<string name="export_events_to_ics">Esportatu gertaerak .ics fitxategi batetik</string>
<string name="default_event_type">Lehenetsitako gertaera mota</string>
<string name="export_past_events_too">Esportatu iraganeko gertaerak ere bai</string>
<string name="include_event_types">Gehitu gertaera motak</string>
<string name="filename_without_ics">Fitxategi-izena (.ics gabe)</string>
<string name="override_event_types">Gainidatzi fitxategiko gertaera motak</string>
<!-- Event details -->
<string name="location">Kokalekua</string>
<string name="description">Deskripzioa</string>
<string name="all_day">Egun osokoa</string>
<!-- Weekly view -->
<string name="week">Astea</string>
<!-- Event types -->
<string name="event_types">Gertaera motak</string>
<string name="add_new_type">Gehitu mota berria</string>
<string name="edit_type">Editatu mota</string>
<string name="type_already_exists">Izenburu hau duen mota jada badago</string>
<string name="color">Kolorea</string>
<string name="regular_event">Gertaera arrunta</string>
<string name="cannot_delete_default_type">Lehenetsitako gertaera mota ezin da ezabatu</string>
<string name="select_event_type">Hautatu gertaera mota</string>
<string name="move_events_into_default">Mugitu eragindako gertaerak lehenetsitako gertaera motara</string>
<string name="remove_affected_events">Eragindako gertaerak betiko kendu</string>
<string name="unsync_caldav_calendar">CalDAV egutegia ezabatzeko desinkronizatu behar duzu</string>
<!-- Holidays -->
<string name="holidays">Jaiegunak</string>
<string name="add_holidays">Gehitu jaiegunak</string>
<string name="national_holidays">Tokiko jaiegunak</string>
<string name="religious_holidays">Jaiegun erlijiosoak</string>
<string name="holidays_imported_successfully">Jaiegunak ondo inportatu dira \"Jaiegunak\" gertaera motan</string>
<string name="importing_some_holidays_failed">Gertaera batzuen inportazioak huts egin du</string>
<string name="importing_holidays_failed">Jaiegunak inportatzeak huts egin du</string>
<!-- Settings -->
<string name="manage_event_types">Kudeatu gertaera motak</string>
<string name="start_day_at">Eguna noiz hasi</string>
<string name="end_day_at">Eguna noiz bukatu</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Erakutsi asteen zenbakiak</string>
<string name="vibrate">Bibratu abisuen jakinarazpenetan</string>
<string name="reminder_sound">Abisuen soinua</string>
<string name="no_ringtone_picker">Dei-tonua ezartzeko gai den aplikaziorik ez da aurkitu</string>
<string name="no_ringtone_selected">Bat ere ez</string>
<string name="day_end_before_start">Egunak ezin du hasi baino lehen bukatu</string>
<string name="caldav_sync">CalDAVekin sinkronizatu</string>
<string name="event_lists">Gertaera-zerrendak</string>
<string name="display_past_events">Bistaratu iraganeko gertaerak</string>
<string name="replace_description_with_location">Ordeztu gertaeraren deskripzioa kokalekuarekin</string>
<string name="delete_all_events">Ezabatu gertaera guztiak</string>
<string name="delete_all_events_confirmation">Ziur zaude gertaera guztiak ezabatu nahi dituzula? Honek gertaera motak eta bestelako ezarpenak berdin utziko ditu.</string>
<string name="show_a_grid">Erakutsi sareta</string>
<string name="loop_reminders">Errepikatu abisuak baztertu arte</string>
<string name="dim_past_events">Lausotu iraganeko gertaerak</string>
<string name="events">Gertaerak</string>
<string name="reminder_stream">Abisuek erabilitako audio-transmisioa</string>
<string name="system_stream">Sistema</string>
<string name="alarm_stream">Alarma</string>
<string name="notification_stream">Jakinarazpena</string>
<string name="ring_stream">Jo tonua</string>
<string name="use_last_event_reminders">Erabili aurreko gertaeren abisuak gertaera berrien lehenetsitako gisa</string>
<string name="default_reminder_1">Lehenetsitako abisua 1</string>
<string name="default_reminder_2">Lehenetsitako abisua 2</string>
<string name="default_reminder_3">Lehenetsitako abisua 3</string>
<string name="view_to_open_from_widget">Gertaera-zerrendaren widgetatik irekitzeko ikuspegia</string>
<string name="last_view">Erabilitako azken ikuspegia</string>
<string name="new_events">Gertaera berriak</string>
<string name="default_start_time">Lehenetsitako hasiera-ordua</string>
<string name="next_full_hour">Hurrengo ordu osoa</string>
<string name="default_duration">Lehenetsitako iraupena</string>
<string name="last_used_one">Erabilitako azkena</string>
<string name="other_time">Bestelako denbora</string>
<string name="highlight_weekends">Nabarmendu asteburuak ikuspegi batzuetan</string>
<string name="allow_changing_time_zones">Baimendu gertaeren ordu-zonak aldatzea</string>
<!-- CalDAV sync -->
<string name="caldav">CalDAV</string>
<string name="select_caldav_calendars">Hautatu sinkronizatu nahi dituzun egutegiak</string>
<string name="manage_synced_calendars">Kudeatu sinkronizatutako egutegiak</string>
<string name="store_locally_only">Gorde lokalki soilik</string>
<string name="refresh_caldav_calendars">Freskatu CalDAV egutegiak</string>
<string name="refreshing">Freskatzen…</string>
<string name="refreshing_complete">Freskatu da</string>
<string name="editing_calendar_failed">Egutegia editatzeak huts egin du</string>
<string name="syncing">Sinkronizatzen…</string>
<string name="synchronization_completed">sinkronizatu da</string>
<string name="select_a_different_caldav_color">Hautatu kolore ezberdina (lokalki soilik aplikatu daiteke)</string>
<string name="insufficient_permissions">Ez duzu hautatutako egutegian idazteko baimenik</string>
<string name="caldav_event_not_found">Gertaera ez da aurkitu. Gaitu egutegi aproposerako CalDAV sinkronizazioa aplikazioaren ezarpenetan.</string>
<string name="no_synchronized_calendars">Sinkronizatu daitekeen egutegirik ez da aurkitu</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">astelehenean</string>
<string name="tuesday_alt">asteartean</string>
<string name="wednesday_alt">asteazkenean</string>
<string name="thursday_alt">ostegunean</string>
<string name="friday_alt">ostiralean</string>
<string name="saturday_alt">larunbatean</string>
<string name="sunday_alt">igandean</string>
<!-- List widget config example events -->
<string name="sample_title_1">Entrenamendua</string>
<string name="sample_description_1">Hankak</string>
<string name="sample_title_2">Bilera Itziarrekin</string>
<string name="sample_description_2">Katakraken</string>
<string name="sample_title_3">Liburutegia</string>
<string name="sample_title_4">Bazkaria Arkaitzekin</string>
<string name="sample_description_4">Garraxin</string>
<string name="sample_title_5">Kafea hartu</string>
<!-- FAQ -->
<string name="faq_1_title">Nola kendu ditzaket \"Gehitu jaiegunak\" botoiarekin inportatutako jaiegunak?</string>
<string name="faq_1_text">Modu horretan sortutako jaiegunak \"Jaiegunak\" deituriko gertaera mota berrian sartzen dira. Joan Ezarpenak -> Kudeatu gertaera motak atalera,
sakatu luze gertaera mota hori eta ezabatu zakarrontzia hautatuz.</string>
<string name="faq_2_title">Gertaerak Google Calendar bidez sinkronizatu ditzaket, edo CalDAV onartzen duen bestelako zerbitzurik?</string>
<string name="faq_2_text">Bai, aldatu \"CalDAVekin sinkronizatu\" aplikazioaren ezarpenetan eta hautatu sinkronizatu nahi dituzun egutegiak. Hala ere, gailuaren eta zerbitzarien arteko sinkronizazioa maneiatzen duen hirugarrenen aplikazioren bat beharko duzu.
Googlen egutegiren bat sinkronizatu nahi izanez gero, beren egutegiaren aplikazio ofizialak egingo du lana. Bestelako egutegientzat sinkronizazio-moldagailua duen hirugarrenen aplikazio bat beharko duzu, DAVx5, esate baterako.</string>
<string name="faq_3_title">Abisu bisualak ikusten ditut, baina audiorik ez dut entzuten. Zer egin dezaket?</string>
<string name="faq_3_text">Abisua bistaratzeari eta audioa erreproduzitzeari sistemak eragiten dio. Soinurik ez baduzu entzuten, saiatu aplikazioaren ezarpenetara joaten,
\"Abisuek erabilitako audio-transmisioa\" aukera sakatu eta balio ezberdina jarri. Oraindik ez badabil, egiaztatu soinu-ezarpenak, transmisio jakina mututua ez badago.</string>
<string name="faq_4_title">Aplikazioak ordu-zonak onartzen ditu?</string>
<string name="faq_4_text">Bai, onartzen ditu. Gertaera guztiak zure ordu-zonaren arabera sortzen dira modu lehenetsian. Gertaera baten ordu-zona aldatu nahi baduzu,
lehenengo ordu-zonaren hautatzailea gaitu behar duzu aplikazioaren ezarpenetan eta, ondoren, Gartaeraren xehetasunen pantailan aldatu. Modu lehenetsian desgaituta dago, jende gehienak ez duelako behar.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Calendar Pro - Gertaerak eta abisuak</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Egutegi sinplea. Edozein egunetarako agenda antolatzailea eta hitzordu-abisuak</string>
<string name="app_long_description">
Simple Calendar Pro guztiz pertsonalizatu daitekeen lineaz kanpoko egutegia da, egutegi batek egin beharko lukeena egiteko diseinatua. <b>Eginbide korapilatsurik, beharrezkoa ez den baimenik eta iragarkirik ez!</b>
Gertaerak, urtebetetzeak, urteurrenak, negozio-bilerak, hitzorduak edo dena delakoa antolatu behar baduzu ere, Simple Calendar Pro-rekin <b>erraza da antolatzea</b>. Eskaintzen dituen <b>pertsonalizazio-aukera</b> guztiekin gertaera-abisuak, jakinarazpen soinuak, egutegi-widgetak eta aplikazioaren estiloa pertsonalizatu dezakezu.
Eguneko, asteko eta hilabeteko ikuspegiek erraz egiten dute hurrengo gertaerak eta hitzorduak begiratzea. Gertaeren zerrenda sinplean ere bistaratu dezakezu guztia, egutegi-ikuspegian bistaratu ordez, <b>zure bizitzan zer eta noiz gertatuko den</b> jakin dezazun.
----------------------------------------------------------
<b>Simple Calendar Pro Eginbideak eta abantailak</b>
----------------------------------------------------------
✔️ Iragarkirik edo laster-leiho nekagarririk ez
✔️ Internet sarbiderik ez da behar, pribatutasun eta segurtasun handiagoa emanez
✔️ Gutxieneko baimenak soilik eskatzen ditu
✔️ Enfasia sinplizitatean: egutegi batek egin behar duena egiten du!
✔️ Kode irekia
✔️ Guztiz pertsonalizatu daitezkeen gaiak eta egutegi- edota gertaera-widgetak
✔️ 29 hizkuntzatara itzulita
✔️ Esportatu ezarpenak .txt fitxategietara beste gailu batean inportatzeko
✔️ CalDAV egutegi-sinkronizazioa onartzen du, gertaerak gailu artean sinkronizatzeko
✔️ Eguneko, asteko, hilabeteko, urteko eta gertaera-ikuspegiak egutegian
✔️ Gertaerak .ics fitxategien bidez esportatzea eta inportatzea onartzen du
✔️ Ezarri hainbat gertaera-abisu, pertsonalizatu gertaera-abisuaren soinua eta dardara
✔️ Atzeratzeko aukera abisuetan
✔️ Gehitu oporrak, urtebetetzeak, urteurrenak eta hitzortuak errazki
✔️ Pertsonalizatu gertaerak: hasiera-ordua, iraupena, abisuak eta abar
✔️ Gehitu parte-hartzaileak gertaera bakoitzean
✔️ Egutegi pertsonala edo lanerako egutegi gisa erabili dezakezu
✔️ Hautatu abisu eta eposta jakinarazpenen artean gertaera baten berri izateko
DESKARGATU SIMPLE CALENDAR PRO LINEAZ KANPO ERABILI DAITEKEEN IRAGARKIRIK GABEKO EGUTEGI SINPLEA!
<b>Ikusi Simple Tools-en sorta osoa hemen:</b>
https://www.simplemobiletools.com
<b>Simple Calendar Pro-ren webgune autonomoa:</b>
https://www.simplemobiletools.com/calendar
<b>Facebook:</b>
https://www.facebook.com/simplemobiletools
<b>Reddit:</b>
https://www.reddit.com/r/SimpleMobileTools
</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>

View File

@@ -159,6 +159,7 @@
<string name="manage_event_types">Gestion des types d\événements</string> <string name="manage_event_types">Gestion des types d\événements</string>
<string name="start_day_at">Jour de début de la vue hebdomadaire</string> <string name="start_day_at">Jour de début de la vue hebdomadaire</string>
<string name="end_day_at">Jour de fin de la vue hebdomadaire</string> <string name="end_day_at">Jour de fin de la vue hebdomadaire</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Afficher les numéros de semaine</string> <string name="week_numbers">Afficher les numéros de semaine</string>
<string name="vibrate">Vibrer à la notification de rappel</string> <string name="vibrate">Vibrer à la notification de rappel</string>
<string name="reminder_sound">Son de rappel</string> <string name="reminder_sound">Son de rappel</string>
@@ -176,7 +177,7 @@
<string name="dim_past_events">Diminuer l\affichage des événements passés</string> <string name="dim_past_events">Diminuer l\affichage des événements passés</string>
<string name="events">Evénements</string> <string name="events">Evénements</string>
<string name="reminder_stream">Flux audio utilisé par les rappels</string> <string name="reminder_stream">Flux audio utilisé par les rappels</string>
<string name="system_stream">System</string> <string name="system_stream">Système</string>
<string name="alarm_stream">Alarme</string> <string name="alarm_stream">Alarme</string>
<string name="notification_stream">Notification</string> <string name="notification_stream">Notification</string>
<string name="ring_stream">Sonnerie</string> <string name="ring_stream">Sonnerie</string>
@@ -197,7 +198,7 @@
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
<string name="select_caldav_calendars">Seléctionner les agendas à synchroniser</string> <string name="select_caldav_calendars">Selectionner les agendas à synchroniser</string>
<string name="manage_synced_calendars">Gérer les agendas synchronisés</string> <string name="manage_synced_calendars">Gérer les agendas synchronisés</string>
<string name="store_locally_only">Stocker uniquement localement</string> <string name="store_locally_only">Stocker uniquement localement</string>
<string name="refresh_caldav_calendars">Rafraîchir les agendas CalDAV</string> <string name="refresh_caldav_calendars">Rafraîchir les agendas CalDAV</string>
@@ -209,7 +210,7 @@
<string name="select_a_different_caldav_color">Sélectionnez une couleur différente (peut être appliqué localement uniquement)</string> <string name="select_a_different_caldav_color">Sélectionnez une couleur différente (peut être appliqué localement uniquement)</string>
<string name="insufficient_permissions">Vous n\êtes pas autorisé à écrire dans l\agenda sélectionné</string> <string name="insufficient_permissions">Vous n\êtes pas autorisé à écrire dans l\agenda sélectionné</string>
<string name="caldav_event_not_found">Événement introuvable. Veuillez activer la synchronisation CalDAV pour le calendrier approprié dans les paramètres de lapplication.</string> <string name="caldav_event_not_found">Événement introuvable. Veuillez activer la synchronisation CalDAV pour le calendrier approprié dans les paramètres de lapplication.</string>
<string name="no_synchronized_calendars">No synchronizable calendars have been found</string> <string name="no_synchronized_calendars">Aucun calendrier synchronisable n\'a été trouvé</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->
@@ -250,47 +251,47 @@
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Calendrier mobile 2020. Planificat. d\'horaire; rappel de RDV n\'importe quel jour</string> <string name="app_short_description">Calendrier mobile 2020. Planificat. d\'horaire; rappel de RDV n\'importe quel jour</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Calendar Pro is a fully customizable, offline calendar designed to do exactly what a calendar should do. <b>No complicated features, unnecessary permissions and no ads!</b> Simple Calendar Pro est un calendrier entièrement personnalisable et hors-ligne désigné pour faire exactement ce qu\'un calendrier devrait faire. <b>Aucune fonctionnalité compliquée, permissions inutiles et sans pubs !</b>
Whether youre organizing single or recurring events, birthdays, anniversaries, business meetings, appointments or anything else, Simple Calendar Pro makes it <b>easy to stay organized</b>. With an incredible variety of <b>customization options</b> you can customize event reminders, notification sounds, calendar widgets and how the app looks. Que vous souhaitiez organiser un évènement ponctuel ou récurrent, un anniversaire, un rendez-vous d\'affaires ou quoi que ce soit d\'autre, Simple Calendar Pro rend simple <b>votre organisation</b>. Avec une grande variété <b>d\'options de personnalisation</b>, vous pouvez personnaliser les rappels d\'évènements, les sons de notifications, les widgets du calendrier et à quoi l\'application ressemble.
Daily, weekly and monthly views make checking your upcoming events &amp; appointments a breeze. You can even view everything as a simple list of events rather than in calendar view, so you <b>know exactly whats coming up in your life and when. </b> La vue journalière, semainière et mensuelle rend la vérification des évènements et rendez-vous à venir aisée. Vous pouvez même voir tous les évènements dans une simple liste plutôt que dans une vue calendrier, afin de <b>savoir exactement ce qui va arriver dans votre vie et quand. </b>
---------------------------------------------------------- ----------------------------------------------------------
<b>Simple Calendar Pro Features &amp; Benefits</b> <b>Simple Calendar Pro Fonctionnalités &amp; avantages </b>
---------------------------------------------------------- ----------------------------------------------------------
✔️ No ads or annoying popups ✔️ Aucune publicité ou popup ennuyante
✔️ No internet access needed, giving you more privacy &amp; security ✔️ Aucun accès à internet n\'est nécessaire, vous donnant un meilleur respect de la vie privée et de la sécurité
✔️ Only the bare minimum permissions required ✔️ Seul le strict minimum en permissions est requis
✔️ Emphasis on simplicity does what a calendar needs to do! ✔️ Emphase sur la simplicité - fait ce qu\'un calendrier doit faire !
✔️ Open source ✔️ Open source
✔️ Fully customizable themes &amp; calendar / event widgets ✔️ Thèmes et widgets entièrement personnalisables
✔️ Translated into 29 languages ✔️ Traduit en 29 langues
✔️ Export settings to .txt files to import to another device ✔️ Export des paramètres en fichier .txt pour les importer sur un autre appareil
✔️ CalDAV calendar sync supported to sync events across devices ✔️ Synchronisation du calendrier CalDAV supportée pour synchroniser entre les appareils
✔️ Daily, weekly, monthly, yearly &amp; event views on the calendar ✔️ Vue journalière, semainière, mensuelle et annuelle des évènements sur le calendrier
✔️ Supports exporting &amp; importing events via .ics files ✔️ Supporte l\'export et l\'import des évènements via des fichiers .ics
✔️ Set multiple event reminders, customize event reminder sound and vibration ✔️ Paramètre de multiples rappels d\'évènements, personnalise les effets sonores et la vibration des évènements
✔️ Snooze option for reminders ✔️ Option snooze pour les rappels
✔️ Easily add holidays, birthdays, anniversaries &amp; appointments ✔️ Ajoute facilement des évènements d\'anniversaire et de vacances
✔️ Customize events start time, duration, reminders etc ✔️ Personnalise les évènements - début, durée, rappels, etc.
✔️ Add event attendees to each event ✔️ Note les présences sur chaque évènement
✔️ Use as a personal calendar or a business calendar ✔️ Utilisable en tant que calendrier personnel ou professionnel
✔️ Choose between reminders &amp; email notifications to alert you about an event ✔️ Choisissez entre rappels et notifications par email pour vous alerter à propos d\'un évènement
DOWNLOAD SIMPLE CALENDAR PRO THE SIMPLE OFFLINE CALENDAR WITH NO ADS! TÉLÉCHARGEZ SIMPLE CALENDAR PRO LE CALENDRIER HORS-LIGNE SIMPLE ET SANS PUBS !
<b>Check out the full suite of Simple Tools here:</b> <b>Découvrez la suite complète des applications Simple Mobile Tools ici :</b>
https://www.simplemobiletools.com https://www.simplemobiletools.com
<b>Standalone website of Simple Calendar Pro:</b> <b>Site internet de Simple Calendar Pro :</b>
https://www.simplemobiletools.com/calendar https://www.simplemobiletools.com/calendar
<b>Facebook:</b> <b>Facebook :</b>
https://www.facebook.com/simplemobiletools https://www.facebook.com/simplemobiletools
<b>Reddit:</b> <b>Reddit :</b>
https://www.reddit.com/r/SimpleMobileTools https://www.reddit.com/r/SimpleMobileTools
</string> </string>

View File

@@ -8,15 +8,15 @@
<string name="monthly_view">Vista mensual</string> <string name="monthly_view">Vista mensual</string>
<string name="yearly_view">Vista anual</string> <string name="yearly_view">Vista anual</string>
<string name="simple_event_list">Lista de eventos simple</string> <string name="simple_event_list">Lista de eventos simple</string>
<string name="no_upcoming_events">Semella que non ten ningún evento próximo.</string> <string name="no_upcoming_events">Semella que non tes ningún evento próximo.</string>
<string name="go_to_today">Ir ao día de hoxe</string> <string name="go_to_today">Ir ao día de hoxe</string>
<string name="go_to_date">Ir a unha data</string> <string name="go_to_date">Ir a unha data</string>
<string name="upgraded_from_free">Hey,\n\nseems like you upgraded from the old free app. You have to migrate locally stored events manually via exporting in an .ics file, then importing. You can find both export/import buttons at the main screen menu.\n\nYou can then uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings. You will then only have to reset your app settings.\n\nThanks!</string> <string name="upgraded_from_free">Ola,\n\nsemella que actualizaches desde a antiga versión gratuíta. Tes que migrar os eventos gardados localmente exportándoos manualmente a un ficheiro .ics e despois importándoos. Podes atopar o botón exportar/importar no menú da pantalla principal.\n\nDespois, podes desinstalar a versión antiga, que ten o botón \'Mellorar a Pro\' arriba nos axustes do app. Finalmente só terás que restablecer os axustes do app.\n\nGrazas!</string>
<!-- Widget titles --> <!-- Widget titles -->
<string name="widget_monthly">Calendario mensual</string> <string name="widget_monthly">Calendario mensual</string>
<string name="widget_list">Lista de eventos do calendario</string> <string name="widget_list">Lista de eventos do calendario</string>
<string name="widget_todays_date">Calendar today\'s date</string> <string name="widget_todays_date">Calendario no día actual</string>
<!-- Event --> <!-- Event -->
<string name="event">Evento</string> <string name="event">Evento</string>
@@ -24,17 +24,17 @@
<string name="new_event">Novo evento</string> <string name="new_event">Novo evento</string>
<string name="create_new_event">Crear evento novo</string> <string name="create_new_event">Crear evento novo</string>
<string name="duplicate_event">Duplicar evento</string> <string name="duplicate_event">Duplicar evento</string>
<string name="title_empty">O título non pode estar baldeiro</string> <string name="title_empty">O título non pode estar baleiro</string>
<string name="end_before_start">O evento non pode rematar antes de iniciarse</string> <string name="end_before_start">O evento non pode rematar antes de iniciarse</string>
<string name="event_added">Evento engadido con éxito</string> <string name="event_added">Evento engadido con éxito</string>
<string name="event_updated">O evento foi actualizado correctamente</string> <string name="event_updated">O evento foi actualizado correctamente</string>
<string name="filter_events_by_type">Filtrar eventos por tipo</string> <string name="filter_events_by_type">Filtrar eventos por tipo</string>
<string name="please_fill_location">Introduza unha localización para que se mostre nun mapa</string> <string name="please_fill_location">Escribe a localización para que se mostre nun mapa</string>
<string name="public_event_notification_text">Hai un evento próximo</string> <string name="public_event_notification_text">Hai un evento próximo</string>
<!-- Event Repetition --> <!-- Event Repetition -->
<string name="repetition">Repetición</string> <string name="repetition">Repetición</string>
<string name="no_repetition">Sin repetición</string> <string name="no_repetition">Sen repetición</string>
<string name="daily">Diariamente</string> <string name="daily">Diariamente</string>
<string name="weekly">Semanalmente</string> <string name="weekly">Semanalmente</string>
<string name="monthly">Mensualmente</string> <string name="monthly">Mensualmente</string>
@@ -45,11 +45,11 @@
<string name="repeat_till">Repetir ata</string> <string name="repeat_till">Repetir ata</string>
<string name="forever">Sempre</string> <string name="forever">Sempre</string>
<string name="event_is_repeatable">O evento é repetible</string> <string name="event_is_repeatable">O evento é repetible</string>
<string name="selection_contains_repetition">A seleción contén eventos recurrentes</string> <string name="selection_contains_repetition">A selección contén eventos recurrentes</string>
<string name="delete_one_only">Eliminar só o evento selecionado</string> <string name="delete_one_only">Eliminar só o evento seleccionado</string>
<string name="delete_future_occurrences">Eliminar este e todos os eventos futuros</string> <string name="delete_future_occurrences">Eliminar este e todos os eventos futuros</string>
<string name="delete_all_occurrences">Eliminar todos os eventos</string> <string name="delete_all_occurrences">Eliminar todos os eventos</string>
<string name="update_one_only">Actualizar só o evento selecionado</string> <string name="update_one_only">Actualizar só o evento seleccionado</string>
<string name="update_all_occurrences">Actualizar todos os eventos</string> <string name="update_all_occurrences">Actualizar todos os eventos</string>
<string name="repeat_till_date">Repetir ata a data</string> <string name="repeat_till_date">Repetir ata a data</string>
<string name="stop_repeating_after_x">Deixar de repetir despois de x eventos</string> <string name="stop_repeating_after_x">Deixar de repetir despois de x eventos</string>
@@ -58,10 +58,10 @@
<string name="repeat">Repetir</string> <string name="repeat">Repetir</string>
<string name="repeat_on">Repertir os</string> <string name="repeat_on">Repertir os</string>
<string name="every_day">Cada día</string> <string name="every_day">Cada día</string>
<string name="selected_days">Nos días selecionados</string> <string name="selected_days">Nos días seleccionados</string>
<string name="the_same_day">O mismo día</string> <string name="the_same_day">O mesmo día</string>
<string name="the_last_day">O último día</string> <string name="the_last_day">O último día</string>
<string name="repeat_on_the_same_day_monthly">Repetir no mismo día cada mes</string> <string name="repeat_on_the_same_day_monthly">Repetir no mesmo día cada mes</string>
<string name="repeat_on_the_last_day_monthly">Repetir no último día do mes</string> <string name="repeat_on_the_last_day_monthly">Repetir no último día do mes</string>
<string name="repeat_on_the_same_day_yearly">Repetir no mesmo día cada ano</string> <string name="repeat_on_the_same_day_yearly">Repetir no mesmo día cada ano</string>
<string name="repeat_every_m">Repetir cada</string> <string name="repeat_every_m">Repetir cada</string>
@@ -78,23 +78,23 @@
<string name="every_f">Cada</string> <string name="every_f">Cada</string>
<string name="first_f">primero</string> <string name="first_f">primero</string>
<string name="second_f">segundo</string> <string name="second_f">segundo</string>
<string name="third_f">tercero</string> <string name="third_f">terceiro</string>
<string name="fourth_f">cuarto</string> <string name="fourth_f">cuarto</string>
<string name="last_f">último</string> <string name="last_f">último</string>
<!-- Birthdays --> <!-- Birthdays -->
<string name="birthdays">Cumpleanos</string> <string name="birthdays">Aniversario</string>
<string name="add_birthdays">Engadir cumpleanos de contactos</string> <string name="add_birthdays">Engadir aniversario dos contactos</string>
<string name="no_birthdays">Non se atoparon cumpleanos</string> <string name="no_birthdays">Non se atoparon aniversarios</string>
<string name="no_new_birthdays">Non se atoparon novos cumpleanos</string> <string name="no_new_birthdays">Non se atoparon novos aniversarios</string>
<string name="birthdays_added">Engadíronse correctamente os cumpleanos</string> <string name="birthdays_added">Engadíronse correctamente os aniversarios</string>
<!-- Anniversaries --> <!-- Anniversaries -->
<string name="anniversaries">Aniversarios</string> <string name="anniversaries">Celebracións</string>
<string name="add_anniversaries">Engadir aniversarios de contactos</string> <string name="add_anniversaries">Engadir celebracións de contactos</string>
<string name="no_anniversaries">Non se atoparon aniversarios</string> <string name="no_anniversaries">Non se atoparon celebracións</string>
<string name="no_new_anniversaries">Non se atoparon novos aniversarios</string> <string name="no_new_anniversaries">Non se atoparon novas celebracións</string>
<string name="anniversaries_added">Engadíronse correctamente os aniversarios</string> <string name="anniversaries_added">Engadíronse correctamente as celebracións</string>
<!-- Event Reminders --> <!-- Event Reminders -->
<string name="reminder">Recordatorio</string> <string name="reminder">Recordatorio</string>
@@ -103,26 +103,26 @@
<string name="event_reminders">Recordatorios de eventos</string> <string name="event_reminders">Recordatorios de eventos</string>
<!-- Event attendees --> <!-- Event attendees -->
<string name="add_another_attendee">Add another attendee</string> <string name="add_another_attendee">Engadir participante</string>
<string name="my_status">My status:</string> <string name="my_status">O meu estado:</string>
<string name="going">Going</string> <string name="going">Vou</string>
<string name="not_going">Not going</string> <string name="not_going">Non vou</string>
<string name="maybe_going">Maybe going</string> <string name="maybe_going">Pode que vaia</string>
<string name="invited">Invited</string> <string name="invited">Convidado</string>
<!-- Time zones --> <!-- Time zones -->
<string name="enter_a_country">Enter a country or time zone</string> <string name="enter_a_country">Inserir franxa horaria</string>
<!-- Export / Import --> <!-- Export / Import -->
<string name="import_events">Importar eventos</string> <string name="import_events">Importar eventos</string>
<string name="export_events">Exportar eventos</string> <string name="export_events">Exportar eventos</string>
<string name="import_events_from_ics">Importar eventos desde un ficheiro .ics</string> <string name="import_events_from_ics">Importar eventos desde un ficheiro .ics</string>
<string name="export_events_to_ics">Exportar eventos desde un ficheiro .ics</string> <string name="export_events_to_ics">Exportar eventos a un ficheiro .ics</string>
<string name="default_event_type">Tipo de evento predeterminado</string> <string name="default_event_type">Tipo de evento predeterminado</string>
<string name="export_past_events_too">Exportar tamén eventos pasados</string> <string name="export_past_events_too">Exportar tamén eventos pasados</string>
<string name="include_event_types">Incluír tipos de eventos</string> <string name="include_event_types">Incluír tipos de eventos</string>
<string name="filename_without_ics">Nome de ficheiro (sin .ics)</string> <string name="filename_without_ics">Nome do ficheiro (sen .ics)</string>
<string name="override_event_types">Sobreescribir tipos de evento no ficheiro</string> <string name="override_event_types">Sobrescribir tipos de evento no ficheiro</string>
<!-- Event details --> <!-- Event details -->
<string name="location">Localización</string> <string name="location">Localización</string>
@@ -140,10 +140,10 @@
<string name="color">Cor</string> <string name="color">Cor</string>
<string name="regular_event">Evento regular</string> <string name="regular_event">Evento regular</string>
<string name="cannot_delete_default_type">Non se pode eliminar o tipo de evento predeterminado</string> <string name="cannot_delete_default_type">Non se pode eliminar o tipo de evento predeterminado</string>
<string name="select_event_type">Seleccione un tipo de evento</string> <string name="select_event_type">Selecciona un tipo de evento</string>
<string name="move_events_into_default">Mover os eventos afectados ao tipo de evento por omisión</string> <string name="move_events_into_default">Mover os eventos afectados ao tipo de evento por defecto</string>
<string name="remove_affected_events">Eliminar permanentemente os eventos afectados</string> <string name="remove_affected_events">Eliminar permanentemente os eventos afectados</string>
<string name="unsync_caldav_calendar">Para eliminar un calendario CalDAV antes debe deixar de sincronizalo</string> <string name="unsync_caldav_calendar">Para eliminar un calendario CalDAV antes debes deixar de sincronizalo</string>
<!-- Holidays --> <!-- Holidays -->
<string name="holidays">Festivo</string> <string name="holidays">Festivo</string>
@@ -151,25 +151,26 @@
<string name="national_holidays">Festivo nacional</string> <string name="national_holidays">Festivo nacional</string>
<string name="religious_holidays">Festas relixiosas</string> <string name="religious_holidays">Festas relixiosas</string>
<string name="holidays_imported_successfully">Os festivos importáronse correctamente no tipo de evento \"Festivo\"</string> <string name="holidays_imported_successfully">Os festivos importáronse correctamente no tipo de evento \"Festivo\"</string>
<string name="importing_some_holidays_failed">Fallou a importación de algúns eventos</string> <string name="importing_some_holidays_failed">Fallou a importación dalgúns eventos</string>
<string name="importing_holidays_failed">Fallou a importación de días festivos</string> <string name="importing_holidays_failed">Fallou a importación de días festivos</string>
<!-- Settings --> <!-- Settings -->
<string name="manage_event_types">Xestionar tipos de eventos</string> <string name="manage_event_types">Xestionar tipos de eventos</string>
<string name="start_day_at">Na vista xeral o día comeza as</string> <string name="start_day_at">Na vista xeral o día comeza as</string>
<string name="end_day_at">O día na vista semanal remata as</string> <string name="end_day_at">O día na vista semanal remata as</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Mostrar os números da semana</string> <string name="week_numbers">Mostrar os números da semana</string>
<string name="vibrate">Vibrar coa notificación de recordatorio</string> <string name="vibrate">Vibrar coa notificación de recordatorio</string>
<string name="reminder_sound">Son de recordatorio</string> <string name="reminder_sound">Son de recordatorio</string>
<string name="no_ringtone_picker">Non se atopou ningunha aplicación capaz de establecer o ton de aviso</string> <string name="no_ringtone_picker">Non se atopou ningún aplicativo capaz de establecer o ton de aviso</string>
<string name="no_ringtone_selected">Ningún</string> <string name="no_ringtone_selected">Ningún</string>
<string name="day_end_before_start">O día non puede rematar antes de que comece</string> <string name="day_end_before_start">O día non pode rematar antes de que comece</string>
<string name="caldav_sync">CalDAV sincr.</string> <string name="caldav_sync">CalDAV sincr.</string>
<string name="event_lists">Listas de eventos</string> <string name="event_lists">Listaxes de eventos</string>
<string name="display_past_events">Mostrar eventos do pasado</string> <string name="display_past_events">Mostrar eventos do pasado</string>
<string name="replace_description_with_location">Substituir a descrición coa localización</string> <string name="replace_description_with_location">Substituír a descrición coa localización</string>
<string name="delete_all_events">Borrar tódolos eventos</string> <string name="delete_all_events">Borrar todos os eventos</string>
<string name="delete_all_events_confirmation">Está seguro de querer borrar tódolos eventos? Esto deixará intactos os tipos de evento e outros axustes.</string> <string name="delete_all_events_confirmation">Tes a certeza de querer borrar tódolos eventos? Esto deixará intactos os tipos de evento e outros axustes.</string>
<string name="show_a_grid">Mostrar unha cuadrícula</string> <string name="show_a_grid">Mostrar unha cuadrícula</string>
<string name="loop_reminders">Repetir recordatorios ata que se descarten</string> <string name="loop_reminders">Repetir recordatorios ata que se descarten</string>
<string name="dim_past_events">Atenuar eventos pasados</string> <string name="dim_past_events">Atenuar eventos pasados</string>
@@ -178,12 +179,12 @@
<string name="system_stream">Sistema</string> <string name="system_stream">Sistema</string>
<string name="alarm_stream">Alarma</string> <string name="alarm_stream">Alarma</string>
<string name="notification_stream">Notificación</string> <string name="notification_stream">Notificación</string>
<string name="ring_stream">Timbre</string> <string name="ring_stream">Ton</string>
<string name="use_last_event_reminders">Usar os recordatorios dos últimos eventos como recordatorio por defecto para os eventos novos</string> <string name="use_last_event_reminders">Usar os recordatorios dos últimos eventos como recordatorio por defecto para os eventos novos</string>
<string name="default_reminder_1">Recordatorio por defecto 1</string> <string name="default_reminder_1">Recordatorio por defecto 1</string>
<string name="default_reminder_2">Recordatorio por defecto 2</string> <string name="default_reminder_2">Recordatorio por defecto 2</string>
<string name="default_reminder_3">Recordatorio por defecto 3</string> <string name="default_reminder_3">Recordatorio por defecto 3</string>
<string name="view_to_open_from_widget">Vista que abrir desde o widget da lista de eventos</string> <string name="view_to_open_from_widget">Vista a abrir desde o widget da lista de eventos</string>
<string name="last_view">Última vista</string> <string name="last_view">Última vista</string>
<string name="new_events">Eventos novos</string> <string name="new_events">Eventos novos</string>
<string name="default_start_time">Hora de comezo por defecto</string> <string name="default_start_time">Hora de comezo por defecto</string>
@@ -192,11 +193,11 @@
<string name="last_used_one">A última usada</string> <string name="last_used_one">A última usada</string>
<string name="other_time">Outra hora</string> <string name="other_time">Outra hora</string>
<string name="highlight_weekends">Resaltar fins de semana nalgunhas vistas</string> <string name="highlight_weekends">Resaltar fins de semana nalgunhas vistas</string>
<string name="allow_changing_time_zones">Allow changing event time zones</string> <string name="allow_changing_time_zones">Permitir cambiar as zonas horarias do evento</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
<string name="select_caldav_calendars">Escolla calendarios a sincronizar</string> <string name="select_caldav_calendars">Escolle calendarios a sincronizar</string>
<string name="manage_synced_calendars">Xestionar calendarios sincronizados</string> <string name="manage_synced_calendars">Xestionar calendarios sincronizados</string>
<string name="store_locally_only">Gardar só localmente</string> <string name="store_locally_only">Gardar só localmente</string>
<string name="refresh_caldav_calendars">Actualizar calendarios CalDAV</string> <string name="refresh_caldav_calendars">Actualizar calendarios CalDAV</string>
@@ -205,20 +206,20 @@
<string name="editing_calendar_failed">Fallou a edición do calendario</string> <string name="editing_calendar_failed">Fallou a edición do calendario</string>
<string name="syncing">Sincronizando…</string> <string name="syncing">Sincronizando…</string>
<string name="synchronization_completed">Sincronización completa</string> <string name="synchronization_completed">Sincronización completa</string>
<string name="select_a_different_caldav_color">Escolle un color diferente (pode que só se aplique localmente)</string> <string name="select_a_different_caldav_color">Escolle unha cor diferente (pode que só se aplique localmente)</string>
<string name="insufficient_permissions">Non tes permiso para escribir no calendario seleccionado</string> <string name="insufficient_permissions">Non tes permiso para escribir no calendario seleccionado</string>
<string name="caldav_event_not_found">Evento non atopado. Activa a sincronización de CalDAV para o calendario apropiado nos axustes da aplicación.</string> <string name="caldav_event_not_found">Evento non atopado. Activa a sincronización de CalDAV para o calendario apropiado nos axustes do aplicativo.</string>
<string name="no_synchronized_calendars">No synchronizable calendars have been found</string> <string name="no_synchronized_calendars">Non se atoparon calendarios sincronizados</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->
<string name="monday_alt">Segunda</string> <string name="monday_alt">luns</string>
<string name="tuesday_alt">Terceira</string> <string name="tuesday_alt">martes</string>
<string name="wednesday_alt">Cuarta</string> <string name="wednesday_alt">mércores</string>
<string name="thursday_alt">Quinta</string> <string name="thursday_alt">xoves</string>
<string name="friday_alt">Sexta</string> <string name="friday_alt">venres</string>
<string name="saturday_alt">Sábado</string> <string name="saturday_alt">sábado</string>
<string name="sunday_alt">Domingo</string> <string name="sunday_alt">domingo</string>
<!-- List widget config example events --> <!-- List widget config example events -->
<string name="sample_title_1">Exercicio</string> <string name="sample_title_1">Exercicio</string>
@@ -227,64 +228,63 @@
<string name="sample_description_2">No paseo do León</string> <string name="sample_description_2">No paseo do León</string>
<string name="sample_title_3">Biblioteca</string> <string name="sample_title_3">Biblioteca</string>
<string name="sample_title_4">Xantar con Aira</string> <string name="sample_title_4">Xantar con Aira</string>
<string name="sample_description_4">Na plaza</string> <string name="sample_description_4">Na praza</string>
<string name="sample_title_5">Hora do café</string> <string name="sample_title_5">Hora do café</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">How can I remove the holidays imported via the \"Add holidays\" button?</string> <string name="faq_1_title">Como podo eliminar os días festivos engadidos vía o botón \"Engadir días festivos\"?</string>
<string name="faq_1_text">Holidays created that way are inserted in a new event type called \"Holidays\". You can go in Settings -> Manage Event Types, <string name="faq_1_text">Os días festivos creados dese xeito insértanse nun tipo de evento chamado \"Festivo\". Podes ir a Axustes -> Xestionar tipo de eventos,
long press the given event type and delete it by selecting the trashbin.</string> manter preso o tipo de evento desexado e eliminalo escollendo a Papeleira do lixo.</string>
<string name="faq_2_title">Can I sync my events via Google Calendar, or other service supporting CalDAV?</string> <string name="faq_2_title">Podo sincronizar os meus eventos vía Google Calendar, ou outro servizo que use CalDAV?</string>
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers. <string name="faq_2_text">Si, activa \"CalDAV sincr.\" nos axustes da app e escolle os calendarios que queres sincronizar. Porén, precisas unha app de terceiros para xestionar a sincronización entre dispositivos e servidores.
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 DAVx5.</string> Se desexas sincronizar un calendario de Google, o seu app oficial Calendar fará o traballo. Para outros calendario precisas un app de sincronización, como DAVx5.</string>
<string name="faq_3_title">I see the visual reminders, but hear no audio. What can I do?</string> <string name="faq_3_title">Vexo os recordatorios visualmente, pero non escoito audio. Que podo facer?</string>
<string name="faq_3_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings, <string name="faq_3_text">Non só mostrar o recordatorio propiamente dito, se non que a reprodución do son depende en gran medida do sistema tamén. Se non podes escoitar ningún son, intenta ir aos axustes do app e premer en \"Canle de audio usado polos recordatorios\" e cambialo a un valor diferente. Se aínda así non funciona, comproba os axustes de son, que o fluxo en particular non estea acalado.</string>
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_4_title">O app soporta zonas horarias?</string>
<string name="faq_4_title">Does the app support time zones?</string> <string name="faq_4_text">Si. Por defecto todos os eventos créanse na túa zona horaria actual. Se desexas cambiar a zona horaria dos eventos,
<string name="faq_4_text">Yes, it does. By default all events are created in your current time zone. If you want to change an events\' time zone, primeiro tes que activar o selector de zona horaria nos axustes do app, e despois cambialo na pantalla de Detalles do Evento. Está desactivado de inicio porque a maioría da xente non o necesita.</string>
you will first have to enable the time zone picker at the app settings, then change it at the Event Details screen. It is disabled by default as most people won\'t need it.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Calendar Pro - Events &amp; Reminders</string> <string name="app_title">Simple Calendar Pro - Eventos &amp; Recordatorios</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Simple mobile 2020 calendar. Schedule planner &amp; appointment reminder for any day</string> <string name="app_short_description">Calendadario simple, con eventos, widget personalizable e sen publicidade.</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Calendar Pro is a fully customizable, offline calendar designed to do exactly what a calendar should do. <b>No complicated features, unnecessary permissions and no ads!</b> Simple Calendar Pro é totalmente personalizable, calendario offline deseñado para facer o que debe facer un calendario. <b>Sen funcións complicadas, permisos innecesarios e sen publicidade!</b>
Whether youre organizing single or recurring events, birthdays, anniversaries, business meetings, appointments or anything else, Simple Calendar Pro makes it <b>easy to stay organized</b>. With an incredible variety of <b>customization options</b> you can customize event reminders, notification sounds, calendar widgets and how the app looks. Tanto se organizas eventos puntuais ou recurrentes, aniversarios, cabodanos, xuntanzas de negocios, citas ou calquera outro evento, Simple Calendar Pro poncho doado para estar <b>organizado</b>. Cunha abraiante multitude de <b>opcións de personalización</b> podes personalizar os recordatorios de eventos, sons de notificación, widgets de calendario e o aspecto do app.
Daily, weekly and monthly views make checking your upcoming events &amp; appointments a breeze. You can even view everything as a simple list of events rather than in calendar view, so you <b>know exactly whats coming up in your life and when. </b> A vista Diaria, Semanal e Mensual facilítanche comprobar as próximas citas &amp; eventos. Podes incluso visualizalos como unha simple listaxe de eventos en lugar de nunha vista de calendario, así <b>sabes exactamente o que está por vir e cando</b>.
---------------------------------------------------------- ----------------------------------------------------------
<b>Simple Calendar Pro Features &amp; Benefits</b> <b>Simple Calendar Pro Características &amp; Melloras</b>
---------------------------------------------------------- ----------------------------------------------------------
✔️ No ads or annoying popups ✔️ Sen publicidade nin ventás emerxentes
✔️ No internet access needed, giving you more privacy &amp; security ✔️ Non precisa acceso a internet, proporcionando máis privacidade &amp; seguridade
✔️ Only the bare minimum permissions required ✔️ Precisa os permisos mínimos imprescindibles
✔️ Emphasis on simplicity does what a calendar needs to do! ✔️ Énfase na simplicidade fai o que ten que facer!
✔️ Open source ✔️ Código aberto
✔️ Fully customizable themes &amp; calendar / event widgets ✔️ Aspecto personalizable &amp; widget de calendario / eventos
✔️ Translated into 29 languages ✔️ Traducido a 29 idiomas
✔️ Export settings to .txt files to import to another device ✔️ Exporta os axustes a un ficheiro .txt e impórtao noutro dispositivo
✔️ CalDAV calendar sync supported to sync events across devices ✔️ Sincronización CalDAV de calendario entre varios dispositivos
✔️ Daily, weekly, monthly, yearly &amp; event views on the calendar ✔️ Vista de eventos no calendario Diario, Semanal, Mensual ou Anual
✔️ Supports exporting &amp; importing events via .ics files ✔️ Soporta a exportación &amp; importación de eventos via ficheiros .ics
✔️ Set multiple event reminders, customize event reminder sound and vibration ✔️ Establece múltiples recordatorios, con son e vibración personalizable
✔️ Snooze option for reminders ✔️ Posibilidade de adiar recordatorios
✔️ Easily add holidays, birthdays, anniversaries &amp; appointments ✔️ Engade facilmente citas, aniversarios, vacacións &amp; celebracións
✔️ Customize events start time, duration, reminders etc ✔️ Personaliza os eventos hora de inicio, duración, recordatorios etc
✔️ Add event attendees to each event ✔️ Engade participantes aos eventos
✔️ Use as a personal calendar or a business calendar ✔️ Utilízao como calendario personal ou para o traballo
✔️ Choose between reminders &amp; email notifications to alert you about an event ✔️ Escolle entre recordatorios &amp; notificacións por email para avisarte dun evento
DOWNLOAD SIMPLE CALENDAR PRO THE SIMPLE OFFLINE CALENDAR WITH NO ADS! DESCARGA SIMPLE CALENDAR PRO CALENDARIO SIMPLE SEN PUBLICIDADE!
<b>Check out the full suite of Simple Tools here:</b> <b>Aquí tes a listaxe completa de Simple Tools:</b>
https://www.simplemobiletools.com https://www.simplemobiletools.com
<b>Standalone website of Simple Calendar Pro:</b> <b>Web propia para Simple Calendar Pro:</b>
https://www.simplemobiletools.com/calendar https://www.simplemobiletools.com/calendar
<b>Facebook:</b> <b>Facebook:</b>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">נהל סוגי אירועים</string> <string name="manage_event_types">נהל סוגי אירועים</string>
<string name="start_day_at">שעת התחלה היום</string> <string name="start_day_at">שעת התחלה היום</string>
<string name="end_day_at">שעת סיום היום</string> <string name="end_day_at">שעת סיום היום</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">הצגת מספרי שבועות</string> <string name="week_numbers">הצגת מספרי שבועות</string>
<string name="vibrate">רטט בהתרעת תזכורת</string> <string name="vibrate">רטט בהתרעת תזכורת</string>
<string name="reminder_sound">צליל תזכורת</string> <string name="reminder_sound">צליל תזכורת</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Manage event types</string> <string name="manage_event_types">Manage event types</string>
<string name="start_day_at">Start day at</string> <string name="start_day_at">Start day at</string>
<string name="end_day_at">End day at</string> <string name="end_day_at">End day at</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">सफ्ताह क्रमांक दिखाए</string> <string name="week_numbers">सफ्ताह क्रमांक दिखाए</string>
<string name="vibrate">Vibrate on reminder notification</string> <string name="vibrate">Vibrate on reminder notification</string>
<string name="reminder_sound">Reminder sound</string> <string name="reminder_sound">Reminder sound</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Upravljanje vrstama događaja</string> <string name="manage_event_types">Upravljanje vrstama događaja</string>
<string name="start_day_at">Započni dan u</string> <string name="start_day_at">Započni dan u</string>
<string name="end_day_at">Završi dan u</string> <string name="end_day_at">Završi dan u</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Pokaži tjedne brojeve</string> <string name="week_numbers">Pokaži tjedne brojeve</string>
<string name="vibrate">Vibrirajte na obavijesti podsjetnika</string> <string name="vibrate">Vibrirajte na obavijesti podsjetnika</string>
<string name="reminder_sound">Zvuk podsjetnika</string> <string name="reminder_sound">Zvuk podsjetnika</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Manage event types</string> <string name="manage_event_types">Manage event types</string>
<string name="start_day_at">Start day at</string> <string name="start_day_at">Start day at</string>
<string name="end_day_at">End day at</string> <string name="end_day_at">End day at</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Hetek sorszámának mutatása</string> <string name="week_numbers">Hetek sorszámának mutatása</string>
<string name="vibrate">Emlékeztetőnél rezgés</string> <string name="vibrate">Emlékeztetőnél rezgés</string>
<string name="reminder_sound">Reminder sound</string> <string name="reminder_sound">Reminder sound</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Kelola kategori acara</string> <string name="manage_event_types">Kelola kategori acara</string>
<string name="start_day_at">Hari dimulai pada jam</string> <string name="start_day_at">Hari dimulai pada jam</string>
<string name="end_day_at">Hari berakhir pada jam</string> <string name="end_day_at">Hari berakhir pada jam</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Tampilkan nomor minggu</string> <string name="week_numbers">Tampilkan nomor minggu</string>
<string name="vibrate">Getar pada notifikasi pengingat</string> <string name="vibrate">Getar pada notifikasi pengingat</string>
<string name="reminder_sound">Suara pengingat</string> <string name="reminder_sound">Suara pengingat</string>

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">Kelola kategori acara</string> <string name="manage_event_types">Kelola kategori acara</string>
<string name="start_day_at">Hari dimulai pada jam</string> <string name="start_day_at">Hari dimulai pada jam</string>
<string name="end_day_at">Hari berakhir pada jam</string> <string name="end_day_at">Hari berakhir pada jam</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Tampilkan nomor minggu</string> <string name="week_numbers">Tampilkan nomor minggu</string>
<string name="vibrate">Getar pada notifikasi pengingat</string> <string name="vibrate">Getar pada notifikasi pengingat</string>
<string name="reminder_sound">Suara pengingat</string> <string name="reminder_sound">Suara pengingat</string>

View File

@@ -86,14 +86,14 @@
<string name="birthdays">Compleanni</string> <string name="birthdays">Compleanni</string>
<string name="add_birthdays">Aggiungi compleanni dai contatti</string> <string name="add_birthdays">Aggiungi compleanni dai contatti</string>
<string name="no_birthdays">Nessun compleanno trovato</string> <string name="no_birthdays">Nessun compleanno trovato</string>
<string name="no_new_birthdays">No new birthdays have been found</string> <string name="no_new_birthdays">Nessun nuovo compleanno trovato</string>
<string name="birthdays_added">Compleanni aggiunti con successo</string> <string name="birthdays_added">Compleanni aggiunti con successo</string>
<!-- Anniversaries --> <!-- Anniversaries -->
<string name="anniversaries">Anniversari</string> <string name="anniversaries">Anniversari</string>
<string name="add_anniversaries">Aggiungi anniversari dai contatti</string> <string name="add_anniversaries">Aggiungi anniversari dai contatti</string>
<string name="no_anniversaries">Nessun anniversario trovato</string> <string name="no_anniversaries">Nessun anniversario trovato</string>
<string name="no_new_anniversaries">No new anniversaries have been found</string> <string name="no_new_anniversaries">Nessun nuovo anniversario trovato</string>
<string name="anniversaries_added">Anniversari aggiunti con successo</string> <string name="anniversaries_added">Anniversari aggiunti con successo</string>
<!-- Event Reminders --> <!-- Event Reminders -->
@@ -111,7 +111,7 @@
<string name="invited">Invitato</string> <string name="invited">Invitato</string>
<!-- Time zones --> <!-- Time zones -->
<string name="enter_a_country">Enter a country or time zone</string> <string name="enter_a_country">Inserisci un paese o un fuso orario</string>
<!-- Export / Import --> <!-- Export / Import -->
<string name="import_events">Importa eventi</string> <string name="import_events">Importa eventi</string>
@@ -158,6 +158,7 @@
<string name="manage_event_types">Gestisci i tipi di evento</string> <string name="manage_event_types">Gestisci i tipi di evento</string>
<string name="start_day_at">Il giorno inizia alle</string> <string name="start_day_at">Il giorno inizia alle</string>
<string name="end_day_at">Il giorno finisce alle</string> <string name="end_day_at">Il giorno finisce alle</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">Mostra numero settimane</string> <string name="week_numbers">Mostra numero settimane</string>
<string name="vibrate">Vibra per le notifiche di promemoria</string> <string name="vibrate">Vibra per le notifiche di promemoria</string>
<string name="reminder_sound">Suoneria promemoria</string> <string name="reminder_sound">Suoneria promemoria</string>
@@ -191,8 +192,8 @@
<string name="default_duration">Durata predefinita</string> <string name="default_duration">Durata predefinita</string>
<string name="last_used_one">L\'ultimo utilizzato</string> <string name="last_used_one">L\'ultimo utilizzato</string>
<string name="other_time">Altro periodo</string> <string name="other_time">Altro periodo</string>
<string name="highlight_weekends">Highlight weekends on some views</string> <string name="highlight_weekends">Evidenzia il fine-settimana in alcune viste</string>
<string name="allow_changing_time_zones">Allow changing event time zones</string> <string name="allow_changing_time_zones">Abilita il cambio del fuso orario negli eventi</string>
<!-- CalDAV sync --> <!-- CalDAV sync -->
<string name="caldav">CalDAV</string> <string name="caldav">CalDAV</string>
@@ -207,9 +208,9 @@
<string name="synchronization_completed">Sincronizzazione completata</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> <string name="select_a_different_caldav_color">Seleziona un colore differente (potrebbe essere applicato solamente in locale)</string>
<string name="insufficient_permissions">Non si hanno i permessi per scrivere nel calendario selezionato</string> <string name="insufficient_permissions">Non si hanno i permessi per scrivere nel calendario selezionato</string>
<string name="caldav_event_not_found">Event not found. Please enable CalDAV sync for the appropriate calendar in the app settings.</string> <string name="caldav_event_not_found">Evento non trovato. Abilita la sincronizzazione CalDAV per il relativo calendario nelle impostazioni dell\'app.</string>
<string name="no_synchronized_calendars">No synchronizable calendars have been found</string> <string name="no_synchronized_calendars">Non é stato trovato nessun calendario sincronizzabile</string>
<!-- alternative versions for some languages, use the same translations if you are not sure what this means --> <!-- alternative versions for some languages, use the same translations if you are not sure what this means -->
<!-- used in repetition, like "Every last Sunday" --> <!-- used in repetition, like "Every last Sunday" -->
<string name="monday_alt">Lunedì</string> <string name="monday_alt">Lunedì</string>
@@ -240,9 +241,8 @@
<string name="faq_3_title">Visualizzo i promemoria, ma non sento l\'audio. Cosa posso fare?</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 si sente alcun suono, provare ad andare nelle impostazioni dell\'applicazione, <string name="faq_3_text">Non solo visualizzare l\'attuale promemoria, ma anche riprodurre l\'audio è un lavoro prettamente del sistema. Se non si sente alcun suono, provare ad andare nelle impostazioni dell\'applicazione,
premere l\'opzione \"Canale audio utilizzato per il promemoria\" e cambia il canale. Se ancora non funziona, controllare le impostazioni dell\'audio, in particolare se il canale è stato mutato.</string> premere l\'opzione \"Canale audio utilizzato per il promemoria\" e cambia il canale. Se ancora non funziona, controllare le impostazioni dell\'audio, in particolare se il canale è stato mutato.</string>
<string name="faq_4_title">Does the app support time zones?</string> <string name="faq_4_title">L\'app supporta diversi fusi orari?</string>
<string name="faq_4_text">Yes, it does. By default all events are created in your current time zone. If you want to change an events\' time zone, <string name="faq_4_text">Si. Solitamente tutti gli eventi vengono create nel tuo fuso orario. Se vuoi cambiare il fuso orario di un specifico evento, devi abilitare la funzionalitá nelle impostazioni dell\'app, successivamente potrai cambiare il fuso nella schermata di dettaglio dell\'evento. La funzionalitá é disabilitata inizialmente siccome la maggior parte degli utenti non ne hanno bisogno.</string>
you will first have to enable the time zone picker at the app settings, then change it at the Event Details screen. It is disabled by default as most people won\'t need it.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->

View File

@@ -158,6 +158,7 @@
<string name="manage_event_types">נהל סוגי אירועים</string> <string name="manage_event_types">נהל סוגי אירועים</string>
<string name="start_day_at">שעת התחלה היום</string> <string name="start_day_at">שעת התחלה היום</string>
<string name="end_day_at">שעת סיום היום</string> <string name="end_day_at">שעת סיום היום</string>
<string name="allow_customizing_day_count">Allow customizing day count</string>
<string name="week_numbers">הצגת מספרי שבועות</string> <string name="week_numbers">הצגת מספרי שבועות</string>
<string name="vibrate">רטט בהתרעת תזכורת</string> <string name="vibrate">רטט בהתרעת תזכורת</string>
<string name="reminder_sound">צליל תזכורת</string> <string name="reminder_sound">צליל תזכורת</string>

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