NodeInfo tree working (besides litho nodes)
Summary: The second tree has access to all AX NodeInfo properties (they are not in the sidebar yet). Infrastructure set up to customize displayed information bassed on what is most useful. Descriptors for views updated to include AX functionality and non-view descriptors AX functions defaulted to null/empty. Non-view nodes (like Fragments, Window, Appication) no longer included in AX tree. Corresponding nodes will be highlighted (although not expanded) on click in either tree. Differential Revision: D8795800 fbshipit-source-id: cf2333f69bfecca3ff84aae62681c684dfa14bf3
This commit is contained in:
committed by
Facebook Github Bot
parent
9e673a07a8
commit
1c5ecce667
@@ -44,6 +44,12 @@ public class TextViewDescriptor extends NodeDescriptor<TextView> {
|
||||
return descriptor.getName(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAXName(TextView node) throws Exception {
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
return descriptor.getAXName(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getChildCount(TextView node) {
|
||||
return 0;
|
||||
@@ -54,6 +60,11 @@ public class TextViewDescriptor extends NodeDescriptor<TextView> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Object getAXChildAt(TextView node, int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<SonarObject>> getData(TextView node) throws Exception {
|
||||
final List<Named<SonarObject>> props = new ArrayList<>();
|
||||
@@ -76,6 +87,14 @@ public class TextViewDescriptor extends NodeDescriptor<TextView> {
|
||||
return props;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<SonarObject>> getAXData(TextView node) throws Exception {
|
||||
final List<Named<SonarObject>> props = new ArrayList<>();
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
props.addAll(descriptor.getAXData(node));
|
||||
return props;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(TextView node, String[] path, SonarDynamic value) throws Exception {
|
||||
switch (path[0]) {
|
||||
@@ -106,6 +125,12 @@ public class TextViewDescriptor extends NodeDescriptor<TextView> {
|
||||
return descriptor.getAttributes(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<String>> getAXAttributes(TextView node) throws Exception {
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
return descriptor.getAXAttributes(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHighlighted(TextView node, boolean selected) throws Exception {
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
|
||||
@@ -18,6 +18,7 @@ import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.support.v4.view.MarginLayoutParamsCompat;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
|
||||
import android.util.SparseArray;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
@@ -37,10 +38,12 @@ import com.facebook.sonar.plugins.inspector.NodeDescriptor;
|
||||
import com.facebook.sonar.plugins.inspector.Touch;
|
||||
import com.facebook.sonar.plugins.inspector.descriptors.utils.AccessibilityUtil;
|
||||
import com.facebook.sonar.plugins.inspector.descriptors.utils.EnumMapping;
|
||||
import com.facebook.sonar.plugins.inspector.descriptors.utils.ViewAccessibilityHelper;
|
||||
import com.facebook.stetho.common.android.ResourcesUtil;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@@ -78,6 +81,17 @@ public class ViewDescriptor extends NodeDescriptor<View> {
|
||||
return node.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAXName(View node) {
|
||||
AccessibilityNodeInfoCompat nodeInfo = ViewAccessibilityHelper.createNodeInfoFromView(node);
|
||||
if (nodeInfo == null) {
|
||||
return "NULL NODEINFO";
|
||||
}
|
||||
String name = nodeInfo.getClassName().toString();
|
||||
nodeInfo.recycle();
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getChildCount(View node) {
|
||||
return 0;
|
||||
@@ -88,6 +102,11 @@ public class ViewDescriptor extends NodeDescriptor<View> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Object getAXChildAt(View node, int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<SonarObject>> getData(View node) {
|
||||
final SonarObject.Builder viewProps =
|
||||
@@ -176,6 +195,11 @@ public class ViewDescriptor extends NodeDescriptor<View> {
|
||||
new Named<>("Accessibility", getAccessibilityData(node)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<SonarObject>> getAXData(View node) {
|
||||
return Arrays.asList(new Named<>("AX Properties", getAccessibilityData(node)));
|
||||
}
|
||||
|
||||
private static SonarObject getAccessibilityData(View view) {
|
||||
final SonarObject.Builder accessibilityProps = new SonarObject.Builder();
|
||||
|
||||
@@ -408,6 +432,10 @@ public class ViewDescriptor extends NodeDescriptor<View> {
|
||||
return attributes;
|
||||
}
|
||||
|
||||
public List<Named<String>> getAXAttributes(View node) throws Exception {
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String getResourceId(View node) {
|
||||
final int id = node.getId();
|
||||
|
||||
@@ -99,6 +99,12 @@ public class ViewGroupDescriptor extends NodeDescriptor<ViewGroup> {
|
||||
return descriptor.getName(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAXName(ViewGroup node) throws Exception {
|
||||
NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
return descriptor.getAXName(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getChildCount(ViewGroup node) {
|
||||
int childCount = 0;
|
||||
@@ -130,6 +136,21 @@ public class ViewGroupDescriptor extends NodeDescriptor<ViewGroup> {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Object getAXChildAt(ViewGroup node, int index) {
|
||||
for (int i = 0, count = node.getChildCount(); i < count; i++) {
|
||||
final View child = node.getChildAt(i);
|
||||
if (child instanceof HiddenNode) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i >= index) {
|
||||
return child;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<SonarObject>> getData(ViewGroup node) throws Exception {
|
||||
final List<Named<SonarObject>> props = new ArrayList<>();
|
||||
@@ -160,6 +181,14 @@ public class ViewGroupDescriptor extends NodeDescriptor<ViewGroup> {
|
||||
return props;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<SonarObject>> getAXData(ViewGroup node) throws Exception {
|
||||
final List<Named<SonarObject>> props = new ArrayList<>();
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
props.addAll(descriptor.getAXData(node));
|
||||
return props;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(ViewGroup node, String[] path, SonarDynamic value) throws Exception {
|
||||
switch (path[0]) {
|
||||
@@ -200,6 +229,12 @@ public class ViewGroupDescriptor extends NodeDescriptor<ViewGroup> {
|
||||
return descriptor.getAttributes(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Named<String>> getAXAttributes(ViewGroup node) throws Exception {
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
return descriptor.getAXAttributes(node);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHighlighted(ViewGroup node, boolean selected) throws Exception {
|
||||
final NodeDescriptor descriptor = descriptorForClass(View.class);
|
||||
|
||||
Reference in New Issue
Block a user