private AccessibilityNodeInfo createAccessibiltyNodeInfoForInputText( int left, int top, int right, int bottom) { AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.wrap(mInputText.createAccessibilityNodeInfo()); info.setSource(NumberPicker.this, VIRTUAL_VIEW_ID_INPUT); if (mAccessibilityFocusedView != VIRTUAL_VIEW_ID_INPUT) { info.addAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS); } if (mAccessibilityFocusedView == VIRTUAL_VIEW_ID_INPUT) { info.addAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS); } Rect boundsInParent = mTempRect; boundsInParent.set(left, top, right, bottom); info.setVisibleToUser(isVisibleToUser(boundsInParent)); info.setBoundsInParent(boundsInParent); Rect boundsInScreen = boundsInParent; int[] locationOnScreen = mTempArray; getLocationOnScreen(locationOnScreen); boundsInScreen.offset(locationOnScreen[0], locationOnScreen[1]); info.setBoundsInScreen(boundsInScreen); return info.unwrap(); }
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { super.onInitializeAccessibilityNodeInfo(host, info); NestedScrollView nsvHost = (NestedScrollView) host; info.setClassName(ScrollView.class.getName()); if (nsvHost.isEnabled()) { int scrollRange = nsvHost.getScrollRange(); if (scrollRange > 0) { info.setScrollable(true); if (nsvHost.getScrollY() > 0) { info.addAction(8192); } if (nsvHost.getScrollY() < scrollRange) { info.addAction(4096); } } } }
public NodeInfo(AccessibilityNodeInfoCompat node) { id = simplifyId(node.getViewIdResourceName()); desc = node.getContentDescription(); className = node.getClassName(); packageName = node.getPackageName(); text = node.getText(); drawingOrder = node.getDrawingOrder(); accessibilityFocused = node.isAccessibilityFocused(); checked = node.isChecked(); clickable = node.isClickable(); contextClickable = node.isContextClickable(); dismissable = node.isDismissable(); enabled = node.isEnabled(); editable = node.isEditable(); focusable = node.isFocusable(); longClickable = node.isLongClickable(); selected = node.isSelected(); scrollable = node.isScrollable(); mBoundsInScreen = new Rect(); node.getBoundsInScreen(mBoundsInScreen); bounds = boundsToString(mBoundsInScreen); }
private void copyNodeInfoNoChildren(AccessibilityNodeInfoCompat dest, AccessibilityNodeInfoCompat src) { Rect rect = this.mTmpRect; src.getBoundsInParent(rect); dest.setBoundsInParent(rect); src.getBoundsInScreen(rect); dest.setBoundsInScreen(rect); dest.setVisibleToUser(src.isVisibleToUser()); dest.setPackageName(src.getPackageName()); dest.setClassName(src.getClassName()); dest.setContentDescription(src.getContentDescription()); dest.setEnabled(src.isEnabled()); dest.setClickable(src.isClickable()); dest.setFocusable(src.isFocusable()); dest.setFocused(src.isFocused()); dest.setAccessibilityFocused(src.isAccessibilityFocused()); dest.setSelected(src.isSelected()); dest.setLongClickable(src.isLongClickable()); dest.addAction(src.getActions()); dest.setMovementGranularities(src.getMovementGranularities()); }
@Override protected void onPopulateNodeForVirtualView(int id, AccessibilityNodeInfoCompat node) { super.onPopulateNodeForVirtualView(id, node); // ExploreByTouchHelper does not currently handle view scale. // Update BoundsInScreen to appropriate value. DragLayer dragLayer = Launcher.getLauncher(mView.getContext()).getDragLayer(); mTempCords[0] = mTempCords[1] = 0; float scale = dragLayer.getDescendantCoordRelativeToSelf(mView, mTempCords); node.getBoundsInParent(mTempRect); mTempRect.left = mTempCords[0] + (int) (mTempRect.left * scale); mTempRect.right = mTempCords[0] + (int) (mTempRect.right * scale); mTempRect.top = mTempCords[1] + (int) (mTempRect.top * scale); mTempRect.bottom = mTempCords[1] + (int) (mTempRect.bottom * scale); node.setBoundsInScreen(mTempRect); }
@Override public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler, RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) { ViewGroup.LayoutParams lp = host.getLayoutParams(); if (!(lp instanceof LayoutParams)) { super.onInitializeAccessibilityNodeInfoForItem(host, info); return; } LayoutParams glp = (LayoutParams) lp; int spanGroupIndex = getSpanGroupIndex(recycler, state, glp.getViewLayoutPosition()); if (mOrientation == HORIZONTAL) { info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain( glp.getSpanIndex(), glp.getSpanSize(), spanGroupIndex, 1, mSpanCount > 1 && glp.getSpanSize() == mSpanCount, false)); } else { // VERTICAL info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain( spanGroupIndex , 1, glp.getSpanIndex(), glp.getSpanSize(), mSpanCount > 1 && glp.getSpanSize() == mSpanCount, false)); } }
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { super.onInitializeAccessibilityNodeInfo(host, info); info.setClassName(TextInputLayout.class.getSimpleName()); CharSequence text = TextInputLayout.this.mCollapsingTextHelper.getText(); if (!TextUtils.isEmpty(text)) { info.setText(text); } if (TextInputLayout.this.mEditText != null) { info.setLabelFor(TextInputLayout.this.mEditText); } CharSequence error = TextInputLayout.this.mErrorView != null ? TextInputLayout.this.mErrorView.getText() : null; if (!TextUtils.isEmpty(error)) { info.setContentInvalid(true); info.setError(error); } }
@Override public void onInitializeAccessibilityNodeInfoForItem(RecyclerView.Recycler recycler, RecyclerView.State state, View host, AccessibilityNodeInfoCompat info) { ViewGroup.LayoutParams lp = host.getLayoutParams(); if (!(lp instanceof LayoutParams)) { super.onInitializeAccessibilityNodeInfoForItem(host, info); return; } LayoutParams sglp = (LayoutParams) lp; if (mOrientation == HORIZONTAL) { info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain( sglp.getSpanIndex(), sglp.mFullSpan ? mSpanCount : 1, -1, -1, sglp.mFullSpan, false)); } else { // VERTICAL info.setCollectionItemInfo(AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain( -1, -1, sglp.getSpanIndex(), sglp.mFullSpan ? mSpanCount : 1, sglp.mFullSpan, false)); } }
@Override public boolean performAccessibilityAction(View host, int action, Bundle args) { if (super.performAccessibilityAction(host, action, args)) { return true; } switch (action) { case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: { if (canScrollHorizontally(1)) { setCurrentItem(mCurItem + 1); return true; } } return false; case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: { if (canScrollHorizontally(-1)) { setCurrentItem(mCurItem - 1); return true; } } return false; } return false; }
public boolean performAccessibilityAction(View host, int action, Bundle args) { if (super.performAccessibilityAction(host, action, args)) { return true; } switch (action) { case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: { if (canScrollHorizontally(1)) { setCurrentItem(mCurItem + 1); return true; } } return false; case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: { if (canScrollHorizontally(-1)) { setCurrentItem(mCurItem - 1); return true; } } return false; } return false; }
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { AccessibilityNodeInfoCompat superNode = AccessibilityNodeInfoCompat.obtain(info); super.onInitializeAccessibilityNodeInfo(host, superNode); copyNodeInfoNoChildren(info, superNode); superNode.recycle(); info.setClassName(SlidingPaneLayout.class.getName()); info.setSource(host); ViewParent parent = ViewCompat.getParentForAccessibility(host); if (parent instanceof View) { info.setParent((View) parent); } int childCount = SlidingPaneLayout.this.getChildCount(); for (int i = 0; i < childCount; i++) { View child = SlidingPaneLayout.this.getChildAt(i); if (!filter(child) && child.getVisibility() == 0) { ViewCompat.setImportantForAccessibility(child, 1); info.addChild(child); } } }
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { if (DrawerLayout.CAN_HIDE_DESCENDANTS) { super.onInitializeAccessibilityNodeInfo(host, info); } else { AccessibilityNodeInfoCompat superNode = AccessibilityNodeInfoCompat.obtain(info); super.onInitializeAccessibilityNodeInfo(host, superNode); info.setSource(host); ViewParent parent = ViewCompat.getParentForAccessibility(host); if (parent instanceof View) { info.setParent((View) parent); } copyNodeInfoNoChildren(info, superNode); superNode.recycle(); addChildrenForAccessibility(info, (ViewGroup) host); } info.setClassName(DrawerLayout.class.getName()); info.setFocusable(false); info.setFocused(false); info.removeAction(AccessibilityActionCompat.ACTION_FOCUS); info.removeAction(AccessibilityActionCompat.ACTION_CLEAR_FOCUS); }
private String getAction() { switch (mAction) { case AccessibilityNodeInfoCompat.ACTION_CLICK: return "click()"; case AccessibilityNodeInfoCompat.ACTION_LONG_CLICK: return "longClick()"; case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: return "scrollBackward()"; case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: return "scrollForward()"; case AccessibilityNodeInfoCompat.ACTION_SET_TEXT: return "setText(\"\")"; } return ""; }
@Override public boolean performAccessibilityAction(View host, int action, Bundle args) { if (super.performAccessibilityAction(host, action, args)) { return true; } switch (action) { case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: { if (internalCanScrollVertically(1)) { setCurrentItem(mCurItem + 1); return true; } } return false; case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: { if (internalCanScrollVertically(-1)) { setCurrentItem(mCurItem - 1); return true; } } return false; } return false; }
@Override protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat node) { node.setClassName(getClass().getName()); node.addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK); final int type = getTypeFromId(virtualViewId); final int value = getValueFromId(virtualViewId); final CharSequence description = getVirtualViewDescription(type, value); node.setContentDescription(description); getBoundsForVirtualView(virtualViewId, mTempRect); node.setBoundsInParent(mTempRect); final boolean selected = isVirtualViewSelected(type, value); node.setSelected(selected); final int nextId = getVirtualViewIdAfter(type, value); if (nextId != INVALID_ID) { node.setTraversalBefore(RadialTimePickerView.this, nextId); } }
/** * This should really be in AccessibilityNodeInfoCompat, but there unfortunately * seem to be a few elements that are not easily cloneable using the underlying API. * Leave it private here as it's not general-purpose useful. */ private void copyNodeInfoNoChildren(AccessibilityNodeInfoCompat dest, AccessibilityNodeInfoCompat src) { final Rect rect = mTmpRect; src.getBoundsInParent(rect); dest.setBoundsInParent(rect); src.getBoundsInScreen(rect); dest.setBoundsInScreen(rect); dest.setVisibleToUser(src.isVisibleToUser()); dest.setPackageName(src.getPackageName()); dest.setClassName(src.getClassName()); dest.setContentDescription(src.getContentDescription()); dest.setEnabled(src.isEnabled()); dest.setClickable(src.isClickable()); dest.setFocusable(src.isFocusable()); dest.setFocused(src.isFocused()); dest.setAccessibilityFocused(src.isAccessibilityFocused()); dest.setSelected(src.isSelected()); dest.setLongClickable(src.isLongClickable()); dest.addAction(src.getActions()); }
@Override protected void onPopulateNodeForVirtualView( int virtualViewId, AccessibilityNodeInfoCompat node) { if (mVirtualViews == null || mVirtualViews.size() <= virtualViewId) { // TODO(clholgat): Remove this work around when the Android bug is fixed. // crbug.com/420177 node.setBoundsInParent(mPlaceHolderRect); node.setContentDescription(PLACE_HOLDER_STRING); return; } VirtualView view = mVirtualViews.get(virtualViewId); view.getTouchTarget(mTouchTarget); node.setBoundsInParent(rectToPx(mTouchTarget)); node.setContentDescription(view.getAccessibilityDescription()); node.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK); node.addAction(AccessibilityNodeInfoCompat.ACTION_FOCUS); node.addAction(AccessibilityNodeInfoCompat.ACTION_LONG_CLICK); }
public void onInitializeAccessibilityNodeInfoForItem(Recycler recycler, State state, View host, AccessibilityNodeInfoCompat info) { android.view.ViewGroup.LayoutParams lp = host.getLayoutParams(); if (lp instanceof LayoutParams) { LayoutParams glp = (LayoutParams) lp; int spanGroupIndex = getSpanGroupIndex(recycler, state, glp.getViewLayoutPosition()); if (this.mOrientation == 0) { int spanIndex = glp.getSpanIndex(); int spanSize = glp.getSpanSize(); boolean z = this.mSpanCount > 1 && glp.getSpanSize() == this.mSpanCount; info.setCollectionItemInfo(CollectionItemInfoCompat.obtain(spanIndex, spanSize, spanGroupIndex, 1, z, false)); return; } int spanIndex2 = glp.getSpanIndex(); int spanSize2 = glp.getSpanSize(); boolean z2 = this.mSpanCount > 1 && glp.getSpanSize() == this.mSpanCount; info.setCollectionItemInfo(CollectionItemInfoCompat.obtain(spanGroupIndex, 1, spanIndex2, spanSize2, z2, false)); return; } super.onInitializeAccessibilityNodeInfoForItem(host, info); }
/** * This should really be in AccessibilityNodeInfoCompat, but there unfortunately * seem to be a few elements that are not easily cloneable using the underlying API. * Leave it private here as it's not general-purpose useful. */ private void copyNodeInfoNoChildren(AccessibilityNodeInfoCompat dest, AccessibilityNodeInfoCompat src) { final Rect rect = mTmpRect; src.getBoundsInParent(rect); dest.setBoundsInParent(rect); src.getBoundsInScreen(rect); dest.setBoundsInScreen(rect); dest.setVisibleToUser(src.isVisibleToUser()); dest.setPackageName(src.getPackageName()); dest.setClassName(src.getClassName()); dest.setContentDescription(src.getContentDescription()); dest.setEnabled(src.isEnabled()); dest.setClickable(src.isClickable()); dest.setFocusable(src.isFocusable()); dest.setFocused(src.isFocused()); dest.setAccessibilityFocused(src.isAccessibilityFocused()); dest.setSelected(src.isSelected()); dest.setLongClickable(src.isLongClickable()); dest.addAction(src.getActions()); dest.setMovementGranularities(src.getMovementGranularities()); }
private void addAll(Collection<?> nodeInfos) { String stackTrace = DEBUG ? Arrays.toString(Thread.currentThread().getStackTrace()) : null; for (Object nodeInfo : nodeInfos) { if (nodeInfo instanceof AccessibilityNodeInfo) { mAccessibilityNodeInfoList.put((AccessibilityNodeInfo) nodeInfo, stackTrace); } else if (nodeInfo instanceof AccessibilityNodeInfoCompat) { mAccessibilityNodeInfoList.put((AccessibilityNodeInfo) ((AccessibilityNodeInfoCompat) nodeInfo).getInfo(), stackTrace); } } }
@Override protected void onPopulateNodeForVirtualView(int id, AccessibilityNodeInfoCompat node) { if (id == INVALID_ID) { throw new IllegalArgumentException("Invalid virtual view id"); } node.setContentDescription(getLocationDescriptionForIconDrop(id)); node.setBoundsInParent(getItemBounds(id)); node.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK); node.setClickable(true); node.setFocusable(true); }
private AccessibilityNodeInfoCompat createNodeForHost() { AccessibilityNodeInfoCompat node = AccessibilityNodeInfoCompat.obtain(this.mView); ViewCompat.onInitializeAccessibilityNodeInfo(this.mView, node); onPopulateNodeForHost(node); LinkedList<Integer> virtualViewIds = new LinkedList(); getVisibleVirtualViews(virtualViewIds); Iterator i$ = virtualViewIds.iterator(); while (i$.hasNext()) { node.addChild(this.mView, ((Integer) i$.next()).intValue()); } return node; }
public static List<UiObject> compatListToUiObjectList(List<AccessibilityNodeInfoCompat> compats, AccessibilityNodeInfoAllocator allocator) { List<UiObject> uiObjects = new ArrayList<>(compats.size()); for (AccessibilityNodeInfoCompat compat : compats) { if (compat != null) uiObjects.add(new UiObject(compat.getInfo(), allocator)); } return uiObjects; }
/** * Fills any valid nodes with the matching Forge details */ public void autofill() { // Get the currently loaded Forge Account ForgeAccount account = CurrentManager.loadCurrentAccount(getApplicationContext()); for (AutoFillNode node : validNodes) { // For each valid node // Get the node input text String input = getInput(node.getType(), account); // Perform an action and put the text into the field node.getAccessibilityNode().performAction(AccessibilityNodeInfoCompat.ACTION_SELECT); Bundle arguments = new Bundle(); arguments.putString(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, input); node.getAccessibilityNode().performAction(AccessibilityNodeInfoCompat.ACTION_SET_TEXT, arguments); } }
public void onInitializeAccessibilityNodeInfoForItem(Recycler recycler, State state, View host, AccessibilityNodeInfoCompat info) { android.view.ViewGroup.LayoutParams lp = host.getLayoutParams(); if (lp instanceof LayoutParams) { LayoutParams sglp = (LayoutParams) lp; if (this.mOrientation == 0) { info.setCollectionItemInfo(CollectionItemInfoCompat.obtain(sglp.getSpanIndex(), sglp.mFullSpan ? this.mSpanCount : 1, -1, -1, sglp.mFullSpan, false)); return; } else { info.setCollectionItemInfo(CollectionItemInfoCompat.obtain(-1, -1, sglp.getSpanIndex(), sglp.mFullSpan ? this.mSpanCount : 1, sglp.mFullSpan, false)); return; } } super.onInitializeAccessibilityNodeInfoForItem(host, info); }
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { super.onInitializeAccessibilityNodeInfo(host, info); info.setClassName(ViewPager.class.getName()); info.setScrollable(canScroll()); if (ViewPager.this.canScrollHorizontally(1)) { info.addAction(4096); } if (ViewPager.this.canScrollHorizontally(-1)) { info.addAction(8192); } }
@Override protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat node) { getItemBounds(virtualViewId, mTempRect); node.setContentDescription(getItemDescription(virtualViewId)); node.setBoundsInParent(mTempRect); node.addAction(AccessibilityNodeInfo.ACTION_CLICK); if (virtualViewId == mSelectedDay) { node.setSelected(true); } }
@Override public void onInitializeAccessibilityNodeInfo(View child, AccessibilityNodeInfoCompat info) { super.onInitializeAccessibilityNodeInfo(child, info); if (!includeChildForAccessibility(child)) { // If we are ignoring the sub-tree rooted at the child, // break the connection to the rest of the node tree. // For details refer to includeChildForAccessibility. info.setParent(null); } }
@Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { super.onInitializeAccessibilityNodeInfo(host, info); if (!shouldIgnore() && mRecyclerView.getLayoutManager() != null) { mRecyclerView.getLayoutManager(). onInitializeAccessibilityNodeInfoForItem(host, info); } }
@Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { final AccessibilityNodeInfoCompat superNode = AccessibilityNodeInfoCompat.obtain(info); super.onInitializeAccessibilityNodeInfo(host, superNode); copyNodeInfoNoChildren(info, superNode); superNode.recycle(); info.setClassName(ResideLayout.class.getName()); info.setSource(host); final ViewParent parent = ViewCompat.getParentForAccessibility(host); if (parent instanceof View) { info.setParent((View) parent); } // This is a best-approximation of addChildrenForAccessibility() // that accounts for filtering. final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { final View child = getChildAt(i); if (!filter(child) && (child.getVisibility() == View.VISIBLE)) { // Force importance to "yes" since we can't read the value. ViewCompat.setImportantForAccessibility( child, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES); info.addChild(child); } } }
@Override public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) { super.onInitializeAccessibilityNodeInfo(host, info); info.setClassName(XCCycleViewPager.class.getName()); info.setScrollable(canScroll()); if (canScrollHorizontally(1)) { info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD); } if (canScrollHorizontally(-1)) { info.addAction(AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD); } }
/** EditText setText */ public static void setText(AccessibilityNodeInfo input, String text) { AccessibilityNodeInfoCompat compat = new AccessibilityNodeInfoCompat(input); if (Build.VERSION.SDK_INT > 21) { Bundle arguments = new Bundle(); arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, text); compat.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); }else{ ClipboardManager clipboard = (ClipboardManager) Global.getContext().getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("text", text); clipboard.setPrimaryClip(clip); compat.performAction(AccessibilityNodeInfo.ACTION_FOCUS); compat.performAction(AccessibilityNodeInfo.ACTION_PASTE); } }
void onInitializeAccessibilityNodeInfoForItem(View host, AccessibilityNodeInfoCompat info) { final ViewHolder vh = getChildViewHolderInt(host); // avoid trying to create accessibility node info for removed children if (vh != null && !vh.isRemoved() && !mChildHelper.isHidden(vh.itemView)) { onInitializeAccessibilityNodeInfoForItem(mRecyclerView.mRecycler, mRecyclerView.mState, host, info); } }