Change code to allow observing the ZoneId and update display on changes. The ZoneId is selected according to user settings, it's either the conference timezone like before or the local timezone which is monitored in real time.
fixes#66
- Replace all usages of LiveData with Flow and StateFlow
- Replace Paging 2 with Flow-based Paging 3
- Inject custom ViewModel arguments directly through custom ViewModel Factories.
Remove AlarmIntentService (which was based on deprecated JobIntentService) and use use simple coroutines queued using a Mutex instead.
The execution time is so quick that there is no need to create expedited background Jobs for the alarm scheduling tasks.
Use BroadcastReceiver.goAsync() to build the notification asynchronously from a coroutine without the need to launch a Service or acquiring a special wake lock.
- change database to use destructive migration and properly clear the extra data on each migration
- store database extra data using the datastore-preferences library instead of SharedPreferences
- move ScheduleDao access from TracksFragment to TracksViewModel and rename previous TracksViewModel to TracksListViewModel
- centralize all UI State preferences in the same SharedPreferences file and inject it. It is loaded asynchronously on application startup to minimize blocking the main thread
- change days cache in ScheduleDao from LiveData to a hot Flow.
- update target SDK to 31 and libraries to their latest version
- enable back PhotoViewDrawerLayout
- add PendingIntent flags and manifest entries required by target SDK 31
- update Travis config to API 31 build tools
- add missing experimental Kotlin API annotation.
Encapsulate all user settings in UserSettingsProvider singleton and inject it where required.
The services injected in the main application class will now be auto-started.