Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 084c63eb authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Fix accessibility actions in AbsListView." into jb-dev

parents 9faa9374 9c3e0e68
Loading
Loading
Loading
Loading
+36 −16
Original line number Diff line number Diff line
@@ -2278,28 +2278,37 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
            super.onInitializeAccessibilityNodeInfo(host, info);

            final int position = getPositionForView(host);
            final ListAdapter adapter = getAdapter();

            if (position == INVALID_POSITION) {
            if ((position == INVALID_POSITION) || (adapter == null)) {
                // Cannot perform actions on invalid items.
                info.setEnabled(false);
                return;
            }

            if (isClickable() && isEnabled()) {
            if (!isEnabled() || !adapter.isEnabled(position)) {
                // Cannot perform actions on invalid items.
                info.setEnabled(false);
                return;
            }

            if (position == getSelectedItemPosition()) {
                info.setSelected(true);
                info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_SELECTION);
            } else {
                info.addAction(AccessibilityNodeInfo.ACTION_SELECT);
            }

            if (isClickable()) {
                info.addAction(AccessibilityNodeInfo.ACTION_CLICK);
                info.setClickable(true);
            }

            if (isLongClickable() && isEnabled()) {
            if (isLongClickable()) {
                info.addAction(AccessibilityNodeInfo.ACTION_LONG_CLICK);
                info.setLongClickable(true);
            }

            if (isEnabled()) {
                info.addAction(AccessibilityNodeInfo.ACTION_SELECT);
            }

            if (position == getSelectedItemPosition()) {
                info.setSelected(true);
            }
        }

        @Override
@@ -2309,22 +2318,33 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
            }

            final int position = getPositionForView(host);
            final ListAdapter adapter = getAdapter();

            if (position == INVALID_POSITION) {
            if ((position == INVALID_POSITION) || (adapter == null)) {
                // Cannot perform actions on invalid items.
                return false;
            }

            if (!isEnabled()) {
            if (!isEnabled() || !adapter.isEnabled(position)) {
                // Cannot perform actions on disabled items.
                return false;
            }

            final long id = getItemIdAtPosition(position);

            switch (action) {
                case AccessibilityNodeInfo.ACTION_CLEAR_SELECTION: {
                    if (getSelectedItemPosition() == position) {
                        setSelection(INVALID_POSITION);
                        return true;
                    }
                } return false;
                case AccessibilityNodeInfo.ACTION_SELECT: {
                    if (getSelectedItemPosition() != position) {
                        setSelection(position);
                        return true;
                    }
                } return false;
                case AccessibilityNodeInfo.ACTION_CLICK: {
                    if (isClickable()) {
                        return performItemClick(host, position, id);