* Add private extension install method
Private extensions are put inside private data directory of the running app, so
this kind of extensions can only be used by the running app and not shared with
other apps.
One limitation of private extension is the lack of deeplink handlers (if there's
any) since the extension APK is not installed to the system.
When both kinds of extensions are installed with a same package name, shared
extension (the one installed to the system) will be used unless the version
codes are different. In that case the one with higher version code will be used.
* update
* More coil
* ExtensionController: Drop first text change event
* Browse-Source: Remove unnecessary load
* ExtensionPresenter: Increase debounce timeout
To avoid heavy list reload during first enter animation
* 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