diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java index e243aae81da4e..efe3fd468e37e 100644 --- a/core/java/android/widget/ExpandableListView.java +++ b/core/java/android/widget/ExpandableListView.java @@ -31,6 +31,7 @@ import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.SoundEffectConstants; import android.view.View; +import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ExpandableListConnector.PositionMetadata; import com.android.internal.R; @@ -1144,6 +1145,24 @@ public class ExpandableListView extends ListView { return new ExpandableListContextMenuInfo(view, packedPosition, id); } + /** @hide */ + @Override + public void onInitializeAccessibilityNodeInfoForItem( + View view, int position, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfoForItem(view, position, info); + + final PositionMetadata metadata = mConnector.getUnflattenedPos(position); + if (metadata.position.type == ExpandableListPosition.GROUP) { + if (isGroupExpanded(metadata.position.groupPos)) { + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_COLLAPSE); + } else { + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND); + } + } + + metadata.recycle(); + } + /** * Gets the ID of the group or child at the given position. * This is useful since there is no ListAdapter ID -> ExpandableListAdapter