diff --git a/api/current.txt b/api/current.txt index 71d8bd15391fc..d2c67adf491b2 100644 --- a/api/current.txt +++ b/api/current.txt @@ -49515,6 +49515,7 @@ package android.widget { method public void notifyDataSetChanged(); method public void notifyDataSetInvalidated(); method public void registerDataSetObserver(android.database.DataSetObserver); + method public void setAutofillOptions(java.lang.CharSequence...); method public void unregisterDataSetObserver(android.database.DataSetObserver); } diff --git a/api/system-current.txt b/api/system-current.txt index e020bfd4807d5..648bb54ac7116 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -53433,6 +53433,7 @@ package android.widget { method public void notifyDataSetChanged(); method public void notifyDataSetInvalidated(); method public void registerDataSetObserver(android.database.DataSetObserver); + method public void setAutofillOptions(java.lang.CharSequence...); method public void unregisterDataSetObserver(android.database.DataSetObserver); } diff --git a/api/test-current.txt b/api/test-current.txt index 51143475d263d..2530d6849248c 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -49931,6 +49931,7 @@ package android.widget { method public void notifyDataSetChanged(); method public void notifyDataSetInvalidated(); method public void registerDataSetObserver(android.database.DataSetObserver); + method public void setAutofillOptions(java.lang.CharSequence...); method public void unregisterDataSetObserver(android.database.DataSetObserver); } diff --git a/core/java/android/widget/ArrayAdapter.java b/core/java/android/widget/ArrayAdapter.java index 74f22b35e0019..690067b481330 100644 --- a/core/java/android/widget/ArrayAdapter.java +++ b/core/java/android/widget/ArrayAdapter.java @@ -526,6 +526,13 @@ public class ArrayAdapter extends BaseAdapter implements Filterable, ThemedSp */ @Override public CharSequence[] getAutofillOptions() { + // First check if app developer explicitly set them. + final CharSequence[] explicitOptions = super.getAutofillOptions(); + if (explicitOptions != null) { + return explicitOptions; + } + + // Otherwise, only return options that came from static resources. if (!mObjectsFromResources || mObjects == null || mObjects.isEmpty()) { return null; } diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java index c960342f7c652..5838cc15cf92d 100644 --- a/core/java/android/widget/BaseAdapter.java +++ b/core/java/android/widget/BaseAdapter.java @@ -16,6 +16,7 @@ package android.widget; +import android.annotation.Nullable; import android.database.DataSetObservable; import android.database.DataSetObserver; import android.view.View; @@ -29,6 +30,7 @@ import android.view.ViewGroup; */ public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter { private final DataSetObservable mDataSetObservable = new DataSetObservable(); + private CharSequence[] mAutofillOptions; public boolean hasStableIds() { return false; @@ -82,4 +84,16 @@ public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter { public boolean isEmpty() { return getCount() == 0; } + + @Override + public CharSequence[] getAutofillOptions() { + return mAutofillOptions; + } + + /** + * Sets the value returned by {@link #getAutofillOptions()} + */ + public void setAutofillOptions(@Nullable CharSequence... options) { + mAutofillOptions = options; + } }