* For #5577 - Adds button to add a new search engine
* For #5577 - Adds custom engine store
* For #5577 - Creates a custom SearchEngineProvider
* For #5577 - Gives the ability to delete search engines
* For #5577 - Adds the UI to add a custom search engine
* For #5577 - Adds form to create a custom search engine
* For #5577 - Adds the ability to add a custom search engine
* For #5577 - Adds the ability to delete custom search engines
* For #5577 - Selects the first element on the add custom search engine screen
* For #5577 - Prevents adding a search engine that already exists
* For #5577 - Styles the add search engine preference
* For #5577 - Makes the name check case-insensitive
* For #5577 - Fix bug where home screen doesnt see new search engines
* For #5577 - Moves Search URL validation to its own type
* For #5577 - Fixes linting errors
* For #5577 - Adds the ability to edit a custom search engine
* For #5577 - Allows the user to edit a serach engine even when it is the last item in the list
* For #5577 - Adds an undo snackbar when deleting a search engine
* For #5577 - Moves all of the strings to be translated
* For #5577 - Fixes bug when deleting your default search engine
* For #5577 - Puts adding search engines behind a feature flag
* For #5577 - Navigate to custom search engine SUMO article when tapping learn more
* For #5577 - Fixes nits
* For #5577 - Uses concept-fetch to validate search string
* For #5577 - Adds string resources for the cannot reach error state
- added engine hashmap so that we create each type of search provider once
(previously the providers to be added were checked by id, but since the id
is a UUID, it was always unique -> bug with multiple providers with same engine
but different id
- refactored update() flow so that it's more understandable + remove complex
method warning
The user has the option to go to 'Shortcuts' -> 'Search engine settings' to
modify the default search engine. When returning from that settings screen we
need to update it to account for any changes.
For this we will check the current default engine against a previously stored
value in a newly added 'defaultEngineSource' property from SearchState class.
Also, I modified 'SearchStoreTest' by adding the new parameter to the
'SearchState' constructor.
With this we can remove the `whenStarted` workaround. This new API
internally creates (and uses) a scope bound to the fragment's view and
will not invoked the lambda (send state updates) when the view is
detached or the fragment's lifecylce is stopped or destroyed.
* For #3633 - Adds SearchStore
* For #3633 - Refactors AwesomeBarUIView
* For #3633 - Refactors ToolbarUIView to use lib-state
* For #3633 - Fixes a couple of state bugs
* For #3633 - Moves all user interaction to SearchInteractor
* For #3633 - Adds kdocs to SearchStore and SearchInteractor
* For #3633 - Adds documentation for the properties on SearchState
Also removes uneccessary property
* For #3633 - Creates `StateViewModel` to handle state restoration
* For #3633 - Adds a test for onTextChanged
* For #3633 - Adds tests for SearchInteractor
* For #3633 - Fixes bugs and adds documentation