diff --git a/app/src/main/java/com/readrops/app/item/ItemScreen.kt b/app/src/main/java/com/readrops/app/item/ItemScreen.kt index 6ecfe298..dc08812d 100644 --- a/app/src/main/java/com/readrops/app/item/ItemScreen.kt +++ b/app/src/main/java/com/readrops/app/item/ItemScreen.kt @@ -110,7 +110,8 @@ class ItemScreen( HorizontalPager( state = pagerState, beyondViewportPageCount = 2, - key = items.itemKey { it.item.id } + key = items.itemKey { it.item.id }, + userScrollEnabled = state.swipeGesturePager ) { page -> val itemWithFeed = items[page] diff --git a/app/src/main/java/com/readrops/app/item/ItemScreenModel.kt b/app/src/main/java/com/readrops/app/item/ItemScreenModel.kt index 4966a8b7..e0eb988f 100644 --- a/app/src/main/java/com/readrops/app/item/ItemScreenModel.kt +++ b/app/src/main/java/com/readrops/app/item/ItemScreenModel.kt @@ -133,17 +133,19 @@ class ItemScreenModel( screenModelScope.launch(dispatcher) { combine( preferences.openLinksWith.flow, - preferences.theme.flow - ) { openLinksWith, theme -> - openLinksWith to theme - }.collect { (openLinksWith, theme) -> + preferences.theme.flow, + preferences.swipeGesturePager.flow + ) { openLinksWith, theme, swipeGesturePager -> + Triple(openLinksWith, theme, swipeGesturePager) + }.collect { (openLinksWith, theme, swipeGesturePager) -> mutableState.update { it.copy( openInExternalBrowser = when (openLinksWith) { "external_navigator" -> true else -> false }, - theme = theme + theme = theme, + swipeGesturePager = swipeGesturePager ) } } @@ -397,7 +399,8 @@ data class ItemState( val openInExternalBrowser: Boolean = false, val theme: String? = "", val error: String? = null, - val stateChanges: List = listOf() + val stateChanges: List = listOf(), + val swipeGesturePager: Boolean = true ) @Stable 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 fa7cdae0..63f99e13 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 @@ -226,6 +226,13 @@ class PreferencesScreen : AndroidScreen() { PreferenceHeader(text = stringResource(id = R.string.item_view)) + SwitchPreferenceWidget( + preference = loadedState.swipeGesturePager.second, + isChecked = loadedState.swipeGesturePager.first, + title = stringResource(id = R.string.swipe_gesture_pager), + subtitle = stringResource(id = R.string.swipe_gesture_pager_subtitle) + ) + ListPreferenceWidget( preference = loadedState.openLinksWith.second, selectedKey = loadedState.openLinksWith.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 c6144c2f..098730af 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 @@ -43,6 +43,7 @@ class PreferencesScreenModel( customShareIntentTpl.flow, swipeToLeft.flow, swipeToRight.flow, + swipeGesturePager.flow, ) combine( @@ -61,6 +62,7 @@ class PreferencesScreenModel( customShareIntentTpl = (list[9] as String) to customShareIntentTpl, swipeToLeft = (list[10] as String) to swipeToLeft, swipeToRight = (list[11] as String) to swipeToRight, + swipeGesturePager = (list[12] as Boolean) to swipeGesturePager, exampleItem = ItemWithFeed( item = Item( title = context.getString(R.string.example_item_title), @@ -116,6 +118,7 @@ sealed class PreferencesScreenState { val customShareIntentTpl: PreferenceState, val swipeToLeft: PreferenceState, val swipeToRight: PreferenceState, + val swipeGesturePager: PreferenceState, val exampleItem: ItemWithFeed, val showDialog: Boolean = false ) : PreferencesScreenState() 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 29b560fc..9e04e57f 100644 --- a/app/src/main/java/com/readrops/app/util/Preferences.kt +++ b/app/src/main/java/com/readrops/app/util/Preferences.kt @@ -133,6 +133,12 @@ class Preferences( key = stringPreferencesKey("swipe_to_left_action"), default = "READ" ) + + val swipeGesturePager = Preference( + dataStore = dataStore, + key = booleanPreferencesKey("swipe_gesture_pager"), + default = true + ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 27eb1fe6..4afb0933 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -242,4 +242,6 @@ No network connection available File is empty Contrast with background is too low. The default color will be used instead when using this theme. + Swipe between articles + Swipe horizontally to navigate to previous or next articles