From 16aafc36ded4a118f86890261f8f87a6927dc547 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Mon, 27 Feb 2017 13:41:37 -0800 Subject: [PATCH] Added inputType to Assist API. It will be used mostly for auto-fill purposes.. Bug: 35364993 Test: CtsAutoFillServiceTestCase (with new tests) pass Test: manual verification Change-Id: Ia5b6ff94e66a7da385cfb6f42ad994fe5e1e976b --- api/current.txt | 2 ++ api/system-current.txt | 2 ++ api/test-current.txt | 2 ++ .../android/app/assist/AssistStructure.java | 31 +++++++++++++++++++ core/java/android/view/ViewStructure.java | 7 +++++ core/java/android/widget/TextView.java | 1 + 6 files changed, 45 insertions(+) diff --git a/api/current.txt b/api/current.txt index f53dace58b129..b1a8898313145 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6563,6 +6563,7 @@ package android.app.assist { method public java.lang.String getIdEntry(); method public java.lang.String getIdPackage(); method public java.lang.String getIdType(); + method public int getInputType(); method public int getLeft(); method public int getScrollX(); method public int getScrollY(); @@ -45810,6 +45811,7 @@ package android.view { method public abstract void setFocused(boolean); method public abstract void setHint(java.lang.CharSequence); method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String); + method public abstract void setInputType(int); method public abstract void setLongClickable(boolean); method public abstract void setSanitized(boolean); method public abstract void setSelected(boolean); diff --git a/api/system-current.txt b/api/system-current.txt index 44c9578d1bbdf..9d9c6904bfe98 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6803,6 +6803,7 @@ package android.app.assist { method public java.lang.String getIdEntry(); method public java.lang.String getIdPackage(); method public java.lang.String getIdType(); + method public int getInputType(); method public int getLeft(); method public int getScrollX(); method public int getScrollY(); @@ -49155,6 +49156,7 @@ package android.view { method public abstract void setFocused(boolean); method public abstract void setHint(java.lang.CharSequence); method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String); + method public abstract void setInputType(int); method public abstract void setLongClickable(boolean); method public abstract void setSanitized(boolean); method public abstract void setSelected(boolean); diff --git a/api/test-current.txt b/api/test-current.txt index bc200f336efca..b23b022898289 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -6589,6 +6589,7 @@ package android.app.assist { method public java.lang.String getIdEntry(); method public java.lang.String getIdPackage(); method public java.lang.String getIdType(); + method public int getInputType(); method public int getLeft(); method public int getScrollX(); method public int getScrollY(); @@ -46172,6 +46173,7 @@ package android.view { method public abstract void setFocused(boolean); method public abstract void setHint(java.lang.CharSequence); method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String); + method public abstract void setInputType(int); method public abstract void setLongClickable(boolean); method public abstract void setSanitized(boolean); method public abstract void setSelected(boolean); diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index 483a7a121a9ec..d1b2a158979cf 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -26,6 +26,7 @@ import android.view.autofill.AutoFillType; import android.view.autofill.AutoFillValue; import java.util.ArrayList; +import java.util.Arrays; /** * Assist data automatically created by the platform's implementation @@ -533,6 +534,7 @@ public class AssistStructure implements Parcelable { String mIdPackage; String mIdType; String mIdEntry; + // TODO(b/33197203): once we have more flags, it might be better to store the individual // fields (viewId and childId) of the field. AutoFillId mAutoFillId; @@ -540,6 +542,7 @@ public class AssistStructure implements Parcelable { AutoFillValue mAutoFillValue; String[] mAutoFillOptions; boolean mSanitized; + int mX; int mY; int mScrollX; @@ -581,6 +584,7 @@ public class AssistStructure implements Parcelable { static final int FLAGS_HAS_ID = 0x00200000; static final int FLAGS_HAS_CHILDREN = 0x00100000; static final int FLAGS_HAS_URL = 0x00080000; + static final int FLAGS_HAS_INPUT_TYPE = 0x00040000; static final int FLAGS_ALL_CONTROL = 0xfff00000; int mFlags; @@ -589,6 +593,7 @@ public class AssistStructure implements Parcelable { CharSequence mContentDescription; ViewNodeText mText; + int mInputType; String mUrl; Bundle mExtras; @@ -655,6 +660,9 @@ public class AssistStructure implements Parcelable { if ((flags&FLAGS_HAS_TEXT) != 0) { mText = new ViewNodeText(in, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0); } + if ((flags&FLAGS_HAS_INPUT_TYPE) != 0) { + mInputType = in.readInt(); + } if ((flags&FLAGS_HAS_URL) != 0) { mUrl = in.readString(); } @@ -711,6 +719,9 @@ public class AssistStructure implements Parcelable { flags |= FLAGS_HAS_COMPLEX_TEXT; } } + if (mInputType != 0) { + flags |= FLAGS_HAS_INPUT_TYPE; + } if (mUrl != null) { flags |= FLAGS_HAS_URL; } @@ -778,6 +789,10 @@ public class AssistStructure implements Parcelable { if ((flags&FLAGS_HAS_TEXT) != 0) { mText.writeToParcel(out, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0, writeSensitive); } + if ((flags&FLAGS_HAS_INPUT_TYPE) != 0) { + out.writeInt(mInputType); + } + if ((flags&FLAGS_HAS_URL) != 0) { out.writeString(mUrl); } @@ -867,6 +882,15 @@ public class AssistStructure implements Parcelable { return mAutoFillOptions; } + /** + * Gets the {@link android.text.InputType} bits of this structure. + * + * @return bits as defined by {@link android.text.InputType}. + */ + public int getInputType() { + return mInputType; + } + /** @hide */ public boolean isSanitized() { return mSanitized; @@ -1534,6 +1558,11 @@ public class AssistStructure implements Parcelable { mNode.mAutoFillOptions = options; } + @Override + public void setInputType(int inputType) { + mNode.mInputType = inputType; + } + /** * @hide */ @@ -1664,6 +1693,8 @@ public class AssistStructure implements Parcelable { } else { Log.i(TAG, prefix + "AutoFill info: id= " + autoFillId + ", type=" + node.getAutoFillType() + + ", options=" + Arrays.toString(node.getAutoFillOptions()) + + ", inputType=" + node.getInputType() + ", value=" + node.getAutoFillValue() + ", sanitized=" + node.isSanitized()); } diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java index 84c2c8452e983..43560f0cab1c6 100644 --- a/core/java/android/view/ViewStructure.java +++ b/core/java/android/view/ViewStructure.java @@ -315,6 +315,13 @@ public abstract class ViewStructure { // TODO(b/33197203, b/33802548): add CTS/unit test public abstract void setAutoFillOptions(String[] options); + /** + * Sets the {@link android.text.InputType} bits of this node. + * + * @param inputType inputType bits as defined by {@link android.text.InputType}. + */ + public abstract void setInputType(int inputType); + /** * Marks this node as sanitized so its content are sent on {@link * android.service.autofill.AutoFillService#onFillRequest(android.app.assist.AssistStructure, diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index adc6f725f42e1..ab47479a4681c 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -10002,6 +10002,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener AssistStructure.ViewNode.TEXT_COLOR_UNDEFINED /* bgColor */, style); } structure.setHint(getHint()); + structure.setInputType(getInputType()); } // TODO(b/33197203): add unit/CTS tests for auto-fill methods