summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2018-03-20 18:24:23 -0700
committerNicolas Roard <nicolasroard@google.com>2018-03-20 18:24:23 -0700
commita04d97f1a846d8b3963646e1b920e3c9be09c1cf (patch)
tree1c6a4e147f2deffcf3968b323b4a6d7cd73f3953
parentdd8e1ade01a0b7aebce2d7373c54071848759653 (diff)
downloadsherpa-a04d97f1a846d8b3963646e1b920e3c9be09c1cf.tar.gz
Fixed issue with gone element in chains (wrongly adding margin)
Test: added ChainTest.testPackChainGone() and check175 in sherpa. Change-Id: Iba48dd3def8f004abefd8809fbaecc457ea331be Fixes: 73730675
-rw-r--r--solver/src/main/java/android/support/constraint/solver/widgets/Chain.java2
-rw-r--r--solver/src/test/java/android/support/constraint/solver/ChainTest.java35
2 files changed, 36 insertions, 1 deletions
diff --git a/solver/src/main/java/android/support/constraint/solver/widgets/Chain.java b/solver/src/main/java/android/support/constraint/solver/widgets/Chain.java
index 2202cc7..4fb3a24 100644
--- a/solver/src/main/java/android/support/constraint/solver/widgets/Chain.java
+++ b/solver/src/main/java/android/support/constraint/solver/widgets/Chain.java
@@ -153,7 +153,7 @@ class Chain {
int strength = SolverVariable.STRENGTH_LOW;
int margin = begin.getMargin();
- if (begin.mTarget != null && widget != first) {
+ if (begin.mTarget != null && widget != first && widget.getVisibility() != GONE) {
margin += begin.mTarget.getMargin();
}
diff --git a/solver/src/test/java/android/support/constraint/solver/ChainTest.java b/solver/src/test/java/android/support/constraint/solver/ChainTest.java
index 8fc02d4..ee4354e 100644
--- a/solver/src/test/java/android/support/constraint/solver/ChainTest.java
+++ b/solver/src/test/java/android/support/constraint/solver/ChainTest.java
@@ -28,6 +28,41 @@ import static org.testng.Assert.assertEquals;
public class ChainTest {
@Test
+ public void testPackChainGone() {
+ ConstraintWidgetContainer root = new ConstraintWidgetContainer(0, 0, 600, 600);
+ ConstraintWidget A = new ConstraintWidget(100, 20);
+ ConstraintWidget B = new ConstraintWidget(100, 20);
+ ConstraintWidget C = new ConstraintWidget(100, 20);
+ root.setDebugName("root");
+ A.setDebugName("A");
+ B.setDebugName("B");
+ C.setDebugName("C");
+ root.add(A);
+ root.add(B);
+ root.add(C);
+
+ A.connect(ConstraintAnchor.Type.LEFT, root, ConstraintAnchor.Type.LEFT, 100);
+ A.connect(ConstraintAnchor.Type.RIGHT, B, ConstraintAnchor.Type.LEFT);
+ B.connect(ConstraintAnchor.Type.LEFT, A, ConstraintAnchor.Type.RIGHT);
+ B.connect(ConstraintAnchor.Type.RIGHT, C, ConstraintAnchor.Type.LEFT);
+ C.connect(ConstraintAnchor.Type.LEFT, B, ConstraintAnchor.Type.RIGHT);
+ C.connect(ConstraintAnchor.Type.RIGHT, root, ConstraintAnchor.Type.RIGHT, 20);
+
+ A.setHorizontalChainStyle(ConstraintWidget.CHAIN_PACKED);
+ B.setGoneMargin(ConstraintAnchor.Type.RIGHT, 100);
+ C.setVisibility(ConstraintWidget.GONE);
+
+ root.layout();
+ System.out.println("A: " + A + " B: " + B + " C: " + C);
+ assertEquals(A.getLeft(), 200);
+ assertEquals(B.getLeft(), 300);
+ assertEquals(C.getLeft(), 400);
+ assertEquals(A.getWidth(), 100);
+ assertEquals(B.getWidth(), 100);
+ assertEquals(C.getWidth(), 0);
+ }
+
+ @Test
public void testSpreadInsideChain2() {
ConstraintWidgetContainer root = new ConstraintWidgetContainer(0, 0, 600, 600);
ConstraintWidget A = new ConstraintWidget(100, 20);