On the series overview page, when moving off of the episode row, such as
to do the play/more buttons, the other episodes will now become dimmer
to indicate which episode you're interacting with.
Also, when moving back to the page from the nav drawer, focus is
restored to where it left from. This is useful when scrolling fast left
on the season tabs and you overshoot onto the nav drawer, moving right
once will always move back to the season tabs.
In this example screenshot, Episode 3 is selected, so the others are
darker.
<img width="1280" height="771" alt="dim Large"
src="https://github.com/user-attachments/assets/fa21ade4-3345-4e97-873f-d654123a1ae5"
/>
This is a follow up from #158
Experimental MPV player backend
Related to #14, #22, & #85
You can switch to MPV in advanced settings and toggle using hardware
decoding or not.
This uses code and buildscripts from
https://github.com/mpv-android/mpv-android, plus other third party
libraries to build MPV
## Description
Shows local extras (clips, interviews, etc) for movies and tv shows
Extras are grouped by type and clicking on the type will go to a grid
page listing all of the items. However, if there is just one of that
type, it is shown in-line.
Trailers still have on their own row. And theme songs & theme videos are
not shown.
## Issues
Closes#123
Fix image aspect ratios for episode cards that differ from the video's
aspect ratio.
Also use the video's aspect ratio for chapter cards instead of assuming
16x9.
Dev: Create constants for the main ratios used
Fixes#215
Fix an issue where if there are no items for the "Continue Watching"
row, the tab row would disappear
Fix an issue where some rows (eg Recently released, recently added,
suggestions, etc) on the recommended pages might never show up
Fixes#207
Previously if the activity tracker got an error from the server during
one of the reports, the timer thread would stop and no further reports
would be sent.
This PR fixes that so it will continue to attempt to send reports since
if playback is continuing without error, the report error is likely
transient. For example, I observed the server returning an error during
its DB optimization scheduled task.
I think this will fix#208
Now when initiating a user or server switch, you can't back out of it
and must select a user/server. This will be useful when PIN code are
implemented down the road.
The app will now disconnect the web socket when backgrounded.
Also lots of internal refactoring
Just adds some logging while navigating around the app. If an error or
crash occurs and users want to share their logs, this information is
useful to know what page.
Logs are never sent without explicit user content and they are only
shared with the Jellyfin server the app is currently connected to. [See
here for more
details](https://github.com/damontecres/Wholphin/wiki/Gathering-app-logs#privacy)
Also stops theme music when the app is paused similar to #191
Refactors lifecycle event observers
When the app is "paused", aka not actively focused, but still visible
(such as when opening Android TV OS menu), playback will pause.
When the app is "stopped", aka not visible (such as pressing Home
button), playback will stop, report playback progress, and return to the
previous screen.
I think this will fix#181, but I don't have a controller to test with
Separates the loading logic into two groups:
1. Continue Watching & Next Up
2. Latest media
The home page displays once the first group is ready and shows
placeholders while the latest media is fetched. This also speeds up
refreshes when returning home after watching an episode.
Also ensure grouped Movie/TV libraries are displayed as Movie/TV
libraries instead of falling back to a generic grid display.
Fixes#189
Previously all of the rows on the recommended tab for Movies & TV Shows
were loaded sequentially before any results were shown. This is not a
great experience because some of the queries (eg top rated unwatched)
can take a while sometimes.
This PR starts displaying content once the first 1 or 2 rows is loaded
and then shows placeholders while the rest are querying.
Finally the row queries are now mostly independent so if one errors out,
the rest of the rows will still be displayed.
Closes#180
Fixes#184
Data was being fetched, but the UI wasn't being properly notified to
display the data.
This PR also adjusts so that "focused episode header" still takes up the
space even if the focused episode hasn't fully loaded yet. This prevents
the UI from jumping up and down.
Also #42 is _not_ fixed by this PR because it is a different issue.
## Changes:
- Hopefully finally fixes next up card image issues
- Remove the slider wraparound behavior in settings
- Removes the shadows/blurry effect on movie & person titles
- Adds the official rating to the home page
- Consistently order the official rating on home, movie, & series pages
- Add 1.75x speed for playback
- Don't time out the audio track selection/playback speed/video scale
dialogs
## Issues
Closes#166Closes#168Closes#169
Related to #162
Follow up to #167
Closes#152
Adds a setting to enable one-click-pausing via the D-Pad center button.
It is disabled by default.
If enabled, when the video is playing, it will be pause and show the
controls which is just like pressing the Pause or Play/Pause button.
If enable, when the video is paused and controls is not showing, it will
resume playback including using the skip back on resume setting.
Various fixes:
* Fixes misnamed "Continue watching" home row title
* Fix person page layout to account for the new clock
* Switch the 5 star rating to a decimal & icon
Additionally, the tab row has been rewritten to allow for:
* Always left justify tab rows
* Always scroll tab rows to ensure the currently selected index is
showing
* Always start focus on currently selected index when entering tab rows
Closes#154
Adds a settings to show the current time in the upper right corner.
If enabled, it will also show the end time for the playback on the
overlay.
Fixes#110
Switches loading the EPG/TV Guide data to lazy loading. The app will
load all of the channels, but only keep ~100 channels worth of data in
memory. As the user scrolls up and down, new channel program data will
be fetched as needed.
Eventually this technique can be applied to supporting more than 48
hours of data.
The logic for determine which program to focus on is also simplified and
more of it is delegated to composition.
Credit to @joshjryan for #131 hinting to use a different API endpoint to
avoid 414 errors.
Closes#97
Adds an option to force an item to play by transcoding. This can be
useful in the few cases where the device reports that it supports direct
play for a file, but it really doesn't.
Also rearranges the "More" dialog list to move picking audio & subtitle
track near the top.
Closes#148Closes#83
Remember the chosen sort order & direction per user profile on device.
Also adds a few more sort options.
This is only saved on the device and not saved/loaded from the server.
Closes#133Fixes#142
Theme songs will play for both TV shows and movies, if available. Also,
if there are multiple theme songs, one will be picked randomly instead
of always playing the first.
Additionally, the music now waits to start until the UI has loaded.
Fixes#144
The error was occurring when querying for server information. The
endpoint used returns information about previous installations and seems
some may be missing a field marked as required in the API. This causes
the deserialization error.
Since the query is just to get the server's name for the UI, we can use
the public server info endpoint instead and also wrap it in a try-catch
since it's not absolutely required.
Additionally, this PR adds exceptions for cases when necessary
information is not available (user id, access token, etc).
Adds an option to the show the next up during the end credits (outro)
instead of at the very end of the video.
The next up pushes up from the bottom and the video scales down to fit
above.
Still a WIP though
### Sample screenshot
<img width="1280" height="771" alt="next_up_credits Large"
src="https://github.com/user-attachments/assets/9a03d0ec-325d-4efe-a28e-51270ddaaa89"
/>
If the user has picked a specific audio track, then downloads a new
external subtitle, the audio track index must be adjusted (add 1) to
account for the shift in track indices.
This is because external subtitles are always indexed first.
Closes#95
Adds a setting (defaults to enabled) to automatically go to a page when
the navigation drawer item is focused after a brief delay.
Basically, if you open the left nav drawer, and scroll down to "Movies"
after a brief delay (600ms), the app will switch to the Movies page
without having to click.
It can be disabled in advanced settings.