[TV] Local folder results in search - #5747
Conversation
|
Claude finished @sztomek's task in 5m 14s —— View job Code review
The shape of this is good — gating on 🔴 The Folders row will not lay out correctly
A Every other tile in a Related: 🟠
|
489431e to
a596632
Compare
49df96f to
71d0c7e
Compare
a596632 to
21d3ea9
Compare
71d0c7e to
63a7489
Compare
|
Claude finished @sztomek's task in 4m 54s —— View job Code review
Everything from the last round is genuinely fixed, and the fixes are the right ones rather than the minimal ones:
The matching logic is a faithful port of the phone ( Two things left, neither a correctness bug. Details inline. 🟠 The Folders filter re-applies itself, including mid-search
This is visible within one search, not just across searches, because the partial emission ( Fix is two small changes: don't derive Worth noting 🟡 Folder ordering and cover artwork
Also noted there: one Smaller notes
Nothing security-relevant: the gate is a UI-surfacing decision over on-device data, and there's no new network surface. Folder names go into a I couldn't run Gradle in this environment, so |
f474792 to
a527653
Compare
|
Claude finished @sztomek's task in 3m 36s —— View job Code review
The 🟠 The Folders pill now flashes in during almost every search
It's interactive in that window: Root cause is deriving pill visibility from a state that has no answer yet. The ViewModel already has the right hook — a 🟠
|
|
@geekygecko good point, asked the designers here: p1787663272838409-slack-C0ATWH7BNH3 |
a527653 to
023bbdf
Compare
|
Claude finished @sztomek's task in 3m 29s —— View job Code review
I checked the rest of the async block again while I was in there: No blocking findings this round. What's left is small. Smaller notes
Nothing security-relevant: the gate is a UI-surfacing decision over on-device data, folder names go into a Gradle is blocked in this environment, so |

Description
Adds local folder results to Android TV Search. Stacked on the TV search parity PR (#5746).
Behaviour
TvFolderDetailScreen(reusing the exact overlay/nav pattern from the Your Podcasts tab, including focus-restore and podcast-opened-from-folder returning to the folder).Implementation
TvSearchViewModelinjectsFolderManager.searchFolders()gates onsyncManager.isLoggedIn(), filtersfolderManager.getAll()by name, attaches each folder's podcasts. It runs in arunCatching { … }asyncconcurrently with the network search, so a (rare) local-DB failure degrades to "no folders" rather than failing the whole search, and it never delays the remote results.foldersadded toTvSearchState.Results(+ the NoResults emptiness check).folderPodcasts(uuid)feeds the detail screen.TvSearchFilter.Foldersentry (afterEpisodes). The visible pill set is derived from the current results —Foldersis only included when the results contain folders — and aneffectiveFilterkeeps the selected pill and the rendered content in sync without mutating ViewModel state when folders come and go.TvSearchFiltersnow takes the filter list to render.TvFolderCard,TvFolderDetailScreen, andTvPodcastGridScaffoldcomponents (the Folders filter grid mirrors the Podcasts filter layout).Folders are inherently a paid feature (a free user can't create them, and they're wiped on downgrade), so the gate only needs to check that the user is signed in. This matches how the rest of the TV module treats folders — the Your Podcasts tab renders them straight from
FolderManagerwith no subscription check. An earlier revision gated onSignInState.isSignedInAsPlusOrPatron, but the subscription tier is not reliably hydrated on TV (it's the only place in the module that read it), which silently suppressed every folder even for Plus users; gating onisLoggedIn()— the same guard this ViewModel already uses elsewhere — fixes that.Reuses existing infra throughout — the only shared-module change is the new
search_filters_foldersstring alias; otherwise tv-only.UPDATE
got design approval: p1787763569156349/1787663272.838409-slack-C0ATWH7BNH3
Testing Instructions
./gradlew :tv:installDebug; open Search, type the folder's name → a Folders row appears in Top Results, and a Folders filter pill appears after Episodes; select it → a folder-only grid; open a folder → its podcasts; open a podcast → back returns to the folder../gradlew :tv:testDebugUnitTest— covers signed-in surfaces folders, signed-out skips the lookup, folder-alone counts as a result.Screenshots or Screencast
Screen_recording_20260824_174641.mp4
Checklist
./gradlew spotlessApply)foldersvia asearch_filters_foldersalias