Skip to content

feat: Native Android TV Recommendation Channels (Simplified)#203

Open
halibiram wants to merge 14 commits intotapframe:devfrom
halibiram:feature/tv-home-recommendations
Open

feat: Native Android TV Recommendation Channels (Simplified)#203
halibiram wants to merge 14 commits intotapframe:devfrom
halibiram:feature/tv-home-recommendations

Conversation

@halibiram
Copy link
Contributor

@halibiram halibiram commented Feb 20, 2026

Summary

I appreciate the previous feedback on the project's direction and aesthetics. Based on that, I've completely stripped out the custom UI cards and excessive channels that felt misaligned and overly generated.

This updated revision strips the feature down to the bare essentials, strictly using existing catalog data to natively integrate with the Android TV home screen:

  • Simplified Channels: Removed custom "Continue Watching" and "Next Up" channels completely.
  • New Releases & Trending: Only registers a "New Releases" (mixing latest movies/series) and a "Trending" channel, populated directly from the existing HomeViewModel rows.
  • System Play Next: Enables the native Android TV "Play Next" system row to track watch progress natively.
  • UI Fix: Explicitly set the poster aspect ratio to 2:3 so images fit cleanly into the native Android TV launcher without awkward cropping.

The bloated code is gone, and this just bridges the existing app data to the native TV launcher APIs. Let me know if this minimal approach fits the roadmap better!

@cowera
Copy link

cowera commented Feb 20, 2026

Love it

- Add TvContractCompat channels: Continue Watching, Next Up, Trending
- Add ProgramBuilder for PreviewProgram/WatchNextProgram conversion
- Add ChannelManager for idempotent channel CRUD via ContentResolver
- Add TvRecommendationManager as top-level coordinator
- Add TvRecommendationWorker (WorkManager periodic sync every 30 min)
- Add RecommendationReceiver for INITIALIZE_PROGRAMS broadcast
- Add RecommendationDataStore for channel ID persistence
- Add deep link handling (nuviotv://content/) in MainActivity
- Hook into WatchProgressRepositoryImpl for real-time updates
- Hook into HomeViewModel for Next Up and Trending channel updates
- Configure HiltWorkerFactory and disable default WM initializer
- Add ProGuard keep rules for Worker/Receiver/TvProvider
- Add WRITE_EPG_DATA permission and deep link intent-filter
- Fix tvProvider version 1.1.0-alpha02 -> 1.1.0 (non-existent artifact)
- Fix ProgramBuilder: setSeasonNumber/setEpisodeNumber expect Int, not String
- Fix MainActivity: add missing closing brace for class body
- #1: removeProgress/removeFromHistory now triggers Watch Next cleanup
- #2: clearAll() removes Watch Next system row entries
- #3: consumeDeepLink reads name/poster/backdrop from URI
- #4: onProgressUpdated refactored to avoid nested mutex risk
- #5: updateWatchNext wrapped in mutex.withLock
- #7: update methods use getOrCreateChannel for stale ID recovery
- tapframe#8: trending updates deduplicated with signature check
- tapframe#9: both Trakt auth paths trigger recommendation cleanup
- tapframe#10: findWatchNextByInternalId uses WHERE clause
- tapframe#12: buildNextUpPlayUri includes content metadata
@halibiram halibiram force-pushed the feature/tv-home-recommendations branch from a437ac4 to 3a05d22 Compare February 21, 2026 11:16
@halibiram halibiram changed the base branch from main to dev February 21, 2026 11:17
@timmyp53
Copy link

@tapframe are there plans for playstore introduction with integration as deep as this?

@halibiram halibiram changed the title feat: Android TV Home Screen Recommendations (Channels, Watch Next, Deep Links) feat: Native Android TV Recommendation Channels (Simplified) Feb 22, 2026
@halibiram
Copy link
Contributor Author

Hey everyone, here are some screenshots of the recommendation channels in action. It's fully integrated into the native Android TV launcher now (New Releases & Trending). No custom UI components, just feeding the system rows with the correct 2:3 poster aspect ratios so they don't get cropped. Feedbacks are welcome!
Screenshot_20260222_194738
Screenshot_20260222_194813
Screenshot_20260222_194901
Screenshot_20260222_194942

@halibiram
Copy link
Contributor Author

just a quick update: I got the background syncing working so the TV rows update themselves every 30 mins or so. Also changed how the New Releases are merged, it strictly sorts by release date now so the freshest content is always first

@timmyp53
Copy link

Amazing work.

@halibiram
Copy link
Contributor Author

Hi @tapframe,

Hope you're doing well! Just wanted to follow up and see if you've had a chance to review this PR yet.

I understand you're likely busy with other priorities, so absolutely no rush. I'm available to:

  • Answer any questions about the implementation
  • Make any requested changes
  • Provide additional testing details or documentation

Just let me know what would be most helpful!

Thanks for your time!

@tapframe tapframe self-requested a review February 28, 2026 02:34
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.

3 participants