## Description
Fixes a few issues with the in-app & OS screensavers
- Make sure clock is updating for in-app screensaver
- Fix crash if app is force quit before the OS screensaver starts
### Related issues
Fixes#1045
### Testing
NVIDIA shield
## Screenshots
N/A
## AI or LLM usage
None
## Description
Add better ASS/SSA support to ExoPlayer by using
[`libass-android`](https://github.com/peerless2012/libass-android).
This is enabled with the "Use libass for ASS subtitles" advanced
settings for ExoPlayer. It is enabled by default.
### Related issues
Related to #22
## Description
This PR improves the logic used to choose a display mode when refresh
rate and resolution switching are enabled.
As before, matching the refresh rate is prioritized over picking the
resolution. For example, with the display modes of 1080@30 & 720@60 for
a 720@30 video, 1080@30 is used because the frame rate exactly matches.
### Related issues
Fixes#1036
### Testing
Unit tests, added test cases for more situations
## Screenshots
N/A
## AI or LLM usage
None
## Description
A follow up to #1014 to add the delete option in more context menus.
Also improves the "reaction" logic which updates previous pages from
deletions on later pages.
### Related issues
Addresses
https://github.com/damontecres/Wholphin/pull/1014#issuecomment-3987205355
Related to #104
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Fixes some issues with Jellyseerr login. Also makes error message more
clear by showing the URLs that were tested and the error that occurred.
Also fixes an issue where you could not remove a Jellyseerr server if it
was previously configured but can no longer connect.
### Related issues
Fixes#1028
Should fix#1022
Related to #747
### Testing
Emulator, tested adding and removing valid & invalid IPs
## Screenshots
N/A
## AI or LLM usage
None
## Description
Fixes several small issues throughout the app
- Adds 1440p as a resolution option
- Removes the delay when d-pad seeking on the seek bar & reduces it
slightly when controls are hidden
- Fixes padding one home customize pages
- Adds a title to the search for dialog
### Related issues
Fixes#1017
### Testing
Emulator mostly
## Screenshots
N/A
## AI or LLM usage
None
## Description
This PR is mostly a proof-of-concept for setting up automated UI
testing. The tests use Roboelectric so they can run without an emulator.
There is also a sample instrumented test for running on emulators or
devices for future tests.
It adds two basic automated UI tests for adding a server. These are sort
integration tests because they use the actual implementations for the
view model and services like `ServerRepository` and `JellyfinServerDao`.
Also, moves the bulk of `MainActivity`'s compose code into a function
for future tests.
### Related issues
N/A
### Testing
Local testing
## Screenshots
N/A
## AI or LLM usage
None
## Description
Adds a setting to enable "Media management" which adds a context menu
item to delete media. This is accessible using either the More button or
long clicking.
You can delete episodes, seasons, series and movies/videos.
If order for the option to appear the current user must have server-side
settings for "Allow media deletion from" enabled for the library and the
in-app setting under Settings->Advanced Settings->"Show media management
options".
### Related issues
Closes#104
### Testing
Emulator
## Screenshots
### Context menu

### Confirmation

## AI or LLM usage
None
## Description
- Aims to further optimize performance for the suggestions fetching
### Related issues
Fixes#833
### Testing
Android Emulator
NVIDIA Shield Pro 2019
## Screenshots
N/A
## AI or LLM usage
AI being used to assist with updating/creating unit tests
## 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 #784Closes#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>
## 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
## 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#1010Fixes#1004Fixes#975
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## 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#994Fixes#1001
Should fix#1003
### Testing
Emulator with simulated exception throws
## Screenshots
N/A
## AI or LLM usage
None
## 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

## 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).
## 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
## 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#695Closes#951
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Play theme songs for collections if available
### Related issues
Closes#711
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## 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
## 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
## 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
## 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
## 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
## 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>
## 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
## 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
## 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:

## AI or LLM usage
None