* Enable sub-languages on app first run.
* Fix wrong language code string parsing.
* Fix some build issues due to rebase.
* Use PreferenceHelper and remove an extra preference.
* Remove a constant.
* Revert "Use SharedFlow for available extensions to always emit the value (#7609)"
This reverts commit 73901f50c0.
* ExtensionPresenter: Explicitly set refreshing status
* Scope coroutines job to presenter
* cleanup
* fix toast
- Replace ExtensionManager relay and observable with Flow
- Inverse SourceManager dependency
- SourceManager observers ExtensionManager flow
- Separate SourceData from SourceRepository as it created a circular dependency
* Use Compose in Source tab
* Replace hashCode with key function
* Add ability to turn off pins moving on top of source list
* Changes from review comments
* Implement new extension install methods
* Fixes
* Resolve feedback
* Keep pending status when waiting to install
* Cancellable installation
* Remove auto error now that we have cancellable job
* Indicate obsolete extensions
* Make obsolete indicators red
* Move obsolete extensions up the list
* Add base button theme for holder
* Use red button color state instead of explicit text color
Kotlin: 1.2.71 -> 1.3.50
Coroutines: 0.30.2 -> 1.3.1
Gradle: 4.6 -> 5.4.1
Android gradle plugin: 3.2.1 -> 3.5.0
This brings us down to *one* experimental coroutine API, and we've
opted in to using it in just *one* place.
(The fact that the API to opt-in to using an experimental API in a
specific place is *also* experimental surely will not come back to
bite us later.)