OSDN Git Service

Send AutofillValue of Views that originated a forced request.
authorFelipe Leme <felipeal@google.com>
Tue, 2 May 2017 20:53:15 +0000 (13:53 -0700)
committerFelipe Leme <felipeal@google.com>
Tue, 2 May 2017 20:56:11 +0000 (13:56 -0700)
Bug: 36034784
Test: CtsAutoFillServiceTestCases pass
Test: LoginActivityTest.testAutofillManuallyPartialField()

Change-Id: I79970f236f0ae3caaff60acc19ab8a08c3cb2ef4

services/autofill/java/com/android/server/autofill/Session.java

index 018fb68..9d03fde 100644 (file)
@@ -221,7 +221,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
 
                 final int numContexts = mContexts.size();
                 for (int i = 0; i < numContexts; i++) {
-                    fillStructureWithAllowedValues(mContexts.get(i).getStructure());
+                    fillStructureWithAllowedValues(mContexts.get(i).getStructure(), flags);
                 }
 
                 request = new FillRequest(requestId, mContexts, mClientState, flags);
@@ -235,10 +235,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
      * Updates values of the nodes in the structure so that:
      * - proper node is focused
      * - autofillValue is sent back to service when it was previously autofilled
+     * - autofillValue is sent in the view used to force a request
      *
      * @param structure The structure to be filled
+     * @param flags The flags that started the session
      */
-    private void fillStructureWithAllowedValues(@NonNull AssistStructure structure) {
+    private void fillStructureWithAllowedValues(@NonNull AssistStructure structure, int flags) {
         final int numViewStates = mViewStates.size();
         for (int i = 0; i < numViewStates; i++) {
             final ViewState viewState = mViewStates.valueAt(i);
@@ -257,8 +259,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
             }
             if (mCurrentViewId != null) {
                 overlay.focused = mCurrentViewId.equals(viewState.id);
+                if (overlay.focused && (flags & FLAG_MANUAL_REQUEST) != 0) {
+                    overlay.value = node.getAutofillValue();
+                }
             }
-
             node.setAutofillOverlay(overlay);
         }
     }