use of com.android.tools.idea.configurations.Configuration in project android by JetBrains.
the class CanvasResizeInteraction method end.
@Override
public void end(@SwingCoordinate int x, @SwingCoordinate int y, @InputEventMask int modifiers, boolean canceled) {
super.end(x, y, modifiers, canceled);
ScreenView screenView = myDesignSurface.getCurrentScreenView();
if (screenView == null) {
return;
}
// Set the surface in resize mode so it doesn't try to re-center the screen views all the time
screenView.getSurface().setResizeMode(false);
// When disabling the resize mode, add a render handler to call zoomToFit
screenView.getModel().addListener(new ModelListener() {
@Override
public void modelChanged(@NotNull NlModel model) {
}
@Override
public void modelRendered(@NotNull NlModel model) {
model.removeListener(this);
}
@Override
public void modelChangedOnLayout(@NotNull NlModel model, boolean animate) {
// Do nothing
}
});
int androidX = Coordinates.getAndroidX(screenView, x);
int androidY = Coordinates.getAndroidY(screenView, y);
if (canceled || androidX < 0 || androidY < 0) {
Configuration configuration = screenView.getConfiguration();
configuration.setEffectiveDevice(myOriginalDevice, myOriginalDeviceState);
} else {
int snapThreshold = Coordinates.getAndroidDimension(screenView, MAX_MATCH_DISTANCE);
Device deviceToSnap = snapToDevice(androidX, androidY, snapThreshold);
if (deviceToSnap != null) {
State deviceState = deviceToSnap.getState(androidX < androidY ? "Portrait" : "Landscape");
myDesignSurface.getConfiguration().setEffectiveDevice(deviceToSnap, deviceState);
} else {
screenView.getModel().overrideConfigurationScreenSize(androidX, androidY);
}
}
}
use of com.android.tools.idea.configurations.Configuration in project android by JetBrains.
the class ScreenView method switchDevice.
public void switchDevice() {
List<Device> devices = myModel.getFacet().getConfigurationManager().getDevices();
List<Device> applicable = Lists.newArrayList();
for (Device device : devices) {
if (HardwareConfigHelper.isNexus(device)) {
applicable.add(device);
}
}
Configuration configuration = getConfiguration();
Device currentDevice = configuration.getDevice();
for (int i = 0, n = applicable.size(); i < n; i++) {
if (applicable.get(i) == currentDevice) {
Device newDevice = applicable.get((i + 1) % applicable.size());
configuration.setDevice(newDevice, true);
break;
}
}
}
use of com.android.tools.idea.configurations.Configuration in project android by JetBrains.
the class LayoutTestUtilities method createScreen.
public static ScreenView createScreen(DesignSurface surface, NlModel model, SelectionModel selectionModel, double scale, @SwingCoordinate int x, @SwingCoordinate int y, Density density) {
Configuration configuration = mock(Configuration.class);
when(configuration.getDensity()).thenReturn(density);
when(configuration.getFile()).thenReturn(model.getFile().getVirtualFile());
when(configuration.getFullConfig()).thenReturn(new FolderConfiguration());
ScreenView screenView = mock(ScreenView.class);
when(screenView.getConfiguration()).thenReturn(configuration);
when(screenView.getModel()).thenReturn(model);
when(screenView.getScale()).thenReturn(scale);
when(screenView.getSelectionModel()).thenReturn(selectionModel);
when(screenView.getSize()).thenReturn(new Dimension());
when(screenView.getSurface()).thenReturn(surface);
when(screenView.getX()).thenReturn(x);
when(screenView.getY()).thenReturn(y);
when(surface.getScreenView(anyInt(), anyInt())).thenReturn(screenView);
return screenView;
}
use of com.android.tools.idea.configurations.Configuration in project android by JetBrains.
the class ResourceNotificationManagerTest method test.
public void test() {
@Language("XML") String xml;
// Setup sample project: a strings file, and a couple of layout file
xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" + " android:layout_width=\"match_parent\"\n" + " android:layout_height=\"match_parent\">\n" + " <!-- My comment -->\n" + " <TextView " + " android:layout_width=\"match_parent\"\n" + " android:layout_height=\"match_parent\"\n" + " android:text=\"@string/hello\" />\n" + "</FrameLayout>";
final XmlFile layout1 = (XmlFile) myFixture.addFileToProject("res/layout/my_layout1.xml", xml);
@SuppressWarnings("ConstantConditions") VirtualFile resourceDir = layout1.getParent().getParent().getVirtualFile();
assertNotNull(resourceDir);
xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" + " android:layout_width=\"match_parent\"\n" + " android:layout_height=\"match_parent\" />\n";
final XmlFile layout2 = (XmlFile) myFixture.addFileToProject("res/layout/my_layout2.xml", xml);
xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<resources>\n" + " <string name=\"hello\">Hello</string>\n" + "\n" + " <!-- Base application theme. -->\n" + " <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n" + " <!-- Customize your theme here. -->\n" + " <item name=\"android:colorBackground\">#ff0000</item>\n" + " </style>" + "</resources>";
final XmlFile values1 = (XmlFile) myFixture.addFileToProject("res/values/my_values1.xml", xml);
xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<resources>\n" + " \n" + "</resources>";
myFixture.addFileToProject("res/values/colors.xml", xml);
final Configuration configuration1 = myFacet.getConfigurationManager().getConfiguration(layout1.getVirtualFile());
final ResourceNotificationManager manager = ResourceNotificationManager.getInstance(getProject());
// Listener 1: Listens for changes in layout 1
final Ref<Boolean> called1 = new Ref<>(false);
final Ref<Set<Reason>> calledValue1 = new Ref<>();
ResourceChangeListener listener1 = new ResourceChangeListener() {
@Override
public void resourcesChanged(@NotNull Set<Reason> reason) {
called1.set(true);
calledValue1.set(reason);
}
};
// Listener 2: Only listens for general changes in the module
final Ref<Boolean> called2 = new Ref<>(false);
final Ref<Set<Reason>> calledValue2 = new Ref<>();
ResourceChangeListener listener2 = new ResourceChangeListener() {
@Override
public void resourcesChanged(@NotNull Set<Reason> reason) {
called2.set(true);
calledValue2.set(reason);
}
};
manager.addListener(listener1, myFacet, layout1, configuration1);
manager.addListener(listener2, myFacet, null, null);
// Make sure that when we're modifying multiple files, with complicated
// edits (that trigger full file rescans), we handle that scenario correctly.
clear(called1, calledValue1, called2, calledValue2);
// There's actually some special optimizations done via PsiResourceItem#recomputeValue
// to only mark the resource repository changed if the value has actually been looked
// up. This allows us to not recompute layout if you're editing some string that
// hasn't actually been looked up and rendered in a layout. In order to make sure
// that that optimization doesn't kick in here, we need to look up the value of
// the resource item first:
//noinspection ConstantConditions
assertEquals("#ff0000", configuration1.getResourceResolver().getStyle("AppTheme", false).getItem("colorBackground", true).getValue());
AndroidResourceUtil.createValueResource(getProject(), resourceDir, "color2", ResourceType.COLOR, "colors.xml", Collections.singletonList("values"), "#fa2395");
ensureCalled(called1, calledValue1, called2, calledValue2, Reason.RESOURCE_EDIT);
clear(called1, calledValue1, called2, calledValue2);
@SuppressWarnings("ConstantConditions") final XmlTag tag = values1.getDocument().getRootTag().getSubTags()[1].getSubTags()[0];
assertEquals("item", tag.getName());
WriteCommandAction.runWriteCommandAction(getProject(), new Runnable() {
@Override
public void run() {
tag.getValue().setEscapedText("@color/color2");
}
});
ensureCalled(called1, calledValue1, called2, calledValue2, Reason.RESOURCE_EDIT);
// First check: Modify the layout by changing @string/hello to @string/hello_world
// and verify that our listeners are called.
ResourceVersion version1 = manager.getCurrentVersion(myFacet, layout1, configuration1);
addText(layout1, "@string/hello^", "_world");
ensureCalled(called1, calledValue1, called2, calledValue2, Reason.EDIT);
ResourceVersion version2 = manager.getCurrentVersion(myFacet, layout1, configuration1);
assertFalse(version1.toString(), version1.equals(version2));
// Next check: Modify a <string> value definition in a values file
// and check that those changes are flagged too
clear(called1, calledValue1, called2, calledValue2);
ResourceVersion version3 = manager.getCurrentVersion(myFacet, layout1, configuration1);
addText(values1, "name=\"hello^\"", "_world");
ensureCalled(called1, calledValue1, called2, calledValue2, Reason.RESOURCE_EDIT);
ResourceVersion version4 = manager.getCurrentVersion(myFacet, layout1, configuration1);
assertFalse(version4.toString(), version3.equals(version4));
// Next check: Modify content in a comment and verify that no changes are fired
clear(called1, calledValue1, called2, calledValue2);
addText(layout1, "My ^comment", "new ");
ensureNotCalled(called1, called2);
// Check that editing text in a layout file has no effect
clear(called1, calledValue1, called2, calledValue2);
addText(layout1, " ^ <TextView", "abc");
ensureNotCalled(called1, called2);
// Make sure that's true for replacements too
replaceText(layout1, "^abc", "abc".length(), "def");
ensureNotCalled(called1, called2);
// ...and for deletions
removeText(layout1, "^def", "def".length());
ensureNotCalled(called1, called2);
// Check that editing text in a *values file* -does- have an effect
// Read the value first to ensure that we trigger it as a read (see comment above for previous
// resource resolver lookup)
//noinspection ConstantConditions
assertEquals("Hello", configuration1.getResourceResolver().findResValue("@string/hello_world", false).getValue());
addText(values1, "Hello^</string>", " World");
ensureCalled(called1, calledValue1, called2, calledValue2, Reason.RESOURCE_EDIT);
// Check that recreating AppResourceRepository object doesn't affect the ResourceNotificationManager
clear(called1, calledValue1, called2, calledValue2);
myFacet.refreshResources();
AndroidResourceUtil.createValueResource(getProject(), resourceDir, "color4", ResourceType.COLOR, "colors.xml", Collections.singletonList("values"), "#ff2300");
ensureCalled(called1, calledValue1, called2, calledValue2, Reason.RESOURCE_EDIT);
// Finally check that once we remove the listeners there are no more notifications
manager.removeListener(listener1, myFacet, layout1, configuration1);
manager.removeListener(listener2, myFacet, layout2, configuration1);
clear(called1, calledValue1, called2, calledValue2);
addText(layout1, "@string/hello_world^", "2");
ensureNotCalled(called1, called2);
// TODO: Check that editing a partial URL doesn't re-render
// Check module dependency triggers!
// TODO: Test that remove and replace editing also works as expected
}
use of com.android.tools.idea.configurations.Configuration in project android by JetBrains.
the class ConstraintUtilities method updateWidgetFromComponent.
/**
* Update the constraint widget with the component information (coming from XML)
*
* @param scene the scene of components. Can be null.
* @param constraintModel the constraint model we are working with
* @param widget constraint widget
* @param component the model component
* @return true if need to save the xml
*/
static boolean updateWidgetFromComponent(@Nullable Scene scene, @NotNull ConstraintModel constraintModel, @Nullable ConstraintWidget widget, @Nullable NlComponent component) {
if (component == null || widget == null) {
return false;
}
if (!(widget instanceof Guideline)) {
widget.setVisibility(component.getAndroidViewVisibility());
}
widget.setDebugName(component.getId());
Insets padding = component.getPadding(true);
WidgetsScene widgetsScene = constraintModel.getScene();
if (scene != null) {
// If the scene exists, use the bounds from it instead of from the NlComponent.
// This gives us animation on layout changes.
// Note: this is temporary, once the Scene interaction / painting is fully done we'll switch to it.
long time = System.currentTimeMillis();
SceneComponent sceneComponent = scene.getSceneComponent(component);
if (sceneComponent != null) {
widget.setDrawOrigin(sceneComponent.getDrawX(time), sceneComponent.getDrawY(time));
int w = sceneComponent.getDrawWidth(time);
int h = sceneComponent.getDrawHeight(time);
widget.setDimension(w, h);
return false;
}
}
if (widget instanceof ConstraintWidgetContainer) {
int paddingLeft = constraintModel.pxToDp(padding.left);
int paddingTop = constraintModel.pxToDp(padding.top);
int paddingRight = constraintModel.pxToDp(padding.right);
int paddingBottom = constraintModel.pxToDp(padding.bottom);
((ConstraintWidgetContainer) widget).setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
widget.setDimension(constraintModel.pxToDp(component.w) - paddingLeft - paddingRight, constraintModel.pxToDp(component.h) - paddingTop - paddingBottom);
} else {
widget.setDimension(constraintModel.pxToDp(component.w), constraintModel.pxToDp(component.h));
}
String absoluteWidth = component.getAttribute(SdkConstants.TOOLS_URI, ConvertToConstraintLayoutAction.ATTR_LAYOUT_CONVERSION_ABSOLUTE_WIDTH);
if (absoluteWidth != null) {
Configuration configuration = component.getModel().getConfiguration();
ResourceResolver resourceResolver = configuration.getResourceResolver();
int size = ViewEditor.resolveDimensionPixelSize(resourceResolver, absoluteWidth, configuration);
size = constraintModel.pxToDp(size);
widget.setWidth(size);
}
String absoluteHeight = component.getAttribute(SdkConstants.TOOLS_URI, ConvertToConstraintLayoutAction.ATTR_LAYOUT_CONVERSION_ABSOLUTE_HEIGHT);
if (absoluteHeight != null) {
Configuration configuration = component.getModel().getConfiguration();
ResourceResolver resourceResolver = configuration.getResourceResolver();
int size = ViewEditor.resolveDimensionPixelSize(resourceResolver, absoluteHeight, configuration);
size = constraintModel.pxToDp(size);
widget.setHeight(size);
}
widget.setMinWidth(constraintModel.pxToDp(component.getMinimumWidth()));
widget.setMinHeight(constraintModel.pxToDp(component.getMinimumHeight()));
NlComponent parent = component.getParent();
NlModel model = component.getModel();
if (parent != null) {
ConstraintWidget parentWidget = widgetsScene.getWidget(parent);
if (parentWidget instanceof WidgetContainer) {
WidgetContainer parentContainerWidget = (WidgetContainer) parentWidget;
if (widget.getParent() != parentContainerWidget) {
parentContainerWidget.add(widget);
}
}
}
// First set the origin of the widget
int x = constraintModel.pxToDp(component.x);
int y = constraintModel.pxToDp(component.y);
if (widget instanceof ConstraintWidgetContainer) {
x += constraintModel.pxToDp(padding.left);
y += constraintModel.pxToDp(padding.top);
}
WidgetContainer parentContainer = (WidgetContainer) widget.getParent();
if (parentContainer != null) {
if (!(parentContainer instanceof ConstraintWidgetContainer)) {
x = constraintModel.pxToDp(component.x - component.getParent().x);
y = constraintModel.pxToDp(component.y - component.getParent().y);
} else {
x -= parentContainer.getDrawX();
y -= parentContainer.getDrawY();
}
}
String absoluteX = component.getAttribute(SdkConstants.TOOLS_URI, ConvertToConstraintLayoutAction.ATTR_LAYOUT_CONVERSION_ABSOLUTE_X);
if (absoluteX != null) {
Configuration configuration = component.getModel().getConfiguration();
ResourceResolver resourceResolver = configuration.getResourceResolver();
int position = ViewEditor.resolveDimensionPixelSize(resourceResolver, absoluteX, configuration);
x = constraintModel.pxToDp(position);
}
String absoluteY = component.getAttribute(SdkConstants.TOOLS_URI, ConvertToConstraintLayoutAction.ATTR_LAYOUT_CONVERSION_ABSOLUTE_Y);
if (absoluteY != null) {
Configuration configuration = component.getModel().getConfiguration();
ResourceResolver resourceResolver = configuration.getResourceResolver();
int position = ViewEditor.resolveDimensionPixelSize(resourceResolver, absoluteY, configuration);
y = constraintModel.pxToDp(position);
}
if (scene == null) {
if (widget.getX() != x || widget.getY() != y) {
widget.setOrigin(x, y);
widget.forceUpdateDrawPosition();
}
}
boolean overrideDimension = false;
// FIXME: need to agree on the correct magic value for this rather than simply using zero.
String layout_width = component.getAttribute(SdkConstants.ANDROID_URI, SdkConstants.ATTR_LAYOUT_WIDTH);
if (component.w == 0 || getLayoutDimensionDpValue(component, layout_width) == 0) {
widget.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT);
} else if (layout_width != null && layout_width.equalsIgnoreCase(SdkConstants.VALUE_WRAP_CONTENT)) {
if (APPLY_MINIMUM_SIZE && widget.getWidth() < MINIMUM_SIZE && widget instanceof WidgetContainer && ((WidgetContainer) widget).getChildren().size() == 0) {
widget.setWidth(MINIMUM_SIZE);
widget.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.FIXED);
overrideDimension = true;
} else {
widget.setWrapWidth(widget.getWidth());
widget.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.WRAP_CONTENT);
}
} else if (layout_width != null && layout_width.equalsIgnoreCase(SdkConstants.VALUE_MATCH_PARENT)) {
if (isWidgetInsideConstraintLayout(widget)) {
if (widget.getAnchor(ConstraintAnchor.Type.LEFT).isConnected() && widget.getAnchor(ConstraintAnchor.Type.RIGHT).isConnected()) {
widget.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT);
} else {
widget.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.FIXED);
widget.setWidth(MINIMUM_SIZE_EXPAND);
int height = widget.getHeight();
ConstraintWidget.DimensionBehaviour verticalBehaviour = widget.getVerticalDimensionBehaviour();
if (height <= 1 && widget instanceof WidgetContainer) {
widget.setHeight(MINIMUM_SIZE_EXPAND);
}
ArrayList<ConstraintWidget> widgets = new ArrayList<>();
widgets.add(widget);
Scout.arrangeWidgets(Scout.Arrange.ExpandHorizontally, widgets, true);
widget.setHeight(height);
widget.setVerticalDimensionBehaviour(verticalBehaviour);
overrideDimension = true;
}
}
} else {
widget.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.FIXED);
}
String layout_height = component.getAttribute(SdkConstants.ANDROID_URI, SdkConstants.ATTR_LAYOUT_HEIGHT);
if (component.h == 0 || getLayoutDimensionDpValue(component, layout_height) == 0) {
widget.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT);
} else if (layout_height != null && layout_height.equalsIgnoreCase(SdkConstants.VALUE_WRAP_CONTENT)) {
if (APPLY_MINIMUM_SIZE && widget.getHeight() < MINIMUM_SIZE && widget instanceof WidgetContainer && ((WidgetContainer) widget).getChildren().size() == 0) {
widget.setHeight(MINIMUM_SIZE);
widget.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.FIXED);
overrideDimension = true;
} else {
widget.setWrapHeight(widget.getHeight());
widget.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.WRAP_CONTENT);
}
} else if (layout_height != null && layout_height.equalsIgnoreCase(SdkConstants.VALUE_MATCH_PARENT)) {
if (isWidgetInsideConstraintLayout(widget)) {
if ((widget.getAnchor(ConstraintAnchor.Type.TOP).isConnected() && widget.getAnchor(ConstraintAnchor.Type.BOTTOM).isConnected())) {
widget.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT);
} else {
widget.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.FIXED);
widget.setHeight(MINIMUM_SIZE_EXPAND);
int width = widget.getWidth();
ConstraintWidget.DimensionBehaviour horizontalBehaviour = widget.getHorizontalDimensionBehaviour();
if (width <= 1 && widget instanceof WidgetContainer) {
widget.setWidth(MINIMUM_SIZE_EXPAND);
}
ArrayList<ConstraintWidget> widgets = new ArrayList<>();
widgets.add(widget);
Scout.arrangeWidgets(Scout.Arrange.ExpandVertically, widgets, true);
widget.setWidth(width);
widget.setHorizontalDimensionBehaviour(horizontalBehaviour);
overrideDimension = true;
}
}
} else {
widget.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.FIXED);
}
widget.setBaselineDistance(constraintModel.pxToDp(component.getBaseline()));
widget.resetAnchors();
String left1 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_LEFT_TO_LEFT_OF);
String left2 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_LEFT_TO_RIGHT_OF);
String right1 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_RIGHT_TO_LEFT_OF);
String right2 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_RIGHT_TO_RIGHT_OF);
String top1 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_TOP_TO_TOP_OF);
String top2 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_TOP_TO_BOTTOM_OF);
String bottom1 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_BOTTOM_TO_TOP_OF);
String bottom2 = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_BOTTOM_TO_BOTTOM_OF);
String baseline = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_BASELINE_TO_BASELINE_OF);
String ratio = component.getAttribute(SdkConstants.SHERPA_URI, SdkConstants.ATTR_LAYOUT_DIMENSION_RATIO);
WidgetCompanion companion = (WidgetCompanion) widget.getCompanionWidget();
companion.getWidgetProperties().clear();
companion.getWidgetProperties().setDimensionRatio(ratio);
setMarginType(ConstraintAnchor.Type.LEFT, component, widget);
setMarginType(ConstraintAnchor.Type.RIGHT, component, widget);
setMarginType(ConstraintAnchor.Type.TOP, component, widget);
setMarginType(ConstraintAnchor.Type.BOTTOM, component, widget);
setTarget(model, widgetsScene, left1, widget, ConstraintAnchor.Type.LEFT, ConstraintAnchor.Type.LEFT);
setStartMargin(left1, component, widget);
setTarget(model, widgetsScene, left2, widget, ConstraintAnchor.Type.LEFT, ConstraintAnchor.Type.RIGHT);
setStartMargin(left2, component, widget);
setTarget(model, widgetsScene, right1, widget, ConstraintAnchor.Type.RIGHT, ConstraintAnchor.Type.LEFT);
setEndMargin(right1, component, widget);
setTarget(model, widgetsScene, right2, widget, ConstraintAnchor.Type.RIGHT, ConstraintAnchor.Type.RIGHT);
setEndMargin(right2, component, widget);
setTarget(model, widgetsScene, top1, widget, ConstraintAnchor.Type.TOP, ConstraintAnchor.Type.TOP);
setTopMargin(top1, component, widget);
setTarget(model, widgetsScene, top2, widget, ConstraintAnchor.Type.TOP, ConstraintAnchor.Type.BOTTOM);
setTopMargin(top2, component, widget);
setTarget(model, widgetsScene, bottom1, widget, ConstraintAnchor.Type.BOTTOM, ConstraintAnchor.Type.TOP);
setBottomMargin(bottom1, component, widget);
setTarget(model, widgetsScene, bottom2, widget, ConstraintAnchor.Type.BOTTOM, ConstraintAnchor.Type.BOTTOM);
setBottomMargin(bottom2, component, widget);
setTarget(model, widgetsScene, baseline, widget, ConstraintAnchor.Type.BASELINE, ConstraintAnchor.Type.BASELINE);
setBias(SdkConstants.ATTR_LAYOUT_HORIZONTAL_BIAS, component, widget);
setBias(SdkConstants.ATTR_LAYOUT_VERTICAL_BIAS, component, widget);
setDimensionRatio(SdkConstants.ATTR_LAYOUT_DIMENSION_RATIO, component, widget);
setChainStyle(SdkConstants.ATTR_LAYOUT_HORIZONTAL_CHAIN_STYLE, component, widget);
setChainStyle(SdkConstants.ATTR_LAYOUT_VERTICAL_CHAIN_STYLE, component, widget);
setChainWeight(SdkConstants.ATTR_LAYOUT_HORIZONTAL_WEIGHT, component, widget);
setChainWeight(SdkConstants.ATTR_LAYOUT_VERTICAL_WEIGHT, component, widget);
if (widget instanceof Guideline) {
Guideline guideline = (Guideline) widget;
setGuideline(component, guideline);
}
// Update text decorator
WidgetDecorator decorator = companion.getWidgetDecorator(WidgetDecorator.BLUEPRINT_STYLE);
if (decorator != null && decorator instanceof TextWidget) {
TextWidget textWidget = (TextWidget) decorator;
textWidget.setText(getResolvedText(component));
Configuration configuration = component.getModel().getConfiguration();
ResourceResolver resourceResolver = configuration.getResourceResolver();
Integer size = null;
if (resourceResolver != null) {
String textSize = component.getAttribute(SdkConstants.ANDROID_URI, SdkConstants.ATTR_TEXT_SIZE);
if (textSize != null) {
size = ViewEditor.resolveDimensionPixelSize(resourceResolver, textSize, configuration);
}
}
if (size == null) {
// With the specified string, this method cannot return null
//noinspection ConstantConditions
size = ViewEditor.resolveDimensionPixelSize(resourceResolver, "15sp", configuration);
}
String alignment = component.getAttribute(SdkConstants.ANDROID_URI, SdkConstants.ATTR_TEXT_ALIGNMENT);
textWidget.setTextAlignment((alignment == null) ? TextWidget.TEXT_ALIGNMENT_VIEW_START : alignmentMap.get(alignment));
String single = component.getAttribute(SdkConstants.ANDROID_URI, SdkConstants.ATTR_SINGLE_LINE);
textWidget.setSingleLine(Boolean.parseBoolean(single));
// Cannot be null, see previous condition
//noinspection ConstantConditions
textWidget.setTextSize(constraintModel.pxToDp(size));
}
// if true, need to update the XML
return overrideDimension;
}
Aggregations