birdbird 5501c3294b di: stop regenerating the Koin music service module at runtime
The music service module was unloaded and reloaded by MusicServiceFactory on
every library access state change, which forced MusicServiceFactory and
ImageLoaderProvider to inject the Koin instance itself and the fetcher
factories to resolve the SubsonicAPIClient lazily from a volatile module.

- MusicServiceFactory now owns the swappable delegates directly: it builds
  OfflineMusicService or CachedMusicService(RESTMusicService(client)) for the
  current access state, exposes apiClient() alongside getMusicService(), and
  keeps resetMusicService() as the explicit hook for server property edits
- the delegate builders are constructor-injectable, keeping the switch logic
  testable without the REST stack
- ImageLoaderProvider takes a () -> SubsonicAPIClient provider and rebuilds
  the loader when the client instance changes, replacing the ServerID Koin key
- CoverArtFetcher/AvatarFetcher factories resolve the client through the
  factory instead of the module
- musicServiceModule is deleted; the DI graph is static and no module is
  ever unloaded at runtime
2026-10-01 13:33:50 +02:00
2026-02-15 17:08:45 +00:00
2026-03-10 18:43:48 +01:00
2025-04-04 12:55:13 +00:00
2026-01-23 15:02:40 +00:00
2026-08-27 23:24:09 +02:00
2026-07-08 07:59:45 -05:00
2026-07-08 07:59:45 -05:00
2017-01-12 09:27:58 +01:00
2026-08-13 10:53:16 +02:00
2022-10-01 11:42:55 +00:00

Ultrasonic

Ultrasonic is free and open-source music streaming Android client for OpenSubsonic API (version 1.7.0 or higher) compatible servers.

Help wanted

We currently don't have that much time to spend developing Ultrasonic, so any contributions or active developers are always welcomed. Have a look at CONTRIBUTING to get started.

Download

App is available to download at following stores:

Get it on Google Play Get it on F-Droid Get it on GitLab

Warning: All three versions (Google Play, F-Droid and the APKs) are not compatible (not signed by the same key)! You must uninstall one to install the other, which will delete all your data.

If you want to use the version downloaded from F-Droid or from GitLab with Android Auto, you must enable Unknown Sources as it is described in this wiki page.

Bugs and issues

First, see if your issue haven’t been yet reported here, otherwise open a new issue.

Documentation

See documentation.

Contributing

See CONTRIBUTING.

Supported (tested) OpenSubsonic API implementations

Other OpenSubsonic API implementations should work as well as long as they follow API documentation.

License

This software is licensed under the terms of the GNU General Public License version 3 (GPLv3).

Full text of the license is available in the LICENSE file and online.

S
Description
Free and open-source music streaming Android client for Subsonic API compatible servers
Readme GPL-3.0
36 MiB
0 Stars 1 Watchers 0 Forks
Languages
Kotlin 100%