diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 4cb552d29c320..85e9e4950cbad 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2553,34 +2553,42 @@ public abstract class AbsListView extends AdapterView implements Te final boolean isItemEnabled; final ViewGroup.LayoutParams lp = view.getLayoutParams(); if (lp instanceof AbsListView.LayoutParams) { - isItemEnabled = ((AbsListView.LayoutParams) lp).isEnabled; + isItemEnabled = ((AbsListView.LayoutParams) lp).isEnabled && isEnabled(); } else { isItemEnabled = false; } - if (!isEnabled() || !isItemEnabled) { - info.setEnabled(false); - return; - } + info.setEnabled(isItemEnabled); if (position == getSelectedItemPosition()) { info.setSelected(true); - info.addAction(AccessibilityAction.ACTION_CLEAR_SELECTION); - } else { - info.addAction(AccessibilityAction.ACTION_SELECT); + addAccessibilityActionIfEnabled(info, isItemEnabled, + AccessibilityAction.ACTION_CLEAR_SELECTION); + } else { + addAccessibilityActionIfEnabled(info, isItemEnabled, + AccessibilityAction.ACTION_SELECT); } if (isItemClickable(view)) { - info.addAction(AccessibilityAction.ACTION_CLICK); + addAccessibilityActionIfEnabled(info, isItemEnabled, AccessibilityAction.ACTION_CLICK); info.setClickable(true); } if (isLongClickable()) { - info.addAction(AccessibilityAction.ACTION_LONG_CLICK); + addAccessibilityActionIfEnabled(info, isItemEnabled, + AccessibilityAction.ACTION_LONG_CLICK); info.setLongClickable(true); } } + + private void addAccessibilityActionIfEnabled(AccessibilityNodeInfo info, boolean enabled, + AccessibilityAction action) { + if (enabled) { + info.addAction(action); + } + } + private boolean isItemClickable(View view) { return !view.hasExplicitFocusable(); }