Skip to content

Add single-column layout toggle for adaptive feed list - #1319

Open
davezig wants to merge 8 commits into
ReadYouApp:mainfrom
davezig:main
Open

Add single-column layout toggle for adaptive feed list#1319
davezig wants to merge 8 commits into
ReadYouApp:mainfrom
davezig:main

Conversation

@davezig

@davezig davezig commented Aug 21, 2026

Copy link
Copy Markdown

No description provided.

claude and others added 8 commits June 23, 2026 15:35
Adds a user preference to force single-column mode on tablets/large
screens. When enabled, the 2-pane adaptive layout collapses to a single
column where tapping an article takes over the full screen and back
returns to the article list. Default is off (adaptive behavior unchanged).

- FlowSingleColumnPreference: new boolean preference (ON/OFF)
- DataStoreExt: register key "flowSingleColumn" in both PreferencesKey and legacy DataStoreKey
- Settings/Preference/SettingsProvider: wire preference through the settings system
- AppEntry: override scaffold directive with maxHorizontalPartitions=1 when enabled
- FeedsPageStylePage: add "Layout" section with toggle switch
- strings.xml: add single_column_layout and layout string resources

https://claude.ai/code/session_01DJ46HYUPdGBeDXuYgrqGNB
The navigator's scaffoldValue only recomputes on navigation events, not
when scaffoldDirective alone changes. Without a navigation event, isTwoPane
stays stale after toggling, requiring a rotation or app restart to take effect.

Add a LaunchedEffect that watches forceSingleColumn via snapshotFlow and
navigates to the List pane on every change (after initial composition),
triggering the navigator to recompute scaffoldValue with the updated directive.

https://claude.ai/code/session_01DJ46HYUPdGBeDXuYgrqGNB
Covers build setup, architecture overview, preferences system pattern,
adaptive layout notes (including the single-column toggle behavior),
key libraries, and branch naming convention.

https://claude.ai/code/session_01DJ46HYUPdGBeDXuYgrqGNB
When the single-column preference is enabled, only force maxHorizontalPartitions=1
in portrait. In landscape (screenWidthDp > screenHeightDp) the adaptive directive
is used as-is, so a tablet rotated sideways naturally shows the two-pane view.

https://claude.ai/code/session_01DJ46HYUPdGBeDXuYgrqGNB
…irv2Q

Add single-column layout toggle for adaptive feed list
Synchronize README-zh-TW and enhance RSS discovery features
* Fix mark-as-read-on-scroll never reaching the last screenful

The last items in the article list had no scroll distance left to pass
above the viewport's top edge once the list was fully scrolled, so they
could never satisfy the "scrolled past the first visible item" read
condition.

Add a trailing Spacer sized to the live-measured height of the Box
wrapping the LazyColumn (via onSizeChanged), giving the list enough
extra scroll range for the last item to reach the same read line as
every other item. The spacer is unconditional and independent of the
existing FAB/bottom-bar clearance spacers.

* Fix trailing articles never being marked read on scroll

The trailing spacer added to fix the scroll-boundary bug let the list
scroll past the last real article, but once no item with
contentType == CONTENT_TYPE_ARTICLE remained visible, firstItemKey
became null and the read-detection loop never matched it, so found
stayed false and the whole batch of trailing articles was silently
discarded instead of committed as read.

Treat firstItemKey == null as every remaining article having already
scrolled past the read line, matching the same "read line" semantics
used for every other item in the list.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants