aboutsummaryrefslogtreecommitdiffstats
path: root/lint
diff options
context:
space:
mode:
Diffstat (limited to 'lint')
-rw-r--r--lint/libs/lint_api/src/com/android/tools/lint/detector/api/LintConstants.java5
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java7
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/accessibility.xml3
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>