diff options
| -rw-r--r-- | core/api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/widget/AdapterView.java | 3 | ||||
| -rw-r--r-- | core/java/android/widget/Spinner.java | 15 |
3 files changed, 18 insertions, 1 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 984e82215169..7d85fafe9e9c 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -3274,6 +3274,7 @@ package android.widget { public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener { method public boolean isPopupShowing(); + method public void onClick(int); } @android.widget.RemoteViews.RemoteView public class TextClock extends android.widget.TextView { diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index 52658404548c..e6379cfb27cf 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -968,7 +968,8 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup { final int position = getSelectedItemPosition(); if (position >= 0) { // we fire selection events here not in View - sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); + // posting the event should delay it long enough for UI changes to take effect. + post(() -> sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED)); } } diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index ba6fa197f164..ad431efc0bd2 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -802,6 +802,21 @@ public class Spinner extends AbsSpinner implements OnClickListener { dialog.dismiss(); } + /** + * Sets selection and dismisses the spinner's popup if it can be dismissed. + * For ease of use in tests, where publicly obtaining the spinner's popup is difficult. + * + * @param which index of the item to be selected. + * @hide + */ + @TestApi + public void onClick(int which) { + setSelection(which); + if (mPopup != null && mPopup.isShowing()) { + mPopup.dismiss(); + } + } + @Override public CharSequence getAccessibilityClassName() { return Spinner.class.getName(); |