Skip to content

Commit 0f0eaea

Browse files
committed
v.4.11.1. #139 "Maximum number of events" option added to "Event filters" section
1 parent 3a6a8cd commit 0f0eaea

File tree

13 files changed

+63
-16
lines changed

13 files changed

+63
-16
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
<a id="v4.11"/>
44

5-
### 2025-01-08 v4.11.0 Start hour of a day option
5+
### 2025-01-11 v4.11.1 Start hour of a day option
66
* "Start hour of a day" option added to "Other settings" section.
77

88
Changing its value from default 0 to e.g. 4 causes all events that start before 4 AM to be shown
99
under previous day's header. This may be convenient for people who stay up after midnight
1010
or wake up early.
1111
Valid values are from -12 to 12.
1212
[#140](https://github.com/andstatus/todoagenda/issues/140)
13+
* "Maximum number of events" option added to "Event filters" section.
14+
[#139](https://github.com/andstatus/todoagenda/issues/139)
1315

1416
<a id="v4.10"/>
1517

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
}
1313

1414
defaultConfig {
15-
versionCode 709
16-
versionName '4.11.0'
15+
versionCode 710
16+
versionName '4.11.1'
1717
minSdkVersion rootProject.minSdkVersion
1818
targetSdkVersion rootProject.targetSdkVersion
1919

app/src/main/kotlin/org/andstatus/todoagenda/RemoteViewsFactory.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,22 +150,30 @@ class RemoteViewsFactory(val context: Context, private val widgetId: Int, create
150150
if (settings.logEvents) {
151151
Log.i("visualizer_query", "${visualizer}")
152152
it.forEachIndexed { index, entry ->
153-
Log.i("visualizer_query", "${index+1}. $entry")
153+
Log.i("visualizer_query", "${index + 1}. $entry")
154154
}
155155
}
156156
}
157157
}
158158
if (settings.logEvents) {
159159
eventEntries.forEachIndexed { index, entry ->
160-
Log.i("queryWidgetEntries", "${index+1}. $entry")
160+
Log.i("queryWidgetEntries", "${index + 1}. $entry")
161161
}
162162
}
163163
eventEntries.sort()
164164
val noHidden: List<WidgetEntry<*>> = eventEntries.filter { it.notHidden() }
165165
val deduplicated = if (settings.hideDuplicates) filterOutDuplicates(noHidden) else noHidden
166-
val widgetEntries: List<WidgetEntry<*>> =
167-
if (settings.showDayHeaders) addDayHeaders(deduplicated) else deduplicated
168-
val withLast = LastEntry.addLast(settings, widgetEntries)
166+
val limited = if (settings.maxNumberOfEvents > 0) {
167+
deduplicated.take(settings.maxNumberOfEvents)
168+
} else {
169+
deduplicated
170+
}
171+
val withDayHeaders = if (settings.showDayHeaders) addDayHeaders(limited) else limited
172+
val withLast = if (settings.maxNumberOfEvents > 0 && limited.size == settings.maxNumberOfEvents) {
173+
withDayHeaders
174+
} else {
175+
LastEntry.addLast(settings, withDayHeaders)
176+
}
169177
return withLast
170178
}
171179

app/src/main/kotlin/org/andstatus/todoagenda/prefs/ApplicationPreferences.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.andstatus.todoagenda.prefs
33
import android.content.Context
44
import android.text.TextUtils
55
import androidx.preference.PreferenceManager
6+
import org.andstatus.todoagenda.prefs.InstanceSettings.Companion.PREF_MAX_NUMBER_OF_EVENTS
67
import org.andstatus.todoagenda.prefs.InstanceSettings.Companion.PREF_TEXT_SHADOW
78
import org.andstatus.todoagenda.prefs.InstanceSettings.Companion.PREF_TEXT_SHADOW_DEFAULT
89
import org.andstatus.todoagenda.prefs.colors.BackgroundColorPref
@@ -85,6 +86,11 @@ object ApplicationPreferences {
8586
.showOnlyClosestInstanceOfRecurringEvent
8687
)
8788
setHideDuplicates(context, settings.hideDuplicates)
89+
setString(
90+
context,
91+
PREF_MAX_NUMBER_OF_EVENTS,
92+
settings.maxNumberOfEvents.limitToString()
93+
)
8894
setAllDayEventsPlacement(context, settings.allDayEventsPlacement)
8995
setString(context, InstanceSettings.PREF_TASK_SCHEDULING, settings.taskScheduling.value)
9096
setString(context, InstanceSettings.PREF_TASK_WITHOUT_DATES, settings.taskWithoutDates.value)
@@ -443,6 +449,11 @@ object ApplicationPreferences {
443449
return getBoolean(context, InstanceSettings.PREF_HIDE_DUPLICATES, false)
444450
}
445451

452+
fun getMaxNumberOfEvents(context: Context): Int = getIntStoredAsString(
453+
context, PREF_MAX_NUMBER_OF_EVENTS,
454+
InstanceSettings.EMPTY.maxNumberOfEvents
455+
)
456+
446457
fun setHideDuplicates(context: Context?, value: Boolean) {
447458
setBoolean(context, InstanceSettings.PREF_HIDE_DUPLICATES, value)
448459
}
@@ -555,4 +566,6 @@ object ApplicationPreferences {
555566
0
556567
}
557568
}
569+
570+
fun Int.limitToString(): String = if (this < 1) "" else toString()
558571
}

app/src/main/kotlin/org/andstatus/todoagenda/prefs/EventFiltersPreferencesFragment.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.preference.ListPreference
88
import androidx.preference.Preference
99
import androidx.preference.PreferenceFragmentCompat
1010
import org.andstatus.todoagenda.R
11+
import org.andstatus.todoagenda.prefs.ApplicationPreferences.limitToString
1112

1213
class EventFiltersPreferencesFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListener {
1314
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@@ -25,6 +26,7 @@ class EventFiltersPreferencesFragment : PreferenceFragmentCompat(), OnSharedPref
2526
showEvenRange()
2627
showHideBasedOnKeywords()
2728
showShowBasedOnKeywords()
29+
showMaximumNumberOfEvents()
2830
showAllDayEventsPlacement()
2931
showTaskScheduling()
3032
showTasksWithoutDates()
@@ -63,6 +65,12 @@ class EventFiltersPreferencesFragment : PreferenceFragmentCompat(), OnSharedPref
6365
}
6466
}
6567

68+
private fun showMaximumNumberOfEvents() =
69+
findPreference<Preference>(InstanceSettings.PREF_MAX_NUMBER_OF_EVENTS)?.setSummary(
70+
ApplicationPreferences.getMaxNumberOfEvents(requireActivity()).limitToString()
71+
)
72+
73+
6674
private fun showAllDayEventsPlacement() {
6775
val preference = findPreference<Preference>(InstanceSettings.PREF_ALL_DAY_EVENTS_PLACEMENT)
6876
preference?.setSummary(ApplicationPreferences.getAllDayEventsPlacement(requireActivity()).valueResId)

app/src/main/kotlin/org/andstatus/todoagenda/prefs/InstanceSettings.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ data class InstanceSettings(
8787
val showBasedOnKeywords: String? = "",
8888
val showOnlyClosestInstanceOfRecurringEvent: Boolean = false,
8989
val hideDuplicates: Boolean = false,
90+
val maxNumberOfEventsIn: Int = -1,
9091
val allDayEventsPlacement: AllDayEventsPlacement = AllDayEventsPlacement.defaultValue,
9192
val taskScheduling: TaskScheduling = TaskScheduling.defaultValue,
9293
val taskWithoutDates: TasksWithoutDates = TasksWithoutDates.defaultValue,
@@ -130,6 +131,7 @@ data class InstanceSettings(
130131
} else {
131132
defaultTimeZone
132133
}
134+
val maxNumberOfEvents: Int = if (maxNumberOfEventsIn < 1) -1 else maxNumberOfEventsIn
133135
val filterMode: FilterMode = if (filterModeIn == FilterMode.NORMAL_FILTER &&
134136
snapshotMode.isSnapshotMode
135137
) FilterMode.DEBUG_FILTER else filterModeIn
@@ -219,6 +221,7 @@ data class InstanceSettings(
219221
put(PREF_SHOW_BASED_ON_KEYWORDS, showBasedOnKeywords)
220222
put(PREF_SHOW_ONLY_CLOSEST_INSTANCE_OF_RECURRING_EVENT, showOnlyClosestInstanceOfRecurringEvent)
221223
put(PREF_HIDE_DUPLICATES, hideDuplicates)
224+
put(PREF_MAX_NUMBER_OF_EVENTS, maxNumberOfEvents)
222225
put(PREF_ALL_DAY_EVENTS_PLACEMENT, allDayEventsPlacement.value)
223226
put(PREF_TASK_SCHEDULING, taskScheduling.value)
224227
put(PREF_TASK_WITHOUT_DATES, taskWithoutDates.value)
@@ -410,6 +413,7 @@ data class InstanceSettings(
410413
const val PREF_HIDE_BASED_ON_KEYWORDS = "hideBasedOnKeywords"
411414
const val PREF_SHOW_BASED_ON_KEYWORDS = "showBasedOnKeywords"
412415
const val PREF_SHOW_ONLY_CLOSEST_INSTANCE_OF_RECURRING_EVENT = "showOnlyClosestInstanceOfRecurringEvent"
416+
const val PREF_MAX_NUMBER_OF_EVENTS = "maxNumberOfEvents"
413417
const val PREF_HIDE_DUPLICATES = "hideDuplicates"
414418
const val PREF_ALL_DAY_EVENTS_PLACEMENT = "allDayEventsPlacement"
415419
const val PREF_TASK_SCHEDULING = "taskScheduling"
@@ -595,6 +599,9 @@ data class InstanceSettings(
595599
hideDuplicates = if (json.has(PREF_HIDE_DUPLICATES)) {
596600
json.getBoolean(PREF_HIDE_DUPLICATES)
597601
} else EMPTY.hideDuplicates,
602+
maxNumberOfEventsIn = if (json.has(PREF_MAX_NUMBER_OF_EVENTS)) {
603+
json.getInt(PREF_MAX_NUMBER_OF_EVENTS)
604+
} else EMPTY.maxNumberOfEvents,
598605
allDayEventsPlacement = if (json.has(PREF_ALL_DAY_EVENTS_PLACEMENT)) {
599606
AllDayEventsPlacement.fromValue(
600607
json.getString(
@@ -731,6 +738,7 @@ data class InstanceSettings(
731738
context
732739
),
733740
hideDuplicates = ApplicationPreferences.getHideDuplicates(context),
741+
maxNumberOfEventsIn = ApplicationPreferences.getMaxNumberOfEvents(context),
734742
allDayEventsPlacement = ApplicationPreferences.getAllDayEventsPlacement(context),
735743
taskScheduling = ApplicationPreferences.getTaskScheduling(context),
736744
taskWithoutDates = ApplicationPreferences.getTasksWithoutDates(context),
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
v4.11.0. "Start hour of a day" option added.
1+
v4.11.1. "Maximum number of events" option added to "Event filters" section.
2+
"Start hour of a day" option added to "Other settings" section.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
v4.11.0. Добавлена опция "Час начала дня".
1+
v4.11.1. Добавлена опция "Максимальное количество событий" в секцию "Фильтры событий".
2+
Добавлена опция "Час начала дня" в секцию "Другие настройки".

app/src/main/res/values-ru/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@
183183
<string name="pref_show_based_on_keywords_title">Показать только при начичии ключевых слов в названии</string>
184184
<string name="show_only_closest_instance_of_recurring_event">Показать только ближайший экземпляр повторяющегося события</string>
185185
<string name="hide_duplicates">Убрать дубликаты</string>
186+
<string name="max_number_of_events_title">Максимальное количество событий</string>
186187
<string name="all_day_events_placement_title">Размещение событий \"Весь день\" (у которых нех времени)</string>
187188
<string name="all_day_events_placement_top_of_the_days_events">В верхней части дня события</string>
188189
<string name="all_day_events_placement_bottom_of_the_days_events">В нижней части дня события</string>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@
219219
<string name="pref_show_based_on_keywords_title">Show based on keywords in a title</string>
220220
<string name="show_only_closest_instance_of_recurring_event">Show only the closest instance of a recurring event</string>
221221
<string name="hide_duplicates">Hide duplicates</string>
222+
<string name="max_number_of_events_title">Maximum number of events</string>
222223
<string name="all_day_events_placement_title">All day events placement</string>
223224
<string name="all_day_events_placement_top_of_the_days_events">At the top of the day\'s events</string>
224225
<string name="all_day_events_placement_bottom_of_the_days_events">At the bottom of the day\'s events</string>

0 commit comments

Comments
 (0)