Files
flipper/android/plugins/inspector/descriptors/TextViewDescriptor.java
Sara Valderrama 1c5ecce667 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
2018-07-12 09:33:21 -07:00

158 lines
4.8 KiB
Java

/*
* Copyright (c) 2018-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the LICENSE
* file in the root directory of this source tree.
*
*/
package com.facebook.sonar.plugins.inspector.descriptors;
import static com.facebook.sonar.plugins.inspector.InspectorValue.Type.Color;
import static com.facebook.sonar.plugins.inspector.InspectorValue.Type.Number;
import static com.facebook.sonar.plugins.inspector.InspectorValue.Type.Text;
import android.view.View;
import android.widget.TextView;
import com.facebook.sonar.core.SonarDynamic;
import com.facebook.sonar.core.SonarObject;
import com.facebook.sonar.plugins.inspector.InspectorValue;
import com.facebook.sonar.plugins.inspector.Named;
import com.facebook.sonar.plugins.inspector.NodeDescriptor;
import com.facebook.sonar.plugins.inspector.Touch;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
public class TextViewDescriptor extends NodeDescriptor<TextView> {
@Override
public void init(TextView node) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(View.class);
descriptor.init(node);
}
@Override
public String getId(TextView node) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(View.class);
return descriptor.getId(node);
}
@Override
public String getName(TextView node) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(View.class);
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;
}
@Override
public @Nullable Object getChildAt(TextView node, int index) {
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<>();
final NodeDescriptor descriptor = descriptorForClass(View.class);
props.add(
0,
new Named<>(
"TextView",
new SonarObject.Builder()
.put("text", InspectorValue.mutable(Text, node.getText().toString()))
.put(
"textColor",
InspectorValue.mutable(Color, node.getTextColors().getDefaultColor()))
.put("textSize", InspectorValue.mutable(Number, node.getTextSize()))
.build()));
props.addAll(descriptor.getData(node));
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]) {
case "TextView":
switch (path[1]) {
case "text":
node.setText(value.asString());
break;
case "textColor":
node.setTextColor(value.asInt());
break;
case "textSize":
node.setTextSize(value.asInt());
break;
}
break;
default:
final NodeDescriptor descriptor = descriptorForClass(View.class);
descriptor.setValue(node, path, value);
break;
}
invalidate(node);
}
@Override
public List<Named<String>> getAttributes(TextView node) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(View.class);
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);
descriptor.setHighlighted(node, selected);
}
@Override
public void hitTest(TextView node, Touch touch) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(View.class);
descriptor.hitTest(node, touch);
}
@Override
public @Nullable String getDecoration(TextView node) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(View.class);
return descriptor.getDecoration(node);
}
@Override
public boolean matches(String query, TextView node) throws Exception {
final NodeDescriptor descriptor = descriptorForClass(Object.class);
return descriptor.matches(query, node);
}
}