From 11f71ce88dcde355edb4b4bec932821f043677a2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 19:06:41 +0100 Subject: [PATCH 01/89] adding some new functions in the release notes --- .../simplemobiletools/calendar/pro/activities/MainActivity.kt | 1 + app/src/main/res/values/donottranslate.xml | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index e48a0e349..1c16952b4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -861,6 +861,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { add(Release(117, R.string.release_117)) add(Release(119, R.string.release_119)) add(Release(129, R.string.release_129)) + add(Release(143, R.string.release_143)) checkWhatsNew(this, BuildConfig.VERSION_CODE) } } diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index ab34a38ae..e2fbb264c 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -2,6 +2,10 @@ + + Allow setting default start time/duration/event type for new events\n + Allow exporting/importing settings + Allow setting default event reminders, not always reuse the last events\' ones Allow changing the app launcher icon color\n From 19cb00c2eb0ec752652af4062fa76e7fc1a4a362 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 19:06:58 +0100 Subject: [PATCH 02/89] update commons to 5.7.8 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 467093211..d5401f834 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.7.7' + implementation 'com.simplemobiletools:commons:5.7.8' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' From e27eb350ee56d980445e951de0a2afed483bde83 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 19:08:51 +0100 Subject: [PATCH 03/89] update version to 6.3.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d5401f834..6d185f9d9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.calendar.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 142 - versionName "6.2.2" + versionCode 143 + versionName "6.3.0" multiDexEnabled true setProperty("archivesBaseName", "calendar") } From ebc2795eec86d9af0c3b00f490ff43db47413786 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 19:09:02 +0100 Subject: [PATCH 04/89] updating changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a1108280..8555c01be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========== +Version 6.3.0 *(2019-02-14)* +---------------------------- + + * Allow setting default start time/duration/event type for new events\n + * Allow exporting/importing settings + * Fix a glitch with repeating events older than from year 2001 + * Fixed some glitches related to overlapping events on the monthly and weekly view + Version 6.2.2 *(2019-01-25)* ---------------------------- From 851493865b726e2fab5d7b7775d421cc52f9e030 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 19:12:11 +0100 Subject: [PATCH 05/89] tweaking the changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8555c01be..3b72b9ad2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Version 6.3.0 *(2019-02-14)* * Allow setting default start time/duration/event type for new events\n * Allow exporting/importing settings - * Fix a glitch with repeating events older than from year 2001 + * Fixed a glitch with repeating events older than from year 2001 * Fixed some glitches related to overlapping events on the monthly and weekly view Version 6.2.2 *(2019-01-25)* From 1aade9c0559ab77ef2686cd12a5b659e29143702 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 21:13:33 +0100 Subject: [PATCH 06/89] improving the way default widget color is set --- app/build.gradle | 2 +- .../calendar/pro/activities/WidgetListConfigureActivity.kt | 7 +------ .../pro/activities/WidgetMonthlyConfigureActivity.kt | 7 +------ 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6d185f9d9..932d1c557 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.7.8' + implementation 'com.simplemobiletools:commons:5.7.9' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetListConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetListConfigureActivity.kt index 6f8e97f6a..73a605e30 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetListConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetListConfigureActivity.kt @@ -68,12 +68,7 @@ class WidgetListConfigureActivity : SimpleActivity() { updateColors() mBgColor = config.widgetBgColor - if (mBgColor == 1) { - mBgColor = Color.BLACK - mBgAlpha = .2f - } else { - mBgAlpha = Color.alpha(mBgColor) / 255.toFloat() - } + mBgAlpha = Color.alpha(mBgColor) / 255.toFloat() mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor)) config_bg_seekbar.setOnSeekBarChangeListener(bgSeekbarChangeListener) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetMonthlyConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetMonthlyConfigureActivity.kt index df3d1e1fd..dc159f658 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetMonthlyConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/WidgetMonthlyConfigureActivity.kt @@ -77,12 +77,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar { updateColors() mBgColor = config.widgetBgColor - if (mBgColor == 1) { - mBgColor = Color.BLACK - mBgAlpha = .2f - } else { - mBgAlpha = Color.alpha(mBgColor) / 255.toFloat() - } + mBgAlpha = Color.alpha(mBgColor) / 255.toFloat() mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor)) config_bg_seekbar.setOnSeekBarChangeListener(bgSeekbarChangeListener) From 971739631deab1307d9c5da6dfcda78425f644fa Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Feb 2019 21:18:07 +0100 Subject: [PATCH 07/89] fix #784, check storage permission before trying to import settings --- .../pro/activities/SettingsActivity.kt | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt index e56ab5ad1..ba30c49b2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt @@ -692,14 +692,18 @@ class SettingsActivity : SimpleActivity() { private fun setupImportSettings() { settings_import_holder.setOnClickListener { - FilePickerDialog(this) { - Thread { - try { - parseFile(it) - } catch (e: Exception) { - showErrorToast(e) + handlePermission(PERMISSION_READ_STORAGE) { + if (it) { + FilePickerDialog(this) { + Thread { + try { + parseFile(it) + } catch (e: Exception) { + showErrorToast(e) + } + }.start() } - }.start() + } } } } From b3bba92289a5cf18741925035bacd4295fe27925 Mon Sep 17 00:00:00 2001 From: fricyo <30796677+fricyo@users.noreply.github.com> Date: Sat, 16 Feb 2019 15:55:18 +0800 Subject: [PATCH 08/89] Update Translation --- app/src/main/res/values-zh-rTW/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ebd23336a..285a7cce6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -170,12 +170,12 @@ 預設提醒3 從活動列表小工具開啟的檢視畫面 最後的檢視畫面 - New events - Default start time - Next full hour - Default duration - Last used one - Other time + 新活動 + 預設開始時間 + 整整下個小時 + 預設持續時間 + 最後使用 + 其他時間 CalDAV From 9451a155997dc4b38713eb05c913eeafe3d8244f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20F=C4=B1r=C4=B1nc=C4=B1?= Date: Sun, 17 Feb 2019 12:35:36 +0000 Subject: [PATCH 09/89] Update strings.xml --- app/src/main/res/values-tr/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index fe67ecd8a..9fc167ccc 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -170,12 +170,12 @@ Varsayılan hatırlatıcı 3 Etkinlik listesi widget\'ından açılacak görünüm Son görünüm - New events - Default start time - Next full hour - Default duration - Last used one - Other time + Yeni etkinlikler + Varsayılan başlangıç zamanı + Gelecek tam saat + Varsayılan süre + Son kullanılan + Başka zaman CalDAV @@ -189,7 +189,7 @@ Senkronize ediliyor… Senkronizasyon tamamlandı Farklı bir renk seçin (yalnızca yerel olarak uygulanabilir) - You are not allowed to write in the selected calendar + Seçili takvime yazmanıza izin verilmiyor @@ -223,7 +223,7 @@ - An offline calendar for your events without ads, respecting your privacy. + Etkinlikleriniz için reklamsız, gizliliğinizi önemseyen bir çevrimdışı takvim. İsteğe bağlı CalDAV senkronizasyonu ile basit bir takvim. Kolayca tekrarlanan etkinlikler oluşturabilir ve hatırlatıcılar ayarlayabilir, ayrıca hafta sayılarını görüntüleyebilirsiniz. @@ -235,7 +235,7 @@ Kişiler izni yalnızca doğum günlerini ve yıldönümlerini içe aktarırken kullanılır. - Bu uygulama, daha büyük bir uygulama serisinden sadece bir parça. Geri kalanı http://www.simplemobiletools.com adresinde bulabilirsiniz + Bu uygulama, daha büyük bir uygulama serisinden sadece bir parça. Geri kalanı http://www.simplemobiletools.com adresinde bulabilirsiniz. CalDAV From 208c47e3604065e092aa60359f6d62a3cf176493 Mon Sep 17 00:00:00 2001 From: 10cents Date: Thu, 21 Feb 2019 23:40:08 +0100 Subject: [PATCH 13/89] new settings strings --- app/src/main/res/values-da/strings.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 6bb1d1336..bf97b4b75 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -169,13 +169,13 @@ Påmindelse 2 Påmindelse 3 Visning til brug i widget\'en - Last view - New events - Default start time - Next full hour - Default duration - Last used one - Other time + Seneste visning + Nye begivenheder + Standard starttidspunkt + Næste hele time + Standard varighed + Senest brugte + Anden tid CalDAV From 2dc0c0ec92736f5526e7d359c71f107879dff5ae Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 12:58:22 +0100 Subject: [PATCH 14/89] updating commmons to 5.9.3 --- app/build.gradle | 2 +- build.gradle | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 932d1c557..971115e8b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.7.9' + implementation 'com.simplemobiletools:commons:5.9.3' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/build.gradle b/build.gradle index 0be76662a..5e93b4efa 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,7 @@ allprojects { google() jcenter() maven { url "https://jitpack.io" } + maven { url "https://dl.bintray.com/simplelibraries/commons" } } } From 42aed15397a7f09394688363781af6bec832cb9a Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 16:54:07 +0100 Subject: [PATCH 15/89] fix #788, always divide caldav event start and end timestamp by a thousand --- .../calendar/pro/helpers/CalDAVHelper.kt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 55c15c003..7c63dc09e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -197,8 +197,8 @@ class CalDAVHelper(val context: Context) { val id = cursor.getLongValue(CalendarContract.Events._ID) val title = cursor.getStringValue(CalendarContract.Events.TITLE) ?: "" val description = cursor.getStringValue(CalendarContract.Events.DESCRIPTION) ?: "" - var startTS = cursor.getLongValue(CalendarContract.Events.DTSTART) - var endTS = cursor.getLongValue(CalendarContract.Events.DTEND) + val startTS = cursor.getLongValue(CalendarContract.Events.DTSTART) / 1000L + var endTS = cursor.getLongValue(CalendarContract.Events.DTEND) / 1000L val allDay = cursor.getIntValue(CalendarContract.Events.ALL_DAY) val rrule = cursor.getStringValue(CalendarContract.Events.RRULE) ?: "" val location = cursor.getStringValue(CalendarContract.Events.EVENT_LOCATION) ?: "" @@ -206,14 +206,6 @@ class CalDAVHelper(val context: Context) { val originalInstanceTime = cursor.getLongValue(CalendarContract.Events.ORIGINAL_INSTANCE_TIME) val reminders = getCalDAVEventReminders(id) - if (startTS.toString().length == 12 || startTS.toString().length == 13) { - startTS /= 1000L - } - - if (endTS.toString().length == 12 || endTS.toString().length == 13) { - endTS /= 1000L - } - if (endTS == 0L) { val duration = cursor.getStringValue(CalendarContract.Events.DURATION) ?: "" endTS = startTS + Parser().parseDurationSeconds(duration) From 29b566360b3f33e15ea7ab2054a1d34d094cbb4f Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 18:42:53 +0100 Subject: [PATCH 16/89] fix #719, allow adding birthdays/anniversaries reminders at importing --- .../calendar/pro/activities/MainActivity.kt | 48 ++++++++------ .../pro/dialogs/SetRemindersDialog.kt | 63 +++++++++++++++++++ .../main/res/layout/dialog_set_reminders.xml | 59 +++++++++++++++++ 3 files changed, 150 insertions(+), 20 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SetRemindersDialog.kt create mode 100644 app/src/main/res/layout/dialog_set_reminders.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index 1c16952b4..01ffac298 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -21,6 +21,7 @@ import com.simplemobiletools.calendar.pro.databases.EventsDatabase import com.simplemobiletools.calendar.pro.dialogs.ExportEventsDialog import com.simplemobiletools.calendar.pro.dialogs.FilterEventTypesDialog import com.simplemobiletools.calendar.pro.dialogs.ImportEventsDialog +import com.simplemobiletools.calendar.pro.dialogs.SetRemindersDialog import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.fragments.* import com.simplemobiletools.calendar.pro.helpers.* @@ -407,16 +408,19 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private fun tryAddBirthdays() { handlePermission(PERMISSION_READ_CONTACTS) { if (it) { - Thread { - addContactEvents(true) { - if (it > 0) { - toast(R.string.birthdays_added) - updateViewPager() - } else { - toast(R.string.no_birthdays) + SetRemindersDialog(this) { + val reminders = it + Thread { + addContactEvents(true, reminders) { + if (it > 0) { + toast(R.string.birthdays_added) + updateViewPager() + } else { + toast(R.string.no_birthdays) + } } - } - }.start() + }.start() + } } else { toast(R.string.no_contacts_permission) } @@ -426,16 +430,19 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private fun tryAddAnniversaries() { handlePermission(PERMISSION_READ_CONTACTS) { if (it) { - Thread { - addContactEvents(false) { - if (it > 0) { - toast(R.string.anniversaries_added) - updateViewPager() - } else { - toast(R.string.no_anniversaries) + SetRemindersDialog(this) { + val reminders = it + Thread { + addContactEvents(false, reminders) { + if (it > 0) { + toast(R.string.anniversaries_added) + updateViewPager() + } else { + toast(R.string.no_anniversaries) + } } - } - }.start() + }.start() + } } else { toast(R.string.no_contacts_permission) } @@ -450,7 +457,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { }, Toast.LENGTH_LONG) } - private fun addContactEvents(birthdays: Boolean, callback: (Int) -> Unit) { + private fun addContactEvents(birthdays: Boolean, reminders: ArrayList, callback: (Int) -> Unit) { var eventsAdded = 0 val uri = ContactsContract.Data.CONTENT_URI val projection = arrayOf(ContactsContract.Contacts.DISPLAY_NAME, @@ -486,7 +493,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { val timestamp = date.time / 1000L val source = if (birthdays) SOURCE_CONTACT_BIRTHDAY else SOURCE_CONTACT_ANNIVERSARY val lastUpdated = cursor.getLongValue(ContactsContract.CommonDataKinds.Event.CONTACT_LAST_UPDATED_TIMESTAMP) - val event = Event(null, timestamp, timestamp, name, importId = contactId, flags = FLAG_ALL_DAY, repeatInterval = YEAR, + val event = Event(null, timestamp, timestamp, name, reminder1Minutes = reminders[0], reminder2Minutes = reminders[1], + reminder3Minutes = reminders[2], importId = contactId, flags = FLAG_ALL_DAY, repeatInterval = YEAR, eventType = eventTypeId, source = source, lastUpdated = lastUpdated) if (!importIDs.contains(contactId)) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SetRemindersDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SetRemindersDialog.kt new file mode 100644 index 000000000..bdf0d2805 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/SetRemindersDialog.kt @@ -0,0 +1,63 @@ +package com.simplemobiletools.calendar.pro.dialogs + +import android.app.Activity +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.calendar.pro.R +import com.simplemobiletools.calendar.pro.extensions.config +import com.simplemobiletools.commons.extensions.* +import kotlinx.android.synthetic.main.dialog_set_reminders.view.* + +class SetRemindersDialog(val activity: Activity, val callback: (reminders: ArrayList) -> Unit) { + private var mReminder1Minutes = -1 + private var mReminder2Minutes = -1 + private var mReminder3Minutes = -1 + + init { + val view = activity.layoutInflater.inflate(R.layout.dialog_set_reminders, null).apply { + set_reminders_image.applyColorFilter(context.config.textColor) + set_reminders_1.text = activity.getFormattedMinutes(mReminder1Minutes) + set_reminders_2.text = activity.getFormattedMinutes(mReminder1Minutes) + set_reminders_3.text = activity.getFormattedMinutes(mReminder1Minutes) + + set_reminders_1.setOnClickListener { + activity.showPickSecondsDialogHelper(mReminder1Minutes) { + mReminder1Minutes = if (it <= 0) it else it / 60 + set_reminders_1.text = activity.getFormattedMinutes(mReminder1Minutes) + if (mReminder1Minutes != -1) { + set_reminders_2.beVisible() + } + } + } + + set_reminders_2.setOnClickListener { + activity.showPickSecondsDialogHelper(mReminder2Minutes) { + mReminder2Minutes = if (it <= 0) it else it / 60 + set_reminders_2.text = activity.getFormattedMinutes(mReminder2Minutes) + if (mReminder2Minutes != -1) { + set_reminders_3.beVisible() + } + } + } + + set_reminders_3.setOnClickListener { + activity.showPickSecondsDialogHelper(mReminder3Minutes) { + mReminder3Minutes = if (it <= 0) it else it / 60 + set_reminders_3.text = activity.getFormattedMinutes(mReminder3Minutes) + } + } + } + + AlertDialog.Builder(activity) + .setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() } + .setNegativeButton(R.string.cancel, null) + .create().apply { + activity.setupDialogStuff(view, this, R.string.event_reminders) + } + } + + private fun dialogConfirmed() { + val reminders = arrayListOf(mReminder1Minutes, mReminder2Minutes, mReminder3Minutes) + reminders.sort() + callback(reminders) + } +} diff --git a/app/src/main/res/layout/dialog_set_reminders.xml b/app/src/main/res/layout/dialog_set_reminders.xml new file mode 100644 index 000000000..09b8597af --- /dev/null +++ b/app/src/main/res/layout/dialog_set_reminders.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + From e6541f9c39779fd435815461f0d1449f842d0020 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 18:44:38 +0100 Subject: [PATCH 17/89] update birthday/anniversary repeat rules, repeat them on the same day --- .../simplemobiletools/calendar/pro/activities/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index 01ffac298..dcbbb41fc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -494,7 +494,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { val source = if (birthdays) SOURCE_CONTACT_BIRTHDAY else SOURCE_CONTACT_ANNIVERSARY val lastUpdated = cursor.getLongValue(ContactsContract.CommonDataKinds.Event.CONTACT_LAST_UPDATED_TIMESTAMP) val event = Event(null, timestamp, timestamp, name, reminder1Minutes = reminders[0], reminder2Minutes = reminders[1], - reminder3Minutes = reminders[2], importId = contactId, flags = FLAG_ALL_DAY, repeatInterval = YEAR, + reminder3Minutes = reminders[2], importId = contactId, flags = FLAG_ALL_DAY, repeatInterval = YEAR, repeatRule = REPEAT_SAME_DAY, eventType = eventTypeId, source = source, lastUpdated = lastUpdated) if (!importIDs.contains(contactId)) { From d4179f1a66b62b1f96c01e58cad128d0b16c9cd0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 19:53:22 +0100 Subject: [PATCH 18/89] updating commons to 5.9.5 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 971115e8b..9ee7d97e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.9.3' + implementation 'com.simplemobiletools:commons:5.9.5' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' From c402a68100c6652ef673a78e741694e1d96587ae Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 23:18:08 +0100 Subject: [PATCH 19/89] simplify primary color getting at the EventsHelper --- .../com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt index 52aa5af7f..aee17da2b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt @@ -253,9 +253,10 @@ class EventsHelper(val context: Context) { eventTypeColors.put(it.id!!, it.color) } + val primaryColor = context.resources.getColor(R.color.color_primary) events.forEach { it.updateIsPastEvent() - it.color = eventTypeColors.get(it.eventType) ?: context.resources.getColor(R.color.color_primary) + it.color = eventTypeColors.get(it.eventType) ?: primaryColor } callback(events) From 72dc83ba1c50f8c9df976e87a932e1034999ec6f Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 22 Feb 2019 23:30:21 +0100 Subject: [PATCH 20/89] adding content descriptions to some views --- .../com/simplemobiletools/calendar/pro/extensions/Context.kt | 1 + .../com/simplemobiletools/calendar/pro/fragments/DayFragment.kt | 1 + .../simplemobiletools/calendar/pro/fragments/MonthFragment.kt | 1 + .../simplemobiletools/calendar/pro/fragments/WeekFragment.kt | 2 ++ 4 files changed, 5 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt index a722cb91d..0d5d36f5c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt @@ -408,6 +408,7 @@ fun Context.addDayEvents(day: DayMonthly, linearLayout: LinearLayout, res: Resou text = it.title.replace(" ", "\u00A0") // allow word break by char background = backgroundDrawable layoutParams = eventLayoutParams + contentDescription = it.title linearLayout.addView(this) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt index c321d965e..9a18b1b4c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt @@ -81,6 +81,7 @@ class DayFragment : Fragment() { val day = Formatter.getDayTitle(context!!, mDayCode) mHolder.top_value.apply { text = day + contentDescription = text setOnClickListener { pickDay() } setTextColor(context.config.textColor) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt index c114ef9b1..a5ff52c6c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt @@ -100,6 +100,7 @@ class MonthFragment : Fragment(), MonthlyCalendar { activity?.runOnUiThread { mHolder.top_value.apply { text = month + contentDescription = text setTextColor(mConfig.textColor) } updateDays(days) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt index b5f346b6b..f67f605f2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragment.kt @@ -322,6 +322,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { background = ColorDrawable(backgroundColor) setTextColor(textColor) text = event.title + contentDescription = text layout.addView(this) y = startMinutes * minuteHeight (layoutParams as RelativeLayout.LayoutParams).apply { @@ -406,6 +407,7 @@ class WeekFragment : Fragment(), WeeklyCalendar { setTextColor(textColor) text = event.title + contentDescription = text val startDateTime = Formatter.getDateTimeFromTS(event.startTS) val endDateTime = Formatter.getDateTimeFromTS(event.endTS) From 43bed800c2214c7ea0a251db66385ff3d5f88317 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 23 Feb 2019 19:32:58 +0100 Subject: [PATCH 21/89] update commons to 5.9.6 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9ee7d97e7..8d8092827 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.9.5' + implementation 'com.simplemobiletools:commons:5.9.6' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' From 3cba59e2aa03f80399019f2fd74089a1ce5298c4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 23 Feb 2019 19:40:46 +0100 Subject: [PATCH 22/89] update version to 6.3.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8d8092827..7024f2204 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.calendar.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 143 - versionName "6.3.0" + versionCode 144 + versionName "6.3.1" multiDexEnabled true setProperty("archivesBaseName", "calendar") } From 841bd232853cfffef803ad2a681291b701f72696 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 23 Feb 2019 19:40:52 +0100 Subject: [PATCH 23/89] updating changelog --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b72b9ad2..1e5d02a45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,17 @@ Changelog ========== +Version 6.3.1 *(2019-02-23)* +---------------------------- + + * Allow adding event reminders to birthdays/anniversaries + * Filled content description of some views to improve the UX of visually impaired people + * A few more stability and UX improvements here and there + Version 6.3.0 *(2019-02-14)* ---------------------------- - * Allow setting default start time/duration/event type for new events\n + * Allow setting default start time/duration/event type for new events * Allow exporting/importing settings * Fixed a glitch with repeating events older than from year 2001 * Fixed some glitches related to overlapping events on the monthly and weekly view From 919fb920be6dabeb179b6f8b9696a76e3cbac6c7 Mon Sep 17 00:00:00 2001 From: spkprs Date: Sun, 24 Feb 2019 00:49:21 +0200 Subject: [PATCH 24/89] Update strings.xml --- app/src/main/res/values-el/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a3f2734f3..e36b08ccd 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -49,7 +49,7 @@ Ενημέρωση μόνο του επιλεγμένου περιστατικού Ενημέρωση όλων των περιστατικών Επαναλάβετε μέχρι μια ημερομηνία - Stop repeating after x occurrences + Παύση επαναλήψεων μετά από x εμφανίσεις Επαναλάβετε για πάντα times Επανάληψη @@ -175,7 +175,7 @@ Την επόμενη πλήρη ώρα Προεπιλεγμένη διάρκεια Τελευταία χρήση - Other time + Άλλη ώρα CalDAV From c76ab282839b35b0e7e616a1aeccd71f3c5d9284 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 24 Feb 2019 12:27:32 +0100 Subject: [PATCH 25/89] updating the tablet screenshots --- .../images/sevenInchScreenshots/tablet-7.png | Bin 51523 -> 131215 bytes .../images/tenInchScreenshots/tablet-10.png | Bin 98003 -> 152774 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/fastlane/metadata/android/en-US/images/sevenInchScreenshots/tablet-7.png b/fastlane/metadata/android/en-US/images/sevenInchScreenshots/tablet-7.png index 81571cbde58959d7676e081c1e87b24cc316fd41..df6f6ea8c78ca97fe1b5d6ffde5f28bfb8cc5379 100644 GIT binary patch literal 131215 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 z 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�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 HlQ;hdNv78; literal 51523 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 E0(ZtURsaA1 diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/tablet-10.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/tablet-10.png index fb53897ac73bad4f308297d7ba02119254cf30f7..34d04eaab66d9a461086f3bae8d014a326d82521 100644 GIT binary patch literal 152774 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

q(%7Cy@5m+EO!3q!~K;hzVwm4$x$VK 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

4{dSHBu-Fcl7O4^5#0r)Y23S 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 E4--*t>Hq)$ literal 98003 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 From d52c1431e19677dfd690ec3d7c4e7a50200bebc0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 24 Feb 2019 17:49:16 +0100 Subject: [PATCH 26/89] correcting the app short description --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index f5446c2b5..e5a241b65 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -224,7 +224,7 @@ - Offline kalendár pre vaše udalosti bez reklám, rešpektujúca vaše súkromie. + An offline calendar for your events without ads, respecting your privacy. A simple calendar with optional CalDAV synchronization. You can easily create recurring events and setup reminders, it can also display week numbers. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 81487f4e9..22b0e8cf8 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -224,7 +224,7 @@ - Jednoduchý kalendár s udalosťami, upraviteľným widgetom a bez reklám. + Offline kalendár pre vaše udalosti bez reklám, rešpektujúca vaše súkromie. Jednoduchý kalendár s možnosťou CalDAV synchronizácie. Viete si jednoducho vytvoriť opakujúce sa udalosti s pripomienkami, alebo zobraziť čísla týždňov. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bfb4a1285..4c24695a1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -224,7 +224,7 @@ - Offline kalendár pre vaše udalosti bez reklám, rešpektujúca vaše súkromie. + An offline calendar for your events without ads, respecting your privacy. A simple calendar with optional CalDAV synchronization. You can easily create recurring events and setup reminders, it can also display week numbers. From 4e1bd263a6b2006585aceade7e332233b4b211b5 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 25 Feb 2019 12:03:29 +0100 Subject: [PATCH 27/89] updating the feature image --- .../android/en-US/images/featureGraphic.png | Bin 2712 -> 46657 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/fastlane/metadata/android/en-US/images/featureGraphic.png b/fastlane/metadata/android/en-US/images/featureGraphic.png index e328550e435a2362cb54adeb2235ecf5fffbaa40..faa9471fe494e08546f73d9f66e5240dcc993620 100644 GIT binary patch literal 46657 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

-h<16un#}k?v?6=7= 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 literal 2712 zcmeAS@N?(olHy`uVBq!ia0y~yU;#22zi==CDIJ#+H9$(T#5JNMI6tkVJh3R1!7(L2 zDOJHUH!(dmC^a#qvhZZ84Fdz0m8XkiNX4x;ckHu+10@bTRNKp|8pP0{9etvI9>HghZr*tk|9*O|A|@Z`mQfv;KT z&eqPeJY0GIp2>Ij{NRkRV+;%pb2OqD85lT#PI3TZ29Og4fVcsO!Om6yF@P#im4G~? z0K}Lw*fkSrEL<~&g>V_HHaCErf>j2OhX$FO96){`!A%Mv^%&vQ;g!VdU?H}p9aBa zfLz-`%_0*gq})TA(NM?gq1g%Rf*Ekq}A^K;@XB zgx`~3JtU+i2ap{kxJdz|9wX*x?WRXlA{Yf0Uifk4eqAnqN_gSBpu}fWY=Q1hP}s|V z-g@ioZw_Tsr>#DDh_{+S=?RUJ!k?8#xEj`I%V?@k&p%qZ?cHhhhqu=mG6MbnlJ!7I z<)c@7EzV!7{;ji>;l#-qo0ofgXBYO}jEv{~Ex-3MD9Bzuz4PSEkDsq6&U<_G?*ny~ zl==Tb0ZI43#Gg7yjbMzZZ{YD*!*F8Pzv*YMHQ%&2FJ{$#?9W-t>Vx7Y&Daec zDq##Mu@*O8T?t!cJKM0A6X?yLy}H?NOJ9d3O9?kPR|?U z)ij^;K!NBiQEy;Hzvlx7Fw_Pl6fq+Q9)C2>(O{dg#_Yhk347EjfFcxYXecnO0ZL&c eF$Fz)RtW~(fXnaSyt^0)((UQ$=d#Wzp$Pz;=v*5B From 411490000f5b19569b746a549a1b0133f92249ac Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 14:27:00 +0100 Subject: [PATCH 28/89] updating commons --- app/build.gradle | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7024f2204..c2633aeca 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,7 +52,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.9.6' + implementation 'com.simplemobiletools:commons:5.10.0' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/build.gradle b/build.gradle index 5e93b4efa..3562f9914 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.android.tools.build:gradle:3.3.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong From 0cc0aa96df6be938b3a58ab9583e92e533f8dab3 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 19:00:09 +0100 Subject: [PATCH 29/89] fix #797, fix some glitch related to monthly repetition at the end of the month --- .../kotlin/com/simplemobiletools/calendar/pro/models/Event.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt index 01e617bd5..4e6751764 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt @@ -80,7 +80,7 @@ data class Event( while (newDateTime.dayOfMonth().maximumValue < Formatter.getDateTimeFromTS(original.startTS).dayOfMonth().maximumValue) { newDateTime = newDateTime.plusMonths(repeatInterval / MONTH) - newDateTime = newDateTime.withDayOfMonth(newDateTime.dayOfMonth().maximumValue) + newDateTime = newDateTime.withDayOfMonth(currStart.dayOfMonth) } return newDateTime } From a302c3f65949a7e56e1f92431511eeebe4691f34 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 19:11:01 +0100 Subject: [PATCH 30/89] adding a new string for Go to date --- app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-az/strings.xml | 1 + app/src/main/res/values-br/strings.xml | 1 + app/src/main/res/values-cs/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-el/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-gl/strings.xml | 1 + app/src/main/res/values-hi-rIN/strings.xml | 1 + app/src/main/res/values-hr/strings.xml | 1 + app/src/main/res/values-hu/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-iw/strings.xml | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-ko/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nb/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-no/strings.xml | 1 + app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-sk/strings.xml | 1 + app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 30 files changed, 30 insertions(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e5a241b65..def1feba0 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -10,6 +10,7 @@ لائحة أحداث بسيطة Seems like you don\'t have any upcoming events. الذهاب الى اليوم + Go to date تقويم شهري diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 2e1b89cc7..63883139a 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -10,6 +10,7 @@ Sadə hadisələr siyahısı Deyəsən yaxınlarda heçbir hadisə yoxdur. Bugünə get + Go to date Aylıq Təqvim diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 447a7b0d8..7ed309e24 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -10,6 +10,7 @@ Roll darvoudoù een War a-seblant n\'ho peus darvoud ebet da zont. Mont da hiziv + Go to date Deiziataer miziek diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7e55a66c6..e542134a2 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -10,6 +10,7 @@ Jednoduchý seznam událostí Nemáte žádné nadcházející události. Přejít na dnešek + Go to date Měsíční kalendář diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index bf97b4b75..a34c34ee4 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -10,6 +10,7 @@ Begivenhedsliste Du ser ikke ud til at have nogen forestående begivenheder. Gå til i dag + Go to date Månedlig kalender diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b452a6cfa..713183e2e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -10,6 +10,7 @@ Einfache Terminliste Scheint so, als hättest du keine anstehenden Termine. Springe zu Heute + Go to date Monatskalender diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index e36b08ccd..56747ccb2 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -10,6 +10,7 @@ Απλή λίστα εκδηλώσεων Φαίνεται πως δεν έχετε επερχόμενες εκδηλώσεις. Πηγαίνετε στο σήμερα + Go to date Μηνιαίο ημερολόγιο diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 9bee7c773..fbbe1eece 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -10,6 +10,7 @@ Lista de eventos sencilla Parece que no tienes ningún evento próximo. Ir al día de hoy + Go to date Calendario mensual diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f7f107fb4..535b13979 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -10,6 +10,7 @@ Liste simple d\'événements Il semblerait que vous n\'ayez aucun événement à venir. Aller à aujourd\'hui + Go to date Calendrier mensuel diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 9226332ea..2b5749d2f 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -10,6 +10,7 @@ Lista de eventos simple Semella que non ten ningún evento próximo. Ir ao día de hoxe + Go to date Calendario mensual diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 779d42516..276681083 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -10,6 +10,7 @@ सरल इवेंट सूची Seems like you don\'t have any upcoming events. Go to today + Go to date Calendar monthly diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 805eaa53b..3b5d5ef64 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -10,6 +10,7 @@ Jednostavan popis događaja Izgleda da nemate nadolazećih događaja. Idi na danas + Go to date Mjesečni raspored diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 0e68b26fe..a63dd0b47 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -10,6 +10,7 @@ Egyszerű bejegyzéslista Seems like you don\'t have any upcoming events. Go to today + Go to date Havi naptár diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index cb584e504..6c6d20e8c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -10,6 +10,7 @@ Lista semplice deli eventi Non c\'è nessun evento imminente. Vai a oggi + Go to date Calendario mensile diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 2929d5a8f..b4eaeb115 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -10,6 +10,7 @@ רשימת אירועים פשוטה נראה שאין לך אירועים בזמן הקרוב. Go to today + Go to date לוח השנה חודשית diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6febd4965..62a0e5a40 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -10,6 +10,7 @@ シンプル 予定 リスト 今後の予定はありません。 今日へ移動 + Go to date カレンダー月 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 47bcc98a6..161e7f67a 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -10,6 +10,7 @@ 간단한 이벤트 목록 다가올 이벤트가 없는 것 같습니다. 오늘로 이동 + Go to date 월별 달력 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index be6bef018..e597e5aaa 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -10,6 +10,7 @@ Paprastas įvykių sąrašas Atrodo jog Jūs neturite jokių įvyksiančių įvykių. Eiti į šiandieną + Go to date Mėnesio kalendorius diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index cf12f52d8..692fdf7f9 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -10,6 +10,7 @@ Enkel hendelsesliste Ser ut som du ikke har noen kommende hendelser. Gå til idag + Go to date Månedskalender diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1ef91db9c..38a68cd8c 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -10,6 +10,7 @@ Lijst Niets gepland. Naar vandaag + Go to date Maandweergave diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index c1b1eb462..6892fa9d9 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -10,6 +10,7 @@ Enkel hendelsesliste Ser ut som du ikke har noen kommende hendelser. Gå til idag + Go to date Månedskalender diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index cbff19fce..996afcc80 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -10,6 +10,7 @@ Prosta lista wydarzeń Wygląda na to, że nie masz żadnych nadchodzących wydarzeń. Przejdź do dnia dzisiejszego + Go to date Prosty kalendarz - widok miesięczny diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 297124ae1..9f6e41777 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -10,6 +10,7 @@ Lista de eventos Parece que você não tem próximos eventos. Ir para hoje + Go to date Calendário mensal diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d641c51ae..107f43f2d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -10,6 +10,7 @@ Lista de eventos Parece que você não tem eventos para breve Ir para hoje + Go to date Calendário mensal diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e38463045..964d676c7 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -10,6 +10,7 @@ Список событий Похоже, нет предстоящих событий. Сегодня + Go to date Календарь на месяц diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 22b0e8cf8..4bc1c1353 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -10,6 +10,7 @@ Jednoduchý zoznam Nemáte žiadne naplánované udalosti. Prejsť na dnešok + Prejsť na dátum Kalendár mesačný diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index f7e1eb566..4bb15a868 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -10,6 +10,7 @@ Händelselista Det verkar som att du inte har några kommande händelser. Gå till idag + Go to date Kalender månadsvis diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9fc167ccc..e17b59fa8 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -10,6 +10,7 @@ Basit etkinlik listesi Yaklaşan etkinlikleriniz yok gibi görünüyor. Bugüne git + Go to date Aylık takvim diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 285a7cce6..da2a095df 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -10,6 +10,7 @@ 簡易活動列表 你近期似乎沒有任何活動。 前往今天 + Go to date 月曆 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4c24695a1..76de84de5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,6 +10,7 @@ Simple event list Seems like you don\'t have any upcoming events. Go to today + Go to date Calendar monthly From bbd34a98701b43fe8fd7304bf35486bf12f8c3f2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 19:40:57 +0100 Subject: [PATCH 31/89] adding a menu button for Go To Date --- .../calendar/pro/activities/MainActivity.kt | 5 +++++ .../calendar/pro/fragments/DayFragmentsHolder.kt | 4 ++++ .../calendar/pro/fragments/EventListFragment.kt | 5 +++-- .../calendar/pro/fragments/MonthFragmentsHolder.kt | 4 ++++ .../calendar/pro/fragments/MyFragmentHolder.kt | 2 ++ .../calendar/pro/fragments/WeekFragmentsHolder.kt | 4 ++++ .../calendar/pro/fragments/YearFragmentsHolder.kt | 4 ++++ app/src/main/res/menu/menu_main.xml | 4 ++++ 8 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index dcbbb41fc..e1aa3fd2b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -173,6 +173,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { when (item.itemId) { R.id.change_view -> showViewDialog() R.id.go_to_today -> goToToday() + R.id.go_to_date -> goToDate() R.id.filter -> showFilterDialog() R.id.refresh_caldav_calendars -> refreshCalDAVCalendars(true) R.id.add_holidays -> addHolidays() @@ -340,6 +341,10 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { currentFragments.last().goToToday() } + private fun goToDate() { + currentFragments.last().goToDate() + } + private fun resetActionBarTitle() { updateActionBarTitle(getString(R.string.app_launcher_name)) updateActionBarSubtitle("") diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt index f7cf5a36c..087efeb90 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt @@ -99,6 +99,10 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener { setupFragment() } + override fun goToDate() { + + } + override fun refreshEvents() { (viewPager?.adapter as? MyDayPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt index f6d1d9802..7c36e599e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt @@ -173,8 +173,9 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { checkEvents() } - override fun goToToday() { - } + override fun goToToday() {} + + override fun goToDate() {} override fun refreshEvents() { checkEvents() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt index 4fc125c97..6eb2508e6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt @@ -99,6 +99,10 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener { setupFragment() } + override fun goToDate() { + + } + override fun refreshEvents() { (viewPager?.adapter as? MyMonthPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt index 49dcb46a4..bf5d43c6b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt @@ -5,6 +5,8 @@ import androidx.fragment.app.Fragment abstract class MyFragmentHolder : Fragment() { abstract fun goToToday() + abstract fun goToDate() + abstract fun refreshEvents() abstract fun shouldGoToTodayBeVisible(): Boolean diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt index f8285522f..fb8130d01 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt @@ -130,6 +130,10 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { setupFragment() } + override fun goToDate() { + + } + override fun refreshEvents() { (viewPager?.adapter as? MyWeekPagerAdapter)?.updateCalendars(viewPager!!.currentItem) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt index 2fd6f8478..3e079fcf8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt @@ -83,6 +83,10 @@ class YearFragmentsHolder : MyFragmentHolder() { setupFragment() } + override fun goToDate() { + + } + override fun refreshEvents() { (viewPager?.adapter as? MyYearPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0) } diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 9d011d54a..2adc71e60 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -27,6 +27,10 @@ android:icon="@drawable/ic_repeat" android:title="@string/refresh_caldav_calendars" app:showAsAction="ifRoom"/> + Date: Wed, 6 Mar 2019 20:13:49 +0100 Subject: [PATCH 32/89] moving the Go To Date handling of month fragment to the fragment holder --- .../calendar/pro/activities/MainActivity.kt | 6 ++-- .../pro/fragments/DayFragmentsHolder.kt | 2 +- .../pro/fragments/EventListFragment.kt | 2 +- .../calendar/pro/fragments/MonthFragment.kt | 31 +------------------ .../pro/fragments/MonthFragmentsHolder.kt | 28 ++++++++++++++++- .../pro/fragments/MyFragmentHolder.kt | 2 +- .../pro/fragments/WeekFragmentsHolder.kt | 2 +- .../pro/fragments/YearFragmentsHolder.kt | 2 +- 8 files changed, 36 insertions(+), 39 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index e1aa3fd2b..f028b8e48 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -173,7 +173,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { when (item.itemId) { R.id.change_view -> showViewDialog() R.id.go_to_today -> goToToday() - R.id.go_to_date -> goToDate() + R.id.go_to_date -> showGoToDateDialog() R.id.filter -> showFilterDialog() R.id.refresh_caldav_calendars -> refreshCalDAVCalendars(true) R.id.add_holidays -> addHolidays() @@ -341,8 +341,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { currentFragments.last().goToToday() } - private fun goToDate() { - currentFragments.last().goToDate() + fun showGoToDateDialog() { + currentFragments.last().showGoToDateDialog() } private fun resetActionBarTitle() { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt index 087efeb90..4c3a81122 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt @@ -99,7 +99,7 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener { setupFragment() } - override fun goToDate() { + override fun showGoToDateDialog() { } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt index 7c36e599e..9527b8eb3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/EventListFragment.kt @@ -175,7 +175,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener { override fun goToToday() {} - override fun goToDate() {} + override fun showGoToDateDialog() {} override fun refreshEvents() { checkEvents() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt index a5ff52c6c..e83e21e08 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragment.kt @@ -6,9 +6,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.DatePicker import android.widget.RelativeLayout -import androidx.appcompat.app.AlertDialog import androidx.fragment.app.Fragment import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.MainActivity @@ -21,9 +19,6 @@ 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.getDialogTheme -import com.simplemobiletools.commons.extensions.setupDialogStuff import kotlinx.android.synthetic.main.fragment_month.view.* import kotlinx.android.synthetic.main.top_navigation.view.* import org.joda.time.DateTime @@ -137,35 +132,11 @@ class MonthFragment : Fragment(), MonthlyCalendar { mHolder.top_value.apply { setTextColor(mConfig.textColor) setOnClickListener { - showMonthDialog() + (activity as MainActivity).showGoToDateDialog() } } } - private fun showMonthDialog() { - activity!!.setTheme(context!!.getDialogTheme()) - val view = layoutInflater.inflate(R.layout.date_picker, null) - val datePicker = view.findViewById(R.id.date_picker) - datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).beGone() - - val dateTime = DateTime(mCalendar!!.mTargetDate.toString()) - datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null) - - AlertDialog.Builder(context!!) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok) { dialog, which -> positivePressed(dateTime, datePicker) } - .create().apply { - activity?.setupDialogStuff(view, this) - } - } - - private fun positivePressed(dateTime: DateTime, datePicker: DatePicker) { - val month = datePicker.month + 1 - val year = datePicker.year - val newDateTime = dateTime.withDate(year, month, 1) - listener?.goToDateTime(newDateTime) - } - private fun updateDays(days: ArrayList) { mHolder.month_view_wrapper.updateDays(days) { (activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(it.code)) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt index 6eb2508e6..e9eebd787 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MonthFragmentsHolder.kt @@ -1,10 +1,13 @@ package com.simplemobiletools.calendar.pro.fragments +import android.content.res.Resources import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.DatePicker +import androidx.appcompat.app.AlertDialog import androidx.viewpager.widget.ViewPager import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.MainActivity @@ -14,6 +17,9 @@ import com.simplemobiletools.calendar.pro.extensions.getMonthCode import com.simplemobiletools.calendar.pro.helpers.DAY_CODE import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.interfaces.NavigationListener +import com.simplemobiletools.commons.extensions.beGone +import com.simplemobiletools.commons.extensions.getDialogTheme +import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.updateActionBarTitle import com.simplemobiletools.commons.views.MyViewPager import kotlinx.android.synthetic.main.fragment_months_holder.view.* @@ -99,8 +105,28 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener { setupFragment() } - override fun goToDate() { + override fun showGoToDateDialog() { + activity!!.setTheme(context!!.getDialogTheme()) + val view = layoutInflater.inflate(R.layout.date_picker, null) + val datePicker = view.findViewById(R.id.date_picker) + datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).beGone() + val dateTime = DateTime(Formatter.getDateTimeFromCode(currentDayCode).toString()) + 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) + } + } + + private fun datePicked(dateTime: DateTime, datePicker: DatePicker) { + val month = datePicker.month + 1 + val year = datePicker.year + val newDateTime = dateTime.withDate(year, month, 1) + goToDateTime(newDateTime) } override fun refreshEvents() { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt index bf5d43c6b..a7708e98e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/MyFragmentHolder.kt @@ -5,7 +5,7 @@ import androidx.fragment.app.Fragment abstract class MyFragmentHolder : Fragment() { abstract fun goToToday() - abstract fun goToDate() + abstract fun showGoToDateDialog() abstract fun refreshEvents() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt index fb8130d01..b55858e87 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt @@ -130,7 +130,7 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { setupFragment() } - override fun goToDate() { + override fun showGoToDateDialog() { } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt index 3e079fcf8..c537186fa 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt @@ -83,7 +83,7 @@ class YearFragmentsHolder : MyFragmentHolder() { setupFragment() } - override fun goToDate() { + override fun showGoToDateDialog() { } From b62b36c8b642748d491321830f496a5ba9871d89 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 20:18:18 +0100 Subject: [PATCH 33/89] implementing the Go To Date button of the daily fragment --- .../calendar/pro/fragments/DayFragment.kt | 34 +++---------------- .../pro/fragments/DayFragmentsHolder.kt | 24 +++++++++++++ 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt index 9a18b1b4c..5ed1a9be8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragment.kt @@ -5,12 +5,11 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.DatePicker import android.widget.RelativeLayout -import androidx.appcompat.app.AlertDialog import androidx.fragment.app.Fragment import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.EventActivity +import com.simplemobiletools.calendar.pro.activities.MainActivity import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.adapters.DayEventsAdapter import com.simplemobiletools.calendar.pro.extensions.config @@ -22,11 +21,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.getDialogTheme -import com.simplemobiletools.commons.extensions.setupDialogStuff import kotlinx.android.synthetic.main.fragment_day.view.* import kotlinx.android.synthetic.main.top_navigation.view.* -import org.joda.time.DateTime import java.util.* class DayFragment : Fragment() { @@ -82,35 +78,13 @@ class DayFragment : Fragment() { mHolder.top_value.apply { text = day contentDescription = text - setOnClickListener { pickDay() } + setOnClickListener { + (activity as MainActivity).showGoToDateDialog() + } setTextColor(context.config.textColor) } } - private fun pickDay() { - activity!!.setTheme(context!!.getDialogTheme()) - val view = layoutInflater.inflate(R.layout.date_picker, null) - val datePicker = view.findViewById(R.id.date_picker) - - val dateTime = Formatter.getDateTimeFromCode(mDayCode) - datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null) - - AlertDialog.Builder(context!!) - .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok) { dialog, which -> positivePressed(dateTime, datePicker) } - .create().apply { - activity?.setupDialogStuff(view, this) - } - } - - private fun positivePressed(dateTime: DateTime, datePicker: DatePicker) { - val month = datePicker.month + 1 - val year = datePicker.year - val day = datePicker.dayOfMonth - val newDateTime = dateTime.withDate(year, month, day) - mListener?.goToDateTime(newDateTime) - } - fun updateCalendar() { val startTS = Formatter.getDayStartTS(mDayCode) val endTS = Formatter.getDayEndTS(mDayCode) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt index 4c3a81122..17c9d508a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/DayFragmentsHolder.kt @@ -5,6 +5,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.DatePicker +import androidx.appcompat.app.AlertDialog import androidx.viewpager.widget.ViewPager import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.MainActivity @@ -13,6 +15,8 @@ import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.helpers.DAY_CODE import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.interfaces.NavigationListener +import com.simplemobiletools.commons.extensions.getDialogTheme +import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.updateActionBarTitle import com.simplemobiletools.commons.views.MyViewPager import kotlinx.android.synthetic.main.fragment_days_holder.view.* @@ -100,7 +104,27 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener { } override fun showGoToDateDialog() { + activity!!.setTheme(context!!.getDialogTheme()) + val view = layoutInflater.inflate(R.layout.date_picker, null) + val datePicker = view.findViewById(R.id.date_picker) + val dateTime = Formatter.getDateTimeFromCode(currentDayCode) + 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) + } + } + + private fun dateSelected(dateTime: DateTime, datePicker: DatePicker) { + val month = datePicker.month + 1 + val year = datePicker.year + val day = datePicker.dayOfMonth + val newDateTime = dateTime.withDate(year, month, day) + goToDateTime(newDateTime) } override fun refreshEvents() { From 68ae04a0d8943d12ba5e3d27c5770c6b0d605a83 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 20:19:31 +0100 Subject: [PATCH 34/89] do not show the "Go to date" button at the event list view --- .../simplemobiletools/calendar/pro/activities/MainActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index f028b8e48..806475cd4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -155,6 +155,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { 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 + findItem(R.id.go_to_date).isVisible = config.storedView != EVENTS_LIST_VIEW } setupSearch(menu) From 66cffd26c3628bbe51f8356ead46048007d28aec Mon Sep 17 00:00:00 2001 From: spkprs Date: Wed, 6 Mar 2019 21:30:37 +0200 Subject: [PATCH 35/89] upd+fix --- app/src/main/res/values-el/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 56747ccb2..f46dd4858 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -9,8 +9,8 @@ Ετήσια προβολή Απλή λίστα εκδηλώσεων Φαίνεται πως δεν έχετε επερχόμενες εκδηλώσεις. - Πηγαίνετε στο σήμερα - Go to date + Μετάβαση στο σήμερα + Μετάβαση σε ημερ/νία Μηνιαίο ημερολόγιο @@ -59,9 +59,9 @@ Σε επιλεγμένες μέρες Την ίδια μέρα Την τελευταία μέρα - Επαναλάβετε την ίδια ημέρα κάθε μήνα - Επαναλάβετε την τελευταία ημέρα του μήνα - Επαναλάβετε την τελευταία ημέρα του μήνα + Επανάληψη την ίδια ημέρα κάθε μήνα + Επανάληψη την τελευταία ημέρα του μήνα + Επανάληψη την τελευταία ημέρα του έτους Επανάληψη κάθε Κάθε πρώτη @@ -169,7 +169,7 @@ Προεπιλογή υπενθύμισης 1 Προεπιλογή υπενθύμισης 2 Προεπιλογή υπενθύμισης 3 - Προβολή για να ανοίξετε από το widget λίστας συμβάντων + Προβολή για άνοιγμα από το widget λίστας συμβάντων Τελευταία προβολή Νέα γεγονότα Προεπιλεγμένη ώρα έναρξης From 166003b03b655a49ceb091a1cb047c22bec4bb83 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 20:31:44 +0100 Subject: [PATCH 36/89] implement GoToDate at the weekly fragment --- .../pro/fragments/WeekFragmentsHolder.kt | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt index b55858e87..29bb6d3a5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt @@ -5,7 +5,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.DatePicker import android.widget.TextView +import androidx.appcompat.app.AlertDialog import androidx.viewpager.widget.ViewPager import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.MainActivity @@ -16,6 +18,8 @@ import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.WEEK_START_DATE_TIME import com.simplemobiletools.calendar.pro.interfaces.WeekFragmentListener import com.simplemobiletools.calendar.pro.views.MyScrollView +import com.simplemobiletools.commons.extensions.getDialogTheme +import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.updateActionBarSubtitle import com.simplemobiletools.commons.extensions.updateActionBarTitle import com.simplemobiletools.commons.helpers.WEEK_SECONDS @@ -131,7 +135,34 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { } override fun showGoToDateDialog() { + activity!!.setTheme(context!!.getDialogTheme()) + val view = layoutInflater.inflate(R.layout.date_picker, null) + val datePicker = view.findViewById(R.id.date_picker) + val dateTime = Formatter.getDateTimeFromTS(currentWeekTS) + 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) + } + } + + private fun dateSelected(dateTime: DateTime, datePicker: DatePicker) { + val month = datePicker.month + 1 + val year = datePicker.year + val day = datePicker.dayOfMonth + val newDateTime = dateTime.withDate(year, month, day) + + var selectedWeek = newDateTime.withDayOfWeek(1).withTimeAtStartOfDay().minusDays(if (context!!.config.isSundayFirst) 1 else 0) + if (newDateTime.minusDays(7).seconds() > selectedWeek.seconds()) { + selectedWeek = selectedWeek.plusDays(7) + } + + currentWeekTS = selectedWeek.seconds() + setupFragment() } override fun refreshEvents() { From 9917e7f4049d7cf6ba559ec664aff0eb68892c9e Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 20:34:24 +0100 Subject: [PATCH 37/89] fixing the weekly GoToDate with sunday being the first day --- .../calendar/pro/fragments/WeekFragmentsHolder.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt index 29bb6d3a5..7be7922ce 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt @@ -151,12 +151,17 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { } private fun dateSelected(dateTime: DateTime, datePicker: DatePicker) { + val isSundayFirst = context!!.config.isSundayFirst val month = datePicker.month + 1 val year = datePicker.year val day = datePicker.dayOfMonth - val newDateTime = dateTime.withDate(year, month, day) + var newDateTime = dateTime.withDate(year, month, day) - var selectedWeek = newDateTime.withDayOfWeek(1).withTimeAtStartOfDay().minusDays(if (context!!.config.isSundayFirst) 1 else 0) + if (isSundayFirst) { + newDateTime = newDateTime.plusDays(1) + } + + var selectedWeek = newDateTime.withDayOfWeek(1).withTimeAtStartOfDay().minusDays(if (isSundayFirst) 1 else 0) if (newDateTime.minusDays(7).seconds() > selectedWeek.seconds()) { selectedWeek = selectedWeek.plusDays(7) } From 00b614bd277e028c59d6740d4cf695e2a4075005 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 6 Mar 2019 20:41:50 +0100 Subject: [PATCH 38/89] go to the selected year at the yearly fragment --- .../pro/fragments/YearFragmentsHolder.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt index c537186fa..ff3221d8f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/YearFragmentsHolder.kt @@ -1,16 +1,22 @@ package com.simplemobiletools.calendar.pro.fragments +import android.content.res.Resources import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.DatePicker +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.MyYearPagerAdapter import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.helpers.Formatter +import com.simplemobiletools.commons.extensions.beGone +import com.simplemobiletools.commons.extensions.getDialogTheme +import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.updateActionBarTitle import com.simplemobiletools.commons.views.MyViewPager import kotlinx.android.synthetic.main.fragment_years_holder.view.* @@ -84,7 +90,29 @@ class YearFragmentsHolder : MyFragmentHolder() { } override fun showGoToDateDialog() { + activity!!.setTheme(context!!.getDialogTheme()) + val view = layoutInflater.inflate(R.layout.date_picker, null) + val datePicker = view.findViewById(R.id.date_picker) + datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).beGone() + datePicker.findViewById(Resources.getSystem().getIdentifier("month", "id", "android")).beGone() + val dateTime = DateTime(Formatter.getDateTimeFromCode("${currentYear}0523").toString()) + datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null) + + AlertDialog.Builder(context!!) + .setNegativeButton(R.string.cancel, null) + .setPositiveButton(R.string.ok) { dialog, which -> datePicked(datePicker) } + .create().apply { + activity?.setupDialogStuff(view, this) + } + } + + private fun datePicked(datePicker: DatePicker) { + val pickedYear = datePicker.year + if (currentYear != pickedYear) { + currentYear = datePicker.year + setupFragment() + } } override fun refreshEvents() { From 023350e23fcbf38ac9b477c82421b487f2d4595d Mon Sep 17 00:00:00 2001 From: Guillaume Date: Wed, 6 Mar 2019 20:44:42 +0100 Subject: [PATCH 39/89] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 38a68cd8c..a67d73b49 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -10,7 +10,7 @@ Lijst Niets gepland. Naar vandaag - Go to date + Naar datum Maandweergave From 8887776f172a793721a2384b4350d608cb4dc37f Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 09:37:54 +0100 Subject: [PATCH 40/89] do not require the faketouch device feature --- app/src/main/AndroidManifest.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d2c6f9b07..00a9a0f36 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,14 +16,18 @@ android:name="android.permission.USE_FINGERPRINT" tools:node="remove"/> + + + android:supportsRtl="true" + android:theme="@style/AppTheme"> Date: Thu, 7 Mar 2019 10:01:10 +0100 Subject: [PATCH 41/89] removing the redundant bintray commons library maven url --- build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3562f9914..413108702 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,6 @@ allprojects { google() jcenter() maven { url "https://jitpack.io" } - maven { url "https://dl.bintray.com/simplelibraries/commons" } } } From e5eb74b05544025c3d2e1f422504af2431aab8c9 Mon Sep 17 00:00:00 2001 From: Emanuele Petriglia Date: Thu, 7 Mar 2019 09:46:28 +0000 Subject: [PATCH 42/89] Update italian translation --- app/src/main/res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6c6d20e8c..8e1c1e5fc 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -10,7 +10,7 @@ Lista semplice deli eventi Non c\'è nessun evento imminente. Vai a oggi - Go to date + Vai alla data Calendario mensile From 69fd4ed5cc5871e0501073dd8ef809aa24ff03a3 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 10:50:15 +0100 Subject: [PATCH 43/89] adding a launcher shortcut for creating new events quicker --- app/build.gradle | 5 ++++ app/src/main/AndroidManifest.xml | 4 ++++ .../calendar/pro/activities/SplashActivity.kt | 9 +++++++ .../res/drawable/shortcut_plus_orange.xml | 16 +++++++++++++ app/src/main/res/xml/shortcuts.xml | 24 +++++++++++++++++++ build.gradle | 2 ++ 6 files changed, 60 insertions(+) create mode 100644 app/src/main/res/drawable/shortcut_plus_orange.xml create mode 100644 app/src/main/res/xml/shortcuts.xml diff --git a/app/build.gradle b/app/build.gradle index c2633aeca..95f3cca01 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' +apply plugin: 'de.timfreiheit.resourceplaceholders' def keystorePropertiesFile = rootProject.file("keystore.properties") def keystoreProperties = new Properties() @@ -49,6 +50,10 @@ android { checkReleaseBuilds false abortOnError false } + + resourcePlaceholders { + files = ['xml/shortcuts.xml'] + } } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 00a9a0f36..2453357df 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -391,6 +391,10 @@ + + { + val dayCode = Formatter.getDayCodeFromDateTime(DateTime()) + Intent(this, EventActivity::class.java).apply { + putExtra(NEW_EVENT_START_TS, getNewEventTimestampFromCode(dayCode)) + startActivity(this) + } + } else -> startActivity(Intent(this, MainActivity::class.java)) } finish() diff --git a/app/src/main/res/drawable/shortcut_plus_orange.xml b/app/src/main/res/drawable/shortcut_plus_orange.xml new file mode 100644 index 000000000..3a0250512 --- /dev/null +++ b/app/src/main/res/drawable/shortcut_plus_orange.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml new file mode 100644 index 000000000..b7cc185e4 --- /dev/null +++ b/app/src/main/res/xml/shortcuts.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/build.gradle b/build.gradle index 413108702..c2453164b 100644 --- a/build.gradle +++ b/build.gradle @@ -6,11 +6,13 @@ buildscript { repositories { google() jcenter() + maven { url "https://plugins.gradle.org/m2" } } dependencies { classpath 'com.android.tools.build:gradle:3.3.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "de.timfreiheit.resourceplaceholders:placeholders:0.3" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 7f87cc341299573b145e129c5da32dd5723da19c Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 11:08:07 +0100 Subject: [PATCH 44/89] removing the shortcut category --- app/src/main/res/xml/shortcuts.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index b7cc185e4..67aa5fd97 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -9,7 +9,7 @@ android:shortcutDisabledMessage="@string/new_event" android:shortcutId="new_event" android:shortcutLongLabel="@string/new_event" - android:shortcutShortLabel="@string/new_event " + android:shortcutShortLabel="@string/new_event" tools:targetApi="n_mr1"> - - From 394f047bb9e26d7de1dfcfcd61361a1253690da4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 12:25:08 +0100 Subject: [PATCH 45/89] replacing static shortcuts with dynamic ones --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 4 --- .../calendar/pro/activities/MainActivity.kt | 30 +++++++++++++++++++ .../calendar/pro/activities/SplashActivity.kt | 2 +- .../calendar/pro/helpers/Constants.kt | 1 + .../res/drawable/shortcut_plus_orange.xml | 2 +- app/src/main/res/xml/shortcuts.xml | 21 ------------- 7 files changed, 34 insertions(+), 28 deletions(-) delete mode 100644 app/src/main/res/xml/shortcuts.xml diff --git a/app/build.gradle b/app/build.gradle index 95f3cca01..075aac4ea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.10.0' + implementation 'com.simplemobiletools:commons:5.10.5' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2453357df..00a9a0f36 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -391,10 +391,6 @@ - - { + intent.action == SHORTCUT_NEW_EVENT -> { val dayCode = Formatter.getDayCodeFromDateTime(DateTime()) Intent(this, EventActivity::class.java).apply { putExtra(NEW_EVENT_START_TS, getNewEventTimestampFromCode(dayCode)) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt index 9ef594fe4..13bfc1f09 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt @@ -15,6 +15,7 @@ const val NEW_EVENT_SET_HOUR_DURATION = "new_event_set_hour_duration" const val WEEK_START_DATE_TIME = "week_start_date_time" const val CALDAV = "Caldav" const val VIEW_TO_OPEN = "view_to_open" +const val SHORTCUT_NEW_EVENT = "shortcut_new_event" const val REGULAR_EVENT_TYPE_ID = 1L const val CHOPPED_LIST_DEFAULT_SIZE = 100 diff --git a/app/src/main/res/drawable/shortcut_plus_orange.xml b/app/src/main/res/drawable/shortcut_plus_orange.xml index 3a0250512..88e181386 100644 --- a/app/src/main/res/drawable/shortcut_plus_orange.xml +++ b/app/src/main/res/drawable/shortcut_plus_orange.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml deleted file mode 100644 index 67aa5fd97..000000000 --- a/app/src/main/res/xml/shortcuts.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - From 2393738cb74def868b811d3e6fed5125a9c27d84 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 12:41:15 +0100 Subject: [PATCH 46/89] update version to 6.3.2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 075aac4ea..b4e3476f2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.simplemobiletools.calendar.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 144 - versionName "6.3.1" + versionCode 145 + versionName "6.3.2" multiDexEnabled true setProperty("archivesBaseName", "calendar") } From 60c3529b6c10800bbcea2ebc460a98989c95b693 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 12:41:20 +0100 Subject: [PATCH 47/89] updating changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e5d02a45..f584eb633 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========== +Version 6.3.2 *(2019-03-07)* +---------------------------- + + * Added a "Go to date" to most views for easy jumping between dates + * Added an app shortcut for creating new events quickly, from Android 7.1+ + Version 6.3.1 *(2019-02-23)* ---------------------------- From 10ec6efe7c07f8076b525af63863f474336d6dc8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 20:15:50 +0100 Subject: [PATCH 48/89] renaming the shortcut icon drawable --- .../simplemobiletools/calendar/pro/activities/MainActivity.kt | 2 +- .../drawable/{shortcut_plus_orange.xml => shortcut_plus.xml} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename app/src/main/res/drawable/{shortcut_plus_orange.xml => shortcut_plus.xml} (100%) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index 3b5210a0d..759aecf85 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -271,7 +271,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { if (isNougatMR1Plus() && config.lastHandledShortcutColor != appIconColor) { val newEvent = getString(R.string.new_event) val manager = getSystemService(ShortcutManager::class.java) - val drawable = resources.getDrawable(R.drawable.shortcut_plus_orange) + val drawable = resources.getDrawable(R.drawable.shortcut_plus) (drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_plus_background).applyColorFilter(appIconColor) val bmp = drawable.convertToBitmap() diff --git a/app/src/main/res/drawable/shortcut_plus_orange.xml b/app/src/main/res/drawable/shortcut_plus.xml similarity index 100% rename from app/src/main/res/drawable/shortcut_plus_orange.xml rename to app/src/main/res/drawable/shortcut_plus.xml From 9f8ce7d7f0a426746513b485ca7acb84398246dc Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 7 Mar 2019 23:13:21 +0100 Subject: [PATCH 49/89] reuse shortcut_plus from Commons --- app/build.gradle | 2 +- app/src/main/res/drawable/shortcut_plus.xml | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 app/src/main/res/drawable/shortcut_plus.xml diff --git a/app/build.gradle b/app/build.gradle index b4e3476f2..9fc5b5a18 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.10.5' + implementation 'com.simplemobiletools:commons:5.10.6' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/app/src/main/res/drawable/shortcut_plus.xml b/app/src/main/res/drawable/shortcut_plus.xml deleted file mode 100644 index 88e181386..000000000 --- a/app/src/main/res/drawable/shortcut_plus.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - From 33036adcf90493fe7576a3c25501fa8245fd4b19 Mon Sep 17 00:00:00 2001 From: en2sv Date: Sun, 10 Mar 2019 20:25:35 +0100 Subject: [PATCH 50/89] Update Swedish translation --- app/src/main/res/values-sv/strings.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 4bb15a868..2ac9cac4c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -10,7 +10,7 @@ Händelselista Det verkar som att du inte har några kommande händelser. Gå till idag - Go to date + Gå till datum Kalender månadsvis @@ -137,13 +137,13 @@ Nationella helgdagar Religiösa helgdagar Helgdagarna har importerats till händelsetypen \"Helgdagar\" - Vissa händelser kunde inte importeras - Helgdagar kunde inte importeras + Importen av vissa händelser misslyckades + Importen av helgdagarna misslyckades Hantera händelsetyper - Starta veckovydagen vid - Sluta veckovydagen vid + Dagen börjar + Dagen slutar Visa veckonummer Vibrera vid påminnelseaviseringar Påminnelseljud @@ -171,12 +171,12 @@ Standardpåminnelse 3 Vy som öppnas från händelselistwidgeten Senaste vy - New events - Default start time - Next full hour - Default duration - Last used one - Other time + Nya händelser + Standardstarttid + Nästa heltimme + Standardvaraktighet + Senast använda + Annan tid CalDAV From c33990fd66c85f1f47addf1bb83ba593dcb05f59 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 12:01:38 +0100 Subject: [PATCH 51/89] update commons to 5.10.8 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9fc5b5a18..24cf745ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.10.6' + implementation 'com.simplemobiletools:commons:5.10.8' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' From ccc30c104d8555643b7519ba2c4ba356f073cdb8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 12:14:46 +0100 Subject: [PATCH 52/89] fix #799, properly handle daylight savings at the weekly view --- .../calendar/pro/fragments/WeekFragmentsHolder.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt index 7be7922ce..257785003 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/fragments/WeekFragmentsHolder.kt @@ -104,10 +104,11 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener { private fun getWeekTimestamps(targetSeconds: Long): List { val weekTSs = ArrayList(PREFILLED_WEEKS) - var currWeekTS = targetSeconds - (PREFILLED_WEEKS / 2 * WEEK_SECONDS) + val dateTime = Formatter.getDateTimeFromTS(targetSeconds) + var currentWeek = dateTime.minusWeeks(PREFILLED_WEEKS / 2) for (i in 0 until PREFILLED_WEEKS) { - weekTSs.add(currWeekTS) - currWeekTS += WEEK_SECONDS + weekTSs.add(currentWeek.seconds()) + currentWeek = currentWeek.plusWeeks(1) } return weekTSs } From 9b98f1d9ad30455377d0ce37e7453cc285697b49 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 12:18:00 +0100 Subject: [PATCH 53/89] catch exceptions thrown at setting shortcuts --- .../calendar/pro/activities/MainActivity.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index 759aecf85..489e81dcf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -284,8 +284,11 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { .setIntent(intent) .build() - manager.dynamicShortcuts = Arrays.asList(shortcut) - config.lastHandledShortcutColor = appIconColor + try { + manager.dynamicShortcuts = Arrays.asList(shortcut) + config.lastHandledShortcutColor = appIconColor + } catch (ignored: Exception) { + } } } From 4d6fd5fbed914737fe827ca5fe010b9707f5d192 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 12:53:50 +0100 Subject: [PATCH 54/89] adding a new string for adding event attendees --- app/src/main/res/values-ar/strings.xml | 3 +++ app/src/main/res/values-az/strings.xml | 3 +++ app/src/main/res/values-br/strings.xml | 3 +++ app/src/main/res/values-cs/strings.xml | 3 +++ app/src/main/res/values-da/strings.xml | 3 +++ app/src/main/res/values-de/strings.xml | 3 +++ app/src/main/res/values-el/strings.xml | 3 +++ app/src/main/res/values-es/strings.xml | 3 +++ app/src/main/res/values-fr/strings.xml | 3 +++ app/src/main/res/values-gl/strings.xml | 3 +++ app/src/main/res/values-hi-rIN/strings.xml | 3 +++ app/src/main/res/values-hr/strings.xml | 3 +++ app/src/main/res/values-hu/strings.xml | 3 +++ app/src/main/res/values-it/strings.xml | 3 +++ app/src/main/res/values-iw/strings.xml | 3 +++ app/src/main/res/values-ja/strings.xml | 3 +++ app/src/main/res/values-ko/strings.xml | 3 +++ app/src/main/res/values-lt/strings.xml | 3 +++ app/src/main/res/values-nb/strings.xml | 3 +++ app/src/main/res/values-nl/strings.xml | 3 +++ app/src/main/res/values-no/strings.xml | 3 +++ app/src/main/res/values-pl/strings.xml | 3 +++ app/src/main/res/values-pt-rBR/strings.xml | 3 +++ app/src/main/res/values-pt/strings.xml | 3 +++ app/src/main/res/values-ru/strings.xml | 3 +++ app/src/main/res/values-sk/strings.xml | 3 +++ app/src/main/res/values-sv/strings.xml | 3 +++ app/src/main/res/values-tr/strings.xml | 3 +++ app/src/main/res/values-zh-rTW/strings.xml | 3 +++ app/src/main/res/values/strings.xml | 3 +++ 30 files changed, 90 insertions(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index def1feba0..6526b5710 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -98,6 +98,9 @@ إضافة تذكير آخر تذكيرات الحدث + + Add another attendee + إستيراد الأحداث تصدير الأحداث diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 63883139a..6c7a3188d 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -98,6 +98,9 @@ Başqa bir xatırladıcı əlavə et Hadisə xatırladıcıları + + Add another attendee + Hadisələri daxil et Hadisələri xaric et diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 7ed309e24..4dc3ed6d6 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -98,6 +98,9 @@ Ouzhpennañ un adc\'halv all Event reminders + + Add another attendee + Enporzhiañ darvoudoù Ezporzhiañ darvoudoù diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index e542134a2..3e70a3faf 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -98,6 +98,9 @@ Přidat další připomínku Připomínky událostí + + Add another attendee + Import událostí Export událostí diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index a34c34ee4..0aaa27d73 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -98,6 +98,9 @@ Tilføj en påmindelse mere Påmindelser + + Add another attendee + Importer begivenheder Eksporter begivenheder diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 713183e2e..d00356a86 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -98,6 +98,9 @@ Weitere Erinnerung hinzufügen Termin-Erinnerungen + + Add another attendee + Termine importieren Termine exportieren diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index f46dd4858..d5374e3fb 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -98,6 +98,9 @@ Προσθέστε μια άλλη υπενθύμιση Υπενθυμίσεις εκδηλώσεων + + Add another attendee + Εισαγωγή εκδηλώσεων Εξαγωγή εκδηλώσεων diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fbbe1eece..5094cdd06 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -98,6 +98,9 @@ Agregar otro recordatorio Recordatorio de eventos + + Add another attendee + Importar eventos Exportar eventos diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 535b13979..061ab69bf 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -98,6 +98,9 @@ Ajouter un autre rappel Rappels d\'événements + + Add another attendee + Importer des événements Exporter des événements diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 2b5749d2f..aa4cd2dfc 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -98,6 +98,9 @@ Engadir outro recordatorio Recordatorios de eventos + + Add another attendee + Importar eventos Exportar eventos diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 276681083..2f910dd7b 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -99,6 +99,9 @@ Add another reminder Event reminders + + Add another attendee + Import events Export events diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 3b5d5ef64..b00c1ed47 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -98,6 +98,9 @@ Dodaj još jedan podsjetnik Podsjetnici na događaj + + Add another attendee + Uvezi događaje Izvezi događaje diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index a63dd0b47..6ba16b8b4 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -98,6 +98,9 @@ Add another reminder Event reminders + + Add another attendee + Import events Export events diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8e1c1e5fc..1ec5c47a7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -98,6 +98,9 @@ Aggiungi un altro promemoria Promemoria eventi + + Add another attendee + Importa eventi Esporta eventi diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index b4eaeb115..2deca09aa 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -99,6 +99,9 @@ Add another reminder Event reminders + + Add another attendee + ייבוא אירועים Export events diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 62a0e5a40..48e37bb40 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -98,6 +98,9 @@ Add another reminder 予定のリマインダー + + Add another attendee + 予定をインポート 予定をエクスポート diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 161e7f67a..dcc3cf051 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -98,6 +98,9 @@ 다른 알림 추가 Event reminders + + Add another attendee + 이벤트들 가져 오기 이벤트들 내보내기 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index e597e5aaa..6565d1c17 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -98,6 +98,9 @@ Pridėti kitą priminimą Įvykių priminimai + + Add another attendee + Importuoti įvykius Eksportuoti įvykius diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 692fdf7f9..61e702c6e 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -98,6 +98,9 @@ Legg til en annen påminnelse Hendelsespåminnelser + + Add another attendee + Importer hendelser Eksporter hendelser diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a67d73b49..fe63897f3 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -98,6 +98,9 @@ Herinnering toevoegen Herinneringen + + Add another attendee + Afspraken importeren Afspraken exporteren diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 6892fa9d9..bc2d43845 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -98,6 +98,9 @@ Legg til en annen påminnelse Event reminders + + Add another attendee + Importer hendelser Eksporter hendelser diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 996afcc80..d42131618 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -98,6 +98,9 @@ Dodaj inne przypomnienie    Przypomnienia + + Add another attendee + Importuj wydarzenia Eksportuj wydarzenia diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 9f6e41777..23d15b340 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -98,6 +98,9 @@ Adicionar outro lembrete Lembretes de eventos + + Add another attendee + Importar eventos Exportar eventos diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 107f43f2d..7c94ba846 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -98,6 +98,9 @@ Adicionar outro lembrete Lembretes para eventos + + Add another attendee + Importar eventos Exportar eventos diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 964d676c7..8027936fc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -98,6 +98,9 @@ Добавить ещё одно напоминание Напоминания о событиях + + Add another attendee + Импорт событий Экспорт событий diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 4bc1c1353..5bfab56f0 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -98,6 +98,9 @@ Pridať ďalšiu pripomienku Pripomienky udalostí + + Pridať ďalšieho účastníka + Importovať udalosti Exportovať udalosti diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2ac9cac4c..d706923a5 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -98,6 +98,9 @@ Lägg till en annan påminnelse Händelsepåminnelser + + Add another attendee + Importera händelser Exportera händelser diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e17b59fa8..8974088ad 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -98,6 +98,9 @@ Başka hatırlatma ekle Etkinlik hatırlatıcılar + + Add another attendee + Etkinlikleri içe aktar Etkinlikleri dışa aktar diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index da2a095df..b0ff0501f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -98,6 +98,9 @@ 新增另一個提醒 活動提醒 + + Add another attendee + 匯入活動 匯出活動 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 76de84de5..d76ea886e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -98,6 +98,9 @@ Add another reminder Event reminders + + Add another attendee + Import events Export events From 377104d4188dc10fd0b79ea4b77b2cb2011bf3f5 Mon Sep 17 00:00:00 2001 From: spkprs Date: Mon, 11 Mar 2019 14:18:47 +0200 Subject: [PATCH 55/89] Update strings.xml --- app/src/main/res/values-el/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index d5374e3fb..ff658773b 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -99,7 +99,7 @@ Υπενθυμίσεις εκδηλώσεων - Add another attendee + Προσθήκη άλλης συμμετοχής Εισαγωγή εκδηλώσεων From 21930288e27648b08a74453f41d0125024db5018 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Mon, 11 Mar 2019 15:32:28 +0100 Subject: [PATCH 56/89] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index fe63897f3..90b682ce3 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -99,7 +99,7 @@ Herinneringen - Add another attendee + Persoon uitnodigen Afspraken importeren From 5efd8395450ba86b2994c0a0df7e9a800bae084b Mon Sep 17 00:00:00 2001 From: 10cents Date: Mon, 11 Mar 2019 20:34:35 +0100 Subject: [PATCH 57/89] go_to_date + add_another_attendee --- app/src/main/res/values-da/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 0aaa27d73..0980297f7 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -10,7 +10,7 @@ Begivenhedsliste Du ser ikke ud til at have nogen forestående begivenheder. Gå til i dag - Go to date + Gå til dato Månedlig kalender @@ -99,7 +99,7 @@ Påmindelser - Add another attendee + Tilføj en anden deltager Importer begivenheder From 05f9110e83f89aac22f4c5320709c41e739e8538 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 21:08:47 +0100 Subject: [PATCH 58/89] adding new Event fields for reminder type and attendees --- .../calendar/pro/databases/EventsDatabase.kt | 15 ++++++++++++++- .../calendar/pro/helpers/CalDAVHelper.kt | 4 ++-- .../calendar/pro/helpers/Constants.kt | 3 +++ .../calendar/pro/helpers/IcsImporter.kt | 4 ++-- .../calendar/pro/models/Event.kt | 4 ++++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt index 36679424c..19f0a72f0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt @@ -5,6 +5,7 @@ import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters +import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.extensions.config @@ -16,7 +17,7 @@ import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.calendar.pro.models.EventType import java.util.concurrent.Executors -@Database(entities = [Event::class, EventType::class], version = 1) +@Database(entities = [Event::class, EventType::class], version = 2) @TypeConverters(Converters::class) abstract class EventsDatabase : RoomDatabase() { @@ -38,6 +39,7 @@ abstract class EventsDatabase : RoomDatabase() { insertRegularEventType(context) } }) + .addMigrations(MIGRATION_1_2) .build() db!!.openHelper.setWriteAheadLoggingEnabled(true) } @@ -58,5 +60,16 @@ abstract class EventsDatabase : RoomDatabase() { context.config.addDisplayEventType(REGULAR_EVENT_TYPE_ID.toString()) } } + + private val MIGRATION_1_2 = object : Migration(1, 2) { + override fun migrate(database: SupportSQLiteDatabase) { + database.apply { + execSQL("ALTER TABLE events ADD COLUMN reminder_1_type INTEGER NOT NULL DEFAULT 0") + execSQL("ALTER TABLE events ADD COLUMN reminder_2_type INTEGER NOT NULL DEFAULT 0") + execSQL("ALTER TABLE events ADD COLUMN reminder_3_type INTEGER NOT NULL DEFAULT 0") + execSQL("ALTER TABLE events ADD COLUMN attendees TEXT NOT NULL DEFAULT '[]'") + } + } + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 7c63dc09e..e9fab8663 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -215,8 +215,8 @@ class CalDAVHelper(val context: Context) { val source = "$CALDAV-$calendarId" val repeatRule = Parser().parseRepeatInterval(rrule, startTS) val event = Event(null, startTS, endTS, title, location, description, reminders.getOrElse(0) { -1 }, - reminders.getOrElse(1) { -1 }, reminders.getOrElse(2) { -1 }, repeatRule.repeatInterval, repeatRule.repeatRule, - repeatRule.repeatLimit, ArrayList(), importId, allDay, eventTypeId, source = source) + reminders.getOrElse(1) { -1 }, reminders.getOrElse(2) { -1 }, 0, 0, 0, repeatRule.repeatInterval, repeatRule.repeatRule, + repeatRule.repeatLimit, ArrayList(), ArrayList(), importId, allDay, eventTypeId, source = source) if (event.getIsAllDay()) { event.startTS = Formatter.getShiftedImportTimestamp(event.startTS) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt index 13bfc1f09..d2e0e3785 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt @@ -151,4 +151,7 @@ const val DELETE_SELECTED_OCCURRENCE = 0 const val DELETE_FUTURE_OCCURRENCES = 1 const val DELETE_ALL_OCCURRENCES = 2 +const val REMINDER_NOTIFICATION = 0 +const val REMINDER_EMAIL = 1 + fun getNowSeconds() = System.currentTimeMillis() / 1000L diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt index 2595b7669..025c79e3b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt @@ -150,8 +150,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, curReminderMinutes.getOrElse(0) { -1 }, - curReminderMinutes.getOrElse(1) { -1 }, curReminderMinutes.getOrElse(2) { -1 }, curRepeatInterval, curRepeatRule, - curRepeatLimit, curRepeatExceptions, curImportId, curFlags, curEventTypeId, 0, curLastModified, source) + curReminderMinutes.getOrElse(1) { -1 }, curReminderMinutes.getOrElse(2) { -1 }, 0, 0, 0, curRepeatInterval, curRepeatRule, + curRepeatLimit, curRepeatExceptions, ArrayList(), curImportId, curFlags, curEventTypeId, 0, curLastModified, source) if (event.getIsAllDay() && curEnd > curStart) { event.endTS -= DAY diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt index 4e6751764..b71be3d41 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt @@ -22,10 +22,14 @@ data class Event( @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 = ArrayList(), + @ColumnInfo(name = "attendees") var attendees: ArrayList = ArrayList(), @ColumnInfo(name = "import_id") var importId: String = "", @ColumnInfo(name = "flags") var flags: Int = 0, @ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID, From 0a358f209bea65cca054382add44a115b6f03385 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 21:41:20 +0100 Subject: [PATCH 59/89] removing some redundant xml rules --- app/src/main/res/layout/activity_event.xml | 36 ---------------------- 1 file changed, 36 deletions(-) diff --git a/app/src/main/res/layout/activity_event.xml b/app/src/main/res/layout/activity_event.xml index a0e3bfe5d..eddd5199a 100644 --- a/app/src/main/res/layout/activity_event.xml +++ b/app/src/main/res/layout/activity_event.xml @@ -50,9 +50,7 @@ android:layout_alignTop="@+id/event_location" android:layout_alignBottom="@+id/event_location" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_marginEnd="@dimen/activity_margin" - android:layout_marginRight="@dimen/activity_margin" android:background="?attr/selectableItemBackgroundBorderless" android:paddingStart="@dimen/small_margin" android:paddingEnd="@dimen/small_margin" @@ -104,13 +102,9 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_description_divider" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_marginStart="@dimen/small_margin" - android:layout_marginLeft="@dimen/small_margin" android:layout_marginEnd="@dimen/normal_margin" - android:layout_marginRight="@dimen/normal_margin" android:layout_toEndOf="@+id/event_time_image" - android:layout_toRightOf="@+id/event_time_image" android:paddingTop="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin" android:text="@string/all_day" @@ -123,11 +117,9 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_time_image" android:layout_alignStart="@+id/event_all_day" - android:layout_alignLeft="@+id/event_all_day" android:background="?attr/selectableItemBackground" android:paddingTop="@dimen/activity_margin" android:paddingEnd="@dimen/activity_margin" - android:paddingRight="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin" android:textSize="@dimen/day_text_size" tools:text="January 1 1970"/> @@ -138,7 +130,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_time_image" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:background="?attr/selectableItemBackground" android:padding="@dimen/activity_margin" android:textSize="@dimen/day_text_size" @@ -150,11 +141,9 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_start_date" android:layout_alignStart="@+id/event_all_day" - android:layout_alignLeft="@+id/event_all_day" android:background="?attr/selectableItemBackground" android:paddingTop="@dimen/activity_margin" android:paddingEnd="@dimen/activity_margin" - android:paddingRight="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin" android:textSize="@dimen/day_text_size" tools:text="January 1 1970"/> @@ -165,7 +154,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_start_time" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:background="?attr/selectableItemBackground" android:padding="@dimen/activity_margin" android:textSize="@dimen/day_text_size" @@ -189,7 +177,6 @@ android:layout_alignTop="@+id/event_reminder_1" android:layout_alignBottom="@+id/event_reminder_1" android:layout_marginStart="@dimen/normal_margin" - android:layout_marginLeft="@dimen/normal_margin" android:alpha="0.8" android:padding="@dimen/medium_margin" android:src="@drawable/ic_bell"/> @@ -200,9 +187,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_date_time_divider" android:layout_marginStart="@dimen/small_margin" - android:layout_marginLeft="@dimen/small_margin" android:layout_toEndOf="@+id/event_reminder_image" - android:layout_toRightOf="@+id/event_reminder_image" android:background="?attr/selectableItemBackground" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin" @@ -214,7 +199,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_reminder_1" android:layout_alignStart="@+id/event_reminder_1" - android:layout_alignLeft="@+id/event_reminder_1" android:alpha="0.4" android:background="?attr/selectableItemBackground" android:paddingTop="@dimen/activity_margin" @@ -229,7 +213,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_reminder_2" android:layout_alignStart="@+id/event_reminder_1" - android:layout_alignLeft="@+id/event_reminder_1" android:alpha="0.4" android:background="?attr/selectableItemBackground" android:paddingTop="@dimen/activity_margin" @@ -256,7 +239,6 @@ android:layout_alignTop="@+id/event_repetition" android:layout_alignBottom="@+id/event_repetition" android:layout_marginStart="@dimen/normal_margin" - android:layout_marginLeft="@dimen/normal_margin" android:alpha="0.8" android:padding="@dimen/medium_margin" android:src="@drawable/ic_repeat"/> @@ -267,9 +249,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_reminder_divider" android:layout_marginStart="@dimen/small_margin" - android:layout_marginLeft="@dimen/small_margin" android:layout_toEndOf="@+id/event_repetition_image" - android:layout_toRightOf="@+id/event_repetition_image" android:background="?attr/selectableItemBackground" android:paddingTop="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin" @@ -281,7 +261,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_repetition" android:layout_alignStart="@+id/event_repetition" - android:layout_alignLeft="@+id/event_repetition" android:background="?attr/selectableItemBackground" android:visibility="gone"> @@ -300,9 +279,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_toEndOf="@+id/event_repetition_rule_label" - android:layout_toRightOf="@+id/event_repetition_rule_label" android:clickable="false" android:gravity="end" android:padding="@dimen/activity_margin" @@ -316,7 +293,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_repetition_rule_holder" android:layout_alignStart="@+id/event_repetition" - android:layout_alignLeft="@+id/event_repetition" android:background="?attr/selectableItemBackground" android:visibility="gone"> @@ -325,7 +301,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toStartOf="@+id/event_repetition_limit" - android:layout_toLeftOf="@+id/event_repetition_limit" android:clickable="false" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin" @@ -337,7 +312,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:clickable="false" android:padding="@dimen/activity_margin" android:text="@string/forever" @@ -361,7 +335,6 @@ android:layout_alignTop="@+id/event_caldav_calendar_holder" android:layout_alignBottom="@+id/event_caldav_calendar_holder" android:layout_marginStart="@dimen/normal_margin" - android:layout_marginLeft="@dimen/normal_margin" android:alpha="0.8" android:padding="@dimen/medium_margin" android:src="@drawable/ic_calendar" @@ -373,7 +346,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_repetition_divider" android:layout_toEndOf="@+id/event_caldav_calendar_image" - android:layout_toRightOf="@+id/event_caldav_calendar_image" android:background="?attr/selectableItemBackground" android:visibility="gone"> @@ -382,7 +354,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/small_margin" - android:layout_marginLeft="@dimen/small_margin" android:layout_toStartOf="@+id/event_caldav_calendar_color" android:ellipsize="end" android:maxLines="1" @@ -398,7 +369,6 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_caldav_calendar_name" android:layout_marginStart="@dimen/small_margin" - android:layout_marginLeft="@dimen/small_margin" android:layout_toStartOf="@+id/event_caldav_calendar_color" android:ellipsize="end" android:maxLines="1" @@ -412,10 +382,8 @@ android:layout_width="@dimen/color_sample_size" android:layout_height="@dimen/color_sample_size" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginEnd="@dimen/activity_margin" - android:layout_marginRight="@dimen/activity_margin" android:clickable="false"/> @@ -437,7 +405,6 @@ android:layout_alignTop="@+id/event_type_holder" android:layout_alignBottom="@+id/event_type_holder" android:layout_marginStart="@dimen/normal_margin" - android:layout_marginLeft="@dimen/normal_margin" android:alpha="0.8" android:padding="@dimen/medium_margin" android:src="@drawable/ic_color"/> @@ -450,7 +417,6 @@ android:layout_marginTop="@dimen/medium_margin" android:layout_marginBottom="@dimen/medium_margin" android:layout_toEndOf="@+id/event_type_image" - android:layout_toRightOf="@+id/event_type_image" android:background="?attr/selectableItemBackground"> From e3d34a9737a3a00f9656cd54a8f98dc4f2340d8b Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 Mar 2019 23:42:03 +0100 Subject: [PATCH 60/89] adding an option to switch between notification/email reminders --- app/build.gradle | 2 +- .../calendar/pro/activities/EventActivity.kt | 90 +++++++++++++++++-- app/src/main/res/layout/activity_event.xml | 57 +++++++++++- 3 files changed, 139 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 24cf745ac..6cfcb9b71 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.10.8' + implementation 'com.simplemobiletools:commons:5.10.9' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index d85dd9d3b..8d70f9b56 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -23,6 +23,7 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem +import com.simplemobiletools.commons.views.MyTextView import kotlinx.android.synthetic.main.activity_event.* import org.joda.time.DateTime import java.util.* @@ -45,6 +46,9 @@ class EventActivity : SimpleActivity() { private var mReminder1Minutes = 0 private var mReminder2Minutes = 0 private var mReminder3Minutes = 0 + private var mReminder1Type = REMINDER_NOTIFICATION + private var mReminder2Type = REMINDER_NOTIFICATION + private var mReminder3Type = REMINDER_NOTIFICATION private var mRepeatInterval = 0 private var mRepeatLimit = 0L private var mRepeatRule = 0 @@ -146,10 +150,32 @@ class EventActivity : SimpleActivity() { event_reminder_2.setOnClickListener { showReminder2Dialog() } event_reminder_3.setOnClickListener { showReminder3Dialog() } + event_reminder_1_type.setOnClickListener { + showReminderTypePicker(mReminder1Type) { + mReminder1Type = it + updateReminderTypeText(event_reminder_1_type, mReminder1Type) + } + } + + event_reminder_2_type.setOnClickListener { + showReminderTypePicker(mReminder2Type) { + mReminder2Type = it + updateReminderTypeText(event_reminder_2_type, mReminder2Type) + } + } + + event_reminder_3_type.setOnClickListener { + showReminderTypePicker(mReminder3Type) { + mReminder3Type = it + updateReminderTypeText(event_reminder_3_type, mReminder3Type) + } + } + event_type_holder.setOnClickListener { showEventTypeDialog() } - if (mEvent.flags and FLAG_ALL_DAY != 0) + if (mEvent.flags and FLAG_ALL_DAY != 0) { event_all_day.toggle() + } updateTextColors(event_scrollview) updateIconColors() @@ -253,6 +279,9 @@ class EventActivity : SimpleActivity() { mReminder1Minutes = mEvent.reminder1Minutes mReminder2Minutes = mEvent.reminder2Minutes mReminder3Minutes = mEvent.reminder3Minutes + mReminder1Type = mEvent.reminder1Type + mReminder2Type = mEvent.reminder2Type + mReminder3Type = mEvent.reminder3Type mRepeatInterval = mEvent.repeatInterval mRepeatLimit = mEvent.repeatLimit mRepeatRule = mEvent.repeatRule @@ -558,10 +587,15 @@ class EventActivity : SimpleActivity() { updateReminder1Text() updateReminder2Text() updateReminder3Text() + updateReminderTypeTexts() } private fun updateReminder1Text() { event_reminder_1.text = getFormattedMinutes(mReminder1Minutes) + event_reminder_1_type.apply { + beVisibleIf(mReminder1Minutes != REMINDER_OFF) + text = getString(R.string.notification) + } } private fun updateReminder2Text() { @@ -575,6 +609,11 @@ class EventActivity : SimpleActivity() { alpha = 1f } } + + event_reminder_2_type.apply { + beVisibleIf(mReminder2Minutes != REMINDER_OFF) + text = getString(R.string.notification) + } } private fun updateReminder3Text() { @@ -588,6 +627,32 @@ class EventActivity : SimpleActivity() { alpha = 1f } } + + event_reminder_3_type.apply { + beVisibleIf(mReminder3Minutes != REMINDER_OFF) + text = getString(R.string.notification) + } + } + + private fun showReminderTypePicker(currentValue: Int, callback: (Int) -> Unit) { + val items = arrayListOf( + RadioItem(REMINDER_NOTIFICATION, getString(R.string.notification)), + RadioItem(REMINDER_EMAIL, getString(R.string.email)) + ) + RadioGroupDialog(this, items, currentValue) { + callback(it as Int) + } + } + + private fun updateReminderTypeTexts() { + updateReminderTypeText(event_reminder_1_type, mReminder1Type) + updateReminderTypeText(event_reminder_2_type, mReminder2Type) + updateReminderTypeText(event_reminder_3_type, mReminder3Type) + } + + private fun updateReminderTypeText(view: MyTextView, type: Int) { + val text = getString(if (type == REMINDER_NOTIFICATION) R.string.notification else R.string.email) + view.text = text } private fun updateRepetitionText() { @@ -765,10 +830,22 @@ class EventActivity : SimpleActivity() { "$CALDAV-$mEventCalendarId" } - val reminders = sortedSetOf(mReminder1Minutes, mReminder2Minutes, mReminder3Minutes).filter { it != REMINDER_OFF } - val reminder1 = reminders.getOrElse(0) { REMINDER_OFF } - val reminder2 = reminders.getOrElse(1) { REMINDER_OFF } - val reminder3 = reminders.getOrElse(2) { REMINDER_OFF } + val reminders = LinkedHashMap().apply { + put(mReminder1Minutes, mReminder1Type) + put(mReminder2Minutes, mReminder2Type) + put(mReminder3Minutes, mReminder3Type) + } + + val sortedReminders = reminders.toSortedMap().filter { it.key != REMINDER_OFF } + val keys = sortedReminders.keys.toList() + val reminder1 = keys.getOrElse(0) { REMINDER_OFF } + val reminder2 = keys.getOrElse(1) { REMINDER_OFF } + val reminder3 = keys.getOrElse(2) { REMINDER_OFF } + + val types = sortedReminders.values.toList() + mReminder1Type = types.getOrElse(0) { REMINDER_NOTIFICATION } + mReminder2Type = types.getOrElse(1) { REMINDER_NOTIFICATION } + mReminder3Type = types.getOrElse(2) { REMINDER_NOTIFICATION } config.apply { if (usePreviousEventReminders) { @@ -786,6 +863,9 @@ class EventActivity : SimpleActivity() { reminder1Minutes = reminder1 reminder2Minutes = reminder2 reminder3Minutes = reminder3 + reminder1Type = mReminder1Type + reminder2Type = mReminder2Type + reminder3Type = mReminder3Type repeatInterval = mRepeatInterval importId = newImportId flags = mEvent.flags.addBitIf(event_all_day.isChecked, FLAG_ALL_DAY) diff --git a/app/src/main/res/layout/activity_event.xml b/app/src/main/res/layout/activity_event.xml index eddd5199a..7180b4dd9 100644 --- a/app/src/main/res/layout/activity_event.xml +++ b/app/src/main/res/layout/activity_event.xml @@ -187,11 +187,27 @@ android:layout_height="wrap_content" android:layout_below="@+id/event_date_time_divider" android:layout_marginStart="@dimen/small_margin" + android:layout_toStartOf="@+id/event_reminder_1_type" android:layout_toEndOf="@+id/event_reminder_image" android:background="?attr/selectableItemBackground" + android:ellipsize="end" + android:lines="1" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin" - android:textSize="@dimen/day_text_size"/> + android:textSize="@dimen/day_text_size" + tools:text="@string/add_another_reminder"/> + + + android:visibility="gone" + tools:text="@string/add_another_reminder"/> + + + android:visibility="gone" + tools:text="@string/add_another_reminder"/> + + + android:textSize="@dimen/day_text_size" + tools:text="@string/no_repetition"/> Date: Mon, 11 Mar 2019 23:46:23 +0100 Subject: [PATCH 61/89] update all-day switch at editing events instantly, without animation --- .../calendar/pro/activities/EventActivity.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 8d70f9b56..6819fe06d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -25,6 +25,7 @@ import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.views.MyTextView import kotlinx.android.synthetic.main.activity_event.* +import kotlinx.android.synthetic.main.activity_event.view.* import org.joda.time.DateTime import java.util.* import java.util.regex.Pattern @@ -172,9 +173,9 @@ class EventActivity : SimpleActivity() { } event_type_holder.setOnClickListener { showEventTypeDialog() } - - if (mEvent.flags and FLAG_ALL_DAY != 0) { - event_all_day.toggle() + event_all_day.apply { + isChecked = mEvent.flags and FLAG_ALL_DAY != 0 + jumpDrawablesToCurrentState() } updateTextColors(event_scrollview) From 33e8f7ba6facf8359000407c0687b310158f4247 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 10:10:54 +0100 Subject: [PATCH 62/89] use images instead of text at reminder types --- .../calendar/pro/activities/EventActivity.kt | 39 ++++++++----------- app/src/main/res/layout/activity_event.xml | 27 +++++++------ 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 6819fe06d..c68bee00c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -9,6 +9,7 @@ import android.text.method.LinkMovementMethod import android.view.Menu import android.view.MenuItem import android.view.WindowManager +import android.widget.ImageView import androidx.core.app.NotificationManagerCompat import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.dialogs.* @@ -23,7 +24,6 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem -import com.simplemobiletools.commons.views.MyTextView import kotlinx.android.synthetic.main.activity_event.* import kotlinx.android.synthetic.main.activity_event.view.* import org.joda.time.DateTime @@ -154,21 +154,21 @@ class EventActivity : SimpleActivity() { event_reminder_1_type.setOnClickListener { showReminderTypePicker(mReminder1Type) { mReminder1Type = it - updateReminderTypeText(event_reminder_1_type, mReminder1Type) + updateReminderTypeImage(event_reminder_1_type, mReminder1Type) } } event_reminder_2_type.setOnClickListener { showReminderTypePicker(mReminder2Type) { mReminder2Type = it - updateReminderTypeText(event_reminder_2_type, mReminder2Type) + updateReminderTypeImage(event_reminder_2_type, mReminder2Type) } } event_reminder_3_type.setOnClickListener { showReminderTypePicker(mReminder3Type) { mReminder3Type = it - updateReminderTypeText(event_reminder_3_type, mReminder3Type) + updateReminderTypeImage(event_reminder_3_type, mReminder3Type) } } @@ -593,10 +593,7 @@ class EventActivity : SimpleActivity() { private fun updateReminder1Text() { event_reminder_1.text = getFormattedMinutes(mReminder1Minutes) - event_reminder_1_type.apply { - beVisibleIf(mReminder1Minutes != REMINDER_OFF) - text = getString(R.string.notification) - } + event_reminder_1_type.beVisibleIf(mReminder1Minutes != REMINDER_OFF) } private fun updateReminder2Text() { @@ -611,10 +608,7 @@ class EventActivity : SimpleActivity() { } } - event_reminder_2_type.apply { - beVisibleIf(mReminder2Minutes != REMINDER_OFF) - text = getString(R.string.notification) - } + event_reminder_2_type.beVisibleIf(mReminder2Minutes != REMINDER_OFF) } private fun updateReminder3Text() { @@ -629,10 +623,7 @@ class EventActivity : SimpleActivity() { } } - event_reminder_3_type.apply { - beVisibleIf(mReminder3Minutes != REMINDER_OFF) - text = getString(R.string.notification) - } + event_reminder_3_type.beVisibleIf(mReminder3Minutes != REMINDER_OFF) } private fun showReminderTypePicker(currentValue: Int, callback: (Int) -> Unit) { @@ -646,14 +637,15 @@ class EventActivity : SimpleActivity() { } private fun updateReminderTypeTexts() { - updateReminderTypeText(event_reminder_1_type, mReminder1Type) - updateReminderTypeText(event_reminder_2_type, mReminder2Type) - updateReminderTypeText(event_reminder_3_type, mReminder3Type) + updateReminderTypeImage(event_reminder_1_type, mReminder1Type) + updateReminderTypeImage(event_reminder_2_type, mReminder2Type) + updateReminderTypeImage(event_reminder_3_type, mReminder3Type) } - private fun updateReminderTypeText(view: MyTextView, type: Int) { - val text = getString(if (type == REMINDER_NOTIFICATION) R.string.notification else R.string.email) - view.text = text + private fun updateReminderTypeImage(view: ImageView, type: Int) { + val drawable = if (type == REMINDER_NOTIFICATION) R.drawable.ic_bell else R.drawable.ic_email + val icon = resources.getColoredDrawableWithColor(drawable, config.textColor) + view.setImageDrawable(icon) } private fun updateRepetitionText() { @@ -1095,5 +1087,8 @@ class EventActivity : SimpleActivity() { event_type_image.applyColorFilter(textColor) event_caldav_calendar_image.applyColorFilter(textColor) event_show_on_map.applyColorFilter(getAdjustedPrimaryColor()) + event_reminder_1_type.applyColorFilter(textColor) + event_reminder_2_type.applyColorFilter(textColor) + event_reminder_3_type.applyColorFilter(textColor) } } diff --git a/app/src/main/res/layout/activity_event.xml b/app/src/main/res/layout/activity_event.xml index 7180b4dd9..05c2e4403 100644 --- a/app/src/main/res/layout/activity_event.xml +++ b/app/src/main/res/layout/activity_event.xml @@ -197,17 +197,18 @@ android:textSize="@dimen/day_text_size" tools:text="@string/add_another_reminder"/> - + android:src="@drawable/ic_bell"/> - + android:src="@drawable/ic_bell"/> - + android:src="@drawable/ic_bell"/> Date: Tue, 12 Mar 2019 10:22:32 +0100 Subject: [PATCH 63/89] show the reminder types only at caldav synced events --- .../calendar/pro/activities/EventActivity.kt | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index c68bee00c..0666a35b8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -154,21 +154,21 @@ class EventActivity : SimpleActivity() { event_reminder_1_type.setOnClickListener { showReminderTypePicker(mReminder1Type) { mReminder1Type = it - updateReminderTypeImage(event_reminder_1_type, mReminder1Type) + updateReminderTypeImage(event_reminder_1_type, mReminder1Minutes, mReminder1Type) } } event_reminder_2_type.setOnClickListener { showReminderTypePicker(mReminder2Type) { mReminder2Type = it - updateReminderTypeImage(event_reminder_2_type, mReminder2Type) + updateReminderTypeImage(event_reminder_2_type, mReminder2Minutes, mReminder2Type) } } event_reminder_3_type.setOnClickListener { showReminderTypePicker(mReminder3Type) { mReminder3Type = it - updateReminderTypeImage(event_reminder_3_type, mReminder3Type) + updateReminderTypeImage(event_reminder_3_type, mReminder3Minutes, mReminder3Type) } } @@ -588,12 +588,11 @@ class EventActivity : SimpleActivity() { updateReminder1Text() updateReminder2Text() updateReminder3Text() - updateReminderTypeTexts() + updateReminderTypeImages() } private fun updateReminder1Text() { event_reminder_1.text = getFormattedMinutes(mReminder1Minutes) - event_reminder_1_type.beVisibleIf(mReminder1Minutes != REMINDER_OFF) } private fun updateReminder2Text() { @@ -607,8 +606,6 @@ class EventActivity : SimpleActivity() { alpha = 1f } } - - event_reminder_2_type.beVisibleIf(mReminder2Minutes != REMINDER_OFF) } private fun updateReminder3Text() { @@ -622,8 +619,6 @@ class EventActivity : SimpleActivity() { alpha = 1f } } - - event_reminder_3_type.beVisibleIf(mReminder3Minutes != REMINDER_OFF) } private fun showReminderTypePicker(currentValue: Int, callback: (Int) -> Unit) { @@ -636,13 +631,14 @@ class EventActivity : SimpleActivity() { } } - private fun updateReminderTypeTexts() { - updateReminderTypeImage(event_reminder_1_type, mReminder1Type) - updateReminderTypeImage(event_reminder_2_type, mReminder2Type) - updateReminderTypeImage(event_reminder_3_type, mReminder3Type) + private fun updateReminderTypeImages() { + updateReminderTypeImage(event_reminder_1_type, mReminder1Minutes, mReminder1Type) + updateReminderTypeImage(event_reminder_2_type, mReminder2Minutes, mReminder2Type) + updateReminderTypeImage(event_reminder_3_type, mReminder3Minutes, mReminder3Type) } - private fun updateReminderTypeImage(view: ImageView, type: Int) { + private fun updateReminderTypeImage(view: ImageView, minutes: Int, type: Int) { + view.beVisibleIf(minutes != REMINDER_OFF && mEventCalendarId != STORED_LOCALLY_ONLY) val drawable = if (type == REMINDER_NOTIFICATION) R.drawable.ic_bell else R.drawable.ic_email val icon = resources.getColoredDrawableWithColor(drawable, config.textColor) view.setImageDrawable(icon) @@ -685,6 +681,7 @@ class EventActivity : SimpleActivity() { mEventCalendarId = it config.lastUsedCaldavCalendarId = it updateCurrentCalendarInfo(getCalendarWithId(calendars, it)) + updateReminderTypeImages() } } } else { @@ -836,9 +833,9 @@ class EventActivity : SimpleActivity() { val reminder3 = keys.getOrElse(2) { REMINDER_OFF } val types = sortedReminders.values.toList() - mReminder1Type = types.getOrElse(0) { REMINDER_NOTIFICATION } - mReminder2Type = types.getOrElse(1) { REMINDER_NOTIFICATION } - mReminder3Type = types.getOrElse(2) { REMINDER_NOTIFICATION } + mReminder1Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else types.getOrElse(0) { REMINDER_NOTIFICATION } + mReminder2Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else types.getOrElse(1) { REMINDER_NOTIFICATION } + mReminder3Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else types.getOrElse(2) { REMINDER_NOTIFICATION } config.apply { if (usePreviousEventReminders) { From 5e14ca10b6f6722191606fc93155f3801880ad9e Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 11:22:32 +0100 Subject: [PATCH 64/89] properly import Email notifications from CalDAV --- .../calendar/pro/helpers/CalDAVHelper.kt | 23 ++++++++++++------- .../calendar/pro/models/Reminder.kt | 3 +++ 2 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Reminder.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index e9fab8663..70b8fe181 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -13,6 +13,7 @@ import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.models.CalDAVCalendar import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.calendar.pro.models.EventType +import com.simplemobiletools.calendar.pro.models.Reminder import com.simplemobiletools.calendar.pro.objects.States.isUpdatingCalDAV import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR @@ -211,11 +212,16 @@ class CalDAVHelper(val context: Context) { endTS = startTS + Parser().parseDurationSeconds(duration) } + val reminder1 = reminders.getOrNull(0) + val reminder2 = reminders.getOrNull(1) + val reminder3 = reminders.getOrNull(2) val importId = getCalDAVEventImportId(calendarId, id) val source = "$CALDAV-$calendarId" val repeatRule = Parser().parseRepeatInterval(rrule, startTS) - val event = Event(null, startTS, endTS, title, location, description, reminders.getOrElse(0) { -1 }, - reminders.getOrElse(1) { -1 }, reminders.getOrElse(2) { -1 }, 0, 0, 0, repeatRule.repeatInterval, repeatRule.repeatRule, + val event = Event(null, startTS, endTS, title, location, description, reminder1?.minutes ?: REMINDER_OFF, + reminder2?.minutes ?: REMINDER_OFF, reminder3?.minutes ?: REMINDER_OFF, reminder1?.type + ?: REMINDER_NOTIFICATION, reminder2?.type ?: REMINDER_NOTIFICATION, reminder3?.type + ?: REMINDER_NOTIFICATION, repeatRule.repeatInterval, repeatRule.repeatRule, repeatRule.repeatLimit, ArrayList(), ArrayList(), importId, allDay, eventTypeId, source = source) if (event.getIsAllDay()) { @@ -441,9 +447,8 @@ class CalDAVHelper(val context: Context) { } } - @SuppressLint("MissingPermission") - private fun getCalDAVEventReminders(eventId: Long): List { - val reminders = ArrayList() + private fun getCalDAVEventReminders(eventId: Long): List { + val reminders = ArrayList() val uri = CalendarContract.Reminders.CONTENT_URI val projection = arrayOf( CalendarContract.Reminders.MINUTES, @@ -456,15 +461,17 @@ class CalDAVHelper(val context: Context) { do { val minutes = cursor.getIntValue(CalendarContract.Reminders.MINUTES) val method = cursor.getIntValue(CalendarContract.Reminders.METHOD) - if (method == CalendarContract.Reminders.METHOD_ALERT) { - reminders.add(minutes) + if (method == CalendarContract.Reminders.METHOD_ALERT || method == CalendarContract.Reminders.METHOD_EMAIL) { + val type = if (method == CalendarContract.Reminders.METHOD_EMAIL) REMINDER_EMAIL else REMINDER_NOTIFICATION + val reminder = Reminder(minutes, type) + reminders.add(reminder) } } while (cursor.moveToNext()) } } finally { cursor?.close() } - return reminders + return reminders.sortedBy { it.minutes } } private fun getCalDAVEventImportId(calendarId: Int, eventId: Long) = "$CALDAV-$calendarId-$eventId" diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Reminder.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Reminder.kt new file mode 100644 index 000000000..6f9b34f5b --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Reminder.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.calendar.pro.models + +data class Reminder(val minutes: Int, val type: Int) From 1eb798e1ca778dbb57a17861cf8de6c44a1d75ff Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 11:38:21 +0100 Subject: [PATCH 65/89] use the new Reminder model class at more places --- .../calendar/pro/activities/EventActivity.kt | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 0666a35b8..55bef8d86 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -19,6 +19,7 @@ import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.models.CalDAVCalendar import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.calendar.pro.models.EventType +import com.simplemobiletools.calendar.pro.models.Reminder import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* @@ -154,21 +155,21 @@ class EventActivity : SimpleActivity() { event_reminder_1_type.setOnClickListener { showReminderTypePicker(mReminder1Type) { mReminder1Type = it - updateReminderTypeImage(event_reminder_1_type, mReminder1Minutes, mReminder1Type) + updateReminderTypeImage(event_reminder_1_type, Reminder(mReminder1Minutes, mReminder1Type)) } } event_reminder_2_type.setOnClickListener { showReminderTypePicker(mReminder2Type) { mReminder2Type = it - updateReminderTypeImage(event_reminder_2_type, mReminder2Minutes, mReminder2Type) + updateReminderTypeImage(event_reminder_2_type, Reminder(mReminder2Minutes, mReminder2Type)) } } event_reminder_3_type.setOnClickListener { showReminderTypePicker(mReminder3Type) { mReminder3Type = it - updateReminderTypeImage(event_reminder_3_type, mReminder3Minutes, mReminder3Type) + updateReminderTypeImage(event_reminder_3_type, Reminder(mReminder3Minutes, mReminder3Type)) } } @@ -632,14 +633,14 @@ class EventActivity : SimpleActivity() { } private fun updateReminderTypeImages() { - updateReminderTypeImage(event_reminder_1_type, mReminder1Minutes, mReminder1Type) - updateReminderTypeImage(event_reminder_2_type, mReminder2Minutes, mReminder2Type) - updateReminderTypeImage(event_reminder_3_type, mReminder3Minutes, mReminder3Type) + updateReminderTypeImage(event_reminder_1_type, Reminder(mReminder1Minutes, mReminder1Type)) + updateReminderTypeImage(event_reminder_2_type, Reminder(mReminder2Minutes, mReminder2Type)) + updateReminderTypeImage(event_reminder_3_type, Reminder(mReminder3Minutes, mReminder3Type)) } - private fun updateReminderTypeImage(view: ImageView, minutes: Int, type: Int) { - view.beVisibleIf(minutes != REMINDER_OFF && mEventCalendarId != STORED_LOCALLY_ONLY) - val drawable = if (type == REMINDER_NOTIFICATION) R.drawable.ic_bell else R.drawable.ic_email + private fun updateReminderTypeImage(view: ImageView, reminder: Reminder) { + view.beVisibleIf(reminder.minutes != REMINDER_OFF && mEventCalendarId != STORED_LOCALLY_ONLY) + val drawable = if (reminder.type == REMINDER_NOTIFICATION) R.drawable.ic_bell else R.drawable.ic_email val icon = resources.getColoredDrawableWithColor(drawable, config.textColor) view.setImageDrawable(icon) } @@ -820,28 +821,26 @@ class EventActivity : SimpleActivity() { "$CALDAV-$mEventCalendarId" } - val reminders = LinkedHashMap().apply { - put(mReminder1Minutes, mReminder1Type) - put(mReminder2Minutes, mReminder2Type) - put(mReminder3Minutes, mReminder3Type) - } + 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 - val sortedReminders = reminders.toSortedMap().filter { it.key != REMINDER_OFF } - val keys = sortedReminders.keys.toList() - val reminder1 = keys.getOrElse(0) { REMINDER_OFF } - val reminder2 = keys.getOrElse(1) { REMINDER_OFF } - val reminder3 = keys.getOrElse(2) { REMINDER_OFF } + 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) - val types = sortedReminders.values.toList() - mReminder1Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else types.getOrElse(0) { REMINDER_NOTIFICATION } - mReminder2Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else types.getOrElse(1) { REMINDER_NOTIFICATION } - mReminder3Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else types.getOrElse(2) { REMINDER_NOTIFICATION } + mReminder1Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else reminder1.type + mReminder2Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else reminder2.type + mReminder3Type = if (mEventCalendarId == STORED_LOCALLY_ONLY) REMINDER_NOTIFICATION else reminder3.type config.apply { if (usePreviousEventReminders) { - lastEventReminderMinutes1 = reminder1 - lastEventReminderMinutes2 = reminder2 - lastEventReminderMinutes3 = reminder3 + lastEventReminderMinutes1 = reminder1.minutes + lastEventReminderMinutes2 = reminder2.minutes + lastEventReminderMinutes3 = reminder3.minutes } } @@ -850,9 +849,9 @@ class EventActivity : SimpleActivity() { endTS = newEndTS title = newTitle description = event_description.value - reminder1Minutes = reminder1 - reminder2Minutes = reminder2 - reminder3Minutes = reminder3 + reminder1Minutes = reminder1.minutes + reminder2Minutes = reminder2.minutes + reminder3Minutes = reminder3.minutes reminder1Type = mReminder1Type reminder2Type = mReminder2Type reminder3Type = mReminder3Type From f8028e0c16180b8d8d984e91c7d2fe60dfd1ef7c Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 11:55:11 +0100 Subject: [PATCH 66/89] use the Reminder model class at fetching event reminders --- .../calendar/pro/activities/EventActivity.kt | 2 +- .../simplemobiletools/calendar/pro/extensions/Context.kt | 7 ++++--- .../com/simplemobiletools/calendar/pro/models/Event.kt | 6 +++++- .../calendar/pro/receivers/NotificationReceiver.kt | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 55bef8d86..18ad13563 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -879,7 +879,7 @@ class EventActivity : SimpleActivity() { if (mEvent.id == null || mEvent.id == null) { eventsHelper.insertEvent(mEvent, true, true) { if (DateTime.now().isAfter(mEventStartDateTime.millis)) { - if (mEvent.repeatInterval == 0 && mEvent.getReminders().isNotEmpty()) { + if (mEvent.repeatInterval == 0 && mEvent.getReminders().any { it.type == REMINDER_NOTIFICATION }) { notifyEvent(mEvent) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt index 0d5d36f5c..3813e37bc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt @@ -80,7 +80,8 @@ fun Context.scheduleAllEvents() { } fun Context.scheduleNextEventReminder(event: Event, showToasts: Boolean) { - if (event.getReminders().isEmpty()) { + val validReminders = event.getReminders().filter { it.type == REMINDER_NOTIFICATION } + if (validReminders.isEmpty()) { if (showToasts) { toast(R.string.saving) } @@ -88,7 +89,7 @@ fun Context.scheduleNextEventReminder(event: Event, showToasts: Boolean) { } val now = getNowSeconds() - val reminderSeconds = event.getReminders().reversed().map { it * 60 } + val reminderSeconds = validReminders.reversed().map { it.minutes * 60 } eventsHelper.getEvents(now, now + YEAR, event.id!!, false) { if (it.isNotEmpty()) { for (curEvent in it) { @@ -159,7 +160,7 @@ fun Context.getRepetitionText(seconds: Int) = when (seconds) { } fun Context.notifyRunningEvents() { - eventsHelper.getRunningEvents().filter { it.getReminders().isNotEmpty() }.forEach { + eventsHelper.getRunningEvents().filter { it.getReminders().any { it.type == REMINDER_NOTIFICATION } }.forEach { notifyEvent(it) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt index b71be3d41..842eb6d46 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt @@ -120,7 +120,11 @@ data class Event( fun getIsAllDay() = flags and FLAG_ALL_DAY != 0 - fun getReminders() = setOf(reminder1Minutes, reminder2Minutes, reminder3Minutes).filter { it != REMINDER_OFF } + fun getReminders() = setOf( + 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 fun getEventStartTS(): Long { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/receivers/NotificationReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/receivers/NotificationReceiver.kt index 37996827d..58e905633 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/receivers/NotificationReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/receivers/NotificationReceiver.kt @@ -10,6 +10,7 @@ import com.simplemobiletools.calendar.pro.extensions.scheduleNextEventReminder import com.simplemobiletools.calendar.pro.extensions.updateListWidget import com.simplemobiletools.calendar.pro.helpers.EVENT_ID import com.simplemobiletools.calendar.pro.helpers.Formatter +import com.simplemobiletools.calendar.pro.helpers.REMINDER_NOTIFICATION class NotificationReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { @@ -30,7 +31,7 @@ class NotificationReceiver : BroadcastReceiver() { context.updateListWidget() val event = context.eventsDB.getEventWithId(id) - if (event == null || event.getReminders().isEmpty()) { + if (event == null || event.getReminders().none { it.type == REMINDER_NOTIFICATION }) { return } From 44bc7415723858576f5b69025d1024c13a1492ed Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 11:55:55 +0100 Subject: [PATCH 67/89] properly fill the reminder type at CalDAV events --- .../simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 70b8fe181..6938c356d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -347,9 +347,9 @@ class CalDAVHelper(val context: Context) { clearEventReminders(event) event.getReminders().forEach { val contentValues = ContentValues().apply { - put(Reminders.MINUTES, it) + put(Reminders.MINUTES, it.minutes) + put(Reminders.METHOD, if (it.type == REMINDER_EMAIL) Reminders.METHOD_EMAIL else Reminders.METHOD_ALERT) put(Reminders.EVENT_ID, event.getCalDAVEventId()) - put(Reminders.METHOD, Reminders.METHOD_ALERT) } try { From 69d78a1b586cc9653b59d13622e8e4a91f439451 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 12:32:16 +0100 Subject: [PATCH 68/89] properly export email event reminders in .ics files --- .../pro/activities/SettingsActivity.kt | 1 - .../calendar/pro/helpers/CalDAVHelper.kt | 10 ++++---- .../calendar/pro/helpers/Constants.kt | 3 +++ .../calendar/pro/helpers/IcsExporter.kt | 25 ++++++++++++------- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt index ba30c49b2..32b8e1ebe 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/SettingsActivity.kt @@ -315,7 +315,6 @@ class SettingsActivity : SimpleActivity() { } } - private fun setupWeekNumbers() { settings_week_numbers.isChecked = config.showWeekNumbers settings_week_numbers_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 6938c356d..ac90fa8a5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -53,7 +53,7 @@ class CalDAVHelper(val context: Context) { } @SuppressLint("MissingPermission") - fun getCalDAVCalendars(ids: String, showToasts: Boolean): List { + fun getCalDAVCalendars(ids: String, showToasts: Boolean): ArrayList { val calendars = ArrayList() if (!context.hasPermission(PERMISSION_WRITE_CALENDAR) || !context.hasPermission(PERMISSION_READ_CALENDAR)) { return calendars @@ -73,7 +73,7 @@ class CalDAVHelper(val context: Context) { var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, null, null) - if (cursor != null && cursor.moveToFirst()) { + if (cursor?.moveToFirst() == true) { do { val id = cursor.getIntValue(CalendarContract.Calendars._ID) val displayName = cursor.getStringValue(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME) @@ -145,7 +145,7 @@ class CalDAVHelper(val context: Context) { var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) - if (cursor != null && cursor.moveToFirst()) { + if (cursor?.moveToFirst() == true) { do { val colorKey = cursor.getIntValue(CalendarContract.Colors.COLOR_KEY) val color = cursor.getIntValue(CalendarContract.Colors.COLOR) @@ -193,7 +193,7 @@ class CalDAVHelper(val context: Context) { var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, null, null) - if (cursor != null && cursor.moveToFirst()) { + if (cursor?.moveToFirst() == true) { do { val id = cursor.getLongValue(CalendarContract.Events._ID) val title = cursor.getStringValue(CalendarContract.Events.TITLE) ?: "" @@ -457,7 +457,7 @@ class CalDAVHelper(val context: Context) { var cursor: Cursor? = null try { cursor = context.contentResolver.query(uri, projection, selection, null, null) - if (cursor != null && cursor.moveToFirst()) { + if (cursor?.moveToFirst() == true) { do { val minutes = cursor.getIntValue(CalendarContract.Reminders.MINUTES) val method = cursor.getIntValue(CalendarContract.Reminders.METHOD) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt index d2e0e3785..4878387c7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt @@ -100,6 +100,8 @@ const val SUMMARY = "SUMMARY" const val DESCRIPTION = "DESCRIPTION:" const val UID = "UID:" const val ACTION = "ACTION:" +const val ATTENDEE = "ATTENDEE:" +const val MAILTO = "mailto:" const val TRIGGER = "TRIGGER:" const val RRULE = "RRULE:" const val CATEGORIES = "CATEGORIES:" @@ -116,6 +118,7 @@ const val SEQUENCE = "SEQUENCE" const val CATEGORY_COLOR = "CATEGORY_COLOR:" const val DISPLAY = "DISPLAY" +const val EMAIL = "EMAIL" const val FREQ = "FREQ" const val UNTIL = "UNTIL" const val COUNT = "COUNT" diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt index 35a959666..1c7355b3c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsExporter.kt @@ -1,8 +1,10 @@ package com.simplemobiletools.calendar.pro.helpers import com.simplemobiletools.calendar.pro.R +import com.simplemobiletools.calendar.pro.extensions.calDAVHelper import com.simplemobiletools.calendar.pro.extensions.eventTypesDB import com.simplemobiletools.calendar.pro.helpers.IcsExporter.ExportResult.* +import com.simplemobiletools.calendar.pro.models.CalDAVCalendar import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.getFileOutputStream @@ -19,6 +21,7 @@ class IcsExporter { private var eventsExported = 0 private var eventsFailed = 0 + private var calendars = ArrayList() fun exportEvents(activity: BaseSimpleActivity, file: File, events: ArrayList, showExportingToast: Boolean, callback: (result: ExportResult) -> Unit) { val fileDirItem = FileDirItem(file.absolutePath, file.name) @@ -29,6 +32,7 @@ class IcsExporter { } Thread { + calendars = activity.calDAVHelper.getCalDAVCalendars("", false) if (showExportingToast) { activity.toast(R.string.exporting) } @@ -77,17 +81,20 @@ class IcsExporter { } private fun fillReminders(event: Event, out: BufferedWriter) { - checkReminder(event.reminder1Minutes, out) - checkReminder(event.reminder2Minutes, out) - checkReminder(event.reminder3Minutes, out) - } - - private fun checkReminder(minutes: Int, out: BufferedWriter) { - if (minutes != -1) { + event.getReminders().forEach { + val reminder = it out.apply { writeLn(BEGIN_ALARM) - writeLn("$ACTION$DISPLAY") - writeLn("$TRIGGER-${Parser().getDurationCode(minutes.toLong())}") + if (reminder.type == REMINDER_NOTIFICATION) { + writeLn("$ACTION$DISPLAY") + } else { + writeLn("$ACTION$EMAIL") + val attendee = calendars.firstOrNull { it.id == event.getCalDAVCalendarId()}?.accountName + if (attendee != null) { + writeLn("$ATTENDEE$MAILTO$attendee") + } + } + writeLn("$TRIGGER-${Parser().getDurationCode(reminder.minutes.toLong())}") writeLn(END_ALARM) } } From b4baa8d27f414a8a2f8af01c5ea51a39b29eaf04 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 13:04:18 +0100 Subject: [PATCH 69/89] handle importing events with email reminders --- .../calendar/pro/helpers/IcsImporter.kt | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt index 025c79e3b..52fa088a9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt @@ -8,6 +8,7 @@ import com.simplemobiletools.calendar.pro.extensions.eventsHelper import com.simplemobiletools.calendar.pro.helpers.IcsImporter.ImportResult.* import com.simplemobiletools.calendar.pro.models.Event import com.simplemobiletools.calendar.pro.models.EventType +import com.simplemobiletools.calendar.pro.models.Reminder import com.simplemobiletools.commons.extensions.areDigitsOnly import com.simplemobiletools.commons.extensions.showErrorToast import java.io.File @@ -26,6 +27,7 @@ class IcsImporter(val activity: SimpleActivity) { private var curRecurrenceDayCode = "" private var curFlags = 0 private var curReminderMinutes = ArrayList() + private var curReminderActions = ArrayList() private var curRepeatExceptions = ArrayList() private var curRepeatInterval = 0 private var curRepeatLimit = 0L @@ -38,6 +40,7 @@ class IcsImporter(val activity: SimpleActivity) { private var isDescription = false private var isSequence = false private var curReminderTriggerMinutes = -1 + private var curReminderTriggerAction = REMINDER_NOTIFICATION private val eventsHelper = activity.eventsHelper private var eventsImported = 0 @@ -101,7 +104,11 @@ class IcsImporter(val activity: SimpleActivity) { curRepeatLimit = repeatRule.repeatLimit } else if (line.startsWith(ACTION)) { isNotificationDescription = true - isProperReminderAction = line.substring(ACTION.length) == DISPLAY + val action = line.substring(ACTION.length) + isProperReminderAction = action == DISPLAY || action == EMAIL + if (isProperReminderAction) { + curReminderTriggerAction = if (action == DISPLAY) REMINDER_NOTIFICATION else REMINDER_EMAIL + } } else if (line.startsWith(TRIGGER)) { curReminderTriggerMinutes = Parser().parseDurationSeconds(line.substring(TRIGGER.length)) / 60 } else if (line.startsWith(CATEGORY_COLOR)) { @@ -129,8 +136,9 @@ class IcsImporter(val activity: SimpleActivity) { } else if (line.startsWith(SEQUENCE)) { isSequence = true } else if (line == END_ALARM) { - if (isProperReminderAction && curReminderTriggerMinutes != -1) { + if (isProperReminderAction && curReminderTriggerMinutes != REMINDER_OFF) { curReminderMinutes.add(curReminderTriggerMinutes) + curReminderActions.add(curReminderTriggerAction) } } else if (line == END_EVENT) { if (curStart != -1L && curEnd == -1L) { @@ -147,10 +155,17 @@ class IcsImporter(val activity: SimpleActivity) { continue } + 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 }) + ) + reminders = reminders.filter { it.minutes != REMINDER_OFF }.sortedBy { it.minutes }.toMutableList() as ArrayList + 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, curReminderMinutes.getOrElse(0) { -1 }, - curReminderMinutes.getOrElse(1) { -1 }, curReminderMinutes.getOrElse(2) { -1 }, 0, 0, 0, curRepeatInterval, curRepeatRule, + 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, ArrayList(), curImportId, curFlags, curEventTypeId, 0, curLastModified, source) if (event.getIsAllDay() && curEnd > curStart) { @@ -269,6 +284,7 @@ class IcsImporter(val activity: SimpleActivity) { curRecurrenceDayCode = "" curFlags = 0 curReminderMinutes = ArrayList() + curReminderActions = ArrayList() curRepeatExceptions = ArrayList() curRepeatInterval = 0 curRepeatLimit = 0L @@ -279,6 +295,7 @@ class IcsImporter(val activity: SimpleActivity) { isNotificationDescription = false isProperReminderAction = false isSequence = false - curReminderTriggerMinutes = -1 + curReminderTriggerMinutes = REMINDER_OFF + curReminderTriggerAction = REMINDER_NOTIFICATION } } From 01b4d80723500fd775dfda1bf55c71bdaed89e36 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Mar 2019 13:04:47 +0100 Subject: [PATCH 70/89] removing a magic number --- .../com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt index 52fa088a9..d9e8506f2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt @@ -39,7 +39,7 @@ class IcsImporter(val activity: SimpleActivity) { private var isProperReminderAction = false private var isDescription = false private var isSequence = false - private var curReminderTriggerMinutes = -1 + private var curReminderTriggerMinutes = REMINDER_OFF private var curReminderTriggerAction = REMINDER_NOTIFICATION private val eventsHelper = activity.eventsHelper From 0ba5f49da6870ba8e599fe171f31ee772cf25c4e Mon Sep 17 00:00:00 2001 From: Emanuele Petriglia Date: Wed, 13 Mar 2019 09:49:55 +0000 Subject: [PATCH 71/89] Update italian translation --- app/src/main/res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1ec5c47a7..a74e2503a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -99,7 +99,7 @@ Promemoria eventi - Add another attendee + Aggiungi un partecipante Importa eventi From f55900f3daf00c4e441c32fc6fb65aa07dce4a9f Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 13:48:28 +0100 Subject: [PATCH 72/89] adding an Attendees field at events --- .../calendar/pro/activities/EventActivity.kt | 34 +++++++++++++++--- app/src/main/res/drawable-hdpi/ic_people.png | Bin 0 -> 260 bytes app/src/main/res/drawable-xhdpi/ic_people.png | Bin 0 -> 313 bytes .../main/res/drawable-xxhdpi/ic_people.png | Bin 0 -> 425 bytes .../main/res/drawable-xxxhdpi/ic_people.png | Bin 0 -> 554 bytes app/src/main/res/layout/activity_event.xml | 34 ++++++++++++++++-- app/src/main/res/layout/item_attendee.xml | 23 ++++++++++++ 7 files changed, 85 insertions(+), 6 deletions(-) create mode 100755 app/src/main/res/drawable-hdpi/ic_people.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_people.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_people.png create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_people.png create mode 100644 app/src/main/res/layout/item_attendee.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 18ad13563..ff23682e7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -10,6 +10,7 @@ import android.view.Menu import android.view.MenuItem import android.view.WindowManager import android.widget.ImageView +import android.widget.RelativeLayout import androidx.core.app.NotificationManagerCompat import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.dialogs.* @@ -25,8 +26,10 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem +import com.simplemobiletools.commons.views.MyEditText import kotlinx.android.synthetic.main.activity_event.* import kotlinx.android.synthetic.main.activity_event.view.* +import kotlinx.android.synthetic.main.item_attendee.view.* import org.joda.time.DateTime import java.util.* import java.util.regex.Pattern @@ -58,7 +61,8 @@ class EventActivity : SimpleActivity() { private var mDialogTheme = 0 private var mEventOccurrenceTS = 0L private var mEventCalendarId = STORED_LOCALLY_ONLY - private var wasActivityInitialized = false + private var mWasActivityInitialized = false + private var mAttendeeViews = ArrayList() private lateinit var mEventStartDateTime: DateTime private lateinit var mEventEndDateTime: DateTime @@ -123,6 +127,7 @@ class EventActivity : SimpleActivity() { updateTexts() updateEventType() updateCalDAVCalendar() + updateAttendees() } event_show_on_map.setOnClickListener { showOnMap() } @@ -181,12 +186,12 @@ class EventActivity : SimpleActivity() { updateTextColors(event_scrollview) updateIconColors() - wasActivityInitialized = true + mWasActivityInitialized = true } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_event, menu) - if (wasActivityInitialized) { + if (mWasActivityInitialized) { menu.findItem(R.id.delete).isVisible = mEvent.id != null menu.findItem(R.id.share).isVisible = mEvent.id != null menu.findItem(R.id.duplicate).isVisible = mEvent.id != null @@ -207,7 +212,7 @@ class EventActivity : SimpleActivity() { override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - if (!wasActivityInitialized) { + if (!mWasActivityInitialized) { return } @@ -258,6 +263,7 @@ class EventActivity : SimpleActivity() { updateTexts() updateEventType() updateCalDAVCalendar() + updateAttendees() } private fun updateTexts() { @@ -860,6 +866,7 @@ class EventActivity : SimpleActivity() { flags = mEvent.flags.addBitIf(event_all_day.isChecked, FLAG_ALL_DAY) repeatLimit = if (repeatInterval == 0) 0 else mRepeatLimit repeatRule = mRepeatRule + attendees = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList eventType = newEventType lastUpdated = System.currentTimeMillis() source = newSource @@ -1075,6 +1082,24 @@ class EventActivity : SimpleActivity() { } } + private fun updateAttendees() { + addAttendee() + event_attendees_image.layoutParams.height = event_repetition_image.height + } + + private fun addAttendee() { + val attendeeHolder = layoutInflater.inflate(R.layout.item_attendee, event_attendees_holder, false) as RelativeLayout + mAttendeeViews.add(attendeeHolder.event_attendee) + attendeeHolder.event_attendee.onTextChangeListener { + if (mAttendeeViews.none { it.value.isEmpty() }) { + addAttendee() + } + } + + event_attendees_holder.addView(attendeeHolder) + attendeeHolder.event_attendee.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor) + } + private fun updateIconColors() { val textColor = config.textColor event_time_image.applyColorFilter(textColor) @@ -1086,5 +1111,6 @@ class EventActivity : SimpleActivity() { event_reminder_1_type.applyColorFilter(textColor) event_reminder_2_type.applyColorFilter(textColor) event_reminder_3_type.applyColorFilter(textColor) + event_attendees_image.applyColorFilter(textColor) } } diff --git a/app/src/main/res/drawable-hdpi/ic_people.png b/app/src/main/res/drawable-hdpi/ic_people.png new file mode 100755 index 0000000000000000000000000000000000000000..26691bec827eed8b9fbbe5e5b9b903b8990999ff GIT binary patch literal 260 zcmV+f0sH=mP) zF_zfdvE)Eb&XJ|qe-Rco4jvv3_VX>+XkEq%mm3wjiYqRwdNIT|bRARnlt@Z;%+zkg z-PCKW$!U|bR@<$)E1c=#QXjzB6$-j2)OKv{3LQ!7&p*`b{hbG%8)r2idh+}L0000< KMNUMnLSTXndu`PK literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_people.png b/app/src/main/res/drawable-xhdpi/ic_people.png new file mode 100755 index 0000000000000000000000000000000000000000..93f23280cfa6b2d3c4bd40d4162c165999be0525 GIT binary patch literal 313 zcmV-90mlA`P)uc|!O1F%tWwd?k%L@YBi=(a^-b&B4D={9k7jk%0zJlwd5&W}z_WR}u^!;lJRh+h zU?e?|?xnBjA==A6@=>e@sCzQ2s~+tEw)9NvX~uhqhPE6GbTk6}|EO58>&%r`00Y-f z?OD!#ux~uulPo!OV{AS~ZXH<4ChYi1^l55Zh9ZVqQ-8yGs!v#VkGMMIEgG&+`Wcs(}SjsZ_oJVz)}TpYPoV00000 LNkvXXu0mjf6+(i- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_people.png b/app/src/main/res/drawable-xxhdpi/ic_people.png new file mode 100755 index 0000000000000000000000000000000000000000..6695583fe3cc6852e1d59c1004dbdc9d618f7310 GIT binary patch literal 425 zcmV;a0apHrP)^nbBa7A8VnfFphV8l+p$5Nzv`?RdJDGb5#^mtd#}bS z9VY3JwDxM$n5JUwmDokHZRypxLsGW%YCIu%F!Xv1k#r5c9-m0MhF*_nBrQX)$1Rd; zL$AjUlAOLb;ht%##$J!4{3+1)CZy>RrAOM{$9aCN+j|4@T*wEP+&kyy9?N7YQl&6ln5a zO$saoA>8Qt5E9g}s*?!KT;x&iBaxv?9J*vea}Ra>53&r2%aCm7F?d7n!&sqDocgQ; zzc|(PW0WzF{!ls4^<%scx7X0Yrs~ItAE7r*#_Sdv^M!mNUufeGS{%h^n zWRS@SRDMYAM=PJA%;c4V=T ztAO1#7Lu8ifmXb;_6Ag99(O6PyUe3fQVQCTm%cZkIxG2z%12g~_LoI}V;@H)R*;Qa zHY-YglI%6~arEU4Kg%2XmU!`zZRpF!C{zr0U@SKGC1Wghf)%Jro?r#~@vHPt0&F+; zA*%42U*$Dbg6X5peTcdIN^^thEzEt0OQ;!cV5nv8LuB(SWe3wMnEMdFSb69B0tUW- sFCgFx_yTIaz<`F1W;Owh5Bw6OaK4?07*qoM6N<$f*=3}KL7v# literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_event.xml b/app/src/main/res/layout/activity_event.xml index 05c2e4403..7b1bfe893 100644 --- a/app/src/main/res/layout/activity_event.xml +++ b/app/src/main/res/layout/activity_event.xml @@ -380,10 +380,40 @@ android:importantForAccessibility="no"/> + + + + + + diff --git a/app/src/main/res/layout/item_attendee.xml b/app/src/main/res/layout/item_attendee.xml new file mode 100644 index 000000000..5eb797fcf --- /dev/null +++ b/app/src/main/res/layout/item_attendee.xml @@ -0,0 +1,23 @@ + + + + + + From b70dfd11c6f0f97b98a58f1c64d0d0b29945683d Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 13:58:51 +0100 Subject: [PATCH 73/89] properly restore event reminder types on device rotation --- .../calendar/pro/activities/EventActivity.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index ff23682e7..76b4c52ba 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -42,6 +42,9 @@ class EventActivity : SimpleActivity() { private val REMINDER_1_MINUTES = "REMINDER_1_MINUTES" private val REMINDER_2_MINUTES = "REMINDER_2_MINUTES" private val REMINDER_3_MINUTES = "REMINDER_3_MINUTES" + private val REMINDER_1_TYPE = "REMINDER_1_TYPE" + private val REMINDER_2_TYPE = "REMINDER_2_TYPE" + private val REMINDER_3_TYPE = "REMINDER_3_TYPE" private val REPEAT_INTERVAL = "REPEAT_INTERVAL" private val REPEAT_LIMIT = "REPEAT_LIMIT" private val REPEAT_RULE = "REPEAT_RULE" @@ -225,6 +228,10 @@ class EventActivity : SimpleActivity() { putInt(REMINDER_2_MINUTES, mReminder2Minutes) putInt(REMINDER_3_MINUTES, mReminder3Minutes) + putInt(REMINDER_1_TYPE, mReminder1Type) + putInt(REMINDER_2_TYPE, mReminder2Type) + putInt(REMINDER_3_TYPE, mReminder3Type) + putInt(REPEAT_INTERVAL, mRepeatInterval) putInt(REPEAT_RULE, mRepeatRule) putLong(REPEAT_LIMIT, mRepeatLimit) @@ -250,6 +257,10 @@ class EventActivity : SimpleActivity() { mReminder2Minutes = getInt(REMINDER_2_MINUTES) mReminder3Minutes = getInt(REMINDER_3_MINUTES) + mReminder1Type = getInt(REMINDER_1_TYPE) + mReminder2Type = getInt(REMINDER_2_TYPE) + mReminder3Type = getInt(REMINDER_3_TYPE) + mRepeatInterval = getInt(REPEAT_INTERVAL) mRepeatRule = getInt(REPEAT_RULE) mRepeatLimit = getLong(REPEAT_LIMIT) From 96458a94faeed8860d1ea6447898e0c227ef007d Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 14:14:57 +0100 Subject: [PATCH 74/89] properly restore attendees on device rotation --- .../calendar/pro/activities/EventActivity.kt | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 76b4c52ba..4db5646aa 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -33,6 +33,7 @@ import kotlinx.android.synthetic.main.item_attendee.view.* import org.joda.time.DateTime import java.util.* import java.util.regex.Pattern +import kotlin.collections.ArrayList class EventActivity : SimpleActivity() { private val LAT_LON_PATTERN = "^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?)([,;])\\s*[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)\$" @@ -48,6 +49,7 @@ class EventActivity : SimpleActivity() { private val REPEAT_INTERVAL = "REPEAT_INTERVAL" private val REPEAT_LIMIT = "REPEAT_LIMIT" private val REPEAT_RULE = "REPEAT_RULE" + private val ATTENDEES = "ATTENDEES" private val EVENT_TYPE_ID = "EVENT_TYPE_ID" private val EVENT_CALENDAR_ID = "EVENT_CALENDAR_ID" @@ -236,6 +238,8 @@ class EventActivity : SimpleActivity() { putInt(REPEAT_RULE, mRepeatRule) putLong(REPEAT_LIMIT, mRepeatLimit) + putStringArrayList(ATTENDEES, getAllAttendees()) + putLong(EVENT_TYPE_ID, mEventTypeId) putInt(EVENT_CALENDAR_ID, mEventCalendarId) } @@ -265,6 +269,8 @@ class EventActivity : SimpleActivity() { mRepeatRule = getInt(REPEAT_RULE) mRepeatLimit = getLong(REPEAT_LIMIT) + mEvent.attendees = getStringArrayList(ATTENDEES) as ArrayList + mEventTypeId = getLong(EVENT_TYPE_ID) mEventCalendarId = getInt(EVENT_CALENDAR_ID) } @@ -877,7 +883,7 @@ class EventActivity : SimpleActivity() { flags = mEvent.flags.addBitIf(event_all_day.isChecked, FLAG_ALL_DAY) repeatLimit = if (repeatInterval == 0) 0 else mRepeatLimit repeatRule = mRepeatRule - attendees = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList + attendees = getAllAttendees() eventType = newEventType lastUpdated = System.currentTimeMillis() source = newSource @@ -1094,23 +1100,39 @@ class EventActivity : SimpleActivity() { } private fun updateAttendees() { + mEvent.attendees.forEach { + addAttendee(it) + } addAttendee() - 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 + } + } } - private fun addAttendee() { + private fun addAttendee(value: String? = null) { val attendeeHolder = layoutInflater.inflate(R.layout.item_attendee, event_attendees_holder, false) as RelativeLayout mAttendeeViews.add(attendeeHolder.event_attendee) attendeeHolder.event_attendee.onTextChangeListener { - if (mAttendeeViews.none { it.value.isEmpty() }) { + if (value == null && mAttendeeViews.none { it.value.isEmpty() }) { addAttendee() } } event_attendees_holder.addView(attendeeHolder) attendeeHolder.event_attendee.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor) + if (value != null) { + attendeeHolder.event_attendee.setText(value) + } } + private fun getAllAttendees() = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList + private fun updateIconColors() { val textColor = config.textColor event_time_image.applyColorFilter(textColor) From d0e0324e5764f97b542aa1f91dfc81955e2ae70e Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 14:40:31 +0100 Subject: [PATCH 75/89] show attendees only at caldav synced events --- .../calendar/pro/activities/EventActivity.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 4db5646aa..1ad0f5910 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -288,6 +288,7 @@ class EventActivity : SimpleActivity() { checkReminderTexts() updateStartTexts() updateEndTexts() + updateAttendeesVisibility() } private fun setupEditEvent() { @@ -661,6 +662,13 @@ class EventActivity : SimpleActivity() { updateReminderTypeImage(event_reminder_3_type, Reminder(mReminder3Minutes, mReminder3Type)) } + private fun updateAttendeesVisibility() { + val isSyncedEvent = mEventCalendarId != STORED_LOCALLY_ONLY + event_attendees_image.beVisibleIf(isSyncedEvent) + event_attendees_holder.beVisibleIf(isSyncedEvent) + event_attendees_divider.beVisibleIf(isSyncedEvent) + } + private fun updateReminderTypeImage(view: ImageView, reminder: Reminder) { view.beVisibleIf(reminder.minutes != REMINDER_OFF && mEventCalendarId != STORED_LOCALLY_ONLY) val drawable = if (reminder.type == REMINDER_NOTIFICATION) R.drawable.ic_bell else R.drawable.ic_email @@ -706,6 +714,7 @@ class EventActivity : SimpleActivity() { config.lastUsedCaldavCalendarId = it updateCurrentCalendarInfo(getCalendarWithId(calendars, it)) updateReminderTypeImages() + updateAttendeesVisibility() } } } else { @@ -883,7 +892,7 @@ class EventActivity : SimpleActivity() { flags = mEvent.flags.addBitIf(event_all_day.isChecked, FLAG_ALL_DAY) repeatLimit = if (repeatInterval == 0) 0 else mRepeatLimit repeatRule = mRepeatRule - attendees = getAllAttendees() + attendees = if (mEventCalendarId == STORED_LOCALLY_ONLY) ArrayList() else getAllAttendees() eventType = newEventType lastUpdated = System.currentTimeMillis() source = newSource From 75ac968b466187941e4a0113d4a23fecacdb1d2d Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 15:04:16 +0100 Subject: [PATCH 76/89] create a helper function for retrieving caldav event attendees --- .../calendar/pro/helpers/CalDAVHelper.kt | 31 ++++++++++++++++--- .../calendar/pro/models/Attendee.kt | 5 +++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index ac90fa8a5..65f1a4980 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -10,10 +10,7 @@ import android.provider.CalendarContract.Reminders import android.util.SparseIntArray import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.extensions.* -import com.simplemobiletools.calendar.pro.models.CalDAVCalendar -import com.simplemobiletools.calendar.pro.models.Event -import com.simplemobiletools.calendar.pro.models.EventType -import com.simplemobiletools.calendar.pro.models.Reminder +import com.simplemobiletools.calendar.pro.models.* import com.simplemobiletools.calendar.pro.objects.States.isUpdatingCalDAV import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR @@ -474,6 +471,32 @@ class CalDAVHelper(val context: Context) { return reminders.sortedBy { it.minutes } } + private fun getCalDAVEventAttendees(eventId: Long): List { + val attendees = ArrayList() + val uri = CalendarContract.Attendees.CONTENT_URI + val projection = arrayOf( + CalendarContract.Attendees.ATTENDEE_NAME, + CalendarContract.Attendees.ATTENDEE_EMAIL, + CalendarContract.Attendees.ATTENDEE_STATUS) + val selection = "${CalendarContract.Attendees.EVENT_ID} = $eventId" + var cursor: Cursor? = null + try { + cursor = context.contentResolver.query(uri, projection, selection, null, null) + if (cursor?.moveToFirst() == true) { + do { + val name = cursor.getStringValue(CalendarContract.Attendees.ATTENDEE_NAME) + val email = cursor.getStringValue(CalendarContract.Attendees.ATTENDEE_EMAIL) + val status = cursor.getIntValue(CalendarContract.Attendees.ATTENDEE_STATUS) + val attendee = Attendee(name, email, status) + attendees.add(attendee) + } while (cursor.moveToNext()) + } + } finally { + cursor?.close() + } + return attendees + } + private fun getCalDAVEventImportId(calendarId: Int, eventId: Long) = "$CALDAV-$calendarId-$eventId" private fun refreshCalDAVCalendar(event: Event) = context.refreshCalDAVCalendars(event.getCalDAVCalendarId().toString(), false) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt new file mode 100644 index 000000000..ec688b82c --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt @@ -0,0 +1,5 @@ +package com.simplemobiletools.calendar.pro.models + +data class Attendee(val name: String, val email: String, val status: Int) { + fun getPublicName() = if (name.isNotEmpty()) name else email +} From c457bb36b5a7c33ffab329a5c9e77e246e6440af Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 15:39:42 +0100 Subject: [PATCH 77/89] make more use of Attendees model class --- .../calendar/pro/activities/EventActivity.kt | 29 ++++++++++++------- .../calendar/pro/databases/EventsDatabase.kt | 2 +- .../calendar/pro/helpers/CalDAVHelper.kt | 4 ++- .../calendar/pro/helpers/IcsImporter.kt | 2 +- .../calendar/pro/models/Event.kt | 2 +- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 1ad0f5910..35fb59513 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -12,15 +12,14 @@ import android.view.WindowManager import android.widget.ImageView import android.widget.RelativeLayout import androidx.core.app.NotificationManagerCompat +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.dialogs.* 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.CalDAVCalendar -import com.simplemobiletools.calendar.pro.models.Event -import com.simplemobiletools.calendar.pro.models.EventType -import com.simplemobiletools.calendar.pro.models.Reminder +import com.simplemobiletools.calendar.pro.models.* import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* @@ -67,6 +66,7 @@ class EventActivity : SimpleActivity() { private var mEventOccurrenceTS = 0L private var mEventCalendarId = STORED_LOCALLY_ONLY private var mWasActivityInitialized = false + private var mAttendees = ArrayList() private var mAttendeeViews = ArrayList() private lateinit var mEventStartDateTime: DateTime @@ -238,7 +238,7 @@ class EventActivity : SimpleActivity() { putInt(REPEAT_RULE, mRepeatRule) putLong(REPEAT_LIMIT, mRepeatLimit) - putStringArrayList(ATTENDEES, getAllAttendees()) + putString(ATTENDEES, getAllAttendees()) putLong(EVENT_TYPE_ID, mEventTypeId) putInt(EVENT_CALENDAR_ID, mEventCalendarId) @@ -269,7 +269,8 @@ class EventActivity : SimpleActivity() { mRepeatRule = getInt(REPEAT_RULE) mRepeatLimit = getLong(REPEAT_LIMIT) - mEvent.attendees = getStringArrayList(ATTENDEES) as ArrayList + mAttendees = Gson().fromJson>(getString(ATTENDEES), object : TypeToken>() {}.type) + ?: ArrayList() mEventTypeId = getLong(EVENT_TYPE_ID) mEventCalendarId = getInt(EVENT_CALENDAR_ID) @@ -313,6 +314,7 @@ class EventActivity : SimpleActivity() { mRepeatRule = mEvent.repeatRule mEventTypeId = mEvent.eventType mEventCalendarId = mEvent.getCalDAVCalendarId() + mAttendees = Gson().fromJson>(mEvent.attendees, object : TypeToken>() {}.type) ?: ArrayList() checkRepeatTexts(mRepeatInterval) } @@ -892,7 +894,7 @@ class EventActivity : SimpleActivity() { flags = mEvent.flags.addBitIf(event_all_day.isChecked, FLAG_ALL_DAY) repeatLimit = if (repeatInterval == 0) 0 else mRepeatLimit repeatRule = mRepeatRule - attendees = if (mEventCalendarId == STORED_LOCALLY_ONLY) ArrayList() else getAllAttendees() + attendees = if (mEventCalendarId == STORED_LOCALLY_ONLY) "" else getAllAttendees() eventType = newEventType lastUpdated = System.currentTimeMillis() source = newSource @@ -1109,8 +1111,8 @@ class EventActivity : SimpleActivity() { } private fun updateAttendees() { - mEvent.attendees.forEach { - addAttendee(it) + mAttendees.forEach { + addAttendee(it.getPublicName()) } addAttendee() @@ -1140,7 +1142,14 @@ class EventActivity : SimpleActivity() { } } - private fun getAllAttendees() = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList + private fun getAllAttendees(): String { + val attendeeEmails = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList + val attendees = ArrayList() + attendeeEmails.mapTo(attendees) { + Attendee("", it, 0) + } + return Gson().toJson(attendees) + } private fun updateIconColors() { val textColor = config.textColor diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt index 19f0a72f0..19440190c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt @@ -67,7 +67,7 @@ abstract class EventsDatabase : RoomDatabase() { execSQL("ALTER TABLE events ADD COLUMN reminder_1_type INTEGER NOT NULL DEFAULT 0") execSQL("ALTER TABLE events ADD COLUMN reminder_2_type INTEGER NOT NULL DEFAULT 0") execSQL("ALTER TABLE events ADD COLUMN reminder_3_type INTEGER NOT NULL DEFAULT 0") - execSQL("ALTER TABLE events ADD COLUMN attendees TEXT NOT NULL DEFAULT '[]'") + execSQL("ALTER TABLE events ADD COLUMN attendees TEXT NOT NULL DEFAULT ''") } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 65f1a4980..81a1174f8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -8,6 +8,7 @@ import android.database.Cursor import android.provider.CalendarContract import android.provider.CalendarContract.Reminders import android.util.SparseIntArray +import com.google.gson.Gson import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.models.* @@ -203,6 +204,7 @@ class CalDAVHelper(val context: Context) { val originalId = cursor.getStringValue(CalendarContract.Events.ORIGINAL_ID) val originalInstanceTime = cursor.getLongValue(CalendarContract.Events.ORIGINAL_INSTANCE_TIME) val reminders = getCalDAVEventReminders(id) + val attendees = Gson().toJson(getCalDAVEventAttendees(id)) if (endTS == 0L) { val duration = cursor.getStringValue(CalendarContract.Events.DURATION) ?: "" @@ -219,7 +221,7 @@ class CalDAVHelper(val context: Context) { reminder2?.minutes ?: REMINDER_OFF, reminder3?.minutes ?: REMINDER_OFF, reminder1?.type ?: REMINDER_NOTIFICATION, reminder2?.type ?: REMINDER_NOTIFICATION, reminder3?.type ?: REMINDER_NOTIFICATION, repeatRule.repeatInterval, repeatRule.repeatRule, - repeatRule.repeatLimit, ArrayList(), ArrayList(), importId, allDay, eventTypeId, source = source) + repeatRule.repeatLimit, ArrayList(), attendees, importId, allDay, eventTypeId, source = source) if (event.getIsAllDay()) { event.startTS = Formatter.getShiftedImportTimestamp(event.startTS) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt index d9e8506f2..c834bb5dd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/IcsImporter.kt @@ -166,7 +166,7 @@ class IcsImporter(val activity: SimpleActivity) { 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, ArrayList(), curImportId, curFlags, curEventTypeId, 0, curLastModified, source) + curRepeatLimit, curRepeatExceptions, "", curImportId, curFlags, curEventTypeId, 0, curLastModified, source) if (event.getIsAllDay() && curEnd > curStart) { event.endTS -= DAY diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt index 842eb6d46..72c2dd1f7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Event.kt @@ -29,7 +29,7 @@ data class Event( @ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0, @ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L, @ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: ArrayList = ArrayList(), - @ColumnInfo(name = "attendees") var attendees: ArrayList = ArrayList(), + @ColumnInfo(name = "attendees") var attendees: String = "", @ColumnInfo(name = "import_id") var importId: String = "", @ColumnInfo(name = "flags") var flags: Int = 0, @ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID, From b8f206e042638dc961518762b6022799b9a0bed5 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 16:30:35 +0100 Subject: [PATCH 78/89] handle adding attendees in caldav calendars --- .../calendar/pro/activities/EventActivity.kt | 3 +- .../calendar/pro/helpers/CalDAVHelper.kt | 31 +++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 35fb59513..fba374706 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -5,6 +5,7 @@ import android.app.TimePickerDialog import android.content.Intent import android.net.Uri import android.os.Bundle +import android.provider.CalendarContract import android.text.method.LinkMovementMethod import android.view.Menu import android.view.MenuItem @@ -1146,7 +1147,7 @@ class EventActivity : SimpleActivity() { val attendeeEmails = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList val attendees = ArrayList() attendeeEmails.mapTo(attendees) { - Attendee("", it, 0) + Attendee("", it, CalendarContract.Attendees.ATTENDEE_STATUS_INVITED) } return Gson().toJson(attendees) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 81a1174f8..96c307d36 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -9,6 +9,7 @@ import android.provider.CalendarContract import android.provider.CalendarContract.Reminders import android.util.SparseIntArray import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.models.* @@ -323,6 +324,7 @@ class CalDAVHelper(val context: Context) { event.importId = getCalDAVEventImportId(calendarId, eventRemoteID) setupCalDAVEventReminders(event) + setupCalDAVEventAttendees(event) setupCalDAVEventImportId(event) refreshCalDAVCalendar(event) } @@ -337,11 +339,11 @@ class CalDAVHelper(val context: Context) { context.contentResolver.update(newUri, values, null, null) setupCalDAVEventReminders(event) + setupCalDAVEventAttendees(event) setupCalDAVEventImportId(event) refreshCalDAVCalendar(event) } - @SuppressLint("MissingPermission") private fun setupCalDAVEventReminders(event: Event) { clearEventReminders(event) event.getReminders().forEach { @@ -359,6 +361,25 @@ class CalDAVHelper(val context: Context) { } } + private fun setupCalDAVEventAttendees(event: Event) { + clearEventAttendees(event) + val attendees = Gson().fromJson>(event.attendees, object : TypeToken>() {}.type) ?: ArrayList() + attendees.forEach { + val contentValues = ContentValues().apply { + put(CalendarContract.Attendees.ATTENDEE_NAME, it.name) + put(CalendarContract.Attendees.ATTENDEE_EMAIL, it.email) + put(CalendarContract.Attendees.ATTENDEE_STATUS, CalendarContract.Attendees.ATTENDEE_STATUS_ACCEPTED) + put(CalendarContract.Attendees.EVENT_ID, event.getCalDAVEventId()) + } + + try { + context.contentResolver.insert(CalendarContract.Attendees.CONTENT_URI, contentValues) + } catch (e: Exception) { + context.toast(R.string.unknown_error_occurred) + } + } + } + private fun setupCalDAVEventImportId(event: Event) { context.eventsDB.updateEventImportIdAndSource(event.importId, "$CALDAV-${event.getCalDAVCalendarId()}", event.id!!) } @@ -394,13 +415,18 @@ class CalDAVHelper(val context: Context) { } } - @SuppressLint("MissingPermission") private fun clearEventReminders(event: Event) { val selection = "${Reminders.EVENT_ID} = ?" val selectionArgs = arrayOf(event.getCalDAVEventId().toString()) context.contentResolver.delete(Reminders.CONTENT_URI, selection, selectionArgs) } + private fun clearEventAttendees(event: Event) { + val selection = "${CalendarContract.Attendees.EVENT_ID} = ?" + val selectionArgs = arrayOf(event.getCalDAVEventId().toString()) + context.contentResolver.delete(CalendarContract.Attendees.CONTENT_URI, selection, selectionArgs) + } + private fun getDurationCode(event: Event): String { return if (event.getIsAllDay()) { val dur = Math.max(1, (event.endTS - event.startTS) / DAY) @@ -425,7 +451,6 @@ class CalDAVHelper(val context: Context) { refreshCalDAVCalendar(event) } - @SuppressLint("MissingPermission") fun insertEventRepeatException(event: Event, occurrenceTS: Long): Long { val uri = CalendarContract.Events.CONTENT_URI val values = fillEventRepeatExceptionValues(event, occurrenceTS) From ad35ee5a93ec6decc7b76f279d8c9a5ba379ac4f Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 18:08:00 +0100 Subject: [PATCH 79/89] handle Contacts permission at inserting attendees --- .../calendar/pro/activities/EventActivity.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index fba374706..d22dd8e73 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -67,6 +67,7 @@ class EventActivity : SimpleActivity() { private var mEventOccurrenceTS = 0L private var mEventCalendarId = STORED_LOCALLY_ONLY private var mWasActivityInitialized = false + private var mWasContactsPermissionChecked = false private var mAttendees = ArrayList() private var mAttendeeViews = ArrayList() @@ -81,6 +82,7 @@ class EventActivity : SimpleActivity() { supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_cross) val intent = intent ?: return mDialogTheme = getDialogTheme() + mWasContactsPermissionChecked = hasPermission(PERMISSION_READ_CONTACTS) val eventId = intent.getLongExtra(EVENT_ID, 0L) Thread { @@ -1131,8 +1133,13 @@ class EventActivity : SimpleActivity() { val attendeeHolder = layoutInflater.inflate(R.layout.item_attendee, event_attendees_holder, false) as RelativeLayout mAttendeeViews.add(attendeeHolder.event_attendee) attendeeHolder.event_attendee.onTextChangeListener { - if (value == null && mAttendeeViews.none { it.value.isEmpty() }) { - addAttendee() + if (mWasContactsPermissionChecked && value == null) { + checkNewAttendeeField(value) + } else { + handlePermission(PERMISSION_READ_CONTACTS) { + checkNewAttendeeField(value) + mWasContactsPermissionChecked = true + } } } @@ -1143,6 +1150,12 @@ class EventActivity : SimpleActivity() { } } + private fun checkNewAttendeeField(value: String?) { + if (value == null && mAttendeeViews.none { it.value.isEmpty() }) { + addAttendee() + } + } + private fun getAllAttendees(): String { val attendeeEmails = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList val attendees = ArrayList() From 83bad27e77ad485bd8ddeb1c4424b1b358ebcf4e Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 19:31:15 +0100 Subject: [PATCH 80/89] prefetch contacts available for attendee autocompletion --- .../calendar/pro/activities/EventActivity.kt | 87 ++++++++++++++++++- .../calendar/pro/helpers/CalDAVHelper.kt | 2 +- .../calendar/pro/models/Attendee.kt | 2 +- 3 files changed, 88 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index d22dd8e73..ec1c935a9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -3,9 +3,12 @@ package com.simplemobiletools.calendar.pro.activities import android.app.DatePickerDialog import android.app.TimePickerDialog import android.content.Intent +import android.database.Cursor import android.net.Uri import android.os.Bundle import android.provider.CalendarContract +import android.provider.ContactsContract +import android.text.TextUtils import android.text.method.LinkMovementMethod import android.view.Menu import android.view.MenuItem @@ -70,6 +73,7 @@ class EventActivity : SimpleActivity() { private var mWasContactsPermissionChecked = false private var mAttendees = ArrayList() private var mAttendeeViews = ArrayList() + private var mAvailableContacts = ArrayList() private lateinit var mEventStartDateTime: DateTime private lateinit var mEventEndDateTime: DateTime @@ -96,6 +100,7 @@ class EventActivity : SimpleActivity() { runOnUiThread { gotEvent(savedInstanceState, localEventType, event) } + fillAvailableContacts() }.start() } @@ -1113,6 +1118,19 @@ class EventActivity : SimpleActivity() { } } + private fun fillAvailableContacts() { + mAvailableContacts = getEmails() + + val names = getNames() + mAvailableContacts.forEach { + val contactId = it.contactId + val name = names.firstOrNull { it.contactId == contactId }?.name + if (name != null) { + it.name = name + } + } + } + private fun updateAttendees() { mAttendees.forEach { addAttendee(it.getPublicName()) @@ -1160,11 +1178,78 @@ class EventActivity : SimpleActivity() { val attendeeEmails = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList val attendees = ArrayList() attendeeEmails.mapTo(attendees) { - Attendee("", it, CalendarContract.Attendees.ATTENDEE_STATUS_INVITED) + Attendee(0, "", it, CalendarContract.Attendees.ATTENDEE_STATUS_INVITED) } return Gson().toJson(attendees) } + private fun getNames(): List { + val contacts = ArrayList() + val uri = ContactsContract.Data.CONTENT_URI + val projection = arrayOf( + ContactsContract.Data.CONTACT_ID, + ContactsContract.CommonDataKinds.StructuredName.PREFIX, + ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, + ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, + ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, + ContactsContract.CommonDataKinds.StructuredName.SUFFIX) + + val selection = "${ContactsContract.Data.MIMETYPE} = ?" + val selectionArgs = arrayOf(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) + + var cursor: Cursor? = null + try { + cursor = contentResolver.query(uri, projection, selection, selectionArgs, null) + if (cursor?.moveToFirst() == true) { + do { + val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) + val prefix = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX) ?: "" + val firstName = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME) ?: "" + val middleName = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME) ?: "" + val surname = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME) ?: "" + val suffix = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX) ?: "" + + val names = arrayListOf(prefix, firstName, middleName, surname, suffix).filter { it.trim().isNotEmpty() } + val fullName = TextUtils.join("", names) + if (fullName.isNotEmpty()) { + val contact = Attendee(id, fullName, "", 0) + contacts.add(contact) + } + } while (cursor.moveToNext()) + } + } catch (ignored: Exception) { + } finally { + cursor?.close() + } + return contacts + } + + private fun getEmails(): ArrayList { + val contacts = ArrayList() + val uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI + val projection = arrayOf( + ContactsContract.Data.CONTACT_ID, + ContactsContract.CommonDataKinds.Email.DATA + ) + + var cursor: Cursor? = null + try { + cursor = contentResolver.query(uri, projection, null, null, null) + if (cursor?.moveToFirst() == true) { + do { + val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) + val email = cursor.getStringValue(ContactsContract.CommonDataKinds.Email.DATA) ?: continue + val contact = Attendee(id, "", email, 0) + contacts.add(contact) + } while (cursor.moveToNext()) + } + } catch (ignored: Exception) { + } finally { + cursor?.close() + } + return contacts + } + private fun updateIconColors() { val textColor = config.textColor event_time_image.applyColorFilter(textColor) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 96c307d36..3fbd06063 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -514,7 +514,7 @@ class CalDAVHelper(val context: Context) { val name = cursor.getStringValue(CalendarContract.Attendees.ATTENDEE_NAME) val email = cursor.getStringValue(CalendarContract.Attendees.ATTENDEE_EMAIL) val status = cursor.getIntValue(CalendarContract.Attendees.ATTENDEE_STATUS) - val attendee = Attendee(name, email, status) + val attendee = Attendee(0, name, email, status) attendees.add(attendee) } while (cursor.moveToNext()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt index ec688b82c..73283c86f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt @@ -1,5 +1,5 @@ package com.simplemobiletools.calendar.pro.models -data class Attendee(val name: String, val email: String, val status: Int) { +data class Attendee(val contactId: Int, var name: String, val email: String, val status: Int) { fun getPublicName() = if (name.isNotEmpty()) name else email } From f48b16a188cddacdaffac32bf4a4b7b08a9b4fa2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 19:35:17 +0100 Subject: [PATCH 81/89] replacing some magic numbers with constants --- .../calendar/pro/activities/EventActivity.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index ec1c935a9..2f840cc3c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -56,9 +56,9 @@ class EventActivity : SimpleActivity() { private val EVENT_TYPE_ID = "EVENT_TYPE_ID" private val EVENT_CALENDAR_ID = "EVENT_CALENDAR_ID" - private var mReminder1Minutes = 0 - private var mReminder2Minutes = 0 - private var mReminder3Minutes = 0 + private var mReminder1Minutes = REMINDER_OFF + private var mReminder2Minutes = REMINDER_OFF + private var mReminder3Minutes = REMINDER_OFF private var mReminder1Type = REMINDER_NOTIFICATION private var mReminder2Type = REMINDER_NOTIFICATION private var mReminder3Type = REMINDER_NOTIFICATION From 362599fcdfc53c24fea42981a738676330e8f3af Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 22:37:06 +0100 Subject: [PATCH 82/89] implementing the autocompletetextview at attendee suggestions --- app/build.gradle | 2 +- .../calendar/pro/activities/EventActivity.kt | 8 ++- .../adapters/AutoCompleteTextViewAdapter.kt | 58 +++++++++++++++++++ app/src/main/res/layout/item_attendee.xml | 3 +- app/src/main/res/layout/item_autocomplete.xml | 22 +++++++ 5 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt create mode 100644 app/src/main/res/layout/item_autocomplete.xml diff --git a/app/build.gradle b/app/build.gradle index 6cfcb9b71..cdd50c9ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.10.9' + implementation 'com.simplemobiletools:commons:5.10.10' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 2f840cc3c..25e5567eb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -13,12 +13,14 @@ import android.text.method.LinkMovementMethod import android.view.Menu import android.view.MenuItem import android.view.WindowManager +import android.widget.EditText import android.widget.ImageView import android.widget.RelativeLayout import androidx.core.app.NotificationManagerCompat import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.calendar.pro.R +import com.simplemobiletools.calendar.pro.adapters.AutoCompleteTextViewAdapter import com.simplemobiletools.calendar.pro.dialogs.* import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.helpers.* @@ -29,7 +31,6 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem -import com.simplemobiletools.commons.views.MyEditText import kotlinx.android.synthetic.main.activity_event.* import kotlinx.android.synthetic.main.activity_event.view.* import kotlinx.android.synthetic.main.item_attendee.view.* @@ -72,7 +73,7 @@ class EventActivity : SimpleActivity() { private var mWasActivityInitialized = false private var mWasContactsPermissionChecked = false private var mAttendees = ArrayList() - private var mAttendeeViews = ArrayList() + private var mAttendeeViews = ArrayList() private var mAvailableContacts = ArrayList() private lateinit var mEventStartDateTime: DateTime @@ -1166,6 +1167,9 @@ class EventActivity : SimpleActivity() { if (value != null) { attendeeHolder.event_attendee.setText(value) } + + val adapter = AutoCompleteTextViewAdapter(this, mAvailableContacts) + attendeeHolder.event_attendee.setAdapter(adapter) } private fun checkNewAttendeeField(value: String?) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt new file mode 100644 index 000000000..7782cf3bb --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -0,0 +1,58 @@ +package com.simplemobiletools.calendar.pro.adapters + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +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 kotlinx.android.synthetic.main.item_autocomplete.view.* + +class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { + private var resultList = ArrayList() + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + var listItem = convertView + if (listItem == null) { + listItem = LayoutInflater.from(activity).inflate(R.layout.item_autocomplete, parent, false) + } + + val contact = resultList[position] + listItem!!.item_autocomplete.text = contact.email + + return listItem + } + + override fun getFilter() = object : Filter() { + override fun performFiltering(constraint: CharSequence?): FilterResults { + val filterResults = Filter.FilterResults() + if (constraint != null) { + resultList.clear() + contacts.forEach { + if (it.email.contains(constraint, true)) { + resultList.add(it) + } + } + filterResults.values = resultList + filterResults.count = resultList.size + } + return filterResults + } + + override fun publishResults(constraint: CharSequence?, results: FilterResults?) { + if (results?.count ?: -1 > 0) { + notifyDataSetChanged() + } else { + notifyDataSetInvalidated() + } + } + + override fun convertResultToString(resultValue: Any?) = (resultValue as? Attendee)?.email + } + + override fun getItem(index: Int) = resultList[index] + + override fun getCount() = resultList.size +} diff --git a/app/src/main/res/layout/item_attendee.xml b/app/src/main/res/layout/item_attendee.xml index 5eb797fcf..1b04b5433 100644 --- a/app/src/main/res/layout/item_attendee.xml +++ b/app/src/main/res/layout/item_attendee.xml @@ -7,12 +7,13 @@ android:paddingTop="@dimen/medium_margin" android:paddingBottom="@dimen/medium_margin"> - + + + + + From 62bea960e3f2e16757de1f00c7f69ed103bf7664 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Mar 2019 22:49:25 +0100 Subject: [PATCH 83/89] apply attendees search string to contact names too, not just emails --- .../calendar/pro/adapters/AutoCompleteTextViewAdapter.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index 7782cf3bb..5337a950a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -8,6 +8,7 @@ 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.normalizeString import kotlinx.android.synthetic.main.item_autocomplete.view.* class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { @@ -30,8 +31,9 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar val filterResults = Filter.FilterResults() if (constraint != null) { resultList.clear() + val searchString = constraint.toString().normalizeString() contacts.forEach { - if (it.email.contains(constraint, true)) { + if (it.email.contains(searchString, true) || it.name.contains(searchString, true)) { resultList.add(it) } } From aca2f1b163c85e4da8c88cff75a8919d2bca1528 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Mar 2019 09:58:11 +0100 Subject: [PATCH 84/89] sort attendee suggestions in a specific order --- .../calendar/pro/adapters/AutoCompleteTextViewAdapter.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index 5337a950a..8683446ef 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -37,6 +37,14 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar resultList.add(it) } } + + resultList.sortWith(compareBy + { it.name.startsWith(searchString, true) }.thenBy + { it.email.startsWith(searchString, true) }.thenBy + { it.name.contains(searchString, true) }.thenBy + { it.email.contains(searchString, true) }) + resultList.reverse() + filterResults.values = resultList filterResults.count = resultList.size } From a9ff1003fb1bf734781455ee302738c812cc31c9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Mar 2019 10:18:28 +0100 Subject: [PATCH 85/89] renaming item_autocomplete to item_autocomplete_email --- .../calendar/pro/adapters/AutoCompleteTextViewAdapter.kt | 4 ++-- .../{item_autocomplete.xml => item_autocomplete_email.xml} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename app/src/main/res/layout/{item_autocomplete.xml => item_autocomplete_email.xml} (100%) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index 8683446ef..f71e9d78f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -9,7 +9,7 @@ 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.normalizeString -import kotlinx.android.synthetic.main.item_autocomplete.view.* +import kotlinx.android.synthetic.main.item_autocomplete_email.view.* class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { private var resultList = ArrayList() @@ -17,7 +17,7 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { var listItem = convertView if (listItem == null) { - listItem = LayoutInflater.from(activity).inflate(R.layout.item_autocomplete, parent, false) + listItem = LayoutInflater.from(activity).inflate(R.layout.item_autocomplete_email, parent, false) } val contact = resultList[position] diff --git a/app/src/main/res/layout/item_autocomplete.xml b/app/src/main/res/layout/item_autocomplete_email.xml similarity index 100% rename from app/src/main/res/layout/item_autocomplete.xml rename to app/src/main/res/layout/item_autocomplete_email.xml From 236b3ef5ad719174c369610ec14a526125b0847b Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Mar 2019 10:32:13 +0100 Subject: [PATCH 86/89] show names at autocomplete suggestions, where available --- .../adapters/AutoCompleteTextViewAdapter.kt | 12 +++--- .../res/layout/item_autocomplete_email.xml | 6 ++- .../layout/item_autocomplete_email_name.xml | 39 +++++++++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/item_autocomplete_email_name.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index f71e9d78f..ac6aabdcd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -9,19 +9,21 @@ 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.normalizeString -import kotlinx.android.synthetic.main.item_autocomplete_email.view.* +import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.* class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { private var resultList = ArrayList() override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val contact = resultList[position] var listItem = convertView if (listItem == null) { - listItem = LayoutInflater.from(activity).inflate(R.layout.item_autocomplete_email, parent, false) + val layout = if (contact.name.isNotEmpty()) R.layout.item_autocomplete_email_name else R.layout.item_autocomplete_email + listItem = LayoutInflater.from(activity).inflate(layout, parent, false) } - val contact = resultList[position] - listItem!!.item_autocomplete.text = contact.email + listItem!!.item_autocomplete_name?.text = contact.name + listItem.item_autocomplete_email.text = contact.email return listItem } @@ -59,7 +61,7 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar } } - override fun convertResultToString(resultValue: Any?) = (resultValue as? Attendee)?.email + override fun convertResultToString(resultValue: Any?) = (resultValue as? Attendee)?.getPublicName() } override fun getItem(index: Int) = resultList[index] diff --git a/app/src/main/res/layout/item_autocomplete_email.xml b/app/src/main/res/layout/item_autocomplete_email.xml index ce4b4edf9..bc48edf72 100644 --- a/app/src/main/res/layout/item_autocomplete_email.xml +++ b/app/src/main/res/layout/item_autocomplete_email.xml @@ -1,6 +1,7 @@ + android:textSize="@dimen/bigger_text_size" + tools:text="hello@simplemobiletools.com"/> diff --git a/app/src/main/res/layout/item_autocomplete_email_name.xml b/app/src/main/res/layout/item_autocomplete_email_name.xml new file mode 100644 index 000000000..d99035825 --- /dev/null +++ b/app/src/main/res/layout/item_autocomplete_email_name.xml @@ -0,0 +1,39 @@ + + + + + + + + From 4f0dc2b9c8a6fd920cba69ccd31dacda43ec5a3d Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Mar 2019 11:44:13 +0100 Subject: [PATCH 87/89] adding images to attendee suggestions --- app/build.gradle | 1 + .../calendar/pro/activities/EventActivity.kt | 10 +++-- .../adapters/AutoCompleteTextViewAdapter.kt | 9 +++-- .../calendar/pro/helpers/CalDAVHelper.kt | 2 +- .../calendar/pro/models/Attendee.kt | 2 +- .../attendee_circular_background.xml | 7 ++++ .../res/layout/item_autocomplete_email.xml | 27 ++++++++++--- .../layout/item_autocomplete_email_name.xml | 40 ++++++++++++++----- app/src/main/res/values/dimens.xml | 2 + 9 files changed, 76 insertions(+), 24 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/attendee_circular_background.xml diff --git a/app/build.gradle b/app/build.gradle index cdd50c9ac..58c7e298c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -60,6 +60,7 @@ dependencies { implementation 'com.simplemobiletools:commons:5.10.10' implementation 'joda-time:joda-time:2.10.1' implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3' kapt 'androidx.room:room-compiler:2.0.0' implementation 'androidx.room:room-runtime:2.0.0' diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 25e5567eb..0c2ef1cf5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -1182,7 +1182,7 @@ class EventActivity : SimpleActivity() { val attendeeEmails = mAttendeeViews.map { it.value }.filter { it.isNotEmpty() }.toMutableList() as ArrayList val attendees = ArrayList() attendeeEmails.mapTo(attendees) { - Attendee(0, "", it, CalendarContract.Attendees.ATTENDEE_STATUS_INVITED) + Attendee(0, "", it, CalendarContract.Attendees.ATTENDEE_STATUS_INVITED, "") } return Gson().toJson(attendees) } @@ -1196,7 +1196,8 @@ class EventActivity : SimpleActivity() { ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, - ContactsContract.CommonDataKinds.StructuredName.SUFFIX) + ContactsContract.CommonDataKinds.StructuredName.SUFFIX, + ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI) val selection = "${ContactsContract.Data.MIMETYPE} = ?" val selectionArgs = arrayOf(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) @@ -1212,11 +1213,12 @@ class EventActivity : SimpleActivity() { val middleName = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME) ?: "" val surname = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME) ?: "" val suffix = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX) ?: "" + val photoUri = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI) ?: "" val names = arrayListOf(prefix, firstName, middleName, surname, suffix).filter { it.trim().isNotEmpty() } val fullName = TextUtils.join("", names) if (fullName.isNotEmpty()) { - val contact = Attendee(id, fullName, "", 0) + val contact = Attendee(id, fullName, "", 0, photoUri) contacts.add(contact) } } while (cursor.moveToNext()) @@ -1243,7 +1245,7 @@ class EventActivity : SimpleActivity() { do { val id = cursor.getIntValue(ContactsContract.Data.CONTACT_ID) val email = cursor.getStringValue(ContactsContract.CommonDataKinds.Email.DATA) ?: continue - val contact = Attendee(id, "", email, 0) + val contact = Attendee(id, "", email, 0, "") contacts.add(contact) } while (cursor.moveToNext()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index ac6aabdcd..4654612ce 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -17,13 +17,16 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val contact = resultList[position] var listItem = convertView - if (listItem == null) { + if (listItem == null || listItem.tag != contact.name.isNotEmpty()) { val layout = if (contact.name.isNotEmpty()) R.layout.item_autocomplete_email_name else R.layout.item_autocomplete_email listItem = LayoutInflater.from(activity).inflate(layout, parent, false) } - listItem!!.item_autocomplete_name?.text = contact.name - listItem.item_autocomplete_email.text = contact.email + listItem!!.apply { + tag = contact.name.isNotEmpty() + item_autocomplete_name?.text = contact.name + item_autocomplete_email.text = contact.email + } return listItem } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 3fbd06063..1bc9af72f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -514,7 +514,7 @@ class CalDAVHelper(val context: Context) { val name = cursor.getStringValue(CalendarContract.Attendees.ATTENDEE_NAME) val email = cursor.getStringValue(CalendarContract.Attendees.ATTENDEE_EMAIL) val status = cursor.getIntValue(CalendarContract.Attendees.ATTENDEE_STATUS) - val attendee = Attendee(0, name, email, status) + val attendee = Attendee(0, name, email, status, "") attendees.add(attendee) } while (cursor.moveToNext()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt index 73283c86f..29d69f1cc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt @@ -1,5 +1,5 @@ package com.simplemobiletools.calendar.pro.models -data class Attendee(val contactId: Int, var name: String, val email: String, val status: Int) { +data class Attendee(val contactId: Int, var name: String, val email: String, val status: Int, val photoUri: String) { fun getPublicName() = if (name.isNotEmpty()) name else email } diff --git a/app/src/main/res/drawable-xhdpi/attendee_circular_background.xml b/app/src/main/res/drawable-xhdpi/attendee_circular_background.xml new file mode 100644 index 000000000..bd3dc800d --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/attendee_circular_background.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/layout/item_autocomplete_email.xml b/app/src/main/res/layout/item_autocomplete_email.xml index bc48edf72..c066f4b4e 100644 --- a/app/src/main/res/layout/item_autocomplete_email.xml +++ b/app/src/main/res/layout/item_autocomplete_email.xml @@ -1,24 +1,41 @@ - + + - + diff --git a/app/src/main/res/layout/item_autocomplete_email_name.xml b/app/src/main/res/layout/item_autocomplete_email_name.xml index d99035825..2439d5f6a 100644 --- a/app/src/main/res/layout/item_autocomplete_email_name.xml +++ b/app/src/main/res/layout/item_autocomplete_email_name.xml @@ -1,39 +1,59 @@ - + + - + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7cd978d17..bdb6678fe 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -28,4 +28,6 @@ 4dp 100dp + + 40dp From fa2cf07211afb4e9bd9b725e39c6ab6a7a34089e Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Mar 2019 15:45:08 +0100 Subject: [PATCH 88/89] show the proper attendee thumbnail image, if available --- .../calendar/pro/activities/EventActivity.kt | 14 ++++++--- .../adapters/AutoCompleteTextViewAdapter.kt | 30 ++++++++++++++++++- .../calendar/pro/models/Attendee.kt | 2 +- .../attendee_circular_background.xml | 7 ----- .../drawable/attendee_circular_background.xml | 16 ++++++++++ .../res/layout/item_autocomplete_email.xml | 3 -- .../layout/item_autocomplete_email_name.xml | 3 -- 7 files changed, 56 insertions(+), 19 deletions(-) delete mode 100644 app/src/main/res/drawable-xhdpi/attendee_circular_background.xml create mode 100644 app/src/main/res/drawable/attendee_circular_background.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index 0c2ef1cf5..bfba5d654 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -1125,10 +1125,16 @@ class EventActivity : SimpleActivity() { val names = getNames() mAvailableContacts.forEach { val contactId = it.contactId - val name = names.firstOrNull { it.contactId == contactId }?.name + val contact = names.firstOrNull { it.contactId == contactId } + val name = contact?.name if (name != null) { it.name = name } + + val photoUri = contact?.photoUri + if (photoUri != null) { + it.photoUri = photoUri + } } } @@ -1197,7 +1203,7 @@ class EventActivity : SimpleActivity() { ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, ContactsContract.CommonDataKinds.StructuredName.SUFFIX, - ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI) + ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) val selection = "${ContactsContract.Data.MIMETYPE} = ?" val selectionArgs = arrayOf(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) @@ -1213,11 +1219,11 @@ class EventActivity : SimpleActivity() { val middleName = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME) ?: "" val surname = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME) ?: "" val suffix = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX) ?: "" - val photoUri = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI) ?: "" + val photoUri = cursor.getStringValue(ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI) ?: "" val names = arrayListOf(prefix, firstName, middleName, surname, suffix).filter { it.trim().isNotEmpty() } val fullName = TextUtils.join("", names) - if (fullName.isNotEmpty()) { + if (fullName.isNotEmpty() || photoUri.isNotEmpty()) { val contact = Attendee(id, fullName, "", 0, photoUri) contacts.add(contact) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index 4654612ce..5205d11ea 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -1,18 +1,30 @@ package com.simplemobiletools.calendar.pro.adapters +import android.graphics.drawable.LayerDrawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.Filter +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.bumptech.glide.request.RequestOptions import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.SimpleActivity +import com.simplemobiletools.calendar.pro.extensions.config import com.simplemobiletools.calendar.pro.models.Attendee +import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.normalizeString import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.* class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { private var resultList = ArrayList() + private var placeholder = activity.resources.getDrawable(R.drawable.attendee_circular_background) + + init { + (placeholder as LayerDrawable).findDrawableByLayerId(R.id.attendee_circular_background).applyColorFilter(activity.config.primaryColor) + } override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val contact = resultList[position] @@ -25,7 +37,23 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar listItem!!.apply { tag = contact.name.isNotEmpty() item_autocomplete_name?.text = contact.name - item_autocomplete_email.text = contact.email + item_autocomplete_email?.text = contact.email + + if (contact.photoUri.isEmpty()) { + item_autocomplete_image.setImageDrawable(placeholder) + } else { + val options = RequestOptions() + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .error(placeholder) + .centerCrop() + + Glide.with(activity) + .load(contact.photoUri) + .transition(DrawableTransitionOptions.withCrossFade()) + .apply(options) + .apply(RequestOptions.circleCropTransform()) + .into(item_autocomplete_image) + } } return listItem diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt index 29d69f1cc..74ebfa8d7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/Attendee.kt @@ -1,5 +1,5 @@ package com.simplemobiletools.calendar.pro.models -data class Attendee(val contactId: Int, var name: String, val email: String, val status: Int, val photoUri: String) { +data class Attendee(val contactId: Int, var name: String, val email: String, val status: Int, var photoUri: String) { fun getPublicName() = if (name.isNotEmpty()) name else email } diff --git a/app/src/main/res/drawable-xhdpi/attendee_circular_background.xml b/app/src/main/res/drawable-xhdpi/attendee_circular_background.xml deleted file mode 100644 index bd3dc800d..000000000 --- a/app/src/main/res/drawable-xhdpi/attendee_circular_background.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/attendee_circular_background.xml b/app/src/main/res/drawable/attendee_circular_background.xml new file mode 100644 index 000000000..4b622c6eb --- /dev/null +++ b/app/src/main/res/drawable/attendee_circular_background.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_autocomplete_email.xml b/app/src/main/res/layout/item_autocomplete_email.xml index c066f4b4e..56fd8b08f 100644 --- a/app/src/main/res/layout/item_autocomplete_email.xml +++ b/app/src/main/res/layout/item_autocomplete_email.xml @@ -16,9 +16,6 @@ android:layout_width="@dimen/avatar_size" android:layout_height="@dimen/avatar_size" android:layout_margin="@dimen/tiny_margin" - android:background="@drawable/attendee_circular_background" - android:padding="@dimen/medium_margin" - android:src="@drawable/ic_person" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> diff --git a/app/src/main/res/layout/item_autocomplete_email_name.xml b/app/src/main/res/layout/item_autocomplete_email_name.xml index 2439d5f6a..c11ab5886 100644 --- a/app/src/main/res/layout/item_autocomplete_email_name.xml +++ b/app/src/main/res/layout/item_autocomplete_email_name.xml @@ -16,9 +16,6 @@ android:layout_width="@dimen/avatar_size" android:layout_height="@dimen/avatar_size" android:layout_margin="@dimen/tiny_margin" - android:background="@drawable/attendee_circular_background" - android:padding="@dimen/medium_margin" - android:src="@drawable/ic_person" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> From 979f463e97e243bf379d2c19955bb5bfbca4dd7f Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Mar 2019 21:09:53 +0100 Subject: [PATCH 89/89] figure out which attendee has been picked by clicking on a suggestion --- .../calendar/pro/activities/EventActivity.kt | 5 +++++ .../calendar/pro/adapters/AutoCompleteTextViewAdapter.kt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt index bfba5d654..9efb38efc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/EventActivity.kt @@ -1170,12 +1170,17 @@ class EventActivity : SimpleActivity() { event_attendees_holder.addView(attendeeHolder) attendeeHolder.event_attendee.setColors(config.textColor, getAdjustedPrimaryColor(), config.backgroundColor) + if (value != null) { attendeeHolder.event_attendee.setText(value) } val adapter = AutoCompleteTextViewAdapter(this, mAvailableContacts) attendeeHolder.event_attendee.setAdapter(adapter) + attendeeHolder.event_attendee.setOnItemClickListener { parent, view, position, id -> + val currAttendees = (attendeeHolder.event_attendee.adapter as AutoCompleteTextViewAdapter).resultList + val selectedAttendee = currAttendees[position] + } } private fun checkNewAttendeeField(value: String?) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt index 5205d11ea..34ef234dc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/AutoCompleteTextViewAdapter.kt @@ -19,7 +19,7 @@ import com.simplemobiletools.commons.extensions.normalizeString import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.* class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList) : ArrayAdapter(activity, 0, contacts) { - private var resultList = ArrayList() + var resultList = ArrayList() private var placeholder = activity.resources.getDrawable(R.drawable.attendee_circular_background) init {