summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/test-current.txt1
-rw-r--r--core/java/android/widget/AdapterView.java3
-rw-r--r--core/java/android/widget/Spinner.java15
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();