App can be installed on devices with no camera modules. Like Android TV boxes.
Will skip presenting the option to sign in by scanning a qr code in this case
and default to login with email and password.
* Extract controller into it's own class. Implement find dupes and filter based on username.
Create edit login controller. Add text watchers and check for duplicates.
Edit controller test
* Find duplicates and save to store
* Retrieve duplicates from AC and check list on username text changed
Move duplicates logic into the controller
* Add glean pings for delete and edit. Move logic for login manipulation into the datastore.
* Use correct threads in controller. Enable save button when applicable.
Save enabled in datastore.
Move login data to datastore
Rebase with password error states
Update metrics to be more specific for edit
* Create logins controller for AC calls
* Interactor and controller methods for edit login. Add edit view to separate out some layout manipulation.
Inflate view in edit fragment. Double layout showing up.
Edit view
Controller tests
Controller tests passing
Interactor tests
Lint and detekt cleanup
* Remove datastore and use storage controller for all logins calls to password storage.
Addressed comments
Lint
:
Rebase - 1
* 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.
* Set edit text listeners
* Set clearable icons and change with error states
* Clear text buttons show and hide
* Move error checks to afterTextChanged. Refactor. Remove unused color.
Added an extension function that pops the backstack of the fragment so the user is redirected to the Logins and passwords screen.
This is done to force the user to re-authenticate if he wants to re-enter the saved logins flow.
Additionally, some UI elements are being hidden on each Fragment since they were remained visible on the Logins and passwords screen's UI.
* Create editable view and fragment. Update login info page to display options menu with edit and delete.
* Create feature flag for edit. Check flag in the login detail fragment and default to just delete.
* Add three-dot kebab options menu in login detail fragment. Add title to the login item.
* Nav to and from edit view on save and back pressed.
* Save login through AC login manager. Clear text in editable field on button click.
* Match colors, fonts, dimens to UX specs for edit logins. Enable password reveal/hide and clearing text fields.
* Refactoring logins fragments. Using component Login object for consistency.
Fetch login list when saved logins are opened. Fetch login details when detail view is opened.
Revert "Fetch login list when saved logins are opened. Fetch login details when detail view is opened."
This reverts commit 44fe17166c3332b330229258b2e8982832672e3b.
* Using parcelable login and Login component class to pass ids and items between fragments
* Retrieve login from storage when viewing login details.
Rename login logic for consistency.
Ktlint cleanup
Fix nits and naming consistency.
* UX consistency for login detail and edit login pages
* Rebasing with logins sort - updating logins store.
* Rebasing with logins sort - merging fragments and controllers.
* Lint and removing unused files.
* UX cleanup.
* Update string description
Currently we support sorting by name and by last used. Also, the selected
option is saved in shared preferences so that the last option chosen by
the user is properly displayed even after the app was restarted.
The a-c side of this work is in https://github.com/mozilla-mobile/android-components/pull/6128
This switches Fenix to use `SyncableLoginsStorage`, which caches a connection internally
on first access, and doesn't expose any lock/unlock APIs at the public boundary.