Commit graph

1065 commits

Author SHA1 Message Date
Damontecres
d6c9b236ef
Fix reversed logic 2025-11-10 18:45:31 -05:00
damontecres
fbf77b9376
Better playback lifecycle handling (#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
2025-11-10 17:55:58 -05:00
damontecres
ce8cab0d1f
Home page improvements (#190)
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
2025-11-10 13:18:36 -05:00
damontecres
98fc996bd5
Load movie & tv recommendations asynchronously (#183)
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
2025-11-09 17:40:47 -05:00
damontecres
0fb1a69556
Fix only loading 100 episode in a season (#187)
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.
2025-11-09 17:40:13 -05:00
damontecres
5720603447
Add ability to style subtitles (#177)
Adds settings for styling text subtitles such as srt/subrip

## Issues
Closes #11
2025-11-08 19:54:51 -05:00
damontecres
762e8f287d
When scrubbing show position's time even without preview images (#175)
When scrubbing along the seek bar, always show the position's time even
if there is no trickplay/preview image to display.
2025-11-08 09:34:12 -05:00
Damontecres
76a46bfeb7
Fix subtitle search crash 2025-11-07 17:49:24 -05:00
damontecres
44825d0c25
Several UI changes (#171)
## 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 #166 
Closes #168
Closes #169
Related to #162
Follow up to #167
2025-11-07 10:51:31 -05:00
damontecres
18556b5058
Bump dependency versions (#170)
Also tries out using assisted injection for item IDs

No user facing changes
2025-11-07 10:09:59 -05:00
damontecres
bdc475e7b6
Fix next up image showing very small (#167)
Fixes #163 

Should fix the next up images rendering very small. Also tweaks some
padding and background for the popup.
2025-11-06 18:58:35 -05:00
damontecres
5d085a3ab4
Show update download progress (#165)
Shows a simple dialog while the app update is downloading to show
progress
2025-11-06 18:15:25 -05:00
Damontecres
0d48fd67cf
Fix clock not updating 2025-11-06 08:41:05 -05:00
damontecres
b6df72c3c9
Optional setting for one click pause w/ d-pad center (#160)
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.
2025-11-05 16:35:20 -05:00
damontecres
f12785aaee
Various UI fixes & improvements (#159)
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
2025-11-05 12:08:45 -05:00
damontecres
77c787b51f
Add settings to show the current time (#155)
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.
2025-11-04 15:27:38 -05:00
damontecres
40a8249469
Support basic adding to playlists (#157)
Closes #143 

Adds option in the "More" menu to add the item to a playlist. Can also
create a playlist if needed.
2025-11-04 15:27:26 -05:00
damontecres
86977f846c
Handle larger TV guide data (#132)
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.
2025-11-04 13:33:32 -05:00
damontecres
13c2bb32d2
Fix favorites not loading (#156)
Fixes bug introduced in #150 that prevented the favorites page from
loading anything

Also remembers the sort for each favorites tab
2025-11-04 13:33:03 -05:00
damontecres
a0b9ac7673
Add option to play item forcing transcoding (#153)
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.
2025-11-03 20:34:46 -05:00
damontecres
2840fa3f2a
Extract strings into resources (#151)
Move all strings into resource files to make future translating easier

No user facing changes in this PR
2025-11-03 15:38:12 -05:00
damontecres
40267be633
Remember library/collection sorting (#150)
Closes #148 
Closes #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.
2025-11-03 12:15:41 -05:00
damontecres
08577b8a31
Play theme song for movies (#149)
Closes #133 
Fixes #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.
2025-11-03 11:50:47 -05:00
damontecres
78322ab0a5
Fix deserialization error during login (#145)
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).
2025-11-02 17:28:18 -05:00
damontecres
fe0f96d413
Revert nav drawer on focus #127 (#140)
Temporarily reverts #127 and reopens #95

It needs more refinement.
2025-11-02 17:06:06 -05:00
damontecres
d76f829804
Option to show next up during credits/outros (#130)
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"
/>
2025-11-02 10:51:59 -05:00
damontecres
715dc1abda
Fix network on main during letter position lookups (#136)
Maybe fixes #135

Yet another network-on-main exception fix.
2025-11-01 19:25:19 -04:00
damontecres
efde6deb58
Adjust audio index when downloading subtitles (#129)
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.
2025-10-31 22:20:00 -04:00
damontecres
9f3691fd1b
Optional to automatically go to new page on focus instead of clicking (#127)
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.
2025-10-31 15:09:13 -04:00
Damontecres
26cc092402
Enable subtitles button when no subtitle tracks 2025-10-31 14:37:30 -04:00
damontecres
e9e5aee01c
Follow up to #122 for selecting subtitles tracks (#124)
Handles selecting subtitle tracks when transcoding now too

Also fixes the adjustment if there's many external subtitles
2025-10-31 13:56:42 -04:00
damontecres
1508fa1ea3
Show file details in overview dialog (#126)
When clicking the overview for an item, the dialog now shows details
about each file/media source including video, audio, & subtitle
information.

It only shows the full file path if the user is an administrator.
2025-10-31 12:27:30 -04:00
damontecres
799255814f
Fix selecting subtitle tracks (#122)
Fixes subtitle track selection especially when there is a mix of
embedded & external subtitles

Fixes #116
2025-10-30 22:37:28 -04:00
damontecres
c65831cb05
Fix switching audio/subtitle tracks during playback (#121)
An error would occur when switching audio or subtitle tracks during
playback, but would be ignored. This meant the tracks can't be changed.

#111 was too aggressive on switching dispatchers. The player can only be
accessed on `Main`, so this PR fixes that.
2025-10-30 19:24:53 -04:00
damontecres
982506555f
Add page to details about people (#119)
Adds a page to show details about people (actors, directors, etc) when
clicking on the person card

<img width="1280" height="771" alt="wholphin_person"
src="https://github.com/user-attachments/assets/ceba6c77-2943-4faf-a2c2-81471fb3acff"
/>
2025-10-30 19:24:36 -04:00
damontecres
4945bef008
Cache ffmpeg build (#115)
Speed up PR builds by caching the ffmpeg module build artifact
2025-10-30 14:32:07 -04:00
damontecres
3f7c2ac730
UI Updates & Fixes (#114)
Fixes #113 

- Ensures all audio and subtitle options are shown during playback
- Fix home rows not being at top when going back
- Show error message when background home page refresh fails

Also shows more details for login failures and adds a link to the debug
page (with log info) after multiple login failure attempts. Hopefully
this can help diagnose #112 and #18
2025-10-30 13:41:46 -04:00
damontecres
b1275ae210
Include ffmpeg extensions for some audio formats (#109)
Related to #103

Adds ffmpeg decoder module to support a few extra audio formats such as
AC3, EAC3, DTS, & TrueHD.

This increases the apk size by about 5.4mb (release 17.4mb->22.8mb), but
definitely worth it for the added support.
2025-10-29 20:34:41 -04:00
damontecres
f76556f90e
Fix network on main exception trying to play theme songs (#111)
Fetch the theme song info on the IO thread

This would throw an exception on some devices, but it would be caught
without affecting the app, other than just not playing theme music.
2025-10-29 20:07:00 -04:00
damontecres
cbcae526b4
Don't report playback started until it actually starts (#107)
Wait until playback actually beings before reporting status to the
server. And also ensure progress isn't reported until after reporting
start.
2025-10-29 13:15:17 -04:00
damontecres
576c20edff
Fixes & optimizations to series pages (#106)
Simplifies the process for finding the right season id & episode id
after clicking on an episode. This can also improve loading time for
seasons that have a large number of episodes (hundreds).

Also fixes handling for "unknown" seasons which don't have an
index/season number.
2025-10-29 11:02:21 -04:00
Damontecres
808e379e02
Use neutral color for buffered & remaining seek bar 2025-10-28 21:49:43 -04:00
Damontecres
5682f61b02
Always scroll rows w/ overview to top 2025-10-28 21:47:46 -04:00
damontecres
d578dca0cf
Make watched indicator more clear (#102)
Closes #89

Updates the watched indicator to be more clear. The checkmark is filled
in and there's a slight border to add contrast.

Also this PR makes the location of the watched indicator consistent
between card types and makes child counts always use a semi-transparent
black background.

## Before
<img width="451" height="260" alt="watched_before 2"
src="https://github.com/user-attachments/assets/734d1bb7-4604-4ef1-bb40-fc08403d58fe"
/>

## After
<img width="458" height="272" alt="watched_after 2"
src="https://github.com/user-attachments/assets/d39c4e8e-e483-4843-9083-33209302feb1"
/>
2025-10-28 20:47:17 -04:00
damontecres
06f2c1260d
Add slf4j-simple (#101)
Fixes #99 

While not an actual error, it does look like a transitive dependency of
the Jellyfin Kotlin SDK may log using slf4j, so it would be good to
include an slf4j implementation just in case.
2025-10-28 19:28:54 -04:00
damontecres
f291a0ec04
Move focus from username to password field on enter (#96)
Closes #93
2025-10-28 17:35:26 -04:00
damontecres
3ab9eafc7c
Fix crash when changing seasons & improve error page (#94)
Related to #64 

If an error occurred while querying for a season's episodes, the app
would crash instead of display the error message.

This PR fixes the app crash, but not the underlying query issue. It also
changes the error page to show a button for sending logs to the server
immediately.
2025-10-28 17:04:15 -04:00
damontecres
1db48334ab
Sort & format subtitle download options (#88)
Sorts the subtitle download options by community rating and downloads.

Also abbreviates the download count if it's large (eg 5133->5.1k).
2025-10-28 13:07:30 -04:00
damontecres
af0e853c21
Don't send crash reports as json (#84)
This is a workaround for jellyfin/jellyfin-web#7267 to ensure the client
logs are not valid JSON and can be rendered on the `10.11.x` web UI.

Related to #82
2025-10-27 21:22:44 -04:00
damontecres
f1f6b729aa
Fix several UI focus issues (#81)
Remembers the page position & focused item on both Movie & Series detail
pages

Only loads similar movies & series once so that if you click on one and
go back, it doesn't refresh the entire list

Remember the tab on the Favorite page (if remember tabs is enabled in
settings)
2025-10-27 20:44:04 -04:00