From a68ae78835b0b8fcb4d07dc5d0e7e5b3d7f32773 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Tue, 6 Jan 2026 21:56:20 +0100 Subject: [PATCH] Add switch preference to enable feed --- .../feed/FeedIntegrationSettingsScreen.kt | 15 +++++++++++++++ .../feed/FeedIntegrationSettingsScreenVM.kt | 7 +++++++ core/i18n/src/main/res/values/strings.xml | 2 ++ .../launcher2/preferences/feed/FeedSettings.kt | 11 +++++++++++ 4 files changed, 35 insertions(+) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreen.kt index 223b4ac31..aa751cfd5 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreen.kt @@ -21,6 +21,7 @@ import de.mm20.launcher2.ui.component.LargeMessage import de.mm20.launcher2.ui.component.preferences.Preference import de.mm20.launcher2.ui.component.preferences.PreferenceCategory import de.mm20.launcher2.ui.component.preferences.PreferenceScreen +import de.mm20.launcher2.ui.component.preferences.SwitchPreference import kotlinx.serialization.Serializable @Serializable @@ -32,6 +33,7 @@ fun FeedIntegrationSettingsScreen() { val viewModel: FeedIntegrationSettingsScreenVM = viewModel() val selectedProvider by viewModel.providerPackage.collectAsState(null) + val feedEnabled by viewModel.feedEnabled.collectAsState(null) val providers = remember { viewModel.getFeedProviders(context) } PreferenceScreen( @@ -58,6 +60,19 @@ fun FeedIntegrationSettingsScreen() { } else { item { PreferenceCategory { + SwitchPreference( + icon = R.drawable.news_24px, + title = stringResource(R.string.preference_feed_integration), + summary = stringResource(R.string.preference_feed_enable_summary), + value = feedEnabled == true, + onValueChanged = { + viewModel.setFeedEnabled(it) + } + ) + } + } + item { + PreferenceCategory(stringResource(R.string.preference_category_feed_provider)) { for (prov in providers) { Preference( title = prov.label, diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreenVM.kt index 6b132e20f..1b694e41a 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/feed/FeedIntegrationSettingsScreenVM.kt @@ -23,6 +23,9 @@ class FeedIntegrationSettingsScreenVM : ViewModel(), KoinComponent { val providerPackage = feedSettings.providerPackage .shareIn(viewModelScope, SharingStarted.WhileSubscribed(0), 1) + val feedEnabled = feedSettings.enabled + .shareIn(viewModelScope, SharingStarted.WhileSubscribed(0), 1) + fun setProviderPackage(providerPackage: String?) { feedSettings.setProviderPackage(providerPackage) } @@ -30,4 +33,8 @@ class FeedIntegrationSettingsScreenVM : ViewModel(), KoinComponent { fun getFeedProviders(context: Context): List { return feedService.getAvailableFeedProviders() } + + fun setFeedEnabled(enabled: Boolean) { + feedSettings.setEnabled(enabled) + } } \ No newline at end of file diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index c9f6cec57..fbb2baf6e 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -701,6 +701,8 @@ Enable Smartspacer integration Open Smartspacer Feed + Feed provider + Swipe right on the home screen to open the feed No feed providers installed Tap to call Start a call without confirmation when tapping a phone number diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/feed/FeedSettings.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/feed/FeedSettings.kt index 67084e118..603b3b95c 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/feed/FeedSettings.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/feed/FeedSettings.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.preferences.feed +import de.mm20.launcher2.preferences.GestureAction import de.mm20.launcher2.preferences.LauncherDataStore import kotlinx.coroutines.flow.map @@ -7,6 +8,15 @@ class FeedSettings internal constructor( private val launcherDataStore: LauncherDataStore, ) { + val enabled + get() = launcherDataStore.data.map { it.gesturesSwipeRight is GestureAction.Feed } + + fun setEnabled(enabled: Boolean) { + launcherDataStore.update { + it.copy(gesturesSwipeRight = if (enabled) GestureAction.Feed else GestureAction.NoAction) + } + } + val providerPackage get() = launcherDataStore.data.map { it.feedProviderPackage } @@ -15,4 +25,5 @@ class FeedSettings internal constructor( it.copy(feedProviderPackage = providerPackage) } } + } \ No newline at end of file