Commit graph

966 commits

Author SHA1 Message Date
Damontecres
5d6b5527dc
Save/restore focus 2026-03-04 17:53:06 -05:00
Damontecres
2879cd477c
Various fixes 2026-03-04 16:03:40 -05:00
Damontecres
d8a58a6d96
Add stop button 2026-03-04 09:25:43 -05:00
Damontecres
3359c8ac32
Fixes for stopping now playing 2026-03-04 09:19:11 -05:00
Damontecres
c443ddb6c4
Fix some animations 2026-03-03 22:52:53 -05:00
Damontecres
84611c24ed
Add version to state 2026-03-03 22:39:15 -05:00
Damontecres
1af906fe90
Change remove to more context menu button 2026-03-03 22:35:15 -05:00
Damontecres
c72f444448
Add remove from queue button 2026-03-03 22:30:47 -05:00
Damontecres
73b626facd
Add long click queue operations 2026-03-03 22:27:39 -05:00
Damontecres
6471b198b2
Add music to search 2026-03-03 21:50:36 -05:00
Damontecres
18e3268638
Dialog show/hide lyrics 2026-03-03 21:28:30 -05:00
Damontecres
59a0bee0a7
Merge branch 'main' into fea/music 2026-03-03 19:15:37 -05:00
renovate[bot]
6867ba7657
Update Dependencies (#1013) 2026-03-03 14:35:11 -05:00
renovate[bot]
6ea5fd2121
Update actions/upload-artifact action to v7 (#1009)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact)
| action | major | `v6` → `v7` |

---

### Release Notes

<details>
<summary>actions/upload-artifact (actions/upload-artifact)</summary>

###
[`v7`](https://redirect.github.com/actions/upload-artifact/compare/v6...v7)

[Compare
Source](https://redirect.github.com/actions/upload-artifact/compare/v6...v7)

</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:eyJjcmVhdGVkSW5WZXIiOiI0My4zNi4yIiwidXBkYXRlZEluVmVyIjoiNDMuMzYuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-03 14:34:44 -05:00
Ray
be90a42c57
Various fixes (#1030)
## Description
Fixes several small issues throughout the app

- Adds 1440p as a resolution option
- Removes the delay when d-pad seeking on the seek bar & reduces it
slightly when controls are hidden
- Fixes padding one home customize pages
- Adds a title to the search for dialog

### Related issues
Fixes #1017

### Testing
Emulator mostly

## Screenshots
N/A

## AI or LLM usage
None
2026-03-03 13:46:55 -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
Damontecres
609f618642
Add media session 2026-03-02 19:20:18 -05:00
Damontecres
dfed290125
Additional rows for albums & artists 2026-03-02 17:58:57 -05:00
Damontecres
5a4528541a
Better shuffle & repeat buttons 2026-03-02 17:30:39 -05:00
Damontecres
ff0417b7e7
Move buttons to new composable 2026-03-02 16:53:27 -05:00
Damontecres
7044b4aa32
Move now playing song title to page 2026-03-02 16:36:49 -05:00
Ray
8935067c5a
Add option to delete media (#1014)
## Description
Adds a setting to enable "Media management" which adds a context menu
item to delete media. This is accessible using either the More button or
long clicking.

You can delete episodes, seasons, series and movies/videos.

If order for the option to appear the current user must have server-side
settings for "Allow media deletion from" enabled for the library and the
in-app setting under Settings->Advanced Settings->"Show media management
options".

### Related issues
Closes #104 

### Testing
Emulator

## Screenshots
### Context menu
![delete_context_2
Large](https://github.com/user-attachments/assets/cabc3c24-1b43-4f88-8d71-b7275f9eadc4)


### Confirmation
![delete_confirm
Large](https://github.com/user-attachments/assets/8036dde1-8a51-424b-bbdd-f2826dd3e0ab)

## AI or LLM usage
None
2026-03-02 15:38:41 -05:00
Justin Caveda
0b73b4cf64
Fix: optimize suggestions performance (#849)
## Description
- Aims to further optimize performance for the suggestions fetching

### Related issues
Fixes #833 

### Testing
Android Emulator
NVIDIA Shield Pro 2019

## Screenshots
N/A

## AI or LLM usage
AI being used to assist with updating/creating unit tests
2026-03-01 16:59:44 -05:00
Damontecres
4de4144648
UI updates 2026-03-01 15:51:11 -05:00
Damontecres
9fb77854e4
Unify logic for albums & artists 2026-03-01 10:34:14 -05:00
Damontecres
7a869d9f47
Implement various queue functions 2026-03-01 10:16:10 -05:00
Damontecres
ea243975ad
WIP 2026-02-28 23:30:26 -05:00
Damontecres
6a1725fd3d
Adjust sort options 2026-02-28 21:23:29 -05:00
Damontecres
d37c7604d2
WIP lyric selection 2026-02-28 20:38:32 -05:00
Damontecres
6fa3f550b0
UI changes to now playing nav drawer item 2026-02-28 19:02:14 -05:00
Damontecres
dd7795e2fd
Add basic artist page 2026-02-28 19:01:54 -05:00
Damontecres
82f8a63c86
UI improvements & bug fixes for queuing 2026-02-28 17:47:01 -05:00
Damontecres
49adae9365
Basic sync lyric support 2026-02-28 16:19:05 -05:00
Damontecres
bd7fba14d1
Merge branch 'main' into fea/music 2026-02-28 14:45:15 -05:00
voc0der
fd9063fbad
Hold-to-seek acceleration for playback DPAD and seekbar (#900)
## Description
- Adds hold-to-seek acceleration for left/right DPAD input during
playback skip handling.
- Reuses one shared, duration-aware acceleration profile for both
playback DPAD and seekbar skipping.
- Extracts acceleration logic into a shared helper to keep playback and
seekbar behavior consistent.
- Slows the acceleration ramp (about one-third) to improve control
during longer holds.
- Preserves tap-on-release behavior: single taps seek on key release,
while holds seek on repeated key-down without an extra release step.
- Normalizes unknown/unset duration values to use the shortest-content
acceleration profile.
- Added unit coverage for shared seek acceleration math to prevent
accidental regression in ramp thresholds.

### Related issues
Supersedes #846  
Incorporates #784  
Closes #522

### Testing
Tested on Nvidia Shield Pro 2019.

- Quick left/right tap still performs normal skip behavior.
- Holding left/right seeks repeatedly with progressive acceleration.
- Seekbar hold uses the same acceleration profile as playback hold.
- Releasing after a hold does not trigger an extra seek step.

## AI or LLM usage
Codex 5.3 and Claude Opus 4.6 were used for implementation, debugging,
and cross-review. Changes were manually validated on device.

---------

Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com>
2026-02-28 14:35:02 -05:00
Ray
55466f803c
Better animation to show/hide headers on grid pages (#1015)
## Description
Changes the animation for showing/hiding the header title/buttons on
grid pages.

This eliminates the awkward jump the grid does to fill the screen.
Instead it smoothly resizes.

### Related issues
Fixes the second item in #221

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-27 01:00:44 -05:00
Ray
b65e55f4ed
A few small UI fixes (#1012)
## Description
- Restores corner text for episode cards
- Always show end time on playback overlay instead of it being
controlled by the "Show Clock" setting
- Better logic to determine person's role in media

### Related issues
Fixes #1010
Fixes #1004
Fixes #975

### Testing
Emulator

## Screenshots
N/A

## AI or LLM usage
None
2026-02-26 20:27:22 -05:00
Ray
9b995bf6ba
Fix some IO related crashes (#1008)
## Description
- Catch network exceptions when querying to populate the nav drawer
- Perform screensaver work on IO thread
- Fix possible crash if screensaver service runs while regular activity
is destroyed
- Fix genre images & backdrop images not loading

This PR also adds an Jellyfin SDK `ApiClient` wrapper to push all
network calls onto the IO thread. And tries to use a more strict
network-on-main policy for debug builds.

### Related issues
Fixes #994
Fixes #1001
Should fix #1003

### Testing
Emulator with simulated exception throws

## Screenshots
N/A

## AI or LLM usage
None
2026-02-26 15:48:39 -05:00
Ray
37d52ef57e
Update readme images to v0.5.1 2026-02-25 20:38:16 -05:00
Ray
7f10b5a25e
Use Q&A for questions [skip ci] 2026-02-25 15:15:02 -05:00
Damontecres
138efcde00
Fix issue templates [skip ci] 2026-02-25 15:09:46 -05:00
Ray
9d857bc59e
Move new feature requests to discussions (#984)
## Description
Update the issue templates to direct new feature requests to GitHub
Discussions

### Related issues
Closes #982
2026-02-25 15:08:09 -05:00
Ray
a7e86fbc15
Add in-app & Android TV screensaver (#946)
## Description
Adds both an optional in-app and Android TV OS (DreamService)
screensaver

Has settings for:
- Starting delay, options from 30s to 1 hour
- Duration to show each image, 30s to 2 minutes
- Show clock (separate from app-wide clock)
- Toggle animated zooming
- Set a max age rating to limit what content is shown
- Included media types: movies, tv shows, and/or photos

By default only Movies & TV Shows are included. But if you have like
family albums on your server, you could enable Photos too.

There's also an button to start the screensaver so you can see what it
looks like.

### Related issues
Closes #230

### Testing
Emulator, Onn 4k pro, nvidia shield using both in-app and OS
screensavers

## Screenshots
![screensaver_settings
Large](https://github.com/user-attachments/assets/9b3240dd-81cb-4c20-bc4e-b2bf38698b2f)

## AI or LLM usage
None

## Acknowledgements

Some of the skeleton code for setting up the `DreamService` with the
right lifecycle was copied and modified from the [official app's
implementation](https://github.com/jellyfin/jellyfin-androidtv/blob/master/app/src/main/java/org/jellyfin/androidtv/integration/dream/DreamServiceCompat.kt).
2026-02-25 14:11:00 -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
Damontecres
7703bcbd13
Refactoring queue 2026-02-24 18:28:19 -05:00
Damontecres
65b38d1231
Merge branch 'main' into fea/music 2026-02-24 17:15:24 -05:00
Damontecres
1b94ab9bec
Release v0.5.1 2026-02-24 16:15:25 -05:00
Damontecres
69be7311ab
Fix verify step 2026-02-24 16:15:04 -05:00
Damontecres
33cd4d04aa
Release v0.5.1 2026-02-24 16:01:52 -05:00
Ray
14483410fd
Translations 2026-02-24 (#969)
Translation updates as on 2026-02-24

Thank you to all contributors!
2026-02-24 16:00:44 -05:00