Commit graph

115 commits

Author SHA1 Message Date
damontecres
793f9802e4
Resize & reshape buttons (#380)
Adds a new button implementation which allows for icon buttons to be
circular. Overall the buttons are reduced in size.

Also, the playback controls are are reduced in size, buttons are smaller
and vertical padding is reduced.

![buttons
Large](https://github.com/user-attachments/assets/2211d00f-60a7-4a61-be51-a09046fc7433)
2025-12-06 15:35:17 -05:00
damontecres
ac10517028
Add setting for subtitle outline size (#375)
Adds a settings allowing for adjusting the thickness of unstyled
subtitle outlines, if outline is enabled.

This is applied for both ExoPlayer & MPV

Closes #179

![outline
Large](https://github.com/user-attachments/assets/dfef74a5-a4d4-49db-a8d2-231e46ab151e)

Dev note: the ExoPlayer implementation is bad code, don't write code
like this. It works though
2025-12-05 16:55:46 -05:00
damontecres
887b7b597e
Show people in epsisodes on series overview page (#373)
On the series overview page, show rows below the play/watch/favorite
buttons for cast & crew and guest stars in the episode


![episode_people](https://github.com/user-attachments/assets/2d469369-82d8-4338-9d56-325d4e49addf)
2025-12-04 21:12:53 -05:00
damontecres
8ea84b3efe
Add setting to protect a user profile with a PIN (#356)
Allows for setting a per-user profile PIN that must be entered to switch
to the user. The PIN is a sequence of directional buttons, ie D-Pad
left/right/up/down.

This PIN is per device per user per server. The PIN is stored locally
and not sent nor shared with the server. If you forget your PIN, can
still access the app using server credentials which also removes the
PIN.

Additionally, there is another setting to disable automatically sign in.
When enabled (default) the last user is automatically restored, even if
there is a PIN. If disabled, a server & user must always be selected
when opening the app.

Closes #268
Closes #321
2025-12-04 14:37:27 -05:00
damontecres
a294661520
Support custom mpv.conf (#327)
Part of #235 
Closes #305

Adds a preference for specifying a custom `mpv.conf`

Also adds a preference to toggle between `vo=gpu` and `vo=gpu-next`, see
https://github.com/mpv-player/mpv/wiki/GPU-Next-vs-GPU

There are some caveats:
* Multi-line text entry via a remote is rough
* [Track selection
options](https://mpv.io/manual/stable/#track-selection) may not work as
expected because Wholphin manages this itself
* Bad settings will crash the app hard

Dev note: This rewrites the text field inputs to use the [state based
implementations](https://developer.android.com/develop/ui/compose/text/migrate-state-based)
2025-12-04 13:21:40 -05:00
damontecres
384401a72c
Customize display of library grid pages (#368)
## Details

Adds options to customize how grid pages are displayed. Every grid page
can be individually customized.

The options are saved per user on the device and restored when
navigating back to the page. The pages that support it have a new button
next to the sort/filter buttons and changes are updated live.

The options are:
* Primary or Thumb image
* Aspect ratio
* Show details header w/ backdrop (similar to the one on the home page)
* Number of columns
* Spacing between cards
* Card image content scale (eg Fit, Fill, Crop, etc)

Note: the Genre tabs' grids cannot be customized yet

### Other changes
- Nav drawer now opens over top of content instead of pushing it
- Images for most cards are fetched with actual fill size

### Possible future work
* Customize Genre grids
* Add more image types, banners?
* Add similar customization options to pages with rows, eg Home page and
Recommended tabs

## Example

For example, this is a movie library using thumb images with 8 columns
and reduced spacing. It also shows the details header

## Issues
Closes #186
Related to #72
2025-12-04 12:20:50 -05:00
damontecres
56bf3cb7a0
Optimizes recommended content & image caching (#359)
## Details
This PR contains a number of optimizations

### Images
Updates to request images with maximum sizes

The max sizes are estimates on the maximum number of pixels that will be
actually displayed. This means the server is downscaling large images
which means 1) better quality downscaling and 2) smaller images sent
over the network and cached

This should mean slightly better quality images and more images that can
be cached locally

### Paging
Reduces network calls when fetching paginated data, ie grid pages and
some rows. This PR combines the total record count & first page queries
which slightly reduces total time to load paginated data.

Additionally, on movies/tv show recommended pages, the rows now only
fetch a limited number of items (same as number on home page). While
they previously fetched using pagination, there is an overhead required
to paginate requests, so this is slightly faster.

### Async recommended fetching
On movies/tv show recommended pages, the rows are now fetched completely
separately from each other. Previously, the rows were requested
separtely, but each was only added to the UI in order as each completed.
Now they will add as the data arrived.

Note: Top unwatched TV shows is still very slow on `10.11.x`, see #204


### Image cache

The local, on-disk image cache size is increased from 100mb to 200mb.
Combined with the smaller images, this covers about 1500-2000 poster
images, but will vary by server.

The cache size is now also configurable in advanced settings from 25mb
to 1000mb. Additionally, you can see how much of both the disk and
memory caches are in use.

## Issues
Closes #330 
Related to #120
2025-12-02 16:00:21 -05:00
damontecres
eca3268a7d
Add setting to increase logging verbosity (#354)
Adds a toggle to increase the verbosity of the app logs for
release/production builds

Most users won't need to use this, but it can be helpful when [gathering
app
logs](https://github.com/damontecres/Wholphin/wiki/Gathering-app-logs)
to report an issue.
2025-11-30 17:27:41 -05:00
damontecres
296d7b9226
Setting for subtitle margin & fix subtitle opacity settings (#338)
Adds a subtitle style option to set the margin below unstyled subtitles.
This is roughly the percent of the screen below the subtitles. It
applies to both ExoPlayer & MPV.

Also fixes font & background opacity not being applied in some cases.

Fixes #225
Closes #178
2025-11-28 15:57:11 -05:00
damontecres
5b96be6662
Updates to details pages including videos' stream details display (#279)
## Details

This PR updates the detail pages for Movies & TV Shows.

- Increase backdrop image size & brightness (now matches home page)
- Increase max width for titles
- Decrease max width for detail text
- Switch to using a customized display labels for video, audio, &
subtitle streams

Additional change for movie pages:

- Don't dim movie details text
- Move video stream details below play buttons
- Move first row up higher

### Labels

Instead of using the server provided `DisplayTitle`, create display
labels in-app. In general, this shortens the text without losing
significant detail. It is similar to the official app.

Some of the changes:
- Don't show "SDR", only "HDR"
- Simplify audio channel info, eg "Surround 5.1" => "5.1"
- Show chosen subtitle language
- Show chosen subtitle codec
- Show "(+#)" if there are additional audio or subtitle tracks
- Use gray background slightly tinted by the theme color

## Issues
Closes #239
2025-11-24 15:35:55 -05:00
damontecres
78e7eb421f
Add ability to filter libraries, collection, etc (#308)
Adds a button to filter contents next to the sort button on grid pages

The filters are saved and restored you return to the page. It works with
#278, playing the filtered items in the sorted order.

The drop down menus for both sorting & filtering are updated to closer
match the overall look.

Filters for:
- Played or unplayed
- Favorite or not
- Genres
- Community (star) rating
- Parental rating
- Video type (HD vs SD, etc)
- Release year and/or decade
2025-11-23 10:40:18 -05:00
damontecres
9a3a33fdd3
Use full phases for skip buttons for better translations (#304)
Changes the skip segment button text to use a single phrase instead of
concatenating two strings. This allows correct context when translating.

Follow up from #292
2025-11-22 18:39:58 -05:00
damontecres
df78b42bac
Easier initial setup for server URLs (#300)
Use the server scoring API when adding a new server. This allows just
entering a hostname or IP address without the scheme (`http`/`https`) or
port in most cases.

Note: non-standard ports would still need to be provided

Closes #5 
Closes #296
2025-11-22 12:48:39 -05:00
damontecres
4bd202e013
Add two new themes (#266)
Adds "Bold Blue" and Black/OLED themes

Also tweaks Orange & Green a bit to make the borders stronger and
backgrounds darker/less colored

Related to #91
2025-11-21 15:18:43 -05:00
Damontecres
0d148e2556
Move strings into one file 2025-11-17 14:02:17 -05:00
damontecres
93d82a263d
Show extras for Movies & TV Shows (#224)
## 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
2025-11-15 13:25:44 -05:00
damontecres
2f56a3a114
Add a few more sort options (#223)
Adds parental rating, runtime, & play count sorting options

Closes #198
2025-11-14 19:48:47 -05:00
damontecres
19b712d54b
More favorite tabs & add people to favorites (#210)
Adds Video, Playlists, & People tabs to the favorites page

Also adds ability to add people to favorites via context menu or on
their page

Closes #199
2025-11-13 16:12:42 -05:00
damontecres
58395e9adf
Refactoring switching server or user (#205)
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
2025-11-12 17:44:16 -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
76a46bfeb7
Fix subtitle search crash 2025-11-07 17:49:24 -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
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
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
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
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
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
bafd635402
Add setting to change default content scaling (#77)
Closes #53 #71

Adds an advanced playback setting to set a different default global
content scaling. It can still be changed per playback as well.
2025-10-27 14:25:07 -04:00
damontecres
2667090485
Send crash reports to the server (#65)
Adds ability to send app crash reports to the last connected server. The
app prompts you before sending. There is an advanced settings to disable
this as well.

Additionally, there is an advanced settings button to send the app logs
to the current server.

The resulting reports can be found on the server's web UI under
Dashboard->Logs

If sharing the logs, make sure there's no private information present!
2025-10-26 07:35:42 -04:00
damontecres
a35ecb6570
Fixing a few UI issues (#61)
Gathering a bunch of smaller changes into one PR

### Changes
* Changes the behavior of the "combine continue watching & next up" to
apply only to TV Shows which basically makes the 'Continue Watching'
just movies and 'Next Up' just TV episodes
* Banner card (Series & Home pages) will stretch images to fit
* Close the "more" nav item if navigating to a non-more one (from #60)
* Fix episodes not updating/marked played when returning to series page
after playing multiple episodes
* Don't show the Intro/Outro skip button the Next Up dialog is showing
* Always should black background for playback, even when loading
2025-10-23 22:10:41 -04:00
damontecres
fc4954b561
Add ability to customize the navigation drawer menu (#60)
Adds support for customizing the items listed on the left side
navigation drawer menu. Each item can be toggled on/off in settings.

The hidden ones are still accessible under "More" on the nav drawer,
which only appears if some items are hidden.

Additionally, if any of menu items are hidden, their "latest" content
will not appear on the home page.

The setting is stored per user profile.
2025-10-23 15:57:26 -04:00
damontecres
b8202c06ff
Add favorites page (#55)
Closes #38 

Add a nav drawer link to a new favorites page which shows favorited
Movies, TV Shows, and Episodes.

Also adds a button to movies & tv shows to set/unset favorite status.
2025-10-22 16:49:27 -04:00
damontecres
298016b131
Show similar items on movie & tv show pages (#52)
Adds a row of similar items to the Movie & TV Show details pages
2025-10-21 23:30:18 -04:00
damontecres
8904360fb5
Suport passout protection (#41)
Adds a setting to configure pass out protection which, when enabled,
will stop auto playing next up episodes if the user hasn't interacted
with the app within the configurable 1-3 hours.
2025-10-19 18:21:23 -04:00
damontecres
63baf7f904
Support playing local movie trailers (#36)
Adds support for playing local movie trailers. External trailers, such
as ones on YouTube, are not yet supported.

Also fixes a couple issues with request handlers
2025-10-19 00:15:45 -04:00
damontecres
f220aeee44
Add toggles to override direct playback (#24)
Fixes #10 

Adds toggles to disable direct play of AC3 audio, ASS subtitles, and PGS
subtitles. Also a toggle to force down mixing audio to stereo.

This copies the behavior from the official client. I'm not sure if there
is a way to determine if direct playing AC3 is possible because it can
depend on devices other than the Android TV device such as a sound bar.
So it's up to the user to toggle off support if necessary.

Attribution: This PR uses on [code from the official
client](c775603df4/app/src/main/java/org/jellyfin/androidtv/util/profile/deviceProfile.kt).
2025-10-17 12:46:55 -04:00
Damontecres
d39ed721d5
Rebrand 2025-10-15 15:27:30 -04:00
Damontecres
fc56a2c631
Simple combine resume & next up 2025-10-13 22:13:21 -04:00
Damontecres
a93f183f5f
Handle shuffling playlists 2025-10-13 16:41:12 -04:00
Damontecres
4113f990b2
Fix focus issues & add clear image cache option 2025-10-12 22:31:09 -04:00
Damontecres
cbc680da7d
Add prefs & page for app updates 2025-10-11 18:32:19 -04:00
Damontecres
405faa388e
Initial skip segments implementation 2025-10-09 21:10:43 -04:00
Damontecres
165fd80c0e
Add a few color themes 2025-10-09 19:51:55 -04:00
Damontecres
560e7cc545
Add max bitrate preference 2025-10-08 21:37:10 -04:00
Damontecres
2212e32c53
Various UI/UX tweaks 2025-10-07 21:14:33 -04:00
Damontecres
88038bfcfd
Better tab UI & remember tab setting 2025-10-07 16:22:28 -04:00