aboutsummaryrefslogtreecommitdiff
path: root/validator/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'validator/src/com/android')
-rw-r--r--validator/src/com/android/tools/idea/validator/ValidatorResult.java20
-rw-r--r--validator/src/com/android/tools/idea/validator/ValidatorUtil.java4
-rw-r--r--validator/src/com/android/tools/idea/validator/hierarchy/CustomHierarchyHelper.java18
3 files changed, 37 insertions, 5 deletions
diff --git a/validator/src/com/android/tools/idea/validator/ValidatorResult.java b/validator/src/com/android/tools/idea/validator/ValidatorResult.java
index 7f25d46489..9d708b5bdf 100644
--- a/validator/src/com/android/tools/idea/validator/ValidatorResult.java
+++ b/validator/src/com/android/tools/idea/validator/ValidatorResult.java
@@ -21,6 +21,7 @@ import com.android.tools.idea.validator.ValidatorData.Level;
import com.android.tools.layoutlib.annotations.NotNull;
import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
import java.util.ArrayList;
import java.util.List;
@@ -35,14 +36,21 @@ import com.google.common.collect.ImmutableBiMap;
public class ValidatorResult {
@NotNull private final ImmutableBiMap<Long, View> mSrcMap;
+ @NotNull private final ImmutableBiMap<Long, AccessibilityNodeInfo> mNodeInfoMap;
@NotNull private final ArrayList<Issue> mIssues;
@NotNull private final Metric mMetric;
/**
* Please use {@link Builder} for creating results.
*/
- private ValidatorResult(BiMap<Long, View> srcMap, ArrayList<Issue> issues, Metric metric) {
+ private ValidatorResult(BiMap<Long, View> srcMap,
+ BiMap<Long, AccessibilityNodeInfo> nodeInfoMap,
+ ArrayList<Issue> issues,
+ Metric metric) {
mSrcMap = ImmutableBiMap.<Long, View>builder().putAll(srcMap).build();
+ mNodeInfoMap = ImmutableBiMap.<Long, AccessibilityNodeInfo>builder()
+ .putAll(nodeInfoMap)
+ .build();
mIssues = issues;
mMetric = metric;
}
@@ -55,6 +63,13 @@ public class ValidatorResult {
}
/**
+ * @return the map from source ID to AccessibilityNodeInfo.
+ */
+ public ImmutableBiMap<Long, AccessibilityNodeInfo> getNodeInfoMap() {
+ return mNodeInfoMap;
+ }
+
+ /**
* @return list of issues.
*/
public List<Issue> getIssues() {
@@ -89,11 +104,12 @@ public class ValidatorResult {
public static class Builder {
@NotNull public final BiMap<Long, View> mSrcMap = HashBiMap.create();
+ @NotNull public final BiMap<Long, AccessibilityNodeInfo> mNodeInfoMap = HashBiMap.create();
@NotNull public final ArrayList<Issue> mIssues = new ArrayList<>();
@NotNull public final Metric mMetric = new Metric();
public ValidatorResult build() {
- return new ValidatorResult(mSrcMap, mIssues, mMetric);
+ return new ValidatorResult(mSrcMap, mNodeInfoMap, mIssues, mMetric);
}
}
diff --git a/validator/src/com/android/tools/idea/validator/ValidatorUtil.java b/validator/src/com/android/tools/idea/validator/ValidatorUtil.java
index 6078046de5..fa2862d191 100644
--- a/validator/src/com/android/tools/idea/validator/ValidatorUtil.java
+++ b/validator/src/com/android/tools/idea/validator/ValidatorUtil.java
@@ -83,8 +83,6 @@ public class ValidatorUtil {
* uses be redirected.
*/
StringManager.setResourceBundleProvider(locale -> ResourceBundle.getBundle("strings"));
- // Enable using AccessibilityNodeInfo in addition to View for accessibility testing
- AccessibilityHierarchyAndroid.viewOverlayEnabled = true;
}
// Visible for testing.
@@ -130,7 +128,9 @@ public class ValidatorUtil {
try {
hierarchy.mView = AccessibilityHierarchyAndroid
.newBuilder(view)
+ .enableViewOverlay()
.setViewOriginMap(builder.mSrcMap)
+ .setNodeInfoOriginMap(builder.mNodeInfoMap)
.setObtainCharacterLocations(LayoutValidator.obtainCharacterLocations())
.setCharacterLocationArgMaxLength(CHARACTER_LOCATION_ARG_MAX_LENGTH)
.setCustomViewBuilder(new CustomViewBuilderAndroid() {
diff --git a/validator/src/com/android/tools/idea/validator/hierarchy/CustomHierarchyHelper.java b/validator/src/com/android/tools/idea/validator/hierarchy/CustomHierarchyHelper.java
index eee2f32c36..5c8b2e9a39 100644
--- a/validator/src/com/android/tools/idea/validator/hierarchy/CustomHierarchyHelper.java
+++ b/validator/src/com/android/tools/idea/validator/hierarchy/CustomHierarchyHelper.java
@@ -48,13 +48,29 @@ public class CustomHierarchyHelper {
// This is required as layoutlib does not know the support library such as
// MaterialButton. LayoutlibCallback calls for studio which understands all the maven
// pulled library.
- Class button = callback.findClass(
+ Class<?> button = callback.findClass(
"com.google.android.material.button.MaterialButton");
if (button.isInstance(fromView)) {
Method isCheckable = button.getMethod("isCheckable");
Object toReturn = isCheckable.invoke(fromView);
return (toReturn instanceof Boolean) && ((Boolean) toReturn);
}
+
+ Class<?> card = callback.findClass(
+ "com.google.android.material.card.MaterialCardView");
+ if (card.isInstance(fromView)) {
+ Method isCheckable = card.getMethod("isCheckable");
+ Object toReturn = isCheckable.invoke(fromView);
+ return (toReturn instanceof Boolean) && ((Boolean) toReturn);
+ }
+
+ Class<?> chip = callback.findClass(
+ "com.google.android.material.chip.Chip");
+ if (chip.isInstance(fromView)) {
+ Method isCheckable = chip.getMethod("isCheckable");
+ Object toReturn = isCheckable.invoke(fromView);
+ return (toReturn instanceof Boolean) && ((Boolean) toReturn);
+ }
} catch (ClassNotFoundException |
NoSuchMethodException |
IllegalAccessException |