diff options
3 files changed, 13 insertions, 2 deletions
diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/LintConstants.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/LintConstants.java index 47a52c0..a0ff760 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/LintConstants.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/LintConstants.java @@ -175,6 +175,7 @@ public class LintConstants { public static final String ATTR_IME_ACTION_LABEL = "imeActionLabel"; //$NON-NLS-1$ public static final String ATTR_PRIVATE_IME_OPTIONS = "privateImeOptions"; //$NON-NLS-1$ public static final String VALUE_NONE = "none"; //$NON-NLS-1$ + public static final String VALUE_NO = "no"; //$NON-NLS-1$ public static final String ATTR_NUMERIC = "numeric"; //$NON-NLS-1$ public static final String ATTR_IME_ACTION_ID = "imeActionId"; //$NON-NLS-1$ public static final String ATTR_IME_OPTIONS = "imeOptions"; //$NON-NLS-1$ @@ -190,7 +191,9 @@ public class LintConstants { public static final String ATTR_AUTO_TEXT = "autoText"; //$NON-NLS-1$ public static final String ATTR_ENABLED = "enabled"; //$NON-NLS-1$ public static final String ATTR_SINGLE_LINE = "singleLine"; //$NON-NLS-1$ - public static final String ATTR_SCALE_TYPE = "scaleType"; //$NON-NLS-1$ + public static final String ATTR_SCALE_TYPE = "scaleType"; //$NON-NLS-1$ + public static final String ATTR_IMPORTANT_FOR_ACCESSIBILITY = + "importantForAccessibility"; //$NON-NLS-1$ // AbsoluteLayout layout params public static final String ATTR_LAYOUT_Y = "layout_y"; //$NON-NLS-1$ diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java index 323f88a..e1be383 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java @@ -18,8 +18,10 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.ANDROID_URI; import static com.android.tools.lint.detector.api.LintConstants.ATTR_CONTENT_DESCRIPTION; +import static com.android.tools.lint.detector.api.LintConstants.ATTR_IMPORTANT_FOR_ACCESSIBILITY; import static com.android.tools.lint.detector.api.LintConstants.IMAGE_BUTTON; import static com.android.tools.lint.detector.api.LintConstants.IMAGE_VIEW; +import static com.android.tools.lint.detector.api.LintConstants.VALUE_NO; import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; @@ -78,6 +80,11 @@ public class AccessibilityDetector extends LayoutDetector { @Override public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (!element.hasAttributeNS(ANDROID_URI, ATTR_CONTENT_DESCRIPTION)) { + // Ignore views that are explicitly not important for accessibility + if (VALUE_NO.equals(element.getAttributeNS(ANDROID_URI, + ATTR_IMPORTANT_FOR_ACCESSIBILITY))) { + return; + } context.report(ISSUE, element, context.getLocation(element), "[Accessibility] Missing contentDescription attribute on image", null); } else { diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/accessibility.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/accessibility.xml index 7afb182..c00a880 100644 --- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/accessibility.xml +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/accessibility.xml @@ -2,7 +2,8 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/newlinear" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <ImageView android:id="@+id/android_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/android_button" android:focusable="false" android:clickable="false" android:layout_weight="1.0" /> - <ImageButton android:id="@+id/android_logo2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/android_button" android:focusable="false" android:clickable="false" android:layout_weight="1.0" /> + <ImageButton android:importantForAccessibility="yes" android:id="@+id/android_logo2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/android_button" android:focusable="false" android:clickable="false" android:layout_weight="1.0" /> <Button android:text="Button" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:id="@+android:id/summary" android:contentDescription="@string/label" /> + <ImageButton android:importantForAccessibility="no" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/android_button" android:focusable="false" android:clickable="false" android:layout_weight="1.0" /> </LinearLayout> |