74
CHANGELOG.md
|
@ -1,6 +1,80 @@
|
|||
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)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ android {
|
|||
applicationId "com.simplemobiletools.calendar.pro"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
versionCode 175
|
||||
versionName "6.9.2"
|
||||
versionCode 187
|
||||
versionName "6.11.2"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "calendar")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
@ -64,10 +64,12 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:5.27.5'
|
||||
implementation 'com.simplemobiletools:commons:5.31.23'
|
||||
implementation 'joda-time:joda-time:2.10.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'
|
||||
implementation 'androidx.room:room-runtime:2.2.5'
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.simplemobiletools.calendar.pro"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR"/>
|
||||
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
||||
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
|
@ -18,11 +17,11 @@
|
|||
|
||||
<uses-permission
|
||||
android:name="android.permission.USE_FINGERPRINT"
|
||||
tools:node="remove"/>
|
||||
tools:node="remove" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.faketouch"
|
||||
android:required="false"/>
|
||||
android:required="false" />
|
||||
|
||||
<application
|
||||
android:name=".App"
|
||||
|
@ -36,43 +35,43 @@
|
|||
<activity
|
||||
android:name=".activities.SplashActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/SplashTheme"/>
|
||||
android:theme="@style/SplashTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".activities.MainActivity"
|
||||
android:launchMode="singleTask">
|
||||
<meta-data
|
||||
android:name="android.app.default_searchable"
|
||||
android:resource="@xml/searchable"/>
|
||||
android:resource="@xml/searchable" />
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEARCH"/>
|
||||
<action android:name="android.intent.action.SEARCH" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:scheme="content"/>
|
||||
<data android:scheme="file"/>
|
||||
<data android:mimeType="text/x-vcalendar"/>
|
||||
<data android:mimeType="text/calendar"/>
|
||||
<data android:mimeType="application/ics"/>
|
||||
<data android:scheme="content" />
|
||||
<data android:scheme="file" />
|
||||
<data android:mimeType="text/x-vcalendar" />
|
||||
<data android:mimeType="text/calendar" />
|
||||
<data android:mimeType="application/ics" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:mimeType="time/epoch"/>
|
||||
<data android:host="com.android.calendar"/>
|
||||
<data android:scheme="content"/>
|
||||
<data android:mimeType="time/epoch" />
|
||||
<data android:host="com.android.calendar" />
|
||||
<data android:scheme="content" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<data android:mimeType="vnd.android.cursor.item/event"/>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="vnd.android.cursor.item/event" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
@ -81,7 +80,7 @@
|
|||
android:screenOrientation="portrait"
|
||||
android:theme="@style/MyWidgetConfigTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
@ -90,7 +89,7 @@
|
|||
android:screenOrientation="portrait"
|
||||
android:theme="@style/MyWidgetConfigTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
@ -99,29 +98,29 @@
|
|||
android:screenOrientation="portrait"
|
||||
android:theme="@style/MyWidgetConfigTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="com.simplemobiletools.commons.activities.AboutActivity"
|
||||
android:label="@string/about"
|
||||
android:parentActivityName=".activities.MainActivity"/>
|
||||
android:parentActivityName=".activities.MainActivity" />
|
||||
|
||||
<activity
|
||||
android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
|
||||
android:label="@string/customize_colors"
|
||||
android:parentActivityName=".activities.SettingsActivity"/>
|
||||
android:parentActivityName=".activities.SettingsActivity" />
|
||||
|
||||
<activity
|
||||
android:name="com.simplemobiletools.commons.activities.LicenseActivity"
|
||||
android:label="@string/third_party_licences"
|
||||
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
|
||||
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity" />
|
||||
|
||||
<activity
|
||||
android:name="com.simplemobiletools.commons.activities.FAQActivity"
|
||||
android:label="@string/frequently_asked_questions"
|
||||
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
|
||||
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity" />
|
||||
|
||||
<activity
|
||||
android:name=".activities.EventActivity"
|
||||
|
@ -129,19 +128,19 @@
|
|||
android:parentActivityName=".activities.MainActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.EDIT"/>
|
||||
<action android:name="android.intent.action.INSERT"/>
|
||||
<action android:name="android.intent.action.EDIT" />
|
||||
<action android:name="android.intent.action.INSERT" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<data android:mimeType="vnd.android.cursor.item/event"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="vnd.android.cursor.item/event" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.EDIT"/>
|
||||
<action android:name="android.intent.action.INSERT"/>
|
||||
<action android:name="android.intent.action.EDIT" />
|
||||
<action android:name="android.intent.action.INSERT" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<data android:mimeType="vnd.android.cursor.dir/event"/>
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="vnd.android.cursor.dir/event" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
@ -160,28 +159,28 @@
|
|||
<activity
|
||||
android:name=".activities.SettingsActivity"
|
||||
android:label="@string/settings"
|
||||
android:parentActivityName=".activities.MainActivity"/>
|
||||
android:parentActivityName=".activities.MainActivity" />
|
||||
|
||||
<activity
|
||||
android:name=".activities.ManageEventTypesActivity"
|
||||
android:label="@string/event_types"
|
||||
android:parentActivityName=".activities.SettingsActivity"/>
|
||||
android:parentActivityName=".activities.SettingsActivity" />
|
||||
|
||||
<activity
|
||||
android:name=".activities.SnoozeReminderActivity"
|
||||
android:theme="@style/Theme.Transparent"/>
|
||||
android:theme="@style/Theme.Transparent" />
|
||||
|
||||
<receiver
|
||||
android:name=".helpers.MyWidgetMonthlyProvider"
|
||||
android:icon="@drawable/img_widget_monthly_preview"
|
||||
android:label="@string/widget_monthly">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/widget_monthly_info"/>
|
||||
android:resource="@xml/widget_monthly_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
|
@ -189,12 +188,12 @@
|
|||
android:icon="@drawable/img_widget_list_preview"
|
||||
android:label="@string/widget_list">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/widget_list_info"/>
|
||||
android:resource="@xml/widget_list_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
|
@ -202,38 +201,38 @@
|
|||
android:icon="@drawable/img_widget_date_preview"
|
||||
android:label="@string/widget_todays_date">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/widget_date_info"/>
|
||||
android:resource="@xml/widget_date_info" />
|
||||
</receiver>
|
||||
|
||||
<service
|
||||
android:name=".services.WidgetService"
|
||||
android:permission="android.permission.BIND_REMOTEVIEWS"/>
|
||||
android:permission="android.permission.BIND_REMOTEVIEWS" />
|
||||
|
||||
<service
|
||||
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
|
||||
android:name=".jobs.CalDAVUpdateListener"
|
||||
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">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
|
||||
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
|
||||
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
|
@ -244,7 +243,7 @@
|
|||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/provider_paths"/>
|
||||
android:resource="@xml/provider_paths" />
|
||||
</provider>
|
||||
|
||||
<activity-alias
|
||||
|
@ -255,8 +254,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -268,8 +267,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -281,8 +280,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -294,8 +293,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -307,8 +306,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -320,8 +319,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -333,8 +332,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -346,8 +345,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -359,8 +358,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -372,8 +371,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -385,8 +384,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -398,8 +397,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -411,8 +410,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -424,8 +423,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -436,8 +435,8 @@
|
|||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:targetActivity=".activities.SplashActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -449,8 +448,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -462,8 +461,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -475,8 +474,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
|
@ -488,8 +487,8 @@
|
|||
android:targetActivity=".activities.SplashActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
</application>
|
||||
|
|
|
@ -156,7 +156,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Puthandu
|
||||
SUMMARY:Tamil Puthandu/Ugadi/Vishu
|
||||
UID:2002-04-14-1
|
||||
DTSTART;VALUE=DATE:20160414
|
||||
DTEND;VALUE=DATE:20160415
|
||||
|
@ -197,6 +197,14 @@ RRULE:FREQ=YEARLY;INTERVAL=1
|
|||
EXDATE:20180420}
|
||||
END: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
|
||||
UID:2002-12-06-1
|
||||
DTSTART;VALUE=DATE:20160507
|
||||
|
|
|
@ -1,363 +1,363 @@
|
|||
BEGIN:VCALENDAR
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:8ea296fc-d77c-4daa-bb35-7ef0f31bbd35
|
||||
DTSTART;VALUE=DATE:20170615
|
||||
DTEND;VALUE=DATE:20170616
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:efec0135-5fb2-4fc3-b7df-9ee7253150b6
|
||||
DTSTART;VALUE=DATE:20180213
|
||||
DTEND;VALUE=DATE:20180214
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:5ac77215-3c32-4ea6-94d8-c17e39d123cb
|
||||
DTSTART;VALUE=DATE:20180330
|
||||
DTEND;VALUE=DATE:20180331
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:4ef32d8f-eb43-4225-a035-4cc727056a5e
|
||||
DTSTART;VALUE=DATE:20180401
|
||||
DTEND;VALUE=DATE:20180402
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:b6eb9c00-5d32-46ad-af25-1e4ceb7e24d4
|
||||
DTSTART;VALUE=DATE:20180531
|
||||
DTEND;VALUE=DATE:20180601
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:ebd07183-101a-4e8a-b630-084010395c75
|
||||
DTSTART;VALUE=DATE:20190305
|
||||
DTEND;VALUE=DATE:20190306
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:9319a404-2caa-4860-ab8e-7250c4b26c70
|
||||
DTSTART;VALUE=DATE:20190419
|
||||
DTEND;VALUE=DATE:20190420
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:c8abc003-8656-4c03-b463-281757c9d6c7
|
||||
DTSTART;VALUE=DATE:20190421
|
||||
DTEND;VALUE=DATE:20190422
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:5adec9d3-8289-4590-a7d7-15d3beb199e7
|
||||
DTSTART;VALUE=DATE:20190620
|
||||
DTEND;VALUE=DATE:20190621
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:9134149e-787b-4841-802e-6a1b68914bff
|
||||
DTSTART;VALUE=DATE:20200225
|
||||
DTEND;VALUE=DATE:20200226
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:07d98915-7fa6-4591-9257-311a35109bf9
|
||||
DTSTART;VALUE=DATE:20200410
|
||||
DTEND;VALUE=DATE:20200411
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:4bf48b56-7499-4d00-9ee7-6047a2ca8e36
|
||||
DTSTART;VALUE=DATE:20200412
|
||||
DTEND;VALUE=DATE:20200413
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:f8e5c7e1-8355-4681-ade1-d403e0b6ca23
|
||||
DTSTART;VALUE=DATE:20200611
|
||||
DTEND;VALUE=DATE:20200612
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:c1bcf217-b07e-471b-bf98-a8eaa253b4fb
|
||||
DTSTART;VALUE=DATE:20210216
|
||||
DTEND;VALUE=DATE:20210217
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:baa729bb-7145-4cbc-bbd7-00e752ee5b5f
|
||||
DTSTART;VALUE=DATE:20210402
|
||||
DTEND;VALUE=DATE:20210403
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:0ef18ed2-0318-4619-a08f-9bace518ea6b
|
||||
DTSTART;VALUE=DATE:20210404
|
||||
DTEND;VALUE=DATE:20210405
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:b71bfbee-dba7-4c79-bf07-a2fc4643885e
|
||||
DTSTART;VALUE=DATE:20210603
|
||||
DTEND;VALUE=DATE:20210604
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:34393672-a43f-4d16-85ec-e2783be1a05c
|
||||
DTSTART;VALUE=DATE:20220301
|
||||
DTEND;VALUE=DATE:20220302
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:aea2a84a-da17-4f91-b160-15a89afa52cc
|
||||
DTSTART;VALUE=DATE:20220415
|
||||
DTEND;VALUE=DATE:20220416
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:e435c5bd-f5a2-487a-ac4e-b56745b89d14
|
||||
DTSTART;VALUE=DATE:20220417
|
||||
DTEND;VALUE=DATE:20220418
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:023a861a-d37e-45f9-b595-6ee750333b3e
|
||||
DTSTART;VALUE=DATE:20220616
|
||||
DTEND;VALUE=DATE:20220617
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:6ae751a9-75b9-4c40-a6a2-d7dcff275d90
|
||||
DTSTART;VALUE=DATE:20230221
|
||||
DTEND;VALUE=DATE:20230222
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:a97015e0-4479-48fa-9720-d2d64b5121fa
|
||||
DTSTART;VALUE=DATE:20230407
|
||||
DTEND;VALUE=DATE:20230408
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:2c78c1b0-9167-4aa3-b9ab-6a904c3968ee
|
||||
DTSTART;VALUE=DATE:20230409
|
||||
DTEND;VALUE=DATE:20230410
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:fd053ba5-e0fa-431a-ac48-86bea8657167
|
||||
DTSTART;VALUE=DATE:20230608
|
||||
DTEND;VALUE=DATE:20230609
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:4d992236-76a1-4764-b551-25059527350c
|
||||
DTSTART;VALUE=DATE:20240213
|
||||
DTEND;VALUE=DATE:20240214
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:cbd961b8-ce49-4e59-9d1c-998e1c6fd3ee
|
||||
DTSTART;VALUE=DATE:20240329
|
||||
DTEND;VALUE=DATE:20240330
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:1824da6f-f0a0-4faa-a028-8ac59914439b
|
||||
DTSTART;VALUE=DATE:20240530
|
||||
DTEND;VALUE=DATE:20240531
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:0839a8fe-67ef-49b3-8ca9-985a31792d4d
|
||||
DTSTART;VALUE=DATE:20250304
|
||||
DTEND;VALUE=DATE:20250305
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:2fb6f244-6722-4d55-b7f7-eb03d8bac186
|
||||
DTSTART;VALUE=DATE:20250418
|
||||
DTEND;VALUE=DATE:20250419
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:1c93fa44-78ad-48b6-8c9a-f78b14997c8e
|
||||
DTSTART;VALUE=DATE:20250420
|
||||
DTEND;VALUE=DATE:20250421
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:58b16e20-1093-40ab-87d6-063ef28a9cbf
|
||||
DTSTART;VALUE=DATE:20250619
|
||||
DTEND;VALUE=DATE:20250620
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:138c5a65-4df9-4d17-9410-5b53e9ff8b0a
|
||||
DTSTART;VALUE=DATE:20260217
|
||||
DTEND;VALUE=DATE:20260218
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:4e96f4cf-185a-411d-bee6-21eb5eb56b06
|
||||
DTSTART;VALUE=DATE:20260403
|
||||
DTEND;VALUE=DATE:20260404
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:2ddbd9f0-02aa-4b55-a30d-8b1a14ccedb3
|
||||
DTSTART;VALUE=DATE:20260405
|
||||
DTEND;VALUE=DATE:20260406
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:04e53c14-c9a6-4ae1-9169-47c81231e4f5
|
||||
DTSTART;VALUE=DATE:20260604
|
||||
DTEND;VALUE=DATE:20260605
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:2617081c-c96d-4cf9-88fd-72688fb4910b
|
||||
DTSTART;VALUE=DATE:20270209
|
||||
DTEND;VALUE=DATE:20270210
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:aba7a9f2-a8bc-4b31-b6ec-86b0a92f11c0
|
||||
DTSTART;VALUE=DATE:20270326
|
||||
DTEND;VALUE=DATE:20270327
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:7f9c3fe9-06f5-45b0-ba55-2c8da8055b38
|
||||
DTSTART;VALUE=DATE:20270527
|
||||
DTEND;VALUE=DATE:20270528
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:918f486a-f745-4bb7-ab1b-3e4ae771845f
|
||||
DTSTART;VALUE=DATE:20280229
|
||||
DTEND;VALUE=DATE:20280301
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:516e9453-13ba-46f0-bd0a-e0996cf85dd7
|
||||
DTSTART;VALUE=DATE:20280414
|
||||
DTEND;VALUE=DATE:20280415
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:bf203169-cc8c-4329-9559-c89dc96c6695
|
||||
DTSTART;VALUE=DATE:20280416
|
||||
DTEND;VALUE=DATE:20280417
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:329fd131-869e-4855-805a-94b58c66241e
|
||||
DTSTART;VALUE=DATE:20280615
|
||||
DTEND;VALUE=DATE:20280616
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:bd294fef-c437-4351-ad44-986917cc79dd
|
||||
DTSTART;VALUE=DATE:20290213
|
||||
DTEND;VALUE=DATE:20290214
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:06104d63-a31c-419a-95b4-a03d4bb40cb1
|
||||
DTSTART;VALUE=DATE:20290330
|
||||
DTEND;VALUE=DATE:20290331
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:ae8f5a91-1d01-49b7-b22b-4ca562a25a02
|
||||
DTSTART;VALUE=DATE:20290401
|
||||
DTEND;VALUE=DATE:20290402
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:f33509dc-e9fc-4fb0-9c93-e3671e498f12
|
||||
DTSTART;VALUE=DATE:20290531
|
||||
DTEND;VALUE=DATE:20290601
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Carnival
|
||||
SUMMARY:Carnaval
|
||||
UID:faa77196-c452-4f05-a146-01048d362c23
|
||||
DTSTART;VALUE=DATE:20300305
|
||||
DTEND;VALUE=DATE:20300306
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Good Friday
|
||||
SUMMARY:Sexta-Feira Santa
|
||||
UID:23bb3359-d3a8-4b1d-b45e-625c6aa9d7ab
|
||||
DTSTART;VALUE=DATE:20300419
|
||||
DTEND;VALUE=DATE:20300420
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Easter
|
||||
SUMMARY:Páscoa
|
||||
UID:c38cda82-92dc-49ce-b49f-a581213fef38
|
||||
DTSTART;VALUE=DATE:20300421
|
||||
DTEND;VALUE=DATE:20300422
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Corpus Christi
|
||||
SUMMARY:Corpo de Deus
|
||||
UID:a3a2a74a-7c19-4ffb-9f19-519743bffd1d
|
||||
DTSTART;VALUE=DATE:20300620
|
||||
DTEND;VALUE=DATE:20300621
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:New Year
|
||||
SUMMARY:Ano Novo
|
||||
UID:d0c7af02-7a6b-41e3-8421-cfd6895e1223
|
||||
DTSTART;VALUE=DATE:20010101
|
||||
DTEND;VALUE=DATE:20010102
|
||||
|
@ -365,7 +365,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Liberty Day
|
||||
SUMMARY:Dia da Liberdade
|
||||
UID:8b096e79-da0d-45f3-905d-80cdaddcb07c
|
||||
DTSTART;VALUE=DATE:20010425
|
||||
DTEND;VALUE=DATE:20010426
|
||||
|
@ -373,7 +373,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Labour Day
|
||||
SUMMARY:Dia do Trabalhador
|
||||
UID:26e3ea80-ba4b-4208-bd73-c07483cb87b5
|
||||
DTSTART;VALUE=DATE:20010501
|
||||
DTEND;VALUE=DATE:20010502
|
||||
|
@ -381,7 +381,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Day of Portugal
|
||||
SUMMARY:Dia de Portugal
|
||||
UID:0317f4ef-6bb6-49db-a8f7-36957676e05f
|
||||
DTSTART;VALUE=DATE:20010610
|
||||
DTEND;VALUE=DATE:20010611
|
||||
|
@ -389,7 +389,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Our Lady Assumption Day
|
||||
SUMMARY:Assunção de Nossa Senhora
|
||||
UID:66c355ac-f86b-4b62-9b88-bfab5da28dd9
|
||||
DTSTART;VALUE=DATE:20010815
|
||||
DTEND;VALUE=DATE:20010816
|
||||
|
@ -397,7 +397,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Republic Day
|
||||
SUMMARY:Implantação da República
|
||||
UID:0a1bf4e7-50f8-4d3f-b449-e0f792b7fc9c
|
||||
DTSTART;VALUE=DATE:20011005
|
||||
DTEND;VALUE=DATE:20011006
|
||||
|
@ -405,7 +405,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Day of All Saints
|
||||
SUMMARY:Dia de Todos os Santos
|
||||
UID:79b44222-18ac-47a6-9361-0f69c28c1038
|
||||
DTSTART;VALUE=DATE:20011101
|
||||
DTEND;VALUE=DATE:20011102
|
||||
|
@ -413,7 +413,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Independence Day
|
||||
SUMMARY:Restauração da Independência
|
||||
UID:e5ab7efe-c4ce-4bb1-a8a4-e63e46de2d74
|
||||
DTSTART;VALUE=DATE:20011201
|
||||
DTEND;VALUE=DATE:20011202
|
||||
|
@ -421,7 +421,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Imaculate Conception Day
|
||||
SUMMARY:Dia da Imaculada Conceição
|
||||
UID:44cf05dd-d95d-4759-be8e-d177e943189f
|
||||
DTSTART;VALUE=DATE:20011208
|
||||
DTEND;VALUE=DATE:20011209
|
||||
|
@ -429,7 +429,7 @@ STATUS:CONFIRMED
|
|||
RRULE:FREQ=YEARLY;INTERVAL=1
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
SUMMARY:Christmas
|
||||
SUMMARY:Natal
|
||||
UID:c6312a02-e749-42e4-855b-51af541b5fcd
|
||||
DTSTART;VALUE=DATE:20011225
|
||||
DTEND;VALUE=DATE:20011226
|
||||
|
|
|
@ -32,6 +32,7 @@ import com.simplemobiletools.calendar.pro.extensions.*
|
|||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.models.*
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -78,6 +79,7 @@ class EventActivity : SimpleActivity() {
|
|||
private var mEventTypeId = REGULAR_EVENT_TYPE_ID
|
||||
private var mDialogTheme = 0
|
||||
private var mEventOccurrenceTS = 0L
|
||||
private var mLastSavePromptTS = 0L
|
||||
private var mEventCalendarId = STORED_LOCALLY_ONLY
|
||||
private var mWasActivityInitialized = false
|
||||
private var mWasContactsPermissionChecked = false
|
||||
|
@ -87,6 +89,8 @@ class EventActivity : SimpleActivity() {
|
|||
private var mSelectedContacts = ArrayList<Attendee>()
|
||||
private var mStoredEventTypes = ArrayList<EventType>()
|
||||
private var mOriginalTimeZone = DateTimeZone.getDefault().id
|
||||
private var mOriginalStartTS = 0L
|
||||
private var mOriginalEndTS = 0L
|
||||
|
||||
private lateinit var mEventStartDateTime: 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.duplicate).isVisible = mEvent.id != null
|
||||
}
|
||||
|
||||
updateMenuItemColors(menu)
|
||||
return true
|
||||
}
|
||||
|
@ -245,6 +250,74 @@ class EventActivity : SimpleActivity() {
|
|||
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) {
|
||||
super.onSaveInstanceState(outState)
|
||||
if (!mWasActivityInitialized) {
|
||||
|
@ -301,8 +374,8 @@ class EventActivity : SimpleActivity() {
|
|||
mRepeatRule = getInt(REPEAT_RULE)
|
||||
mRepeatLimit = getLong(REPEAT_LIMIT)
|
||||
|
||||
mAttendees = Gson().fromJson<ArrayList<Attendee>>(getString(ATTENDEES), object : TypeToken<List<Attendee>>() {}.type)
|
||||
?: ArrayList()
|
||||
val token = object : TypeToken<List<Attendee>>() {}.type
|
||||
mAttendees = Gson().fromJson<ArrayList<Attendee>>(getString(ATTENDEES), token) ?: ArrayList()
|
||||
|
||||
mEventTypeId = getLong(EVENT_TYPE_ID)
|
||||
mEventCalendarId = getInt(EVENT_CALENDAR_ID)
|
||||
|
@ -337,6 +410,9 @@ class EventActivity : SimpleActivity() {
|
|||
private fun setupEditEvent() {
|
||||
val realStart = if (mEventOccurrenceTS == 0L) mEvent.startTS else mEventOccurrenceTS
|
||||
val duration = mEvent.endTS - mEvent.startTS
|
||||
mOriginalStartTS = realStart
|
||||
mOriginalEndTS = realStart + duration
|
||||
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
||||
updateActionBarTitle(getString(R.string.edit_event))
|
||||
mOriginalTimeZone = mEvent.timeZone
|
||||
|
@ -369,11 +445,35 @@ class EventActivity : SimpleActivity() {
|
|||
mRepeatRule = mEvent.repeatRule
|
||||
mEventTypeId = mEvent.eventType
|
||||
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)
|
||||
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() {
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
|
||||
event_title.requestFocus()
|
||||
|
@ -421,16 +521,14 @@ class EventActivity : SimpleActivity() {
|
|||
}
|
||||
mEventEndDateTime = mEventStartDateTime.plusMinutes(addMinutes)
|
||||
}
|
||||
|
||||
addDefValuesToNewEvent()
|
||||
checkAttendees()
|
||||
}
|
||||
|
||||
private fun checkAttendees() {
|
||||
ensureBackgroundThread {
|
||||
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 getCalendarWithId(calendars: List<CalDAVCalendar>, calendarId: Int): CalDAVCalendar? =
|
||||
calendars.firstOrNull { it.id == calendarId }
|
||||
private fun getCalendarWithId(calendars: List<CalDAVCalendar>, calendarId: Int) = calendars.firstOrNull { it.id == calendarId }
|
||||
|
||||
private fun updateCurrentCalendarInfo(currentCalendar: CalDAVCalendar?) {
|
||||
event_type_image.beVisibleIf(currentCalendar == null)
|
||||
|
@ -918,16 +1015,13 @@ class EventActivity : SimpleActivity() {
|
|||
return
|
||||
}
|
||||
|
||||
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
|
||||
var newStartTS: Long
|
||||
var newEndTS: Long
|
||||
getStartEndTimes().apply {
|
||||
newStartTS = first
|
||||
newEndTS = second
|
||||
}
|
||||
|
||||
val newStartTS = mEventStartDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset
|
||||
val newEndTS = mEventEndDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds() - offset
|
||||
|
||||
if (newStartTS > newEndTS) {
|
||||
toast(R.string.end_before_start)
|
||||
return
|
||||
|
@ -935,7 +1029,11 @@ class EventActivity : SimpleActivity() {
|
|||
|
||||
val wasRepeatable = mEvent.repeatInterval > 0
|
||||
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) {
|
||||
mEventTypeId
|
||||
|
@ -959,13 +1057,7 @@ class EventActivity : SimpleActivity() {
|
|||
"$CALDAV-$mEventCalendarId"
|
||||
}
|
||||
|
||||
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>
|
||||
|
||||
val reminders = getReminders()
|
||||
val reminder1 = reminders.getOrNull(0) ?: 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)
|
||||
|
@ -1011,7 +1103,6 @@ class EventActivity : SimpleActivity() {
|
|||
eventsHelper.deleteEvent(mEvent.id!!, true)
|
||||
mEvent.id = null
|
||||
}
|
||||
|
||||
storeEvent(wasRepeatable)
|
||||
}
|
||||
|
||||
|
@ -1264,22 +1355,24 @@ class EventActivity : SimpleActivity() {
|
|||
{ it.status })
|
||||
mAttendees.reverse()
|
||||
|
||||
mAttendees.forEach {
|
||||
val attendee = it
|
||||
val deviceContact = mAvailableContacts.firstOrNull { it.email.isNotEmpty() && it.email == attendee.email && it.photoUri.isNotEmpty() }
|
||||
if (deviceContact != null) {
|
||||
attendee.photoUri = deviceContact.photoUri
|
||||
runOnUiThread {
|
||||
mAttendees.forEach {
|
||||
val attendee = it
|
||||
val deviceContact = mAvailableContacts.firstOrNull { it.email.isNotEmpty() && it.email == attendee.email && it.photoUri.isNotEmpty() }
|
||||
if (deviceContact != null) {
|
||||
attendee.photoUri = deviceContact.photoUri
|
||||
}
|
||||
addAttendee(attendee)
|
||||
}
|
||||
addAttendee(attendee)
|
||||
}
|
||||
addAttendee()
|
||||
addAttendee()
|
||||
|
||||
val imageHeight = event_repetition_image.height
|
||||
if (imageHeight > 0) {
|
||||
event_attendees_image.layoutParams.height = imageHeight
|
||||
} else {
|
||||
event_repetition_image.onGlobalLayout {
|
||||
event_attendees_image.layoutParams.height = event_repetition_image.height
|
||||
val imageHeight = event_repetition_image.height
|
||||
if (imageHeight > 0) {
|
||||
event_attendees_image.layoutParams.height = imageHeight
|
||||
} else {
|
||||
event_repetition_image.onGlobalLayout {
|
||||
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)
|
||||
}
|
||||
|
||||
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 {
|
||||
attendee.updateImage(applicationContext, this, placeholder)
|
||||
beVisible()
|
||||
|
|
|
@ -5,7 +5,6 @@ import android.app.Activity
|
|||
import android.app.SearchManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.pm.ShortcutInfo
|
||||
import android.content.pm.ShortcutManager
|
||||
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.RadioItem
|
||||
import com.simplemobiletools.commons.models.Release
|
||||
import com.simplemobiletools.commons.models.SimpleContact
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.DateTimeZone
|
||||
|
@ -83,15 +83,12 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
|
||||
checkWhatsNewDialog()
|
||||
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW)
|
||||
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW && config.storedView != WEEKLY_VIEW)
|
||||
calendar_fab.setOnClickListener {
|
||||
launchNewEventIntent(currentFragments.last().getNewEventDayCode())
|
||||
}
|
||||
|
||||
storeStateVariables()
|
||||
if (resources.getBoolean(R.bool.portrait_only)) {
|
||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
}
|
||||
|
||||
if (!hasPermission(PERMISSION_WRITE_CALENDAR) || !hasPermission(PERMISSION_READ_CALENDAR)) {
|
||||
config.caldavSync = false
|
||||
|
@ -150,7 +147,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
search_holder.background = ColorDrawable(config.backgroundColor)
|
||||
checkSwipeRefreshAvailability()
|
||||
checkShortcuts()
|
||||
invalidateOptionsMenu()
|
||||
|
||||
if (!mIsSearchOpen) {
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
@ -158,11 +158,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
storeStateVariables()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
closeSearch()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
if (!isChangingConfigurations) {
|
||||
|
@ -173,10 +168,11 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_main, menu)
|
||||
shouldGoToTodayBeVisible = currentFragments.last().shouldGoToTodayBeVisible()
|
||||
menu.apply {
|
||||
goToTodayButton = findItem(R.id.go_to_today)
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -198,6 +194,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
R.id.change_view -> showViewDialog()
|
||||
R.id.go_to_today -> goToToday()
|
||||
R.id.go_to_date -> showGoToDateDialog()
|
||||
R.id.print -> printView()
|
||||
R.id.filter -> showFilterDialog()
|
||||
R.id.refresh_caldav_calendars -> refreshCalDAVCalendars(true)
|
||||
R.id.add_holidays -> addHolidays()
|
||||
|
@ -283,7 +280,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
|
||||
mIsSearchOpen = false
|
||||
search_holder.beGone()
|
||||
calendar_fab.beVisibleIf(currentFragments.last() !is YearFragmentsHolder)
|
||||
calendar_fab.beVisibleIf(currentFragments.last() !is YearFragmentsHolder && currentFragments.last() !is WeekFragmentsHolder)
|
||||
invalidateOptionsMenu()
|
||||
return true
|
||||
}
|
||||
|
@ -414,10 +411,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
RadioItem(EVENTS_LIST_VIEW, getString(R.string.simple_event_list)))
|
||||
|
||||
RadioGroupDialog(this, items, config.storedView) {
|
||||
calendar_fab.beVisibleIf(it as Int != YEARLY_VIEW)
|
||||
resetActionBarTitle()
|
||||
closeSearch()
|
||||
updateView(it)
|
||||
updateView(it as Int)
|
||||
shouldGoToTodayBeVisible = false
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
@ -431,6 +427,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
currentFragments.last().showGoToDateDialog()
|
||||
}
|
||||
|
||||
private fun printView() {
|
||||
currentFragments.last().printView()
|
||||
}
|
||||
|
||||
private fun resetActionBarTitle() {
|
||||
updateActionBarTitle(getString(R.string.app_launcher_name))
|
||||
updateActionBarSubtitle("")
|
||||
|
@ -501,15 +501,20 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
if (it) {
|
||||
SetRemindersDialog(this) {
|
||||
val reminders = it
|
||||
val privateCursor = getMyContactsCursor().loadInBackground()
|
||||
|
||||
ensureBackgroundThread {
|
||||
addContactEvents(true, reminders) {
|
||||
when {
|
||||
it > 0 -> {
|
||||
toast(R.string.birthdays_added)
|
||||
updateViewPager()
|
||||
val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor)
|
||||
addPrivateEvents(true, privateContacts, reminders) { eventsFound, eventsAdded ->
|
||||
addContactEvents(true, reminders, eventsFound, eventsAdded) {
|
||||
when {
|
||||
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) {
|
||||
SetRemindersDialog(this) {
|
||||
val reminders = it
|
||||
val privateCursor = getMyContactsCursor().loadInBackground()
|
||||
|
||||
ensureBackgroundThread {
|
||||
addContactEvents(false, reminders) {
|
||||
when {
|
||||
it > 0 -> {
|
||||
toast(R.string.anniversaries_added)
|
||||
updateViewPager()
|
||||
val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor)
|
||||
addPrivateEvents(false, privateContacts, reminders) { eventsFound, eventsAdded ->
|
||||
addContactEvents(false, reminders, eventsFound, eventsAdded) {
|
||||
when {
|
||||
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)
|
||||
}
|
||||
|
||||
private fun addContactEvents(birthdays: Boolean, reminders: ArrayList<Int>, callback: (Int) -> Unit) {
|
||||
var eventsAdded = 0
|
||||
var eventsFound = 0
|
||||
private fun addContactEvents(birthdays: Boolean, reminders: ArrayList<Int>, initEventsFound: Int, initEventsAdded: Int, callback: (Int) -> Unit) {
|
||||
var eventsFound = initEventsFound
|
||||
var eventsAdded = initEventsAdded
|
||||
val uri = Data.CONTENT_URI
|
||||
val projection = arrayOf(Contacts.DISPLAY_NAME,
|
||||
CommonDataKinds.Event.CONTACT_ID,
|
||||
|
@ -574,6 +584,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
}
|
||||
|
||||
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 ->
|
||||
val contactId = cursor.getIntValue(CommonDataKinds.Event.CONTACT_ID).toString()
|
||||
|
@ -589,7 +600,6 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
}
|
||||
|
||||
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 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,
|
||||
|
@ -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 {
|
||||
val birthdays = getString(R.string.birthdays)
|
||||
var eventTypeId = eventsHelper.getEventTypeIdWithTitle(birthdays)
|
||||
|
@ -647,7 +726,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
}
|
||||
|
||||
private fun updateView(view: Int) {
|
||||
calendar_fab.beVisibleIf(view != YEARLY_VIEW)
|
||||
calendar_fab.beVisibleIf(view != YEARLY_VIEW && view != WEEKLY_VIEW)
|
||||
config.storedView = view
|
||||
checkSwipeRefreshAvailability()
|
||||
updateViewPager()
|
||||
|
@ -709,7 +788,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||
}
|
||||
|
||||
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()) {
|
||||
thisweek = thisweek.plusDays(7)
|
||||
}
|
||||
|
|
|
@ -9,8 +9,8 @@ import android.widget.Filter
|
|||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.models.Attendee
|
||||
import com.simplemobiletools.commons.extensions.getContactLetterIcon
|
||||
import com.simplemobiletools.commons.extensions.normalizeString
|
||||
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||
import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.*
|
||||
|
||||
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 {
|
||||
contact.name.isNotEmpty() -> contact.name
|
||||
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 {
|
||||
tag = contact.name.isNotEmpty()
|
||||
item_autocomplete_name?.text = contact.name
|
||||
|
|
|
@ -30,6 +30,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
|||
private val allDayString = resources.getString(R.string.all_day)
|
||||
private val replaceDescriptionWithLocation = activity.config.replaceDescription
|
||||
private val dimPastEvents = activity.config.dimPastEvents
|
||||
private var isPrintVersion = false
|
||||
|
||||
init {
|
||||
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) {
|
||||
view.apply {
|
||||
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
|
||||
if (dimPastEvents && event.isPastEvent) {
|
||||
if (dimPastEvents && event.isPastEvent && !isPrintVersion) {
|
||||
newTextColor = newTextColor.adjustAlpha(LOW_ALPHA)
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
|
|||
private val now = getNowSeconds()
|
||||
private var use24HourFormat = activity.config.use24HourFormat
|
||||
private var currentItemsHash = listItems.hashCode()
|
||||
private var isPrintVersion = false
|
||||
|
||||
init {
|
||||
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) {
|
||||
view.apply {
|
||||
event_item_frame.isSelected = selectedKeys.contains(listEvent.hashCode())
|
||||
|
@ -161,15 +172,15 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
|
|||
var startTextColor = textColor
|
||||
var endTextColor = textColor
|
||||
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
|
||||
}
|
||||
|
||||
if (dimPastEvents && listEvent.isPastEvent) {
|
||||
if (dimPastEvents && listEvent.isPastEvent && !isPrintVersion) {
|
||||
startTextColor = startTextColor.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
|
||||
}
|
||||
|
||||
|
@ -184,8 +195,8 @@ class EventListAdapter(activity: SimpleActivity, var listItems: ArrayList<ListIt
|
|||
view.event_section_title.apply {
|
||||
text = listSection.title
|
||||
setCompoundDrawablesWithIntrinsicBounds(null, if (position == 0) null else topDivider, null, null)
|
||||
var color = if (listSection.isToday) primaryColor else textColor
|
||||
if (dimPastEvents && listSection.isPastSection) {
|
||||
var color = if (listSection.isToday && !isPrintVersion) primaryColor else textColor
|
||||
if (dimPastEvents && listSection.isPastSection && !isPrintVersion) {
|
||||
color = color.adjustAlpha(LOW_ALPHA)
|
||||
}
|
||||
setTextColor(color)
|
||||
|
|
|
@ -48,7 +48,10 @@ class EventListWidgetAdapter(val context: Context) : RemoteViewsService.RemoteVi
|
|||
setupListEvent(remoteView, event)
|
||||
} else {
|
||||
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
|
||||
|
|
|
@ -33,4 +33,8 @@ class MyDayPagerAdapter(fm: FragmentManager, private val mCodes: List<String>, p
|
|||
mFragments[pos + i]?.updateCalendar()
|
||||
}
|
||||
}
|
||||
|
||||
fun printCurrentView(pos: Int) {
|
||||
mFragments[pos].printCurrentView()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,4 +32,8 @@ class MyMonthPagerAdapter(fm: FragmentManager, private val mCodes: List<String>,
|
|||
mFragments[pos + i]?.updateCalendar()
|
||||
}
|
||||
}
|
||||
|
||||
fun printCurrentView(pos: Int) {
|
||||
mFragments[pos].printCurrentView()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import androidx.fragment.app.FragmentStatePagerAdapter
|
|||
import com.simplemobiletools.calendar.pro.fragments.WeekFragment
|
||||
import com.simplemobiletools.calendar.pro.helpers.WEEK_START_TIMESTAMP
|
||||
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) {
|
||||
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()
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,4 +30,8 @@ class MyYearPagerAdapter(fm: FragmentManager, val mYears: List<Int>) : FragmentS
|
|||
mFragments[pos + i]?.updateCalendar()
|
||||
}
|
||||
}
|
||||
|
||||
fun printCurrentView(pos: Int) {
|
||||
mFragments[pos].printCurrentView()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,11 +19,11 @@ class FilterEventTypesDialog(val activity: SimpleActivity, val callback: () -> U
|
|||
view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, it, displayEventTypes)
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this, R.string.filter_events_by_type)
|
||||
}
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal
|
|||
IMPORT_NOTHING_NEW -> R.string.no_new_items
|
||||
IMPORT_OK -> R.string.importing_successful
|
||||
IMPORT_PARTIAL -> R.string.importing_some_entries_failed
|
||||
else -> R.string.importing_failed
|
||||
else -> R.string.no_items_found
|
||||
})
|
||||
callback(result != IMPORT_FAIL)
|
||||
}
|
||||
|
|
|
@ -8,7 +8,9 @@ import android.content.ComponentName
|
|||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Resources
|
||||
import android.graphics.Bitmap
|
||||
import android.media.AudioAttributes
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
|
@ -20,6 +22,7 @@ import android.widget.LinearLayout
|
|||
import android.widget.TextView
|
||||
import androidx.core.app.AlarmManagerCompat
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.print.PrintHelper
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.EventActivity
|
||||
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.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.DateTimeZone
|
||||
import org.joda.time.LocalDate
|
||||
import java.util.*
|
||||
|
||||
|
@ -339,20 +340,23 @@ fun Context.launchNewEventIntent(dayCode: String = Formatter.getTodayCode()) {
|
|||
}
|
||||
|
||||
fun Context.getNewEventTimestampFromCode(dayCode: String): Long {
|
||||
val calendar = Calendar.getInstance()
|
||||
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 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 minutes = defaultStartTime % 60
|
||||
dateTime = Formatter.getLocalDateTimeFromCode(dayCode).withHourOfDay(hours).withMinuteOfHour(minutes)
|
||||
newDateTime = dateTime
|
||||
}
|
||||
|
||||
// make sure the date doesn't change
|
||||
return newDateTime.withDate(dateTime.year, dateTime.monthOfYear, dateTime.dayOfMonth).seconds()
|
||||
// make sure the date doesn't change
|
||||
newDateTime.withDate(dateTime.year, dateTime.monthOfYear, dateTime.dayOfMonth).seconds()
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.getSyncedCalDAVCalendars() = calDAVHelper.getCalDAVCalendars(config.caldavSyncedCalendarIds, false)
|
||||
|
@ -542,3 +546,10 @@ fun Context.getWeeklyViewItemHeight(): Float {
|
|||
val multiplier = config.weeklyViewItemHeightMultiplier
|
||||
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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -2,6 +2,7 @@ package com.simplemobiletools.calendar.pro.fragments
|
|||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
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.extensions.config
|
||||
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.EVENT_ID
|
||||
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.models.Event
|
||||
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.top_navigation.view.*
|
||||
import java.util.*
|
||||
|
@ -101,7 +106,7 @@ class DayFragment : Fragment() {
|
|||
lastHash = newHash
|
||||
|
||||
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
|
||||
})))
|
||||
|
||||
|
@ -128,4 +133,24 @@ class DayFragment : Fragment() {
|
|||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,4 +138,8 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
|||
}
|
||||
|
||||
override fun getNewEventDayCode() = currentDayCode
|
||||
|
||||
override fun printView() {
|
||||
(viewPager?.adapter as? MyDayPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,10 +3,12 @@ package com.simplemobiletools.calendar.pro.fragments
|
|||
import android.content.Intent
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.EventActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
|
@ -41,6 +43,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
|||
private var minFetchedTS = 0L
|
||||
private var maxFetchedTS = 0L
|
||||
private var wereInitialEventsAdded = false
|
||||
private var hasBeenScrolled = false
|
||||
private var bottomItemAtRefresh: ListItem? = null
|
||||
|
||||
private var use24HourFormat = false
|
||||
|
@ -133,6 +136,16 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
|||
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 {
|
||||
(currAdapter as EventListAdapter).updateListItems(listItems)
|
||||
if (updateStatus == UPDATE_TOP) {
|
||||
|
@ -194,6 +207,10 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
|||
val firstNonPastSectionIndex = listItems.indexOfFirst { it is ListSection && !it.isPastSection }
|
||||
if (firstNonPastSectionIndex != -1) {
|
||||
(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()
|
||||
}
|
||||
|
||||
override fun shouldGoToTodayBeVisible() = false
|
||||
override fun shouldGoToTodayBeVisible() = hasBeenScrolled
|
||||
|
||||
override fun updateActionBarTitle() {
|
||||
(activity as? MainActivity)?.updateActionBarTitle(getString(R.string.app_launcher_name))
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ import androidx.fragment.app.Fragment
|
|||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
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.DAY_CODE
|
||||
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.models.DayMonthly
|
||||
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.top_navigation.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
@ -142,4 +146,20 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
|||
(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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -115,11 +115,11 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
|||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null)
|
||||
|
||||
AlertDialog.Builder(context!!)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> datePicked(dateTime, datePicker) }
|
||||
.create().apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
}
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> datePicked(dateTime, datePicker) }
|
||||
.create().apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
}
|
||||
}
|
||||
|
||||
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 printView() {
|
||||
(viewPager?.adapter as? MyMonthPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,4 +14,6 @@ abstract class MyFragmentHolder : Fragment() {
|
|||
abstract fun updateActionBarTitle()
|
||||
|
||||
abstract fun getNewEventDayCode(): String
|
||||
|
||||
abstract fun printView()
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Intent
|
|||
import android.content.res.Resources
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.util.Range
|
||||
import android.view.*
|
||||
import android.widget.ImageView
|
||||
|
@ -25,6 +26,7 @@ import com.simplemobiletools.calendar.pro.views.MyScrollView
|
|||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.DAY_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.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
@ -56,11 +58,14 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
private var wasExtraHeightAdded = false
|
||||
private var dimPastEvents = true
|
||||
private var wasScaled = false
|
||||
private var isPrintVersion = false
|
||||
private var selectedGrid: View? = null
|
||||
private var currentTimeView: ImageView? = null
|
||||
private var fadeOutHandler = Handler()
|
||||
private var allDayHolders = ArrayList<RelativeLayout>()
|
||||
private var allDayRows = ArrayList<HashSet<Int>>()
|
||||
private var currEvents = ArrayList<Event>()
|
||||
private var dayColumns = ArrayList<RelativeLayout>()
|
||||
private var eventTypeColors = LongSparseArray<Int>()
|
||||
private var eventTimeRanges = LinkedHashMap<String, ArrayList<EventWeeklyView>>()
|
||||
|
||||
|
@ -105,6 +110,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
}
|
||||
}
|
||||
|
||||
addDayColumns()
|
||||
scrollView.setOnScrollviewListener(object : MyScrollView.ScrollViewListener {
|
||||
override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) {
|
||||
checkScrollLimits(y)
|
||||
|
@ -113,7 +119,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
|
||||
scrollView.onGlobalLayout {
|
||||
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()
|
||||
|
@ -134,6 +140,10 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
|
||||
setupDayLabels()
|
||||
updateCalendar()
|
||||
|
||||
if (rowHeight != 0f && mView.width != 0) {
|
||||
addCurrentTimeIndicator()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
@ -153,7 +163,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
listener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
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
|
||||
if (scrollView.height < fullFragmentHeight) {
|
||||
config.weeklyViewItemHeightMultiplier = fullFragmentHeight / 24 / defaultRowHeight
|
||||
|
@ -164,25 +174,67 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
}
|
||||
|
||||
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() {
|
||||
var curDay = Formatter.getDateTimeFromTS(weekTimestamp)
|
||||
val textColor = config.textColor
|
||||
var curDay = Formatter.getUTCDateTimeFromTS(weekTimestamp)
|
||||
val textColor = if (isPrintVersion) resources.getColor(R.color.theme_light_text_color) else config.textColor
|
||||
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 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]
|
||||
|
||||
mView.findViewById<TextView>(res.getIdentifier("week_day_label_$i", "id", context!!.packageName)).apply {
|
||||
text = "$dayLetter\n${curDay.dayOfMonth}"
|
||||
setTextColor(if (todayCode == dayCode) primaryColor else textColor)
|
||||
if (todayCode == dayCode) {
|
||||
todayColumnIndex = i
|
||||
}
|
||||
val label = inflater.inflate(R.layout.weekly_view_day_letter, mView.week_letters_holder, false) as MyTextView
|
||||
label.text = "$dayLetter\n${curDay.dayOfMonth}"
|
||||
label.setTextColor(if (todayCode == dayCode && !isPrintVersion) primaryColor else textColor)
|
||||
if (todayCode == dayCode) {
|
||||
todayColumnIndex = i
|
||||
}
|
||||
|
||||
mView.week_letters_holder.addView(label)
|
||||
curDay = curDay.plusDays(1)
|
||||
}
|
||||
}
|
||||
|
@ -194,16 +246,16 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
}
|
||||
|
||||
private fun initGrid() {
|
||||
(0..6).map { getColumnWithId(it) }
|
||||
.forEachIndexed { index, layout ->
|
||||
layout.removeAllViews()
|
||||
val gestureDetector = getViewGestureDetector(layout, index)
|
||||
(0 until config.weeklyViewDays).mapNotNull { dayColumns.getOrNull(it) }
|
||||
.forEachIndexed { index, layout ->
|
||||
layout.removeAllViews()
|
||||
val gestureDetector = getViewGestureDetector(layout, index)
|
||||
|
||||
layout.setOnTouchListener { view, motionEvent ->
|
||||
gestureDetector.onTouchEvent(motionEvent)
|
||||
true
|
||||
}
|
||||
layout.setOnTouchListener { view, motionEvent ->
|
||||
gestureDetector.onTouchEvent(motionEvent)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getViewGestureDetector(view: ViewGroup, index: Int): GestureDetector {
|
||||
|
@ -222,7 +274,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
applyColorFilter(primaryColor.getContrastColor())
|
||||
|
||||
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 {
|
||||
putExtra(NEW_EVENT_START_TS, timestamp)
|
||||
putExtra(NEW_EVENT_SET_HOUR_DURATION, true)
|
||||
|
@ -230,9 +282,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
}
|
||||
}
|
||||
|
||||
animate().setStartDelay(PLUS_FADEOUT_DELAY).alpha(0f).withEndAction {
|
||||
beGone()
|
||||
}
|
||||
// do not use setStartDelay, it will trigger instantly if the device has disabled animations
|
||||
fadeOutHandler.removeCallbacksAndMessages(null)
|
||||
fadeOutHandler.postDelayed({
|
||||
animate().alpha(0f).withEndAction {
|
||||
beGone()
|
||||
}
|
||||
}, PLUS_FADEOUT_DELAY)
|
||||
}
|
||||
return super.onSingleTapUp(event)
|
||||
}
|
||||
|
@ -294,7 +350,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
if (context != null && activity != null && isAdded) {
|
||||
val replaceDescription = config.replaceDescription
|
||||
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>
|
||||
|
||||
currEvents = sorted
|
||||
|
@ -306,7 +362,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
private fun updateViewScale() {
|
||||
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)
|
||||
scrollView.layoutParams.height = fullHeight - oneDp
|
||||
mView.week_horizontal_grid_holder.layoutParams.height = fullHeight
|
||||
|
@ -321,15 +377,12 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
eventTimeRanges.clear()
|
||||
allDayRows.add(HashSet())
|
||||
week_all_day_holder?.removeAllViews()
|
||||
|
||||
addNewLine()
|
||||
|
||||
val minuteHeight = rowHeight / 60
|
||||
val minimalHeight = res.getDimension(R.dimen.weekly_view_minimal_event_height).toInt()
|
||||
val density = Math.round(res.displayMetrics.density)
|
||||
|
||||
var hadAllDayEvent = false
|
||||
|
||||
for (event in events) {
|
||||
val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
|
||||
val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
|
||||
|
@ -352,17 +405,18 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
|
||||
val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
|
||||
if (event.getIsAllDay() || Formatter.getDayCodeFromDateTime(startDateTime) != Formatter.getDayCodeFromDateTime(endDateTime)) {
|
||||
hadAllDayEvent = true
|
||||
addAllDayEvent(event)
|
||||
} else {
|
||||
val dayOfWeek = startDateTime.plusDays(if (config.isSundayFirst) 1 else 0).dayOfWeek - 1
|
||||
val layout = getColumnWithId(dayOfWeek)
|
||||
val dayCode = Formatter.getDayCodeFromDateTime(startDateTime)
|
||||
val dayOfWeek = dayColumns.indexOfFirst { it.tag == dayCode }
|
||||
if (dayOfWeek == -1 || dayOfWeek >= config.weeklyViewDays) {
|
||||
continue
|
||||
}
|
||||
|
||||
val startMinutes = startDateTime.minuteOfDay
|
||||
val duration = endDateTime.minuteOfDay - startMinutes
|
||||
val range = Range(startMinutes, startMinutes + duration)
|
||||
|
||||
val dayCode = Formatter.getDayCodeFromDateTime(startDateTime)
|
||||
var overlappingEvents = 0
|
||||
var currentEventOverlapIndex = 0
|
||||
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 {
|
||||
var backgroundColor = eventTypeColors.get(event.eventType, primaryColor)
|
||||
var textColor = backgroundColor.getContrastColor()
|
||||
if (dimPastEvents && event.isPastEvent) {
|
||||
if (dimPastEvents && event.isPastEvent && !isPrintVersion) {
|
||||
backgroundColor = backgroundColor.adjustAlpha(LOW_ALPHA)
|
||||
textColor = textColor.adjustAlpha(LOW_ALPHA)
|
||||
}
|
||||
|
@ -393,10 +448,10 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
setTextColor(textColor)
|
||||
text = event.title
|
||||
contentDescription = text
|
||||
layout.addView(this)
|
||||
dayColumn.addView(this)
|
||||
y = startMinutes * minuteHeight
|
||||
(layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
width = layout.width - 1
|
||||
width = dayColumn.width - 1
|
||||
width /= Math.max(overlappingEvents, 1)
|
||||
if (overlappingEvents > 1) {
|
||||
x = width * currentEventOverlapIndex.toFloat()
|
||||
|
@ -429,37 +484,51 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
}
|
||||
}
|
||||
|
||||
if (!hadAllDayEvent) {
|
||||
checkTopHolderHeight()
|
||||
}
|
||||
|
||||
addCurrentTimeIndicator(minuteHeight)
|
||||
checkTopHolderHeight()
|
||||
addCurrentTimeIndicator()
|
||||
}
|
||||
|
||||
private fun addNewLine() {
|
||||
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)
|
||||
}
|
||||
|
||||
private fun addCurrentTimeIndicator(minuteHeight: Float) {
|
||||
private fun addCurrentTimeIndicator() {
|
||||
if (todayColumnIndex != -1) {
|
||||
val minutes = DateTime().minuteOfDay
|
||||
val todayColumn = getColumnWithId(todayColumnIndex)
|
||||
val calendar = Calendar.getInstance()
|
||||
val minutes = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)
|
||||
if (todayColumnIndex >= dayColumns.size) {
|
||||
currentTimeView?.alpha = 0f
|
||||
return
|
||||
}
|
||||
|
||||
if (currentTimeView != null) {
|
||||
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 {
|
||||
applyColorFilter(primaryColor)
|
||||
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 minuteHeight = rowHeight / 60
|
||||
(layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
width = todayColumn.width + extraWidth
|
||||
width = (mView.width / weeklyViewDays) + extraWidth
|
||||
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
|
||||
}
|
||||
}
|
||||
|
@ -477,7 +546,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
(inflater.inflate(R.layout.week_all_day_event_marker, null, false) as TextView).apply {
|
||||
var backgroundColor = eventTypeColors.get(event.eventType, primaryColor)
|
||||
var textColor = backgroundColor.getContrastColor()
|
||||
if (dimPastEvents && event.isPastEvent) {
|
||||
if (dimPastEvents && event.isPastEvent && !isPrintVersion) {
|
||||
backgroundColor = backgroundColor.adjustAlpha(LOW_ALPHA)
|
||||
textColor = textColor.adjustAlpha(LOW_ALPHA)
|
||||
}
|
||||
|
@ -491,7 +560,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
val endDateTime = Formatter.getDateTimeFromTS(event.endTS)
|
||||
|
||||
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
|
||||
if (minTS == maxTS && (minTS - weekTimestamp == WEEK_SECONDS.toLong())) {
|
||||
|
@ -532,16 +601,25 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
allDayRows.last().add(dayIndex)
|
||||
}
|
||||
}
|
||||
|
||||
if (wasEventHandled) {
|
||||
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)
|
||||
val dayWidth = mView.width / config.weeklyViewDays
|
||||
(layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
leftMargin = getColumnWithId(firstDayIndex).x.toInt()
|
||||
leftMargin = dayOfWeek * dayWidth
|
||||
bottomMargin = 1
|
||||
width = getColumnWithId(Math.min(firstDayIndex + daysCnt, 6)).right - leftMargin - 1
|
||||
width = (dayWidth) * (daysCnt + 1)
|
||||
}
|
||||
|
||||
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) {
|
||||
if (wasFragmentInit) {
|
||||
scrollView.scrollY = y
|
||||
|
@ -583,4 +659,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
|||
updateViewScale()
|
||||
}
|
||||
}
|
||||
|
||||
fun togglePrintMode() {
|
||||
isPrintVersion = !isPrintVersion
|
||||
updateCalendar()
|
||||
setupDayLabels()
|
||||
addEvents(currEvents)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package com.simplemobiletools.calendar.pro.fragments
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.DatePicker
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
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.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.MyWeekPagerAdapter
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.getWeeklyViewItemHeight
|
||||
import com.simplemobiletools.calendar.pro.extensions.seconds
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.helpers.WEEK_START_DATE_TIME
|
||||
import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener
|
||||
|
@ -28,6 +29,7 @@ import org.joda.time.DateTime
|
|||
|
||||
class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
private val PREFILLED_WEEKS = 151
|
||||
private val MAX_SEEKBAR_VALUE = 14
|
||||
|
||||
private var viewPager: MyViewPager? = null
|
||||
private var weekHolder: ViewGroup? = null
|
||||
|
@ -60,20 +62,7 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||
private fun setupFragment() {
|
||||
val weekTSs = getWeekTimestamps(currentWeekTS)
|
||||
val weeklyAdapter = MyWeekPagerAdapter(activity!!.supportFragmentManager, weekTSs, this)
|
||||
val itemHeight = context!!.getWeeklyViewItemHeight().toInt()
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
addHours()
|
||||
|
||||
defaultWeeklyPage = weekTSs.size / 2
|
||||
viewPager!!.apply {
|
||||
|
@ -104,16 +93,53 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||
}
|
||||
})
|
||||
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()
|
||||
}
|
||||
|
||||
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> {
|
||||
val weekTSs = ArrayList<Long>(PREFILLED_WEEKS)
|
||||
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) {
|
||||
weekTSs.add(currentWeek.seconds())
|
||||
currentWeek = currentWeek.plusWeeks(1)
|
||||
currentWeek = currentWeek.plusDays(shownWeekDays)
|
||||
}
|
||||
return weekTSs
|
||||
}
|
||||
|
@ -149,11 +175,11 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null)
|
||||
|
||||
AlertDialog.Builder(context!!)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> dateSelected(dateTime, datePicker) }
|
||||
.create().apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
}
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> dateSelected(dateTime, datePicker) }
|
||||
.create().apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun dateSelected(dateTime: DateTime, datePicker: DatePicker) {
|
||||
|
@ -176,6 +202,16 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||
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() {
|
||||
(viewPager?.adapter as? MyWeekPagerAdapter)?.updateCalendars(viewPager!!.currentItem)
|
||||
}
|
||||
|
@ -223,5 +259,29 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||
(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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.simplemobiletools.calendar.pro.fragments
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.os.Bundle
|
||||
import android.util.SparseArray
|
||||
import android.view.LayoutInflater
|
||||
|
@ -11,6 +10,8 @@ import androidx.fragment.app.Fragment
|
|||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
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.YearlyCalendarImpl
|
||||
import com.simplemobiletools.calendar.pro.interfaces.YearlyCalendar
|
||||
|
@ -25,6 +26,7 @@ import java.util.*
|
|||
class YearFragment : Fragment(), YearlyCalendar {
|
||||
private var mYear = 0
|
||||
private var mSundayFirst = false
|
||||
private var isPrintVersion = false
|
||||
private var lastHash = 0
|
||||
private var mCalendar: YearlyCalendarImpl? = null
|
||||
|
||||
|
@ -37,7 +39,6 @@ class YearFragment : Fragment(), YearlyCalendar {
|
|||
setupMonths()
|
||||
|
||||
mCalendar = YearlyCalendarImpl(this, context!!, mYear)
|
||||
|
||||
return mView
|
||||
}
|
||||
|
||||
|
@ -65,30 +66,40 @@ class YearFragment : Fragment(), YearlyCalendar {
|
|||
val days = dateTime.dayOfMonth().maximumValue
|
||||
mView.month_2.setDays(days)
|
||||
|
||||
val res = resources
|
||||
markCurrentMonth(res)
|
||||
val now = DateTime()
|
||||
|
||||
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()
|
||||
if (!mSundayFirst) {
|
||||
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.setOnClickListener {
|
||||
(activity as MainActivity).openMonthFromYearly(DateTime().withDate(mYear, i, 1))
|
||||
}
|
||||
}
|
||||
|
||||
if (!isPrintVersion) {
|
||||
markCurrentMonth(now)
|
||||
}
|
||||
}
|
||||
|
||||
private fun markCurrentMonth(res: Resources) {
|
||||
val now = DateTime()
|
||||
private fun markCurrentMonth(now: DateTime) {
|
||||
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())
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
@ -102,10 +113,28 @@ class YearFragment : Fragment(), YearlyCalendar {
|
|||
}
|
||||
|
||||
lastHash = hashCode
|
||||
val res = resources
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import androidx.appcompat.app.AlertDialog
|
|||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
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.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
|
@ -126,4 +127,8 @@ class YearFragmentsHolder : MyFragmentHolder() {
|
|||
}
|
||||
|
||||
override fun getNewEventDayCode() = Formatter.getTodayCode()
|
||||
|
||||
override fun printView() {
|
||||
(viewPager?.adapter as? MyYearPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.simplemobiletools.calendar.pro.helpers
|
|||
|
||||
import android.content.Context
|
||||
import android.media.AudioManager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.scheduleCalDAVSync
|
||||
import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle
|
||||
|
@ -183,4 +182,8 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
var weeklyViewItemHeightMultiplier: Float
|
||||
get() = prefs.getFloat(WEEKLY_VIEW_ITEM_HEIGHT_MULTIPLIER, 1f)
|
||||
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()
|
||||
}
|
||||
|
|
|
@ -75,6 +75,7 @@ const val ALLOW_CHANGING_TIME_ZONES = "allow_changing_time_zones"
|
|||
const val LAST_EXPORT_PATH = "last_export_path"
|
||||
const val EXPORT_PAST_EVENTS = "export_past_events"
|
||||
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
|
||||
const val REPEAT_SAME_DAY = 1 // i.e. 25th every month, or 3rd june (if yearly repetition)
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -104,6 +104,9 @@ class IcsImporter(val activity: SimpleActivity) {
|
|||
curTitle = getTitle(curTitle).replace("\\n", "\n").replace("\\,", ",")
|
||||
} else if (line.startsWith(DESCRIPTION) && !isNotificationDescription) {
|
||||
curDescription = line.substring(DESCRIPTION.length).replace("\\n", "\n").replace("\\,", ",")
|
||||
if (curDescription.trim().isEmpty()) {
|
||||
curDescription = ""
|
||||
}
|
||||
isDescription = true
|
||||
} else if (line.startsWith(UID)) {
|
||||
curImportId = line.substring(UID.length).trim()
|
||||
|
@ -141,6 +144,9 @@ class IcsImporter(val activity: SimpleActivity) {
|
|||
curRepeatExceptions.add(Formatter.getDayCodeFromTS(getTimestamp(value)))
|
||||
} else if (line.startsWith(LOCATION)) {
|
||||
curLocation = getLocation(line.substring(LOCATION.length).replace("\\,", ","))
|
||||
if (curLocation.trim().isEmpty()) {
|
||||
curLocation = ""
|
||||
}
|
||||
} else if (line.startsWith(RECURRENCE_ID)) {
|
||||
val timestamp = getTimestamp(line.substring(RECURRENCE_ID.length))
|
||||
curRecurrenceDayCode = Formatter.getDayCodeFromTS(timestamp)
|
||||
|
@ -169,9 +175,9 @@ class IcsImporter(val activity: SimpleActivity) {
|
|||
}
|
||||
|
||||
var reminders = arrayListOf(
|
||||
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(2) { REMINDER_OFF }, curReminderActions.getOrElse(2) { 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(2) { REMINDER_OFF }, curReminderActions.getOrElse(2) { REMINDER_NOTIFICATION })
|
||||
)
|
||||
|
||||
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 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,
|
||||
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)
|
||||
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)
|
||||
|
||||
if (event.getIsAllDay() && curEnd > curStart) {
|
||||
event.endTS -= DAY
|
||||
|
|
|
@ -19,7 +19,7 @@ class MyWidgetDateProvider : AppWidgetProvider() {
|
|||
|
||||
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
||||
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)
|
||||
setText(R.id.widget_date_label, Formatter.getTodayDayNumber())
|
||||
setText(R.id.widget_month_label, Formatter.getCurrentMonthShort())
|
||||
|
|
|
@ -60,6 +60,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
|
|||
private fun setupDayOpenIntent(context: Context, views: RemoteViews, id: Int, dayCode: String) {
|
||||
(context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)).apply {
|
||||
putExtra(DAY_CODE, dayCode)
|
||||
putExtra(VIEW_TO_OPEN, DAILY_VIEW)
|
||||
val pendingIntent = PendingIntent.getActivity(context, Integer.parseInt(dayCode), this, 0)
|
||||
views.setOnClickPendingIntent(id, pendingIntent)
|
||||
}
|
||||
|
|
|
@ -60,8 +60,10 @@ class Parser {
|
|||
} else if (repeatInterval.isXMonthlyRepetition() || repeatInterval.isXYearlyRepetition()) {
|
||||
repeatRule = if (value.startsWith("-1")) REPEAT_ORDER_WEEKDAY_USE_LAST else REPEAT_ORDER_WEEKDAY
|
||||
}
|
||||
} else if (key == BYMONTHDAY && value.toInt() == -1) {
|
||||
repeatRule = REPEAT_LAST_DAY
|
||||
} else if (key == BYMONTHDAY) {
|
||||
if (value.split(",").any { it.toInt() == -1 }) {
|
||||
repeatRule = REPEAT_LAST_DAY
|
||||
}
|
||||
}
|
||||
}
|
||||
return EventRepetition(repeatInterval, repeatRule, repeatLimit)
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.content.Context
|
|||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.interfaces.WeeklyCalendar
|
||||
import com.simplemobiletools.calendar.pro.models.Event
|
||||
import com.simplemobiletools.commons.helpers.DAY_SECONDS
|
||||
import com.simplemobiletools.commons.helpers.WEEK_SECONDS
|
||||
import java.util.*
|
||||
|
||||
|
@ -11,8 +12,8 @@ class WeeklyCalendarImpl(val callback: WeeklyCalendar, val context: Context) {
|
|||
var mEvents = ArrayList<Event>()
|
||||
|
||||
fun updateWeeklyCalendar(weekStartTS: Long) {
|
||||
val endTS = weekStartTS + WEEK_SECONDS
|
||||
context.eventsHelper.getEvents(weekStartTS, endTS) {
|
||||
val endTS = weekStartTS + 2 * WEEK_SECONDS
|
||||
context.eventsHelper.getEvents(weekStartTS - DAY_SECONDS, endTS) {
|
||||
mEvents = it
|
||||
callback.updateWeeklyCalendar(it)
|
||||
}
|
||||
|
|
|
@ -14,30 +14,30 @@ import java.io.Serializable
|
|||
|
||||
@Entity(tableName = "events", indices = [(Index(value = ["id"], unique = true))])
|
||||
data class Event(
|
||||
@PrimaryKey(autoGenerate = true) var id: Long?,
|
||||
@ColumnInfo(name = "start_ts") var startTS: Long = 0L,
|
||||
@ColumnInfo(name = "end_ts") var endTS: Long = 0L,
|
||||
@ColumnInfo(name = "title") var title: String = "",
|
||||
@ColumnInfo(name = "location") var location: String = "",
|
||||
@ColumnInfo(name = "description") var description: String = "",
|
||||
@ColumnInfo(name = "reminder_1_minutes") var reminder1Minutes: Int = -1,
|
||||
@ColumnInfo(name = "reminder_2_minutes") var reminder2Minutes: Int = -1,
|
||||
@ColumnInfo(name = "reminder_3_minutes") var reminder3Minutes: Int = -1,
|
||||
@ColumnInfo(name = "reminder_1_type") var reminder1Type: 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 = "repeat_interval") var repeatInterval: Int = 0,
|
||||
@ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0,
|
||||
@ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L,
|
||||
@ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: ArrayList<String> = ArrayList(),
|
||||
@ColumnInfo(name = "attendees") var attendees: String = "",
|
||||
@ColumnInfo(name = "import_id") var importId: String = "",
|
||||
@ColumnInfo(name = "time_zone") var timeZone: String = "",
|
||||
@ColumnInfo(name = "flags") var flags: Int = 0,
|
||||
@ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID,
|
||||
@ColumnInfo(name = "parent_id") var parentId: Long = 0,
|
||||
@ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L,
|
||||
@ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR)
|
||||
@PrimaryKey(autoGenerate = true) var id: Long?,
|
||||
@ColumnInfo(name = "start_ts") var startTS: Long = 0L,
|
||||
@ColumnInfo(name = "end_ts") var endTS: Long = 0L,
|
||||
@ColumnInfo(name = "title") var title: String = "",
|
||||
@ColumnInfo(name = "location") var location: String = "",
|
||||
@ColumnInfo(name = "description") var description: String = "",
|
||||
@ColumnInfo(name = "reminder_1_minutes") var reminder1Minutes: Int = -1,
|
||||
@ColumnInfo(name = "reminder_2_minutes") var reminder2Minutes: Int = -1,
|
||||
@ColumnInfo(name = "reminder_3_minutes") var reminder3Minutes: Int = -1,
|
||||
@ColumnInfo(name = "reminder_1_type") var reminder1Type: 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 = "repeat_interval") var repeatInterval: Int = 0,
|
||||
@ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0,
|
||||
@ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L,
|
||||
@ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: ArrayList<String> = ArrayList(),
|
||||
@ColumnInfo(name = "attendees") var attendees: String = "",
|
||||
@ColumnInfo(name = "import_id") var importId: String = "",
|
||||
@ColumnInfo(name = "time_zone") var timeZone: String = "",
|
||||
@ColumnInfo(name = "flags") var flags: Int = 0,
|
||||
@ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID,
|
||||
@ColumnInfo(name = "parent_id") var parentId: Long = 0,
|
||||
@ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L,
|
||||
@ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR)
|
||||
: Serializable {
|
||||
|
||||
companion object {
|
||||
|
@ -123,9 +123,9 @@ data class Event(
|
|||
fun getIsAllDay() = flags and FLAG_ALL_DAY != 0
|
||||
|
||||
fun getReminders() = setOf(
|
||||
Reminder(reminder1Minutes, reminder1Type),
|
||||
Reminder(reminder2Minutes, reminder2Type),
|
||||
Reminder(reminder3Minutes, reminder3Type)
|
||||
Reminder(reminder1Minutes, reminder1Type),
|
||||
Reminder(reminder2Minutes, reminder2Type),
|
||||
Reminder(reminder3Minutes, reminder3Type)
|
||||
).filter { it.minutes != REMINDER_OFF }
|
||||
|
||||
// properly return the start time of all-day events as midnight
|
||||
|
|
|
@ -46,6 +46,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||
private var horizontalOffset = 0
|
||||
private var showWeekNumbers = false
|
||||
private var dimPastEvents = true
|
||||
private var isPrintVersion = false
|
||||
private var allEvents = ArrayList<MonthViewEvent>()
|
||||
private var bgRectF = RectF()
|
||||
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)
|
||||
if ((lastEvent == null || lastEvent.startDayIndex + daysCnt <= day.indexOnMonthView) && !validDayEvent) {
|
||||
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 = 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) {
|
||||
|
@ -142,7 +143,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||
val xPos = x * dayWidth + horizontalOffset
|
||||
val yPos = y * dayHeight + verticalOffset
|
||||
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))
|
||||
}
|
||||
|
||||
|
@ -179,7 +180,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||
for (i in 0..6) {
|
||||
val xPos = horizontalOffset + (i + 1) * dayWidth - dayWidth / 2
|
||||
var weekDayLetterPaint = paint
|
||||
if (i == currDayOfWeek) {
|
||||
if (i == currDayOfWeek && !isPrintVersion) {
|
||||
weekDayLetterPaint = getColoredPaint(primaryColor)
|
||||
}
|
||||
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) {
|
||||
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
|
||||
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 {
|
||||
var paintColor = textColor
|
||||
if (startDay.isToday) {
|
||||
if (startDay.isToday && !isPrintVersion) {
|
||||
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 {
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -285,7 +286,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||
|
||||
private fun getEventTitlePaint(event: MonthViewEvent, startDay: DayMonthly, endDay: DayMonthly): Paint {
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -348,4 +349,18 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||
val date = Formatter.getDateTimeFromCode(code)
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,4 +96,8 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
|||
addView(this)
|
||||
}
|
||||
}
|
||||
|
||||
fun togglePrintMode() {
|
||||
monthView.togglePrintMode()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
|||
private var textColor = 0
|
||||
private var days = 31
|
||||
private var isLandscape = false
|
||||
private var isPrintVersion = false
|
||||
private var mEvents: ArrayList<DayYearly>? = null
|
||||
|
||||
var firstDay = 0
|
||||
|
@ -41,9 +42,9 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
|||
|
||||
init {
|
||||
val attributes = context.theme.obtainStyledAttributes(
|
||||
attrs,
|
||||
R.styleable.SmallMonthView,
|
||||
0, 0)
|
||||
attrs,
|
||||
R.styleable.SmallMonthView,
|
||||
0, 0)
|
||||
|
||||
try {
|
||||
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 (x in 1..7) {
|
||||
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
|
||||
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++
|
||||
|
@ -101,4 +102,16 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
|||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,12 +6,13 @@ import android.graphics.Paint
|
|||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.getWeeklyViewItemHeight
|
||||
|
||||
class WeeklyViewGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
||||
private val ROWS_CNT = 24
|
||||
private val COLS_CNT = 7
|
||||
private var paint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||||
var daysCount = context.config.weeklyViewDays
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
val rowWidth = width / COLS_CNT.toFloat()
|
||||
for (i in 0 until COLS_CNT) {
|
||||
val rowWidth = width / daysCount.toFloat()
|
||||
for (i in 0 until daysCount) {
|
||||
val x = rowWidth * i.toFloat()
|
||||
canvas.drawLine(x, 0f, x, height.toFloat(), paint)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TableLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/calendar_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -14,7 +13,6 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
|
@ -24,15 +22,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/january"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
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>
|
||||
|
||||
|
@ -51,15 +48,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/february"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
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>
|
||||
|
||||
|
@ -67,7 +63,6 @@
|
|||
android:id="@+id/month_3_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
|
@ -78,15 +73,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/march"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
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
|
||||
|
@ -94,7 +88,6 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
|
@ -104,16 +97,15 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/april"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_4"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_4_label"
|
||||
android:layout_marginLeft="@dimen/yearly_month_padding"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
|
@ -134,15 +126,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/may"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_5"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
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>
|
||||
|
||||
|
@ -150,7 +141,6 @@
|
|||
android:id="@+id/month_6_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
|
@ -161,16 +151,15 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/june"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_6_label"
|
||||
android:layout_marginLeft="@dimen/yearly_month_padding"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -178,7 +167,6 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
|
@ -188,15 +176,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/july"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_7"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
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
|
||||
|
@ -214,15 +201,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/august"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_8"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
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>
|
||||
</TableRow>
|
||||
|
||||
|
@ -233,7 +219,6 @@
|
|||
android:id="@+id/month_9_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
|
@ -244,16 +229,15 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/september"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_9"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_9_label"
|
||||
android:layout_marginLeft="@dimen/yearly_month_padding"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -261,7 +245,6 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
|
@ -271,15 +254,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/october"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_10"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
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
|
||||
|
@ -297,23 +279,21 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/november"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_11"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_11_label"
|
||||
android:layout_marginLeft="@dimen/yearly_month_padding"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_12_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
|
@ -324,15 +304,14 @@
|
|||
android:gravity="center_horizontal"
|
||||
android:text="@string/december"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_12"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
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>
|
||||
</TableRow>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/event_scrollview"
|
||||
|
@ -25,7 +24,7 @@
|
|||
android:maxLines="1"
|
||||
android:minEms="20"
|
||||
android:textCursorDrawable="@null"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyEditText
|
||||
android:id="@+id/event_location"
|
||||
|
@ -41,20 +40,19 @@
|
|||
android:maxLines="1"
|
||||
android:minEms="20"
|
||||
android:textCursorDrawable="@null"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
|
||||
<ImageView
|
||||
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_alignTop="@+id/event_location"
|
||||
android:layout_alignBottom="@+id/event_location"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginEnd="@dimen/activity_margin"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:paddingStart="@dimen/small_margin"
|
||||
android:paddingEnd="@dimen/small_margin"
|
||||
android:src="@drawable/ic_place_vector"/>
|
||||
android:padding="@dimen/small_margin"
|
||||
android:src="@drawable/ic_place_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyEditText
|
||||
android:id="@+id/event_description"
|
||||
|
@ -71,7 +69,7 @@
|
|||
android:linksClickable="true"
|
||||
android:minEms="20"
|
||||
android:textCursorDrawable="@null"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_description_divider"
|
||||
|
@ -81,7 +79,7 @@
|
|||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:layout_marginBottom="@dimen/normal_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_time_image"
|
||||
|
@ -92,7 +90,7 @@
|
|||
android:layout_alignBottom="@+id/event_all_day"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_clock_vector"/>
|
||||
android:src="@drawable/ic_clock_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/event_all_day"
|
||||
|
@ -107,7 +105,7 @@
|
|||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:text="@string/all_day"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
app:switchPadding="@dimen/small_margin"/>
|
||||
app:switchPadding="@dimen/small_margin" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_start_date"
|
||||
|
@ -120,7 +118,7 @@
|
|||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="January 1 1970"/>
|
||||
tools:text="January 1 1970" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_start_time"
|
||||
|
@ -131,7 +129,7 @@
|
|||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="00:00"/>
|
||||
tools:text="00:00" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_end_date"
|
||||
|
@ -144,7 +142,7 @@
|
|||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="January 1 1970"/>
|
||||
tools:text="January 1 1970" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_end_time"
|
||||
|
@ -155,34 +153,34 @@
|
|||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="00:00"/>
|
||||
tools:text="00:00" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_time_zone_image"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/event_end_date"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:layout_alignTop="@+id/event_time_zone"
|
||||
android:layout_alignBottom="@+id/event_time_zone"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_globe_vector"/>
|
||||
android:src="@drawable/ic_globe_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_time_zone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/event_end_date"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:layout_toEndOf="@+id/event_time_zone_image"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:layout_centerVertical="true"
|
||||
android:ellipsize="end"
|
||||
android:lines="1"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="Europe/Bratislava"/>
|
||||
tools:text="Europe/Bratislava" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_date_time_divider"
|
||||
|
@ -192,7 +190,7 @@
|
|||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_reminder_image"
|
||||
|
@ -203,7 +201,7 @@
|
|||
android:layout_alignBottom="@+id/event_reminder_1"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_bell_vector"/>
|
||||
android:src="@drawable/ic_bell_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_reminder_1"
|
||||
|
@ -217,9 +215,10 @@
|
|||
android:ellipsize="end"
|
||||
android:lines="1"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="@string/add_another_reminder"/>
|
||||
tools:text="@string/add_another_reminder" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_reminder_1_type"
|
||||
|
@ -231,7 +230,7 @@
|
|||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:src="@drawable/ic_bell_vector"/>
|
||||
android:src="@drawable/ic_bell_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_reminder_2"
|
||||
|
@ -245,11 +244,12 @@
|
|||
android:ellipsize="end"
|
||||
android:lines="1"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/add_another_reminder"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
android:visibility="gone"
|
||||
tools:text="@string/add_another_reminder"/>
|
||||
tools:text="@string/add_another_reminder" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_reminder_2_type"
|
||||
|
@ -261,7 +261,7 @@
|
|||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:src="@drawable/ic_bell_vector"/>
|
||||
android:src="@drawable/ic_bell_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_reminder_3"
|
||||
|
@ -275,11 +275,12 @@
|
|||
android:ellipsize="end"
|
||||
android:lines="1"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/add_another_reminder"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
android:visibility="gone"
|
||||
tools:text="@string/add_another_reminder"/>
|
||||
tools:text="@string/add_another_reminder" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_reminder_3_type"
|
||||
|
@ -291,7 +292,7 @@
|
|||
android:layout_marginStart="@dimen/small_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:src="@drawable/ic_bell_vector"/>
|
||||
android:src="@drawable/ic_bell_vector" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_reminder_divider"
|
||||
|
@ -301,7 +302,7 @@
|
|||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_repetition_image"
|
||||
|
@ -312,7 +313,7 @@
|
|||
android:layout_alignBottom="@+id/event_repetition"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_repeat_vector"/>
|
||||
android:src="@drawable/ic_repeat_vector" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_repetition"
|
||||
|
@ -323,9 +324,10 @@
|
|||
android:layout_toEndOf="@+id/event_repetition_image"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="@string/no_repetition"/>
|
||||
tools:text="@string/no_repetition" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/event_repetition_rule_holder"
|
||||
|
@ -344,7 +346,7 @@
|
|||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/repeat_on"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_repetition_rule"
|
||||
|
@ -356,7 +358,7 @@
|
|||
android:gravity="end"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:text="@string/every_day"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -377,7 +379,7 @@
|
|||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/repeat_till"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_repetition_limit"
|
||||
|
@ -387,7 +389,7 @@
|
|||
android:clickable="false"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:text="@string/forever"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
</RelativeLayout>
|
||||
|
||||
<ImageView
|
||||
|
@ -397,7 +399,7 @@
|
|||
android:layout_below="@+id/event_repetition_limit_holder"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_attendees_image"
|
||||
|
@ -408,7 +410,7 @@
|
|||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:layout_marginTop="@dimen/small_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_people_vector"/>
|
||||
android:src="@drawable/ic_people_vector" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/event_attendees_holder"
|
||||
|
@ -417,7 +419,7 @@
|
|||
android:layout_below="@+id/event_repetition_divider"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_toEndOf="@+id/event_attendees_image"
|
||||
android:orientation="vertical"/>
|
||||
android:orientation="vertical" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_attendees_divider"
|
||||
|
@ -426,7 +428,7 @@
|
|||
android:layout_below="@+id/event_attendees_holder"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_caldav_calendar_image"
|
||||
|
@ -434,12 +436,12 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/event_attendees_divider"
|
||||
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_alignBottom="@+id/event_caldav_calendar_holder"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_calendar_vector"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/event_caldav_calendar_holder"
|
||||
|
@ -459,10 +461,10 @@
|
|||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:paddingEnd="@dimen/medium_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/tiny_margin"
|
||||
android:textSize="@dimen/day_text_size"
|
||||
tools:text="My calendar"/>
|
||||
tools:text="My calendar" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/event_caldav_calendar_email"
|
||||
|
@ -476,7 +478,7 @@
|
|||
android:paddingEnd="@dimen/medium_margin"
|
||||
android:paddingBottom="@dimen/medium_margin"
|
||||
android:textSize="@dimen/meta_text_size"
|
||||
tools:text="hello@simplemobiletools.com"/>
|
||||
tools:text="hello@simplemobiletools.com" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_caldav_calendar_color"
|
||||
|
@ -485,7 +487,7 @@
|
|||
android:layout_alignParentEnd="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="@dimen/activity_margin"
|
||||
android:clickable="false"/>
|
||||
android:clickable="false" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -496,7 +498,7 @@
|
|||
android:layout_below="@+id/event_caldav_calendar_holder"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_type_image"
|
||||
|
@ -507,7 +509,7 @@
|
|||
android:layout_alignBottom="@+id/event_type_holder"
|
||||
android:layout_marginStart="@dimen/normal_margin"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_color_vector"/>
|
||||
android:src="@drawable/ic_color_vector" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/event_type_holder"
|
||||
|
@ -528,7 +530,7 @@
|
|||
android:layout_toStartOf="@+id/event_type_color"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/normal_margin"
|
||||
android:textSize="@dimen/day_text_size"/>
|
||||
android:textSize="@dimen/day_text_size" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/event_type_color"
|
||||
|
@ -537,7 +539,7 @@
|
|||
android:layout_alignParentEnd="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="@dimen/activity_margin"
|
||||
android:clickable="false"/>
|
||||
android:clickable="false" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -547,6 +549,6 @@
|
|||
android:layout_height="1px"
|
||||
android:layout_below="@+id/event_type_holder"
|
||||
android:background="@color/divider_grey"
|
||||
android:importantForAccessibility="no"/>
|
||||
android:importantForAccessibility="no" />
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
|
|
|
@ -186,22 +186,26 @@
|
|||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_reminder_sound_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toStartOf="@+id/settings_reminder_sound"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingEnd="@dimen/medium_margin"
|
||||
android:text="@string/reminder_sound" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_reminder_sound"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginStart="@dimen/activity_margin"
|
||||
android:layout_marginEnd="@dimen/small_margin"
|
||||
android:layout_toEndOf="@+id/settings_reminder_sound_label"
|
||||
android:background="@null"
|
||||
android:clickable="false" />
|
||||
android:clickable="false"
|
||||
android:gravity="end"
|
||||
android:maxLines="3"
|
||||
tools:text="None" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/filter_event_types_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clipToPadding="false"
|
||||
android:overScrollMode="never"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/>
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
android:textStyle="italic"
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/calendar_empty_list_placeholder_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/week_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
@ -22,7 +21,7 @@
|
|||
<com.simplemobiletools.calendar.pro.views.WeeklyViewGrid
|
||||
android:id="@+id/week_horizontal_grid_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/week_events_columns_holder"
|
||||
|
@ -31,48 +30,6 @@
|
|||
android:background="@android:color/transparent"
|
||||
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>
|
||||
</RelativeLayout>
|
||||
</com.simplemobiletools.calendar.pro.views.MyScrollView>
|
||||
|
@ -91,72 +48,7 @@
|
|||
android:background="@drawable/stroke_bottom"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
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>
|
||||
android:paddingBottom="@dimen/small_margin" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/week_all_day_holder"
|
||||
|
|
|
@ -1,48 +1,72 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/week_view_main_holder"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/week_view_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fillViewport="true">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/week_view_holder"
|
||||
<ImageView
|
||||
android:id="@+id/week_view_hours_divider"
|
||||
android:layout_width="match_parent"
|
||||
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
|
||||
android:id="@+id/week_view_hours_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignEnd="@+id/week_view_hours_scrollview"
|
||||
android:background="@drawable/stroke_bottom_right"
|
||||
android:importantForAccessibility="no"/>
|
||||
<com.simplemobiletools.calendar.pro.views.MyScrollView
|
||||
android:id="@+id/week_view_hours_scrollview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/week_view_seekbar"
|
||||
android:layout_below="@+id/week_view_hours_divider"
|
||||
android:background="@drawable/stroke_right"
|
||||
android:overScrollMode="never"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:scrollbars="none">
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.MyScrollView
|
||||
android:id="@+id/week_view_hours_scrollview"
|
||||
<LinearLayout
|
||||
android:id="@+id/week_view_hours_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/week_view_hours_divider"
|
||||
android:background="@drawable/stroke_right"
|
||||
android:overScrollMode="never"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:scrollbars="none">
|
||||
android:orientation="vertical" />
|
||||
|
||||
<LinearLayout
|
||||
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.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
|
||||
android:id="@+id/week_view_view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toEndOf="@+id/week_view_hours_scrollview"/>
|
||||
<include
|
||||
android:id="@+id/week_view_days_count_divider"
|
||||
layout="@layout/divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:layout_above="@+id/week_view_seekbar" />
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
<com.simplemobiletools.commons.views.MySeekBar
|
||||
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>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TableLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/calendar_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -14,24 +13,23 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_1_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/january"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_1_label"
|
||||
android:layout_centerInParent="true"/>
|
||||
android:layout_centerInParent="true" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -43,20 +41,20 @@
|
|||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_2_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/february"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_2_label"/>
|
||||
android:layout_below="@+id/month_2_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -64,24 +62,23 @@
|
|||
android:id="@+id/month_3_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_3_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/march"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_3_label"/>
|
||||
android:layout_below="@+id/month_3_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
@ -93,24 +90,23 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_4_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/april"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_4"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_4_label"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -122,20 +118,20 @@
|
|||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_5_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/may"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_5"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_5_label"/>
|
||||
android:layout_below="@+id/month_5_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -143,25 +139,24 @@
|
|||
android:id="@+id/month_6_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_6_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/june"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_6_label"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
|
@ -172,23 +167,22 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_7_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/july"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_7"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_7_label"/>
|
||||
android:layout_below="@+id/month_7_label" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -199,20 +193,20 @@
|
|||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_8_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/august"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_8"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_8_label"/>
|
||||
android:layout_below="@+id/month_8_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -220,25 +214,24 @@
|
|||
android:id="@+id/month_9_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_9_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/september"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_9"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_9_label"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
@ -250,23 +243,22 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_marginRight="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_10_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/october"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_10"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_10_label"/>
|
||||
android:layout_below="@+id/month_10_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -278,47 +270,45 @@
|
|||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_11_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/november"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_11"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_11_label"
|
||||
android:layout_marginLeft="@dimen/yearly_month_padding"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30"/>
|
||||
app:days="30" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_12_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/yearly_padding_full"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
<TextView
|
||||
android:id="@+id/month_12_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/december"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_12"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_12_label"/>
|
||||
android:layout_below="@+id/month_12_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
|
|
@ -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" />
|
|
@ -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" />
|
|
@ -19,7 +19,7 @@
|
|||
android:layout_width="60dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:textColor="@color/md_grey_white"
|
||||
android:textSize="28sp"
|
||||
tools:text="13" />
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:textColor="@color/md_grey_white"
|
||||
android:textSize="26sp"
|
||||
tools:text="1" />
|
||||
|
|
|
@ -9,10 +9,10 @@
|
|||
android:id="@+id/widget_event_list_background"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/widget_event_list"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:src="@drawable/widget_round_background" />
|
||||
|
||||
<TextView
|
||||
|
|
|
@ -31,6 +31,10 @@
|
|||
android:id="@+id/go_to_date"
|
||||
android:title="@string/go_to_date"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/print"
|
||||
android:title="@string/print"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/add_holidays"
|
||||
android:title="@string/add_holidays"
|
||||
|
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 10 KiB |
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">إدارة أنواع الأحداث</string>
|
||||
<string name="start_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="vibrate">إهتزاز عند الإشعار</string>
|
||||
<string name="reminder_sound">صوت التذكير</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Hadisə tiplərini idarə et</string>
|
||||
<string name="start_day_at">Günə başla</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="vibrate">Xatırladıcı bildirişində vibrasiya et</string>
|
||||
<string name="reminder_sound">Xatırladıcı səsi</string>
|
||||
|
|
|
@ -162,6 +162,7 @@
|
|||
<string name="manage_event_types">ইভেন্ট টাইপ ম্যানেজ করুন</string>
|
||||
<string name="start_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="vibrate">রিমাইন্ডার নোটিফিকেশনে ভাইব্রেট করো</string>
|
||||
<string name="reminder_sound">রিমাইন্ডারের শব্দ</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Merañ an doareoù darvoudoù</string>
|
||||
<string name="start_day_at">Kregiñ 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="vibrate">Froumal evit ar rebuzadurioù adc\'halv</string>
|
||||
<string name="reminder_sound">Soniri adc\'halv</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Správa typů událostí</string>
|
||||
<string name="start_day_at">Počátek 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="vibrate">Vibrovat při připomínce</string>
|
||||
<string name="reminder_sound">Zvuk připomínky</string>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<!-- Widget titles -->
|
||||
<string name="widget_monthly">Månedlig kalender</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 -->
|
||||
<string name="event">Begivenhed</string>
|
||||
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Håndter begivenhedstyper</string>
|
||||
<string name="start_day_at">Start 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="vibrate">Vibrer under påmindelser</string>
|
||||
<string name="reminder_sound">Lyd til påmindelser</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Termintypen verwalten</string>
|
||||
<string name="start_day_at">Wochenansicht beginnt 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="vibrate">Vibration bei Erinnerung</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 -->
|
||||
<string name="app_title">Simple Calendar Pro - Termine & Erinnerungen</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Simple mobile 2020 calendar. Schedule planner & 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">
|
||||
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>
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<!-- Widget titles -->
|
||||
<string name="widget_monthly">Μηνιαίο ημερολόγιο</string>
|
||||
<string name="widget_list">Λίστα εκδηλώσεων ημερολογίου</string>
|
||||
<string name="widget_todays_date">Calendar today\'s date</string>
|
||||
<string name="widget_todays_date">Σημερινό ημερολόγιο</string>
|
||||
|
||||
<!-- Event -->
|
||||
<string name="event">Εκδηλώσεις</string>
|
||||
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Διαχείριση τύπων εκδηλώσεων</string>
|
||||
<string name="start_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="vibrate">Δόνηση στην ειδοποίηση υπενθύμισης</string>
|
||||
<string name="reminder_sound">Ήχος υπενθύμισης</string>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<!-- Widget titles -->
|
||||
<string name="widget_monthly">Calendario mensual</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 -->
|
||||
<string name="event">Evento</string>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<string name="repeat_forever">Repetir por siempre</string>
|
||||
<string name="times">veces</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="selected_days">En los días seleccionados</string>
|
||||
<string name="the_same_day">El mismo día</string>
|
||||
|
@ -76,9 +76,9 @@
|
|||
<!-- used in repetition, like "Every first Sunday" -->
|
||||
<string name="repeat_every_f">Repetir 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="third_f">tercero</string>
|
||||
<string name="third_f">tercer</string>
|
||||
<string name="fourth_f">cuarto</string>
|
||||
<string name="last_f">último</string>
|
||||
|
||||
|
@ -158,6 +158,7 @@
|
|||
<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="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="vibrate">Vibración en notificación 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="dim_past_events">Sombrear eventos pasados</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="alarm_stream">Alarma</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="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="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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
<string name="monday_alt">Lunes</string>
|
||||
<string name="tuesday_alt">Martes</string>
|
||||
<string name="wednesday_alt">Miércoles</string>
|
||||
<string name="thursday_alt">Jueves</string>
|
||||
<string name="friday_alt">Viernes</string>
|
||||
<string name="saturday_alt">Sábado</string>
|
||||
<string name="sunday_alt">Domingo</string>
|
||||
<string name="monday_alt">lunes</string>
|
||||
<string name="tuesday_alt">martes</string>
|
||||
<string name="wednesday_alt">miércoles</string>
|
||||
<string name="thursday_alt">jueves</string>
|
||||
<string name="friday_alt">viernes</string>
|
||||
<string name="saturday_alt">sábado</string>
|
||||
<string name="sunday_alt">domingo</string>
|
||||
|
||||
<!-- List widget config example events -->
|
||||
<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 -->
|
||||
<string name="app_title">Calendario Simple Pro - Eventos y Recordatorios</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Simple mobile 2020 calendar. Schedule planner & 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">
|
||||
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.
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -159,6 +159,7 @@
|
|||
<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="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="vibrate">Vibrer à la notification 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="events">Evénements</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="notification_stream">Notification</string>
|
||||
<string name="ring_stream">Sonnerie</string>
|
||||
|
@ -197,7 +198,7 @@
|
|||
|
||||
<!-- CalDAV sync -->
|
||||
<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="store_locally_only">Stocker uniquement localement</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="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 l’application.</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 -->
|
||||
<!-- used in repetition, like "Every last Sunday" -->
|
||||
|
@ -250,47 +251,47 @@
|
|||
<!-- 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_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 you’re 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 & appointments a breeze. You can even view everything as a simple list of events rather than in calendar view, so you <b>know exactly what’s 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 & Benefits</b>
|
||||
<b>Simple Calendar Pro – Fonctionnalités & avantages </b>
|
||||
----------------------------------------------------------
|
||||
|
||||
✔️ No ads or annoying popups
|
||||
✔️ No internet access needed, giving you more privacy & security
|
||||
✔️ Only the bare minimum permissions required
|
||||
✔️ Emphasis on simplicity – does what a calendar needs to do!
|
||||
✔️ Aucune publicité ou popup ennuyante
|
||||
✔️ Aucun accès à internet n\'est nécessaire, vous donnant un meilleur respect de la vie privée et de la sécurité
|
||||
✔️ Seul le strict minimum en permissions est requis
|
||||
✔️ Emphase sur la simplicité - fait ce qu\'un calendrier doit faire !
|
||||
✔️ Open source
|
||||
✔️ Fully customizable themes & calendar / event widgets
|
||||
✔️ Translated into 29 languages
|
||||
✔️ Export settings to .txt files to import to another device
|
||||
✔️ CalDAV calendar sync supported to sync events across devices
|
||||
✔️ Daily, weekly, monthly, yearly & event views on the calendar
|
||||
✔️ Supports exporting & importing events via .ics files
|
||||
✔️ Set multiple event reminders, customize event reminder sound and vibration
|
||||
✔️ Snooze option for reminders
|
||||
✔️ Easily add holidays, birthdays, anniversaries & appointments
|
||||
✔️ Customize events – start time, duration, reminders etc
|
||||
✔️ Add event attendees to each event
|
||||
✔️ Use as a personal calendar or a business calendar
|
||||
✔️ Choose between reminders & email notifications to alert you about an event
|
||||
✔️ Thèmes et widgets entièrement personnalisables
|
||||
✔️ Traduit en 29 langues
|
||||
✔️ Export des paramètres en fichier .txt pour les importer sur un autre appareil
|
||||
✔️ Synchronisation du calendrier CalDAV supportée pour synchroniser entre les appareils
|
||||
✔️ Vue journalière, semainière, mensuelle et annuelle des évènements sur le calendrier
|
||||
✔️ Supporte l\'export et l\'import des évènements via des fichiers .ics
|
||||
✔️ Paramètre de multiples rappels d\'évènements, personnalise les effets sonores et la vibration des évènements
|
||||
✔️ Option snooze pour les rappels
|
||||
✔️ Ajoute facilement des évènements d\'anniversaire et de vacances
|
||||
✔️ Personnalise les évènements - début, durée, rappels, etc.
|
||||
✔️ Note les présences sur chaque évènement
|
||||
✔️ Utilisable en tant que calendrier personnel ou professionnel
|
||||
✔️ 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
|
||||
|
||||
<b>Standalone website of Simple Calendar Pro:</b>
|
||||
<b>Site internet de Simple Calendar Pro :</b>
|
||||
https://www.simplemobiletools.com/calendar
|
||||
|
||||
<b>Facebook:</b>
|
||||
<b>Facebook :</b>
|
||||
https://www.facebook.com/simplemobiletools
|
||||
|
||||
<b>Reddit:</b>
|
||||
<b>Reddit :</b>
|
||||
https://www.reddit.com/r/SimpleMobileTools
|
||||
</string>
|
||||
|
||||
|
|
|
@ -8,15 +8,15 @@
|
|||
<string name="monthly_view">Vista mensual</string>
|
||||
<string name="yearly_view">Vista anual</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_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 -->
|
||||
<string name="widget_monthly">Calendario mensual</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 -->
|
||||
<string name="event">Evento</string>
|
||||
|
@ -24,17 +24,17 @@
|
|||
<string name="new_event">Novo evento</string>
|
||||
<string name="create_new_event">Crear evento novo</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="event_added">Evento engadido con éxito</string>
|
||||
<string name="event_updated">O evento foi actualizado correctamente</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>
|
||||
|
||||
<!-- Event Repetition -->
|
||||
<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="weekly">Semanalmente</string>
|
||||
<string name="monthly">Mensualmente</string>
|
||||
|
@ -45,11 +45,11 @@
|
|||
<string name="repeat_till">Repetir ata</string>
|
||||
<string name="forever">Sempre</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="delete_one_only">Eliminar só o evento selecionado</string>
|
||||
<string name="selection_contains_repetition">A selección contén eventos recurrentes</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_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="repeat_till_date">Repetir ata a data</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_on">Repertir os</string>
|
||||
<string name="every_day">Cada día</string>
|
||||
<string name="selected_days">Nos días selecionados</string>
|
||||
<string name="the_same_day">O mismo día</string>
|
||||
<string name="selected_days">Nos días seleccionados</string>
|
||||
<string name="the_same_day">O mesmo 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_same_day_yearly">Repetir no mesmo día cada ano</string>
|
||||
<string name="repeat_every_m">Repetir cada</string>
|
||||
|
@ -78,23 +78,23 @@
|
|||
<string name="every_f">Cada</string>
|
||||
<string name="first_f">primero</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="last_f">último</string>
|
||||
|
||||
<!-- Birthdays -->
|
||||
<string name="birthdays">Cumpleanos</string>
|
||||
<string name="add_birthdays">Engadir cumpleanos de contactos</string>
|
||||
<string name="no_birthdays">Non se atoparon cumpleanos</string>
|
||||
<string name="no_new_birthdays">Non se atoparon novos cumpleanos</string>
|
||||
<string name="birthdays_added">Engadíronse correctamente os cumpleanos</string>
|
||||
<string name="birthdays">Aniversario</string>
|
||||
<string name="add_birthdays">Engadir aniversario dos contactos</string>
|
||||
<string name="no_birthdays">Non se atoparon aniversarios</string>
|
||||
<string name="no_new_birthdays">Non se atoparon novos aniversarios</string>
|
||||
<string name="birthdays_added">Engadíronse correctamente os aniversarios</string>
|
||||
|
||||
<!-- Anniversaries -->
|
||||
<string name="anniversaries">Aniversarios</string>
|
||||
<string name="add_anniversaries">Engadir aniversarios de contactos</string>
|
||||
<string name="no_anniversaries">Non se atoparon aniversarios</string>
|
||||
<string name="no_new_anniversaries">Non se atoparon novos aniversarios</string>
|
||||
<string name="anniversaries_added">Engadíronse correctamente os aniversarios</string>
|
||||
<string name="anniversaries">Celebracións</string>
|
||||
<string name="add_anniversaries">Engadir celebracións de contactos</string>
|
||||
<string name="no_anniversaries">Non se atoparon celebracións</string>
|
||||
<string name="no_new_anniversaries">Non se atoparon novas celebracións</string>
|
||||
<string name="anniversaries_added">Engadíronse correctamente as celebracións</string>
|
||||
|
||||
<!-- Event Reminders -->
|
||||
<string name="reminder">Recordatorio</string>
|
||||
|
@ -103,26 +103,26 @@
|
|||
<string name="event_reminders">Recordatorios de eventos</string>
|
||||
|
||||
<!-- Event attendees -->
|
||||
<string name="add_another_attendee">Add another attendee</string>
|
||||
<string name="my_status">My status:</string>
|
||||
<string name="going">Going</string>
|
||||
<string name="not_going">Not going</string>
|
||||
<string name="maybe_going">Maybe going</string>
|
||||
<string name="invited">Invited</string>
|
||||
<string name="add_another_attendee">Engadir participante</string>
|
||||
<string name="my_status">O meu estado:</string>
|
||||
<string name="going">Vou</string>
|
||||
<string name="not_going">Non vou</string>
|
||||
<string name="maybe_going">Pode que vaia</string>
|
||||
<string name="invited">Convidado</string>
|
||||
|
||||
<!-- 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 -->
|
||||
<string name="import_events">Importar eventos</string>
|
||||
<string name="export_events">Exportar eventos</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="export_past_events_too">Exportar tamén eventos pasados</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="override_event_types">Sobreescribir tipos de evento no ficheiro</string>
|
||||
<string name="filename_without_ics">Nome do ficheiro (sen .ics)</string>
|
||||
<string name="override_event_types">Sobrescribir tipos de evento no ficheiro</string>
|
||||
|
||||
<!-- Event details -->
|
||||
<string name="location">Localización</string>
|
||||
|
@ -140,10 +140,10 @@
|
|||
<string name="color">Cor</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="select_event_type">Seleccione 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="select_event_type">Selecciona un tipo de evento</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="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 -->
|
||||
<string name="holidays">Festivo</string>
|
||||
|
@ -151,25 +151,26 @@
|
|||
<string name="national_holidays">Festivo nacional</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="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>
|
||||
|
||||
<!-- Settings -->
|
||||
<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="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="vibrate">Vibrar coa notificación 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="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="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="replace_description_with_location">Substituir a descrición coa localización</string>
|
||||
<string name="delete_all_events">Borrar tódolos 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="replace_description_with_location">Substituír a descrición coa localización</string>
|
||||
<string name="delete_all_events">Borrar todos os eventos</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="loop_reminders">Repetir recordatorios ata que se descarten</string>
|
||||
<string name="dim_past_events">Atenuar eventos pasados</string>
|
||||
|
@ -178,12 +179,12 @@
|
|||
<string name="system_stream">Sistema</string>
|
||||
<string name="alarm_stream">Alarma</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="default_reminder_1">Recordatorio por defecto 1</string>
|
||||
<string name="default_reminder_2">Recordatorio por defecto 2</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="new_events">Eventos novos</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="other_time">Outra hora</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 -->
|
||||
<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="store_locally_only">Gardar só localmente</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="syncing">Sincronizando…</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="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="no_synchronized_calendars">No synchronizable calendars have been found</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">Non se atoparon calendarios sincronizados</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">Segunda</string>
|
||||
<string name="tuesday_alt">Terceira</string>
|
||||
<string name="wednesday_alt">Cuarta</string>
|
||||
<string name="thursday_alt">Quinta</string>
|
||||
<string name="friday_alt">Sexta</string>
|
||||
<string name="saturday_alt">Sábado</string>
|
||||
<string name="sunday_alt">Domingo</string>
|
||||
<string name="monday_alt">luns</string>
|
||||
<string name="tuesday_alt">martes</string>
|
||||
<string name="wednesday_alt">mércores</string>
|
||||
<string name="thursday_alt">xoves</string>
|
||||
<string name="friday_alt">venres</string>
|
||||
<string name="saturday_alt">sábado</string>
|
||||
<string name="sunday_alt">domingo</string>
|
||||
|
||||
<!-- List widget config example events -->
|
||||
<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_title_3">Biblioteca</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>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">How can I remove the holidays imported via the \"Add holidays\" button?</string>
|
||||
<string name="faq_1_text">Holidays created that way are inserted in a new event type called \"Holidays\". You can go in Settings -> Manage Event Types,
|
||||
long press the given event type and delete it by selecting the trashbin.</string>
|
||||
<string name="faq_2_title">Can I sync my events via Google Calendar, or other service supporting CalDAV?</string>
|
||||
<string name="faq_2_text">Yes, just toggle \"CalDAV sync\" in the app settings and select the calendars you want to sync. However, you will need some third party app handling the synchronization between the device and servers.
|
||||
In case you want to synchronize a Google calendar, their official Calendar app will do the job. For other calendars you will need a third party sync adapter, for example 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_text">Not just displaying the actual reminder, but playing the audio is hugely affected by the system too. If you can\'t hear any sound, try going in the app settings,
|
||||
pressing the \"Audio stream used by reminders\" option and changing it to a different value. If it still won\'t work, check your sound settings, if the particular stream isn\'t muted.</string>
|
||||
<string name="faq_4_title">Does the app support time zones?</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,
|
||||
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>
|
||||
<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">Os días festivos creados dese xeito insértanse nun tipo de evento chamado \"Festivo\". Podes ir a Axustes -> Xestionar tipo de eventos,
|
||||
manter preso o tipo de evento desexado e eliminalo escollendo a Papeleira do lixo.</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">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.
|
||||
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">Vexo os recordatorios visualmente, pero non escoito audio. Que podo facer?</string>
|
||||
<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>
|
||||
<string name="faq_4_title">O app soporta zonas horarias?</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,
|
||||
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>
|
||||
|
||||
<!-- 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 - Events & Reminders</string>
|
||||
<string name="app_title">Simple Calendar Pro - Eventos & Recordatorios</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Simple mobile 2020 calendar. Schedule planner & 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">
|
||||
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 you’re 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 & appointments a breeze. You can even view everything as a simple list of events rather than in calendar view, so you <b>know exactly what’s coming up in your life and when. </b>
|
||||
A vista Diaria, Semanal e Mensual facilítanche comprobar as próximas citas & 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 & Benefits</b>
|
||||
<b>Simple Calendar Pro – Características & Melloras</b>
|
||||
----------------------------------------------------------
|
||||
|
||||
✔️ No ads or annoying popups
|
||||
✔️ No internet access needed, giving you more privacy & security
|
||||
✔️ Only the bare minimum permissions required
|
||||
✔️ Emphasis on simplicity – does what a calendar needs to do!
|
||||
✔️ Open source
|
||||
✔️ Fully customizable themes & calendar / event widgets
|
||||
✔️ Translated into 29 languages
|
||||
✔️ Export settings to .txt files to import to another device
|
||||
✔️ CalDAV calendar sync supported to sync events across devices
|
||||
✔️ Daily, weekly, monthly, yearly & event views on the calendar
|
||||
✔️ Supports exporting & importing events via .ics files
|
||||
✔️ Set multiple event reminders, customize event reminder sound and vibration
|
||||
✔️ Snooze option for reminders
|
||||
✔️ Easily add holidays, birthdays, anniversaries & appointments
|
||||
✔️ Customize events – start time, duration, reminders etc
|
||||
✔️ Add event attendees to each event
|
||||
✔️ Use as a personal calendar or a business calendar
|
||||
✔️ Choose between reminders & email notifications to alert you about an event
|
||||
✔️ Sen publicidade nin ventás emerxentes
|
||||
✔️ Non precisa acceso a internet, proporcionando máis privacidade & seguridade
|
||||
✔️ Precisa os permisos mínimos imprescindibles
|
||||
✔️ Énfase na simplicidade – fai o que ten que facer!
|
||||
✔️ Código aberto
|
||||
✔️ Aspecto personalizable & widget de calendario / eventos
|
||||
✔️ Traducido a 29 idiomas
|
||||
✔️ Exporta os axustes a un ficheiro .txt e impórtao noutro dispositivo
|
||||
✔️ Sincronización CalDAV de calendario entre varios dispositivos
|
||||
✔️ Vista de eventos no calendario Diario, Semanal, Mensual ou Anual
|
||||
✔️ Soporta a exportación & importación de eventos via ficheiros .ics
|
||||
✔️ Establece múltiples recordatorios, con son e vibración personalizable
|
||||
✔️ Posibilidade de adiar recordatorios
|
||||
✔️ Engade facilmente citas, aniversarios, vacacións & celebracións
|
||||
✔️ Personaliza os eventos – hora de inicio, duración, recordatorios etc
|
||||
✔️ Engade participantes aos eventos
|
||||
✔️ Utilízao como calendario personal ou para o traballo
|
||||
✔️ Escolle entre recordatorios & 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
|
||||
|
||||
<b>Standalone website of Simple Calendar Pro:</b>
|
||||
<b>Web propia para Simple Calendar Pro:</b>
|
||||
https://www.simplemobiletools.com/calendar
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">נהל סוגי אירועים</string>
|
||||
<string name="start_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="vibrate">רטט בהתרעת תזכורת</string>
|
||||
<string name="reminder_sound">צליל תזכורת</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Manage event types</string>
|
||||
<string name="start_day_at">Start 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="vibrate">Vibrate on reminder notification</string>
|
||||
<string name="reminder_sound">Reminder sound</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Upravljanje vrstama događaja</string>
|
||||
<string name="start_day_at">Započni 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="vibrate">Vibrirajte na obavijesti podsjetnika</string>
|
||||
<string name="reminder_sound">Zvuk podsjetnika</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Manage event types</string>
|
||||
<string name="start_day_at">Start 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="vibrate">Emlékeztetőnél rezgés</string>
|
||||
<string name="reminder_sound">Reminder sound</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Kelola kategori acara</string>
|
||||
<string name="start_day_at">Hari dimulai 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="vibrate">Getar pada notifikasi pengingat</string>
|
||||
<string name="reminder_sound">Suara pengingat</string>
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Kelola kategori acara</string>
|
||||
<string name="start_day_at">Hari dimulai 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="vibrate">Getar pada notifikasi pengingat</string>
|
||||
<string name="reminder_sound">Suara pengingat</string>
|
||||
|
|
|
@ -86,14 +86,14 @@
|
|||
<string name="birthdays">Compleanni</string>
|
||||
<string name="add_birthdays">Aggiungi compleanni dai contatti</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>
|
||||
|
||||
<!-- Anniversaries -->
|
||||
<string name="anniversaries">Anniversari</string>
|
||||
<string name="add_anniversaries">Aggiungi anniversari dai contatti</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>
|
||||
|
||||
<!-- Event Reminders -->
|
||||
|
@ -111,7 +111,7 @@
|
|||
<string name="invited">Invitato</string>
|
||||
|
||||
<!-- 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 -->
|
||||
<string name="import_events">Importa eventi</string>
|
||||
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">Gestisci i tipi di evento</string>
|
||||
<string name="start_day_at">Il giorno inizia 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="vibrate">Vibra per le notifiche di promemoria</string>
|
||||
<string name="reminder_sound">Suoneria promemoria</string>
|
||||
|
@ -191,8 +192,8 @@
|
|||
<string name="default_duration">Durata predefinita</string>
|
||||
<string name="last_used_one">L\'ultimo utilizzato</string>
|
||||
<string name="other_time">Altro periodo</string>
|
||||
<string name="highlight_weekends">Highlight weekends on some views</string>
|
||||
<string name="allow_changing_time_zones">Allow changing event time zones</string>
|
||||
<string name="highlight_weekends">Evidenzia il fine-settimana in alcune viste</string>
|
||||
<string name="allow_changing_time_zones">Abilita il cambio del fuso orario negli eventi</string>
|
||||
|
||||
<!-- CalDAV sync -->
|
||||
<string name="caldav">CalDAV</string>
|
||||
|
@ -207,9 +208,9 @@
|
|||
<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="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="no_synchronized_calendars">No synchronizable calendars have been found</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">Non é stato trovato nessun calendario sincronizzabile</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">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_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>
|
||||
<string name="faq_4_title">Does the app support time zones?</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,
|
||||
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>
|
||||
<string name="faq_4_title">L\'app supporta diversi fusi orari?</string>
|
||||
<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>
|
||||
|
||||
<!-- 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 -->
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
<string name="manage_event_types">נהל סוגי אירועים</string>
|
||||
<string name="start_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="vibrate">רטט בהתרעת תזכורת</string>
|
||||
<string name="reminder_sound">צליל תזכורת</string>
|
||||
|
|