Commit graph

372 commits

Author SHA1 Message Date
Damontecres
6a1725fd3d
Adjust sort options 2026-02-28 21:23:29 -05:00
Damontecres
d37c7604d2
WIP lyric selection 2026-02-28 20:38:32 -05:00
Damontecres
6fa3f550b0
UI changes to now playing nav drawer item 2026-02-28 19:02:14 -05:00
Damontecres
dd7795e2fd
Add basic artist page 2026-02-28 19:01:54 -05:00
Damontecres
82f8a63c86
UI improvements & bug fixes for queuing 2026-02-28 17:47:01 -05:00
Damontecres
49adae9365
Basic sync lyric support 2026-02-28 16:19:05 -05:00
Damontecres
bd7fba14d1
Merge branch 'main' into fea/music 2026-02-28 14:45:15 -05:00
voc0der
fd9063fbad
Hold-to-seek acceleration for playback DPAD and seekbar (#900)
## Description
- Adds hold-to-seek acceleration for left/right DPAD input during
playback skip handling.
- Reuses one shared, duration-aware acceleration profile for both
playback DPAD and seekbar skipping.
- Extracts acceleration logic into a shared helper to keep playback and
seekbar behavior consistent.
- Slows the acceleration ramp (about one-third) to improve control
during longer holds.
- Preserves tap-on-release behavior: single taps seek on key release,
while holds seek on repeated key-down without an extra release step.
- Normalizes unknown/unset duration values to use the shortest-content
acceleration profile.
- Added unit coverage for shared seek acceleration math to prevent
accidental regression in ramp thresholds.

### Related issues
Supersedes #846  
Incorporates #784  
Closes #522

### Testing
Tested on Nvidia Shield Pro 2019.

- Quick left/right tap still performs normal skip behavior.
- Holding left/right seeks repeatedly with progressive acceleration.
- Seekbar hold uses the same acceleration profile as playback hold.
- Releasing after a hold does not trigger an extra seek step.

## AI or LLM usage
Codex 5.3 and Claude Opus 4.6 were used for implementation, debugging,
and cross-review. Changes were manually validated on device.

---------

Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-02-28 14:35:02 -05:00
Ray
55466f803c
Better animation to show/hide headers on grid pages (#1015)
## Description
Changes the animation for showing/hiding the header title/buttons on
grid pages.

This eliminates the awkward jump the grid does to fill the screen.
Instead it smoothly resizes.

### Related issues
Fixes the second item in #221

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-27 01:00:44 -05:00
Ray
b65e55f4ed
A few small UI fixes (#1012)
## Description
- Restores corner text for episode cards
- Always show end time on playback overlay instead of it being
controlled by the "Show Clock" setting
- Better logic to determine person's role in media

### Related issues
Fixes #1010
Fixes #1004
Fixes #975

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-26 20:27:22 -05:00
Ray
9b995bf6ba
Fix some IO related crashes (#1008)
## Description
- Catch network exceptions when querying to populate the nav drawer
- Perform screensaver work on IO thread
- Fix possible crash if screensaver service runs while regular activity
is destroyed
- Fix genre images & backdrop images not loading

This PR also adds an Jellyfin SDK `ApiClient` wrapper to push all
network calls onto the IO thread. And tries to use a more strict
network-on-main policy for debug builds.

### Related issues
Fixes #994
Fixes #1001
Should fix #1003

### Testing
Emulator with simulated exception throws

## Screenshots
N/A

## AI or LLM usage
None
2026-02-26 15:48:39 -05:00
Ray
a7e86fbc15
Add in-app & Android TV screensaver (#946)
## Description
Adds both an optional in-app and Android TV OS (DreamService)
screensaver

Has settings for:
- Starting delay, options from 30s to 1 hour
- Duration to show each image, 30s to 2 minutes
- Show clock (separate from app-wide clock)
- Toggle animated zooming
- Set a max age rating to limit what content is shown
- Included media types: movies, tv shows, and/or photos

By default only Movies & TV Shows are included. But if you have like
family albums on your server, you could enable Photos too.

There's also an button to start the screensaver so you can see what it
looks like.

### Related issues
Closes #230

### Testing
Emulator, Onn 4k pro, nvidia shield using both in-app and OS
screensavers

## Screenshots
![screensaver_settings
Large](https://github.com/user-attachments/assets/9b3240dd-81cb-4c20-bc4e-b2bf38698b2f)

## AI or LLM usage
None

## Acknowledgements

Some of the skeleton code for setting up the `DreamService` with the
right lifecycle was copied and modified from the [official app's
implementation](https://github.com/jellyfin/jellyfin-androidtv/blob/master/app/src/main/java/org/jellyfin/androidtv/integration/dream/DreamServiceCompat.kt).
2026-02-25 14:11:00 -05:00
Damontecres
7703bcbd13
Refactoring queue 2026-02-24 18:28:19 -05:00
Damontecres
123ac5601b
WIP now playing overlay 2026-02-24 15:03:00 -05:00
Damontecres
1d47220991
Basic show/hide now playing nav drawer item 2026-02-24 13:09:59 -05:00
Damontecres
cd06c0380e
Merge branch 'main' into fea/music 2026-02-24 12:40:57 -05:00
Ray
a14fdac852
A few more home page fixes (#967)
## Description
A few more home page fixes
* Focus issue between settings & preset buttons
* Fix default genre card size for "Wholphin Default" preset
* Cache genre image urls for 2 hours so that they don't change on every
refresh

### Related issues
Related to #399

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-24 12:37:21 -05:00
Ray
3e2a1869ab
Scroll to current chapter on playback overlay (#964)
## Description
This PR makes it so when you open the playback overlay and move down to
the "Chapters" row, the first focused chapter will be the current one
instead of always the first one.

### Related issues
Closes #695
Closes #951

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-23 18:52:38 -05:00
Ray
348a3022d6
Fix cut off cards on grids with show details enabled (#963)
## Description
Fixes the previous row of cards showing the bottom cut off when the
"Show details" view option is enabled.

### Related issues
Fixes #404
Fixes #877
Related to #882 

### Testing
Emulator

## Screenshots
![grid_show_details
Large](https://github.com/user-attachments/assets/3376275e-261e-4e5a-b874-18be7606a9bf)

## AI or LLM usage
None
2026-02-23 15:20:25 -05:00
Ray
3b162a2f98
Play theme songs for collections (#962)
## Description
Play theme songs for collections if available

### Related issues
Closes #711

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-23 13:38:02 -05:00
Damontecres
e1c66dfb1d
Fix series overview episode images 2026-02-23 12:34:46 -05:00
Ray
2a371e7d6b
Fix strings missing from translations (#959)
## Description
Weblate's Android string parser (aka
https://translate.codeberg.org/projects/wholphin/) doesn't support
direct translations of string arrays.

Many of Wholphin's preference options are defined in string arrays and
therefore could not be translated. So this PR implements the [suggested
workaround](https://docs.weblate.org/en/latest/formats/android.html) to
move the string into individual entries and reference them in arrays.

Also moves some hardcoded strings into `strings.xml` so they can be
translated. Note: virtually all error messages are still hardcoded, but
they are only for exceptional cases, so it's probably not a huge
problem.

A minor bug where the backdrop would show briefly after switching users
is fixed.

### Related issues
Fixes #957

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-23 11:17:57 -05:00
Ray
a44fad890f
Add preset for home page episode thumbnails (#954)
## Description
Adds a preset for "Episode thumbnails" which shows episodes using their
Primary image (ie a thumbnail or screenshot of the episode).

The previous "Thumbnails" preset is renamed "Series Thumbs" because it
uses the episode's Series Thumb image.

Also fixes a bug where toggling "Use series" might not update the home
page preview automatically.

### Related issues
Fixes #940

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-23 09:56:22 -05:00
Ray
a51d9e9c65
Fix clicking genre cards on home page (#953)
## Description
Fixes clicking on a genre card added to the home page

### Related issues
Fixes #952

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-22 20:18:18 -05:00
YogiBear12
e8c9b4e208
SeriesOverview Alignment (#930)
## Description
This PR changes the padding on the SeriesOverview to align it with the
updated layout on the Home, MovieDetails and SeriesDetails pages.

There is also a small change to fix an incorrect spacing on the
SeriesDetails, and start padding added to the ItemRow to bring it into
alignment with other text elements on the page and ensure consistent
spacing from the navdrawer

### Related issues
I believe this is the final PR to close out
[704](https://github.com/damontecres/Wholphin/discussions/704)

### Testing
Tested changes on both the emulator and physical tv

## Screenshots
Home screen showing the ItemRow alignment
<img width="1920" height="1080" alt="home"
src="https://github.com/user-attachments/assets/b338e2b4-2c53-45a1-b532-544263632230"
/>

SeriesOverview
<img width="1920" height="1080" alt="Screenshot_20260221_200450"
src="https://github.com/user-attachments/assets/51710ade-5155-41d9-8b89-0678c71e0c76"
/>


## AI or LLM usage
AI was used to identify the current padding and spacing values
2026-02-22 10:27:05 -05:00
Ray
cc052453a4
Add basic music video support (#948)
## Description
Just enables showing and playing music videos as if they were regular
videos. Basic metadata is shown as well.

Navigation isn't great because a music video library goes by folders
which don't necessary have the best UI choices.

### Related issues
Related to #267 

### Testing
Checked playback on the emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-21 15:30:16 -05:00
Cristiano Chelotti
55b148971e
Fixing Settings sticky header text overlapping with menu items (#928)
## Description
- Adding a background for the Settings stickyHeader. This helps with
visibility and prevents overlap with the menu items when scrolling.
### Related issues
In the Settings screen, the header can overlap the text of the menu
items when scrolling down. This is a minor UI bug only and does not
affect functionality at all, but the fix seemed easy and harmless so I
figured I'd give it a go.

### Testing
Tested manually on TCL model 50S434 running Android TV. Tested manually
using AVD emulation on Television (1080p) and Television (4K) preset
devices. Reproduced the problem on all 3 devices and confirmed that my
fix works across all.

## Screenshots
Before:
<img width="1920" height="1080" alt="before-settings-fix"
src="https://github.com/user-attachments/assets/15f9916d-2583-4dc4-8302-cb1f3a395b1a"
/>
After:
<img width="1920" height="1080" alt="after-settings-fix"
src="https://github.com/user-attachments/assets/3f8781aa-7063-4eb4-bf4a-95ff34b9b1a1"
/>


## AI or LLM usage
None

---------

Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-02-20 19:24:35 -05:00
Ray
7939fffd48
Override H264/AVC High 10 Profile Level 5.2 support for some devices (#935)
## Description
Several Fire TV devices natively support H264/AVC High 10 Profile Level
5.2 according to [their
specs](https://developer.amazon.com/docs/device-specs/device-specifications-fire-tv-streaming-media-player.html),
but the `MediaCodecInfo` doesn't return this support.

So this PR adds an override for the known devices that support this
which prevents unnecessary transcoding.

### Related issues
Closes #786

### Testing
Verified on a Fire TV 4k Max 2nd Gen

## Screenshots
N/A

## AI or LLM usage
None
2026-02-20 16:07:22 -05:00
Ray
4f8f69c438
Better Jellyseerr connection error handling (#933)
## Description
Show Jellyseerr connection errors in settings. If an error occurred
trying to login, in setting it will show "Server error" and clicking
gives more error info and option to remove the server.

### Related issues
Fixes #907 

### Testing
Emulator with simulated errors

## Screenshots
N/A

## AI or LLM usage
None
2026-02-20 14:29:58 -05:00
Ray
dfd9acf561
Add metadata to media session (#934)
## Description
Adds some metadata about playing media for consumption in remote control
apps such as Google Home or others.

### Related issues
Partially address #889, doesn't add explicit controls yet, but Google
Home works

### Testing
Nvidia shield + Google Home app

## Screenshots
iOS Google Home app:

![ios_google_home](https://github.com/user-attachments/assets/680ccae5-b66e-404a-a3a1-7c89991d841b)


## AI or LLM usage
None
2026-02-20 14:28:57 -05:00
Ray
65f20e2daf
Fix a few customize home bugs (#929)
## Description
Hopefully this is the last round of bug fixes for customizing the home
page!

Fixes a possible crash when scrolling after adding a row after resetting
to default or loading remote settings that have more rows than the
original settings

Fixes some incorrect titles

### Related issues
Related to #399 & #803

### Testing
Emulator & nvidia shield

## Screenshots
N/A

## AI or LLM usage
None
2026-02-19 21:50:55 -05:00
Ray
219e4b01db
Add a collection or playlist to home page (#915)
## Description
Adds a basic way to add a collection or playlist as a row on the home
page.

There's a simple search dialog to find the collection or playlist.

### Related issues
Related to #399 & #803 

### Testing
Emulator testing

## Screenshots
N/A

## AI or LLM usage
None
2026-02-19 19:18:39 -05:00
Ray
9daf679f7d
Fix some image issues (#926)
## Description
Fixes/improves thumb image handling by falling back to backdrop images
if available. Episodes without a parent thumb/backdrop will fall back to
their primary image.

Also fixes the nav drawer selected item not updating (bug introduced by
#886).

### Related issues
Fixes #642
Fixes #914

### Testing
Emulator in various situations with missing thumbs

## Screenshots
N/A

## AI or LLM usage
None
2026-02-19 19:18:14 -05:00
YogiBear12
f57cba85f2
Title/subtitle style update (#775)
## Description
This PR updates cards that have a title and subtitle, so that they are
visually distinct instead of sharing the same font and style.
Titles use bodyMedium typography with semiBold weight. 
Subtitles use bodySmall typography with normal weight.

This affects:
- PersonCard
- EpisodeCard
- DiscoverItemCard
- GridCard
- SeasonCard

### Related issues
Related to [735](https://github.com/damontecres/Wholphin/issues/735)

### Screenshots
<img width="960" height="540" alt="Screenshot_20260125_190057"
src="https://github.com/user-attachments/assets/4bbf29a3-3df8-482b-944e-454a9b091e44"
/>

### AI/LLM usage
No LLM usage
2026-02-19 17:28:21 -05:00
Cristiano Chelotti
8bfe77e6e4
Fixing seek text label overlap and visibility issues. (#923)
## Description
- Smoothly bumps up the title and subtitle text above the seek progress
label when the seek bar is focused to prevent overlap.
- Adds a semi-transparent black backer to the text label that appears
above the seek progress indicator. Helps with visibility when the image
in the playback matches the color of the text. Note: the backer is black
with Alpha of 0.6 for now because I felt that looked good for contrast
across all themes. However, if you prefer it respect a particular theme
color, I'd be willing to make that change.

### Related issues
In the playback screen, when focusing the seek bar on Android TVs (at
least the ones I was able to test), the seek text above the seek bar
will overlap with the media title. This is a purely cosmetic issue in
the UI, but it seemed worth a fix. See before and after images in in the
Screenshots section below

This problem is briefly mentioned in point number 2 of [#528
](https://github.com/damontecres/Wholphin/issues/528)

### Testing
Tested manually on TCL model 50S434 running Android TV. Tested manually
using AVD emulation on Television (1080p) and Television (4K) preset
devices. Reproduced the problem on all 3 devices and confirmed that my
fix works across all.

## Screenshots
Before:
<img width="2046" height="1184" alt="before"
src="https://github.com/user-attachments/assets/64708e13-3fa4-4248-91e3-e203f8ac1f7d"
/>

After:
<img width="2046" height="1183" alt="after"
src="https://github.com/user-attachments/assets/db9d1767-cf93-4153-b13a-9a18fbc89e0c"
/>

## AI or LLM usage
None

---------

Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-02-19 16:18:20 -05:00
Ray
8c2227bf67
Various fixes for home page customization (#902)
## Description
Fixes several issues with home page customization such as
- Displaying wrong episode-specific display options
- Smaller text on cards without images
- Prefer fill scaling for posters, like the old home page

### Related issues
Related to #803 

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-18 13:40:18 -05:00
Ray
dc3c6dc739
Fix some cases when refresh rate switching didn't work/timed out (#901)
## Description
An attempt to fix #769

1. Always fetch the `DisplayManager` when switching refresh rates
2. Use the Activity context instead of Application context

### Related issues
Fixes #769

### Testing
I still haven't reproduced #769 myself, but this change works fine on my
shield + LG C2

## Screenshots
N/A

## AI or LLM usage
None
2026-02-16 09:04:28 -05:00
Ray
0276c5f49b
Fix reordering the nav drawer items not always saving the changes (#898)
## Description
Fixes the nav drawer preference reordering & save logic. Also improves
the UI a bit with animations.

It's also now stored in memory and saved when the dialog is dismissed.

### Related issues
Related to #886

### Testing
Emulator mostly

## Screenshots
N/A

## AI or LLM usage
None
2026-02-14 16:13:45 -05:00
Ray
44eb50910d
Fixes unable to dismiss next up during credits (#899)
## Description
Fixes an issue where the "Next Up" popup continuously pops up when
dismissed if you have "Show next up during credits/outro" enabled.

### Related issues
Fixes #895
Bug introduced by #884

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-14 16:13:38 -05:00
Ray
1e810c1157
Some fixes to customize homes (#893)
## Description
- Update header when editing a row
- Exclude non-empty rows to prevent scroll lock
- Only save settings locally if they are different from the source

### Related issues
Related to #803 

### Testing
Emulator, tested remote & local settings changes

## Screenshots
N/A

## AI or LLM usage
None
2026-02-13 16:30:03 -05:00
Ray
91900af7a9
Improved home page support for Live TV & Recordings (#890)
## Description
Improves home page customization for Live TV & Recordings
- Add row for live tv channels
- Add row for "on now" programs
- Clicking on a TV channel or TV program starts playback
- Better name for "Recently recorded" instead of "Recently added in
Recordings"

Also fixes a back stack issue after adding rows

### Related issues
Follow up from #803 

### Testing
Emulator

## Screenshots
<img width="663" height="190" alt="image"
src="https://github.com/user-attachments/assets/49d41953-42ab-4621-92f1-b7936aab7e97"
/>

## AI or LLM usage
None
2026-02-13 11:41:47 -05:00
Ray
7fcd66f407
Integrate nav drawer settings for default home page (#888)
## Description
Customizing the home page (#803) and nav drawer (#886) were developed
independently, so this PR just cleans up somethings so that those two
changes work together.

This PR restores the default home page when there is no customization to
be the same as before: continue watching/next up row(s) followed by the
order of the nav drawer libraries' recently added rows.

Finally gets rid of `NavDrawerIteRepository` and related functions which
all had weird, hard to follow code.

### Related issues
Related to #803 & #886

### Testing
Emulator testing

## Screenshots
N/A

## AI or LLM usage
None
2026-02-12 21:19:33 -05:00
Ray
17b0eef5c5
Add ability to order navigation drawer items (#886)
## Description
Allows for reordering the items in the navigation drawer

This does not change the home page row order since #803 decouples the
nav drawer and home page rows.

The initial order will be the "Library Order" settings on the web under
Profile->Home. Making any changes locally in Wholphin will set the
order. If any new libraries are added or if Seerr integration is
enabled, these will added to the end of the "pinned" list.

### Related issues
Closes #822
Related to #399 & #803

### Testing
Tested on emulator
- Re-ordering
- Granting/Revoking user permission to a new library

## Screenshots
N/A, nav drawer is the same, just sorted differently

## AI or LLM usage
None
2026-02-12 19:55:12 -05:00
Ray
fcba1c7444
Customize home page (#803)
## Description

This PR adds the ability to customize the home page in-app

### Features
- Add, remove, & reorder rows
- Persist the configuration locally
- Save the configuration to the server, allowing to pull down on other
devices
- Adjust view options for rows such as card height, image type,
preferring series images, or aspect ratio (similar to libraries)
- Pull down the web client's home rows (no plugins are supported yet!)
- Preview of the home page which is usable & updated as changes are made

### Row options

These are row types that can be added in-app via the UI:
- Continue watching
- Next up
- Combined continue waiting & next up
- Recently added in a library
- Recently released in a library
- Genres in a library
- Suggestions for a library (movie & TV show libraries only)
- Favorite movies, tv shows, episodes, etc

Additionally, there are more row types that don't have a UI to add them
(yet):
- Simple query to get items from a parent ID such as a collection or
playlist
- Complex query to get arbitrary items via the `/Items` API endpoint

### Dev notes

Settings are loaded in order:
1. Locally saved
2. Remote saved
3. Fallback to default similar to Wholphin's original home rows

The remote saved settings are stored via the display preferences API.

I know some server admins would prefer to push a default setup to their
clients. This PR does not have that ability, but it does define a
straightforward API for defining the settings. Something like the
potential server plugin work started in #625 could be slimmed down to
expose a URL to be added in the load order.

I'm also investigating integration with popular home page plugins to
allow for further customization, but will take more time.

### Related issues
Closes #399
Closes #361
Closes #282
Related to #340
2026-02-12 19:54:51 -05:00
Ray
3f0dedd71e
Fix error pages overlapping with nav drawer (#887)
## Description
As of #842, if an error occurred on some pages that display a generic
error message, it would be shown under the nav drawer making it
difficult to read.

This PR fixes that by passing the `modifier` into the `ErrorMessage`
composables ensuring it has proper offset & padding. Also, for
consistency, passes it the `LoadingPage`s.

### Related issues
Caused by #842

### Testing
Threw an exception during home page loading to observe the issue and fix
on the emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-12 19:21:16 -05:00
Justin Caveda
11fd780b31
Fix suggestions cache miss handling for missing files (#880)
## Description
Fix a bug where movie suggestions would get stuck loading when the
on-disk cache file doesn't exist.

### Related issues
Fixes #876

### Testing
Ran unit tests locally. 

## Screenshots
N/A

## AI or LLM usage
Used AI to add testing for this scenario to unit test

---------

Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-02-12 18:27:59 -05:00
Ray
4161ea418c
Fixes the skip segment button appearance behavior (#884)
## Description
Fixes the segment (intro, credits, etc) skip button appearance behavior

For the button shown on the video: if the button for a given segment is
clicked, dismissed by the back button, or times out after 10 seconds, it
will never appear again even if you rewind the video.

However, the current non-ignored segment will always show a button on
the playback controls though so it's possible to still use it.

### Related issues
Fixes #875

### Testing
Tested a bunch of scenarios on the emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-11 20:06:15 -05:00
voc0der
028553dc91
Add Quick Connect authorization to Settings (#820)
## Description
- Adding `Quick Connect` drawer to the Settings under the Seer
integration, and before Additional options.
- When interacted with, A inline-dialog appears (after internally
resetting itself), with gutter options Cancel / OK, like existing
dialogs, and when that is completed, where it completes the other side
of `Quick Connect`, e.g. login to your phone Jellyfin app by using
Wholphin.
- Failure and success both are indicated to the user and if success, it
closes the window.

### Related issues
Related to #819 
Closes #819

### Testing
Tested on development build from my repo on a Nvidia Shield 2019.
Performed several logout/login, both success and fail to observe dialog
state and function.

## AI or LLM usage
Used Claude Sonnet 4.5 for most of the code, ChatGPT, reviewed it, then
I reviewed it, made a few tweaks.
2026-02-11 20:06:03 -05:00
Ray
83e5a44f37
Fixes glitches when scrolling on the home page (#882)
## Description
Fixes the possible glitch on some devices when scrolling left-right on
rows on the home page

### Related issues
Fixes #367
Fixes #872

### Testing
Emulator & shield 2019

## Screenshots
N/A

## AI or LLM usage
None
2026-02-11 16:07:22 -05:00
Ray
6e676b9474
Fixes overscrolling on recommended tabs (#881)
## Description
If the continue watching row is empty on recommended pages, it would
scroll to the first successfully loaded row even if previous ones are
still pending.

This PR fixes that so the page waits until the right first row is ready.

### Related issues
Fixes #839

### Testing
Emulator & shield 2019

## Screenshots
N/A

## AI or LLM usage
None
2026-02-11 16:05:11 -05:00