Hi! Before writing a PR I'd like to check whether you'd accept this UI change (you asked for discussion first).
Problem. The main page header (toolbar + the customizable tab strip) never collapses. In landscape on a phone it takes close to half of the screen, most noticeably in the "What's New" feed, so only one or two items are visible while scrolling.
| landscape today (header fixed, one row visible) |
same list after a fling with the proposed change |
 |
 |
Scrolling back up brings the header straight back: 
Recording (landscape, collapse → restore): https://raw.githubusercontent.com/Aidan-Harper/PipePipe/issue-assets/collapse-header/collapse-landscape.mp4 (frame sheet:
)
Proposal. Standard Material behaviour: the toolbar and the main tab strip scroll away together on scroll-down and come back immediately on scroll-up (scroll|enterAlways|snap), on the main page only. A new switch in Settings › Appearance, "Collapse header on scroll", turns it off; I have it default on, but I'm happy to ship it default off if you prefer. When "Main tabs position" moves the tabs to the bottom, the header stays fixed as today (the switch is greyed out in that mode).
| the setting |
bottom-tabs mode unchanged |
 |
 |
Implementation (small, 4 commits, ~235 lines, no new dependencies; branch https://github.com/Aidan-Harper/PipePipeClient/tree/feat/collapse-header):
refactor: host the existing toolbar include in a com.google.android.material.appbar.AppBarLayout in activity_main.xml; fragment_holder uses appbar_scrolling_view_behavior instead of the fixed top margin (layout-only, no behaviour change).
feat: MainFragment re-parents its ScrollableTabLayout into that app bar (top-tabs mode) and gives it back in onDestroyView; a tiny AppBarLayout.Behavior subclass only follows nested scrolls that start inside fragment_holder, so scrolling inside the player bottom sheet never moves the header; MainActivity keeps the header fixed for every other fragment (search stays inside the toolbar and is always reachable).
feat: the Appearance switch (collapse_header_on_scroll), applied live in onResume like the tabs-position switch.
fix: header stays fixed (switch greyed out) while "Main tabs position" puts the tabs at the bottom.
No insets/edge-to-edge changes (the app bar is inset-neutral; the status-bar behaviour on Android 15+ is unchanged).
Tested (debug build of dev @ v5.3.1-beta) on a Galaxy S10 / Android 12, Pixel 9 emulators on Android 14 and 17, and a Pixel Tablet emulator: portrait and landscape collapse/restore, tab switching resets the header, search from a collapsed header, mini/expanded player does not move the header, switch on/off without restart, rotation, bottom-tabs mode, a Maestro flow in both orientations, no new lint warnings, logcat clean.
Would you take this as a PR against PipePipeClient dev? If you'd rather have only the toolbar collapse (tabs stay), or a different default, I'll adjust before opening it.
Hi! Before writing a PR I'd like to check whether you'd accept this UI change (you asked for discussion first).
Problem. The main page header (toolbar + the customizable tab strip) never collapses. In landscape on a phone it takes close to half of the screen, most noticeably in the "What's New" feed, so only one or two items are visible while scrolling.
Scrolling back up brings the header straight back:
Recording (landscape, collapse → restore): https://raw.githubusercontent.com/Aidan-Harper/PipePipe/issue-assets/collapse-header/collapse-landscape.mp4 (frame sheet:
)
Proposal. Standard Material behaviour: the toolbar and the main tab strip scroll away together on scroll-down and come back immediately on scroll-up (
scroll|enterAlways|snap), on the main page only. A new switch in Settings › Appearance, "Collapse header on scroll", turns it off; I have it default on, but I'm happy to ship it default off if you prefer. When "Main tabs position" moves the tabs to the bottom, the header stays fixed as today (the switch is greyed out in that mode).Implementation (small, 4 commits, ~235 lines, no new dependencies; branch https://github.com/Aidan-Harper/PipePipeClient/tree/feat/collapse-header):
refactor:host the existing toolbar include in acom.google.android.material.appbar.AppBarLayoutinactivity_main.xml;fragment_holderusesappbar_scrolling_view_behaviorinstead of the fixed top margin (layout-only, no behaviour change).feat:MainFragmentre-parents itsScrollableTabLayoutinto that app bar (top-tabs mode) and gives it back inonDestroyView; a tinyAppBarLayout.Behaviorsubclass only follows nested scrolls that start insidefragment_holder, so scrolling inside the player bottom sheet never moves the header;MainActivitykeeps the header fixed for every other fragment (search stays inside the toolbar and is always reachable).feat:the Appearance switch (collapse_header_on_scroll), applied live inonResumelike the tabs-position switch.fix:header stays fixed (switch greyed out) while "Main tabs position" puts the tabs at the bottom.No insets/edge-to-edge changes (the app bar is inset-neutral; the status-bar behaviour on Android 15+ is unchanged).
Tested (debug build of
dev@ v5.3.1-beta) on a Galaxy S10 / Android 12, Pixel 9 emulators on Android 14 and 17, and a Pixel Tablet emulator: portrait and landscape collapse/restore, tab switching resets the header, search from a collapsed header, mini/expanded player does not move the header, switch on/off without restart, rotation, bottom-tabs mode, a Maestro flow in both orientations, no new lint warnings, logcat clean.Would you take this as a PR against
PipePipeClientdev? If you'd rather have only the toolbar collapse (tabs stay), or a different default, I'll adjust before opening it.