Skip to content

feat: Add Quick Return functionality to library and discover views - #1067

Merged
RadicalMuffinMan merged 2 commits into
Moonfin-Client:mainfrom
mattsigal:feature/quick-return-library-views
Aug 6, 2026
Merged

feat: Add Quick Return functionality to library and discover views#1067
RadicalMuffinMan merged 2 commits into
Moonfin-Client:mainfrom
mattsigal:feature/quick-return-library-views

Conversation

@mattsigal

Copy link
Copy Markdown
Collaborator

Pull Request

Summary

Implements Quick Return functionality across all vertical and horizontal library browse screens, Seerr screens, genres, favorites, and folder views.

  • TV Clients (PlatformDetection.isTV): Intercepts controller Back button when scrolled down/right using InlineBackInterceptor & PopScope. Returns to 0.0 (top or left) and focuses the top grid item (getGridItemFocusNode(0)). Pressing Back at 0.0 permits normal page pop.
  • Mobile & Desktop Clients (!PlatformDetection.isTV): Displays a floating circular button in lower-right corner (bottom: 24, right: 24). Icon automatically adapts to scroll direction (Icons.arrow_upward_rounded for vertical grids, Icons.arrow_back_rounded for horizontal grids). Fills with secondary theme accent (AppColorScheme.onSurface, e.g. Cyan #00E5FF in Neon Pulse) with high-contrast icon when hovered. Tapping smoothly returns to 0.0.

Related Issues

Link related issues or tickets separated by commas.

  • Closes #
  • Fixes #
  • Related to #

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Performance improvement
  • UI/UX update
  • Documentation update
  • Build/CI change
  • Other (describe):

Changes Made

List the key changes included in this PR.

  • Created reusable QuickReturnWrapper widget (lib/ui/widgets/quick_return_wrapper.dart) with TV InlineBackInterceptor & PopScope integration and Mobile/Desktop floating two-tone animated button.
  • Added support for both vertical (Axis.vertical) and horizontal (Axis.horizontal) grid scroll directions.
  • Integrated QuickReturnWrapper into:
    • lib/ui/screens/browse/library_browse_screen.dart
    • lib/ui/screens/browse/all_genres_screen.dart
    • lib/ui/screens/browse/favorites_screen.dart
    • lib/ui/screens/browse/folder_browse_screen.dart
    • lib/ui/screens/seerr/seerr_discover_screen.dart
    • lib/ui/screens/seerr/seerr_browse_screen.dart
    • lib/ui/screens/seerr/seerr_collection_screen.dart
    • lib/ui/screens/seerr/seerr_person_screen.dart

Platform

  • Android
  • iOS
  • tvOS
  • Web
  • macOS
  • Windows
  • Linux
  • All / Shared code

Testing

Describe how this change was tested.

  • Tested on emulator / simulator
  • Tested on physical device
  • Manual testing completed: Tested on Android TV, Windows Desktop, and Android Mobile
  • Not tested (explain why):

Test Steps

  1. On Android TV: Scroll down or right in Movies, TV Shows, Seerr, or Genres. Press Back on remote -> verifies smooth scroll to top/left and focus restoration to first item. Press Back again -> verifies normal page pop.
  2. On Windows Desktop: Scroll down or right in any library view -> verifies floating circular button fades in with theme accent outline. Hover with mouse -> verifies solid secondary theme accent fill (Cyan in Neon Pulse). Click button -> verifies smooth scroll to top/left and button fades out.

Screenshots (if applicable)

Include screenshots or recordings for UI changes.

Screenshots are only of the Windows client because on Android TV it just looks like the regular library view 😂

Vertical Return:

2026-08-06_11-22-01_moonfin

Horizontal Return:

2026-08-06_11-22-19_moonfin

Checklist

  • Code builds successfully
  • Code follows project style and conventions
  • No unnecessary commented-out code
  • No new warnings introduced

@RadicalMuffinMan
RadicalMuffinMan merged commit a571c14 into Moonfin-Client:main Aug 6, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants