Migrate PlaylistsFragment, PodcastFragment, SelectGenreFragment, SharesFragment,
ChatFragment and LyricsFragment out of the legacy package:
- Replace ListView + ArrayAdapter screens with MultiListFragment (RecyclerView +
multi-type binders) backed by new ListModels (PlaylistListModel,
PodcastListModel, GenreListModel, ShareListModel) with LiveData caching and
pull-to-refresh via GenericListModel
- Add generic TextRowBinder for single-line entries and ShareRowBinder for share
rows; remove GenreAdapter and ShareAdapter
- ChatFragment: replace java.util.Timer with a lifecycle-aware
repeatOnLifecycle(RESUMED) refresh loop and register the chat observer once in
onViewCreated instead of on every onResume
- Share edit dialog: initialize the expiration picker from the share's current
expiry (remaining time, rounded up) instead of defaulting to "no expiration",
which previously wiped the expiry when the dialog was confirmed
- Drop the obsolete podcasts/select_genre/select_playlist/select_share layouts
and update the navigation graph to the new fragment classes
It became necessary in order to have different types for Tracks vs Albums,
instead of just differentiating by isDirectory: Boolean.
Also:
* Fix Album display in SearchFragment.kt
* Use same ids in all lists
* There is one database for each Server
* Index items are saved with a "musicFolderId" prop, which makes it possible to filter the database by musicFolder without necessarily having to query the server for it.
* Databases for new Servers are created on the fly
* If the user removes a server, the respective database is deleted.
* Splits former SelectAlbumFragment into separate fragments for Albums and general collections of tracks
* Renames and refactors SelectArtist view to extend the new Generic classes
* Adds error handling (Fixes#484)
* Adds EndlessScrolling capabilities to all Album Lists
* Uses RecyclerViews and LiveData for performance and in-memory caching
* Refreshes the UI to be aligned with the ArtistList UI
* Add a new GenericEntry to the domain data classes, and make other types extend it