diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/DescriptorMapping.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/DescriptorMapping.java index 99144ad45..bef395826 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/DescriptorMapping.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/DescriptorMapping.java @@ -13,6 +13,7 @@ import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import com.facebook.flipper.core.FlipperConnection; @@ -22,6 +23,7 @@ import com.facebook.flipper.plugins.inspector.descriptors.DialogDescriptor; import com.facebook.flipper.plugins.inspector.descriptors.DialogFragmentDescriptor; import com.facebook.flipper.plugins.inspector.descriptors.DrawableDescriptor; import com.facebook.flipper.plugins.inspector.descriptors.FragmentDescriptor; +import com.facebook.flipper.plugins.inspector.descriptors.ImageViewDescriptor; import com.facebook.flipper.plugins.inspector.descriptors.ObjectDescriptor; import com.facebook.flipper.plugins.inspector.descriptors.SupportDialogFragmentDescriptor; import com.facebook.flipper.plugins.inspector.descriptors.SupportFragmentDescriptor; @@ -52,6 +54,7 @@ public class DescriptorMapping { mapping.register(ViewGroup.class, new ViewGroupDescriptor()); mapping.register(View.class, new ViewDescriptor()); mapping.register(TextView.class, new TextViewDescriptor()); + mapping.register(ImageView.class, new ImageViewDescriptor()); mapping.register(Drawable.class, new DrawableDescriptor()); mapping.register(Dialog.class, new DialogDescriptor()); mapping.register(android.app.Fragment.class, new FragmentDescriptor()); diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ImageViewDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ImageViewDescriptor.java new file mode 100644 index 000000000..5e58b5cb7 --- /dev/null +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ImageViewDescriptor.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * 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.flipper.plugins.inspector.descriptors; + +import android.view.View; +import android.widget.ImageView; +import com.facebook.flipper.core.FlipperDynamic; +import com.facebook.flipper.core.FlipperObject; +import com.facebook.flipper.plugins.inspector.Named; +import com.facebook.flipper.plugins.inspector.NodeDescriptor; +import com.facebook.flipper.plugins.inspector.SetDataOperations; +import com.facebook.flipper.plugins.inspector.Touch; +import com.facebook.flipper.plugins.inspector.descriptors.utils.EnumMapping; +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; + +public class ImageViewDescriptor extends NodeDescriptor { + + private static final EnumMapping sScaleTypeMapping = + new EnumMapping("CENTER") { + { + put("CENTER", ImageView.ScaleType.CENTER); + put("CENTER_CROP", ImageView.ScaleType.CENTER_CROP); + put("CENTER_INSIDE", ImageView.ScaleType.CENTER_INSIDE); + put("FIT_CENTER", ImageView.ScaleType.FIT_CENTER); + put("FIT_END", ImageView.ScaleType.FIT_END); + put("FIT_START", ImageView.ScaleType.FIT_START); + put("FIT_XY", ImageView.ScaleType.FIT_XY); + put("MATRIX", ImageView.ScaleType.MATRIX); + } + }; + + @Override + public void init(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + descriptor.init(node); + } + + @Override + public String getId(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getId(node); + } + + @Override + public String getName(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getName(node); + } + + @Override + public String getAXName(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getAXName(node); + } + + @Override + public int getChildCount(ImageView node) { + return 0; + } + + @Override + public @Nullable Object getChildAt(ImageView node, int index) { + return null; + } + + @Override + public @Nullable Object getAXChildAt(ImageView node, int index) { + return null; + } + + @Override + public List> getData(ImageView node) throws Exception { + final List> props = new ArrayList<>(); + final NodeDescriptor descriptor = descriptorForClass(View.class); + + props.add( + 0, + new Named<>( + "ImageView", + new FlipperObject.Builder() + .put("scaleType", sScaleTypeMapping.toPicker(node.getScaleType())) + .build())); + + props.addAll(descriptor.getData(node)); + + return props; + } + + @Override + public List> getAXData(ImageView node) throws Exception { + final List> props = new ArrayList<>(); + final NodeDescriptor descriptor = descriptorForClass(View.class); + props.addAll(descriptor.getAXData(node)); + return props; + } + + @Override + public void setValue( + ImageView node, + String[] path, + @Nullable SetDataOperations.FlipperValueHint kind, + FlipperDynamic value) + throws Exception { + switch (path[0]) { + case "ImageView": + switch (path[1]) { + case "scaleType": + node.setScaleType(sScaleTypeMapping.get(value.asString())); + break; + } + break; + default: + final NodeDescriptor descriptor = descriptorForClass(View.class); + descriptor.setValue(node, path, kind, value); + break; + } + invalidate(node); + } + + @Override + public List> getAttributes(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getAttributes(node); + } + + @Override + public List> getAXAttributes(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getAXAttributes(node); + } + + @Override + public FlipperObject getExtraInfo(ImageView node) { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getExtraInfo(node); + } + + @Override + public void setHighlighted(ImageView node, boolean selected, boolean isAlignmentMode) + throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + descriptor.setHighlighted(node, selected, isAlignmentMode); + } + + @Override + public void hitTest(ImageView node, Touch touch) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + descriptor.hitTest(node, touch); + } + + @Override + public void axHitTest(ImageView node, Touch touch) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + descriptor.axHitTest(node, touch); + } + + @Override + public @Nullable String getDecoration(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getDecoration(node); + } + + @Override + public @Nullable String getAXDecoration(ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(View.class); + return descriptor.getAXDecoration(node); + } + + @Override + public boolean matches(String query, ImageView node) throws Exception { + final NodeDescriptor descriptor = descriptorForClass(Object.class); + return descriptor.matches(query, node); + } +} diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewDescriptor.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewDescriptor.java index 743e0b510..fcdfea5ec 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewDescriptor.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/ViewDescriptor.java @@ -698,8 +698,8 @@ public class ViewDescriptor extends NodeDescriptor { } } - private static final EnumMapping sVisibilityMapping = - new EnumMapping("VISIBLE") { + private static final EnumMapping sVisibilityMapping = + new EnumMapping("VISIBLE") { { put("VISIBLE", View.VISIBLE); put("INVISIBLE", View.INVISIBLE); @@ -707,8 +707,8 @@ public class ViewDescriptor extends NodeDescriptor { } }; - private static final EnumMapping sLayoutDirectionMapping = - new EnumMapping("LAYOUT_DIRECTION_INHERIT") { + private static final EnumMapping sLayoutDirectionMapping = + new EnumMapping("LAYOUT_DIRECTION_INHERIT") { { put("LAYOUT_DIRECTION_INHERIT", View.LAYOUT_DIRECTION_INHERIT); put("LAYOUT_DIRECTION_LOCALE", View.LAYOUT_DIRECTION_LOCALE); @@ -717,8 +717,8 @@ public class ViewDescriptor extends NodeDescriptor { } }; - private static final EnumMapping sTextDirectionMapping = - new EnumMapping("TEXT_DIRECTION_INHERIT") { + private static final EnumMapping sTextDirectionMapping = + new EnumMapping("TEXT_DIRECTION_INHERIT") { { put("TEXT_DIRECTION_INHERIT", View.TEXT_DIRECTION_INHERIT); put("TEXT_DIRECTION_FIRST_STRONG", View.TEXT_DIRECTION_FIRST_STRONG); @@ -731,8 +731,8 @@ public class ViewDescriptor extends NodeDescriptor { } }; - private static final EnumMapping sTextAlignmentMapping = - new EnumMapping("TEXT_ALIGNMENT_INHERIT") { + private static final EnumMapping sTextAlignmentMapping = + new EnumMapping("TEXT_ALIGNMENT_INHERIT") { { put("TEXT_ALIGNMENT_INHERIT", View.TEXT_ALIGNMENT_INHERIT); put("TEXT_ALIGNMENT_GRAVITY", View.TEXT_ALIGNMENT_GRAVITY); @@ -744,8 +744,8 @@ public class ViewDescriptor extends NodeDescriptor { } }; - private static final EnumMapping sGravityMapping = - new EnumMapping("NO_GRAVITY") { + private static final EnumMapping sGravityMapping = + new EnumMapping("NO_GRAVITY") { { put("NO_GRAVITY", Gravity.NO_GRAVITY); put("LEFT", Gravity.LEFT); diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java index 48be0ff7f..10b4311c9 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java @@ -37,8 +37,8 @@ public final class AccessibilityUtil { private AccessibilityUtil() {} - public static final EnumMapping sAccessibilityActionMapping = - new EnumMapping("UNKNOWN") { + public static final EnumMapping sAccessibilityActionMapping = + new EnumMapping("UNKNOWN") { { put("FOCUS", AccessibilityNodeInfoCompat.ACTION_FOCUS); put("CLEAR_FOCUS", AccessibilityNodeInfoCompat.ACTION_CLEAR_FOCUS); @@ -72,8 +72,8 @@ public final class AccessibilityUtil { } }; - public static final EnumMapping sImportantForAccessibilityMapping = - new EnumMapping("AUTO") { + public static final EnumMapping sImportantForAccessibilityMapping = + new EnumMapping("AUTO") { { put("AUTO", View.IMPORTANT_FOR_ACCESSIBILITY_AUTO); put("NO", View.IMPORTANT_FOR_ACCESSIBILITY_NO); diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/EnumMapping.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/EnumMapping.java index 051e7b055..ccf0df1ad 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/EnumMapping.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/EnumMapping.java @@ -14,24 +14,24 @@ import androidx.collection.ArrayMap; import androidx.collection.SimpleArrayMap; import com.facebook.flipper.plugins.inspector.InspectorValue; -public class EnumMapping { - private final ArrayMap mMapping = new ArrayMap<>(); +public class EnumMapping { + private final ArrayMap mMapping = new ArrayMap<>(); private final String mDefaultKey; public EnumMapping(final String defaultKey) { mDefaultKey = defaultKey; } - public void put(final String s, final int i) { + public void put(final String s, final T i) { mMapping.put(s, i); } - public InspectorValue get(final int i) { + public InspectorValue get(final T i) { return get(i, true); } - public static String findKeyForValue( - SimpleArrayMap mapping, String mDefaultValue, int currentValue) { + public static String findKeyForValue( + SimpleArrayMap mapping, String mDefaultValue, T currentValue) { for (int i = 0, count = mapping.size(); i < count; i++) { if (mapping.valueAt(i).equals(currentValue)) { return mapping.keyAt(i); @@ -40,33 +40,33 @@ public class EnumMapping { return mDefaultValue; } - public InspectorValue get(final int i, final boolean mutable) { + public InspectorValue get(final T i, final boolean mutable) { String value = findKeyForValue(mMapping, mDefaultKey, i); return mutable ? InspectorValue.mutable(Enum, value) : InspectorValue.immutable(Enum, value); } - public int get(final String s) { + public T get(final String s) { if (mMapping.containsKey(s)) { return mMapping.get(s); } return mMapping.get(mDefaultKey); } - public InspectorValue toPicker() { + public InspectorValue toPicker() { return toPicker(true); } - public InspectorValue toPicker(final boolean mutable) { + public InspectorValue toPicker(final boolean mutable) { return mutable ? InspectorValue.mutable(Picker, new InspectorValue.Picker(mMapping.keySet(), mDefaultKey)) : InspectorValue.immutable(Enum, mDefaultKey); } - public InspectorValue toPicker(final int currentValue) { + public InspectorValue toPicker(final T currentValue) { return toPicker(currentValue, true); } - public InspectorValue toPicker(final int currentValue, final boolean mutable) { + public InspectorValue toPicker(final T currentValue, final boolean mutable) { String value = findKeyForValue(mMapping, mDefaultKey, currentValue); return mutable ? InspectorValue.mutable(Picker, new InspectorValue.Picker(mMapping.keySet(), value))