## Description
### Bug fixes
- Fixes a race condition crash when configuring subtitle styling before
libmpv is initialized
- Save the clicked item position on grid pages (#1428 & #1462)
- Fix querying the server every 3 seconds for transcode reason if the
video is direct playing
### UI changes
- Makes the title on grid pages slightly smaller
- Makes adjustments to the song list item on now playing so that no
space is used if there's no artist
- Use settings icon instead of triple dots on now playing page
### Related issues
See above
### Testing
Emulator, nvidia shield & google streamer
## Screenshots
### Song list item
Before & after
<img width="199" height="119" alt="image"
src="https://github.com/user-attachments/assets/7fd3636a-d1e4-4b1f-8379-8599068d6309"
/>
## AI or LLM usage
None
## Description
Adds a few enhancements to home page customization:
- Add option to combined continue watching & next up to split it
- Add option to continue watching and next up rows to combine them
- Add option for sorting playlist or collections
- Show suggestions (recently updated) when searching for a playlist or
collection to add
- Better handling for loading vs unsupported types for suggestions
Also, the old toggle for combining continue watching & next up in
advanced settings is removed. Now by default the rows will be combined
unless changed in the home page customization settings.
### Related issues
Closes#340Closes#1383Closes#1350
### Testing
Just on the emulator so far
## Screenshots
N/A
## AI or LLM usage
None
## Description
- Fixes a bug introduced in #1453 which broke the favorite page
- Follow up to #1428 to refactor the collection folder code to hoist
state up another level
- Fixes resuming playback from series details play button
### Related issues
Fixes#1313Fixes#1461
Follow up to #1453 & #1428
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Fixes an issue where local trailers wouldn't play (or show in the queue)
if Cinema Mode is enabled and the server has a preroll/intro.
Also fix building the playback queue when "Show next up" is "Never". The
queue is shown, but not automatically played and next item dialog popup
is never shown. But to indicate playback is over, the controller show.
### Related issues
Fixes#1348Fixes#1303
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Prefer using thumb image types for movies when adding to Watch Next
android OS channel. The primary/poster image will be used if there is no
thumb.
### Related issues
Fixes#1425Fixes#1403
### Testing
Emulator, verified a movie was showing its primary image, then ran this
PR
## Screenshots
N/A
## AI or LLM usage
None
## Description
- Fix crash on license info page for release builds (#1437)
- Fix configuring which ratings to show by default (#1407)
- When re-ordering nav drawer items, ensure the one that was just moved
is always visible (#886 )
- Fix app losing focus when switching between list layout types (#1428)
- If the version doesn't have any additional commits, don't show the git
hash info (ie `v0.6.4-0-gabc1234` shows as `v0.6.4`)
- Adds tests for Version comparisons & toString
### Related issues
See above
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Refactors all usages of `LiveData` into flows in keeping with best
practices. This also includes refactoring several `ViewModel`s to
combine multiple `LiveData` into a new single `StateFlow`.
There are no user facing changes
### Related issues
None
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Adds an option to display libraries in a list layout
The list can be regular showing 6-7 items or compact showing ~11 items.
Can also toggle showing the details on the left side. Movies, tv shows,
& albums have type-specific layouts and other types like videos, music
videos, etc use a generic one similar to movies.
Another change is that showing the backdrop is now a separate toggle
from showing details for both grid & list layouts.
Sorting, filtering, & jumping to a letter all work as expected!
### Related issues
Closes#1101
### Testing
Emulator mostly
## Screenshots
<details><summary>Click for screenshots</summary>
<p>
### TV shows list
<img width="1280" height="720" alt="series_list Large"
src="https://github.com/user-attachments/assets/f8f9b801-e537-4cdf-b992-f2f1259457fa"
/>
### TV shows compact list
<img width="1280" height="720" alt="series_list_compact Large"
src="https://github.com/user-attachments/assets/747e5929-90d7-4d59-a179-bc3210ac01b9"
/>
### Movie list
<img width="1280" height="720" alt="movie_list Large"
src="https://github.com/user-attachments/assets/ee3e1c6c-fb25-438a-a11e-522d30fbaabf"
/>
### Album list
<img width="1280" height="720" alt="music_list Large"
src="https://github.com/user-attachments/assets/9b1f59ec-c237-4ab2-9b51-6cb519f5327c"
/>
</p>
</details>
## AI or LLM usage
None
## Description
Shows a loading indicator and slightly dim the screen when playback is
buffering.
Showing the indicator is delayed in case the buffering doesn't take very
long.
Dev note: the changes to `MpvPlayer` need to be ported to
wholphin-extensions as well.
### Related issues
Closes#1411
### Testing
Emulator
## Screenshots
[buffering.webm](https://github.com/user-attachments/assets/dd848696-d6de-4f68-94e4-901bb5db1185)
## AI or LLM usage
None
## Description
Adds a setting to configure the app's language/locale. It is configured
per user. This settings has no impact on audio or subtitles language
choices.
Only languages Wholphin has translations for can be used. If you would
like to contribute new translations, check out
https://translate.codeberg.org/projects/wholphin/!
Dev notes: This doesn't exactly follow Android's recommendations because
the [guidelines are for
per-app](https://developer.android.com/guide/topics/resources/app-languages)
and not users within the app.
### Related issues
Closes#513Closes#669
### Testing
- Emulator API 34
- Nvidia shield API 30
- Fire TV OS 7 API 28
## Screenshots
<img width="1280" height="720" alt="language Large"
src="https://github.com/user-attachments/assets/bf1c0962-8a36-4012-aed9-eab564fc1114"
/>
## AI or LLM usage
None
## Description
r8 optimizations seemingly cause guava's LocalCache to throw an
AssertationError when evicting an entry. This PR adds a broad keep rule
for the cache package.
The crash is reproducible on a release build with a TV Season that has
25+ episodes with people in them and scrolling through the episodes. It
will crash when focusing on the ~25th episode.
### Related issues
Related to #1437
### Testing
Emulator & nvidia shield
## Screenshots
N/A
## AI or LLM usage
None
## Description
Enables minify & resource shrinking for release builds. This should
improve overall performance a bit. It also decreases the apk size by
~15%.
Also updates AGP
### Related issues
N/A
### Testing
Emulator, but needs more testing before a final release
## Screenshots
N/A
## AI or LLM usage
None
## Description
There was an issue if when opening a page with theme music and quickly
changing pages, usually playback, the theme music might play on the new
page. This is because the call to stop the theme music could potentially
happen _before_ the song was loaded or had started playing.
This PR fixes this race condition by tracking the job that's fetching
the theme song and by adding a mutex to ensure the play function
completes before the stop function can begin.
### Related issues
Fixes#938
### Testing
Emulator w/ fake delay to increase the odds of the issue occurring
## Screenshots
N/A
## AI or LLM usage
None
## Description
Don't show future content (episodes, etc) on recently released rows in
recommended tabs or home page rows.
### Related issues
Closes#262
Replaces #1262
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
The original PR #1262 author used claude. Some of that code that was
retained in this PR was reviewed & tested.
---------
Co-authored-by: ADT95 <turner7@outlook.com>
## Description
This should fix the issue where suggestions would sometimes get stuck
loading. My best guess is that they were getting stuck because the app
thought it was still loading, even though the background job was just
waiting.
This should fix that by making each library kick off its own suggestions
job when needed.
### Related issues
Fixes#1065
### Testing
Emulator and nvidia shield
## Screenshots
N/A no ui changes
## AI or LLM usage
Used codex to help diagnosis the bug. Also added unit tests and more
debug logging for the suggestions system using ai. Wrote the fix myself.
---------
Co-authored-by: Damontecres <damontecres@gmail.com>
## Description
Fixes showing the discover search result row
Also adds a Search tab to the discover page. You can already search
discover results from the regular search page, so the new tab is just
for convenience.
### Related issues
Related to #709
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
- Fix always showing the user list on app cold start even with auto sign
in enabled
- Ignore unknown JSON keys when restoring view options or filters from
the database making them more backward compatible for devs switching
branches
- Don't show a view more card on collection detail page rows, it's not
necessary
### Related issues
First bug was introduced by #1367
### Testing
Emulator
## Screenshots
N/A
## AI or LLM usage
None
## Description
Adds the standard extras row to the album detail page if there are any
extras
I also tried to get Jellyfin to recognize artist extras, but it did not
work, so this just adds extras for albums
### Related issues
Closes#1409
### Testing
Emulator
## Screenshots
N/A, same extras row
## AI or LLM usage
None
## Description
Adds a "Show voice search button" toggle to the search page's view
options dialog, alongside the existing "Combined search results" toggle.
When disabled, the voice search button is hidden from the search row,
taking it out of the D-pad focus path.
The new field `show_voice_search_button` is added to `SearchPreferences`
(default `true`). The serializer applies the default for new installs,
and a new entry in `AppUpgradeHandler` sets it to `true` for users
upgrading from earlier versions so existing behaviour is preserved.
### Related issues
Discussion: https://github.com/damontecres/Wholphin/discussions/1419
### Testing
Tested on an Android TV (1080p) AVD running API 34:
- Toggle on (default): voice search button visible at the top of the
search row.
- Toggle off: button disappears; only the search text field remains.
- Toggle back on: button reappears.
- Upgrade handler verified by spoofing `version.current.name` to an
older value in SharedPreferences and force-restarting the app; after
`needUpgrade()` fired, the toggle was on as expected.
The upgrade-handler entry currently uses `0.6.4-8-g0` (based on current
`main` HEAD); happy to bump this if you'd prefer a different target
version on merge.
## Screenshots
<img width="1920" height="1080" alt="pr1-01-home"
src="https://github.com/user-attachments/assets/0d5cdad0-5547-44f3-b4a5-5d15f71dddc0"
/>
<img width="1920" height="1080" alt="pr1-02-toggled-off"
src="https://github.com/user-attachments/assets/1e574229-0838-487d-b943-83d394a8193d"
/>
## AI or LLM usage
I used Claude to scaffold the proto/serializer/upgrade-handler/dialog
changes, mirroring the existing `combined_search_results` pattern. I
reviewed each diff before committing and tested the toggle manually on
the emulator, including the upgrade-handler simulation.
---------
Co-authored-by: Damontecres <damontecres@gmail.com>
Fixes#1396.
The else branch of `when (nextState)` in PlaybackController added a 32dp
Spacer that left empty space below the controls when there were no
chapters or queue.
Possible follow-up: Pentaphon's idea of a "similar items" row in that
empty slot. Happy to put up a separate PR if useful.
## Testing
Verified on an Android TV (1080p) AVD running API 34 by playing a movie
with no chapters and no next-up item. With the fix, the bottom of the
control overlay sits the expected 8dp from the screen edge (the existing
parent padding). Also rebuilt without the fix and compared back-to-back
to confirm the Spacer was the cause.
The CHAPTERS and QUEUE branches were not modified.
## Screenshot
<img width="1920" height="1080" alt="case1-controls"
src="https://github.com/user-attachments/assets/18f50a87-a373-4f48-a9d4-f3c2a5cb2c00"
/>
## AI or LLM usage
I used Claude to help identify the file containing the bug and to
suggest the fix. I reviewed the diff before committing.
## Description
Adds a setting, Settings->Advanced->"Customize which ratings to
display", which allows for toggling parental, community, or critic
ratings to be displayed in the quick details.
This doesn't apply to discover yet.
### Related issues
Related to #1020
### Testing
Emulator
## Screenshots
### Just community rating
<img width="1280" height="720" alt="ratings Large"
src="https://github.com/user-attachments/assets/d6f9ad8a-6cc5-4680-9d2f-66d16a44b41e"
/>
## AI or LLM usage
None
## Description
This PR adds a new method of protecting a user profile when switching to
it: server login. When enabled, switching to the user requires
authenticating with the server again via Quick Connect or username &
password. This is basically the same as the official client.
### Related issues
Closes#321
Related to #1330 - might cause merge conflicts
Related to #1287 - definitely causes merge conflicts
### Testing
Emulator with various uses cases including auto sign-in, switching
between server login & PIN protection, and removing the protection
## Screenshots
N/A, the login looks identical as adding a new user
## AI or LLM usage
None
## Description
This PR has some UI/UX updates for live tv epg/guide.
- Show program images, if provided by the EPG source
- Show channel name under logo
- Show & set favorite channels
- Adjusts the header to match the rest of the app (font, padding, etc)
Additionally, navigation around the guide has been rewritten. It is more
efficient and feels a bit more smooth to scroll around.
### Related issues
Closes#529
### Testing
Emulator mostly
## Screenshots
<img width="1280" height="720" alt="epg_new Large"
src="https://github.com/user-attachments/assets/c53c01be-9209-4c59-82cb-47f268811d3e"
/>
## AI or LLM usage
None