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

Commit d09ccb8d authored by Felipe Leme's avatar Felipe Leme
Browse files

Added auto-fill support for Spinner.

Spinner is a special kind of list-value field because its auto-fillable
values are not currently present in the assist structure: this change
adds a getAutoFillOptions() to fill that void, and implements the
auto-fill APIs on Spinner.

It also fixes RadioGroup.getAutoFillValue() - it should return the index
of the child, not its resource id.

Bug: 33550221
Test: CtsAutoFillServiceTestCases (with new tests) pass
Change-Id: I625e7dd705fade56fda490fcd3c4446c0c245ee1
parent fc5cbc90
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -6547,6 +6547,7 @@ package android.app.assist {
  public static class AssistStructure.ViewNode {
  public static class AssistStructure.ViewNode {
    method public float getAlpha();
    method public float getAlpha();
    method public android.view.autofill.AutoFillId getAutoFillId();
    method public android.view.autofill.AutoFillId getAutoFillId();
    method public java.lang.String[] getAutoFillOptions();
    method public android.view.autofill.AutoFillType getAutoFillType();
    method public android.view.autofill.AutoFillType getAutoFillType();
    method public android.view.autofill.AutoFillValue getAutoFillValue();
    method public android.view.autofill.AutoFillValue getAutoFillValue();
    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
@@ -45642,6 +45643,7 @@ package android.view {
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setAlpha(float);
    method public abstract void setAlpha(float);
    method public abstract void setAutoFillOptions(java.lang.String[]);
    method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
    method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
    method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue);
    method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue);
    method public abstract void setCheckable(boolean);
    method public abstract void setCheckable(boolean);
+2 −0
Original line number Original line Diff line number Diff line
@@ -6787,6 +6787,7 @@ package android.app.assist {
  public static class AssistStructure.ViewNode {
  public static class AssistStructure.ViewNode {
    method public float getAlpha();
    method public float getAlpha();
    method public android.view.autofill.AutoFillId getAutoFillId();
    method public android.view.autofill.AutoFillId getAutoFillId();
    method public java.lang.String[] getAutoFillOptions();
    method public android.view.autofill.AutoFillType getAutoFillType();
    method public android.view.autofill.AutoFillType getAutoFillType();
    method public android.view.autofill.AutoFillValue getAutoFillValue();
    method public android.view.autofill.AutoFillValue getAutoFillValue();
    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
@@ -49187,6 +49188,7 @@ package android.view {
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setAlpha(float);
    method public abstract void setAlpha(float);
    method public abstract void setAutoFillOptions(java.lang.String[]);
    method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
    method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
    method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue);
    method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue);
    method public abstract void setCheckable(boolean);
    method public abstract void setCheckable(boolean);
+2 −0
Original line number Original line Diff line number Diff line
@@ -6573,6 +6573,7 @@ package android.app.assist {
  public static class AssistStructure.ViewNode {
  public static class AssistStructure.ViewNode {
    method public float getAlpha();
    method public float getAlpha();
    method public android.view.autofill.AutoFillId getAutoFillId();
    method public android.view.autofill.AutoFillId getAutoFillId();
    method public java.lang.String[] getAutoFillOptions();
    method public android.view.autofill.AutoFillType getAutoFillType();
    method public android.view.autofill.AutoFillType getAutoFillType();
    method public android.view.autofill.AutoFillValue getAutoFillValue();
    method public android.view.autofill.AutoFillValue getAutoFillValue();
    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
@@ -46004,6 +46005,7 @@ package android.view {
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setAlpha(float);
    method public abstract void setAlpha(float);
    method public abstract void setAutoFillOptions(java.lang.String[]);
    method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
    method public abstract void setAutoFillType(android.view.autofill.AutoFillType);
    method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue);
    method public abstract void setAutoFillValue(android.view.autofill.AutoFillValue);
    method public abstract void setCheckable(boolean);
    method public abstract void setCheckable(boolean);
+21 −0
Original line number Original line Diff line number Diff line
@@ -538,6 +538,7 @@ public class AssistStructure implements Parcelable {
        AutoFillId mAutoFillId;
        AutoFillId mAutoFillId;
        AutoFillType mAutoFillType;
        AutoFillType mAutoFillType;
        AutoFillValue mAutoFillValue;
        AutoFillValue mAutoFillValue;
        String[] mAutoFillOptions;
        boolean mSanitized;
        boolean mSanitized;
        int mX;
        int mX;
        int mY;
        int mY;
@@ -618,6 +619,7 @@ public class AssistStructure implements Parcelable {
                mAutoFillId = in.readParcelable(null);
                mAutoFillId = in.readParcelable(null);
                mAutoFillType = in.readParcelable(null);
                mAutoFillType = in.readParcelable(null);
                mAutoFillValue = in.readParcelable(null);
                mAutoFillValue = in.readParcelable(null);
                mAutoFillOptions = in.readStringArray();
            }
            }
            if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) {
            if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) {
                mX = in.readInt();
                mX = in.readInt();
@@ -738,6 +740,7 @@ public class AssistStructure implements Parcelable {
                out.writeParcelable(mAutoFillType,  0);
                out.writeParcelable(mAutoFillType,  0);
                final AutoFillValue sanitizedValue = writeSensitive ? mAutoFillValue : null;
                final AutoFillValue sanitizedValue = writeSensitive ? mAutoFillValue : null;
                out.writeParcelable(sanitizedValue,  0);
                out.writeParcelable(sanitizedValue,  0);
                out.writeStringArray(mAutoFillOptions);
            }
            }
            if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) {
            if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) {
                out.writeInt(mX);
                out.writeInt(mX);
@@ -844,6 +847,19 @@ public class AssistStructure implements Parcelable {
            return mAutoFillValue;
            return mAutoFillValue;
        }
        }


        /**
         * Gets the options that can be used to auto-fill this structure.
         *
         * <p>Typically used by nodes whose {@link AutoFillType} is a list to indicate the meaning
         * of each possible value in the list.
         *
         * <p>It's only set when the {@link AssistStructure} is used for auto-filling purposes, not
         * for assist.
         */
        public String[] getAutoFillOptions() {
            return mAutoFillOptions;
        }

        /** @hide */
        /** @hide */
        public boolean isSanitized() {
        public boolean isSanitized() {
            return mSanitized;
            return mSanitized;
@@ -1506,6 +1522,11 @@ public class AssistStructure implements Parcelable {
            mNode.mAutoFillValue = value;
            mNode.mAutoFillValue = value;
        }
        }


        @Override
        public void setAutoFillOptions(String[] options) {
            mNode.mAutoFillOptions = options;
        }

        /**
        /**
         * @hide
         * @hide
         */
         */
+6 −2
Original line number Original line Diff line number Diff line
@@ -6984,8 +6984,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * Called when assist structure is being retrieved from a view as part of an auto-fill request.
     * Called when assist structure is being retrieved from a view as part of an auto-fill request.
     *
     *
     * <p>This method already provides most of what's needed for auto-fill, but should be overridden
     * <p>This method already provides most of what's needed for auto-fill, but should be overridden
     * when the view contents does not include PII (Personally Identifiable Information) (so it
     * <ol>
     * can call {@link ViewStructure#setSanitized(boolean) ViewStructure#setSanitized(true)}).
     * <li>The view contents does not include PII (Personally Identifiable Information), so it
     * can call {@link ViewStructure#setSanitized(boolean)} passing {@code true}.
     * <li>It must set fields such {@link ViewStructure#setText(CharSequence)},
     * {@link ViewStructure#setAutoFillOptions(String[])}, or {@link ViewStructure#setUrl(String)}.
     * </ol>
     *
     *
     * @param structure Fill in with structured view data. The default implementation
     * @param structure Fill in with structured view data. The default implementation
     * fills in all data that can be inferred from the view itself.
     * fills in all data that can be inferred from the view itself.
Loading