Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ca634a5 authored by Felipe Leme's avatar Felipe Leme
Browse files

AutoFill Framework refactoring.

The AutoFill Framework uses the same AssitStructure provided by the Assist API
and so far it was using the same methods as well, both internally and externally
(public API).

Sharing that internal code internally is fine, but the public APIs must distinguish between the 2 cases so they can fill the assist structures accordingly (although the initial implementation still shares the same logic).

This CL also splits the original 'auto-fill' request in 2 types of requests,
which are set by View flags:

- ASSIST_FLAG_SANITIZED_TEXT
- ASSIST_FLAG_NON_SANITIZED_TEXT

It also added new methods and callbacks to handle save requests.

Bug: 31001899
Test: manual verification

Change-Id:  I4eb09099dc19a43cb7e053e64d939aed3704b410
parent f2079a29
Loading
Loading
Loading
Loading
+15 −4
Original line number Original line Diff line number Diff line
@@ -34869,7 +34869,8 @@ package android.service.autofill {
    method public final android.os.IBinder onBind(android.content.Intent);
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onConnected();
    method public void onConnected();
    method public void onDisconnected();
    method public void onDisconnected();
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.SaveCallback);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
  }
  }
@@ -34887,6 +34888,11 @@ package android.service.autofill {
    method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
    method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
  }
  }
  public final class SaveCallback {
    method public void onFailure(java.lang.CharSequence);
    method public void onSuccess(int[]);
  }
}
}
package android.service.carrier {
package android.service.carrier {
@@ -42932,7 +42938,8 @@ package android.view {
    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void dispatchProvideStructure(android.view.ViewStructure);
    method public deprecated void dispatchProvideStructure(android.view.ViewStructure);
    method public void dispatchProvideStructure(android.view.ViewStructure, int);
    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSetActivated(boolean);
    method protected void dispatchSetActivated(boolean);
@@ -43198,8 +43205,10 @@ package android.view {
    method protected void onMeasure(int, int);
    method protected void onMeasure(int, int);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onProvideStructure(android.view.ViewStructure);
    method public deprecated void onProvideStructure(android.view.ViewStructure);
    method public void onProvideVirtualStructure(android.view.ViewStructure);
    method public void onProvideStructure(android.view.ViewStructure, int);
    method public deprecated void onProvideVirtualStructure(android.view.ViewStructure);
    method public void onProvideVirtualStructure(android.view.ViewStructure, int);
    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method public void onRtlPropertiesChanged(int);
    method public void onRtlPropertiesChanged(int);
@@ -43401,6 +43410,8 @@ package android.view {
    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
    field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
    field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
    field public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 2; // 0x2
    field public static final int ASSIST_FLAG_SANITIZED_TEXT = 1; // 0x1
    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
+16 −4
Original line number Original line Diff line number Diff line
@@ -37700,7 +37700,8 @@ package android.service.autofill {
    method public final android.os.IBinder onBind(android.content.Intent);
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onConnected();
    method public void onConnected();
    method public void onDisconnected();
    method public void onDisconnected();
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.SaveCallback);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
  }
  }
@@ -37718,6 +37719,11 @@ package android.service.autofill {
    method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
    method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
  }
  }
  public final class SaveCallback {
    method public void onFailure(java.lang.CharSequence);
    method public void onSuccess(int[]);
  }
}
}
package android.service.carrier {
package android.service.carrier {
@@ -46118,7 +46124,8 @@ package android.view {
    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void dispatchProvideStructure(android.view.ViewStructure);
    method public deprecated void dispatchProvideStructure(android.view.ViewStructure);
    method public void dispatchProvideStructure(android.view.ViewStructure, int);
    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSetActivated(boolean);
    method protected void dispatchSetActivated(boolean);
@@ -46384,8 +46391,10 @@ package android.view {
    method protected void onMeasure(int, int);
    method protected void onMeasure(int, int);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onProvideStructure(android.view.ViewStructure);
    method public deprecated void onProvideStructure(android.view.ViewStructure);
    method public void onProvideVirtualStructure(android.view.ViewStructure);
    method public void onProvideStructure(android.view.ViewStructure, int);
    method public deprecated void onProvideVirtualStructure(android.view.ViewStructure);
    method public void onProvideVirtualStructure(android.view.ViewStructure, int);
    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method public void onRtlPropertiesChanged(int);
    method public void onRtlPropertiesChanged(int);
@@ -46587,6 +46596,8 @@ package android.view {
    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
    field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
    field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
    field public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 2; // 0x2
    field public static final int ASSIST_FLAG_SANITIZED_TEXT = 1; // 0x1
    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
@@ -49956,6 +49967,7 @@ package android.webkit {
    method public abstract void onMeasure(int, int);
    method public abstract void onMeasure(int, int);
    method public abstract void onOverScrolled(int, int, boolean, boolean);
    method public abstract void onOverScrolled(int, int, boolean, boolean);
    method public abstract void onProvideVirtualStructure(android.view.ViewStructure);
    method public abstract void onProvideVirtualStructure(android.view.ViewStructure);
    method public default void onProvideVirtualStructure(android.view.ViewStructure, int);
    method public abstract void onScrollChanged(int, int, int, int);
    method public abstract void onScrollChanged(int, int, int, int);
    method public abstract void onSizeChanged(int, int, int, int);
    method public abstract void onSizeChanged(int, int, int, int);
    method public abstract void onStartTemporaryDetach();
    method public abstract void onStartTemporaryDetach();
+15 −4
Original line number Original line Diff line number Diff line
@@ -34966,7 +34966,8 @@ package android.service.autofill {
    method public final android.os.IBinder onBind(android.content.Intent);
    method public final android.os.IBinder onBind(android.content.Intent);
    method public void onConnected();
    method public void onConnected();
    method public void onDisconnected();
    method public void onDisconnected();
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public abstract void onFillRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.FillCallback);
    method public abstract void onSaveRequest(android.app.assist.AssistStructure, android.os.Bundle, android.os.CancellationSignal, android.service.autofill.SaveCallback);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.AutoFillService";
  }
  }
@@ -34984,6 +34985,11 @@ package android.service.autofill {
    method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
    method public android.service.autofill.FillCallback.FillData.Builder setTextField(int, java.lang.String);
  }
  }
  public final class SaveCallback {
    method public void onFailure(java.lang.CharSequence);
    method public void onSuccess(int[]);
  }
}
}
package android.service.carrier {
package android.service.carrier {
@@ -43200,7 +43206,8 @@ package android.view {
    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void dispatchProvideStructure(android.view.ViewStructure);
    method public deprecated void dispatchProvideStructure(android.view.ViewStructure);
    method public void dispatchProvideStructure(android.view.ViewStructure, int);
    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
    method protected void dispatchSetActivated(boolean);
    method protected void dispatchSetActivated(boolean);
@@ -43467,8 +43474,10 @@ package android.view {
    method protected void onMeasure(int, int);
    method protected void onMeasure(int, int);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method protected void onOverScrolled(int, int, boolean, boolean);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void onProvideStructure(android.view.ViewStructure);
    method public deprecated void onProvideStructure(android.view.ViewStructure);
    method public void onProvideVirtualStructure(android.view.ViewStructure);
    method public void onProvideStructure(android.view.ViewStructure, int);
    method public deprecated void onProvideVirtualStructure(android.view.ViewStructure);
    method public void onProvideVirtualStructure(android.view.ViewStructure, int);
    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method protected void onRestoreInstanceState(android.os.Parcelable);
    method public void onRtlPropertiesChanged(int);
    method public void onRtlPropertiesChanged(int);
@@ -43670,6 +43679,8 @@ package android.view {
    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
    field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
    field public static final android.util.Property<android.view.View, java.lang.Float> ALPHA;
    field public static final int ASSIST_FLAG_NON_SANITIZED_TEXT = 2; // 0x2
    field public static final int ASSIST_FLAG_SANITIZED_TEXT = 1; // 0x1
    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
+3 −3
Original line number Original line Diff line number Diff line
@@ -1737,8 +1737,8 @@ public class Activity extends ContextThemeWrapper
                                FillableInputField autoFillField = (FillableInputField) field;
                                FillableInputField autoFillField = (FillableInputField) field;
                                final int viewId = autoFillField.getId();
                                final int viewId = autoFillField.getId();
                                final View view = root.findViewByAccessibilityIdTraversal(viewId);
                                final View view = root.findViewByAccessibilityIdTraversal(viewId);
                                // TODO: should handle other types of view as well, but that will
                                // TODO(b/33197203): should handle other types of view as well, but
                                // require:
                                // that will require:
                                // - a new interface like AutoFillable
                                // - a new interface like AutoFillable
                                // - a way for the views to define the type of the autofield value
                                // - a way for the views to define the type of the autofield value
                                if ((view instanceof EditText)) {
                                if ((view instanceof EditText)) {
@@ -1751,7 +1751,7 @@ public class Activity extends ContextThemeWrapper
                    @Override
                    @Override
                    public void showError(String message) {
                    public void showError(String message) {
                        runOnUiThread(() -> {
                        runOnUiThread(() -> {
                            // TODO: temporary show a toast until it uses the Snack bar.
                            // TODO(b/33197203): temporary show a toast until it uses the Snack bar.
                            Toast.makeText(Activity.this, "Auto-fill request failed: " + message,
                            Toast.makeText(Activity.this, "Auto-fill request failed: " + message,
                                    Toast.LENGTH_LONG).show();
                                    Toast.LENGTH_LONG).show();
                        });
                        });
+0 −3
Original line number Original line Diff line number Diff line
@@ -450,9 +450,6 @@ public class ActivityManager {
    /** @hide requestType for assist context: generate full AssistStructure. */
    /** @hide requestType for assist context: generate full AssistStructure. */
    public static final int ASSIST_CONTEXT_FULL = 1;
    public static final int ASSIST_CONTEXT_FULL = 1;


    /** @hide requestType for assist context: generate full AssistStructure for auto-fill. */
    public static final int ASSIST_CONTEXT_AUTOFILL = 2;

    /** @hide Flag for registerUidObserver: report changes in process state. */
    /** @hide Flag for registerUidObserver: report changes in process state. */
    public static final int UID_OBSERVER_PROCSTATE = 1<<0;
    public static final int UID_OBSERVER_PROCSTATE = 1<<0;


Loading