Commit graph

1274 commits

Author SHA1 Message Date
Damontecres
87a109c6b6
Add option for click to play continue watching/next up rows (#1405)
## Description
Adds an option under Settings->Customize home page->Settings, "Continue
watching/Next up click behavior":
- When disabled (the default), clicking goes to the item's details page
- When enabled, clicking starts playback for the item from its resume
position

This only applies to the continue watching, next up, or combined rows.
All other rows go to the details page no matter what.

### Related issues
Closes #1007

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-19 14:11:40 -04:00
Damontecres
59ccce9d54
Fix small UI issue with long stream labels (#1388)
## Description
Fixes a small UI glitch when the subtitle label is too long, it would
slightly increase the high of the labels. This is especially noticeable
on series details if some episodes have the long label and some don't
because the episode row will bounce up and down a few pixels.

Also moves the labels closer together and changes "Disabled" to "None"
when subtitles are turned off.

### Related issues
None

### Testing
Emulator & compose previews

## Screenshots
### Before
The subtitle label is slightly taller than the others
<img width="528" height="36" alt="image"
src="https://github.com/user-attachments/assets/32d322bc-11cc-4238-840c-03ae41b069d3"
/>


### After
The ellipse doesn't look great, but there's limited space and looks
better than being cut off.
<img width="510" height="37" alt="image"
src="https://github.com/user-attachments/assets/40af707c-3121-40c0-a978-60781d9704d6"
/>


## AI or LLM usage
None
2026-05-16 11:35:21 -04:00
Damontecres
f4bdb8446e
View more from home page & recommended rows (#1392)
## Description
Adds a card at the end of the rows on the home page and recommended tabs
to "View More" which goes to a grid of the items in the row.

The grid will endlessly scroll all of the available items except for a
few cases where the first 1000 are shown because the server does not
(yet) support pagination: genres, studios, people (added in v12), and
latest grouped tv shows.

Dev notes: This PR also rewrites the `RecommendedViewModel` and
consolidates the previous multiple view models into one.

### Related issues
Closes #1371
Closes #1035
Similar to #1198

### Testing
Emulator

## Screenshots
N/A, see #1198

## AI or LLM usage
None
2026-05-16 11:35:11 -04:00
Justin Caveda
98ffaf51ac
Search page improvements (#709)
## Description

Improves how search results are displayed:

- Reorders search categories to Movies → TV Shows → Episodes →
Collections, surfacing the most commonly searched content types at the
top.
- Adds a new "Combined search results" preference in Advanced settings →
Search. When enabled, shows all results in a single list instead of
separate categories.
- When Seerr is active, adds Library/Discover tabs to switch between
local library results and Seerr discovery results.
- Hides empty result categories instead of showing "No results"
placeholders.

### Screenshots

<img width="1935" height="1100" alt="Screenshot_20260116_113656"
src="https://github.com/user-attachments/assets/1e29aa3a-3ba2-4f86-ab61-fed683490474"
/>

<img width="1934" height="1095" alt="image"
src="https://github.com/user-attachments/assets/8b93fa38-d4c9-4e72-a997-caa82b4949f0"
/>

<img width="1921" height="1094" alt="image"
src="https://github.com/user-attachments/assets/82aed1a5-810c-413f-a266-6d78490a1534"
/>

### AI/LLM usage
Code auditing and PR description drafting with Claude Code. Also used
Claude Code for the regex.
2026-05-13 10:02:33 -04:00
Damontecres
f364ef9708
Release v0.6.4 2026-05-12 13:13:19 -04:00
Damontecres
1614ef7158
Translations 2026-05-11 (#1374)
Update translations as of 2025-05-11

Thank you to all of the contributors!
2026-05-12 13:11:33 -04:00
dudecuda
96f94feac2
libass-android lifecycle issue: Fixes #1049 (much of it) (#1362)
Fixed a bug with libass integration where the background thread
responsible for drawing the ASS subtitles (AssRenderThread) has been
shut down, but ExoPlayer is still actively running and trying to push
video time updates to it. Added fallback for software rendering on older
android versions that can have broken OpenGl implementation.This should
address much of issue #1049.

## Description
Essentially, debug logs showed repeated:
3145 3920 W MessageQueue: Handler (android.os.Handler) {4ba3c72} sending
message to a Handler on a dead thread
3145 3920 W MessageQueue: java.lang.IllegalStateException: Handler
(android.os.Handler) {4ba3c72} sending message to a Handler on a dead
thread

Essentially this was a lifecycle bug where the libass-android thread was
created, but was detaching from the window, shutting down when it does
so. It was still registered to ExoPlayer, but since there was no thread
to send to, it just repeatedly kept failing, never spinning back up to
display any subtitles. It seems just about any ui change can cause this
detachment, but in this case it seems it was right from the moment the
loading spinner shows up (making libass-android fail before video starts
playing).

Fixed by ensuring TextureView's visibility wasn't changed to invisible,
which ends up destroying the canvas that libass-android attaches itself
to. Hid the canvas using graphicsLayer (so the user can't see it, but
it's still alive and active). Also changed resizing logic to prevent
Android from seeing a 0x0 TextureView as "destroyed".

Since I discovered in testing how terribly my TV's OpenGl was handling
this, I added an additional fallback for Android versions < 9. Older
TV's can fallback to software rendering when using libass-android.

### Related issues
#### Issue #1049 : 
**Fixes:**
- the issue where libass-android (when enabled) fails to load any
subtitles in ExoPlayer DirectPlay.

**Not Fixed from issue #1049 :**
- Issues around accented characters.
- Any issues surrounding MPV (I have no way of testing, MPV never worked
on any player for me)
- Fallback mode (libass-android disabled) where subtitles aren't
rendering properly

**Added:**
- While testing, discovered older Android versions have trouble with
reliable OpenGl rendering. Thus I added a fallback for older Android
versions to use libass-android in software rendering mode
(AssRenderType.OVERLAY_CANVAS)

### Testing
- Tested and confirmed flawlessly to work on Android 9 TCL Smart TV
(AssRenderType.OVERLAY_CANVAS)
- Tested on Android 14 Chromecast (AssRenderType.OVERLAY_OPEN_GL).
Slightly less perfect (font not always a match, less fancy shadows) but
most ASS/SSA effects work well. May be worth testing other AssRenderType
options to compare features and performance on other machines.

## AI or LLM usage
Google Gemini Pro in tracing down the cause and fine-tuning the fixes.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-05-11 17:49:08 -04:00
Damontecres
8b9b0ddec8
Fix two home row focus bugs (#1376)
## Description
1. Fixes when moving from nav drawer to home page content, focus would
sometimes move up a row
2. Fixes when moving up/down between rows, focus would sometimes move to
the later card (usually the last visible)

The second above is fixed by downgrading `tv-material` to
`1.0.1-alpha01`. Switching to
[`1.0.1-beta01`](https://developer.android.com/jetpack/androidx/releases/tv#tv-material-1.1.0-beta01)
or newer causes the bug. Not clear if its a bug in the library or
Wholphin though.

### Related issues
Fixes #1359

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-11 17:48:38 -04:00
Damontecres
4928c1156d
Fix cleaning up APKs on debug builds (#1373)
## Description
Directly use "Wholphin" when searching for older APKs to clean up.

On debug builds, the `app_name` string is "Wholphin (Debug)" but the APK
file names is always "Wholphin.apk", so I think the debug build won't
clean them up.

### Related issues
Fixes #1368

### Testing
Testing downloading a few times without this change, applied the change,
and clean up worked

## Screenshots
N/A

## AI or LLM usage
None
2026-05-11 11:12:05 -04:00
tal_sarid
9c41a7200e
Translated using Weblate (Hebrew)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
tal_sarid
278dbe3774
Translated using Weblate (Hebrew)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
tal_sarid
af39b9f596
Translated using Weblate (Hebrew)
Currently translated at 99.2% (548 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
Codeberg Translate
21fd8e0a14
Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/
2026-05-11 14:27:12 +00:00
tal_sarid
aab0b62e83
Translated using Weblate (Hebrew)
Currently translated at 46.5% (257 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:12 +00:00
opakholis
c13d2f4129
Translated using Weblate (Indonesian)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-05-11 14:27:12 +00:00
idezentas
1bf72656c8
Translated using Weblate (Turkish)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-05-11 14:27:12 +00:00
tal_sarid
47f728f8b1
Translated using Weblate (Hebrew)
Currently translated at 44.0% (243 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:11 +00:00
tal_sarid
73cb8c60fe
Translated using Weblate (Hebrew)
Currently translated at 30.6% (169 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/he/
2026-05-11 14:27:11 +00:00
RafaelSoaresP
74698d2d4e
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt_BR/
2026-05-11 14:27:11 +00:00
arcker95
fb3f738f50
Translated using Weblate (Italian)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-05-11 14:27:11 +00:00
TheMatrixan
3627d29d33
Translated using Weblate (Polish)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-05-11 14:27:11 +00:00
American_Jesus
7d79bf3d3e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2026-05-11 14:27:11 +00:00
Priit Jõerüüt
e8b3203817
Translated using Weblate (Estonian)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/
2026-05-11 14:27:11 +00:00
North-DaCoder
95303ac2db
Translated using Weblate (German)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-05-11 14:27:11 +00:00
Outbreak2096
80c4b9e7b7
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-05-11 14:27:11 +00:00
lednurb
75212e7148
Translated using Weblate (Dutch)
Currently translated at 89.6% (495 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-05-11 14:27:11 +00:00
SimonHung
cd058b2f37
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-05-11 14:27:11 +00:00
danpergal84
251b659ad3
Translated using Weblate (Spanish)
Currently translated at 100.0% (552 of 552 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-05-11 14:27:11 +00:00
TheMatrixan
c66b41d90d
Translated using Weblate (Polish)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-05-11 14:27:11 +00:00
MrDog
04f7f1ac79
Translated using Weblate (Slovenian)
Currently translated at 86.5% (476 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sl/
2026-05-11 14:27:11 +00:00
randomsoftware
9767e3297e
Translated using Weblate (Arabic)
Currently translated at 29.6% (163 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ar/
2026-05-11 14:27:11 +00:00
SimonHung
b0db3ce483
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-05-11 14:27:11 +00:00
MrDog
dbe788e7e9
Translated using Weblate (Slovenian)
Currently translated at 42.3% (233 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sl/
2026-05-11 14:27:11 +00:00
RafaelSoaresP
aaca10fbea
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt_BR/
2026-05-11 14:27:11 +00:00
Outbreak2096
9afc07e77c
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-05-11 14:27:11 +00:00
TheMatrixan
8b92fceeae
Translated using Weblate (Polish)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-05-11 14:27:11 +00:00
n8llcaster
d7cbc1c926
Translated using Weblate (Slovak)
Currently translated at 94.5% (520 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sk/
2026-05-11 14:27:11 +00:00
American_Jesus
2cb44090f6
Translated using Weblate (Portuguese)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2026-05-11 14:27:11 +00:00
North-DaCoder
235a782621
Translated using Weblate (German)
Currently translated at 100.0% (550 of 550 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-05-11 14:27:11 +00:00
renovate[bot]
9ddce95e57
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.11.0 (#1299) 2026-05-11 10:27:07 -04:00
renovate[bot]
59af13d29e
Update Dependencies to v14.2.0 (#1335) 2026-05-11 10:26:43 -04:00
Brian Gunter
08db2b0efc
Accept digits in the PIN field in addition to l/r/u/d (#1330)
## Description
This enhances the PIN entry system by allowing users to input digits
using the numbers 0-9. This is useful for those using a keyboard or
universal remote with a number pad.

### Testing
Tested on Nvidia Shield Pro and Onn 4k Pro

## Screenshots
<img width="3840" height="2160" alt="Screenshot_20260429_083041"
src="https://github.com/user-attachments/assets/9e603bda-f1d3-4268-a04c-b077297fdfac"
/>

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-05-11 10:23:02 -04:00
Damontecres
cb46aa4159
Rearrange playback controller buttons (#1366)
## Description
- Moves the audio track selection out of the menu as a button
- Combines the settings & more buttons into one dialog

All functionality works the same, this is just UI changes

### Related issues
Related to #528

### Testing
Emulator, it's just UI changes

## Screenshots

### Before
<img width="1280" height="720" alt="controller_before Large"
src="https://github.com/user-attachments/assets/40430408-2108-4eda-9f05-d5f8c22a8b01"
/>

### After
<img width="1280" height="720" alt="controller_update Large"
src="https://github.com/user-attachments/assets/d2623a7c-9c05-4b0f-ae57-fed1c37e6cbc"
/>


## AI or LLM usage
None
2026-05-11 10:22:27 -04:00
Damontecres
df71baccea
Fix remove series from next up (#1369)
## Description
Fixes the "Remove series from next up" context menu item not working at
all.

Looks like after the refactoring in #1302, I missed [adding back the
function
call](https://github.com/damontecres/Wholphin/pull/1302/changes#diff-440f67bfe7be2011418c2f90e3a8ae2af05795a5161edd1a8bda14bc3b962cdcL175).

### Related issues
Fixes #1363

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-10 18:00:09 -04:00
Damontecres
dbd17597b2
Show public users when switching users (#1358)
## Description
Show the public users (ie "Hide this user from login screens" is
unchecked) if the server has any. Previously, all users had to be
explicitly added by username or quick connect.

This PR also refactors the server & user pages to use modern state flows
and deletes some unused code.

### Related issues
Closes #600

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-10 08:50:08 -04:00
Damontecres
b23d30f94b
Slightly optimize subtitles view & workaround possible crash (#1334)
## Description
Instead of adding/removing the `SubtitleView` from composition
sometimes, instead toggle its visibility. This is technically slightly
more efficient. There's also a couple other minor tweaks that make the
subtitles style a little more efficient.

This should also help prevent crash caused by possible a race condition
in libass-android
(https://github.com/peerless2012/libass-android/issues/75).

### Related issues
I think this fixes #1322

### Testing
Emulator mostly

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 18:29:26 -04:00
Damontecres
45ab0713a9
Update AGP, Gradle, & other third party dependencies (#1356)
## Description
Just a lot of dependency bumps. There are no user facing changes.

Switches to the new Android gradle DSL now that the protobuf plugin is
compatible.

### Related issues
None

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 18:08:29 -04:00
Damontecres
8107a82a6b
Fixes/improves showing delete button (#1353)
## Description
Fixes the delete button not showing on the movie detail page. Also fixes
some edge cases where button may not appear when toggling on the media
management setting.

Adds the delete button to album & artist pages. Previously, it was only
in the context menu.

### Related issues
Fixes #1343

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 11:49:27 -04:00
Damontecres
461bad1ddd
Fix bug where changing subtitles during playback doesn't work (#1352)
## Description
Fixes an issue when changing subtitles during playback if you had
previously explicitly chosen subtitles for that item but not chosen an
audio track.

### Related issues
I don't think there is a specific issue for this

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-05-06 11:49:13 -04:00
Damontecres
6afcfb469b
Enable large heap (#1337)
## Description
This PR simply enables the `largeHeap` flag to request more memory from
the OS.

I am a bit embarrassed that I haven't added this before now, but I had
read that using `largeHeap` was a bandaid, not a solution. So I assumed
Wholphin was doing something incorrect memory-wise. But after crawling
through many, many heap dumps to analyze Wholphin's memory usage, and
after further research, enabling this does make sense for handling high
bitrate, high resolution videos. Furthermore, many other Jellyfin
clients and other video apps like Plex and Prime Video have this
enabled.

So since I am pretty confident that Wholphin doesn't have any memory
leaks, I feel good about enabling this.

### Related issues
I believe this will fix many of the bug reports about crashes during 4K
playback, but it's not a cure-all since it is up the device & OS to
allocate the max memory.
Fixes #333 
Fixes #826
Fixes #1189

### Testing
Shield 2019, Fire 4k Max

## Screenshots
N/A

## AI or LLM usage
None
2026-05-01 19:12:23 -04:00