* For #11227 - Cleanup saved logins list when one is selected
Selecting a saved login will open a detail screen for it from where users can
change details or even delete that particular login.
After the change is made the user is brought back to the list of saved logins
where for a brief moment (< 1s) until we get a new response from
passwordsStorage.list() the user can see and even interact with the old list
of items, which may still contain the just deleted one.
To avoid users seeing obsolete logins or even interacting with them (selecting
a previosuly deleted item will result in a crash) we will clean the list of
logins just before the selected login is opened in the detailed view.
When returning for a brief moment the users may see the "loading" UX until
passwordsStorage.list() returns the up-to-date list of logins to display.
* For #11227 - Refactor SavedLoginsView to be closer to MVI
- Interactors should only get passed other Interactors or Controllers as
dependencies to which they should delegate user actions.
- Controllers should hold most of the business logic and get passed all final
dependencies they need to do their job.
* For 11657: add LP attribute for tracking protection
* For #11704: added tracking_protection_enabled attribute
* Added docs for the new attributes, linking to data-review to the mma.md
* Rename null to none when no ETP is enabled
Stricter synchronization by always using the same "loadedSearchEngines"
variable.
With "loadedSearchEngines" calling "refreshAsync()" we also get the fallback
engines to contain reddit and youtube (which are programatically added) and
also now we properly remember and display the engines added by user.
We have two search engine types:
- one based on MLS reported region,
- one based only on Locale.
There are multiple steps involved in returning the default search engine for
example and though at each step we could verify if a certain operation is
completed we are still exposed to concurrency issues.
Simplest and most effective way to make sure the MLS engines do not mix with
Locale based engines is to use the same type of engines for the entire duration
of the app. At the next cold start we'll verify again which engines to use.
Using the Locale based engines (fallbacks) is expected to only happen once, at
the first run of the application after being installed.