Add accessibility expand/collapse action to node info

Bug: 213940323
Test: ran atest android.widget.cts.ExpandableListViewTest and manually verified through talkback tests.
Change-Id: I8e9523781edd0dfd76c422da219beccf1a39a298
This commit is contained in:
Zeyin Wu
2022-08-19 16:49:08 +00:00
parent 0ac31bf658
commit 1d59f48e7c

View File

@@ -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 <code>position</code>.
* This is useful since there is no ListAdapter ID -> ExpandableListAdapter