Skip to content

Extract browse tree into BrowseTreeProvider#5142

Open
sztomek wants to merge 3 commits intomedia3/02-standalone-componentsfrom
media3/03-browse-tree
Open

Extract browse tree into BrowseTreeProvider#5142
sztomek wants to merge 3 commits intomedia3/02-standalone-componentsfrom
media3/03-browse-tree

Conversation

@sztomek
Copy link
Copy Markdown
Contributor

@sztomek sztomek commented Mar 17, 2026

Description

This is the 3rd step of the media3 migration.
Its extracts content browsing logic to BrowseTreeProvider so it can be reused later. This PR mostly impacts automotive platform.

Testing Instructions

Test if the app is still functional on automotive

Checklist

  • If this is a user-facing change, I have added an entry in CHANGELOG.md
  • Ensure the linter passes (./gradlew spotlessApply to automatically apply formatting/linting)
  • I have considered whether it makes sense to add tests for my changes
  • All strings that need to be localized are in modules/services/localization/src/main/res/values/strings.xml
  • Any jetpack compose components I added or changed are covered by compose previews
  • I have updated (or requested that someone edit) the spreadsheet to reflect any new or changed analytics.

@sztomek sztomek added this to the 8.10 milestone Mar 17, 2026
@sztomek sztomek requested a review from a team as a code owner March 17, 2026 19:52
@sztomek sztomek requested review from MiSikora and removed request for a team March 17, 2026 19:52
@sztomek sztomek added do not merge [Type] Enhancement Improve an existing feature. labels Mar 17, 2026
Copilot AI review requested due to automatic review settings March 17, 2026 19:52
@sztomek sztomek added the [Area] Playback Episode playback issue label Mar 17, 2026
@dangermattic
Copy link
Copy Markdown
Collaborator

dangermattic commented Mar 17, 2026

1 Warning
⚠️ This PR is larger than 500 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.

Generated by 🚫 Danger

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is part of the Media3 migration and extracts media browsing tree construction/search into a reusable BrowseTreeProvider, shifting the internal browse representation to Media3 MediaItem while still serving legacy MediaBrowserCompat clients (notably Automotive).

Changes:

  • Introduces BrowseTreeProvider to own root selection, child loading, and search logic (previously in PlaybackService / AutoPlaybackService).
  • Updates AutoConverter to produce Media3 MediaItem/MediaMetadata, and adds MediaItemCompatConverter to convert back to MediaBrowserCompat.MediaItem for MediaBrowserServiceCompat APIs.
  • Adds unit tests for BrowseTreeProvider behavior and for Media3→Compat conversion.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/BrowseTreeProvider.kt New extracted provider for browse tree loading + search, returning Media3 MediaItem.
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/PlaybackService.kt Delegates browse/search to BrowseTreeProvider and converts results back to compat items.
automotive/src/main/java/au/com/shiftyjelly/pocketcasts/AutoPlaybackService.kt Delegates browse loading to BrowseTreeProvider and converts results back to compat items.
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/auto/AutoConverter.kt Migrates converter outputs from compat media items to Media3 MediaItem/MediaMetadata.
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/auto/MediaItemCompatConverter.kt New utility converting Media3 MediaItem to MediaBrowserCompat.MediaItem.
modules/services/repositories/src/test/java/au/com/shiftyjelly/pocketcasts/repositories/playback/BrowseTreeProviderTest.kt New tests for root selection and recent/suggested/up-next browse results.
modules/services/repositories/src/test/java/au/com/shiftyjelly/pocketcasts/repositories/playback/auto/MediaItemCompatConverterTest.kt New tests validating Media3→Compat conversion correctness.

You can also share your feedback on Copilot code review. Take the survey.

@sztomek sztomek modified the milestones: 8.10, 8.9 Mar 20, 2026
@sztomek sztomek force-pushed the media3/02-standalone-components branch from f2c4c68 to 9e355b1 Compare March 27, 2026 15:58
@sztomek sztomek force-pushed the media3/03-browse-tree branch from 6d0e4b8 to 1ad148d Compare March 27, 2026 16:01
@wpmobilebot wpmobilebot modified the milestones: 8.9, 8.10 Mar 30, 2026
@wpmobilebot
Copy link
Copy Markdown
Collaborator

Version 8.9 has now entered code-freeze, so the milestone of this PR has been updated to 8.10.

@sztomek sztomek force-pushed the media3/02-standalone-components branch from 9e355b1 to c4375a8 Compare March 31, 2026 15:24
Copilot AI review requested due to automatic review settings March 31, 2026 15:48
@sztomek sztomek force-pushed the media3/03-browse-tree branch from 1ad148d to 3ef0f55 Compare March 31, 2026 15:48
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Extracts Media3 browse-tree/content-browsing logic out of PlaybackService into a reusable BrowseTreeProvider, primarily to support the ongoing Media3 migration and automotive browsing.

Changes:

  • Introduces BrowseTreeProvider to centralize root selection, child loading, and search, and wires it into PlaybackService and AutoPlaybackService.
  • Migrates browse item creation to Media3 MediaItem/MediaMetadata, adding a MediaItemCompatConverter to bridge back to MediaBrowserCompat.MediaItem.
  • Adds unit tests for BrowseTreeProvider (recent/up-next/suggested) and MediaItemCompatConverter.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/PlaybackService.kt Replaces inline browse/search implementations with calls into BrowseTreeProvider, converting results back to compat items.
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/BrowseTreeProvider.kt New provider encapsulating browse-tree routing, root construction, and search (including automotive-specific roots).
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/auto/MediaItemCompatConverter.kt New adapter converting Media3 MediaItem into MediaBrowserCompat.MediaItem.
modules/services/repositories/src/main/java/au/com/shiftyjelly/pocketcasts/repositories/playback/auto/AutoConverter.kt Updates auto converters to return Media3 MediaItem/MediaMetadata and preserves browse extras.
automotive/src/main/java/au/com/shiftyjelly/pocketcasts/AutoPlaybackService.kt Switches automotive browsing to use BrowseTreeProvider + compat conversion.
modules/services/repositories/src/test/java/au/com/shiftyjelly/pocketcasts/repositories/playback/BrowseTreeProviderTest.kt New tests for root selection and recent/up-next/suggested children behavior.
modules/services/repositories/src/test/java/au/com/shiftyjelly/pocketcasts/repositories/playback/auto/MediaItemCompatConverterTest.kt New tests for Media3→compat conversion basics.

@sztomek sztomek force-pushed the media3/02-standalone-components branch from c4375a8 to 9d63c2a Compare March 31, 2026 16:18
@sztomek sztomek force-pushed the media3/03-browse-tree branch from 3ef0f55 to 952392b Compare March 31, 2026 16:18
Copilot AI review requested due to automatic review settings April 1, 2026 17:29
@sztomek sztomek force-pushed the media3/03-browse-tree branch from 952392b to d19918c Compare April 1, 2026 17:29
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

@sztomek sztomek force-pushed the media3/03-browse-tree branch from d19918c to fc7b947 Compare April 1, 2026 20:25
This test references methods (loadSuggestedChildren, loadRecentChildren)
and fields (upNextQueue, podcastManager, episodeManager, playlistManager)
that were extracted from PlaybackService into BrowseTreeProvider.
The same functionality is now covered by BrowseTreeProviderTest.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 2, 2026 10:55
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Area] Playback Episode playback issue [Type] Enhancement Improve an existing feature.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants