android.view.accessibility.AccessibilityNodeInfo#setContentDescription ( )源码实例Demo

下面列出了android.view.accessibility.AccessibilityNodeInfo#setContentDescription ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: android_9.0.0_r45   文件: RadialTimePickerView.java
@Override
protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfo node) {
    node.setClassName(getClass().getName());
    node.addAction(AccessibilityAction.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);
    }
}
 
源代码2 项目: tysq-android   文件: DefaultTimeBar.java
@TargetApi(21)
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName(ACCESSIBILITY_CLASS_NAME);
    info.setContentDescription(getProgressText());
    if (duration <= 0) {
        return;
    }
    if (Util.SDK_INT >= 21) {
        info.addAction(AccessibilityAction.ACTION_SCROLL_FORWARD);
        info.addAction(AccessibilityAction.ACTION_SCROLL_BACKWARD);
    } else {
        info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
        info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
    }
}
 
@Override
public void onInitializeAccessibilityNodeInfo(@NonNull AccessibilityNodeInfo info) {
  super.onInitializeAccessibilityNodeInfo(info);
  if (badgeDrawable != null && badgeDrawable.isVisible()) {
    CharSequence customContentDescription = itemData.getTitle();
    if (!TextUtils.isEmpty(itemData.getContentDescription())) {
      customContentDescription = itemData.getContentDescription();
    }
    info.setContentDescription(
        customContentDescription + ", " + badgeDrawable.getContentDescription());
  }
  AccessibilityNodeInfoCompat infoCompat = AccessibilityNodeInfoCompat.wrap(info);
  infoCompat.setCollectionItemInfo(
      CollectionItemInfoCompat.obtain(
          /* rowIndex= */ 0,
          /* rowSpan= */ 1,
          /* columnIndex= */ getItemPosition(),
          /* columnSpan= */ 1,
          /* heading= */ false,
          /* selected= */ isSelected()));
  if (isSelected()) {
    infoCompat.setClickable(false);
    infoCompat.removeAction(AccessibilityActionCompat.ACTION_CLICK);
  }
  infoCompat.setRoleDescription(getResources().getString(R.string.item_view_role_description));
}
 
源代码4 项目: material-components-android   文件: TabLayout.java
@Override
public void onInitializeAccessibilityNodeInfo(@NonNull AccessibilityNodeInfo info) {
  super.onInitializeAccessibilityNodeInfo(info);
  if (badgeDrawable != null && badgeDrawable.isVisible()) {
    CharSequence customContentDescription = getContentDescription();
    info.setContentDescription(
        customContentDescription + ", " + badgeDrawable.getContentDescription());
  }
  AccessibilityNodeInfoCompat infoCompat = AccessibilityNodeInfoCompat.wrap(info);
  infoCompat.setCollectionItemInfo(
      CollectionItemInfoCompat.obtain(
          /* rowIndex= */ 0,
          /* rowSpan= */ 1,
          /* columnIndex= */ tab.getPosition(),
          /* columnSpan= */ 1,
          /* heading= */ false,
          /* selected= */ isSelected()));
  if (isSelected()) {
    infoCompat.setClickable(false);
    infoCompat.removeAction(AccessibilityActionCompat.ACTION_CLICK);
  }
  infoCompat.setRoleDescription("Tab");
}
 
private void speakFeedbackForGlobalMenuButton(boolean speakHints) {
  // Manually construct an AccessibilityEvent and an AccessibilityNodeInfoCompat, which will be
  // used by the compositor to compose spoken feedback, for the global Switch Access menu button.
  final AccessibilityEvent event = AccessibilityEvent.obtain();
  final AccessibilityNodeInfo node = AccessibilityNodeInfo.obtain();

  event.setEventType(TYPE_VIEW_FOCUSED);
  node.setEnabled(true);
  node.setContentDescription(
      context.getString(R.string.option_scanning_menu_button_content_description));
  node.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK);
  node.setClassName(OverlayActionNode.class.getName());
  CompatUtils.invoke(
      node,
      null,
      CompatUtils.getMethod(AccessibilityNodeInfo.class, "setSealed", boolean.class),
      true);
  SwitchAccessNodeCompat nodeInfoCompat = new SwitchAccessNodeCompat(node);

  hintsManager.postHintForNode(event, nodeInfoCompat);

  compositor.handleEvent(
      AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED, nodeInfoCompat, EVENT_ID_UNTRACKED);

  isLastSpeech = !speakHints;
}
 
源代码6 项目: Dashchan   文件: DrawerLayout.java
/**
 * 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(AccessibilityNodeInfo dest, AccessibilityNodeInfo 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());
}
 
源代码7 项目: Telegram-FOSS   文件: StickerEmojiCell.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    String descr = LocaleController.getString("AttachSticker", R.string.AttachSticker);
    for (int a = 0; a < sticker.attributes.size(); a++) {
        TLRPC.DocumentAttribute attribute = sticker.attributes.get(a);
        if (attribute instanceof TLRPC.TL_documentAttributeSticker) {
            if (attribute.alt != null && attribute.alt.length() > 0) {
                emojiTextView.setText(Emoji.replaceEmoji(attribute.alt, emojiTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(16), false));
                descr = attribute.alt + " " + descr;
            }
            break;
        }
    }
    info.setContentDescription(descr);
    info.setEnabled(true);
}
 
源代码8 项目: Telegram   文件: StickerEmojiCell.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    String descr = LocaleController.getString("AttachSticker", R.string.AttachSticker);
    for (int a = 0; a < sticker.attributes.size(); a++) {
        TLRPC.DocumentAttribute attribute = sticker.attributes.get(a);
        if (attribute instanceof TLRPC.TL_documentAttributeSticker) {
            if (attribute.alt != null && attribute.alt.length() > 0) {
                emojiTextView.setText(Emoji.replaceEmoji(attribute.alt, emojiTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(16), false));
                descr = attribute.alt + " " + descr;
            }
            break;
        }
    }
    info.setContentDescription(descr);
    info.setEnabled(true);
}
 
源代码9 项目: android_9.0.0_r45   文件: SimpleMonthView.java
@Override
protected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfo node) {
    final boolean hasBounds = getBoundsForDay(virtualViewId, mTempRect);

    if (!hasBounds) {
        // The day is invalid, kill the node.
        mTempRect.setEmpty();
        node.setContentDescription("");
        node.setBoundsInParent(mTempRect);
        node.setVisibleToUser(false);
        return;
    }

    node.setText(getDayText(virtualViewId));
    node.setContentDescription(getDayDescription(virtualViewId));
    node.setBoundsInParent(mTempRect);

    final boolean isDayEnabled = isDayEnabled(virtualViewId);
    if (isDayEnabled) {
        node.addAction(AccessibilityAction.ACTION_CLICK);
    }

    node.setEnabled(isDayEnabled);

    if (virtualViewId == mActivatedDay) {
        // TODO: This should use activated once that's supported.
        node.setChecked(true);
    }

}
 
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info)
{
    super.onInitializeAccessibilityNodeInfo(host, info);

    @Nullable final Package viewPackage = PromptView.this.getClass().getPackage();
    if (viewPackage != null)
    {
        info.setPackageName(viewPackage.getName());
    }
    info.setSource(host);
    info.setClickable(true);
    info.setEnabled(true);
    info.setChecked(false);
    info.setFocusable(true);
    info.setFocused(true);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
    {
        info.setLabelFor(mPromptOptions.getTargetView());
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        info.setDismissable(true);
    }

    info.setContentDescription(mPromptOptions.getContentDescription());
    info.setText(mPromptOptions.getContentDescription());
}
 
源代码11 项目: 365browser   文件: BrowserAccessibilityManager.java
@SuppressLint("NewApi")
@CalledByNative
private void setAccessibilityNodeInfoText(AccessibilityNodeInfo node, String text,
        boolean annotateAsLink, boolean isEditableText, String language) {
    CharSequence computedText = computeText(text, isEditableText, language);
    if (isEditableText) {
        node.setText(computedText);
    } else {
        node.setContentDescription(computedText);
    }
}
 
源代码12 项目: Telegram-FOSS   文件: TextCheckCell.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName("android.widget.Switch");
    info.setCheckable(true);
    info.setChecked(checkBox.isChecked());
    info.setContentDescription(checkBox.isChecked() ? LocaleController.getString("NotificationsOn", R.string.NotificationsOn) : LocaleController.getString("NotificationsOff", R.string.NotificationsOff));
}
 
源代码13 项目: Telegram-FOSS   文件: TextCheckCell2.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName("android.widget.Switch");
    info.setCheckable(true);
    info.setChecked(checkBox.isChecked());
    info.setContentDescription(checkBox.isChecked() ? LocaleController.getString("NotificationsOn", R.string.NotificationsOn) : LocaleController.getString("NotificationsOff", R.string.NotificationsOff));
}
 
源代码14 项目: Telegram-FOSS   文件: EditTextBoldCursor.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName("android.widget.EditText");
    if (hintLayout != null) {
        info.setContentDescription(hintLayout.getText());
    }
}
 
源代码15 项目: Telegram   文件: TextCheckCell.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName("android.widget.Switch");
    info.setCheckable(true);
    info.setChecked(checkBox.isChecked());
    info.setContentDescription(checkBox.isChecked() ? LocaleController.getString("NotificationsOn", R.string.NotificationsOn) : LocaleController.getString("NotificationsOff", R.string.NotificationsOff));
}
 
源代码16 项目: Telegram   文件: TextCheckCell2.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName("android.widget.Switch");
    info.setCheckable(true);
    info.setChecked(checkBox.isChecked());
    info.setContentDescription(checkBox.isChecked() ? LocaleController.getString("NotificationsOn", R.string.NotificationsOn) : LocaleController.getString("NotificationsOff", R.string.NotificationsOff));
}
 
源代码17 项目: Telegram   文件: EditTextBoldCursor.java
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName("android.widget.EditText");
    if (hintLayout != null) {
        info.setContentDescription(hintLayout.getText());
    }
}
 
源代码18 项目: MultiSlider   文件: MultiSlider.java
@Override
public AccessibilityNodeInfo createAccessibilityNodeInfo(int thumbId) {
    AccessibilityNodeInfo info = null;
    if (thumbId == View.NO_ID) {
        // We are requested to create an AccessibilityNodeInfo describing
        // this View, i.e. the root of the virtual sub-tree. Note that the
        // host View has an AccessibilityNodeProvider which means that this
        // provider is responsible for creating the node info for that root.
        info = AccessibilityNodeInfo.obtain(MultiSlider.this);
        onInitializeAccessibilityNodeInfo(info);
        // Add the virtual children of the root View.
        final int childCount = mThumbs.size();
        for (int i = 0; i < childCount; i++) {
            info.addChild(MultiSlider.this, i);
        }
        if (mThumbs.size() == 1) {
            info.setScrollable(true);
            if (Build.VERSION.SDK_INT >= 21) {
                info.addAction(ACTION_SET_PROGRESS);
                info.addAction(ACTION_SCROLL_BACKWARD);
                info.addAction(ACTION_SCROLL_FORWARD);
            } else {
                info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
                info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
            }

        }

    } else {
        // Find the view that corresponds to the given id.
        Thumb thumb = mThumbs.get(thumbId);
        if (thumb == null) {
            return null;
        }
        // Obtain and initialize an AccessibilityNodeInfo with
        // information about the virtual view.
        info = AccessibilityNodeInfo.obtain(MultiSlider.this, thumbId);
        info.setClassName(thumb.getClass().getName());
        info.setParent(MultiSlider.this);
        info.setSource(MultiSlider.this, thumbId);
        info.setContentDescription("Multi-Slider thumb no:" + thumbId);

        if (Build.VERSION.SDK_INT >= 21) {
            info.addAction(ACTION_SET_PROGRESS);
            if (thumb.getPossibleMax() > thumb.value) {
                info.addAction(ACTION_SCROLL_BACKWARD);
            }
            if (thumb.getPossibleMax() > thumb.value) {
                info.addAction(ACTION_SCROLL_FORWARD);
            }

        } else {
            if (thumb.getPossibleMin() > thumb.value) {
                info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
            }
            if (thumb.getPossibleMax() > thumb.value) {
                info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
            }
        }


        if (thumb.getThumb() != null) {
            int[] loc = new int[2];
            getLocationOnScreen(loc);
            Rect rect = thumb.getThumb().copyBounds();
            rect.top += loc[1];
            rect.left += loc[0];
            rect.right += loc[0];
            rect.bottom += loc[1];
            info.setBoundsInScreen(rect);
            //TODO somehow this resuls in [0,0][0,0]. wonder check why
            //info.setBoundsInParent(rect);

        }

        info.setText(thumb.tag + ": " + thumb.value);
        info.setEnabled(thumb.isEnabled());
        if (Build.VERSION.SDK_INT >= 24) {
            info.setImportantForAccessibility(true);
        }
        info.setVisibleToUser(true);
        info.setScrollable(true);
    }
    return info;
}
 
@CalledByNative
private void setAccessibilityNodeInfoStringAttributes(AccessibilityNodeInfo node,
        String className, String contentDescription) {
    node.setClassName(className);
    node.setContentDescription(contentDescription);
}
 
@CalledByNative
private void setAccessibilityNodeInfoStringAttributes(AccessibilityNodeInfo node,
        String className, String contentDescription) {
    node.setClassName(className);
    node.setContentDescription(contentDescription);
}