## Description
Fix applying the subtitle outline width in ExoPlayer for release builds
The outline width field isn't public, so reflection is used to bypass
and modify it. Since proguard/r8 renames all of the classes and fields,
this meant the field was no longer found. The fix is to have proguard
preserve the necessary field names.
### Related issues
Fixes#1681
### Testing
Emulator w/ release build
## Screenshots
N/a
## AI or LLM usage
None
## Description
Updates the logic for selecting tracks which should fix several edge
cases
The new logic groups track types together and then applying the user's
selection to the actual tracks in the file. For example, if the user
choosing the audio track which the server reports as absolute `index=2`
(eg the _third_ track of any type in the file) and audio `index=1` (eg
the _second audio_ track in the file), then the track selection logic
will use the _second audio_ track in the direct played file (after
accounting for id sorting).
Some other changes:
- If direct playing and an unsupported track is selected, the app will
now fall back to transcoding
- If the correct audio/subtitle tracks are not found, the app will now
fall back to transcoding instead of blocking any track change attempts
### TODO
Not necessarily in this PR, but some things need further investigation:
- Handling external audio tracks
- Why does ExoPlayer order the tracks differently sometimes, see
[example
here](https://github.com/damontecres/Wholphin/issues/791#issuecomment-4836470813)
where `0:3` is _after_ `0:4`, but the `MediaSourceInfo` lists them `0:3`
then `0:4`
### Related issues
Maybe fixes#791
Should fix
https://github.com/damontecres/Wholphin/issues/1005#issuecomment-4085440175
Related to the parent issue, #1475
Replaces #845
### Testing
Unit tests mostly, some basic tests on emulator
Needs more "real world" testing
#### Try it out?
You can try out this build by following the [instructions
here](https://github.com/damontecres/Wholphin/releases/tag/develop-track-selection).
If you do, please report your results in this PR!
## Screenshots
N/A
## AI or LLM usage
None
## Description
Adds an experimental setting to prefer transcoding audio with more than
2 channels to AC3. Stereo audio does not transcode.
This is basically a workaround for HDMI ARC (not eARC) or optical audio
devices because instead of 2 uncompressed PCM channels, 6 AC3 channels
(ie 5.1) is possible.
An downside of enabling this is that embedded subtitles be burned in
causing a video transcode as well.
### Related issues
Fixes#255
Incorporates some code from #1410
### Testing
Just on the emulator so far to observe if the settings trigger the
transcode or not
## Screenshots
N/A
## AI or LLM usage
None
---------
Co-authored-by: darkflame91 <darkflame91@gmail.com>
## Description
Start testing against Seerr `3.3.0` which has been out for over a month.
The only significant change is that the new "blocklisted" status is
added, but it uses the same code as the previous "deleted" status. So
generally, Seerr `3.2.0` will still work.
This starts work on supporting Seerr's blocklist which, unfortunately,
is expected to be enforced on the client side. For now, blocklisted
items still show, but the request button is disabled and shows
"Unavailable" instead.
Finally, some Seerr parent permissions I missed in #1631 are added.
### Related issues
Related to #1626
### Testing
Emulator testing
## Screenshots
N/A
## AI or LLM usage
None
## Description
Instead of using English-only duration format (e.g. `HHh MMm SSs`) in
various places, I've added a format function that is based on several
new localized resources keys.
That includes:
1. Media runtime in Item view
2. Time remaining in Item view
3. End time in Player view
4. Time passed and time remained in Player view
### Related issues
None
### Testing
I installed the app on my Google TV Streamer, switched to my language,
browsed all item views that I could think of to see that the duration
labels are all localized in my language. I didn't commit those strings,
I will do it through the Weblate after it will get merged. I also played
a few items and saw that the labels there are localized as well.
## Screenshots
It looks the same in English as before, currently no other language has
custom resources for it yet.
## AI or LLM usage
Used Claude Sonnet to detect places that I missed that are related to
this localization change. Also it helped me to get access to my format
function from various places in the code.
---------
Co-authored-by: Damontecres <damontecres@gmail.com>
## Description
Updates several dependencies and cleans up some naming and duplicates.
There are no user facing changes in this PR
### Dev notes
There is a workaround needed to upgrade to Kotlin 2.4.0 to avoid
https://github.com/google/ksp/issues/2964
There are a few more dependencies, but they require increasing the
target SDK to 37, but I don't want to do that yet. API 37 requires
requesting a [new permission for local network
access](https://developer.android.com/privacy-and-security/local-network-permission).
Since that is a critical requirement for Wholphin/Jellyfin, I need to
spend more time reviewing the dev guide to make sure it's handled
correctly.
### Related issues
Replaces #1593
Replaces #1512
Replaces #1465
Replaces part of #1446
### Testing
Unit tests and quick emulator run
## Screenshots
N/A
## AI or LLM usage
None
## Description
Add some improvements related to life cycle handling whenever the app is
resumed:
- Refreshing the server-side user config
- Refreshing the home page automatically
Also 401/403 errors accessing recording folders will be skipped since
this typically means the user lost access while the app was running.
Refreshing the server-side user config (above) will also help with this.
Finally, there's some general code clean up in `MainActivity` to move
non-UI related code out of Compose.
### Related issues
Closes#1647
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
This is a targeting fix for a very specific bug: on Fire TV 4k Max
(AFTKRT), and possibly others but untested, ExoPlayer can't play an
HLS/TS stream that has 8-channel (7.1) EAC3 audio. Direct play is not
affected (7.1 EAC3 plays fine), and fewer channels work fine (i.e. 5.1
EAC3) even in an HLS/TS wrapper.
This bug + device is tracked in KnownDefects. If more models are tested
and found to have the same issue, they can be added to the list. Top
candidates are probably AFTKA and AFTKM since they are also in the
models with HEVC DoVi/HDR10+ playback issues and so probably have
similar underlying limitations, but I don't have those devices to test.
The fix is to first allow the app to make a playback request to the
server and receive the stream info Jellyfin has decided to send. Then it
evaluates the settings and stream for the following:
- Playback is using ExoPlayer
- Device is in the modelsWithEac3HlsPassthroughBug list (currently only
AFTKRT)
- Stream is not direct play
- Stream is HLS with MPEG-TS container
- Audio is 8-channel EAC3
We have to use a two-request fix because we don't know what Jellyfin is
going to decide for the stream until we receive it. That way normal
playable streams aren't getting overwritten by the fix when they
shouldn't be. So the only streams that get the two request path applied
is the exact fix for this bug.
To apply post-playback-info fixes (including this one) a helper file was
created PostPlaybackInfoFixes. In the future, if there are more bugs
that can only be determined after the decided stream info is received,
they can be added here. This keeps things logical and maintainable.
### Related issues
The bug was able to be reproduced on multiple items with this exact
scenario by simply playing back the item (making sure ExoPlayer is set
as the default player in settings).
### Testing
Tested on the target device: Amazon Fire TV 4k Max (2nd Gen), model
AFTKRT.
The following media was tested:
- ExoPlayer, multiple titles with HEVC, EAC3 7.1 copied into HLS/TS (all
failed, only processing 1-2fps)
- Direct play of the same titles (works)
- EAC3 5.1, HLS, MPEG-TS (works)
- MPV with failing titles (works)
The following device and settings were tested and had no effect on the
above media results, ruling out external connections and settings:
- HDMI to an LG TV, both connected to a soundbar via ARC, and
disconnected using internal speakers
- HDMI to a Dell computer monitor
- Fire TV Settings > Display & Sound > Audio > Surround Sound > all 4
settings tested (Best Available, PCM, Dolby Digital Plus, Dolby Digital)
## AI or LLM usage
Codex was used to debug the issue, create the initial change, and do
iterative testing on the device to narrow the scope. The code was then
carefully reviewed and I made structural decisions so everything fits
well within the project's established conventions, removing bloat, added
comments and kept it targeted, clear and maintainable.