Repository navigation
Conversation
…pose The filter, login-required, author-profile and comment-notification sheets, the interests picker and NoSiteToReblogActivity now render in Compose. ReaderFragment and the Discover tabs host their feeds with AndroidFragment, and the top bar hides on scroll through a nested-scroll connection instead of AppBarLayout.
…compose # Conflicts: # docs/USER-FACING-CHANGES.md
Collaborator
Generated by 🚫 Danger |
Contributor
|
|
Contributor
|
|
Contributor
🤖 Build Failure AnalysisThis build has failures. Claude has analyzed them - check the build annotations for details. |
Compose only forwards a hosted view's nested scrolling when that view has nested scrolling enabled, and AndroidFragment's container doesn't, so the Reader's top bar never hid as its lists scrolled.
…compose # Conflicts: # docs/USER-FACING-CHANGES.md
…sizes The fixed tab row split "Recommended" across two lines on a Pixel 10a with a large font. A scrollable row widens the tabs to fit their labels instead.
ReaderTagsFeedFragment.newInstance has no callers, ReaderPostListFragment no longer needs ViewPagerFragment's view-id swapping since no host listens for it, and ReaderFragment's view model is always set in onCreate.
Detaching the Reader for another bottom-nav tab disposed its composition, so AndroidFragment removed the feed fragments and rebuilt them on return. The shell and Discover now keep their composition for the fragment's lifetime. Discover creates a tab's list only once it's shown and caps offscreen pages with AndroidFragment's maxLifecycle. The top bar lifts from the active list's real scroll position and stays put when the list can't scroll, and the interests picker shows its spinner while saving.
Switching from Discover to another feed crashed: the composition was disposed on the fragment's ON_DESTROY, which comes after its children are destroyed, so AndroidFragment tried to save a fragment that was no longer added. It's now disposed when the view is destroyed by a removal, or when the activity is destroyed, both of which come first.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## trunk #23466 +/- ##
==========================================
- Coverage 39.33% 39.31% -0.02%
==========================================
Files 2316 2317 +1
Lines 130396 130430 +34
Branches 18564 18567 +3
==========================================
- Hits 51287 51284 -3
- Misses 74804 74841 +37
Partials 4305 4305 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
It used a plus, the same icon as the FAB just above it.
nbradbury
marked this pull request as ready for review
October 30, 2026 18:57
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


TL;DR
This is item 3 in the Reader → Compose plan: the Reader's bottom sheets, interests picker, Discover tabs and the Reader tab shell are now Compose.
Description
Details
SubfilterBottomSheetFragmenthosts aSubfilterSheetcomposable; the one-pageViewPager,SubfilterPageFragment, adapter, 7 view holders and 5 layouts are deleted. Site rows reuseReaderSiteRow.SubFilterViewModel: drops the sheet-only title visibility state andtrackOnPageSelected, which never fired.BottomSheetDialogFragments, so callers don't change.ReaderInterestsFragmentis a Compose screen with M3 filter chips and a Compose snackbar; it still serves both the Discover overlay andReaderInterestsActivity.NoSiteToReblogActivity:setContentwith an M3 top bar.ReaderFragment's root is a Compose view. Feeds arekey(slug) { AndroidFragment(...) }, the interests overlay is anotherAndroidFragment, and the AppBarLayout is replaced byReaderShellLayoutwith a nested-scroll connection for hide-on-scroll. The bar lifts from the active list's real scroll position (ReaderScrollingFeed) and doesn't hide when the list can't scroll. TheSubFilterViewModelowner is now the feed fragment inchildFragmentManagerrather thanfindFragmentById(R.id.container).PrimaryScrollableTabRow(labels no longer wrap mid-word at large font sizes) +HorizontalPagerofAndroidFragmentpages. A tab's list is created only once it's shown, as ViewPager2 did, andAndroidFragment'smaxLifecyclekeeps only the visible tab resumed.AndroidFragmentfeeds.RetainedComposeViewties the composition to the fragment instead, so feeds and scroll positions survive, as the old child fragments did.MeasureOnLayoutComposeView, shared by the shell and the post list.ReaderTracker.trackTagLoadedmoves fromnewInstanceForTagtoReaderPostListFragment.onCreate(fresh start only), sinceAndroidFragmenthas no factory call.AndroidFragment's container has nested scrolling off, so Compose dropped the lists' scrolling;Fragment.enableNestedScrollInterop()turns it on.Testing instructions