mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
Merge branch 'master' into feat/weeklyview-drag-drop
This commit is contained in:
@@ -1,6 +1,14 @@
|
|||||||
Changelog
|
Changelog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
Version 6.15.1 *(2021-08-23)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Calculate ages at birthdays and anniversaries, if a year is available
|
||||||
|
* Add a new Busy/Free field at CalDAV synced calendars
|
||||||
|
* Allow hiding the weekly view day customizing slider
|
||||||
|
* Some bottom quick event type filter improvements
|
||||||
|
|
||||||
Version 6.15.0 *(2021-07-27)*
|
Version 6.15.0 *(2021-07-27)*
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
@@ -17,8 +17,8 @@ android {
|
|||||||
applicationId "com.simplemobiletools.calendar.pro"
|
applicationId "com.simplemobiletools.calendar.pro"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 203
|
versionCode 204
|
||||||
versionName "6.15.0"
|
versionName "6.15.1"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
setProperty("archivesBaseName", "calendar")
|
setProperty("archivesBaseName", "calendar")
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
@@ -63,10 +63,10 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:16ae1d2c03'
|
implementation 'com.github.SimpleMobileTools:Simple-Commons:03149a0586'
|
||||||
implementation 'joda-time:joda-time:2.10.3'
|
implementation 'joda-time:joda-time:2.10.3'
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||||
implementation "androidx.print:print:1.0.0"
|
implementation "androidx.print:print:1.0.0"
|
||||||
|
|
||||||
|
@@ -515,6 +515,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
if (result != ImportResult.IMPORT_FAIL) {
|
if (result != ImportResult.IMPORT_FAIL) {
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
updateViewPager()
|
updateViewPager()
|
||||||
|
setupQuickFilter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -536,6 +537,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
it > 0 -> {
|
it > 0 -> {
|
||||||
toast(R.string.birthdays_added)
|
toast(R.string.birthdays_added)
|
||||||
updateViewPager()
|
updateViewPager()
|
||||||
|
setupQuickFilter()
|
||||||
}
|
}
|
||||||
it == -1 -> toast(R.string.no_new_birthdays)
|
it == -1 -> toast(R.string.no_new_birthdays)
|
||||||
else -> toast(R.string.no_birthdays)
|
else -> toast(R.string.no_birthdays)
|
||||||
@@ -565,6 +567,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
it > 0 -> {
|
it > 0 -> {
|
||||||
toast(R.string.anniversaries_added)
|
toast(R.string.anniversaries_added)
|
||||||
updateViewPager()
|
updateViewPager()
|
||||||
|
setupQuickFilter()
|
||||||
}
|
}
|
||||||
it == -1 -> toast(R.string.no_new_anniversaries)
|
it == -1 -> toast(R.string.no_new_anniversaries)
|
||||||
else -> toast(R.string.no_anniversaries)
|
else -> toast(R.string.no_anniversaries)
|
||||||
@@ -899,6 +902,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
if (it) {
|
if (it) {
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
updateViewPager()
|
updateViewPager()
|
||||||
|
setupQuickFilter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -257,14 +257,12 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
|
|||||||
if (isOreoPlus()) {
|
if (isOreoPlus()) {
|
||||||
val audioAttributes = AudioAttributes.Builder()
|
val audioAttributes = AudioAttributes.Builder()
|
||||||
.setUsage(AudioAttributes.USAGE_ALARM)
|
.setUsage(AudioAttributes.USAGE_ALARM)
|
||||||
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
||||||
.setLegacyStreamType(config.reminderAudioStream)
|
.setLegacyStreamType(config.reminderAudioStream)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val name = eventTypesDB.getEventTypeWithId(event.eventType)?.getDisplayTitle()
|
val name = eventTypesDB.getEventTypeWithId(event.eventType)?.getDisplayTitle()
|
||||||
val importance = NotificationManager.IMPORTANCE_HIGH
|
val importance = NotificationManager.IMPORTANCE_HIGH
|
||||||
NotificationChannel(channelId, name, importance).apply {
|
NotificationChannel(channelId, name, importance).apply {
|
||||||
setBypassDnd(true)
|
|
||||||
enableLights(true)
|
enableLights(true)
|
||||||
lightColor = event.color
|
lightColor = event.color
|
||||||
enableVibration(config.vibrateOnReminder)
|
enableVibration(config.vibrateOnReminder)
|
||||||
|
@@ -65,6 +65,7 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||||||
weekHolder!!.week_view_days_count.beVisibleIf(allow)
|
weekHolder!!.week_view_days_count.beVisibleIf(allow)
|
||||||
weekHolder!!.week_view_seekbar.beVisibleIf(allow)
|
weekHolder!!.week_view_seekbar.beVisibleIf(allow)
|
||||||
}
|
}
|
||||||
|
setupSeekbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupFragment() {
|
private fun setupFragment() {
|
||||||
@@ -86,13 +87,6 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// avoid seekbar width changing if the days count changes to 1, 10 etc
|
|
||||||
weekHolder!!.week_view_days_count.onGlobalLayout {
|
|
||||||
weekHolder!!.week_view_seekbar.layoutParams.width = weekHolder!!.week_view_seekbar.width
|
|
||||||
(weekHolder!!.week_view_seekbar.layoutParams as RelativeLayout.LayoutParams).removeRule(RelativeLayout.START_OF)
|
|
||||||
}
|
|
||||||
|
|
||||||
updateDaysCount(context?.config?.weeklyViewDays ?: 7)
|
|
||||||
updateActionBarTitle()
|
updateActionBarTitle()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,6 +210,22 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||||||
setupFragment()
|
setupFragment()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setupSeekbar() {
|
||||||
|
if (context?.config?.allowCustomizeDayCount != true) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// avoid seekbar width changing if the days count changes to 1, 10 etc
|
||||||
|
weekHolder!!.week_view_days_count.onGlobalLayout {
|
||||||
|
if (weekHolder!!.week_view_seekbar.width != 0) {
|
||||||
|
weekHolder!!.week_view_seekbar.layoutParams.width = weekHolder!!.week_view_seekbar.width
|
||||||
|
}
|
||||||
|
(weekHolder!!.week_view_seekbar.layoutParams as RelativeLayout.LayoutParams).removeRule(RelativeLayout.START_OF)
|
||||||
|
}
|
||||||
|
|
||||||
|
updateDaysCount(context?.config?.weeklyViewDays ?: 7)
|
||||||
|
}
|
||||||
|
|
||||||
private fun updateWeeklyViewDays(days: Int) {
|
private fun updateWeeklyViewDays(days: Int) {
|
||||||
context!!.config.weeklyViewDays = days
|
context!!.config.weeklyViewDays = days
|
||||||
updateDaysCount(days)
|
updateDaysCount(days)
|
||||||
@@ -274,7 +284,8 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
|||||||
(viewPager!!.adapter as? MyWeekPagerAdapter)?.updateNotVisibleScaleLevel(viewPager!!.currentItem)
|
(viewPager!!.adapter as? MyWeekPagerAdapter)?.updateNotVisibleScaleLevel(viewPager!!.currentItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFullFragmentHeight() = weekHolder!!.week_view_holder.height - weekHolder!!.week_view_seekbar.height - weekHolder!!.week_view_days_count_divider.height
|
override fun getFullFragmentHeight() =
|
||||||
|
weekHolder!!.week_view_holder.height - weekHolder!!.week_view_seekbar.height - weekHolder!!.week_view_days_count_divider.height
|
||||||
|
|
||||||
override fun printView() {
|
override fun printView() {
|
||||||
weekHolder!!.apply {
|
weekHolder!!.apply {
|
||||||
|
@@ -204,6 +204,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
|||||||
for (i in 0 until ROW_COUNT) {
|
for (i in 0 until ROW_COUNT) {
|
||||||
canvas.drawLine(0f, i * dayHeight + weekDaysLetterHeight, canvas.width.toFloat(), i * dayHeight + weekDaysLetterHeight, gridPaint)
|
canvas.drawLine(0f, i * dayHeight + weekDaysLetterHeight, canvas.width.toFloat(), i * dayHeight + weekDaysLetterHeight, gridPaint)
|
||||||
}
|
}
|
||||||
|
canvas.drawLine(0f, canvas.height.toFloat(), canvas.width.toFloat(), canvas.height.toFloat(), gridPaint)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addWeekDayLetters(canvas: Canvas) {
|
private fun addWeekDayLetters(canvas: Canvas) {
|
||||||
|
@@ -10,7 +10,7 @@ import com.simplemobiletools.calendar.pro.helpers.COLUMN_COUNT
|
|||||||
import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT
|
import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT
|
||||||
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
||||||
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
||||||
import kotlinx.android.synthetic.main.month_view.view.*
|
import kotlinx.android.synthetic.main.month_view.view.month_view
|
||||||
|
|
||||||
// used in the Monthly view fragment, 1 view per screen
|
// used in the Monthly view fragment, 1 view per screen
|
||||||
class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) {
|
class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) {
|
||||||
@@ -44,6 +44,43 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
||||||
|
super.onLayout(changed, left, top, right, bottom)
|
||||||
|
measureSizes()
|
||||||
|
var y = 0
|
||||||
|
var x = 0
|
||||||
|
var curLeft = dayWidth.toInt()
|
||||||
|
val end = right + paddingRight
|
||||||
|
|
||||||
|
for (i in 0 until childCount) {
|
||||||
|
val child = getChildAt(i)
|
||||||
|
if (child is MonthView) {
|
||||||
|
//ignore the MonthView layout
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
child.measure(MeasureSpec.makeMeasureSpec(dayWidth.toInt(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(dayHeight.toInt(), MeasureSpec.EXACTLY))
|
||||||
|
|
||||||
|
val childLeft = x * dayWidth + horizontalOffset - child.translationX
|
||||||
|
val childTop = y * dayHeight + weekDaysLetterHeight - child.translationY
|
||||||
|
val childWidth = child.measuredWidth
|
||||||
|
val childHeight = child.measuredHeight
|
||||||
|
val childRight = childLeft + childWidth
|
||||||
|
val childBottom = childTop + childHeight
|
||||||
|
|
||||||
|
child.layout(childLeft.toInt(), childTop.toInt(), childRight.toInt(), childBottom.toInt())
|
||||||
|
|
||||||
|
if (curLeft + childWidth < end) {
|
||||||
|
curLeft += childWidth
|
||||||
|
x++
|
||||||
|
} else {
|
||||||
|
y++
|
||||||
|
x = 0
|
||||||
|
curLeft = childWidth
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun updateDays(newDays: ArrayList<DayMonthly>, addEvents: Boolean, callback: ((DayMonthly) -> Unit)? = null) {
|
fun updateDays(newDays: ArrayList<DayMonthly>, addEvents: Boolean, callback: ((DayMonthly) -> Unit)? = null) {
|
||||||
setupHorizontalOffset()
|
setupHorizontalOffset()
|
||||||
measureSizes()
|
measureSizes()
|
||||||
@@ -63,13 +100,8 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
|||||||
|
|
||||||
private fun measureSizes() {
|
private fun measureSizes() {
|
||||||
dayWidth = (width - horizontalOffset) / 7f
|
dayWidth = (width - horizontalOffset) / 7f
|
||||||
|
|
||||||
// avoid updating the height when coming back from a new event screen, when the keyboard was visible
|
|
||||||
val newHeight = (height - weekDaysLetterHeight) / 6f
|
|
||||||
if (newHeight > dayHeight) {
|
|
||||||
dayHeight = (height - weekDaysLetterHeight) / 6f
|
dayHeight = (height - weekDaysLetterHeight) / 6f
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun addClickableBackgrounds() {
|
private fun addClickableBackgrounds() {
|
||||||
removeAllViews()
|
removeAllViews()
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Simple agenda</string>
|
<string name="app_name">Simple agenda</string>
|
||||||
<string name="app_launcher_name">Simple Agenda</string>
|
<string name="app_launcher_name">Agenda</string>
|
||||||
<string name="change_view">Autres affichages</string>
|
<string name="change_view">Autres affichages</string>
|
||||||
<string name="daily_view">Vue Journée</string>
|
<string name="daily_view">Vue Journée</string>
|
||||||
<string name="weekly_view">Vue Semaine</string>
|
<string name="weekly_view">Vue Semaine</string>
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.5.21'
|
ext.kotlin_version = '1.5.30'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
|
4
fastlane/metadata/android/en-US/changelogs/204.txt
Normal file
4
fastlane/metadata/android/en-US/changelogs/204.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
* Calculate ages at birthdays and anniversaries, if a year is available
|
||||||
|
* Add a new Busy/Free field at CalDAV synced calendars
|
||||||
|
* Allow hiding the weekly view day customizing slider
|
||||||
|
* Some bottom quick event type filter improvements
|
40
fastlane/metadata/android/tr/full_description.txt
Normal file
40
fastlane/metadata/android/tr/full_description.txt
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
Simple Calendar Pro, tam olarak bir takvimin yapması gerekeni yapmak üzere tasarlanmış, tamamen özelleştirilebilir, çevrimdışı bir takvimdir. <b>Karmaşık özellikler, gereksiz izinler ve reklam yok!</b>
|
||||||
|
|
||||||
|
İster tek ister tekrarlanan etkinlikler, doğum günleri, yıl dönümleri, iş toplantıları, randevular, ister başka bir şey düzenliyor olun, Simple Calendar Pro ile <b>düzenli kalmak</b> çok kolay. <b>Özelleştirme seçenekleri</b> ile etkinlik hatırlatıcılarını, bildirim seslerini, takvim widget'larını ve uygulamanın nasıl görüleceğini özelleştirebilirsiniz.
|
||||||
|
|
||||||
|
Günlük, haftalık ve aylık görünümler, yaklaşan etkinliklerinizi ve randevularınızı kontrol etmeyi çok kolaylaştırır. Her şeyi takvim görünümü yerine basit bir etkinlik listesi olarak bile görüntüleyebilirsiniz, böylece <b>hayatınızda neyin ne zaman olacağını tam olarak bilirsiniz. </b>
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------------------------
|
||||||
|
<b>Simple Calendar Pro – Özellikleri ve Faydaları</b>
|
||||||
|
----------------------------------------------------------
|
||||||
|
|
||||||
|
✔️ Reklam veya rahatsız edici pop-up yok
|
||||||
|
✔️ İnternet erişimi gerekmez, size daha fazla gizlilik ve güvenlik sağlar
|
||||||
|
✔️ Sadece mininmum seviyede izin gerekir
|
||||||
|
✔️ Sadeliğe vurgu - bir takvimin yapması gerekeni yapar!
|
||||||
|
✔️ Açık kaynak
|
||||||
|
✔️ Tamamen özelleştirilebilir temalar & takvim / etkinlik widget'ları
|
||||||
|
✔️ 29 dile çevrildi
|
||||||
|
✔️ Başka bir cihaza aktarmak için ayarları .txt dosyalarına aktarın
|
||||||
|
✔️ Cihazlar arasında etkinlikleri senkronize etmek için desteklenen CalDAV takvim senkronizasyonu
|
||||||
|
✔️ Takvimde günlük, haftalık, aylık, yıllık ve etkinlik görünümleri
|
||||||
|
✔️ .ics dosyaları aracılığıyla etkinlikleri içe ve dışa aktarmayı destekler
|
||||||
|
✔️ Birden fazla etkinlik hatırlatıcısı ayarlayın, etkinlik hatırlatıcı sesini ve titreşimi özelleştirin
|
||||||
|
✔️ Hatırlatıcılar için erteleme seçeneği
|
||||||
|
✔️ Tatilleri, doğum günlerini, yıldönümlerini ve randevuları kolayca ekleyin
|
||||||
|
✔️ Etkinlikleri özelleştirin - başlangıç zamanı, süre, hatırlatıcılar vb.
|
||||||
|
✔️ Her etkinliğe etkinlik katılımcıları ekleyin
|
||||||
|
✔️ Kişisel takvim veya iş takvimi olarak kullanın
|
||||||
|
✔️ Bir etkinlik hakkında sizi uyarmak için hatırlatıcılar ve e-posta bildirimleri arasında seçim yapın
|
||||||
|
|
||||||
|
SIMPLE CALENDAR PRO'YU İNDİRİN – REKLAMSIZ BASİT ÇEVRİMDIŞI TAKVİM!
|
||||||
|
|
||||||
|
<b>Basit Araçlar paketinin tamamını buradan inceleyin:</b>
|
||||||
|
https://www.simplemobiletools.com
|
||||||
|
|
||||||
|
<b>Facebook:</b>
|
||||||
|
https://www.facebook.com/simplemobiletools
|
||||||
|
|
||||||
|
<b>Reddit:</b>
|
||||||
|
https://www.reddit.com/r/SimpleMobileTools
|
1
fastlane/metadata/android/tr/short_description.txt
Normal file
1
fastlane/metadata/android/tr/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Etkinliklerinizi Düzenlemek ve Yönetmek için en iyi Takvim.
|
1
fastlane/metadata/android/tr/title.txt
Normal file
1
fastlane/metadata/android/tr/title.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Simple Calendar Pro - Etkinlikler ve Hatırlatıcılar
|
Reference in New Issue
Block a user