From a43415af6a50d8e7ecc34e099764a32f9af0d2b8 Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Thu, 9 Jan 2025 17:07:59 +0100 Subject: [PATCH] Add parameter to set default main filter in TimelineTab --- .../app/more/preferences/PreferencesScreen.kt | 12 +++++++ .../preferences/PreferencesScreenModel.kt | 9 +++-- .../app/timelime/TimelineScreenModel.kt | 34 +++++++++++++------ .../java/com/readrops/app/util/Preferences.kt | 6 ++++ app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreen.kt b/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreen.kt index 12491e2f..421123ff 100644 --- a/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreen.kt +++ b/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreen.kt @@ -155,6 +155,18 @@ class PreferencesScreen : AndroidScreen() { PreferenceHeader(text = stringResource(id = R.string.timeline)) + ListPreferenceWidget( + preference = loadedState.mainFilterPref.second, + selectedKey = loadedState.mainFilterPref.first, + entries = mapOf( + "ALL" to stringResource(R.string.articles), + "NEW" to stringResource(R.string.new_articles), + "STARS" to stringResource(R.string.favorites) + ), + title = stringResource(R.string.default_category), + onValueChange = {} + ) + ListPreferenceWidget( preference = loadedState.timelineItemSize.second, selectedKey = loadedState.timelineItemSize.first, diff --git a/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreenModel.kt b/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreenModel.kt index 3d043223..cda2a04b 100644 --- a/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreenModel.kt +++ b/app/src/main/java/com/readrops/app/more/preferences/PreferencesScreenModel.kt @@ -25,7 +25,8 @@ class PreferencesScreenModel( preferences.scrollRead.flow, preferences.hideReadFeeds.flow, preferences.openLinksWith.flow, - preferences.timelineItemSize.flow + preferences.timelineItemSize.flow, + preferences.mainFilter.flow ) combine( @@ -37,7 +38,8 @@ class PreferencesScreenModel( scrollReadPref = (list[2] as Boolean) to preferences.scrollRead, hideReadFeeds = (list[3] as Boolean) to preferences.hideReadFeeds, openLinksWith = (list[4] as String) to preferences.openLinksWith, - timelineItemSize = (list[5] as String) to preferences.timelineItemSize + timelineItemSize = (list[5] as String) to preferences.timelineItemSize, + mainFilterPref = (list[6] as String) to preferences.mainFilter ) }.collect { theme -> mutableState.update { theme } @@ -57,7 +59,8 @@ sealed class PreferencesScreenState { val scrollReadPref: PreferenceState, val hideReadFeeds: PreferenceState, val openLinksWith: PreferenceState, - val timelineItemSize: PreferenceState + val timelineItemSize: PreferenceState, + val mainFilterPref: PreferenceState, ) : PreferencesScreenState() } \ No newline at end of file diff --git a/app/src/main/java/com/readrops/app/timelime/TimelineScreenModel.kt b/app/src/main/java/com/readrops/app/timelime/TimelineScreenModel.kt index cbdbca57..e1e9fd14 100644 --- a/app/src/main/java/com/readrops/app/timelime/TimelineScreenModel.kt +++ b/app/src/main/java/com/readrops/app/timelime/TimelineScreenModel.kt @@ -39,6 +39,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.update @@ -65,6 +66,17 @@ class TimelineScreenModel( init { screenModelScope.launch(dispatcher) { + val mainFilter = MainFilter.valueOf(preferences.mainFilter.flow.first()) + _timelineState.update { + it.copy( + filters = updateFilters { + it.filters.copy( + mainFilter = mainFilter + ) + } + ) + } + combine( accountEvent, filters @@ -123,17 +135,17 @@ class TimelineScreenModel( } } - private fun getTimelinePreferences(): Flow { + private fun getTimelinePreferences(): Flow = with(preferences) { return combine( - preferences.timelineItemSize.flow, - preferences.scrollRead.flow, - preferences.displayNotificationsPermission.flow, - preferences.showReadItems.flow, - preferences.orderField.flow, - preferences.orderType.flow, - preferences.theme.flow, - preferences.openLinksWith.flow, - preferences.globalOpenInAsk.flow, + timelineItemSize.flow, + scrollRead.flow, + displayNotificationsPermission.flow, + showReadItems.flow, + orderField.flow, + orderType.flow, + theme.flow, + openLinksWith.flow, + globalOpenInAsk.flow, transform = { TimelinePreferences( itemSize = when (it[0]) { @@ -148,7 +160,7 @@ class TimelineScreenModel( orderType = OrderType.valueOf(it[5] as String), theme = it[6] as String, openInExternalBrowser = it[7] as String == "external_navigator", - openInAsk = it[8] as Boolean + openInAsk = it[8] as Boolean, ) } ) diff --git a/app/src/main/java/com/readrops/app/util/Preferences.kt b/app/src/main/java/com/readrops/app/util/Preferences.kt index f0109ead..7ed64b82 100644 --- a/app/src/main/java/com/readrops/app/util/Preferences.kt +++ b/app/src/main/java/com/readrops/app/util/Preferences.kt @@ -97,6 +97,12 @@ class Preferences( key = booleanPreferencesKey("open_in_ask"), default = true ) + + val mainFilter = Preference( + dataStore = dataStore, + key = stringPreferencesKey("main_filter"), + default = "ALL" // uppercase important, used with Enum.valueOf() + ) } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e1f1d44f..6a6ce2e0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -192,4 +192,5 @@ Vue locale Vue externe Ne pas me redemander pour les autres flux + Catégorie par défaut \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d76c6b8..39a08985 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -201,4 +201,5 @@ Local view External view Do not ask me again for next feeds + Default category \ No newline at end of file