Commit graph

51 commits

Author SHA1 Message Date
renovate[bot]
f3c0606ebf
Update Kotlin to v2.3.20 (#1105) 2026-03-16 12:59:52 -04:00
renovate[bot]
31db1f59b9
Update Dependencies (#1082) 2026-03-16 12:59:34 -04:00
Ray
36162d6fc5
Revert "Integrate with libass-android to support SSA/ASS subtitles in ExoPlayer" (#1051)
Unfortunately, there seem to be issues with switching to
`libass-android`, so reverting those changes so I can cut a release and
troubleshoot later.

Reverts damontecres/Wholphin#569
2026-03-06 16:16:12 -05:00
Ray
83ebd922d9
Integrate with libass-android to support SSA/ASS subtitles in ExoPlayer (#569)
## Description
Add better ASS/SSA support to ExoPlayer by using
[`libass-android`](https://github.com/peerless2012/libass-android).

This is enabled with the "Use libass for ASS subtitles" advanced
settings for ExoPlayer. It is enabled by default.

### Related issues
Related to #22
2026-03-06 08:34:57 -05:00
renovate[bot]
6867ba7657
Update Dependencies (#1013) 2026-03-03 14:35:11 -05:00
Ray
0004701296
Dev: add simple automated UI test setup (#1027)
## Description
This PR is mostly a proof-of-concept for setting up automated UI
testing. The tests use Roboelectric so they can run without an emulator.
There is also a sample instrumented test for running on emulators or
devices for future tests.

It adds two basic automated UI tests for adding a server. These are sort
integration tests because they use the actual implementations for the
view model and services like `ServerRepository` and `JellyfinServerDao`.

Also, moves the bulk of `MainActivity`'s compose code into a function
for future tests.

### Related issues
N/A

### Testing
Local testing

## Screenshots
N/A

## AI or LLM usage
None
2026-03-03 13:46:46 -05:00
renovate[bot]
536e8d366c
Update Dependencies to v3.4.0 (#970)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [io.coil-kt.coil3:coil-svg](https://redirect.github.com/coil-kt/coil)
| `3.3.0` → `3.4.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/io.coil-kt.coil3:coil-svg/3.4.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.coil-kt.coil3:coil-svg/3.3.0/3.4.0?slim=true)
|
| [io.coil-kt.coil3:coil-gif](https://redirect.github.com/coil-kt/coil)
| `3.3.0` → `3.4.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/io.coil-kt.coil3:coil-gif/3.4.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.coil-kt.coil3:coil-gif/3.3.0/3.4.0?slim=true)
|
|
[io.coil-kt.coil3:coil-network-okhttp](https://redirect.github.com/coil-kt/coil)
| `3.3.0` → `3.4.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/io.coil-kt.coil3:coil-network-okhttp/3.4.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.coil-kt.coil3:coil-network-okhttp/3.3.0/3.4.0?slim=true)
|
|
[io.coil-kt.coil3:coil-network-cache-control](https://redirect.github.com/coil-kt/coil)
| `3.3.0` → `3.4.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/io.coil-kt.coil3:coil-network-cache-control/3.4.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.coil-kt.coil3:coil-network-cache-control/3.3.0/3.4.0?slim=true)
|
|
[io.coil-kt.coil3:coil-compose](https://redirect.github.com/coil-kt/coil)
| `3.3.0` → `3.4.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/io.coil-kt.coil3:coil-compose/3.4.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.coil-kt.coil3:coil-compose/3.3.0/3.4.0?slim=true)
|
| [io.coil-kt.coil3:coil-core](https://redirect.github.com/coil-kt/coil)
| `3.3.0` → `3.4.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/io.coil-kt.coil3:coil-core/3.4.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.coil-kt.coil3:coil-core/3.3.0/3.4.0?slim=true)
|

---

### Release Notes

<details>
<summary>coil-kt/coil (io.coil-kt.coil3:coil-svg)</summary>

###
[`v3.4.0`](https://redirect.github.com/coil-kt/coil/blob/HEAD/CHANGELOG.md#340---Unreleased)

[Compare
Source](https://redirect.github.com/coil-kt/coil/compare/3.3.0...3.4.0)

- **New**: Add `ConcurrentRequestStrategy` to support combining
in-flight network requests for the same key.
([#&#8203;2995](https://redirect.github.com/coil-kt/coil/pull/2995),
[#&#8203;3326](https://redirect.github.com/coil-kt/coil/pull/3326))
- `DeDupeConcurrentRequestStrategy` enables this behavior and lets
waiters wait for the results of an in-flight network request.
- This behavior is experimental and is currently disabled by default.
- Currently, requests are always combined based on their `diskCacheKey`.
- `OkHttpNetworkFetcherFactory`, `KtorNetworkFetcherFactory`, and
`NetworkFetcher.Factory` now accept `concurrentRequestStrategy`.
- **New**: Decode images on JS/WASM using a web worker to avoid blocking
the browser main thread.
([#&#8203;3305](https://redirect.github.com/coil-kt/coil/pull/3305))
- **New**: Add support for Linux native targets (`linuxX64` and
`linuxArm64`) for non-Compose multiplatform artifacts.
([#&#8203;3054](https://redirect.github.com/coil-kt/coil/pull/3054))
- **New**: Add Compose-only APIs to improve transitions between
subsequent requests.
([#&#8203;3141](https://redirect.github.com/coil-kt/coil/pull/3141),
[#&#8203;3175](https://redirect.github.com/coil-kt/coil/pull/3175))
- `ImageRequest.Builder.useExistingImageAsPlaceholder` enables
crossfading from the previous image when no placeholder is set.
- `ImageRequest.Builder.preferEndFirstIntrinsicSize` lets
`CrossfadePainter` prefer the end painter's intrinsic size.
- **New**: Add `ImageLoader.Builder.repeatCount(Int)` in `coil-gif` to
set a global animated image repeat count.
([#&#8203;3143](https://redirect.github.com/coil-kt/coil/pull/3143))
- **New**: Add support for preferring embedded video thumbnails in
`coil-video`.
([#&#8203;3107](https://redirect.github.com/coil-kt/coil/pull/3107))
- **New**: Publish `coil-lint` with `coil-core` and add a lint check to
catch accidental `kotlin.error()` calls in `ImageRequest.Builder`
blocks.
([#&#8203;3304](https://redirect.github.com/coil-kt/coil/pull/3304))
- Set Kotlin language version to 2.1.
([#&#8203;3302](https://redirect.github.com/coil-kt/coil/pull/3302))
- Make `BitmapFetcher` available in common code.
([#&#8203;3286](https://redirect.github.com/coil-kt/coil/pull/3286))
- Use `applicationContext` when creating the singleton `ImageLoader` on
Android.
([#&#8203;3246](https://redirect.github.com/coil-kt/coil/pull/3246))
- Cache eligible non-2xx HTTP responses by default (e.g. `404`) and stop
caching non-cacheable responses (e.g. `500`).
([#&#8203;3137](https://redirect.github.com/coil-kt/coil/pull/3137),
[#&#8203;3139](https://redirect.github.com/coil-kt/coil/pull/3139))
- Fix potential race condition when consuming OkHttp response bodies.
([#&#8203;3186](https://redirect.github.com/coil-kt/coil/pull/3186))
- Fix `maxBitmapSize` edge case to prevent oversized bitmap crashes on
Android.
([#&#8203;3259](https://redirect.github.com/coil-kt/coil/pull/3259))
- Update Kotlin to 2.3.10.
- Update Compose to 1.9.3.
- Update Okio to 3.16.4.
- Update Skiko to 0.9.22.2.
- Update `kotlinx-io-okio` to 0.9.0.
- Update `androidx.core` to 1.16.0.
- Update `androidx.lifecycle` to 2.9.4.
- Update `androidx.exifinterface` to 1.4.2.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4zMi4wIiwidXBkYXRlZEluVmVyIjoiNDMuMzIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 18:31:52 -05:00
renovate[bot]
781fc93fa3
Update Dependencies to v2.59.2 (#936)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[com.google.dagger:hilt-android-compiler](https://redirect.github.com/google/dagger)
| `2.59.1` → `2.59.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.dagger:hilt-android-compiler/2.59.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.dagger:hilt-android-compiler/2.59.1/2.59.2?slim=true)
|
|
[com.google.dagger:hilt-android](https://redirect.github.com/google/dagger)
| `2.59.1` → `2.59.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.dagger:hilt-android/2.59.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.dagger:hilt-android/2.59.1/2.59.2?slim=true)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNi41IiwidXBkYXRlZEluVmVyIjoiNDMuMjYuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-23 18:00:42 -05:00
renovate[bot]
c488c05c12
Update dependency com.google.devtools.ksp to v2.3.6 (#910)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [com.google.devtools.ksp](https://goo.gle/ksp)
([source](https://redirect.github.com/google/ksp)) | `2.3.5` → `2.3.6` |
![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.3.6?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.3.5/2.3.6?slim=true)
|

---

### Release Notes

<details>
<summary>google/ksp (com.google.devtools.ksp)</summary>

###
[`v2.3.6`](https://redirect.github.com/google/ksp/releases/tag/2.3.6)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.5...2.3.6)

#### What's Changed

- Fixed an issue where module recompilation would fail on Windows
environments when KSP2 was enabled
([#&#8203;2774](https://redirect.github.com/google/ksp/issues/2774))
- Resolved an issue where generated Java sources were ignored when using
Android Kotlin Multiplatform with IP-compatible paths
([#&#8203;2744](https://redirect.github.com/google/ksp/issues/2744))
- Fixed a KSP version 2.3.5 CI error exception that does not break build
checks
([#&#8203;2763](https://redirect.github.com/google/ksp/issues/2763))
- Added symbol-processing-api and common-deps to compile dependencies
([#&#8203;2789](https://redirect.github.com/google/ksp/issues/2789))
- Improved the detection of built-in Kotlin by removing the reliance on
KotlinBaseApiPlugin
([#&#8203;2772](https://redirect.github.com/google/ksp/issues/2772))
- A back-port of a performance optimization in the Intellij / Analysis
API ([2785](https://redirect.github.com/google/ksp/pull/2785) )

#### Contributors

- Thanks to [@&#8203;salmanmkc](https://redirect.github.com/salmanmkc),
[@&#8203;jaschdoc](https://redirect.github.com/jaschdoc),
[@&#8203;gurusai-voleti](https://redirect.github.com/gurusai-voleti) and
everyone who reported bugs and participated in discussions!

**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.5...2.3.6>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMi4wIiwidXBkYXRlZEluVmVyIjoiNDMuMjIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-18 15:57:48 -05:00
renovate[bot]
31ff1b2072
Update dependency org.openapi.generator to v7.20.0 (#904)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| org.openapi.generator | `7.19.0` → `7.20.0` |
![age](https://developer.mend.io/api/mc/badges/age/maven/org.openapi.generator:org.openapi.generator.gradle.plugin/7.20.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.openapi.generator:org.openapi.generator.gradle.plugin/7.19.0/7.20.0?slim=true)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNS4zIiwidXBkYXRlZEluVmVyIjoiNDMuMTUuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-18 15:57:16 -05:00
Ray
aa69646b2d
Upgrade AGP to 9.x (#892)
## Description
This PR has no user facing changes.

Upgrade AGP to 9.x and Gradle to 9.x. Also updates some dependencies as
well.

Note: still using deprecated `android.newDsl=false` because the protobuf
plugin is not yet compatible:
https://github.com/google/protobuf-gradle-plugin/issues/793.

### Related issues
N/A

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-13 14:49:19 -05:00
Ray
df2f03cf83
Update dependencies (#866)
## Description
Update dependencies

### Related issues
Just updating some of the dependencies in #858 that don't require AGP 9

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-10 00:26:11 -05:00
renovate[bot]
6ec10b9b82
Update dependency com.google.devtools.ksp to v2.3.5 (#855)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [com.google.devtools.ksp](https://goo.gle/ksp)
([source](https://redirect.github.com/google/ksp)) | `2.3.0` → `2.3.5` |
![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.3.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin/2.3.0/2.3.5?slim=true)
|

---

### Release Notes

<details>
<summary>google/ksp (com.google.devtools.ksp)</summary>

###
[`v2.3.5`](https://redirect.github.com/google/ksp/releases/tag/2.3.5)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.4...2.3.5)

#### What's Changed

- KSPCoreEnvironment.instance\_prop leaks memory when used
programmatically
[#&#8203;2742](https://redirect.github.com/google/ksp/issues/2742)
- Missing first annotation argument when toByte is used
[#&#8203;2672](https://redirect.github.com/google/ksp/issues/2672)
- Fix circular dependency between KSP and KAPT in AGP 9.0
[#&#8203;2743](https://redirect.github.com/google/ksp/issues/2743)

#### Contributors

- Thanks to everyone who reported bugs and participated in discussions!

**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.4...2.3.5>

###
[`v2.3.4`](https://redirect.github.com/google/ksp/releases/tag/2.3.4)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.3...2.3.4)

#### What's Changed

- KSP ignores sources in Kotlin directory
[#&#8203;2730](https://redirect.github.com/google/ksp/issues/2730)
- Avoid recording Java symbol lookups in non-incremental builds
[#&#8203;2728](https://redirect.github.com/google/ksp/issues/2728)
- Clean up ThreadLocals when processing is done
[#&#8203;2709](https://redirect.github.com/google/ksp/issues/2709)

#### Contributors

- Thanks to everyone who reported bugs and participated in discussions!

**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.3...2.3.4>

###
[`v2.3.3`](https://redirect.github.com/google/ksp/releases/tag/2.3.3)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.2...2.3.3)

#### What's Changed

- Migrate away from a deprecated compilerOptions KGP API
[#&#8203;2703](https://redirect.github.com/google/ksp/issues/2703)

#### Contributors

- Thanks to everyone who reported bugs and participated in discussions!

**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.2...2.3.3>

###
[`v2.3.2`](https://redirect.github.com/google/ksp/releases/tag/2.3.2)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.1...2.3.2)

#### What's Changed

**Note:** This release is a hotfix for a regression introduced in 2.3.1

- Fixed an issue where KSP incorrectly processed specific nullable
annotations from Java interfaces, leading to incorrect nullability in
the generated Kotlin code
[#&#8203;2696](https://redirect.github.com/google/ksp/issues/2696)
- Fixed a regression introduced in
[#&#8203;2656](https://redirect.github.com/google/ksp/issues/2656) that
caused runtime failures for projects using AGP 8.8.0 and older due to an
incompatible, version-specific type check.
[#&#8203;2694](https://redirect.github.com/google/ksp/issues/2694)

#### Contributors

Thanks to everyone who reported bugs and participated in discussions!

**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.1...2.3.2>

###
[`v2.3.1`](https://redirect.github.com/google/ksp/releases/tag/2.3.1)

[Compare
Source](https://redirect.github.com/google/ksp/compare/2.3.0...2.3.1)

#### What's Changed

- Added support for AGP 9.0 and built-in Kotlin
[#&#8203;2674](https://redirect.github.com/google/ksp/issues/2674)
- Fixed a bug in getJvmCheckedException that incorrectly handled nested
classes.
[#&#8203;2584](https://redirect.github.com/google/ksp/issues/2584)
- Removed incorrect caching for KSValueArgumentLiteImpl that wrongly
merged arguments with different parents, origins, or locations
[#&#8203;2677](https://redirect.github.com/google/ksp/issues/2677)

#### Contributors

Thanks to everyone who reported bugs and participated in discussions!
**Full Changelog**:
<https://github.com/google/ksp/compare/2.3.0...2.3.1>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45Ny4wIiwidXBkYXRlZEluVmVyIjoiNDIuOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 17:51:49 -05:00
renovate[bot]
4e45502c1c
Update Androidx Media3 to v1.9.2 (#854)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[androidx.media3:media3-effect](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-effect/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-effect/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-ui-compose](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui-compose/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui-compose/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-ui](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-exoplayer-dash](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-dash/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-dash/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-exoplayer-hls](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer-hls/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer-hls/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-session](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-session/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-session/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-exoplayer](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer/1.9.1/1.9.2?slim=true)
|
|
[androidx.media3:media3-datasource-okhttp](https://redirect.github.com/androidx/media)
| `1.9.1` → `1.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-datasource-okhttp/1.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-datasource-okhttp/1.9.1/1.9.2?slim=true)
|

---

### Release Notes

<details>
<summary>androidx/media (androidx.media3:media3-effect)</summary>

###
[`v1.9.2`](https://redirect.github.com/androidx/media/blob/HEAD/RELEASENOTES.md#192-2026-02-06)

[Compare
Source](https://redirect.github.com/androidx/media/compare/1.9.1...1.9.2)

This release includes the following changes since
[1.9.1 release](#&#8203;191-2026-01-26):

- ExoPlayer:
- Fix bug where `ProgressiveMediaSource` propagates out-of-date timeline
    info to player and the queued periods unexpectedly get removed

([#&#8203;3016](https://redirect.github.com/androidx/media/issues/3016)).
- Audio:
  - Improve the retry logic of `AudioOutput` initialization in
    `DefaultAudioSink`

([#&#8203;2905](https://redirect.github.com/androidx/media/issues/2905)).
- Session:
- Fix issue where system UI button placement workaround negatively
affects
    other UI surface like Android Auto or manufacturers not needing the
workaround
([#&#8203;3041](https://redirect.github.com/androidx/media/issues/3041)).
- Cast extension:
  - Fix bug where transferring from Cast to local playback was broken.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/damontecres/Wholphin).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi45Ny4wIiwidXBkYXRlZEluVmVyIjoiNDIuOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 17:49:17 -05:00
Ray
b06761eaa5
Rewrite SuggestionsCache & limit parallelism (#851)
## Description
A rewrite of the `SuggestionsCache` to simplify it as a read-through
cache. The downside of this is that updated suggestions won't be
reflected in the UI unless the user reloads the page, but I think that's
an okay trade off.

Also adds parallelism limits to fetching suggestions to reduce the
number of simultaneous API calls. And moved the combining logic to use
the `Default` dispatcher to free up an IO one.

Also adds an initial delay to both the suggestions & tv provider
workers, so a cold start of the app isn't starved.

### Related issues
Related to #849

### Testing
Emulator & unit testing

## Screenshots
N/A

## AI or LLM usage
None
2026-02-09 17:39:40 -05:00
Justin Caveda
aeaecc0f59
Fix suggestions mixing content from different libraries and update recommendation logic (#644)
## Description
This PR aims to fix #638 where the "Suggestions" row was mixing up
content from different libraries that shared the same library type. For
example you were in the Anime library, you'd see regular TV shows
showing up, as the TV Shows and Anime libraries would both be "Show"
libraries.

As @damontecres mentioned in the issue discussion, the
`/Items/Suggestions` endpoint Wholphin is using just returns random
items from the same library type, with no special logic or
recommendation algorithm.

I also looked at how the official WebUI handles this. It basically just
mixes "Resume," "Next Up," and "Latest Items" together. That felt a bit
redundant since we usually have dedicated rows for those things anyway;
I wanted to try something that helps discover new content.

I replaced the broken endpoint with a few custom `GetItemsRequest`
calls. These work correctly with the `ParentId` filter, so we only get
results from the library we are actually looking at. Additionally, I
added in some logic that takes into account what the user has been
watching to tailor the suggestions a little bit.

The new logic uses a 40/30/30 mix (this can of course be tweaked as
needed)

- Tailored (40%): Grabs your recently watched items from this library,
checks their genres, and returns items from the same genre.

- Random (30%): Random unwatched stuff from this library.

- New (30%): Recently added items.

This is implemented using only `GetItemsRequest` API calls using
filters, rather than any specialized endpoints like the
`/Items/Suggestions` endpoint. This means the feature should be
predictable and stable. If Jellyfin ever adds an actual recommendation
algorithm and endpoint to call it, I imagine we would want to switch to
that in the future though.

I also added some failsafe logic to make sure there will be diversity in
the "recently watched" items that get pulled, in case a user might have
recently binged a TV show. We wouldn't want every single recommendation
to be based off of that one show.

To fix this, I changed the query to fetch the last 20 history items
instead of just the top 3. Then, we filter that list client-side to find
unique Series IDs. If the user watched 10 episodes of One Piece in a
row, the logic collapses them into a single "One Piece" entry and moves
on to the next distinct show they watched. This guarantees we get
variety in the source material for recommendations.

This is a work in progress right now, mainly due to performance. For my
server it takes about 10-15 seconds to load the Suggestions row when I
tested. This is unacceptable in my opinion, especially if we ever intend
to add a Suggestions row like this to the home page like Plex does. I
have some ideas on how to improve performance, but I'm open to
suggestions.

### Related issues
Resolves #638 

### Screenshots

Before:

<img width="1953" height="1162" alt="suggestions1"
src="https://github.com/user-attachments/assets/6e301c67-1a46-46b5-8184-3adb9e52b330"
/>


After:

<img width="1937" height="1108" alt="suggestions3"
src="https://github.com/user-attachments/assets/b9563865-4055-40b6-b452-f94c26c8b6e9"
/>


### AI/LLM usage
I used Claude Code to help write the Kotlin Coroutines so the API calls
run at the same time. I also used it to write the tests in
`TestSuggestionsLogic.kt`.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-02-04 20:50:29 -05:00
Ray
d9d5ab02e8
Add support for viewing photos in photo albums (#703)
## Description
Add support for viewing photos in photo albums

### Features
- Browse and view albums & photos
- View an album as a slideshow
- Show overlay with photo details and controls
- Rotate, zoom, & pan photos
- Apply basic filters to photos or albums such as contrast, saturation,
red/green/blue, etc
- Setting to include video clips during slideshows

### Controls
- D-Pad left or right: scroll between photos in album
- Hold D-Pad up or down: zoom in or out of the current photo
- D-Pad left/right/up/down, while zoomed: pan around photo
- Back, while zoomed: revert the zoom
- Otherwise: show photo overlay

### Related issues
Closes #458
Closes #634

### Screenshots
#### Overlay
![photo_overlay
Large](https://github.com/user-attachments/assets/b44ed876-d8bd-4f75-aa1e-4106c2edb2f7)

#### Applying filters
![photo_filters
Large](https://github.com/user-attachments/assets/1379978a-b27c-47ac-80af-f7bb6a2177df)
2026-02-04 20:04:46 -05:00
Ray
fa51d1e61e
Bump dependency versions (#796)
## Description
Bumps dependency versions.

AGP (and hilt by extension) are not yet updated cause moving to AGP 9
has many breaking changes and I think one or two may affect the build
scripts.

Also, one day I will add Renovate to automate these PRs.
2026-01-29 14:26:54 -05:00
Justin Caveda
d725821011
[FEAT] Add voicesearch button to search page (#637)
## Description
This PR is a rewrite of a previously submitted PR for this same feature.
It implements native Voice Search for Android TV using Android's
SpeechRecognizer API.

Key Changes

  New Files:
- VoiceInputManager.kt - Handles SpeechRecognizer lifecycle, permission
management, and audio level normalization
- VoiceSearchButton.kt - Composable button with audio-reactive pulse and
full-screen listening dialog

  UI/UX:
  - Audio-reactive microphone button that pulses based on input volume
  - Full-screen listening overlay with animated states:
- Listening - Pulsing bubble with ripple rings, shows partial
transcription
    - Processing - Animated dots while waiting for final result
- Error - Red bubble with localized error message, auto-dismisses after
3s

### Related issues
Resolves https://github.com/damontecres/Wholphin/issues/515

### AI/LLM usage
The initial draft of this change from the prior PR was created with the
assistance of Claude Code, which was heavily leaned on for the overlay.
I have taken the initial draft, gone through it, and re-implemented by
hand to clean it up, narrow the scope (AI loves to touch and change
things unrelated to what you're working on) and make it more readable.
AI was used in the last stage to assist with finding any logic
errors/bugs I may have missed (by looking through code and also by
looking over ADB logs from testing on Nvidia Shield).. AI was also used
to create the tests found in TestVoiceInputManager.kt. Lastly, I fed the
diffs to an AI to help summarize the changes for this PR in an easy to
read manner.

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2026-01-14 17:06:22 -05:00
Ray
4c7c465c67
Add integration with Jellyseerr/Seerr (#558)
## Description
This PR add the ability to integrate with a [Jellyseerr/Seerr
server](https://github.com/seerr-team/seerr).

### Features
- Login to the Seerr server using API Key, Jellyfin credentials, or
local Seerr credentials
    - Separate Seerr logins per user profile
- Search Seerr from the search page
- Discover media from Seerr on the nav drawer `Discover` page
    - Also from movie, series, or person pages
- Seamless integration with existing media, i.e. selecting media found
from Seerr that already exists on the Jellyfin server, will go directly
to the regular media page
- Mostly consistent UI between Jellyfin media & Seerr media
- Submit requests to Seerr
- Cancel submitted requests

### Screenshots

![discover](https://github.com/user-attachments/assets/f830b48f-e2f1-43f4-9680-9c6d4e071765)

### Related issues
Closes #54

## Acknowledgements

The `app/src/main/seerr/seerr-api.yml` file is copied & modified from
https://github.com/seerr-team/seerr/blob/develop/seerr-api.yml. I hope
to try to upstream some of the changes in the future.
2026-01-12 16:35:27 -05:00
Ray
b78f5fcc77
Better support for remote media (HLS/DASH) (#675)
## Description
Check if playback is for a remote source and, if so, play that remote
URL directly. Works for both ExoPlayer & MPV.

Also adds support for direct playback for DASH in ExoPlayer.

### Related issues
Closes #471
Closes #666
2026-01-11 19:43:21 -05:00
Ray
49740c47cf
Create media session during playback allowing for external control (#640)
## Description
Creates a `MediaSession` during playback which allows for external
control such as via smart speakers, Google Home app, etc

Note: one limitation is that seeking previous/next items in the playlist
isn't supported. This is because Wholphin manages that independent of
the `Player`, so additional dev work is needed for this.

### Related issues
Closes #622
Might help with #415
2026-01-07 12:49:43 -05:00
Ray
79c614218d
Bump dependency versions (#645)
## Description
Bumps various third-party dependency versions
2026-01-06 22:51:25 -05:00
Ray
9ae4965c2a
Add resume/continue watching items to Android TV watch next row (#372)
## Details

Adds resume and continue watching items for the logged in user to the
Android TV OS level watch next "channel"
(https://developer.android.com/training/tv/discovery/watch-next-add-programs).

## Issues
Closes #206
Related to #581
2025-12-27 15:40:45 -05:00
Ray
494ff07b72
Fix smart & default subtitle selection logic (#579)
## Description
Fixes the logic for subtitle selection when using `Smart` or `Default`
server modes. Also takes into account unknown languages.

This is heavily inspired by [the server selection
logic](https://github.com/jellyfin/jellyfin/blob/release-10.11.z/Emby.Server.Implementations/Library/MediaStreamSelector.cs).
For better or for worse, Wholphin implements this client side.

### Related issues
Fixes #570
2025-12-27 14:22:40 -05:00
Ray
8479d8621d
Bump dependency versions, notably media3 (#496)
## Description
Bumps dependency versions, notably media3/ExoPlayer to `1.9.0`

### Related issues

Fixes #108
Fixes #355
Fixes #479
2025-12-17 17:00:15 -05:00
Ray
bbfbc13532
Backdrop improvements (#476)
## Description

The backdrop image shown on most pages is now configurable in advanced
settings:
* Image w/ dynamic color - Shows the backdrop with dynamic color filling
the entire space (new default)
* Image only - Shows only the backdrop image (current Wholphin behavior)
* None - Don't show any backdrops

Additionally, the backdrop is retained between page loads for the same
items.

## Acknowledgements

Big thanks to @YogiBear12 from which the idea and implementation for the
dynamic color was adapted from!

Code adapted from
https://github.com/YogiBear12/Halfin/blob/main/COLOR_EXTRACTION_AND_BACKDROP.md#backdrop-fading-and-transitions

## Issues

Closes #221
Closes #461
Closes #442



https://github.com/user-attachments/assets/1acbc487-c697-44d7-89ed-e7e4c9169360
2025-12-17 11:18:57 -05:00
damontecres
45cb385b9b
Bump compose version (#371)
The blog says this compose version improved scroll
performance:https://android-developers.googleblog.com/2025/12/whats-new-in-jetpack-compose-december.html

Dev notes: Also switches a few more compose libraries to use the BOM
version instead of defining per library
2025-12-04 12:45:02 -05:00
damontecres
39ad7e564f
Bump dependency versions & update issue templates (#270)
Adds a new bug template for reporting playback specific issues


Also bumps a few dependency versions
2025-11-20 12:55:49 -05:00
damontecres
18556b5058
Bump dependency versions (#170)
Also tries out using assisted injection for item IDs

No user facing changes
2025-11-07 10:09:59 -05:00
damontecres
3f7c2ac730
UI Updates & Fixes (#114)
Fixes #113 

- Ensures all audio and subtitle options are shown during playback
- Fix home rows not being at top when going back
- Show error message when background home page refresh fails

Also shows more details for login failures and adds a link to the debug
page (with log info) after multiple login failure attempts. Hopefully
this can help diagnose #112 and #18
2025-10-30 13:41:46 -04:00
damontecres
06f2c1260d
Add slf4j-simple (#101)
Fixes #99 

While not an actual error, it does look like a transitive dependency of
the Jellyfin Kotlin SDK may log using slf4j, so it would be good to
include an slf4j implementation just in case.
2025-10-28 19:28:54 -04:00
damontecres
89b9364807
Dependency updates & removing unused code (#70)
Just bumping dependencies and deleting some unused code. No user facing
changes
2025-10-26 18:17:47 -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
05f3811149
Add Live TV & DVR Support (#49)
Closes #1 

Adds support for Live TV & DVR functionality.

TODO:
- [x] EPG / TV Guide
- [x] View DVR schedule
- [x] Play live TV channel
- [x] Record program
- [x] Record Series
- [x] Cancel recordings
- [x] Access previously recorded content
2025-10-23 22:46:16 -04:00
damontecres
177e009f8c
Format changelog in app (#51)
Formats the in-app changelog when updating

Also allows for force updating to allow for switching develop tags.
2025-10-21 19:48:19 -04:00
damontecres
6194eba8c5
Remember playback choices & fix some track selection issues (#26)
Remembers changes in playback tracks across playbacks. So, if you change
the audio track, quit the app, and return to the same id, the app will
play the audio track previously chosen.

Additionally, this PR fixes a UI inconsistency when there are multiple
versions of a item. Previously sometimes the audio/subtitle tracks for
wrong version would be shown during playback.
2025-10-17 17:19:44 -04:00
Damontecres
182625f096
Bump dependency versions 2025-10-15 14:21:37 -04:00
Damontecres
d4b3c554f8
Show loading/error for large seasons 2025-10-15 13:27:48 -04:00
Damontecres
8cda98d6aa
Updates to series detail page 2025-10-07 14:46:37 -04:00
Damontecres
de36eb7072
Add dependency license info 2025-10-03 19:31:50 -04:00
Damontecres
b6f9aee5d4
Dependency bumps 2025-10-02 12:15:45 -04:00
Damontecres
31b4881d7c
Move files 2025-09-30 11:08:30 -04:00
Damontecres
bd75539cb6
Add device profile & improvement playback reporting 2025-09-23 19:45:48 -04:00
Damontecres
3e7f11c588
Minimal playback 2025-09-22 17:02:32 -04:00
Damontecres
80070f4174
Basic navigation 2025-09-22 12:09:41 -04:00
Damontecres
51ad92f539
Basic home page & images 2025-09-21 22:16:42 -04:00
Damontecres
76d78246db
Basics for user prefs, logging in, etc 2025-09-21 19:56:40 -04:00
Damontecres
763521aabf
Add hilt 2025-09-20 17:42:09 -04:00
Damontecres
b0fa3be520
Add dependencies 2025-09-20 17:06:40 -04:00