Commit graph

1060 commits

Author SHA1 Message Date
jbrek
7f1ccc6146
Translated using Weblate (Thai)
Currently translated at 98.8% (524 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/th/
2026-04-10 18:56:48 +00:00
jbrek
278d2cc3e6
Translated using Weblate (Thai)
Currently translated at 29.2% (155 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/th/
2026-04-10 18:56:48 +00:00
opakholis
ac0e42320f
Translated using Weblate (Indonesian)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-04-10 18:56:48 +00:00
jbrek
9e2df5660a
Added translation using Weblate (Thai) 2026-04-10 18:56:48 +00:00
idezentas
81a0ae39f0
Translated using Weblate (Turkish)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/
2026-04-10 18:56:48 +00:00
Chosnuk
d055ba4ab4
Translated using Weblate (Polish)
Currently translated at 49.8% (264 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-04-10 18:56:48 +00:00
lednurb
ffb7293368
Translated using Weblate (Dutch)
Currently translated at 91.1% (483 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-04-10 18:56:48 +00:00
Pwnisher
36d2926ff7
Translated using Weblate (Romanian)
Currently translated at 63.9% (339 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ro/
2026-04-10 18:56:48 +00:00
Outbreak2096
97690bdb7b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-04-10 18:56:48 +00:00
Chosnuk
bfbcfe9678
Translated using Weblate (Polish)
Currently translated at 48.8% (259 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/
2026-04-10 18:56:48 +00:00
lednurb
a29cdae0a4
Translated using Weblate (Dutch)
Currently translated at 74.3% (394 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-04-10 18:56:48 +00:00
arcker95
32258407df
Translated using Weblate (Italian)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/
2026-04-10 18:56:48 +00:00
opakholis
0f165d1dbf
Translated using Weblate (Indonesian)
Currently translated at 95.8% (508 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/
2026-04-10 18:56:48 +00:00
Ray
97e10f57ca
Few UI improvments & fixes (#1229)
## Description
- Add indicator to mark the chosen version on the choose version dialog
- Add an option for album's context menu to add it to the now playing
queue
- Fix how season cards refresh on the series detail page so the images
don't glitch

### Related issues
Related to #1220

### Testing
Emulator mostly

## Screenshots

The indicator shows which version will play, whether explicitly chosen
by the user or implicitly picked by Wholphin.
![choose_version_indicator
Large](https://github.com/user-attachments/assets/7440ee1a-b9eb-4b34-ac39-86206c2eca09)

## AI or LLM usage
None
2026-04-10 14:56:43 -04:00
Ray
4eabaa9a52
Add option to remove item from Continue Watching and Next Up rows (#1140)
## Description
Adds context menu options for "Remove from continue watching" and
"Remove series from next up"

### Remove from continue watching

This marks the item as unplayed so it will not be shown on the Continue
Watching row anymore. It may still show on a Next Up or combined row
though.

### Remove series from next up

This first does the same as "Remove from continue watching" above. But
it also stores the series' ID in your display preferences as removed.
Wholphin will filter out this series from appearing in the Next Up row
until you watch _any_ episode in the series in the future.

This only works for Wholphin clients!

There's a dialog to view which series have been removed and to re-add
them manually. Settings->Customize Home->Settings->View removed next up

### Related issues
Closes #906

### Testing
Mostly emulator testing

## Screenshots

## AI or LLM usage
None
2026-04-07 16:04:21 -04:00
Ray
ade564d907
Add studio tab & filtering to TV show libraries (#1211)
## Description
Adds a tab for Studios (TV networks) to TV libraries. This displays a
grid of all of the studios. Clicking one displays the series produced by
the studio.

Additionally, adds a filter to the library tab to filter by studio. You
can select multiple studios, but its not the best UX since there will
likely be many studios (I have almost 200).

Finally, you can add a home row for studios in a library.

### Related issues
Closes #1002

### Testing
Mostly manual testing via emulator

## Screenshots
### Studios tab for a library
![studios_grid
Large](https://github.com/user-attachments/assets/d51e6d20-3768-4bd5-8a09-45cd491064b2)
### Filter drop down for studios
![filter_by_studios
Large](https://github.com/user-attachments/assets/7dbd4c13-4194-4674-b272-d42257368ce2)
### Updates series details
Shows the studio above the genres
![series_details_studio
Large](https://github.com/user-attachments/assets/745caa9b-838c-4e8b-b0f8-69d5f316287a)


## AI or LLM usage
None
2026-04-07 16:03:58 -04:00
Ray
edaf06afd0
Show music video watch status on artist & album pages (#1209)
## Description
Show the watched indicator and favorite icon on music videos on both the
artist or album detail pages.

### Related issues
Fixes #1206 

### Testing
Quick emulator testing

## Screenshots
N/A, same indicators as the rest of the app

## AI or LLM usage
None
2026-04-06 18:17:04 -04:00
Ray
31465051ff
Dev: use build product flavors for app store release (#1205)
## Description
Instead of applying a code patch, this PR uses build time [product
flavors](https://developer.android.com/build/build-variants#product-flavors)
to define the existing default and an app store variant. This is more
robust than maintaining a patch file and making sure it is applied
before building.

The app store variant applies the same code changes (removing install
permission, requiring leanback, & setting `UpdateChecker.ACTIVE`), but
via manifest placeholders/merging and `BuildConfig` entries.

There are no user facing changes.

### Related issues
None

### Testing
Built the variants and verified manifest changes via aapt

## Screenshots
N/A

## AI or LLM usage
None
2026-04-06 15:24:20 -04:00
Ray
9a3af225a4
View more discover results (#1198)
## Description
Adds a card at the end of the rows on the discover page/tab to view more
results. When clicking this card, it goes to a grid view of more results
starting focused on the next one.

### Dev notes

This PR modifies `ApiRequestPager` to move most of its functionality
into an abstract class, `RequestPager`. And then add a new concrete
class, `DiscoverRequestPager`, for Seerr API paging. `ApiRequestPager`
remains for Jellyfin paging.

### Related issues
Related to #1035

### Testing
Emulator

## Screenshots

![discover_view_more
Large](https://github.com/user-attachments/assets/180aa7a5-45c3-4544-b3f8-e3d394859178)
![discover_grid
Large](https://github.com/user-attachments/assets/ae5e8fbf-0fa4-4a2e-96ac-629ae688c05d)

## AI or LLM usage
None
2026-04-06 13:18:55 -04:00
Leon Omelan
1366ee744d
perfomance: Reduce recompositions in SeriesOverviewContent when navigating (#1185)
<!-- By submitting this pull request, you acknowledge that you have read
the [contributing
guide](https://github.com/damontecres/Wholphin/blob/main/CONTRIBUTING.md,
including the AI/LLM policy, and [developer's
guide](https://github.com/damontecres/Wholphin/blob/main/DEVELOPMENT.md)
-->

## Description
<!-- Describe the changes in detail -->
Make alpha channel and background change in Banner Card more
recomposition friendly.

Split from #1152

### Related issues
<!-- If this is a new feature or a change, there must be a discussion in
an issue first, reference the issue here -->
<!-- If fixing a bug, reference the bug issue here, or describe the bug,
including steps to reproduce -->

### Testing
<!-- Describe how this change was tested and on what device(s) -->
Tested on a emulator
It's observed when moving from TV series episode card to EpisodeFooter
and back
## Screenshots
<!-- Please include screenshots if the PR alters any UI elements -->
| Pre | Post |
|--------|--------|
| <img width="395" height="152" alt="Screenshot 2026-04-02 at 08 41 40"
src="https://github.com/user-attachments/assets/b6554425-8af5-4e29-a866-3e4f6a7be473"
/> | <img width="406" height="296" alt="Screenshot 2026-04-02 at 08 44
56"
src="https://github.com/user-attachments/assets/511fc6df-c860-47eb-aec8-57c400dba83c"
/> |


## AI or LLM usage
<!-- If you used any AI or LLM assistance, please list where in the code
and how you tested it -->
Gemini in AS was used for repetitive code completion
2026-04-06 11:23:54 -04:00
Leon Omelan
5ab4bb712b
performance: reduce recompositons in PersonCard and SeasonCard (#1184)
<!-- By submitting this pull request, you acknowledge that you have read
the [contributing
guide](https://github.com/damontecres/Wholphin/blob/main/CONTRIBUTING.md,
including the AI/LLM policy, and [developer's
guide](https://github.com/damontecres/Wholphin/blob/main/DEVELOPMENT.md)
-->

## Description
<!-- Describe the changes in detail -->
related docs:
https://developer.android.com/develop/ui/compose/performance/bestpractices#defer-reads
Removed setting padding with animated value, instead moved to lambda
offset and layout modifiers to increase performance and reduce
recompositions when focusing those cards

Split from #1152

### Related issues
<!-- If this is a new feature or a change, there must be a discussion in
an issue first, reference the issue here -->
<!-- If fixing a bug, reference the bug issue here, or describe the bug,
including steps to reproduce -->

### Testing
<!-- Describe how this change was tested and on what device(s) -->
Tested on a emulato
## Screenshots
<!-- Please include screenshots if the PR alters any UI elements -->
|Component | Pre | Post |
|---|--------|--------|
|Person Card|<img width="404" height="366" alt="Screenshot 2026-04-02 at
08 19 18"
src="https://github.com/user-attachments/assets/73b38c75-040b-401e-88d6-4bfc9ffc0cc9"
/> | <img width="407" height="346" alt="Screenshot 2026-04-02 at 08 22
06"
src="https://github.com/user-attachments/assets/add473f7-dea6-4e33-97b8-6954149a81e2"
/> |
|Season Card| <img width="404" height="341" alt="Screenshot 2026-04-02
at 08 18 31"
src="https://github.com/user-attachments/assets/eec594ee-6701-4f99-8fb3-339ed8559ec4"
/> |<img width="408" height="299" alt="Screenshot 2026-04-02 at 08 24
06"
src="https://github.com/user-attachments/assets/8de445a6-dcb8-4c7e-a5f6-a25bf822c822"
/> |



## AI or LLM usage
<!-- If you used any AI or LLM assistance, please list where in the code
and how you tested it -->
Gemini in AS was used for repetitive code completion
2026-04-06 10:11:01 -04:00
Ray
44d1ac484f
Refactor movie page to use use state flow (#1183)
## Description
Refactors the movie page & view model to use a `StateFlow` instead of
many `LiveData` objects. This is in keeping with best practices.

There are no user facing changes.

### Related issues
None

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-03 12:44:59 -04:00
Ray
feb8c31791
Show toast & add option to fetch release notes when app updates (#1182)
## Description
When Wholphin is updated, it will show a short toast message. This works
for both app store and side loaded installs.

You can now click on the "Installed version" in settings to fetch the
release notes for the current version.

### Related issues
Closes #1058

### Testing
Emulator

## Screenshots
![release_notes
Large](https://github.com/user-attachments/assets/2c03eb74-abb2-4b45-8d6f-01e8ef72116c)

## AI or LLM usage
None
2026-04-03 12:44:39 -04:00
Ray
46beee00bb
Fix supported audio types (#1173)
## Description
Fixes the list of supported audio types when playing music.

This fixes allows for playback of audio formats like ALAC, PCM/WAV,
Vorbis, etc.

### Related issues
Fixes #1168 

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-04-01 01:05:24 -04:00
Ray
7ccef6f802
Fix card overlays showing, fix home page refresh indicator (#1178)
## Description
- Always show card overlays (ie Movie vs TV Show) for discover/Seerr
cards
- Show card overlays (ie favorite and watched status) for search result
cards
- Restore showing home page refresh indicator

### Related issues
Closes #1141
Closes
https://github.com/damontecres/Wholphin/issues/702#issuecomment-4114775539

### Testing
Emulator

## Screenshots
N/A, no new UIs, just adding existing ones

## AI or LLM usage
None
2026-03-31 23:45:00 -04:00
Leon Omelan
762a5e6dcc
Optimize recompositions on focus change (#1138)
<!-- By submitting this pull request, you acknowledge that you have read
the [contributing
guide](https://github.com/damontecres/Wholphin/blob/main/CONTRIBUTING.md,
including the AI/LLM policy, and [developer's
guide](https://github.com/damontecres/Wholphin/blob/main/DEVELOPMENT.md)
-->

## Description
<!-- Describe the changes in detail -->
I've look at the app using Layout inspector to see if there are any
recompositions that shouldn't be happening while navigating normally in
the app. I've noticed two issues
1. Every BannerCard was being recomposed on every cursor move, which
added a lot of overhead to home screen navigation
2. Tab row in the Series View was being recomposed while navigating
across episodes in given season.

### Related issues
<!-- If this is a new feature or a change, there must be a discussion in
an issue first, reference the issue here -->
<!-- If fixing a bug, reference the bug issue here, or describe the bug,
including steps to reproduce -->
Performance on the home screen is lacking, especially on low end
devices, while this isn't a full fix, it will improve the navigation, as
the app will be making significantly less work.

Probably will fix https://github.com/damontecres/Wholphin/issues/1043

### Testing
<!-- Describe how this change was tested and on what device(s) -->
Using Layout Inspector built-in recomposition counter and highlights
it's easy to see components which recompose while they shouldn't. I've
tested it on a 4K TV emulator on my M1 Macbook Pro

## Screenshots
<!-- Please include screenshots if the PR alters any UI elements -->
main: 
<img width="402" height="508" alt="image"
src="https://github.com/user-attachments/assets/6aaac6af-50d6-4f21-b465-e78bccf7e985"
/>

my branch:
<img width="401" height="563" alt="image"
src="https://github.com/user-attachments/assets/1034c0e2-9a40-4a05-8a07-f30b2e10301d"
/>

same navigation, on the same content. (down, right x4
## AI or LLM usage
<!-- If you used any AI or LLM assistance, please list where in the code
and how you tested it -->
Gemini built in to Android Studio helped me identify non-stable parts of
the code. It also helped me understand and implement fixes in the
HomePage code.
I've took the time to check manually that it didn't alter any behavior,
and verified the fixes using Layout Inspector and recomposition counter
2026-03-31 18:39:02 -04:00
Ray
4ea21be430
Move native builds to wholphin-extensions (#1172)
## Description
This PR moves the native components (ffmpeg decoder, av1 decoder, &
`libmpv`) to https://github.com/damontecres/wholphin-extensions. They
can be retrieved as gradle dependencies now.

This allows for contributors to more easily include these extensions
when building Wholphin locally.

There are no user facing changes in this PR.

Note: the kotlin code for interfacing with `libmpv`, ie `MPVLib` &
`MpvPlayer`, is still in this repo for now.

### Related issues
Related to #828

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-03-31 18:10:40 -04:00
Pwnisher
6f855fe4a3
Translated using Weblate (Romanian)
Currently translated at 51.3% (272 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ro/
2026-03-30 18:11:36 +00:00
Pwnisher
5158675d2b
Added translation using Weblate (Romanian) 2026-03-30 18:11:36 +00:00
gatisr
2cabc0cdba
Translated using Weblate (Latvian)
Currently translated at 37.1% (197 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/lv/
2026-03-30 18:11:36 +00:00
SimonHung
6a3b45371b
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-03-30 18:11:36 +00:00
n8llcaster
84435f713b
Translated using Weblate (Slovak)
Currently translated at 95.2% (505 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/sk/
2026-03-30 18:11:36 +00:00
American_Jesus
e0309fb38b
Translated using Weblate (Portuguese)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/
2026-03-30 18:11:36 +00:00
danpergal84
98e4ec0868
Translated using Weblate (Spanish)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-03-30 18:11:36 +00:00
Sk4hnt42
51a8777b30
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
flipip
9495cb4d01
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
zyplex
64ad27aabf
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
Lorixx
058aed1f53
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
North-DaCoder
4d510e772f
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
Sk4hnt42
72fd1a4cb4
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
alexq83
ce4408f305
Translated using Weblate (German)
Currently translated at 100.0% (530 of 530 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:36 +00:00
Outbreak2096
e70beebaa0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (529 of 529 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/
2026-03-30 18:11:35 +00:00
North-DaCoder
4f519958ca
Translated using Weblate (German)
Currently translated at 100.0% (529 of 529 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:35 +00:00
danpergal84
8e2d4778cb
Translated using Weblate (Spanish)
Currently translated at 100.0% (529 of 529 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/
2026-03-30 18:11:35 +00:00
gatisr
65a9f4fdc1
Translated using Weblate (Latvian)
Currently translated at 37.3% (197 of 528 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/lv/
2026-03-30 18:11:35 +00:00
gatisr
91f864ae53
Added translation using Weblate (Latvian) 2026-03-30 18:11:35 +00:00
lednurb
fd6d52c7ba
Translated using Weblate (Dutch)
Currently translated at 74.6% (394 of 528 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-03-30 18:11:35 +00:00
SimonHung
8daf914660
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (528 of 528 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/
2026-03-30 18:11:35 +00:00
North-DaCoder
ba71f3df20
Translated using Weblate (German)
Currently translated at 100.0% (528 of 528 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/
2026-03-30 18:11:35 +00:00
lednurb
52fbebb41f
Translated using Weblate (Dutch)
Currently translated at 74.4% (393 of 528 strings)

Translation: Wholphin/Wholphin
Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/
2026-03-30 18:11:35 +00:00