1. Added a new API for a connected auto-fill service to
disable itself
2. Added a new shell command to destroy all pending sessions
which is used in CTS tests
3. Fixed a bug where the unbind timeout was in minutes
instead of seconds
Test: wrote CTS tests, all auto-fill tests pass
bug:35848030
Change-Id: I681605aa0b8c004a0f14e30b57117c291d89a894
For now it's a "1-to-1" refactoring that keeps the same
functionalities, but soon SaveInfo will be expanded to
allow the AutoFillService to customize it.
Bug: 35727295
Test: CtsAutoFillServiceTestCases pass
Test: m update-api
Change-Id: I5aaa705be2b32590048f70ed0142437e05df94b7
1. Abstracted the fill/save view and window management
in dedicated classs
2. Avoided the need of a second window to detect outside
touches
3. Simplified the fill-ui window management
4. Moved the UI in its own package to ease mmigration to
sys UI.
5. Removed hard-coded colors from the layout
6. Make sure the save UI cannot grow as wide as the screen
as this would not look good on tablets
7. Update the save UI to look closer to mocks
Test: CTS tests pass
Bug: 35708258
Change-Id: Ia74a5aad6f16bba0047a9e8e61958c77af0d358d
- Shorten history line by removing less relevant items.
- Decrease number of history items (from 100 to 20).
- Removed redundant logs from service (and kept them on manager)
- Use {} on all log statements.
- Remove DEBUG guard on some important messages.
- Remove DEBUG guard from service-side toString() implementations.
- Don't log FLAG_FOCUS_LOST actions.
BUG: 33197203
Test: manual verification
Change-Id: I30466ab3c0d12cfa2ad68b2b2a107d5890256845
It was accidentally broken during a previous commit where the CTS test
failure was ignored by a known issue being fixed in another change -
this change fixes both problems.
Bug: 33550221
Bug: 3380254
Test: CtsAutoFillServiceTestCases pass (for real now :-)
Change-Id: I5b2aa6060995ca255e51d85aa6ec93a886fa522f
They got lost in a previous refactoring....
Bug: 35395043
Test: CtsAutoFillServiceTestCases pass
Test: manual verification
Change-Id: I4e70f84185d6708ea0ebfa831c160e859fcf9e5c
They died already, but came back to life due to a last-minute API change.
BUG: 33197203
Test: manual verification
Test: CtsAutoFillServiceTestCases passes
Change-Id: I4c248fd30ff087475116326d01e7c5a1c507cd74
* Fix a layering issue where auto-fill manager which is in view
depended on activity which is in app
* Moved auto-fill classes to view or service based on their
purpose and removed dependecy on the classes in view to the
classes in service
* Push state to local auto-fill manager whether auto-fill is
enabled to avoid making IPC for every focus transition if
the user did not enable the feature
* Remove unnecessary offload to messages when handling calls
to auto-fill manager service as these are made over a oneway
interface and in general they do almost no work and typically
we do these on the binder thread
* Removed id from data set and fill response as the provider
can embed everything it needs to id them in the auth pending
intent
* Enforce the auth UI to be only an activity as this will work
with multi-window, recents, and back and also does not require
draw on top of other app special permission
* Authentication also no longer requires passing a remotable
callback to the auth activity but the activity handles the
request as if called for a result
* Handling stopping of a user to clean up in-memory state as
well as handling when a user gets unlocked as a provider may
be non-direct boot aware
* User the correct context when creating an auto-fill manager
* Move the receiver that listens for requests to hide system
windows to the manager service as the UI is a singleton and
no need every per-user state to register its own
* Removed extras from dataset as the only case a provider needs
to associate state with a dataset is for auth and the provider
can embed this data in the auth pending intent
Test: manual and CTS
Change-Id: I4bc54c13cf779d7f6fdb3ab894637f9fac73f603
These commands are useful during development and CTS tests (for
example, the test can assert there is no dangling session after it's
finished).
BUG: 33802548
Test: manual verification
Change-Id: I61f96e30d07642fa2165df9b982c6bf32a4e8716
Auto-fill has a shell command that is useful for development
which is currently exposed as a remote method allowing any app
to call it reflectively. Since only case this method is called
is when handling a shell command there is no need to expose it
to IPC over binder.
Test: manual
Change-Id: Iac20b4a39c7065e254f8aa277d1f2fd1c38b24a8
- Never display AutoFillValue.text, because it could be sensitive.
- Simplified AutoFilllId.
Fixes: 35171960
Test: manual verification
Test: CtsAutoFillServiceTestCases passes
Change-Id: I0853cabb695b842c947b0ae007e344f5d8385395
* Add appToken.
* Add mWindowSizeListenerView for getting the displayable window size
(screen - system windows - soft input).
* Add mContentView when we have all the necesssary info.
* Change mContentView only if something changes (height, bounds,
displayBounds).
Bug: 34637800
Test: CTS
Change-Id: Icef5eb8d8e0b54376c84cbcaa5719aee0520e345
This is yet another big refactoring:
- AutoFillManager keeps track of its current AutoFillSession.
- Views call AFM.startSession(View) when they can trigger autofill.
(virtual views can call it as well). At this point, the manager
sets an AutoFillSession, gets the activity token, and passes it to
the service.
- Subsequent calls to AFM.start() will be ignored since the session
is set.
- When the Activity is gone, it calls AFM.finishSession().
- Simlilarly, virtual views could call it as well.
- Added getAutoFillValue() to View.
- Removed AFM.updateAutoFillInput(childId): virtual views should now
call startSession(childId) to start a session, and use the
VirtualViewListener callbacks for updates.
- Change AutoFillValue to use String (which is immutable) instead of
CharSequence for text values.
- Check if view is enabled before auto-filling.
- Removed 'cmd autofill fill' since it would require the appCallback
- Automatically dismiss the snack bar after 30s
- Moved the "don't change autofill value when autofilling" Inception
logic into the service side.
- Etc...
BUG: 34819567
BUG: 33269702
BUG: 31001899
Test: manual verification
Test: CtsAutoFillServiceTestCases passes
Change-Id: I5fad928d4d666701302049d142026a1efa7291cd
1. Move management of the remote fill service in a dedicated
class that abstracts away the async and ephemeral nature
of the binding.
2. Update auth to move fingerprint out of the platform and
allow response and dataset auth.
3. Cleaned up the fill and save callback classes.
4. The UI is now shared among all sessions and cleaned up.
5. Reshuffled the remote callbacks to have cleaner separation.
6. Cleaned up and tightened the reponse and dataset classes.
7. Added API to support communicationn with intent based auth.
Test: CTS + manually
bug:31001899
Change-Id: Idc924a01d1aea82807e0397ff7293d2b8470d4d6
* Add appToken.
* Add mWindowSizeListenerView for getting the displayable window size
(screen - system windows - soft input).
* Add mContentView when we have all the necesssary info.
* Change mContentView only if something changes (height, bounds,
displayBounds).
Bug: 34637800
Test: CTS
Change-Id: Iade6179f6303a6d4777e99fa6c600ba6352ee863
Currently, the onProvideAutoFillStructure() methods can be called
twice: to auto-fill an activity and to save the activity's data
in the service.
The problem with this approach is that when the save workflow is
called, the activity might have been gone. Hence, a proper approach
is to keep the initial AssistStructure data in the system_service
memory, watch for view changes, and then passed the new structure
back to the AutoFillService.
A side effect of this change is that we need another way to determine
if the view is sanitized or not. For "standard" views, that will be
defined based on whether the view content come from a resource or not,
but that logic is not implemented yet (for now, all views will be
considered sanitized, except for TextView passwords). For "custom"
views (such as WebView), this logic is responsibility of the view
implementation, through the newChild() method, which now takes a
flag (whose value could be AUTO_FILL_FLAG_SANITIZED for sanitized
views).
The SaveCallback.onSuccess() method was simplified: it does
not need a list of saved ids anymore the auto-fill UI will not use it
anymore.
Another side effect is that the Save notification is gone - until
it's attached again, it can be test by using:
adb shell cmd autofill save
Finally, hook AutoFillUI on ACTION_CLOSE_SYSTEM_DIALOGS events.
BUG: 33269702
BUG: 31001899
Test: manual verification
Test: CtsAutoFillServiceTestCases passes
Change-Id: I907a7e21d1b3cd1ab6dec3a08d144a52655da46f
With this change, data flows strictly like so:
AFManagerService -> AFManagerServiceImpl -> Session -> ViewSession
A ViewSession is introduced to 1) know when we can show the fill UI,
and 2) know when we need to create or update the current fill UI.
Each class has its own responsibilities:
* AFManagerService - interface to app process
* AFManagerServiceImpl - per user id
* Session - per activity
** AutoFillUI - per activity (can consider moving to ViewSession)
* ViewSession - per view
Bug: 34633695
Change-Id: Ia197a5c40219379ab6a95d0cf5c39ac4f5470d0e
Test: CTS, Manual with GMS Core